diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml index 243fd6d8..e6cbb44e 100644 --- a/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml +++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml @@ -705,47 +705,47 @@ 明细备注 - + erp:分步式调入单-响应对象 - + 单据编号 - + 库存组织 - + 物料ID - + 调入仓库ID - + 调入仓库code - + 调入数量 - + 明细备注 - + 创建时间 diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml index 73aa192a..e44115fd 100644 --- a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml +++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml @@ -1831,6 +1831,14 @@ + + + 同步:分步式入库单据 + + + + + 出库服务 @@ -2756,6 +2764,14 @@ + + + 同步:分步式调入单 + + + + + 出库服务 diff --git a/src/WMS.Web.Core/Dto/Erp/ErptTransferinDto.cs b/src/WMS.Web.Core/Dto/Erp/ErpTransferinDto.cs similarity index 96% rename from src/WMS.Web.Core/Dto/Erp/ErptTransferinDto.cs rename to src/WMS.Web.Core/Dto/Erp/ErpTransferinDto.cs index 224a2716..0381d6a4 100644 --- a/src/WMS.Web.Core/Dto/Erp/ErptTransferinDto.cs +++ b/src/WMS.Web.Core/Dto/Erp/ErpTransferinDto.cs @@ -7,7 +7,7 @@ namespace WMS.Web.Core.Dto.Erp /// /// erp:分步式调入单-响应对象 /// - public class ErptTransferinDto + public class ErpTransferinDto { /// /// 单据编号 diff --git a/src/WMS.Web.Domain/IService/IInStockTaskService.cs b/src/WMS.Web.Domain/IService/IInStockTaskService.cs index 28d12369..59f9a897 100644 --- a/src/WMS.Web.Domain/IService/IInStockTaskService.cs +++ b/src/WMS.Web.Domain/IService/IInStockTaskService.cs @@ -48,5 +48,13 @@ namespace WMS.Web.Domain.IService /// /// Task SysnTransferDirect(List billNos = null, bool isTransaction = true); + + /// + /// 同步:分步式入库单据 + /// + /// + /// + /// + Task SysnTransferin(List billNos = null, bool isTransaction = true); } } diff --git a/src/WMS.Web.Domain/IService/Public/IErpService.cs b/src/WMS.Web.Domain/IService/Public/IErpService.cs index 7f48e179..6e66236d 100644 --- a/src/WMS.Web.Domain/IService/Public/IErpService.cs +++ b/src/WMS.Web.Domain/IService/Public/IErpService.cs @@ -46,7 +46,7 @@ namespace WMS.Web.Domain.IService.Public /// /// /// - Task> BillQueryForTransferin(List sourceBillNos = null); + Task> BillQueryForTransferin(List sourceBillNos = null); /// /// erp:单据查询-出库单 diff --git a/src/WMS.Web.Domain/Mappers/InStockMapper.cs b/src/WMS.Web.Domain/Mappers/InStockMapper.cs index 97c1f8e3..10b4551a 100644 --- a/src/WMS.Web.Domain/Mappers/InStockMapper.cs +++ b/src/WMS.Web.Domain/Mappers/InStockMapper.cs @@ -78,6 +78,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/Services/InStockTaskService.cs b/src/WMS.Web.Domain/Services/InStockTaskService.cs index 70516c28..5982a11b 100644 --- a/src/WMS.Web.Domain/Services/InStockTaskService.cs +++ b/src/WMS.Web.Domain/Services/InStockTaskService.cs @@ -355,5 +355,80 @@ namespace WMS.Web.Domain.Services return Result.ReSuccess(); } + + /// + /// 同步:分步式调入单 + /// + /// + /// + /// + public async Task SysnTransferin(List billNos = null, bool isTransaction = true) + { + //1.获取金蝶数据:分步式入库订单数据 + var erp_result = await _erpService.BillQueryForTransferin(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.StktransferInst); + + //找到当前对应来源单据编号的集合数据 + 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(); + } } } diff --git a/src/WMS.Web.Domain/Services/Public/ErpService.cs b/src/WMS.Web.Domain/Services/Public/ErpService.cs index cde50a52..95a12d38 100644 --- a/src/WMS.Web.Domain/Services/Public/ErpService.cs +++ b/src/WMS.Web.Domain/Services/Public/ErpService.cs @@ -457,21 +457,21 @@ namespace WMS.Web.Domain.Services.Public /// /// /// - public async Task> BillQueryForTransferin(List sourceBillNos = null) + public async Task> BillQueryForTransferin(List sourceBillNos = null) { try { var stocks = await _basicsRepositories.GetUcStockAsync(ManagementSystemCode.GLXT0004.ToString(), "", _appOptions.CompanyId); if (stocks.Count == 0) - return ResultList.ReFailure(ResultCodes.ErpStockNoData); + return ResultList.ReFailure(ResultCodes.ErpStockNoData); var stocks_codes = stocks.Select(x => x.Code).ToList(); //1.先登录金蝶-拿到token var token_result = await this.Init(); if (!token_result.IsSuccess) - return ResultList.ReFailure(token_result); + return ResultList.ReFailure(token_result); //2.时间条件:可能还有其它条件 var beginTime = DateTime.Now.AddDays(-2).ToString("yyyy-MM-dd 00:00:00"); @@ -532,10 +532,10 @@ namespace WMS.Web.Domain.Services.Public var result = JsonConvert.DeserializeObject>>(result_json); //5.返回数据的组装 - var erp_list = new List(); + var erp_list = new List(); foreach (var item in result) { - var lis = new ErptTransferinDto(); + var lis = new ErpTransferinDto(); lis.BillNo = item[0]; lis.StockOrgId = Convert.ToInt32(item[1]); lis.MaterialId = Convert.ToInt32(item[2]); @@ -546,11 +546,11 @@ namespace WMS.Web.Domain.Services.Public lis.Remark = item[7]; erp_list.Add(lis); } - return ResultList.ReSuccess(erp_list); + return ResultList.ReSuccess(erp_list); } catch (Exception ex) { - return ResultList.ReFailure(ResultCodes.Erp_BillQuery_Error); + return ResultList.ReFailure(ResultCodes.Erp_BillQuery_Error); } }