From d8ad42253dbc9d0248d6e09adba852bc0db0154e Mon Sep 17 00:00:00 2001 From: git_rabbit Date: Wed, 11 Mar 2026 19:13:18 +0800 Subject: [PATCH] =?UTF-8?q?fix(=E6=8A=A5=E5=BA=9F=E5=AE=A1=E6=89=B9):=20?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=AE=A1=E6=89=B9=E6=B5=81=E7=A8=8B=E4=B8=AD?= =?UTF-8?q?=E7=9A=84=E5=BC=82=E5=B8=B8=E5=A4=84=E7=90=86=E5=92=8C=E7=89=A9?= =?UTF-8?q?=E6=96=99=E6=A0=A1=E9=AA=8C=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在QcScrapRecordsService中重构审批逻辑,增加事务管理和异常回滚 - 添加成品物料信息校验,使用物料供应商代码替代记录中的供应商代码 - 完善工单不存在时的错误处理 - 在控制器中统一异常处理,返回更友好的错误信息 --- .../Quality/IPQC/QcScrapRecordsController.cs | 64 +++++++++++++------ .../MES/Quality/IPQC/QcScrapRecordsService.cs | 47 ++++++++++---- 2 files changed, 79 insertions(+), 32 deletions(-) diff --git a/DOAN.Admin.WebApi/Controllers/MES/Quality/IPQC/QcScrapRecordsController.cs b/DOAN.Admin.WebApi/Controllers/MES/Quality/IPQC/QcScrapRecordsController.cs index 4b3402f..ac21edf 100644 --- a/DOAN.Admin.WebApi/Controllers/MES/Quality/IPQC/QcScrapRecordsController.cs +++ b/DOAN.Admin.WebApi/Controllers/MES/Quality/IPQC/QcScrapRecordsController.cs @@ -1,3 +1,4 @@ +using Azure; using DOAN.Admin.WebApi.Filters; using DOAN.Model.BZFM; using DOAN.Model.BZFM.Dto; @@ -146,12 +147,26 @@ namespace DOAN.Admin.WebApi.Controllers.BZFM [FromBody] ScrapApproveDto parm ) { - var response = _QcScrapRecordsService.ApproveScrapRecord( - id, - parm.IsApproved, - parm.Approver - ); - return ToResponse(response); + try + { + var response = _QcScrapRecordsService.ApproveScrapRecord( + id, + parm.IsApproved, + parm.Approver + ); + if(response > 0) + { + return ToResponse(new ApiResult(200, response)); + } + else + { + return ToResponse(new ApiResult(500, "审批记录失败")); + } + } + catch (Exception ex) + { + return ToResponse(new ApiResult(500, ex.Message)); + } } /// @@ -203,19 +218,22 @@ namespace DOAN.Admin.WebApi.Controllers.BZFM return ToResponse(StatusCodes.Status400BadRequest, "工单号不能为空"); } var response = _QcScrapRecordsService.CreateScrapOrderByWorkorder(parm); - if(response == "ok") + if (response == "ok") { return SUCCESS(response); } else { - return ToResponse(new ApiResult(StatusCodes.Status500InternalServerError, response)); + return ToResponse( + new ApiResult(StatusCodes.Status500InternalServerError, response) + ); } - } catch (Exception ex) { - return ToResponse(new ApiResult(StatusCodes.Status500InternalServerError, ex.Message)); + return ToResponse( + new ApiResult(StatusCodes.Status500InternalServerError, ex.Message) + ); } } @@ -242,12 +260,16 @@ namespace DOAN.Admin.WebApi.Controllers.BZFM } else { - return ToResponse(new ApiResult(StatusCodes.Status500InternalServerError, response)); + return ToResponse( + new ApiResult(StatusCodes.Status500InternalServerError, response) + ); } } catch (Exception ex) { - return ToResponse(new ApiResult(StatusCodes.Status500InternalServerError, ex.Message)); + return ToResponse( + new ApiResult(StatusCodes.Status500InternalServerError, ex.Message) + ); } } @@ -274,7 +296,9 @@ namespace DOAN.Admin.WebApi.Controllers.BZFM } catch (Exception ex) { - return ToResponse(new ApiResult(StatusCodes.Status500InternalServerError, ex.Message)); + return ToResponse( + new ApiResult(StatusCodes.Status500InternalServerError, ex.Message) + ); } } @@ -297,15 +321,19 @@ namespace DOAN.Admin.WebApi.Controllers.BZFM } else { - return ToResponse(new ApiResult( - StatusCodes.Status400BadRequest, - "撤销不良品记录失败,可能记录已被审批或不存在" - )); + return ToResponse( + new ApiResult( + StatusCodes.Status400BadRequest, + "撤销不良品记录失败,可能记录已被审批或不存在" + ) + ); } } catch (Exception ex) { - return ToResponse(new ApiResult(StatusCodes.Status500InternalServerError, ex.Message)); + return ToResponse( + new ApiResult(StatusCodes.Status500InternalServerError, ex.Message) + ); } } } diff --git a/DOAN.Service/MES/Quality/IPQC/QcScrapRecordsService.cs b/DOAN.Service/MES/Quality/IPQC/QcScrapRecordsService.cs index 8236f5a..6e81357 100644 --- a/DOAN.Service/MES/Quality/IPQC/QcScrapRecordsService.cs +++ b/DOAN.Service/MES/Quality/IPQC/QcScrapRecordsService.cs @@ -272,10 +272,9 @@ namespace DOAN.Service.BZFM /// public int ApproveScrapRecord(long id, bool isApproved, string approver) { - int result = 0; - - UseTran2(() => + try { + int result = 0; // 获取记录信息 var record = Context.Queryable().Where(x => x.Id == id).First(); @@ -290,6 +289,15 @@ namespace DOAN.Service.BZFM throw new Exception("只有待审批状态的记录才能被审批"); } + // 成品物料信息校验 + var productMaterialInfo = Context.Queryable().Where(it => it.MaterialCode == record.ProductCode).First(); + if (productMaterialInfo == null) + { + throw new Exception("主体编号不存在"); + } + + + Context.Ado.BeginTran(); // 更新审批信息 var updateObj = new QcScrapRecords { @@ -310,6 +318,10 @@ namespace DOAN.Service.BZFM x.UpdatedTime, }) .ExecuteCommand(); + if(result < 0) + { + throw new Exception("更新审批信息失败"); + } // 是否审批通过 if (isApproved) @@ -321,15 +333,16 @@ namespace DOAN.Service.BZFM .Queryable() .Where(x => x.Workorder == record.Workorder) .First(); - if (workorderInfo != null) - { - workorderInfo.DefectNum += (int)record.ScrapQuantity; - Context - .Updateable(workorderInfo) - .UpdateColumns(x => new { x.DefectNum }) - .ExecuteCommand(); + if (workorderInfo == null) { + throw new Exception($"未找到对应工单:{record.Workorder}"); } + workorderInfo.DefectNum += (int)record.ScrapQuantity; + Context + .Updateable(workorderInfo) + .UpdateColumns(x => new { x.DefectNum }) + .ExecuteCommand(); } + // 调用入库单服务添加到不良库 InboundReceiptDto revokeRecepitDto = new() { @@ -338,7 +351,7 @@ namespace DOAN.Service.BZFM BatchNo = record.BatchNo, LocationCode = "BL001", WarehouseCode = "WH007", - SupplierCode = record.SupplierCode, + SupplierCode = productMaterialInfo.SupplierCode, StoveCode = record.StoveCode, Workorder = record.Workorder, WorkorderRaw = record.ScrapOrderNo, @@ -353,7 +366,7 @@ namespace DOAN.Service.BZFM ); if (createReceiptresult != "ok") { - throw new Exception(createReceiptresult); + throw new Exception($"{createReceiptresult}"); } // 根据报废类型处理 @@ -412,9 +425,15 @@ namespace DOAN.Service.BZFM // } //} } - }); + Context.Ado.CommitTran(); + return result; + } + catch (Exception ex) + { + Context.Ado.RollbackTran(); + throw new Exception(ex.Message); + } - return result; } ///