diff --git a/src/WMS.Web.Domain/IService/IBoxService.cs b/src/WMS.Web.Domain/IService/IBoxService.cs index 05eacc0c..e7455d37 100644 --- a/src/WMS.Web.Domain/IService/IBoxService.cs +++ b/src/WMS.Web.Domain/IService/IBoxService.cs @@ -4,6 +4,7 @@ using System.Collections.Generic; using System.Text; using System.Threading.Tasks; using WMS.Web.Core.Internal.Results; +using WMS.Web.Domain.Entitys; namespace WMS.Web.Domain.IService { @@ -11,5 +12,6 @@ namespace WMS.Web.Domain.IService { // 同步老Ops箱信息 Task Sync(); + Task SerialNumberOperate(List list, bool isTransaction = true); } } diff --git a/src/WMS.Web.Domain/Services/BoxService.cs b/src/WMS.Web.Domain/Services/BoxService.cs index 938232c2..34a98fbc 100644 --- a/src/WMS.Web.Domain/Services/BoxService.cs +++ b/src/WMS.Web.Domain/Services/BoxService.cs @@ -1,4 +1,5 @@ using AutoMapper; +using Microsoft.EntityFrameworkCore.Storage; using System; using System.Collections.Generic; using System.Linq; @@ -10,6 +11,7 @@ using WMS.Web.Domain.Entitys; using WMS.Web.Domain.Infrastructure; using WMS.Web.Domain.IService; using WMS.Web.Domain.IService.Public; +using WMS.Web.Domain.Values; namespace WMS.Web.Domain.Services { @@ -23,15 +25,17 @@ namespace WMS.Web.Domain.Services public readonly IBasicsRepositories _transactionRepositories; private readonly IBoxRepositories _boxRepositories; private readonly IOpsService _opsService; + private readonly ISerialNumberOperateRepositories _serialNumberOperateRepositories; public BoxService(IMapper mapper, ILoginService loginService, IBasicsRepositories transactionRepositories, - IBoxRepositories boxRepositories, IOpsService opsService) + IBoxRepositories boxRepositories, IOpsService opsService, ISerialNumberOperateRepositories serialNumberOperateRepositories) { _mapper = mapper; _loginService = loginService; _transactionRepositories = transactionRepositories; _boxRepositories = boxRepositories; _opsService = opsService; + _serialNumberOperateRepositories = serialNumberOperateRepositories; } public async Task Sync() @@ -39,17 +43,53 @@ namespace WMS.Web.Domain.Services OpsBoxRequest request = new OpsBoxRequest(DateTime.Now.AddYears(-1), DateTime.Now); var list = await _opsService.GetBox(request); var nos = list.Select(s => s.BoxBillNo).ToList(); - var old_nos=await _boxRepositories.GetByNos(nos); - foreach(var s in old_nos) + var old_nos = await _boxRepositories.GetByNos(nos); + foreach (var s in old_nos) { //数据库里已经存在箱信息 移除 var box = list.FirstOrDefault(f => f.BoxBillNo.Equals(s)); list.Remove(box); } var boxs = _mapper.Map>(list); - //批量添加 - await _boxRepositories.AddRange(boxs,true); + //需要添加序列号记录表 + List sList = new List(); + foreach (var b in boxs) + { + foreach (var sn in b.Details.SelectMany(s => s.SerialNumbers)) + { + SerialNumberOperate s = new SerialNumberOperate(sn, SerialNumberOperateType.Generate, b.CreateUser, "", b.SupplierId, b.OrgId, null, b.CreateTime); + sList.Add(s); + } + } + + IDbContextTransaction _transaction = _transactionRepositories.GetTransaction(); + bool isRollback = false; + bool isSuccess = true; + //批量添加 + isSuccess = await _boxRepositories.AddRange(boxs, false); + if (!isSuccess) isRollback = true; + //序列号操作记录 + var res = await this.SerialNumberOperate(sList, false); + if (!res.Success) isRollback = true; + + //提交事务 + isSuccess = _transactionRepositories.CommitTransaction(isRollback, _transaction); + if (!isSuccess) + return Result.ReFailure(ResultCodes.DateWriteError); + + return Result.ReSuccess(); + } + /// + /// 序列号操作记录日志 + /// + /// + /// + /// + public async Task SerialNumberOperate(List list, bool isTransaction = true) + { + var isSuccess = await _serialNumberOperateRepositories.AddRange(list, isTransaction); + if (!isSuccess) return Result.ReFailure(ResultCodes.DateWriteError); return Result.ReSuccess(); } }