diff --git a/ZR.Admin.WebApi/Controllers/mes/wms/WmGp12QualityStatisticsController.cs b/ZR.Admin.WebApi/Controllers/mes/wms/WmGp12QualityStatisticsController.cs index 2e08c99d..b76ca50f 100644 --- a/ZR.Admin.WebApi/Controllers/mes/wms/WmGp12QualityStatisticsController.cs +++ b/ZR.Admin.WebApi/Controllers/mes/wms/WmGp12QualityStatisticsController.cs @@ -42,6 +42,23 @@ namespace ZR.Admin.WebApi.Controllers return SUCCESS(response); } + /// + /// GP12数据导出 + /// + /// + /// + [HttpGet("export")] + [Log(Title = "GP12数据导出", BusinessType = BusinessType.EXPORT)] + public IActionResult Export([FromQuery] WmGp12QualityStatisticsQueryDto parm) + { + parm.PageNum = 1; + parm.PageSize = 10000; + var list = _WmGp12QualityStatisticsService.GetList(parm); + + var result = ExportExcelMini(list.Result, "export", "GP12数据"); + return ExportExcel(result.Item2, result.Item1); + } + /// /// 查询GP12质检记录表详情 /// diff --git a/ZR.Admin.WebApi/Controllers/mes/wms/WmPolishQualityStatisticsController.cs b/ZR.Admin.WebApi/Controllers/mes/wms/WmPolishQualityStatisticsController.cs index 81abbc08..8cc0ecd3 100644 --- a/ZR.Admin.WebApi/Controllers/mes/wms/WmPolishQualityStatisticsController.cs +++ b/ZR.Admin.WebApi/Controllers/mes/wms/WmPolishQualityStatisticsController.cs @@ -3,6 +3,7 @@ using ZR.Admin.WebApi.Extensions; using ZR.Admin.WebApi.Filters; using ZR.Model.MES.wms; using ZR.Model.MES.wms.Dto; +using ZR.Service.mes.wms; using ZR.Service.mes.wms.IService; //创建时间:2024-08-07 @@ -42,6 +43,23 @@ namespace ZR.Admin.WebApi.Controllers return SUCCESS(response); } + /// + /// 三楼抛光操作数据导出 + /// + /// + /// + [HttpGet("export")] + [Log(Title = "后道检验报表数据导出", BusinessType = BusinessType.EXPORT)] + public IActionResult Export([FromQuery] WmPolishQualityStatisticsQueryDto parm) + { + parm.PageNum = 1; + parm.PageSize = 10000; + var list = _WmPolishQualityStatisticsService.GetList(parm); + + var result = ExportExcelMini(list.Result, "export", "后道检验报表"); + return ExportExcel(result.Item2, result.Item1); + } + /// /// 查询抛光管理-质量统计详情 /// diff --git a/ZR.Admin.WebApi/Controllers/mes/wms/WmPolishWorkQualityStatisticsController.cs b/ZR.Admin.WebApi/Controllers/mes/wms/WmPolishWorkQualityStatisticsController.cs index 177a52cf..16c1f1bd 100644 --- a/ZR.Admin.WebApi/Controllers/mes/wms/WmPolishWorkQualityStatisticsController.cs +++ b/ZR.Admin.WebApi/Controllers/mes/wms/WmPolishWorkQualityStatisticsController.cs @@ -3,6 +3,7 @@ using ZR.Admin.WebApi.Extensions; using ZR.Admin.WebApi.Filters; using ZR.Model.MES.wms; using ZR.Model.MES.wms.Dto; +using ZR.Service.mes.wms; using ZR.Service.mes.wms.IService; //创建时间:2024-08-08 @@ -41,6 +42,23 @@ namespace ZR.Admin.WebApi.Controllers return SUCCESS(response); } + /// + /// 三楼抛光操作数据导出 + /// + /// + /// + [HttpGet("export")] + [Log(Title = "三楼抛光操作报表数据导出", BusinessType = BusinessType.EXPORT)] + public IActionResult Export([FromQuery] WmPolishWorkQualityStatisticsQueryDto parm) + { + parm.PageNum = 1; + parm.PageSize = 10000; + var list = _WmPolishWorkQualityStatisticsService.GetList(parm); + + var result = ExportExcelMini(list.Result, "export", "抛光操作报表"); + return ExportExcel(result.Item2, result.Item1); + } + /// /// 查询抛光管理-抛光操作详情 /// @@ -62,7 +80,7 @@ namespace ZR.Admin.WebApi.Controllers [HttpPost] [Log(Title = "抛光管理-抛光操作", BusinessType = BusinessType.INSERT)] public IActionResult AddWmPolishWorkQualityStatistics( - [FromBody] WmPolishQualityStatisticsDto parm + [FromBody] WmPolishWorkQualityStatisticsDto parm ) { try @@ -88,7 +106,7 @@ namespace ZR.Admin.WebApi.Controllers [HttpPut] [Log(Title = "抛光管理-抛光操作", BusinessType = BusinessType.UPDATE)] public IActionResult UpdateWmPolishQualityStatistics( - [FromBody] WmPolishQualityStatisticsDto parm + [FromBody] WmPolishWorkQualityStatisticsDto parm ) { try diff --git a/ZR.Model/MES/qc/DTO/QcCommonFqcDto.cs b/ZR.Model/MES/qc/DTO/QcCommonFqcDto.cs index 9126ae4c..98664a5f 100644 --- a/ZR.Model/MES/qc/DTO/QcCommonFqcDto.cs +++ b/ZR.Model/MES/qc/DTO/QcCommonFqcDto.cs @@ -219,11 +219,21 @@ /// public int ProductQualifiedTotal { get; set; } = 0; + /// + /// 产线合格率 + /// + public string ProductQualifiePassRate { get; set; } = "0%"; + /// /// 产线门把手合格数 /// public int ProductDoorknobQualifiedTotal { get; set; } = 0; + /// + /// 产线倒车雷达合格数 + /// + public int ProductParkingSensorbQualifiedTotal { get; set; } = 0; + /// /// 产线抛光总数 /// @@ -259,6 +269,11 @@ /// public int PolishDoorknobQualifiedTotal { get; set; } = 0; + /// + /// 抛光倒车雷达合格数 + /// + public int PolishParkingSensorbQualifiedTotal { get; set; } = 0; + /// /// 抛光打磨总数 /// @@ -284,6 +299,11 @@ /// public int AfterPolishDoorknobQualifiedTotal { get; set; } = 0; + /// + /// 后道倒车雷达合格数 + /// + public int AfterPolishParkingSensorbQualifiedTotal { get; set; } = 0; + /// /// 后道检验抛光总数 /// @@ -314,11 +334,21 @@ /// public int GP12QualifiedTotal { get; set; } = 0; + /// + /// GP12合格率 + /// + public string GP12QualifiePassRate { get; set; } = "0%"; + /// /// 一次合格品GP12门把手数(需要清理) /// public int GP12DoorknobQualifiedTotal { get; set; } = 0; + /// + /// 一次合格品GP12倒车雷达 + /// + public int GP12ParkingSensorQualifiedTotal { get; set; } = 0; + /// /// 一次合格品GP12检验抛光总数 /// @@ -353,6 +383,21 @@ /// public int FinishProductPackageOutTotal { get; set; } = 0; + + /// ====== 二次统计数据 ====== + + + /// + /// 总抛光合格数 = GP12抛光合格数 + 后道抛光合格数 + /// + public int StatisticsPolishQualifiedTotal { get; set; } = 0; + + /// + /// 总合格数(二次合格数) = 总抛光合格数 + 产线合格数 + /// + public int StatisticsProductAndPolishQualifiedTotal { get; set; } = 0; + + /// /// 备注 /// diff --git a/ZR.Model/MES/wms/Dto/WmGp12QualityStatisticsDto.cs b/ZR.Model/MES/wms/Dto/WmGp12QualityStatisticsDto.cs index ae9244a1..2ee2bfd0 100644 --- a/ZR.Model/MES/wms/Dto/WmGp12QualityStatisticsDto.cs +++ b/ZR.Model/MES/wms/Dto/WmGp12QualityStatisticsDto.cs @@ -13,6 +13,8 @@ namespace ZR.Model.MES.wms.Dto public string Team { get; set; } + public int Type { get; set; } = -1; + public string CreatedBy { get; set; } public DateTime? StartTime { get; set; } @@ -59,6 +61,8 @@ namespace ZR.Model.MES.wms.Dto public bool IsReturnWorkpiece { get; set; } + public bool IsPolish { get; set; } + public int? Type { get; set; } public string Remark { get; set; } diff --git a/ZR.Model/MES/wms/Dto/WmPolishQualityStatisticsDto.cs b/ZR.Model/MES/wms/Dto/WmPolishQualityStatisticsDto.cs index dfc1dcb3..bc7d9bbf 100644 --- a/ZR.Model/MES/wms/Dto/WmPolishQualityStatisticsDto.cs +++ b/ZR.Model/MES/wms/Dto/WmPolishQualityStatisticsDto.cs @@ -14,6 +14,8 @@ namespace ZR.Model.MES.wms.Dto public string Team { get; set; } + public int Type { get; set; } = -1; + public string CreatedBy { get; set; } public DateTime? StartTime { get; set; } @@ -131,6 +133,10 @@ namespace ZR.Model.MES.wms.Dto // 是否是返工件 public bool IsReturnWorkpiece { get; set; } = false; + /// + /// 是否跳过GP12计算抛光合格数 + /// + public bool IsOver { get; set; } = false; } } \ No newline at end of file diff --git a/ZR.Model/MES/wms/Dto/WmPolishWorkQualityStatisticsDto.cs b/ZR.Model/MES/wms/Dto/WmPolishWorkQualityStatisticsDto.cs index ae17b9a4..a49c22f4 100644 --- a/ZR.Model/MES/wms/Dto/WmPolishWorkQualityStatisticsDto.cs +++ b/ZR.Model/MES/wms/Dto/WmPolishWorkQualityStatisticsDto.cs @@ -13,6 +13,7 @@ namespace ZR.Model.MES.wms.Dto public string Partnumber { get; set; } public string Team { get; set; } + public int Type { get; set; } = -1; public string CreatedBy { get; set; } @@ -130,5 +131,10 @@ namespace ZR.Model.MES.wms.Dto // 是否是返工件 public bool IsReturnWorkpiece { get; set; } = false; + /// + /// 是否跳过后道抛光直接出库 + /// + public bool IsOutbound { get; set; } = false; + } } \ No newline at end of file diff --git a/ZR.Model/MES/wms/WmGp12QualityStatistics.cs b/ZR.Model/MES/wms/WmGp12QualityStatistics.cs index f4b3cba3..e29b3fd3 100644 --- a/ZR.Model/MES/wms/WmGp12QualityStatistics.cs +++ b/ZR.Model/MES/wms/WmGp12QualityStatistics.cs @@ -84,7 +84,13 @@ namespace ZR.Model.MES.wms public bool IsReturnWorkpiece { get; set; } /// - /// 类别(0-默认 1-抛光 2-打磨 3-报废 4-合计) + /// 是否是抛光品 + /// + [SugarColumn(IsIgnore = true)] + public bool IsPolish { get; set; } + + /// + /// 类别(0-默认 1-抛光品) /// public int? Type { get; set; } diff --git a/ZR.Model/MES/wms/WmPolishQualityStatistics.cs b/ZR.Model/MES/wms/WmPolishQualityStatistics.cs index 7156afca..71ab96dc 100644 --- a/ZR.Model/MES/wms/WmPolishQualityStatistics.cs +++ b/ZR.Model/MES/wms/WmPolishQualityStatistics.cs @@ -2,7 +2,7 @@ namespace ZR.Model.MES.wms { /// - /// 抛光管理-质量统计 + /// 抛光管理-质量统计(后道) /// [SugarTable("wm_polish_quality_statistics")] public class WmPolishQualityStatistics @@ -78,7 +78,7 @@ namespace ZR.Model.MES.wms public DateTime? EndTime { get; set; } /// - /// 类别(0-默认 1-抛光 2-打磨 3-报废 4-合计) + /// 类别(0-默认 1-跳过GP12直接计算抛光合格) /// public int? Type { get; set; } @@ -297,5 +297,11 @@ namespace ZR.Model.MES.wms [SugarColumn(ColumnName = "is_return_workpiece")] public bool IsReturnWorkpiece { get; set; } = false; + /// + /// 是否计算抛光合格数 + /// + [SugarColumn(IsIgnore = true)] + public bool IsOver { get; set; } = false; + } } \ No newline at end of file diff --git a/ZR.Model/MES/wms/WmPolishWorkQualityStatistics.cs b/ZR.Model/MES/wms/WmPolishWorkQualityStatistics.cs index aec1ccbc..63e5920a 100644 --- a/ZR.Model/MES/wms/WmPolishWorkQualityStatistics.cs +++ b/ZR.Model/MES/wms/WmPolishWorkQualityStatistics.cs @@ -291,5 +291,11 @@ namespace ZR.Model.MES.wms [SugarColumn(ColumnName = "is_return_workpiece")] public bool IsReturnWorkpiece { get; set; } = false; + /// + /// 是否抛光直接出库 + /// + [SugarColumn(IsIgnore = true)] + public bool IsOutbound { get; set; } = false; + } } \ No newline at end of file diff --git a/ZR.Service/mes/qc/CommonFQCService.cs b/ZR.Service/mes/qc/CommonFQCService.cs index c5ddb282..2ef59312 100644 --- a/ZR.Service/mes/qc/CommonFQCService.cs +++ b/ZR.Service/mes/qc/CommonFQCService.cs @@ -514,28 +514,19 @@ namespace ZR.Service.mes.qc } } - // 获取产线相关数据 + /// + /// 获取产线相关数据 + /// + /// + /// + /// public QcProductAndPolishAndOneTimeFqcBoardDto GetProductTotal( QcProductAndPolishAndOneTimeFqcBoardDto boardData, QcProductAndPolishAndOneTimeFqcBoardQuery query ) { + // 投入数 var predicate1 = Expressionable - .Create() - .AndIF( - !string.IsNullOrEmpty(query.Partnumber), - it => it.FinishedPartNumber == query.Partnumber - ) - .AndIF( - query.StartTime != null, - it => it.StartTime >= query.StartTime.Value.ToLocalTime() - ) - .AndIF( - query.EndTime != null, - it => it.StartTime <= query.EndTime.Value.ToLocalTime() - ) - .ToExpression(); - var predicate2 = Expressionable .Create() .AndIF( !string.IsNullOrEmpty(query.Partnumber), @@ -550,23 +541,34 @@ namespace ZR.Service.mes.qc it => it.StartTime <= query.EndTime.Value.ToLocalTime() ) .ToExpression(); - string[] checkStrArray = { "门把手", "面盖", "T22", "T26", "A58", "A60", "C01", "B02", "V71", "T1EJ" }; + // 门把手提取 + string[] checkStrArray = + { + "门把手", + "面盖", + "T22", + "T26", + "A58", + "A60", + "C01", + "B02", + "V71", + "T1EJ" + }; var DoorknobPartNumberCheck = Expressionable.Create(); foreach (string checkStr in checkStrArray) { DoorknobPartNumberCheck.Or(it => it.Description.Contains(checkStr)); } ; - DoorknobPartNumberCheck - .And(it => it.Type == 1) - .And(it => it.Status == 1); + DoorknobPartNumberCheck.And(it => it.Type == 1).And(it => it.Status == 1); List DoorknobPartNumberList = Context .Queryable() .Where(DoorknobPartNumberCheck.ToExpression()) .Select(it => it.Partnumber) .ToList(); - var predicate3 = Expressionable - .Create() + var predicate2 = Expressionable + .Create() .And(it => DoorknobPartNumberList.Contains(it.FinishedPartNumber)) .AndIF( !string.IsNullOrEmpty(query.Partnumber), @@ -581,34 +583,71 @@ namespace ZR.Service.mes.qc it => it.StartTime <= query.EndTime.Value.ToLocalTime() ) .ToExpression(); + // 倒车雷达提取 + 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)) + .AndIF( + !string.IsNullOrEmpty(query.Partnumber), + it => it.FinishedPartNumber == query.Partnumber + ) + .AndIF( + query.StartTime != null, + it => it.StartTime >= query.StartTime.Value.ToLocalTime() + ) + .AndIF( + query.EndTime != null, + it => it.StartTime <= query.EndTime.Value.ToLocalTime() + ) + .ToExpression(); boardData.ProductRequireTotal = Context - .Queryable() + .Queryable() .Where(predicate1) .Sum(it => it.RequireNumber) ?? 0; boardData.ProductQualifiedTotal = Context - .Queryable() + .Queryable() .Where(predicate1) .Sum(it => it.QualifiedNumber) ?? 0; + // 门把手合格 boardData.ProductDoorknobQualifiedTotal = Context - .Queryable() - .Where(predicate3) + .Queryable() + .Where(predicate2) + .Sum(it => it.QualifiedNumber) ?? 0; + // 倒车雷达合格 + boardData.ProductParkingSensorbQualifiedTotal = + Context + .Queryable() + .Where(predicateParkingSensor) .Sum(it => it.QualifiedNumber) ?? 0; boardData.ProductPolishTotal = Context .Queryable() - .Where(predicate2) + .Where(predicate1) .Sum(it => it.PaoguangTotal) ?? 0; boardData.ProductSandingTotal = Context - .Queryable() + .Queryable() .Where(predicate1) .Sum(it => it.DamoTotal) ?? 0; boardData.ProductDiscardTotal = Context - .Queryable() + .Queryable() .Where(predicate1) .Sum(it => it.BaofeiTotal) ?? 0; @@ -616,9 +655,20 @@ namespace ZR.Service.mes.qc boardData.ProductRequireTotal = boardData.ProductRequireTotal / 3; boardData.ProductQualifiedTotal = boardData.ProductQualifiedTotal / 3; boardData.ProductDoorknobQualifiedTotal = boardData.ProductDoorknobQualifiedTotal / 3; + boardData.ProductParkingSensorbQualifiedTotal = + boardData.ProductParkingSensorbQualifiedTotal / 3; boardData.ProductPolishTotal = boardData.ProductPolishTotal / 3; boardData.ProductSandingTotal = boardData.ProductSandingTotal / 3; boardData.ProductDiscardTotal = boardData.ProductDiscardTotal / 3; + // 合格数补正(合格数 = 总合格数 - 门把手 - 倒车雷达) + /*boardData.ProductQualifiedTotal = boardData.ProductQualifiedTotal - (boardData.ProductDoorknobQualifiedTotal + boardData.ProductParkingSensorbQualifiedTotal);*/ + + if (boardData.ProductRequireTotal > 0) + { + double passRate = + ((double)boardData.ProductQualifiedTotal / boardData.ProductRequireTotal) * 100; + boardData.ProductQualifiePassRate = passRate.ToString("0") + "%"; + } return boardData; } @@ -665,21 +715,77 @@ namespace ZR.Service.mes.qc it => it.StartTime <= query.EndTime.Value.ToLocalTime() ) .ToExpression(); - string[] checkStrArray = { "门把手", "面盖", "T22", "T26", "A58", "A60", "C01", "B02", "V71", "T1EJ" }; + string[] checkStrArray = + { + "门把手", + "面盖", + "T22", + "T26", + "A58", + "A60", + "C01", + "B02", + "V71", + "T1EJ" + }; var DoorknobPartNumberCheck = Expressionable.Create(); foreach (string checkStr in checkStrArray) { DoorknobPartNumberCheck.Or(it => it.Description.Contains(checkStr)); } ; - DoorknobPartNumberCheck - .And(it => it.Type == 1) - .And(it => it.Status == 1); + DoorknobPartNumberCheck.And(it => it.Type == 1).And(it => it.Status == 1); List DoorknobPartNumberList = Context .Queryable() .Where(DoorknobPartNumberCheck.ToExpression()) .Select(it => it.Partnumber) .ToList(); + // 倒车雷达提取 + 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 predicateParkingSensor1 = Expressionable + .Create() + .And(it => ParkingSensorPartNumberList.Contains(it.Partnumber)) + .AndIF( + !string.IsNullOrEmpty(query.Partnumber), + it => it.Partnumber == query.Partnumber + ) + .AndIF( + query.StartTime != null, + it => it.StartTime >= query.StartTime.Value.ToLocalTime() + ) + .AndIF( + query.EndTime != null, + it => it.StartTime <= query.EndTime.Value.ToLocalTime() + ) + .ToExpression(); + var predicateParkingSensor2 = Expressionable + .Create() + .And(it => ParkingSensorPartNumberList.Contains(it.Partnumber)) + .AndIF( + !string.IsNullOrEmpty(query.Partnumber), + it => it.Partnumber == query.Partnumber + ) + .AndIF( + query.StartTime != null, + it => it.StartTime >= query.StartTime.Value.ToLocalTime() + ) + .AndIF( + query.EndTime != null, + it => it.StartTime <= query.EndTime.Value.ToLocalTime() + ) + .ToExpression(); var predicate3 = Expressionable .Create() .And(it => DoorknobPartNumberList.Contains(it.Partnumber)) @@ -697,21 +803,21 @@ namespace ZR.Service.mes.qc ) .ToExpression(); var predicate4 = Expressionable - .Create() - .And(it => DoorknobPartNumberList.Contains(it.Partnumber)) - .AndIF( - !string.IsNullOrEmpty(query.Partnumber), - it => it.Partnumber == query.Partnumber - ) - .AndIF( - query.StartTime != null, - it => it.StartTime >= query.StartTime.Value.ToLocalTime() - ) - .AndIF( - query.EndTime != null, - it => it.StartTime <= query.EndTime.Value.ToLocalTime() - ) - .ToExpression(); + .Create() + .And(it => DoorknobPartNumberList.Contains(it.Partnumber)) + .AndIF( + !string.IsNullOrEmpty(query.Partnumber), + it => it.Partnumber == query.Partnumber + ) + .AndIF( + query.StartTime != null, + it => it.StartTime >= query.StartTime.Value.ToLocalTime() + ) + .AndIF( + query.EndTime != null, + it => it.StartTime <= query.EndTime.Value.ToLocalTime() + ) + .ToExpression(); boardData.PolishWarehouseTotal = Context .Queryable() @@ -723,16 +829,24 @@ namespace ZR.Service.mes.qc .Queryable() .Where(predicate1) .Sum(it => it.RequireNumber) ?? 0; + // 抛光合格 boardData.PolishQualifiedTotal = Context .Queryable() .Where(predicate1) .Sum(it => it.QualifiedNumber) ?? 0; + // 抛光门把手 boardData.PolishDoorknobQualifiedTotal = Context .Queryable() .Where(predicate4) .Sum(it => it.QualifiedNumber) ?? 0; + // 抛光倒车雷达 + boardData.PolishParkingSensorbQualifiedTotal = + Context + .Queryable() + .Where(predicateParkingSensor1) + .Sum(it => it.QualifiedNumber) ?? 0; boardData.PolishSandingTotal = Context .Queryable() @@ -749,16 +863,24 @@ namespace ZR.Service.mes.qc .Queryable() .Where(predicate2) .Sum(it => it.RequireNumber) ?? 0; + // 后道合格 boardData.AfterPolishQualifiedTotal = Context .Queryable() .Where(predicate2) .Sum(it => it.QualifiedNumber) ?? 0; + // 后道门把手合格数 boardData.AfterPolishDoorknobQualifiedTotal = Context .Queryable() .Where(predicate3) .Sum(it => it.QualifiedNumber) ?? 0; + // 后道倒车雷达合格数 + boardData.AfterPolishParkingSensorbQualifiedTotal = + Context + .Queryable() + .Where(predicateParkingSensor2) + .Sum(it => it.QualifiedNumber) ?? 0; boardData.AfterPolishPolishTotal = Context .Queryable() @@ -774,6 +896,12 @@ namespace ZR.Service.mes.qc .Queryable() .Where(predicate2) .Sum(it => it.BaofeiTotal) ?? 0; + // 合格数修正 + boardData.PolishQualifiedTotal = + boardData.PolishQualifiedTotal - boardData.PolishParkingSensorbQualifiedTotal; + boardData.AfterPolishQualifiedTotal = + boardData.AfterPolishQualifiedTotal + - boardData.AfterPolishParkingSensorbQualifiedTotal; return boardData; } @@ -805,37 +933,79 @@ namespace ZR.Service.mes.qc it => it.StartTime <= query.EndTime.Value.ToLocalTime() ) .ToExpression(); - string[] checkStrArray = { "门把手", "面盖", "T22", "T26", "A58", "A60", "C01", "B02", "V71", "T1EJ" }; + // 门把手提取 + string[] checkStrArray = + { + "门把手", + "面盖", + "T22", + "T26", + "A58", + "A60", + "C01", + "B02", + "V71", + "T1EJ" + }; var DoorknobPartNumberCheck = Expressionable.Create(); foreach (string checkStr in checkStrArray) { DoorknobPartNumberCheck.Or(it => it.Description.Contains(checkStr)); } ; - DoorknobPartNumberCheck - .And(it => it.Type == 1) - .And(it => it.Status == 1); + DoorknobPartNumberCheck.And(it => it.Type == 1).And(it => it.Status == 1); List DoorknobPartNumberList = Context .Queryable() .Where(DoorknobPartNumberCheck.ToExpression()) .Select(it => it.Partnumber) .ToList(); var predicate3 = Expressionable - .Create() - .And(it => DoorknobPartNumberList.Contains(it.Partnumber)) - .AndIF( - !string.IsNullOrEmpty(query.Partnumber), - it => it.Partnumber == query.Partnumber - ) - .AndIF( - query.StartTime != null, - it => it.StartTime >= query.StartTime.Value.ToLocalTime() - ) - .AndIF( - query.EndTime != null, - it => it.StartTime <= query.EndTime.Value.ToLocalTime() - ) - .ToExpression(); + .Create() + .And(it => DoorknobPartNumberList.Contains(it.Partnumber)) + .AndIF( + !string.IsNullOrEmpty(query.Partnumber), + it => it.Partnumber == query.Partnumber + ) + .AndIF( + query.StartTime != null, + it => it.StartTime >= query.StartTime.Value.ToLocalTime() + ) + .AndIF( + query.EndTime != null, + it => it.StartTime <= query.EndTime.Value.ToLocalTime() + ) + .ToExpression(); + // 倒车雷达提取 + 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.Partnumber)) + .AndIF( + !string.IsNullOrEmpty(query.Partnumber), + it => it.Partnumber == query.Partnumber + ) + .AndIF( + query.StartTime != null, + it => it.StartTime >= query.StartTime.Value.ToLocalTime() + ) + .AndIF( + query.EndTime != null, + it => it.StartTime <= query.EndTime.Value.ToLocalTime() + ) + .ToExpression(); + boardData.OneTimeWarehouseTotal = Context.Queryable().Where(predicate1).Sum(it => it.Quantity) ?? 0; @@ -845,16 +1015,24 @@ namespace ZR.Service.mes.qc .Queryable() .Where(predicate2) .Sum(it => it.RequireNumber) ?? 0; + // GP12合格数 boardData.GP12QualifiedTotal = Context .Queryable() .Where(predicate2) .Sum(it => it.QualifiedNumber) ?? 0; + // GP12门把手 boardData.GP12DoorknobQualifiedTotal = Context .Queryable() .Where(predicate3) .Sum(it => it.QualifiedNumber) ?? 0; + // GP12倒车雷达 + boardData.GP12ParkingSensorQualifiedTotal = + Context + .Queryable() + .Where(predicateParkingSensor) + .Sum(it => it.QualifiedNumber) ?? 0; boardData.GP12PolishTotal = Context .Queryable() @@ -870,6 +1048,16 @@ namespace ZR.Service.mes.qc .Queryable() .Where(predicate2) .Sum(it => it.BaofeiTotal) ?? 0; + + boardData.GP12QualifiedTotal = + boardData.GP12QualifiedTotal - boardData.GP12ParkingSensorQualifiedTotal; + if (boardData.GP12RequireTotal > 0) + { + double passRate = + ((double)boardData.GP12QualifiedTotal / boardData.GP12RequireTotal) * 100; + boardData.GP12QualifiePassRate = passRate.ToString("0") + "%"; + } + return boardData; } @@ -926,6 +1114,66 @@ namespace ZR.Service.mes.qc return boardData; } + /// + /// 获取二次统计数据 + /// + /// + /// + /// + public QcProductAndPolishAndOneTimeFqcBoardDto GetStatisticsTotal( + QcProductAndPolishAndOneTimeFqcBoardDto boardData, + QcProductAndPolishAndOneTimeFqcBoardQuery query + ) + { + var predicate1 = Expressionable + .Create() + .AndIF( + !string.IsNullOrEmpty(query.Partnumber), + it => it.Partnumber == query.Partnumber + ) + .AndIF( + query.StartTime != null, + it => it.StartTime >= query.StartTime.Value.ToLocalTime() + ) + .AndIF( + query.EndTime != null, + it => it.StartTime <= query.EndTime.Value.ToLocalTime() + ) + .And(it => it.Type == 1) + .ToExpression(); + var predicate2 = Expressionable + .Create() + .AndIF( + !string.IsNullOrEmpty(query.Partnumber), + it => it.Partnumber == query.Partnumber + ) + .AndIF( + query.StartTime != null, + it => it.StartTime >= query.StartTime.Value.ToLocalTime() + ) + .AndIF( + query.EndTime != null, + it => it.StartTime <= query.EndTime.Value.ToLocalTime() + ) + .And(it=>it.Type == 1) + .ToExpression(); + boardData.StatisticsPolishQualifiedTotal = + ( + Context + .Queryable() + .Where(predicate1) + .Sum(it => it.QualifiedNumber) ?? 0 + ) + + ( + Context + .Queryable() + .Where(predicate2) + .Sum(it => it.QualifiedNumber) ?? 0 + ); + boardData.StatisticsProductAndPolishQualifiedTotal = boardData.StatisticsPolishQualifiedTotal + boardData.ProductQualifiedTotal; + return boardData; + } + /// /// 获取产线,抛光,一次合格品质量报表看板数据 /// @@ -939,6 +1187,7 @@ namespace ZR.Service.mes.qc result = GetPolishTotal(result, query); result = GetOneTimeTotal(result, query); result = GetFinishProductTotal(result, query); + result = GetStatisticsTotal(result, query); result.SandingTotal = result.ProductSandingTotal + result.PolishSandingTotal @@ -959,7 +1208,20 @@ namespace ZR.Service.mes.qc /// public bool CheckIsDoorknob(string partnumber) { - string[] checkStrArray = { "门把手","面盖","T22", "T26", "A58", "A60", "C01", "B02", "V71", "T1EJ" }; + string[] checkStrArray = + { + "门把手", + "面盖", + "T22", + "T26", + "A58", + "A60", + "C01", + "B02", + "V71", + "T1EJ", + "倒车雷达" + }; var isDoorknobCheck = Expressionable.Create(); foreach (string checkStr in checkStrArray) { diff --git a/ZR.Service/mes/qc/FirstFQCService.cs b/ZR.Service/mes/qc/FirstFQCService.cs index 442edef2..744bded0 100644 --- a/ZR.Service/mes/qc/FirstFQCService.cs +++ b/ZR.Service/mes/qc/FirstFQCService.cs @@ -3877,7 +3877,7 @@ namespace ZR.Service.mes.qc }; wmPolishInventoryService.DoWmPolishWarehousing(warehousingInfo); // 2.成品入一次合格品库 - // 合格品检查是否是门把手,是进入成品库(仅出库),不是进入一次合格品库 + // 合格品检查是否是门把手或倒车雷达,是进入成品库(仅出库),不是进入一次合格品库 string[] checkStrArray = { "门把手", @@ -3889,7 +3889,8 @@ namespace ZR.Service.mes.qc "C01", "B02", "V71", - "T1EJ " + "T1EJ ", + "倒车雷达" }; var isDoorknobCheck = Expressionable.Create(); foreach (string checkStr in checkStrArray) diff --git a/ZR.Service/mes/wms/WmGoodsBatchSearchService.cs b/ZR.Service/mes/wms/WmGoodsBatchSearchService.cs index b1ec7e32..6763ff7c 100644 --- a/ZR.Service/mes/wms/WmGoodsBatchSearchService.cs +++ b/ZR.Service/mes/wms/WmGoodsBatchSearchService.cs @@ -45,7 +45,7 @@ namespace ZR.Service.Business "GROUP BY\n" + " PackageCode \n" + "ORDER BY\n" + - " EntryWarehouseTime DESC"; + " PackageCodeClient_son"; PagedInfo result = Context.SqlQueryable(sql) .Where(exp) .Select() @@ -148,7 +148,7 @@ namespace ZR.Service.Business "GROUP BY\n" + " Partnumber \n" + "ORDER BY\n" + - " EntryWarehouseTime DESC"; + " PackageCodeClient_son"; PagedInfo result = Context.SqlQueryable(sql) .Where(exp) .Select() @@ -253,7 +253,7 @@ namespace ZR.Service.Business "GROUP BY\n" + " PackageCode \n" + "ORDER BY\n" + - " OutTime DESC"; + " PackageCodeClient_son"; PagedInfo result = Context.SqlQueryable(sql) .Where(exp) .Select() @@ -358,7 +358,7 @@ namespace ZR.Service.Business "GROUP BY\n" + " Partnumber \n" + "ORDER BY\n" + - " OutTime DESC"; + " PackageCodeClient_son"; PagedInfo result = Context.SqlQueryable(sql) .Where(exp) .Select() diff --git a/ZR.Service/mes/wms/WmGp12QualityStatisticsService.cs b/ZR.Service/mes/wms/WmGp12QualityStatisticsService.cs index d138cefe..795c6f2f 100644 --- a/ZR.Service/mes/wms/WmGp12QualityStatisticsService.cs +++ b/ZR.Service/mes/wms/WmGp12QualityStatisticsService.cs @@ -42,6 +42,10 @@ namespace ZR.Service.mes.wms !string.IsNullOrEmpty(parm.CreatedBy), it => it.CreatedBy.Contains(parm.CreatedBy) ) + .AndIF( + parm.Type != -1, + it => it.Type == parm.Type + ) .AndIF( parm.StartTime != null, it => it.StartTime >= parm.StartTime.Value.ToLocalTime() @@ -115,7 +119,14 @@ namespace ZR.Service.mes.wms throw new Exception("投入数与合格数,抛光总数,打磨数,报废数不符合,请检查"); } model.Id = SnowFlakeSingle.instance.NextId().ToString(); - model.Type = 0; + if (model.IsPolish) + { + model.Type = 1; + } + else + { + model.Type = 0; + } decimal qualifiedRate = 0.0m; if (model.QualifiedNumber != 0) { diff --git a/ZR.Service/mes/wms/WmPolishQualityStatisticsService.cs b/ZR.Service/mes/wms/WmPolishQualityStatisticsService.cs index 21a1b6f7..050328ba 100644 --- a/ZR.Service/mes/wms/WmPolishQualityStatisticsService.cs +++ b/ZR.Service/mes/wms/WmPolishQualityStatisticsService.cs @@ -10,7 +10,7 @@ using ZR.Service.mes.wms.IService; namespace ZR.Service.mes.wms { /// - /// 抛光管理后道检验-质量统计Service业务层处理 + /// 抛光管理后道检验-质量统计Service业务层处理(后道) /// [AppService( ServiceType = typeof(IWmPolishQualityStatisticsService), @@ -44,6 +44,10 @@ namespace ZR.Service.mes.wms !string.IsNullOrEmpty(parm.CreatedBy), it => it.CreatedBy.Contains(parm.CreatedBy) ) + .AndIF( + parm.Type != -1, + it => it.Type == parm.Type + ) .AndIF( parm.StartTime != null, it => it.StartTime >= parm.StartTime.Value.ToLocalTime() @@ -119,7 +123,15 @@ namespace ZR.Service.mes.wms throw new Exception("投入数与合格数,抛光总数,打磨数,报废数不符合,请检查"); } model.Id = SnowFlakeSingle.instance.NextId().ToString(); - model.Type = 0; + if (model.IsOver) + { + model.Type = 1; + } + else + { + model.Type = 0; + } + decimal qualifiedRate = 0.0m; if (model.QualifiedNumber != 0) { @@ -136,8 +148,9 @@ namespace ZR.Service.mes.wms WmPolishInventoryService inventoryService = new(); WmOneTimeInventoryService oneTimeService = new(); // 合格品检查是否是门把手,是进入成品库(仅出库),不是进入一次合格品库 - bool isDoorknob = CheckIsDoorknob(model.Partnumber); - if (!isDoorknob && model.QualifiedNumber > 0) + // TODO 20241018调整,门把手可入GP12 + //bool isDoorknob = CheckIsDoorknob(model.Partnumber); + if (!model.IsOver && model.QualifiedNumber > 0) { WmOneTimeInventory wmOneTimeInventoryWarehousing = new() @@ -148,7 +161,7 @@ namespace ZR.Service.mes.wms CreatedBy = model.CreatedBy, ActionTime = DateTime.Now.ToLocalTime(), Remark = - "抛光合格品入库,合格数:" + "后道抛光合格品入一次合格库,合格数:" + model.QualifiedNumber + "。记录时间:" + model.CreatedTime.Value.ToLocalTime().ToString() @@ -160,7 +173,7 @@ namespace ZR.Service.mes.wms if (res1 == 0) { Context.Ado.RollbackTran(); - throw new Exception("抛光合格品入库失败"); + throw new Exception("抛光合格品GP12入库失败"); } } @@ -276,7 +289,7 @@ namespace ZR.Service.mes.wms /// public bool CheckIsDoorknob(string partnumber) { - string[] checkStrArray = { "门把手", "面盖", "T22", "T26", "A58", "A60", "C01", "B02", "V71", "T1EJ" }; + string[] checkStrArray = { "门把手", "面盖", "T22", "T26", "A58", "A60", "C01", "B02", "V71", "T1EJ", "倒车雷达" }; var isDoorknobCheck = Expressionable.Create(); foreach (string checkStr in checkStrArray) { diff --git a/ZR.Service/mes/wms/WmPolishWorkQualityStatisticsService.cs b/ZR.Service/mes/wms/WmPolishWorkQualityStatisticsService.cs index 884f5fea..e0fa874e 100644 --- a/ZR.Service/mes/wms/WmPolishWorkQualityStatisticsService.cs +++ b/ZR.Service/mes/wms/WmPolishWorkQualityStatisticsService.cs @@ -10,7 +10,7 @@ using ZR.Service.mes.wms.IService; namespace ZR.Service.mes.wms { /// - /// 抛光管理-抛光操作Service业务层处理 + /// 抛光管理-抛光操作Service业务层处理(抛光) /// [AppService( ServiceType = typeof(IWmPolishWorkQualityStatisticsService), @@ -44,6 +44,10 @@ namespace ZR.Service.mes.wms !string.IsNullOrEmpty(parm.CreatedBy), it => it.CreatedBy.Contains(parm.CreatedBy) ) + .AndIF( + parm.Type != -1, + it => it.Type == parm.Type + ) .AndIF( parm.StartTime != null, it => it.StartTime >= parm.StartTime.Value.ToLocalTime() @@ -131,8 +135,9 @@ namespace ZR.Service.mes.wms throw new Exception("插入抛光操作记录失败"); } WmPolishInventoryService inventoryService = new(); - //合格品重新进入抛光仓库 - if (model.QualifiedNumber > 0) + WmOneTimeInventoryService oneTimeService = new(); + //抛光品直接出库到GP12 + if (model.QualifiedNumber > 0 && model.IsOutbound) { WmPolishInventory wmPolishInventory = new() @@ -143,7 +148,7 @@ namespace ZR.Service.mes.wms CreatedBy = model.CreatedBy, ActionTime = DateTime.Now.ToLocalTime(), Remark = - "抛光操作记录入库,合格数:" + "抛光操作记录跳过后道出库,合格数:" + model.QualifiedNumber + "。记录时间:" + model.CreatedTime.Value.ToLocalTime().ToString() @@ -151,11 +156,34 @@ namespace ZR.Service.mes.wms + res0.Id + "]" }; - int res1 = inventoryService.DoWmPolishWarehousing(wmPolishInventory); + int res1 = inventoryService.DoWmPolishRetrieval(wmPolishInventory); if (res1 == 0) { Context.Ado.RollbackTran(); - throw new Exception("抛光操作记录入库失败"); + throw new Exception("抛光操作记录出库失败"); + } + WmOneTimeInventory wmOneTimeInventoryWarehousing = + new() + { + Partnumber = model.Partnumber, + Type = model.IsReturnWorkpiece ? 2 : 1, + Quantity = model.QualifiedNumber, + CreatedBy = model.CreatedBy, + ActionTime = DateTime.Now.ToLocalTime(), + Remark = + "抛光操作合格品入一次合格库,合格数:" + + model.QualifiedNumber + + "。记录时间:" + + model.CreatedTime.Value.ToLocalTime().ToString() + + "[来源记录识别编号:" + + res0.Id + + "]" + }; + int res2 = oneTimeService.DoWmOneTimeWarehousing(wmOneTimeInventoryWarehousing); + if (res2 == 0) + { + Context.Ado.RollbackTran(); + throw new Exception("抛光合格品一次合格入库失败"); } } //报废,打磨品 扣除抛光仓库库存 @@ -170,7 +198,7 @@ namespace ZR.Service.mes.wms CreatedBy = model.CreatedBy, ActionTime = DateTime.Now.ToLocalTime(), Remark = - "抛光操作记录出库:打磨数" + "抛光操作记录打磨报废出库:打磨数" + model.DamoTotal + "、报废数" + model.BaofeiTotal