翼度科技»论坛 编程开发 .net 查看内容

第31篇 实现数据同步的webapi接口

9

主题

9

帖子

27

积分

新手上路

Rank: 1

积分
27
调用接口实现数据同步demo讲解

1.demo整体架构如下


2.SynchronizeModel类库

这个类库是主要用于实体对象模型的转换,包括请求参数实体RequestModel,数据库实体DBEntity,响应数据实体ResponseModel等,
2.1 新建一个数据库实体:
  1. /// <summary>
  2.    /// 被测件(雷达)模块信息表
  3.    /// </summary>
  4. [SqlSugar.SugarTable("TestRecordModule")]
  5. public class TestRecordModule:EntityBase
  6. {
  7.     /// <summary>
  8.     /// 被测件
  9.     /// </summary>
  10.     public long TaskTestRecordID { get; set; }
  11.     /// <summary>
  12.     /// 模块编号
  13.     /// </summary>
  14.     public string ModuleNumber { get; set; }
  15.     /// <summary>
  16.     /// 映射位
  17.     /// </summary>
  18.     public int MapPosition { get; set; }
  19.     /// <summary>
  20.     /// 模块状态
  21.     /// </summary>
  22.     public int Status { get; set; }
  23.     /// <summary>
  24.     /// 创建时间
  25.     /// </summary>
  26.     public DateTime CreatedTime { get; set; }
  27.     /// <summary>
  28.     /// 备注
  29.     /// </summary>
  30.     public string Comment { get; set; }
  31.     /// <summary>
  32.     /// 模块型号
  33.     /// </summary>
  34.     public string ModuleType { get; set; }
  35.     /// <summary>
  36.     /// 测试流程控制状态
  37.     /// </summary>
  38.     public int TestFlowControlStatus { get; set; }
  39.     /// <summary>
  40.     /// 批次数
  41.     /// </summary>
  42.     public int BatchCount { get; set; }
  43.     /// <summary>
  44.     /// 扫码编号
  45.     /// </summary>
  46.     public string ScanCodeNumber { get; set; }
  47.     /// <summary>
  48.     /// 用户ID
  49.     /// </summary>
  50.     public long UserID { get; set; }
  51.     /// <summary>
  52.     /// 是否同步
  53.     /// </summary>
  54.     public SynchronizeStatus IsSynchronize { get; set; }
  55.     /// <summary>
  56.     /// 产线名称
  57.     /// </summary>
  58.     public string ProductLineName { get; set; }
  59. }
复制代码
2.2 新建响应数据实体:
  1. public class ResultModel
  2.         {
  3.                 public bool Success { get; set; }
  4.                 public string Message { get; set; }
  5.         }
复制代码
2.3 业务逻辑的同步状态枚举:
  1. public enum SynchronizeStatus
  2.         {
  3.                 None = 0,
  4.                 Synchronizing = 1,
  5.                 Synchronized = 2,
  6.         }
复制代码
3.SynchronizeService类库

主要分几层:
3.1 接口层:IRepository,IService
  1. public interface ISynchronizeRepository
  2.         {
  3.                 Task<ResultModel> AddTestRecordModuleAsync(TestRecordModule entity);
  4.                 Task<ResultModel> BatchDataSynchronizeAsync(List<TestRecordModule> entities);
  5.         }
  6. public interface ISynchronizeService
  7.         {
  8.                 Task<ResultModel> AddTestRecordModuleAsync(TestRecordModule entity);
  9.                 Task<ResultModel> BatchDataSynchronizeAsync(List<TestRecordModule> entities);
  10.         }
