feat(IPQC): 完善报废和转用单处理流程

重构报废和转用单创建逻辑,使用DefectApproveDto作为参数
新增批次号、处理数量和操作人字段
实现不良品出库和报废/转用入库的完整流程
This commit is contained in:
2026-02-25 18:42:57 +08:00
parent 5011447292
commit dbe9dc9311
4 changed files with 208 additions and 33 deletions

View File

@@ -502,15 +502,92 @@ namespace DOAN.Service.BZFM
/// </summary>
/// <param name="parm">报废单数据</param>
/// <returns></returns>
public QcScrapRecords CreateScrapOrderByWorkorder(QcScrapRecords parm)
public string CreateScrapOrderByWorkorder(DefectApproveDto parm)
{
// 验证工单号
if (string.IsNullOrEmpty(parm.Workorder))
try
{
throw new Exception("工单号不能为空");
// 验证工单号
if (string.IsNullOrEmpty(parm.Workorder))
{
throw new Exception("工单号不能为空");
}
// 工单信息查看
var workorderInfo = Context
.Queryable<ProWorkorder>()
.Where(it => it.Workorder == parm.Workorder)
.First();
if (workorderInfo == null)
{
throw new Exception($"工单信息为空{parm.Workorder}");
}
var inboundRecordInfo = Context
.Queryable<MmRecordInbound>()
.Where(it => it.Id == parm.Id)
.First();
if (inboundRecordInfo == null)
{
throw new Exception($"入库记录不存在{parm.Id}");
}
// 不良出库
MmInventoryService mmInventoryService = new();
OutboundReceiptDto outboundRecepitDto = new()
{
ReceiptType = 1,
InventoryId = -1,
MaterialCode = inboundRecordInfo.MaterialCode,
SupplierCode = inboundRecordInfo.SupplierCode,
BatchNo = inboundRecordInfo.BatchNo,
StoveCode = inboundRecordInfo.StoveCode,
LocationCode = inboundRecordInfo.LocationCode,
WarehouseCode = inboundRecordInfo.WarehouseCode,
OrderNo = workorderInfo.CustomerOrder,
Workorder = inboundRecordInfo.Workorder,
WorkorderRaw = inboundRecordInfo.WorkorderRaw,
Operator = parm.Operator,
Quantity = parm.ScrapQuantity,
TransactionType = "不良出库",
Remarks = $"不良品报废出库,数量为{parm.ScrapQuantity}",
};
string outboundReceiptResult = mmInventoryService.CreateOutboundReceipt(
outboundRecepitDto
);
if (outboundReceiptResult != "ok")
{
throw new Exception(outboundReceiptResult);
}
// 报废入库
InboundReceiptDto inboundRecepitDto = new()
{
ReceiptType = 1,
MaterialCode = inboundRecordInfo.MaterialCode,
BatchNo = parm.BatchNo,
LocationCode = "BFK001",
WarehouseCode = "WH006",
SupplierCode = inboundRecordInfo.SupplierCode,
StoveCode = inboundRecordInfo.StoveCode,
Workorder = inboundRecordInfo.Workorder,
WorkorderRaw = inboundRecordInfo.WorkorderRaw,
Operator = parm.Operator,
Quantity = parm.ScrapQuantity,
TransactionType = "报废入库",
Remarks = $"报废入库,来源不良单号:{inboundRecordInfo.InboundNo}",
};
string inboundReceiptresult = mmInventoryService.CreateInboundReceipt(inboundRecepitDto);
if (inboundReceiptresult != "ok")
{
throw new Exception(inboundReceiptresult);
}
inboundRecordInfo.Remarks += $"[已报废{parm.ScrapQuantity}]";
Context.Updateable(inboundRecordInfo).UpdateColumns(it => new { it.Remarks }).ExecuteCommand();
return "ok";
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
// 调用现有的创建报废单方法
return CreateScrapOrder(parm);
}
/// <summary>
@@ -518,16 +595,91 @@ namespace DOAN.Service.BZFM
/// </summary>
/// <param name="parm">转用单数据</param>
/// <returns></returns>
public QcScrapRecords CreateTransferOrderByWorkorder(QcScrapRecords parm)
public string CreateTransferOrderByWorkorder(DefectApproveDto parm)
{
// 验证工单号
if (string.IsNullOrEmpty(parm.Workorder))
try
{
throw new Exception("工单号不能为空");
}
// 验证工单号
if (string.IsNullOrEmpty(parm.Workorder))
{
throw new Exception("工单号不能为空");
}
// 工单信息查看
var workorderInfo = Context
.Queryable<ProWorkorder>()
.Where(it => it.Workorder == parm.Workorder)
.First();
if (workorderInfo == null)
{
throw new Exception($"工单信息为空{parm.Workorder}");
}
var inboundRecordInfo = Context
.Queryable<MmRecordInbound>()
.Where(it => it.Id == parm.Id)
.First();
if (inboundRecordInfo == null)
{
throw new Exception($"入库记录不存在{parm.Id}");
}
// 不良出库
MmInventoryService mmInventoryService = new();
// 调用现有的创建转用单方法
return CreateTransferOrder(parm);
OutboundReceiptDto outboundRecepitDto = new()
{
ReceiptType = 1,
InventoryId = -1,
MaterialCode = inboundRecordInfo.MaterialCode,
SupplierCode = inboundRecordInfo.SupplierCode,
BatchNo = inboundRecordInfo.BatchNo,
StoveCode = inboundRecordInfo.StoveCode,
LocationCode = inboundRecordInfo.LocationCode,
WarehouseCode = inboundRecordInfo.WarehouseCode,
OrderNo = workorderInfo.CustomerOrder,
Workorder = inboundRecordInfo.Workorder,
WorkorderRaw = inboundRecordInfo.WorkorderRaw,
Operator = parm.Operator,
Quantity = parm.ScrapQuantity,
TransactionType = "不良出库",
Remarks = $"不良品报废出库,数量为{parm.ScrapQuantity}",
};
string outboundReceiptResult = mmInventoryService.CreateOutboundReceipt(
outboundRecepitDto
);
if (outboundReceiptResult != "ok")
{
throw new Exception(outboundReceiptResult);
}
// 报废入库
InboundReceiptDto inboundRecepitDto = new()
{
ReceiptType = 1,
MaterialCode = inboundRecordInfo.MaterialCode,
BatchNo = parm.BatchNo,
LocationCode = "ZYK001",
WarehouseCode = "WH005",
SupplierCode = inboundRecordInfo.SupplierCode,
StoveCode = inboundRecordInfo.StoveCode,
Workorder = inboundRecordInfo.Workorder,
WorkorderRaw = inboundRecordInfo.WorkorderRaw,
Operator = parm.Operator,
Quantity = parm.ScrapQuantity,
TransactionType = "转用入库",
Remarks = $"转用入库,来源不良单号:{inboundRecordInfo.InboundNo}",
};
string inboundReceiptresult = mmInventoryService.CreateInboundReceipt(inboundRecepitDto);
if (inboundReceiptresult != "ok")
{
throw new Exception(inboundReceiptresult);
}
inboundRecordInfo.Remarks += $"[已转用{parm.ScrapQuantity}]";
Context.Updateable(inboundRecordInfo).UpdateColumns(it => new { it.Remarks }).ExecuteCommand();
return "ok";
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
/// <summary>