From 40f5513d75bf73a938a61593ac505cac3f52aa55 Mon Sep 17 00:00:00 2001 From: 18942506660 <18942506660@A18942506660> Date: Tue, 2 Jan 2024 11:26:20 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E5=8D=B3=E6=97=B6=E5=BA=93=E5=AD=98?= =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml | 25 +++++++++++ src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml | 7 ++- src/WMS.Web.Core/Dto/Erp/ErpInventoryDto.cs | 26 +++++++++++ .../Dto/Erp/TakeStock/ErpTakeStockSaveDto.cs | 10 ++--- .../IService/Public/IErpService.cs | 2 +- .../Services/Public/ErpService.cs | 44 ++++++++++++++----- .../Services/TakeStockService.cs | 15 ++++++- src/WMS.Web.Domain/Values/Erp/FormIdParam.cs | 12 +++-- 8 files changed, 118 insertions(+), 23 deletions(-) create mode 100644 src/WMS.Web.Core/Dto/Erp/ErpInventoryDto.cs diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml index 6ed47d58..97e3ba50 100644 --- a/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml +++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml @@ -745,6 +745,26 @@ 单据类型 + + + 物料ID + + + + + 组织编码 + + + + + 仓库 + + + + + 数量 + + 编码 @@ -1291,6 +1311,11 @@ 仓位ID + + + 盘点实际数量(实际仓库数量) + + 盘盈数量 diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml index 462c321e..90d9f10a 100644 --- a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml +++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml @@ -3095,7 +3095,7 @@ - + 及时库存 @@ -5185,6 +5185,11 @@ 销售出库单 + + + 即时库存 + + 文件导出状态 diff --git a/src/WMS.Web.Core/Dto/Erp/ErpInventoryDto.cs b/src/WMS.Web.Core/Dto/Erp/ErpInventoryDto.cs new file mode 100644 index 00000000..25ebba3c --- /dev/null +++ b/src/WMS.Web.Core/Dto/Erp/ErpInventoryDto.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace WMS.Web.Core.Dto.Erp +{ + public class ErpInventoryDto + { + /// + /// 物料ID + /// + public int MaterialId { get; set; } + /// + /// 组织编码 + /// + public string OrgCode { get; set; } + /// + /// 仓库 + /// + public string StockCode { get; set; } + /// + /// 数量 + /// + public decimal Qty { get; set; } + } +} diff --git a/src/WMS.Web.Core/Dto/Erp/TakeStock/ErpTakeStockSaveDto.cs b/src/WMS.Web.Core/Dto/Erp/TakeStock/ErpTakeStockSaveDto.cs index 0eff4f5d..506c4768 100644 --- a/src/WMS.Web.Core/Dto/Erp/TakeStock/ErpTakeStockSaveDto.cs +++ b/src/WMS.Web.Core/Dto/Erp/TakeStock/ErpTakeStockSaveDto.cs @@ -114,11 +114,11 @@ namespace WMS.Web.Core.Dto.Erp.TakeStock ///// //[JsonProperty("FAcctQty")] //public decimal BeforeQty { get; set; } - ///// - ///// 盘点实际数量(实际仓库数量) - ///// - //[JsonProperty("FCountQty")] - //public decimal AfterQty { get; set; } + /// + /// 盘点实际数量(实际仓库数量) + /// + [JsonProperty("FCountQty")] + public decimal AfterQty { get; set; } /// /// 盘盈数量 /// diff --git a/src/WMS.Web.Domain/IService/Public/IErpService.cs b/src/WMS.Web.Domain/IService/Public/IErpService.cs index 3ef269db..0f2fbd9f 100644 --- a/src/WMS.Web.Domain/IService/Public/IErpService.cs +++ b/src/WMS.Web.Domain/IService/Public/IErpService.cs @@ -147,7 +147,7 @@ namespace WMS.Web.Domain.IService.Public /// 及时库存 /// /// - Task> BillQueryForInventory(string materialId, string orgCode, string stockId); + Task> BillQueryForInventory(List<(int materialId, string orgCode, string stockCode)> request); //同步数据(保存提交审核) Task> Save(T dto, string formId); //提交 diff --git a/src/WMS.Web.Domain/Services/Public/ErpService.cs b/src/WMS.Web.Domain/Services/Public/ErpService.cs index 64d7bf85..936965b6 100644 --- a/src/WMS.Web.Domain/Services/Public/ErpService.cs +++ b/src/WMS.Web.Domain/Services/Public/ErpService.cs @@ -2133,25 +2133,28 @@ namespace WMS.Web.Domain.Services.Public } } - public async Task> BillQueryForInventory(string materialId,string orgCode,string stockId) + public async Task> BillQueryForInventory(List<(int materialId, string orgCode, string stockCode)> request) { try { //1.先登录金蝶-拿到token var token_result = await this.Init(); if (!token_result.IsSuccess) - return Result.ReFailure(token_result); + return ResultList.ReFailure(token_result); //3.获取金蝶采购订单:拼接参数和条件 var query = new ErpBillQueryDto(token_result.Data); - var param = new ErpBillQueryParamDto("STK_Inventory"); - param.FieldKeys = "FQTY,FBASEAVBQTY,FMATERIALID.FNumber,FSTOCKORGID.FNumber,FSTOCKID.FNumber"; + var param = new ErpBillQueryParamDto(FormIdParam.STK_Inventory.ToString()); + param.FieldKeys = "FBASEQTY,FMATERIALID,FSTOCKORGID.FNumber,FSTOCKID.FNumber"; param.Limit = 100; - //param.FilterString = $"FMATERIALID.FNumber='{materialId}' and FSTOCKORGID.FNumber='{orgCode}'"; - //param.FilterString = $""; - param.FilterString = $"FMATERIALID.FNumber='{materialId}' and FSTOCKORGID.FNumber='{orgCode}' and FSTOCKID.FNumber='{stockId}'"; - + for (int i = 0; i < request.Count(); i++) + { + if(i==0) + param.FilterString = $"(FMATERIALID={request[0].materialId} and FSTOCKORGID.FNumber='{request[0].orgCode}' and FSTOCKID.FNumber='{request[0].stockCode}')"; + else + param.FilterString += $" or (FMATERIALID={request[i].materialId} and FSTOCKORGID.FNumber='{request[i].orgCode}' and FSTOCKID.FNumber='{request[i].stockCode}')"; + } query.Data = JsonConvert.SerializeObject(param); var json = JsonConvert.SerializeObject(query); @@ -2159,12 +2162,31 @@ namespace WMS.Web.Domain.Services.Public var result_json = await _client.ExecuteBillQueryAsync(json); var result = JsonConvert.DeserializeObject>>(result_json); - - return Result.ReSuccess(0); + var erp_list = new List(); + foreach (var item in result) + { + + var lis = erp_list.FirstOrDefault(f => f.MaterialId == Convert.ToInt32(item[1]) + && f.OrgCode.Equals(item[2]) + && f.StockCode.Equals(item[3])); + + if (lis == null) + { + lis.Qty = Convert.ToInt32(item[0]); + lis.MaterialId = Convert.ToInt32(item[1]); + lis.OrgCode = item[2]; + lis.StockCode = item[3]; + erp_list.Add(lis); + } + else + lis.Qty = lis.Qty + Convert.ToInt32(item[0]); + } + + return ResultList.ReSuccess(erp_list); } catch (Exception ex) { - return Result.ReFailure(ResultCodes.Erp_BillQuery_Error); + return ResultList.ReFailure(ResultCodes.Erp_BillQuery_Error); } } diff --git a/src/WMS.Web.Domain/Services/TakeStockService.cs b/src/WMS.Web.Domain/Services/TakeStockService.cs index c4df27c0..ccaff3f2 100644 --- a/src/WMS.Web.Domain/Services/TakeStockService.cs +++ b/src/WMS.Web.Domain/Services/TakeStockService.cs @@ -203,12 +203,23 @@ namespace WMS.Web.Domain.Services var materials_result = await sc_erpService.BillQueryForMaterial(); if (!materials_result.IsSuccess) return Result.ReFailure(ResultCodes.ErpMaterialError); var materials = materials_result.Data.ToList(); + + List<(int materialId, string orgCode, string stockCode)> requestInventory = new List<(int materialId, string orgCode, string stockCode)>(); + entity.Details.ForEach(f => requestInventory.Add((f.MaterialId, f.OrgCode, f.StockCode))); + var res_s = await sc_erpService.BillQueryForInventory(requestInventory); + if (!res_s.IsSuccess) + { + _logger.LogInformation($"及时库存获取异常->错误:{res_s.Message} 数据: {JsonConvert.SerializeObject(entity)}"); + return Result.ReFailure(res_s.Message, res_s.Status); + } //组装dto #region 组装dto //子仓库 ORICO_JD:1000008 GD:1000005 HD:1000007 AD:1000004 List detils = new List(); foreach (var d in entity.Details) { + var erpInventory = res_s.Data.FirstOrDefault(f => f.MaterialId == d.MaterialId && f.StockCode == d.StockCode && f.OrgCode == d.OrgCode); + decimal qty = erpInventory?.Qty ?? 0; var unitNumber = _erpBasicDataExtendService.GetMaterialUnitNumber(materials, d.MaterialId); detils.Add(new ErpTakeStockDetailsSaveDto() { @@ -218,11 +229,12 @@ namespace WMS.Web.Domain.Services UnitId = new ErpNumberDto(unitNumber), //物料带出来 StockId = new ErpNumberDto(d.StockCode), SubStockId = new ErpSubStockDto(d.StockCode, d.Erp_SubStockCode), - //AfterQty = d.AfterQty, + AfterQty = entity.ResultType == TakeStockType.Profit ? (qty + d.FinalQty) : (qty - d.FinalQty), FinalQty = entity.ResultType == TakeStockType.Profit ? d.FinalQty : 0, LossQty = entity.ResultType == TakeStockType.Loss ? d.FinalQty : 0, Fnote = d.Remark }); + requestInventory.Add((d.MaterialId, d.OrgCode, d.StockCode)); } ErpTakeStockSaveDto dto = new ErpTakeStockSaveDto() { @@ -247,6 +259,7 @@ namespace WMS.Web.Domain.Services return Result.ReFailure(ResultCodes.NoDateError); } } + /// /// 同步金蝶操作 /// diff --git a/src/WMS.Web.Domain/Values/Erp/FormIdParam.cs b/src/WMS.Web.Domain/Values/Erp/FormIdParam.cs index 2ca1b5c9..8d433a36 100644 --- a/src/WMS.Web.Domain/Values/Erp/FormIdParam.cs +++ b/src/WMS.Web.Domain/Values/Erp/FormIdParam.cs @@ -64,18 +64,22 @@ namespace WMS.Web.Domain.Values.Erp /// /// 其他出库单 /// - STK_MisDelivery=14, + STK_MisDelivery = 14, /// /// 分布式调出单 /// - STK_TRANSFEROUT=15, + STK_TRANSFEROUT = 15, /// /// 客户 /// - BD_Customer=16, + BD_Customer = 16, /// /// 销售出库单 /// - SAL_OUTSTOCK=17 + SAL_OUTSTOCK = 17, + /// + /// 即时库存 + /// + STK_Inventory = 18 } } From 2f6ba5b5d624e14b9c10b078a88474d14ddd80a6 Mon Sep 17 00:00:00 2001 From: 18942506660 <18942506660@A18942506660> Date: Tue, 2 Jan 2024 11:30:19 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dbug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Dto/ChangeBoxRecord/SaveChangeBoxRecordRequest.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/WMS.Web.Core/Dto/ChangeBoxRecord/SaveChangeBoxRecordRequest.cs b/src/WMS.Web.Core/Dto/ChangeBoxRecord/SaveChangeBoxRecordRequest.cs index 9a43148e..d9614741 100644 --- a/src/WMS.Web.Core/Dto/ChangeBoxRecord/SaveChangeBoxRecordRequest.cs +++ b/src/WMS.Web.Core/Dto/ChangeBoxRecord/SaveChangeBoxRecordRequest.cs @@ -28,7 +28,6 @@ namespace WMS.Web.Core.Dto.ChangeBoxRecord /// 目标箱号 /// [Required(ErrorMessage = "目标箱号不能为空")] - [RegularExpression(@"^[0-9a-zA-Z]{1,}$", ErrorMessage = "箱号只包含英文字母、数字")] public string DestBoxBillNo { get; set; } /// /// 目标箱仓位或重新上架选择仓位 From 205b199403be880c3ea452697ab9b141abd5fc78 Mon Sep 17 00:00:00 2001 From: 18942506660 <18942506660@A18942506660> Date: Tue, 2 Jan 2024 11:35:00 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dbug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/WMS.Web.Api/Controllers/TestController.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/WMS.Web.Api/Controllers/TestController.cs b/src/WMS.Web.Api/Controllers/TestController.cs index 7d1c3f6a..33b9626c 100644 --- a/src/WMS.Web.Api/Controllers/TestController.cs +++ b/src/WMS.Web.Api/Controllers/TestController.cs @@ -73,7 +73,7 @@ namespace WMS.Web.Api.Controllers //var entity=await _takeStockRepositories.GetEntityList(new List() {2 }); //var r= await _takeStockService.Loss_Profit(entity.First()); //var list = await GetList(); - var c = await _erpService.BillQueryForInventory("G03-60-551495", "101", "12485666"); + //var c = await _erpService.BillQueryForInventory("G03-60-551495", "101", "12485666"); //var c = await _erpService.BillQueryForAssembledAppOutStock_Assembly(new List() { "ZZCX003061" }, DateTime.Now.AddDays(-10)); //var bc2 = await _erpService.BillQueryForDeliveryNoticeOutStock(new List() { "FHTZD8022232" }, DateTime.Now.AddDays(-10)); //var bc = await _erpService.BillQueryForTransferOutOutStock(null, DateTime.Now.AddDays(-10)); From 8bb0b75eeadf160b5fe60c79c8063afed1b21606 Mon Sep 17 00:00:00 2001 From: 18942506660 <18942506660@A18942506660> Date: Tue, 2 Jan 2024 11:47:04 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dbug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/WMS.Web.Domain/Services/TakeStockService.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/WMS.Web.Domain/Services/TakeStockService.cs b/src/WMS.Web.Domain/Services/TakeStockService.cs index ccaff3f2..f3726ca8 100644 --- a/src/WMS.Web.Domain/Services/TakeStockService.cs +++ b/src/WMS.Web.Domain/Services/TakeStockService.cs @@ -229,11 +229,11 @@ namespace WMS.Web.Domain.Services UnitId = new ErpNumberDto(unitNumber), //物料带出来 StockId = new ErpNumberDto(d.StockCode), SubStockId = new ErpSubStockDto(d.StockCode, d.Erp_SubStockCode), - AfterQty = entity.ResultType == TakeStockType.Profit ? (qty + d.FinalQty) : (qty - d.FinalQty), + AfterQty = entity.ResultType == TakeStockType.Profit ? (qty + d.FinalQty) : ((qty - d.FinalQty) > 0 ? (qty - d.FinalQty) : 0), FinalQty = entity.ResultType == TakeStockType.Profit ? d.FinalQty : 0, LossQty = entity.ResultType == TakeStockType.Loss ? d.FinalQty : 0, Fnote = d.Remark - }); + }); ; requestInventory.Add((d.MaterialId, d.OrgCode, d.StockCode)); } ErpTakeStockSaveDto dto = new ErpTakeStockSaveDto()