复制代码
3.2 业务逻辑实现层:RepositoryImpl,ServiceImpl
  1. public class BaseRepository<T>
  2.         {
  3.                 protected SqlSugarClient db;
  4.                 public BaseRepository()
  5.                 {
  6.                         //string conStr = ConfigurationManager.ConnectionStrings["SQLiteConnectionString"].ConnectionString.ToString();
  7.                         string conStr = @"E:\\定时服务\\WebApiService\\WebApiService\\DB\\RDS.DCDC.db3";
  8.                         SqliteConnectionStringBuilder stringBuilder = new SqliteConnectionStringBuilder { DataSource = conStr };
  9.                         db = new SqlSugarClient(new ConnectionConfig()
  10.                         {
  11.                                 ConnectionString = stringBuilder.ToString(),
  12.                                 DbType = DbType.Sqlite,
  13.                                 IsAutoCloseConnection = true,//自动释放
  14.                                 InitKeyType = InitKeyType.Attribute,
  15.                         });
  16.                 }
  17.    }
  18. public class SynchronizeRepositoryImpl : BaseRepository<TestRecordModule>, ISynchronizeRepository
  19.         {
  20.                 public async Task<ResultModel> AddTestRecordModuleAsync(TestRecordModule entity)
  21.                 {
  22.                         try
  23.                         {
  24.                                 //先查询是否已同步过,排除同步重复的数据;
  25.                                 var items = this.db.Queryable<TestRecordModule>().Where(t => t.ScanCodeNumber == entity.ScanCodeNumber && t.IsSynchronize == SynchronizeStatus.Synchronized);
  26.                                 if (items.Count() > 0)
  27.                                 {
  28.                                         return new ResultModel { Success = false, Message = "数据已同步过" };
  29.                                 }
  30.                                 //开启事务
  31.                                 await this.db.BeginTranAsync();
  32.                                 ResultModel responseModel = new ResultModel();   
  33.                                 entity.IsSynchronize = SynchronizeStatus.Synchronized;
  34.                                 if (db.Insertable(entity).ExecuteReturnBigIdentity() > 0)
  35.                                 {
  36.                                         responseModel.Success = true;
  37.                                         responseModel.Message = "成功";
  38.                                 }
  39.                                 else
  40.                                 {
  41.                                         responseModel.Success = false;
  42.                                         responseModel.Message = "失败";
  43.                                 }
  44.                                 //数据同步完,没有报错,更新IsSynchronize状态
  45.                                 //entity.IsSynchronize = Entities.SynchronizeStatus.Synchronized;
  46.                                 //await this.db.Updateable(entity).UpdateColumns(t=>t.IsSynchronize == Entities.SynchronizeStatus.Synchronized)
  47.                                 //    .WhereColumns(t => t.ScanCodeNumber == entity.ScanCodeNumber).ExecuteCommandAsync();
  48.                                 // 提交事务
  49.                                 await this.db.Ado.CommitTranAsync();
  50.                                 return await Task.FromResult(responseModel);
  51.                         }
  52.                         catch (Exception ex)
  53.                         {
  54.                                 //事务回滚
  55.                                 await this.db.Ado.RollbackTranAsync();
  56.                                 return new ResultModel() { Success = false, Message = "同步失败" };
  57.                         }
  58.                 }
  59.                 public async Task<ResultModel> BatchDataSynchronizeAsync(List<TestRecordModule> entities)
  60.                 {
  61.                         try
  62.                         {
  63.                                 ResultModel responseModel = new ResultModel();
  64.                                 foreach (var entity in entities)
  65.                                 {
  66.                                         //先查询是否已同步过,排除同步重复的数据;
  67.                                         var items = this.db.Queryable<TestRecordModule>().Where(t => t.ScanCodeNumber == entity.ScanCodeNumber && t.IsSynchronize == SynchronizeStatus.Synchronized);
  68.                                         if (items.Count() > 0)
  69.                                         {
  70.                                                 return new ResultModel { Success = false, Message = "数据已同步过" };
  71.                                         }
  72.                                         //开启事务
  73.                                         await this.db.BeginTranAsync();                  
  74.                                         entity.IsSynchronize = SynchronizeStatus.Synchronized;
  75.                                         if (db.Insertable(entity).ExecuteReturnBigIdentity() > 0)
  76.                                         {
  77.                                                 responseModel.Success = true;
  78.                                                 responseModel.Message = "成功";
  79.                                         }
  80.                                         else
  81.                                         {
  82.                                                 responseModel.Success = false;
  83.                                                 responseModel.Message = "失败";
  84.                                         }
  85.                                 }
  86.                                 //数据同步完,没有报错,更新IsSynchronize状态
  87.                                 //entity.IsSynchronize = Entities.SynchronizeStatus.Synchronized;
  88.                                 //await this.db.Updateable(entity).UpdateColumns(t=>t.IsSynchronize == Entities.SynchronizeStatus.Synchronized)
  89.                                 //    .WhereColumns(t => t.ScanCodeNumber == entity.ScanCodeNumber).ExecuteCommandAsync();
  90.                                 // 提交事务
  91.                                 await this.db.Ado.CommitTranAsync();
  92.                                 return await Task.FromResult(responseModel);
  93.                         }
  94.                         catch (Exception ex)
  95.                         {
  96.                                 //事务回滚
  97.                                 await this.db.Ado.RollbackTranAsync();
  98.                                 return new ResultModel() { Success = false, Message = "同步失败" };
  99.                         }
  100.                 }
  101.         }
  102. public class SynchronizeServiceImpl : ISynchronizeService
  103.         {
  104.                 private readonly ISynchronizeRepository _testRecordModuleRepository;
  105.                 public SynchronizeServiceImpl(ISynchronizeRepository testRecordModuleRepository)
  106.                 {
  107.                         _testRecordModuleRepository = testRecordModuleRepository;
  108.                 }
  109.                 public async Task<ResultModel> AddTestRecordModuleAsync(TestRecordModule entity)
  110.                 {
  111.                         return await _testRecordModuleRepository.AddTestRecordModuleAsync(entity);
  112.                 }
  113.                 public async Task<ResultModel> BatchDataSynchronizeAsync(List<TestRecordModule> entities)
  114.                 {
  115.                         return await _testRecordModuleRepository.BatchDataSynchronizeAsync(entities);
  116.                 }
  117.         }
复制代码
4.WebApiService,表现层Controller
  1. [Route("[controller]/[action]")]
  2.         [ApiController]
  3.         public class SynchronizeController : ControllerBase
  4.         {
  5.                 private readonly ISynchronizeService _synchronizeService;
  6.                 public SynchronizeController(ISynchronizeService synchronizeService )
  7.                 {
  8.                         this._synchronizeService = synchronizeService;
  9.                 }
  10.                 /// <summary>
  11.                 /// 单个数据同步
  12.                 /// </summary>
  13.                 /// <param name="entity"></param>
  14.                 /// <returns></returns>
  15.                 [HttpPost]
  16.                 public async Task<ResultModel> DataSynchronize(TestRecordModule entity)
  17.                 {
  18.                         entity.IsSynchronize = SynchronizeStatus.Synchronizing;
  19.                         var result = this._synchronizeService.AddTestRecordModuleAsync(entity);
  20.                         return await result;
  21.                 }
  22.                 /// <summary>
  23.                 /// 批次数据同步
  24.                 /// </summary>
  25.                 /// <param name="entity"></param>
  26.                 /// <returns></returns>
  27.                 [HttpPost]
  28.                 public async Task<ResultModel> BatchDataSynchronize(List<TestRecordModule> entities)
  29.                 {
  30.                         var result = this._synchronizeService.BatchDataSynchronizeAsync(entities);
  31.                         return await result;
  32.                 }
  33.         }
复制代码
具体可以访问我的代码库:https://gitee.com/chenshibao/web-api-service.git

来源:https://www.cnblogs.com/chenshibao/p/18456165
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具