From 61323e930a711abfb7154789aa54a42b7da0fd9c Mon Sep 17 00:00:00 2001 From: 18942506660 <18942506660@A18942506660> Date: Fri, 15 Dec 2023 10:24:04 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4=E5=90=8C=E6=AD=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml | 6 +-- src/WMS.Web.Domain/Entitys/OutStock.cs | 22 +++++---- .../Services/OutStockService.cs | 45 ++++++++++--------- 3 files changed, 39 insertions(+), 34 deletions(-) diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml index 72c4e3ba..bca5cc5f 100644 --- a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml +++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml @@ -1185,13 +1185,13 @@ - + 同步金蝶(成功) - + 同步金蝶(失败) @@ -3978,7 +3978,7 @@ - + 下推 diff --git a/src/WMS.Web.Domain/Entitys/OutStock.cs b/src/WMS.Web.Domain/Entitys/OutStock.cs index 5d879efc..acdc2fa8 100644 --- a/src/WMS.Web.Domain/Entitys/OutStock.cs +++ b/src/WMS.Web.Domain/Entitys/OutStock.cs @@ -133,16 +133,18 @@ namespace WMS.Web.Domain.Entitys /// 同步金蝶(成功) /// /// - public void SyncSuccess(string sourcBillNo, int operateId,string erpBillNo) + public void SyncSuccess(int erpDetailId, int operateId,string erpBillNo) { //foreach (var e in erpDetailIds) // this.SuccessSyncFail.Remove(e); - var erpd = this.Details.SelectMany(s => s.ErpDetails).Where(w => w.SourceBillNo.Equals(sourcBillNo)).ToList(); - foreach (var e in erpd) - { - e.SuccessSync = SyncStatus.Success; - e.ErpSyncBillNo = erpBillNo; - } + var erpd = this.Details.SelectMany(s => s.ErpDetails).FirstOrDefault(w => w.Erp_DetailId==erpDetailId); + erpd.SuccessSync = SyncStatus.Success; + erpd.ErpSyncBillNo = erpBillNo; + //foreach (var e in erpd) + //{ + //e.SuccessSync = SyncStatus.Success; + //e.ErpSyncBillNo = erpBillNo; + //} //所有erp明细同步成功才是整个单据成功 var erpDetails = this.Details.SelectMany(s => s.ErpDetails); if (erpDetails.Where(w => w.SuccessSync == SyncStatus.Success).Count()== erpDetails.Count()) @@ -157,9 +159,11 @@ namespace WMS.Web.Domain.Entitys /// 同步金蝶(失败) /// /// - public void SyncFail(string remark, int operateId, SyncStatus syncStatus) + public void SyncFail(string remark, int erpDetailId, int operateId, SyncStatus syncStatus) { - this.SuccessSync = syncStatus; + var erpd = this.Details.SelectMany(s => s.ErpDetails).FirstOrDefault(w => w.Erp_DetailId == erpDetailId); + erpd.SuccessSync = syncStatus; + this.SuccessSync = SyncStatus.Fail; this.Remark = remark; this.OperateId = operateId; this.SyncTime = DateTime.Now; diff --git a/src/WMS.Web.Domain/Services/OutStockService.cs b/src/WMS.Web.Domain/Services/OutStockService.cs index ec8c9d01..cb26cbbc 100644 --- a/src/WMS.Web.Domain/Services/OutStockService.cs +++ b/src/WMS.Web.Domain/Services/OutStockService.cs @@ -220,33 +220,34 @@ namespace WMS.Web.Domain.Services /// private async Task SalOutStock(OutStock entity, LoginInDto loginInfo) { - if (entity.Details.Count() != 1) return Result.ReSuccess(); if (entity.Type != OutStockType.Sal) return Result.ReSuccess(); - if (entity.SuccessSync != SyncStatus.Fail) return Result.ReSuccess(); - List failList = entity.Details.SelectMany(s => s.ErpDetails) - .Where(w => w.SuccessSync == SyncStatus.Fail).GroupBy(g => g.SourceBillNo) - .Select(s => s.Key).ToList();//同步失败的来源单号 - //找到单据里需要同步的单据 - var sourcNos = entity.Details.SelectMany(s => s.ErpDetails).GroupBy(s => s.SourceBillNo).Select(s => s.Key); - foreach (var s in failList) + if (entity.SuccessSync == SyncStatus.Success) return Result.ReSuccess(); + //List failList = entity.Details.SelectMany(s => s.ErpDetails) + // .Where(w => w.SuccessSync == SyncStatus.Fail).GroupBy(g => g.SourceBillNo) + // .Select(s => s.Key).ToList();//同步失败的来源单号 + // //找到单据里需要同步的单据 + //var sourcNos = entity.Details.SelectMany(s => s.ErpDetails).GroupBy(s => s.SourceBillNo).Select(s => s.Key); + var erpDetails = entity.Details.SelectMany(s => s.ErpDetails).Where(w => w.SuccessSync == SyncStatus.Fail).ToList(); + foreach (var s in erpDetails) { var erp_details = entity.Details .SelectMany(s => s.ErpDetails) - .Where(w=>w.SourceBillNo.Equals(s)).Select(s => s.Erp_DetailId).ToList(); + .Where(w => w.SourceBillNo.Equals(s)).Select(s => s.Erp_DetailId).ToList(); var erpDto = new ErpPushDto() { RuleId = "DeliveryNotice-OutStock",//转换规则内码 发货通知单下推销售出库单 FormId = FormIdParam.SAL_DELIVERYNOTICE.ToString(), //Numbers = new List() { s }, TargetFormId = FormIdParam.SAL_OUTSTOCK.ToString(), - DetailsId = string.Join(",", erp_details) + DetailsId = s.Erp_DetailId.ToString() + //DetailsId = string.Join(",", erp_details) }; //下推金蝶 - var res = await this.Push(erpDto, entity); + var res = await this.Push(erpDto, s, entity.BillNo); if (res.result.IsSuccess) - entity.SyncSuccess(s, loginInfo?.UserInfo?.StaffId ?? 0, res.erpBillNo); + entity.SyncSuccess(s.Erp_DetailId, loginInfo?.UserInfo?.StaffId ?? 0, res.erpBillNo); else - entity.SyncFail(res.result.Message, loginInfo?.UserInfo?.StaffId ?? 0, res.syncStatus); + entity.SyncFail(res.result.Message, s.Erp_DetailId, loginInfo?.UserInfo?.StaffId ?? 0, res.syncStatus); } //entity.SuccessSync = entity.SuccessSyncFail.Count() > 0 ? false : true; //最好一条一条执行,否则执行失败 但是金蝶那边又同步成功 就会造成数据比价乱 @@ -260,43 +261,43 @@ namespace WMS.Web.Domain.Services /// /// /// - private async Task<(Result result, SyncStatus syncStatus, string erpBillNo)> Push(ErpPushDto dto, OutStock entity) + private async Task<(Result result, SyncStatus syncStatus, string erpBillNo)> Push(ErpPushDto dto, OutStockErpDetails erpDetail, string billNo) { var res = await _erpService.Push(dto); if (!res.IsSuccess) { - _logger.LogInformation($"出库单->下推失败 单号:{entity.BillNo} 错误:{res.Message}"); + _logger.LogInformation($"出库单->下推失败 单号:{billNo} 错误:{res.Message}"); return (Result.ReFailure(res.Message, res.Status), SyncStatus.Fail, ""); } string id = res.Data; var resSalOutStock = await _erpService.BillQueryForSalOutStock(id); var salOutStock = resSalOutStock.Data; - salOutStock.Details[0].Qty = entity.Details[0].Qty; + salOutStock.Details[0].Qty = erpDetail.Qty; //{"Id":12709885,"Number":"XSCKD10629570","DIndex":0} string formId = dto.TargetFormId.ToString(); - _logger.LogInformation($"出库单->开始同步金蝶 单号:{entity.BillNo} 数据: {JsonConvert.SerializeObject(dto)}"); + _logger.LogInformation($"出库单->开始同步金蝶 单号:{billNo} 数据: {JsonConvert.SerializeObject(dto)}"); var res_s = await _erpService.Save(salOutStock, formId); if (!res_s.IsSuccess) { - _logger.LogInformation($"出库单->修改数量失败 单号:{entity.BillNo} 错误:{res_s.Message}"); + _logger.LogInformation($"出库单->修改数量失败 单号:{billNo} 错误:{res_s.Message}"); return (Result.ReFailure(res_s.Message, res_s.Status), SyncStatus.SubmitFail, id); } //提交 - _logger.LogInformation($"出库单->保存成功 开始提交 单号:{entity.BillNo}"); + _logger.LogInformation($"出库单->保存成功 开始提交 单号:{billNo}"); ErpOperateDto o_dto = new ErpOperateDto(formId, res_s.Data);//res_s.Data var resSubmit = await _erpService.Submit(o_dto, formId); if (!resSubmit.IsSuccess) { - _logger.LogInformation($"出库单->提交失败 单号:{entity.BillNo} 错误:{resSubmit.Message}"); + _logger.LogInformation($"出库单->提交失败 单号:{billNo} 错误:{resSubmit.Message}"); return (resSubmit, SyncStatus.SubmitFail, o_dto.Numbers.First()); } //审核 - _logger.LogInformation($"出库单->提交成功 开始审核 单号:{entity.BillNo}"); + _logger.LogInformation($"出库单->提交成功 开始审核 单号:{billNo}"); resSubmit = await _erpService.Audit(o_dto, formId); if (!resSubmit.IsSuccess) { - _logger.LogInformation($"出库单->审核失败 单号:{entity.BillNo} 错误:{resSubmit.Message}"); + _logger.LogInformation($"出库单->审核失败 单号:{billNo} 错误:{resSubmit.Message}"); return (resSubmit, SyncStatus.CheckFail, o_dto.Numbers.First()); } _logger.LogInformation($"同步金蝶成功");