From 82c96304b9f6299ca9d09f9fb1538544b71c6ea6 Mon Sep 17 00:00:00 2001 From: git_rabbit Date: Wed, 11 Mar 2026 11:40:31 +0800 Subject: [PATCH] =?UTF-8?q?refactor(MES):=20=E4=BC=98=E5=8C=96=E5=B7=A5?= =?UTF-8?q?=E5=8D=95=E6=9F=A5=E8=AF=A2=E5=92=8C=E7=89=A9=E6=96=99=E6=9C=8D?= =?UTF-8?q?=E5=8A=A1=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 简化不良品审批通知消息内容 - 调整命名空间引用顺序 - 统一代码格式和缩进 - 添加成品入库前的领料数量校验 - 优化批量领料逻辑和错误提示 --- .../Product/ProWorkorderMaterialService.cs | 132 +++++++++++------- .../MES/Product/ProWorkorderQueryService.cs | 2 +- 2 files changed, 80 insertions(+), 54 deletions(-) diff --git a/DOAN.Service/MES/Product/ProWorkorderMaterialService.cs b/DOAN.Service/MES/Product/ProWorkorderMaterialService.cs index 3999ff6..f3e0c32 100644 --- a/DOAN.Service/MES/Product/ProWorkorderMaterialService.cs +++ b/DOAN.Service/MES/Product/ProWorkorderMaterialService.cs @@ -1,3 +1,4 @@ +using System.Collections.Generic; using Aliyun.OSS; using DOAN.Model.BZFM; using DOAN.Model.MES.order; @@ -13,7 +14,6 @@ using MailKit.Search; using Microsoft.Data.SqlClient; using Microsoft.IdentityModel.Tokens; using SqlSugar.DistributedSystem.Snowflake; -using System.Collections.Generic; namespace DOAN.Service.MES.product { @@ -59,15 +59,15 @@ namespace DOAN.Service.MES.product WorkorderRaw = it.WorkorderRaw, }) .ToList(); - foreach(var item in result) + foreach (var item in result) { if (!string.IsNullOrEmpty(item.WorkorderRaw)) { var workorderRawInfo = Context - .Queryable() - .Where(x => x.Workorder == item.WorkorderRaw) - .First(); - if(workorderRawInfo != null) + .Queryable() + .Where(x => x.Workorder == item.WorkorderRaw) + .First(); + if (workorderRawInfo != null) { item.StoveCode = workorderRawInfo.StoveCode; item.BatchNo = workorderRawInfo.FeedOrder; @@ -144,11 +144,13 @@ namespace DOAN.Service.MES.product /// /// 根据工单查询物料库存接口 /// - /// 工单号 + /// 工单号 /// 是否隐藏0 /// 查询范围 1-物料库 2-转用库 /// 物料库存信息列表 - public PagedInfo GetMaterialInventoryList(WorkorderMaterialQueryDto query) + public PagedInfo GetMaterialInventoryList( + WorkorderMaterialQueryDto query + ) { try { @@ -225,7 +227,6 @@ namespace DOAN.Service.MES.product .ToList(); result.Result.AddRange(InventoryList); result.TotalNum += 1; - } } @@ -239,8 +240,6 @@ namespace DOAN.Service.MES.product } } - - /// /// 根据工单号获取可领料工单清单(产成品领取半成品) /// @@ -248,7 +247,9 @@ namespace DOAN.Service.MES.product /// 是否隐藏0记录 /// 查询范围 1-物料库 2-转用库 /// 可领料工单清单 - public PagedInfo GetPickableWorkordersByWorkorder(WorkorderMaterialQueryDto query) + public PagedInfo GetPickableWorkordersByWorkorder( + WorkorderMaterialQueryDto query + ) { try { @@ -270,25 +271,26 @@ namespace DOAN.Service.MES.product { return Context .Queryable() - .LeftJoin((mri,pro)=>mri.Workorder == pro.Workorder) + .LeftJoin((mri, pro) => mri.Workorder == pro.Workorder) .Where((mri, pro) => mri.MaterialCode == workorderInfo.MaterialCode) .Where((mri, pro) => mri.TransactionType == "生产入库") .Where((mri, pro) => mri.Remarks != "已撤销" || mri.Remarks == null) //.Where((mri, pro) => pro.ShipmentNum < pro.PlanNum) .OrderByDescending((mri, pro) => mri.Workorder) .Select( - (mri, pro) => new ProWorkorderDto - { - Id = pro.Id, - Workorder = mri.Workorder, - productionName = mri.MaterialCode, - productionCode = mri.MaterialName, - MaterialCode = mri.MaterialCode, - MaterialName = mri.MaterialName, - ShipmentNum = pro.ShipmentNum, - PlanNum = pro.PlanNum, - Remark01 = mri.Remarks - }, + (mri, pro) => + new ProWorkorderDto + { + Id = pro.Id, + Workorder = mri.Workorder, + productionName = mri.MaterialCode, + productionCode = mri.MaterialName, + MaterialCode = mri.MaterialCode, + MaterialName = mri.MaterialName, + ShipmentNum = pro.ShipmentNum, + PlanNum = pro.PlanNum, + Remark01 = mri.Remarks, + }, true ) .ToPage(query); @@ -315,7 +317,9 @@ namespace DOAN.Service.MES.product /// 工单号 /// 是否隐藏为0记录 /// 成品库存信息列表 - public PagedInfo GetProductInventoryList(WorkorderMaterialQueryDto query) + public PagedInfo GetProductInventoryList( + WorkorderMaterialQueryDto query + ) { try { @@ -369,7 +373,9 @@ namespace DOAN.Service.MES.product /// 工单号 /// 是否隐藏为0记录 /// 可出货订单清单 - public PagedInfo GetShippableOrdersByWorkorder(WorkorderMaterialQueryDto query) + public PagedInfo GetShippableOrdersByWorkorder( + WorkorderMaterialQueryDto query + ) { try { @@ -419,8 +425,6 @@ namespace DOAN.Service.MES.product } } - - /// /// 工单领料接口 /// @@ -478,7 +482,6 @@ namespace DOAN.Service.MES.product ); // 示例返回true return result; - } catch (Exception ex) { @@ -508,11 +511,12 @@ namespace DOAN.Service.MES.product throw new Exception("传入参数Ids为空,无修改工单"); } // 检查是否有采购记录 - var inboundRecordInfo = Context.Queryable() - .Where(it => it.BatchNo == parm.BatchNo) - .Where(it => it.TransactionType == "采购入库") - .Where(it => it.Remarks != "已撤销" || it.Remarks == null) - .First(); + var inboundRecordInfo = Context + .Queryable() + .Where(it => it.BatchNo == parm.BatchNo) + .Where(it => it.TransactionType == "采购入库") + .Where(it => it.Remarks != "已撤销" || it.Remarks == null) + .First(); if (inboundRecordInfo == null) { throw new Exception($"批次号{parm.BatchNo}无对应采购记录,请检查"); @@ -532,7 +536,7 @@ namespace DOAN.Service.MES.product { throw new Exception($"工单异常{workOrderId},未找到工单"); } - if(workOrderInfo.RouteCode == "10") + if (workOrderInfo.RouteCode == "10") { throw new Exception("10线工单不可批量领料"); } @@ -542,37 +546,43 @@ namespace DOAN.Service.MES.product } else { - if(standardMaterialCode != workOrderInfo.MaterialCode) + if (standardMaterialCode != workOrderInfo.MaterialCode) { - throw new Exception($"工单{workOrderInfo.Workorder}原材料与上一个工单不一致,上一个工单{standardMaterialCode}"); + throw new Exception( + $"工单{workOrderInfo.Workorder}原材料与上一个工单不一致,上一个工单{standardMaterialCode}" + ); } } - string workOrder = workOrderInfo.Workorder; + string workOrder = workOrderInfo.Workorder; // 是否有领料记录 - bool hasOutMaterialRecord = Context.Queryable() - .Where(it => it.Workorder == workOrder) - .Where(it => it.TransactionType == "领料出库") - .Where(it => it.Remarks != "已撤销" || it.Remarks == null) - .Any(); + bool hasOutMaterialRecord = Context + .Queryable() + .Where(it => it.Workorder == workOrder) + .Where(it => it.TransactionType == "领料出库") + .Where(it => it.Remarks != "已撤销" || it.Remarks == null) + .Any(); if (hasOutMaterialRecord) { throw new Exception($"该工单{workOrder}已存在领料记录,无法再次领料"); } batchTakeMaterialWorkOrderList.Add(workOrderInfo); } - if(batchTakeMaterialWorkOrderList.Count == 0) + if (batchTakeMaterialWorkOrderList.Count == 0) { throw new Exception($"待领料工单数量异常"); } // 检查库存容量是否足够 - var inventoryInfo = Context.Queryable() - .Where(it => it.BatchNo == parm.BatchNo) - .Where(it => it.MaterialCode == batchTakeMaterialWorkOrderList[0].MaterialCode) - .Where(it => it.LocationCode == "YCL001") - .First(); + var inventoryInfo = Context + .Queryable() + .Where(it => it.BatchNo == parm.BatchNo) + .Where(it => it.MaterialCode == batchTakeMaterialWorkOrderList[0].MaterialCode) + .Where(it => it.LocationCode == "YCL001") + .First(); if (inventoryInfo.CurrentQty < batchTakeMaterialWorkOrderList.Count * parm.Quantity) { - throw new Exception($"该批次库存数不足,目前库存数{inventoryInfo.CurrentQty},需要{batchTakeMaterialWorkOrderList.Count * parm.Quantity}"); + throw new Exception( + $"该批次库存数不足,目前库存数{inventoryInfo.CurrentQty},需要{batchTakeMaterialWorkOrderList.Count * parm.Quantity}" + ); } foreach (var workorderInfo in batchTakeMaterialWorkOrderList) @@ -584,7 +594,7 @@ namespace DOAN.Service.MES.product Quantity = parm.Quantity, MaterialInventoryId = inventoryInfo.Id, StoveCode = inboundRecordInfo.StoveCode, - Operator = parm.Operator + Operator = parm.Operator, }; bool isOk = TakeMaterial(takeDto); if (isOk) @@ -636,6 +646,23 @@ namespace DOAN.Service.MES.product { throw new ArgumentException("工单不存在", nameof(request.Workorder)); } + var materialTakeInfo = Context + .Queryable() + .Where(sub => sub.Workorder == request.Workorder) + .Where(sub => sub.TransactionType == "领料出库") + .Where(sub => sub.Remarks != "已撤销" || sub.Remarks == null) + .First(); + if (materialTakeInfo == null) + { + throw new Exception("该工单还未领料"); + } + if ( + workorderInfo.RouteCode != "10" + && Math.Abs(materialTakeInfo.Quantity) < request.Quantity + ) + { + throw new Exception("该工单成品入库数大于领料数"); + } ReportFlowService _reportFlowService = new ReportFlowService(); string workorder = request.Workorder; int processId = 70; @@ -736,6 +763,5 @@ namespace DOAN.Service.MES.product throw new Exception(ex.Message); } } - } } diff --git a/DOAN.Service/MES/Product/ProWorkorderQueryService.cs b/DOAN.Service/MES/Product/ProWorkorderQueryService.cs index defa1eb..dfe34e8 100644 --- a/DOAN.Service/MES/Product/ProWorkorderQueryService.cs +++ b/DOAN.Service/MES/Product/ProWorkorderQueryService.cs @@ -252,7 +252,7 @@ namespace DOAN.Service.MES.product .Subqueryable() .Where(sub => sub.MaterialCode == it.ProductCode) .Select(sub => sub.Type), - Content = $"有不良品待审批:{it.ScrapQuantity}个", + Content = $"有不良品待审批", }) .ToPage(parm);