From 4467f4cb243e6617f3aafff2e1723f70315b1e77 Mon Sep 17 00:00:00 2001 From: tongfei <244188119@qq.com> Date: Sat, 11 Nov 2023 15:55:29 +0800 Subject: [PATCH] =?UTF-8?q?erp=E7=9B=B4=E6=8E=A5=E8=B0=83=E6=8B=A8?= =?UTF-8?q?=E5=85=A5=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/WMS.Web.Api/Controllers/TestController.cs | 2 +- src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml | 16 ++++ .../IService/IInStockTaskService.cs | 8 ++ src/WMS.Web.Domain/Mappers/InStockMapper.cs | 12 +++ .../QuartzJob/InStockOrderQuartzJob.cs | 5 ++ .../Services/InStockTaskService.cs | 75 +++++++++++++++++++ 6 files changed, 117 insertions(+), 1 deletion(-) diff --git a/src/WMS.Web.Api/Controllers/TestController.cs b/src/WMS.Web.Api/Controllers/TestController.cs index 49e5eb59..9e08f7aa 100644 --- a/src/WMS.Web.Api/Controllers/TestController.cs +++ b/src/WMS.Web.Api/Controllers/TestController.cs @@ -77,7 +77,7 @@ namespace WMS.Web.Api.Controllers bool isTransaction = false; //3.同步数据 - var result = await _inStockTaskService.SysnMiscellaneous(null,isTransaction); + var result = await _inStockTaskService.SysnTransferDirect(null,isTransaction); if (!result.IsSuccess) isRollback = true; //4.提交事务 diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml index e4ddb38e..51babef8 100644 --- a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml +++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml @@ -1764,6 +1764,14 @@ + + + 同步:直接调拨入库单据 + + + + + 出库服务 @@ -2665,6 +2673,14 @@ + + + 同步:直接调拨入库单 + + + + + 出库服务 diff --git a/src/WMS.Web.Domain/IService/IInStockTaskService.cs b/src/WMS.Web.Domain/IService/IInStockTaskService.cs index 32f84260..28d12369 100644 --- a/src/WMS.Web.Domain/IService/IInStockTaskService.cs +++ b/src/WMS.Web.Domain/IService/IInStockTaskService.cs @@ -40,5 +40,13 @@ namespace WMS.Web.Domain.IService /// /// Task SysnMiscellaneous(List billNos = null, bool isTransaction = true); + + /// + /// 同步:直接调拨入库单据 + /// + /// + /// + /// + Task SysnTransferDirect(List billNos = null, bool isTransaction = true); } } diff --git a/src/WMS.Web.Domain/Mappers/InStockMapper.cs b/src/WMS.Web.Domain/Mappers/InStockMapper.cs index b39b17ab..97c1f8e3 100644 --- a/src/WMS.Web.Domain/Mappers/InStockMapper.cs +++ b/src/WMS.Web.Domain/Mappers/InStockMapper.cs @@ -66,6 +66,18 @@ namespace WMS.Web.Domain.Mappers CreateMap() .ForMember(x => x.SourceBillNo, ops => ops.MapFrom(x => x.BillNo)) + .ForMember(x => x.CreateTime, ops => ops.MapFrom(x => x.CreateTime)); + + //ERP直接调拨入库单 + CreateMap() + .ForMember(x => x.OrgId, ops => ops.MapFrom(x => x.StockOrgId)) + .ForMember(x => x.MaterialId, ops => ops.MapFrom(x => x.MaterialId)) + .ForMember(x => x.StockCode, ops => ops.MapFrom(x => x.DestStockCode)) + .ForMember(x => x.AccruedQty, ops => ops.MapFrom(x => x.Qty)) + .ForMember(x => x.Remark, ops => ops.MapFrom(x => x.Remark)); + + CreateMap() + .ForMember(x => x.SourceBillNo, ops => ops.MapFrom(x => x.BillNo)) .ForMember(x => x.CreateTime, ops => ops.MapFrom(x => x.CreateTime)); #endregion diff --git a/src/WMS.Web.Domain/QuartzJob/InStockOrderQuartzJob.cs b/src/WMS.Web.Domain/QuartzJob/InStockOrderQuartzJob.cs index 9e0a858b..fe791a99 100644 --- a/src/WMS.Web.Domain/QuartzJob/InStockOrderQuartzJob.cs +++ b/src/WMS.Web.Domain/QuartzJob/InStockOrderQuartzJob.cs @@ -95,6 +95,11 @@ namespace WMS.Web.Domain.QuartzJob if (!miscellaneou_result.IsSuccess) return Result.ReFailure(miscellaneou_result.Message, miscellaneou_result.Status); + //2.同步数据:直接调拨入库单 + var TransferDirect_result = await _inStockTaskService.SysnTransferDirect(null, isTransaction); + if (!TransferDirect_result.IsSuccess) + return Result.ReFailure(TransferDirect_result.Message, TransferDirect_result.Status); + return Result.ReSuccess(); } } diff --git a/src/WMS.Web.Domain/Services/InStockTaskService.cs b/src/WMS.Web.Domain/Services/InStockTaskService.cs index d84d9baf..70516c28 100644 --- a/src/WMS.Web.Domain/Services/InStockTaskService.cs +++ b/src/WMS.Web.Domain/Services/InStockTaskService.cs @@ -280,5 +280,80 @@ namespace WMS.Web.Domain.Services return Result.ReSuccess(); } + + /// + /// 同步:直接调拨入库单 + /// + /// + /// + /// + public async Task SysnTransferDirect(List billNos = null, bool isTransaction = true) + { + //1.获取金蝶数据:直接调拨入库订单数据 + var erp_result = await _erpService.BillQueryForTransferDirect(billNos); + if (!erp_result.IsSuccess) + return Result.ReFailure(erp_result.Message, erp_result.Status); + var erp_list = erp_result.Data; + + //2.通过单据编号找到wms系统现有的任务单;并修改 + var erp_removeList = new List(); + var SourceBillNo_list = erp_list.GroupBy(x => x.BillNo).Select(x => x.Key).ToList(); + var data_list = await _inStockTaskRepositories.GetListBy(SourceBillNo_list); + if (data_list.Count != 0) + { + //2.1提取出wms任务单明细信息 + var data_list_details = data_list.SelectMany(x => x.Details).ToList(); + foreach (var item in data_list_details) + { + var data = data_list.Where(x => x.Id == item.Fid).FirstOrDefault(); + + //2.1.1对比erp的物料信息 + var erp_data = erp_list.Where(x => x.BillNo == data.SourceBillNo && x.MaterialId == item.MaterialId).FirstOrDefault(); + if (erp_data != null) + { + //2.1.2修改数量 + item.AccruedQty = erp_data.Qty; + erp_removeList.Add(erp_data); + } + } + + //2.2.提交修改 + var isSuccess = await _inStockTaskRepositories.UpdateRange(data_list, isTransaction); + if (!isSuccess) + return Result.ReFailure(ResultCodes.DateWriteError); + + //2.3剔除:已修改的单据 + foreach (var item in erp_removeList) + { + erp_list.Remove(item); + } + } + + //3.wms任务单的来源单据编号不存在于erp中,那么就新增 + if (erp_list.Count != 0) + { + var add_entitys = new List(); + var current_billNos = erp_list.GroupBy(x => new { x.BillNo, x.CreateTime }).Select(x => new { x.Key.BillNo, x.Key.CreateTime }).ToList(); + foreach (var item in current_billNos) + { + var dto = new InStockTask(); + dto.SourceBillNo = item.BillNo; + dto.CreateTime = item.CreateTime; + dto.Create(InstockType.Stkdirecttransfers); + + //找到当前对应来源单据编号的集合数据 + var current_erp_details = erp_list.Where(x => x.BillNo == item.BillNo).ToList(); + //给到dto的实体明细中 + dto.Details = _mapper.Map>(current_erp_details); + add_entitys.Add(dto); + } + //3.1提交新增 + var isSuccess = await _inStockTaskRepositories.AddRange(add_entitys, isTransaction); + if (!isSuccess) + return Result.ReFailure(ResultCodes.DateWriteError); + } + + return Result.ReSuccess(); + } } }