diff --git a/src/WMS.Web.Domain/Entitys/InStock.cs b/src/WMS.Web.Domain/Entitys/InStock.cs index 0cac25f6..e7c2d3e7 100644 --- a/src/WMS.Web.Domain/Entitys/InStock.cs +++ b/src/WMS.Web.Domain/Entitys/InStock.cs @@ -179,11 +179,11 @@ namespace WMS.Web.Domain.Entitys /// public void SyncFail(string remark, int erpDetailId, int operateId, SyncStatus syncStatus) { - var erpd = this.ErpDetails.Where(w=>w.ErpDetailId==erpDetailId).ToList(); - erpd.ForEach(det => + var erpd = this.ErpDetails.Where(w => w.ErpDetailId == erpDetailId).ToList(); + erpd.ForEach(det => { det.SuccessSync = syncStatus; - }); + }); this.SuccessSync = SyncStatus.Fail; this.Remark = remark; this.OperateId = operateId; diff --git a/src/WMS.Web.Domain/Services/InStockService.cs b/src/WMS.Web.Domain/Services/InStockService.cs index 65695242..25e535b9 100644 --- a/src/WMS.Web.Domain/Services/InStockService.cs +++ b/src/WMS.Web.Domain/Services/InStockService.cs @@ -79,7 +79,7 @@ namespace WMS.Web.Domain.Services /// public Task Sync(OperateRequest dto, LoginInDto loginInfo, bool isRepeatSync = true) { - var list = _inStockRepositories.GetList(dto.Ids).GetAwaiter().GetResult(); + var list = _inStockRepositories.GetList(dto.Ids).GetAwaiter().GetResult(); var isSuccess = true; if (isRepeatSync) { @@ -88,7 +88,7 @@ namespace WMS.Web.Domain.Services isSuccess = _inStockRepositories.UpdateRange(list, true).GetAwaiter().GetResult(); } Task.Run(async () => - { + { foreach (var entity in list) { var res = await this.PurchaseInStock(entity, loginInfo); @@ -149,7 +149,7 @@ namespace WMS.Web.Domain.Services { OperateRequest oRequest = new OperateRequest(); oRequest.Ids.Add(entity.Id); - await Sync(oRequest, loginInfo,false); + await Sync(oRequest, loginInfo, false); } return Result.ReSuccess(); } @@ -162,7 +162,7 @@ namespace WMS.Web.Domain.Services /// public async Task ShelfNoPurchase(NoPurchaseShelfRequest dto, LoginInDto loginInDto) { - _logger.LogInformation($"非采购入库:{JsonConvert.SerializeObject(dto)} 操作人:{loginInDto.UserInfo.StaffId+loginInDto.UserInfo.Nickname}"); + _logger.LogInformation($"非采购入库:{JsonConvert.SerializeObject(dto)} 操作人:{loginInDto.UserInfo.StaffId + loginInDto.UserInfo.Nickname}"); IDbContextTransaction _transaction = _basicsRepositories.GetTransaction(); bool isRollback = false; bool isTransaction = false; @@ -236,7 +236,7 @@ namespace WMS.Web.Domain.Services box_task_detail.ErpDetailId = item.ErpDetailId; box_task_detail.BoxMaterialQty = item.ReceiveQty; box_task_detail.MaterialName = _erpBasicDataExtendService.GetMaterialName(materials, item.MaterialNumber); - box_task_detail.MaterialNumber = item.MaterialNumber; + box_task_detail.MaterialNumber = item.MaterialNumber; box_task_detail.Specifications = _erpBasicDataExtendService.GetMaterialSpecifications(materials, item.MaterialNumber); result.Details.Add(box_task_detail); } @@ -271,8 +271,8 @@ namespace WMS.Web.Domain.Services //1.获取来源单 var taskIds = dto.Details.GroupBy(x => x.TaskId).Select(x => x.Key).ToList(); var tasks = await _inStockTaskRepositories.GetList(taskIds); - - if (tasks == null || tasks.Count==0) + + if (tasks == null || tasks.Count == 0) return Result.ReFailure(ResultCodes.SourceBillNoDateError); // 组织集合 @@ -361,12 +361,12 @@ namespace WMS.Web.Domain.Services //保存成功后:序列号跟踪流程添加 var serialNumber_result = await _serialNumberService.InStock(entity, loginInfo, isTransaction); if (!serialNumber_result.IsSuccess) - return Result.ReFailure(serialNumber_result); + return Result.ReFailure(serialNumber_result); //箱库存变动 var boxInventoryResult = await _boxInventoryService.GenerateInStockBox(entity, isTransaction); if (!boxInventoryResult.IsSuccess) - return Result.ReFailure(boxInventoryResult); + return Result.ReFailure(boxInventoryResult); return Result.ReSuccess(entity); @@ -384,7 +384,7 @@ namespace WMS.Web.Domain.Services _logger.LogInformation($"非采购上架-保存:{JsonConvert.SerializeObject(dto)} 操作人:{loginInfo.UserInfo.StaffId}"); //非采购入库的时候:不能扫同样的箱,按箱入库时候 - if (dto.Boxs != null && dto.Boxs.Count != 0 && dto.ShelfMethod==(int)ShelfMethod.Box) + if (dto.Boxs != null && dto.Boxs.Count != 0 && dto.ShelfMethod == (int)ShelfMethod.Box) { if (dto.Boxs.Select(x => x.BoxId).Distinct().Count() != dto.Boxs.Select(x => x.BoxId).Count()) return Result.ReFailure(ResultCodes.BoxOutStockTaskBoxError); @@ -402,7 +402,7 @@ namespace WMS.Web.Domain.Services //1.1.2判断上架数量不能超过应入库数量 var dtoDetails = dto.Boxs.SelectMany(x => x.Details).ToList(); - var dtoTotalDetails = dtoDetails.GroupBy(x => new { x.ErpDetailId,x.MaterialNumber }).Select(x => new { ErpDetailId = x.Key.ErpDetailId, MaterialNumber = x.Key.MaterialNumber, Qty = x.Sum(t => t.Qty) }).ToList(); + var dtoTotalDetails = dtoDetails.GroupBy(x => new { x.ErpDetailId, x.MaterialNumber }).Select(x => new { ErpDetailId = x.Key.ErpDetailId, MaterialNumber = x.Key.MaterialNumber, Qty = x.Sum(t => t.Qty) }).ToList(); foreach (var item in task.Details) { var current_det = dtoTotalDetails.Where(x => x.ErpDetailId == item.ErpDetailId && x.MaterialNumber == item.MaterialNumber).FirstOrDefault(); @@ -617,7 +617,7 @@ namespace WMS.Web.Domain.Services //1.1筛选出对应仓库的明细 - var task_details = task.Details.Where(x => x.StockCode == dto.StockCode && x.AccruedQty>0).ToList(); + var task_details = task.Details.Where(x => x.StockCode == dto.StockCode && x.AccruedQty > 0).ToList(); //2.找到箱对应的物料信息:多个箱 var boxs = await _boxRepositories.GetEntityListByNos(dto.BoxBillNos); @@ -627,7 +627,7 @@ namespace WMS.Web.Domain.Services //3.判断箱里面对应的物料是否存在;不存在就报错 foreach (var item in boxs) { - if(item.Details==null || item.Details.Count==0) + if (item.Details == null || item.Details.Count == 0) return Result.ReFailure(ResultCodes.BoxMateriaNoData); } @@ -692,7 +692,7 @@ namespace WMS.Web.Domain.Services /// /// /// - private async Task PurchaseInStock(InStock entity, LoginInDto loginInfo) + private async Task PurchaseInStock(InStock entity, LoginInDto loginInfo) { _logger.LogInformation($"采购下推-同步:{JsonConvert.SerializeObject(entity)} 操作人:{loginInfo.UserInfo.StaffId}"); var scope = _serviceScopeFactory.CreateScope(); @@ -707,50 +707,40 @@ namespace WMS.Web.Domain.Services var sc_erpService = scope.ServiceProvider.GetRequiredService(); //找到金蝶最新的采购订单数据 - var erp_purchase_result =await sc_erpService.BillQueryForPurchaseInStock(entity.ErpDetails.GroupBy(x=>x.SourceBillNo).Select(x=>x.Key).ToList()); + var erp_purchase_result = await sc_erpService.BillQueryForPurchaseInStock(entity.ErpDetails.GroupBy(x => x.SourceBillNo).Select(x => x.Key).ToList()); if (!erp_purchase_result.IsSuccess) return erp_purchase_result; //然后刷选出对应金蝶明细和物料和wms的任务单的明细和物料是一致的就同步下推 foreach (var item in erpDetails_tags) { - var isHave= erp_purchase_result.Data.Where(x => x.ErpDetailId == item.ErpDetailId && x.MaterialNumber == item.MaterialNumber).Any(); + var isHave = erp_purchase_result.Data.Where(x => x.ErpDetailId == item.ErpDetailId && x.MaterialNumber == item.MaterialNumber).Any(); if (isHave) erpDetails.Add(item); } - try + foreach (var s in erpDetails) { - foreach (var s in erpDetails) + var erp_details = entity.ErpDetails + .Where(w => w.SourceBillNo.Equals(s)).Select(s => s.ErpDetailId).ToList(); + var erpDto = new ErpPushDto() { - var erp_details = entity.ErpDetails - .Where(w => w.SourceBillNo.Equals(s)).Select(s => s.ErpDetailId).ToList(); - var erpDto = new ErpPushDto() - { - RuleId = "PUR_PurchaseOrder-STK_InStock",//转换规则内码 采购订单下推采购入库单 - FormId = FormIdParam.PUR_PurchaseOrder.ToString(), - TargetFormId = FormIdParam.STK_InStock.ToString(), - DetailsId = s.ErpDetailId.ToString(), - IsDraftWhenSaveFail = true - }; - //下推金蝶 - var res = await this.Push(erpDto, s, entity.BillNo, sc_erpService); - if (res.result.IsSuccess) - entity.SyncSuccess(s.ErpDetailId, loginInfo?.UserInfo?.StaffId ?? 0, res.erpBillNo); - else - entity.SyncFail(res.result.Message, s.ErpDetailId, loginInfo?.UserInfo?.StaffId ?? 0, res.syncStatus); - } - //最好一条一条执行,否则执行失败 但是金蝶那边又同步成功 就会造成数据比价乱 - var isSuccess = await sc_InStockRepositories.Update(entity, true); - if (entity == null) return Result.ReFailure(ResultCodes.DateWriteError); - return Result.ReSuccess(); + RuleId = "PUR_PurchaseOrder-STK_InStock",//转换规则内码 采购订单下推采购入库单 + FormId = FormIdParam.PUR_PurchaseOrder.ToString(), + TargetFormId = FormIdParam.STK_InStock.ToString(), + DetailsId = s.ErpDetailId.ToString(), + IsDraftWhenSaveFail = true + }; + //下推金蝶 + var res = await this.Push(erpDto, s, entity.BillNo, sc_erpService); + if (res.result.IsSuccess) + entity.SyncSuccess(s.ErpDetailId, loginInfo?.UserInfo?.StaffId ?? 0, res.erpBillNo); + else + entity.SyncFail(res.result.Message, s.ErpDetailId, loginInfo?.UserInfo?.StaffId ?? 0, res.syncStatus); } - catch (Exception ex) - { - _logger.LogInformation($"采购下推-同步:错误:{JsonConvert.SerializeObject(entity)} 操作人:{loginInfo.UserInfo.StaffId}"); - return Result.ReFailure(ResultCodes.ErpSynsError); - } - - + //最好一条一条执行,否则执行失败 但是金蝶那边又同步成功 就会造成数据比价乱 + var isSuccess = await sc_InStockRepositories.Update(entity, true); + if (entity == null) return Result.ReFailure(ResultCodes.DateWriteError); + return Result.ReSuccess(); } /// @@ -761,46 +751,55 @@ namespace WMS.Web.Domain.Services /// /// private async Task<(Result result, SyncStatus syncStatus, string erpBillNo)> Push(ErpPushDto dto, InStockErpDetails erpDetail, string billNo, IErpService sc_erpService) - { + { + try + { + //下推动作 + var res = await sc_erpService.Push(dto); + if (!res.IsSuccess) + { + _logger.LogInformation($"入库单->下推失败 单号:{billNo} erp明细Id:{erpDetail.ErpDetailId} 错误:{res.Message}"); + return (Result.ReFailure(res.Message, res.Status), SyncStatus.Fail, ""); + } + string id = res.Data; + var resPurchaseInStock = await sc_erpService.BillQueryForPurchaseInStock(id); + var purchaseInStock = resPurchaseInStock.Data; + purchaseInStock.Details[0].Qty = erpDetail.Qty; + string formId = dto.TargetFormId.ToString(); + _logger.LogInformation($"入库单->开始同步金蝶 单号:{billNo} erp明细Id:{erpDetail.ErpDetailId} 数据: {JsonConvert.SerializeObject(dto)}"); + var res_s = await sc_erpService.Save(purchaseInStock, formId); + if (!res_s.IsSuccess) + { + _logger.LogInformation($"入库单->修改数量失败 单号:{billNo} erp明细Id:{erpDetail.ErpDetailId} 错误:{res_s.Message}"); + return (Result.ReFailure(res_s.Message, res_s.Status), SyncStatus.SubmitFail, id); + } + //提交 + _logger.LogInformation($"入库单->保存成功 开始提交 单号:{billNo} erp明细Id:{erpDetail.ErpDetailId}"); + ErpOperateDto o_dto = new ErpOperateDto(formId, res_s.Data);//res_s.Data + var resSubmit = await sc_erpService.Submit(o_dto, formId); + if (!resSubmit.IsSuccess) + { + _logger.LogInformation($"入库单->提交失败 单号:{billNo} erp明细Id:{erpDetail.ErpDetailId} 错误:{resSubmit.Message}"); + return (resSubmit, SyncStatus.SubmitFail, o_dto.Numbers.First()); + } + //审核 + _logger.LogInformation($"入库单->提交成功 开始审核 单号:{billNo} erp明细Id:{erpDetail.ErpDetailId}"); + resSubmit = await sc_erpService.Audit(o_dto, formId); + if (!resSubmit.IsSuccess) + { + _logger.LogInformation($"入库单->审核失败 单号:{billNo} erp明细Id:{erpDetail.ErpDetailId} 错误:{resSubmit.Message}"); + return (resSubmit, SyncStatus.CheckFail, o_dto.Numbers.First()); + } + _logger.LogInformation($"入库单->同步金蝶成功->单号:{billNo} erp明细Id:{erpDetail.ErpDetailId}"); + return (Result.ReSuccess(), SyncStatus.Success, o_dto.Numbers.First()); + } + catch (Exception ex) + { + _logger.LogInformation($"入库单-同步:错误:{billNo} erp明细Id:{erpDetail.ErpDetailId} 错误:{ex.Message}"); + var result = Result.ReFailure(ex.Message, 50001); + return (result, SyncStatus.Fail, ""); + } - //下推动作 - var res = await sc_erpService.Push(dto); - if (!res.IsSuccess) - { - _logger.LogInformation($"入库单->下推失败 单号:{billNo} erp明细Id:{erpDetail.ErpDetailId} 错误:{res.Message}"); - return (Result.ReFailure(res.Message, res.Status), SyncStatus.Fail, ""); - } - string id = res.Data; - var resPurchaseInStock = await sc_erpService.BillQueryForPurchaseInStock(id); - var purchaseInStock = resPurchaseInStock.Data; - purchaseInStock.Details[0].Qty = erpDetail.Qty; - string formId = dto.TargetFormId.ToString(); - _logger.LogInformation($"入库单->开始同步金蝶 单号:{billNo} erp明细Id:{erpDetail.ErpDetailId} 数据: {JsonConvert.SerializeObject(dto)}"); - var res_s = await sc_erpService.Save(purchaseInStock, formId); - if (!res_s.IsSuccess) - { - _logger.LogInformation($"入库单->修改数量失败 单号:{billNo} erp明细Id:{erpDetail.ErpDetailId} 错误:{res_s.Message}"); - return (Result.ReFailure(res_s.Message, res_s.Status), SyncStatus.SubmitFail, id); - } - //提交 - _logger.LogInformation($"入库单->保存成功 开始提交 单号:{billNo} erp明细Id:{erpDetail.ErpDetailId}"); - ErpOperateDto o_dto = new ErpOperateDto(formId, res_s.Data);//res_s.Data - var resSubmit = await sc_erpService.Submit(o_dto, formId); - if (!resSubmit.IsSuccess) - { - _logger.LogInformation($"入库单->提交失败 单号:{billNo} erp明细Id:{erpDetail.ErpDetailId} 错误:{resSubmit.Message}"); - return (resSubmit, SyncStatus.SubmitFail, o_dto.Numbers.First()); - } - //审核 - _logger.LogInformation($"入库单->提交成功 开始审核 单号:{billNo} erp明细Id:{erpDetail.ErpDetailId}"); - resSubmit = await sc_erpService.Audit(o_dto, formId); - if (!resSubmit.IsSuccess) - { - _logger.LogInformation($"入库单->审核失败 单号:{billNo} erp明细Id:{erpDetail.ErpDetailId} 错误:{resSubmit.Message}"); - return (resSubmit, SyncStatus.CheckFail, o_dto.Numbers.First()); - } - _logger.LogInformation($"入库单->同步金蝶成功->单号:{billNo} erp明细Id:{erpDetail.ErpDetailId}"); - return (Result.ReSuccess(), SyncStatus.Success, o_dto.Numbers.First()); } diff --git a/src/WMS.Web.Domain/Services/Public/LoginService.cs b/src/WMS.Web.Domain/Services/Public/LoginService.cs index 40a42927..cf9b5990 100644 --- a/src/WMS.Web.Domain/Services/Public/LoginService.cs +++ b/src/WMS.Web.Domain/Services/Public/LoginService.cs @@ -173,8 +173,8 @@ namespace WMS.Web.Domain.Services.Public loginInfo.TokenInfo = token; //var ops_login_time = token.Expired.AddDays(1) - DateTime.Now;//用于正式 - - _redisClientService.SetStringKey($"wms_login_{token.Token}", loginInfo, token.Expired.TimeOfDay); + var ops_login_time = token.Expired - DateTime.Now;//用于正式 + _redisClientService.SetStringKey($"wms_login_{token.Token}", loginInfo, ops_login_time); _logger.LogInformation($"登录信息:用户人员信息->{staffName}({r.UserInfo.StaffId}),公司名称->{r.UserInfo.CompanyName}"+",过期时间:"+token.Expired.ToString("yyyy-MM-dd HH:mm:ss")); diff --git a/src/WMS.Web.Domain/Values/SyncStatus.cs b/src/WMS.Web.Domain/Values/SyncStatus.cs index 964430ed..b6618305 100644 --- a/src/WMS.Web.Domain/Values/SyncStatus.cs +++ b/src/WMS.Web.Domain/Values/SyncStatus.cs @@ -34,6 +34,6 @@ namespace WMS.Web.Domain.Values /// 同步中 /// [EnumRemark("同步中")] - SyncIng = 4 + SyncIng = 4, } }