From c4eed6c31df8db821543326582a45357c4ab087e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E6=AD=A3=E6=98=93?= Date: Tue, 8 Apr 2025 18:26:36 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=80=E6=AC=A1=E5=90=88=E6=A0=BC=E4=B8=8E?= =?UTF-8?q?=E6=8A=9B=E5=85=89=E5=93=81=E4=BB=93=E5=BA=93=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E9=80=BB=E8=BE=91=E8=B0=83=E6=95=B4=EF=BC=8C=E5=AF=BC=E5=87=BA?= =?UTF-8?q?=E8=B0=83=E6=95=B4=EF=BC=8C=E7=9B=98=E7=82=B9=E8=B0=83=E6=95=B4?= =?UTF-8?q?=EF=BC=81=EF=BC=81=EF=BC=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../一次合格品仓库数据04-08-153252.xlsx | Bin 0 -> 5372 bytes .../export/抛光仓库数据04-08-154205.xlsx | Bin 0 -> 13652 bytes .../mes/wms/WmOneTimeInventoryService.cs | 104 +++++++++++++----- ZR.Service/mes/wms/WmOneTimeRecordService.cs | 2 +- .../mes/wms/WmPolishInventoryService.cs | 85 +++++++++----- 5 files changed, 134 insertions(+), 57 deletions(-) create mode 100644 ZR.Admin.WebApi/wwwroot/export/一次合格品仓库数据04-08-153252.xlsx create mode 100644 ZR.Admin.WebApi/wwwroot/export/抛光仓库数据04-08-154205.xlsx diff --git a/ZR.Admin.WebApi/wwwroot/export/一次合格品仓库数据04-08-153252.xlsx b/ZR.Admin.WebApi/wwwroot/export/一次合格品仓库数据04-08-153252.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..d0f229735b08c4cd2139a9e7873a56c14d6836ce GIT binary patch literal 5372 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 Hetq{pLsmu5 literal 0 HcmV?d00001 diff --git a/ZR.Service/mes/wms/WmOneTimeInventoryService.cs b/ZR.Service/mes/wms/WmOneTimeInventoryService.cs index 22f51885..e7056ed7 100644 --- a/ZR.Service/mes/wms/WmOneTimeInventoryService.cs +++ b/ZR.Service/mes/wms/WmOneTimeInventoryService.cs @@ -280,6 +280,7 @@ namespace ZR.Service.mes.wms ) .ToList(); //TODO 取出库存表 WmOneTimeInventory 最小CreatedTime时间 + DateTime minDateTime = Context .Queryable() @@ -294,9 +295,39 @@ namespace ZR.Service.mes.wms .ToList(); foreach (WmOneTimeInventoryDto item in list) { + + //TODO 20250408 盘点时间修正(三个时间比对) + WmOneTimeRecord minCheckRecord = + wmOneTimeRecords + .Where(o => o.Partnumber == item.Partnumber && o.ChangeType == 3) + .OrderByDescending(o => o.ActionTime) + .FirstOrDefault(); + DateTime minCheckRecordTime = DateTime.MinValue; + int minCheckRecordQuantity = 0; + if (minCheckRecord != null) + { + minCheckRecordTime = minCheckRecord.ActionTime ?? DateTime.MinValue; + } + + DateTime minCheckInventoryTime = item.CreatedTime ?? minDateTime; + //TODO 20250408修改 最小盘点时间判断/如有盘点记录,则优先取盘点记录数据 + DateTime checkTime = + minCheckRecordTime > minCheckInventoryTime + ? minCheckRecordTime + : minCheckInventoryTime; + if (checkTime == minCheckRecordTime) + { + // TODO 20250408 如果最早记录是盘点记录,则取盘点变动数量 + minCheckRecordQuantity = minCheckRecord.ChangeQuantity ?? 0; + } + else + { + minCheckRecordQuantity = item.Quantity.Value; + } + int? runum = wmOneTimeRecords .Where(o => - o.ActionTime >= item.CreatedTime + o.ActionTime >= checkTime && o.Partnumber == item.Partnumber && o.ChangeType == 1 ) @@ -304,13 +335,15 @@ namespace ZR.Service.mes.wms .Sum(); int? chunum = wmOneTimeRecords .Where(o => - o.ActionTime >= item.CreatedTime + o.ActionTime >= checkTime && o.Partnumber == item.Partnumber && o.ChangeType == 2 ) .Select(o => o.ChangeQuantity) .Sum(); - item.RealQuantity = item.Quantity.Value + (runum.Value - chunum.Value); + + item.RealQuantity = minCheckRecordQuantity + (runum.Value - chunum.Value); + item.CreatedTime = checkTime; } list = list.Where(it => it.RealQuantity != 0 || it.Quantity != 0) .Where(it => !string.IsNullOrEmpty(it.Partnumber)) @@ -611,6 +644,7 @@ namespace ZR.Service.mes.wms } } + // 盘点 public int DoWmOneTimeStocktaking(WmOneTimeInventory parm) { if (parm.Quantity < 0) @@ -621,7 +655,7 @@ namespace ZR.Service.mes.wms { Context.Ado.BeginTran(); // 检查是否存在库中 - WmOneTimeInventory oneTImeInventory = Context +/* WmOneTimeInventory oneTImeInventory = Context .Queryable() .Where(it => it.Id == parm.Id) .Where(it => it.Status == 1) @@ -631,8 +665,9 @@ namespace ZR.Service.mes.wms Context.Ado.RollbackTran(); throw new Exception("盘点记录不存在" + parm.Id); } - Context.Updateable(parm).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommand(); + Context.Updateable(parm).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommand();*/ // 已有则新增记录 + //TODO 20250408 新逻辑调整 只添加盘点记录 算库存数时自动调整 string code = !string.IsNullOrEmpty(parm.WorkOrder) ? parm.WorkOrder : SnowFlakeSingle.Instance.NextId().ToString(); @@ -642,7 +677,7 @@ namespace ZR.Service.mes.wms parm.Partnumber, 3, parm.Quantity, - parm.ActionTime, + parm.ActionTime ?? DateTime.Now, parm.Remark, parm.CreatedBy ); @@ -687,44 +722,47 @@ namespace ZR.Service.mes.wms .OrderBy(it => it.Description) .ToList(); } - + //导出 public List GetExportList(WmOneTimeInventoryQueryDto parm) { try { - List materials = GetWmMaterialList(parm.Partnumber); + /* List materials = GetWmMaterialList(parm.Partnumber); - // 获取所有partnumber列表 - List partnumbers = materials - .Where(it => !string.IsNullOrEmpty(it.Partnumber)) - .Select(it => it.Partnumber) - .Distinct() - .ToList(); + // 获取所有partnumber列表 + List partnumbers = materials + .Where(it => !string.IsNullOrEmpty(it.Partnumber)) + .Select(it => it.Partnumber) + .Distinct() + .ToList(); - // 批量获取盘点数和现有库存 - Dictionary stockNumbers = GetBatchOneTimeStockPartNum(partnumbers); - Dictionary realNumbers = GetBatchOneTimeRealPartNum(partnumbers); + // 批量获取盘点数和现有库存 + Dictionary stockNumbers = GetBatchOneTimeStockPartNum(partnumbers); + Dictionary realNumbers = GetBatchOneTimeRealPartNum(partnumbers);*/ // 更新盘点时间 - DateTime dateTime = DateTime.Now.ToLocalTime(); + /*DateTime dateTime = DateTime.Now.ToLocalTime();*/ + + //TODO 20250408 新导出逻辑 // 构建导出数据 - List exportDto = materials + WmOneTimeInventoryQueryDto queryParams = new() + { + PageSize = 10000, + PageNum = 1 + }; + List exportDto = GetListNew(queryParams).Result .Select(it => { - bool found1 = stockNumbers.TryGetValue(it.Partnumber, out object value1); - int stockNumber = found1 && value1 != null ? Convert.ToInt32(value1) : 0; - bool found2 = realNumbers.TryGetValue(it.Partnumber, out int realNumber); - return new WmOneTimeInventoryExportDto { 零件号 = it.Partnumber, 颜色 = it.Color, 规格 = it.Specification, 描述 = it.Description, - 盘点数 = stockNumber, - 现有库存 = found2 ? realNumber : 0, - 盘点时间 = dateTime, + 盘点数 = it.Quantity ?? 0, + 现有库存 = it.RealQuantity, + 盘点时间 = it.CreatedTime, }; }) .ToList(); @@ -929,7 +967,9 @@ namespace ZR.Service.mes.wms //TODO 判断oneTimeRecordList中是否存在oneTimeInventoryList没有的零件号 // 提取 oneTimeInventoryList 中的所有零件号 - HashSet oneTimeInventoryPartnumbers = new HashSet(oneTimeInventoryList.Select(i => i.Partnumber)); + HashSet oneTimeInventoryPartnumbers = new HashSet( + oneTimeInventoryList.Select(i => i.Partnumber) + ); foreach (var recordItem in oneTimeRecordList) { if (!oneTimeInventoryPartnumbers.Contains(recordItem.Partnumber)) @@ -940,14 +980,17 @@ namespace ZR.Service.mes.wms Name = "该零件号记录丢失", Partnumber = recordItem.Partnumber, Description = "该零件号与盘点数据不匹配。请确认情况,是否未盘点到!", - ErrorMessage = $"检测到【一次合格品记录】中的零件号在盘点清单中不存在。记录时间: {recordItem.ActionTime}", + ErrorMessage = + $"检测到【一次合格品记录】中的零件号在盘点清单中不存在。记录时间: {recordItem.ActionTime}", CheckTime = DateTime.Now } ); } } //TODO 判断polishRecordList中是否存在polishInventoryList没有的零件号 - HashSet polishInventoryPartnumbers = new HashSet(polishInventoryList.Select(i => i.Partnumber)); + HashSet polishInventoryPartnumbers = new HashSet( + polishInventoryList.Select(i => i.Partnumber) + ); foreach (var recordItem in polishRecordList) { if (!polishInventoryPartnumbers.Contains(recordItem.Partnumber)) @@ -958,7 +1001,8 @@ namespace ZR.Service.mes.wms Name = "该零件号记录丢失", Partnumber = recordItem.Partnumber, Description = "该零件号与盘点数据不匹配。请确认情况,是否未盘点到!", - ErrorMessage = $"检测到【抛光品记录】中的零件号在盘点清单中不存在。记录时间: {recordItem.ActionTime}", + ErrorMessage = + $"检测到【抛光品记录】中的零件号在盘点清单中不存在。记录时间: {recordItem.ActionTime}", CheckTime = DateTime.Now } ); diff --git a/ZR.Service/mes/wms/WmOneTimeRecordService.cs b/ZR.Service/mes/wms/WmOneTimeRecordService.cs index faa082f5..e1ffbd98 100644 --- a/ZR.Service/mes/wms/WmOneTimeRecordService.cs +++ b/ZR.Service/mes/wms/WmOneTimeRecordService.cs @@ -135,7 +135,7 @@ namespace ZR.Service.mes.wms it => it.FinishedPartNumber == parm.Partnumber ) .Where(it => !it.ProductDescription.Contains("倒车雷达")) - .Where(it => it.StartTime >= parm.StartTime) + .Where(it => it.StartTime >= parm.StartTime) .Where(it => it.QualifiedNumber > 0) .Where(it => it.Remark == "抛光") .ToList(); diff --git a/ZR.Service/mes/wms/WmPolishInventoryService.cs b/ZR.Service/mes/wms/WmPolishInventoryService.cs index 40c98149..c7c063eb 100644 --- a/ZR.Service/mes/wms/WmPolishInventoryService.cs +++ b/ZR.Service/mes/wms/WmPolishInventoryService.cs @@ -313,7 +313,34 @@ namespace ZR.Service.mes.wms // TODO 匹配记录(partnumber零件号,时间范围) foreach (WmPolishInventoryDto item in list) { - // TODO 获取实际库存 item.quantity(盘点开始数量) + recourd 记录的入库数量 - 出库数量(筛选条件是 时间区间【item.CreatedTime】 + partnumber[item.partnumber]) + //TODO 20250408 盘点时间修正(三个时间比对) + WmPolishRecord minCheckRecord = + wmPolishRecords + .Where(o => o.Partnumber == item.Partnumber && o.ChangeType == 3) + .OrderByDescending(o => o.ActionTime) + .FirstOrDefault(); + DateTime minCheckRecordTime = DateTime.MinValue; + int minCheckRecordQuantity = 0; + if (minCheckRecord != null) + { + minCheckRecordTime = minCheckRecord.ActionTime ?? DateTime.MinValue; + } + + DateTime minCheckInventoryTime = item.CreatedTime ?? minDateTime; + //TODO 20250408修改 最小盘点时间判断/如有盘点记录,则优先取盘点记录数据 + DateTime checkTime = + minCheckRecordTime > minCheckInventoryTime + ? minCheckRecordTime + : minCheckInventoryTime; + if (checkTime == minCheckRecordTime) + { + // TODO 20250408 如果最早记录是盘点记录,则取盘点变动数量 + minCheckRecordQuantity = minCheckRecord.ChangeQuantity ?? 0; + } + else + { + minCheckRecordQuantity = item.Quantity.Value; + } int? runum = wmPolishRecords .Where(o => o.ActionTime >= item.CreatedTime @@ -330,7 +357,8 @@ namespace ZR.Service.mes.wms ) .Select(o => o.ChangeQuantity) .Sum(); - item.RealQuantity = item.Quantity.Value + (runum.Value - chunum.Value); + item.RealQuantity = minCheckRecordQuantity + (runum.Value - chunum.Value); + item.CreatedTime = checkTime; } list = list.Where(it => it.RealQuantity != 0 || it.Quantity != 0) @@ -696,7 +724,7 @@ namespace ZR.Service.mes.wms throw new Exception(e.Message); } } - + // 盘点 public int DoWmPolishStocktaking(WmPolishInventory parm) { if (parm.Quantity < 0) @@ -707,7 +735,7 @@ namespace ZR.Service.mes.wms { Context.Ado.BeginTran(); // 检查是否存在库中 - WmPolishInventory polishInventory = Context + /* WmPolishInventory polishInventory = Context .Queryable() .Where(it => it.Id == parm.Id) .Where(it => it.Status == 1) @@ -717,7 +745,7 @@ namespace ZR.Service.mes.wms Context.Ado.RollbackTran(); throw new Exception("盘点记录不存在" + parm.Id); } - Context.Updateable(parm).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommand(); + Context.Updateable(parm).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommand();*/ // 已有则新增记录 string code = !string.IsNullOrEmpty(parm.WorkOrder) ? parm.WorkOrder @@ -728,7 +756,7 @@ namespace ZR.Service.mes.wms parm.Partnumber, 3, parm.Quantity, - parm.ActionTime, + parm.ActionTime ?? DateTime.Now, parm.Remark, parm.CreatedBy ); @@ -779,39 +807,43 @@ namespace ZR.Service.mes.wms { try { - List materials = GetWmMaterialList(parm.Partnumber); + /* List materials = GetWmMaterialList(parm.Partnumber); - // 获取所有partnumber列表 - List partnumbers = materials - .Where(it => !string.IsNullOrEmpty(it.Partnumber)) - .Select(it => it.Partnumber) - .Distinct() - .ToList(); + // 获取所有partnumber列表 + List partnumbers = materials + .Where(it => !string.IsNullOrEmpty(it.Partnumber)) + .Select(it => it.Partnumber) + .Distinct() + .ToList(); - // 批量获取盘点数和现有库存 - Dictionary stockNumbers = GetBatchPolishStockPartNum(partnumbers); - Dictionary realNumbers = GetBatchPolishRealPartNum(partnumbers); + // 批量获取盘点数和现有库存 + Dictionary stockNumbers = GetBatchPolishStockPartNum(partnumbers); + Dictionary realNumbers = GetBatchPolishRealPartNum(partnumbers); - // 更新盘点时间 - DateTime dateTime = DateTime.Now.ToLocalTime(); + // 更新盘点时间 + DateTime dateTime = DateTime.Now.ToLocalTime();*/ + + //TODO 20250408 新导出逻辑 // 构建导出数据 - List exportDto = materials + WmPolishInventoryQueryDto queryParams = new() + { + PageSize = 10000, + PageNum = 1 + }; + // 构建导出数据 + List exportDto = GetListNew(queryParams).Result .Select(it => { - bool found1 = stockNumbers.TryGetValue(it.Partnumber, out object value1); - int stockNumber = found1 && value1 != null ? Convert.ToInt32(value1) : 0; - bool found2 = realNumbers.TryGetValue(it.Partnumber, out int realNumber); - return new WmPolishInventoryExportDto { 零件号 = it.Partnumber, 颜色 = it.Color, 规格 = it.Specification, 描述 = it.Description, - 盘点时间 = dateTime, - 盘点数 = stockNumber, - 现有库存 = found2 ? realNumber : 0, + 盘点数 = it.Quantity ?? 0, + 现有库存 = it.RealQuantity, + 盘点时间 = it.CreatedTime, }; }) .ToList(); @@ -867,6 +899,7 @@ namespace ZR.Service.mes.wms /// public (string, object, object) ImportExcel(List importList) { + List wmPolishInventorylist = importList .Select(it => new WmPolishInventory {