diff --git a/ZR.Service/mes/qc/CommonFQCService.cs b/ZR.Service/mes/qc/CommonFQCService.cs index d5a073bc..c0b5f8ba 100644 --- a/ZR.Service/mes/qc/CommonFQCService.cs +++ b/ZR.Service/mes/qc/CommonFQCService.cs @@ -1802,7 +1802,7 @@ namespace ZR.Service.mes.qc .Queryable() .Where(predicate2) .Sum(it => it.QualifiedNumber) ?? 0 - ); + )/3; boardData.StatisticsProductAndPolishQualifiedTotal = boardData.StatisticsPolishQualifiedTotal + boardData.ProductQualifiedTotal; @@ -1873,6 +1873,7 @@ namespace ZR.Service.mes.qc it => it.StartTime <= query.EndTime.Value.ToLocalTime() ) .Sum(it => it.PolishNumber) ?? 0; + gP12PolishTotal = gP12PolishTotal / 3; // 抛光总投入数 int polishRequireTotal = Context @@ -1997,6 +1998,7 @@ namespace ZR.Service.mes.qc it => it.StartTime <= query.EndTime.Value.ToLocalTime() ) .Sum(it => it.RequireNumber) ?? 0; + gP12RequireTotal = gP12RequireTotal / 3; // 后道直接出库 int afterPolishOutTotal = Context @@ -2068,6 +2070,7 @@ namespace ZR.Service.mes.qc .Where(it => it.StartTime >= boardData.PolishStockTime) .Where(it => it.StartTime <= query.StartTime.Value.ToLocalTime()) .Sum(it => it.PolishNumber) ?? 0; + gP12PolishTotal2 = gP12PolishTotal2 / 3; // 抛光总投入数 int polishRequireTotal2 = Context @@ -2143,6 +2146,7 @@ namespace ZR.Service.mes.qc .Where(it => it.StartTime >= boardData.OneTimeStockTime) .Where(it => it.StartTime <= query.StartTime.Value.ToLocalTime()) .Sum(it => it.RequireNumber) ?? 0; + gP12RequireTotal2 = gP12RequireTotal2 / 3; // 后道直接出库 int afterPolishOutTotal2 = Context @@ -2287,6 +2291,81 @@ namespace ZR.Service.mes.qc } } + // 获取抛光报表变动后 每个零件 的实际库存 startTime 必填 + public Dictionary GetBatchPolishPartRealStockNew( + List partNumbers, + DateTime startTime + ) + { + var result = new Dictionary(); + try + { + foreach (var partNumber in partNumbers) + { + startTime = + Context + .Queryable() + .Where(it => it.Partnumber == partNumber) + .Select(it => it.CreatedTime) + .First() ?? startTime; + // 盘点数 + int polishWarehouseTotal = + Context + .Queryable() + .Where(it => it.Partnumber == partNumber) + .Sum(it => it.Quantity) ?? 0; + // 产线抛光 + int productPolishTotal = + Context + .Queryable() + .Where(it => it.FinishedPartNumber == partNumber) + .Where(it => it.StartTime >= startTime) + .Sum(it => it.PaoguangTotal) ?? 0; + productPolishTotal = productPolishTotal / 3; + // 后道反抛 + int afterPolishPolishTotal = + Context + .Queryable() + .Where(it => it.Partnumber == partNumber) + .Where(it => it.StartTime >= startTime) + .Sum(it => it.PaoguangTotal) ?? 0; + // GP12 反抛 + int gP12PolishTotal = + Context + .Queryable() + .Where(it => it.PartNumber == partNumber) + .Where(it => it.StartTime >= startTime) + .Sum(it => it.PolishNumber) ?? 0; + + gP12PolishTotal= gP12PolishTotal / 3; + // 抛光出库 + int polishRequireTotal = + Context + .Queryable() + .Where(it => it.Partnumber == partNumber) + .Where(it => it.StartTime >= startTime) + .Sum(it => it.RequireNumber) ?? 0; + + int realStock = + polishWarehouseTotal + + productPolishTotal + + afterPolishPolishTotal + + gP12PolishTotal + - polishRequireTotal; + + result.Add(partNumber, realStock); + } + + return result; + } + catch (Exception ex) + { + // 此处应记录日志而不是直接抛出异常或返回0,否则调用者无法区别正常0库存与错误 + Console.WriteLine($"An error occurred: {ex.Message}"); + throw; // 重新抛出异常以告知调用者 + } + } + // 获取GP12报表变动后 一次合格品 每个零件 的实际库存 startTime 必填 public Dictionary GetBatchOneTimePartRealStock( List partNumbers, @@ -2392,6 +2471,113 @@ namespace ZR.Service.mes.qc } } + + + // 获取GP12报表变动后 一次合格品 每个零件 的实际库存 startTime 必填 + public Dictionary GetBatchOneTimePartRealStockNew( + List partNumbers, + DateTime startTime + ) + { + var result = new Dictionary(); + try + { + foreach (var partNumber in partNumbers) + { + startTime = + Context + .Queryable() + .Where(it => it.Partnumber == partNumber) + .Select(it => it.CreatedTime) + .First() ?? startTime; + // 基本值 + int oneTimeWarehouseTotal = + Context + .Queryable() + .Where(it => it.Partnumber == partNumber) + .Sum(it => it.Quantity) ?? 0; + + // 产线倒车雷达 + // 倒车雷达剔除数据 + string[] checkStrArray2 = { "倒车雷达" }; + var ParkingSensorPartNumberCheck = Expressionable.Create(); + foreach (string checkStr in checkStrArray2) + { + ParkingSensorPartNumberCheck.Or(it => it.Description.Contains(checkStr)); + } + ; + ParkingSensorPartNumberCheck.And(it => it.Type == 1).And(it => it.Status == 1); + List ParkingSensorPartNumberList = Context + .Queryable() + .Where(ParkingSensorPartNumberCheck.ToExpression()) + .Select(it => it.Partnumber) + .ToList(); + /* var predicateParkingSensor = Expressionable + .Create() + .And(it => ParkingSensorPartNumberList.Contains(it.FinishedPartNumber)) + .And(it => it.FinishedPartNumber == partNumber) + .And(it => it.StartTime >= startTime.ToLocalTime()) + .ToExpression(); + int productParkingSensorbQualifiedTotal = + Context + .Queryable() + .Where(predicateParkingSensor) + .Sum(it => it.QualifiedNumber) ?? 0; + productParkingSensorbQualifiedTotal = productParkingSensorbQualifiedTotal / 3;*/ + // 产线合格 + int productQualifiedTotal = + Context + .Queryable() + .Where(it => + !ParkingSensorPartNumberList.Contains(it.FinishedPartNumber) + ) + .Where(it => it.FinishedPartNumber == partNumber) + .Where(it => it.StartTime >= startTime) + .Sum(it => it.QualifiedNumber) ?? 0; + productQualifiedTotal = productQualifiedTotal / 3; + // 抛光合格 + int polishQualifiedTotal = + Context + .Queryable() + .Where(it => it.Partnumber == partNumber) + .Where(it => it.StartTime >= startTime) + .Sum(it => it.QualifiedNumber) ?? 0; + // gp12投入 + int gP12RequireTotal = + Context + .Queryable() + .Where(it => it.PartNumber == partNumber) + .Where(it => it.StartTime >= startTime) + .Sum(it => it.RequireNumber) ?? 0; + // 后道直接出库 + gP12RequireTotal = gP12RequireTotal / 3; + int afterPolishOutTotal = + Context + .Queryable() + .Where(it => it.Partnumber == partNumber) + .Where(it => it.StartTime >= startTime) + .Where(it => it.Type == 1) + .Sum(it => it.RequireNumber) ?? 0; + + int realStock = + oneTimeWarehouseTotal + + productQualifiedTotal + + polishQualifiedTotal + - gP12RequireTotal + - afterPolishOutTotal; + + result.Add(partNumber, realStock); + } + + return result; + } + catch (Exception ex) + { + // 此处应记录日志而不是直接抛出异常或返回0,否则调用者无法区别正常0库存与错误 + Console.WriteLine($"An error occurred: {ex.Message}"); + throw; // 重新抛出异常以告知调用者 + } + } /// /// 检查零件号是否是门把手 /// diff --git a/ZR.Service/mes/wms/WmOneTimeInventoryService.cs b/ZR.Service/mes/wms/WmOneTimeInventoryService.cs index ac9ed1c5..50840b4d 100644 --- a/ZR.Service/mes/wms/WmOneTimeInventoryService.cs +++ b/ZR.Service/mes/wms/WmOneTimeInventoryService.cs @@ -650,10 +650,11 @@ namespace ZR.Service.mes.wms .First() ?? new DateTime(2024, 11, 16, 12, 0, 0); // DateTime CommonFQCService commonFQCService = new(); - // 获取报表数据 - // 一次合格计算后库存 = 盘点库存 + 产线合格 + 抛光合格 - gp12投入 - 后道直接出库 - return commonFQCService.GetBatchOneTimePartRealStock(partnumbers, checkTime.Value); - } + // 获取报表数据 + // 一次合格计算后库存 = 盘点库存 + 产线合格 + 抛光合格 - gp12投入 - 后道直接出库 + //return commonFQCService.GetBatchOneTimePartRealStock(partnumbers, checkTime.Value); + return commonFQCService.GetBatchOneTimePartRealStockNew(partnumbers, checkTime.Value); + } catch (Exception e) { throw; diff --git a/ZR.Service/mes/wms/WmPolishInventoryService.cs b/ZR.Service/mes/wms/WmPolishInventoryService.cs index 90e2d74c..9435b5d5 100644 --- a/ZR.Service/mes/wms/WmPolishInventoryService.cs +++ b/ZR.Service/mes/wms/WmPolishInventoryService.cs @@ -731,10 +731,11 @@ namespace ZR.Service.mes.wms .Select(it => it.CreatedTime) .First() ?? new DateTime(2024, 11, 16, 12, 0, 0); CommonFQCService commonFQCService = new(); - // 获取报表数据 - // 抛光计算后库存 = 盘点库存 + 产线抛光 + 后道反抛 + GP12反抛 - 抛光投入 - return commonFQCService.GetBatchPolishPartRealStock(partnumbers, checkTime.Value); - } + // 获取报表数据 + // 抛光计算后库存 = 盘点库存 + 产线抛光 + 后道反抛 + GP12反抛 - 抛光投入 + //return commonFQCService.GetBatchPolishPartRealStock(partnumbers, checkTime.Value); + return commonFQCService.GetBatchPolishPartRealStockNew(partnumbers, checkTime.Value); + } catch (Exception e) { throw;