diff --git a/DOAN.Admin.WebApi/Controllers/MES/Quality/IPQC/QcScrapRecordsController.cs b/DOAN.Admin.WebApi/Controllers/MES/Quality/IPQC/QcScrapRecordsController.cs index 27b47e6..a2e8c7f 100644 --- a/DOAN.Admin.WebApi/Controllers/MES/Quality/IPQC/QcScrapRecordsController.cs +++ b/DOAN.Admin.WebApi/Controllers/MES/Quality/IPQC/QcScrapRecordsController.cs @@ -240,6 +240,33 @@ namespace DOAN.Admin.WebApi.Controllers.BZFM } } + /// + /// 根据工单号填写不良品单 + /// + /// 不良品单数据 + /// + [HttpPost("defectOrder/byWorkorder")] + [ActionPermissionFilter(Permission = "qcscraprecords:add")] + [Log(Title = "根据工单号创建不良品单", BusinessType = BusinessType.INSERT)] + public IActionResult CreateDefectOrderByWorkorder([FromBody] QcScrapRecordsDto parm) + { + try + { + if (string.IsNullOrEmpty(parm.Workorder)) + { + return ToResponse(StatusCodes.Status400BadRequest, "工单号不能为空"); + } + + var modal = parm.Adapt().ToCreate(HttpContext); + var response = _QcScrapRecordsService.CreateDefectOrderByWorkorder(modal); + return SUCCESS(response); + } + catch (Exception ex) + { + return ToResponse(StatusCodes.Status500InternalServerError, ex.Message); + } + } + /// /// 根据不良品记录ID撤销不良品记录 /// diff --git a/DOAN.Model/MES/Quality/IPQC/Dto/QcScrapRecordsDto.cs b/DOAN.Model/MES/Quality/IPQC/Dto/QcScrapRecordsDto.cs index ff6c6ab..9a11dca 100644 --- a/DOAN.Model/MES/Quality/IPQC/Dto/QcScrapRecordsDto.cs +++ b/DOAN.Model/MES/Quality/IPQC/Dto/QcScrapRecordsDto.cs @@ -2,7 +2,7 @@ namespace DOAN.Model.BZFM.Dto { /// - /// 报废记录表查询对象 + /// 不良记录表查询对象 /// public class QcScrapRecordsQueryDto : PagerInfo { @@ -22,7 +22,7 @@ namespace DOAN.Model.BZFM.Dto } /// - /// 报废记录表输入输出对象 + /// 不良记录表输入输出对象 /// public class QcScrapRecordsDto { @@ -32,20 +32,20 @@ namespace DOAN.Model.BZFM.Dto public long Id { get; set; } /// - /// 报废单号 + /// 不良单号 /// public string ScrapOrderNo { get; set; } /// - /// 报废日期 + /// 不良日期 /// - [Required(ErrorMessage = "报废日期不能为空")] + [Required(ErrorMessage = "不良日期不能为空")] public DateTime? ScrapDate { get; set; } /// - /// 报废数量 + /// 不良数量 /// - [Required(ErrorMessage = "报废数量不能为空")] + [Required(ErrorMessage = "不良数量不能为空")] public decimal ScrapQuantity { get; set; } /// @@ -59,12 +59,12 @@ namespace DOAN.Model.BZFM.Dto public string DisposalMethod { get; set; } /// - /// 报废类型 + /// 不良类型 /// public string ScrapType { get; set; } /// - /// 报废原因说明 + /// 不良原因说明 /// public string ScrapReason { get; set; } @@ -151,7 +151,7 @@ namespace DOAN.Model.BZFM.Dto public string QualityInspector { get; set; } /// - /// 班组长/主管 + /// 审核人 /// public string SupervisorName { get; set; } diff --git a/DOAN.Model/MES/Quality/IPQC/Dto/ScrapApproveDto.cs b/DOAN.Model/MES/Quality/IPQC/Dto/ScrapApproveDto.cs index d7a17cc..178028a 100644 --- a/DOAN.Model/MES/Quality/IPQC/Dto/ScrapApproveDto.cs +++ b/DOAN.Model/MES/Quality/IPQC/Dto/ScrapApproveDto.cs @@ -7,7 +7,7 @@ using System.Threading.Tasks; namespace DOAN.Model.BZFM.Dto { /// - /// 报废审批DTO + /// 不良审批DTO /// public class ScrapApproveDto { @@ -21,4 +21,19 @@ namespace DOAN.Model.BZFM.Dto /// public string Approver { get; set; } } + + /// + /// 不良品归属审批 + /// + public class DefectApproveDto + { + /// + /// 不良品记录ID + /// + public long Id { get; set; } + /// + /// 工单号 + /// + public string Workorder { get; set; } + } } \ No newline at end of file diff --git a/DOAN.Service/MES/Quality/IPQC/IService/IQcScrapRecordsService.cs b/DOAN.Service/MES/Quality/IPQC/IService/IQcScrapRecordsService.cs index 358fffc..98df8cb 100644 --- a/DOAN.Service/MES/Quality/IPQC/IService/IQcScrapRecordsService.cs +++ b/DOAN.Service/MES/Quality/IPQC/IService/IQcScrapRecordsService.cs @@ -67,6 +67,21 @@ namespace DOAN.Service.BZFM.IService /// QcScrapRecords CreateTransferOrderByWorkorder(QcScrapRecords parm); + /// + /// 根据工单号填写不良品单 + /// + /// 转用单数据 + /// + QcScrapRecords CreateDefectOrderByWorkorder(QcScrapRecords parm); + + + /// + /// 根据不良品记录ID对不良品进行操作 + /// + /// 转用单数据 + /// + string ApproveDefectRecordById(DefectApproveDto parm); + /// /// 根据不良品记录ID撤销不良品记录 /// diff --git a/DOAN.Service/MES/Quality/IPQC/QcScrapRecordsService.cs b/DOAN.Service/MES/Quality/IPQC/QcScrapRecordsService.cs index ba6b2b8..dfc36cc 100644 --- a/DOAN.Service/MES/Quality/IPQC/QcScrapRecordsService.cs +++ b/DOAN.Service/MES/Quality/IPQC/QcScrapRecordsService.cs @@ -116,7 +116,7 @@ namespace DOAN.Service.BZFM } /// - /// 生成报废单号 + /// 生成不良单号 /// /// 前缀,默认BF表示报废 /// @@ -527,6 +527,73 @@ namespace DOAN.Service.BZFM return CreateTransferOrder(parm); } + /// + /// 根据工单号填写不良品单据 + /// + /// 不良品单数据 + /// + public QcScrapRecords CreateDefectOrderByWorkorder(QcScrapRecords parm) + { + // 验证工单号 + if (string.IsNullOrEmpty(parm.Workorder)) + { + throw new Exception("工单号不能为空"); + } + QcScrapRecords newQcScrapRecords = parm; + var workorderInfo = Context + .Queryable() + .Where(x => x.Workorder == parm.Workorder) + .First(); + + // 单据不良数校验 + if(parm.ScrapQuantity + workorderInfo.DefectNum > workorderInfo.PlanNum) + { + throw new Exception("不良数量总和大于计划数,请检查输入!"); + } + if (parm.ScrapQuantity < 0) + { + throw new Exception("不良数量需要为正数!"); + } + + // 工单号创建,根据工单信息填充报废单的相关字段 + if (workorderInfo != null) + { + newQcScrapRecords.ProductCode = workorderInfo.productionCode; + newQcScrapRecords.ProductName = workorderInfo.productionName; + newQcScrapRecords.LineCode = workorderInfo.RouteCode; + newQcScrapRecords.StoveCode = workorderInfo.StoveCode; + newQcScrapRecords.BatchNo = workorderInfo.FeedOrder; + newQcScrapRecords.MaterialCode = workorderInfo.MaterialCode; + newQcScrapRecords.MaterialName = workorderInfo.MaterialName; + // 如有领料记录,则绑定采购记录 + var purchaseInfo = Context + .Queryable() + .Where(it => it.BatchNo == workorderInfo.FeedOrder) + .Where(it => it.TransactionType == "采购入库") + .Where(it => it.Remarks != "已撤销") + .First(); + if (purchaseInfo != null) + { + newQcScrapRecords.SupplierCode = purchaseInfo.SupplierCode; + newQcScrapRecords.SupplierName = purchaseInfo.SupplierName; + newQcScrapRecords.StoveCode = purchaseInfo.StoveCode; + newQcScrapRecords.Unit = purchaseInfo.Unit; + } + } + + // 生成单号 + newQcScrapRecords.ScrapOrderNo = GenerateScrapOrderNo("BL"); // BL表示不良 + + // 设置状态为待审批,类型为转用 + newQcScrapRecords.Status = "待审批"; + newQcScrapRecords.ScrapType = "不良品"; + newQcScrapRecords.TenantId = 0; + newQcScrapRecords.Version = 1; + return Context.Insertable(newQcScrapRecords).ExecuteReturnEntity(); + } + + + /// /// 根据不良品记录ID撤销不良品记录 /// @@ -537,5 +604,16 @@ namespace DOAN.Service.BZFM // 调用现有的撤销方法 return RevokeScrapRecord(id); } + + /// + /// 根据不良记录进行审批 + /// + /// + /// + /// + public string ApproveDefectRecordById(DefectApproveDto parm) + { + throw new NotImplementedException(); + } } }