feat(材料管理): 添加炉号字段并优化工单排序逻辑

在材料相关的DTO和服务中添加StoveCode字段以支持炉号记录
优化工单导入服务中的排序逻辑,处理空值情况
调整报表流程服务中的材料查询和更新逻辑
This commit is contained in:
2026-02-11 14:38:04 +08:00
parent 0885d26796
commit 9e096214c7
7 changed files with 41 additions and 20 deletions

View File

@@ -117,6 +117,7 @@ namespace DOAN.Model.BZFM.Dto
public string TransactionType { get; set; } public string TransactionType { get; set; }
public string BatchNo { get; set; } public string BatchNo { get; set; }
public string StoveCode { get; set; }
public string OrderNo { get; set; } public string OrderNo { get; set; }
@@ -171,6 +172,10 @@ namespace DOAN.Model.BZFM.Dto
[SugarColumn(ColumnName = "batch_no")] [SugarColumn(ColumnName = "batch_no")]
public string BatchNo { get; set; } public string BatchNo { get; set; }
[ExcelColumn(Name = "炉号")]
[SugarColumn(ColumnName = "stove_code")]
public string StoveCode { get; set; }
[ExcelColumn(Name = "出库数量")] [ExcelColumn(Name = "出库数量")]
[SugarColumn(ColumnName = "quantity")] [SugarColumn(ColumnName = "quantity")]
public decimal Quantity { get; set; } public decimal Quantity { get; set; }

View File

@@ -89,6 +89,12 @@ namespace DOAN.Model.BZFM
[SugarColumn(ColumnName = "batch_no")] [SugarColumn(ColumnName = "batch_no")]
public string BatchNo { get; set; } public string BatchNo { get; set; }
/// <summary>
/// 炉号
/// </summary>
[SugarColumn(ColumnName = "stove_code")]
public string StoveCode { get; set; }
/// <summary> /// <summary>
/// 关联订单号 /// 关联订单号
/// </summary> /// </summary>

View File

@@ -36,6 +36,11 @@ namespace DOAN.Model.MES.product.Dto
/// </summary> /// </summary>
public string BatchNo { get; set; } public string BatchNo { get; set; }
/// <summary>
/// 炉号
/// </summary>
public string StoveCode { get; set; }
/// <summary> /// <summary>
/// 数量 /// 数量
/// </summary> /// </summary>

View File

@@ -377,6 +377,7 @@ namespace DOAN.Service.BZFM
{ {
OutboundNo = outboundNo, OutboundNo = outboundNo,
BatchNo = parm.BatchNo, BatchNo = parm.BatchNo,
StoveCode = parm.
Operator = parm.Operator, Operator = parm.Operator,
MaterialCode = mmMaterial.MaterialCode, MaterialCode = mmMaterial.MaterialCode,
MaterialName = mmMaterial.MaterialName, MaterialName = mmMaterial.MaterialName,
@@ -453,6 +454,7 @@ namespace DOAN.Service.BZFM
{ {
OutboundNo = outboundNo, OutboundNo = outboundNo,
BatchNo = parm.BatchNo, BatchNo = parm.BatchNo,
StoveCode = parm.StoveCode,
Operator = parm.Operator, Operator = parm.Operator,
MaterialCode = mmInventory.MaterialCode, MaterialCode = mmInventory.MaterialCode,
MaterialName = mmInventory.MaterialName, MaterialName = mmInventory.MaterialName,

View File

@@ -88,7 +88,7 @@ namespace DOAN.Service.MES.product
/// <returns>最大编号索引</returns> /// <returns>最大编号索引</returns>
private int GetMaxWorkorderIndex(string productionCode, DateTime dateValue) private int GetMaxWorkorderIndex(string productionCode, DateTime dateValue)
{ {
var maxIndex = Context var workorderNumbers = Context
.Queryable<ProWorkorder>() .Queryable<ProWorkorder>()
.Where(it => it.WorkorderDate == dateValue.Date) .Where(it => it.WorkorderDate == dateValue.Date)
.Where(it => it.productionCode == productionCode) .Where(it => it.productionCode == productionCode)
@@ -102,9 +102,10 @@ namespace DOAN.Service.MES.product
return index; return index;
return 0; return 0;
}) })
.Max(); .ToList();
return maxIndex; // 如果没有找到记录返回0
return workorderNumbers.Count > 0 ? workorderNumbers.Max() : 0;
} }
/// <summary> /// <summary>
@@ -425,11 +426,14 @@ namespace DOAN.Service.MES.product
.ToList(); .ToList();
// 获取所有工单的最大sort值用于后续排序 // 获取所有工单的最大sort值用于后续排序
var maxSort = Context var maxSortNullable = Context
.Queryable<ProWorkorder>() .Queryable<ProWorkorder>()
.Where(it => it.WorkorderDate == dateValue.Date) .Where(it => it.WorkorderDate == dateValue.Date)
//.Select(it => it.Sort) //.Select(it => it.Sort)
.Max(it => it.Sort).Value; .Max(it => it.Sort);
// 如果没有找到记录设置默认值0
int maxSort = maxSortNullable.HasValue ? maxSortNullable.Value : 0;
// 从maxSort + 10开始确保sort值按10、20、30...递增 // 从maxSort + 10开始确保sort值按10、20、30...递增
int currentSort = (maxSort / 10) * 10 + 10; int currentSort = (maxSort / 10) * 10 + 10;
@@ -511,11 +515,14 @@ namespace DOAN.Service.MES.product
var productionCodeGroups = workorderList.GroupBy(w => w.productionCode).ToList(); var productionCodeGroups = workorderList.GroupBy(w => w.productionCode).ToList();
// 获取所有工单的最大sort值用于后续排序 // 获取所有工单的最大sort值用于后续排序
var maxSort = Context var maxSortNullable = Context
.Queryable<ProWorkorder>() .Queryable<ProWorkorder>()
.Where(it => it.WorkorderDate == dateValue.Date) .Where(it => it.WorkorderDate == dateValue.Date)
//.Select(it => it.Sort) //.Select(it => it.Sort)
.Max(it => it.Sort).Value; .Max(it => it.Sort);
// 如果没有找到记录设置默认值0
int maxSort = maxSortNullable.HasValue ? maxSortNullable.Value : 0;
// 从maxSort + 10开始确保sort值按10、20、30...递增 // 从maxSort + 10开始确保sort值按10、20、30...递增
int currentSort = (maxSort / 10) * 10 + 10; int currentSort = (maxSort / 10) * 10 + 10;

View File

@@ -45,6 +45,7 @@ namespace DOAN.Service.MES.product
SupplierCode = it.SupplierCode, SupplierCode = it.SupplierCode,
SupplierName = it.SupplierName, SupplierName = it.SupplierName,
BatchNo = it.BatchNo, BatchNo = it.BatchNo,
StoveCode = it.StoveCode,
Quantity = it.Quantity, Quantity = it.Quantity,
Unit = it.Unit, Unit = it.Unit,
CreatedTime = it.CreatedTime.Value, CreatedTime = it.CreatedTime.Value,

View File

@@ -102,7 +102,7 @@ public class ReportFlowService : BaseService<ProReportwork01>, IReportFlowServic
.Queryable<MmRecordInbound>() .Queryable<MmRecordInbound>()
.Where(it => it.BatchNo == feed_order) .Where(it => it.BatchNo == feed_order)
.Where(it => it.TransactionType == "采购入库") .Where(it => it.TransactionType == "采购入库")
.Where(it => it.Remarks != "已撤销") .Where(it => it.Remarks == null || it.Remarks != "已撤销")
.First(); .First();
if (purchaseInfo != null) if (purchaseInfo != null)
{ {
@@ -113,6 +113,12 @@ public class ReportFlowService : BaseService<ProReportwork01>, IReportFlowServic
throw new Exception($"未找到原材料采购批号:{feed_order}"); throw new Exception($"未找到原材料采购批号:{feed_order}");
} }
Context.Ado.BeginTran(); Context.Ado.BeginTran();
Context
.Updateable<ProWorkorder>()
.Where(it => it.Workorder == workorder)
.SetColumns(it => it.StoveCode == stoveCode)
.SetColumns(it => it.FeedOrder == feed_order)
.ExecuteCommand();
if (Exist) if (Exist)
{ {
result = Context result = Context
@@ -125,12 +131,6 @@ public class ReportFlowService : BaseService<ProReportwork01>, IReportFlowServic
.SetColumns(it => it.UpdatedBy == Worker) .SetColumns(it => it.UpdatedBy == Worker)
.SetColumns(it => it.UpdatedTime == DateTime.Now) .SetColumns(it => it.UpdatedTime == DateTime.Now)
.ExecuteCommand(); .ExecuteCommand();
Context
.Updateable<ProWorkorder>()
.Where(it => it.Workorder == workorder)
.SetColumns(it => it.StoveCode == stove_code)
.SetColumns(it => it.FeedOrder == feed_order)
.ExecuteCommand();
} }
else else
{ {
@@ -145,12 +145,6 @@ public class ReportFlowService : BaseService<ProReportwork01>, IReportFlowServic
proReportwork01.CreatedBy = Worker; proReportwork01.CreatedBy = Worker;
proReportwork01.CreatedTime = DateTime.Now; proReportwork01.CreatedTime = DateTime.Now;
result = Context.Insertable(proReportwork01).ExecuteCommand(); result = Context.Insertable(proReportwork01).ExecuteCommand();
Context
.Updateable<ProWorkorder>()
.Where(it => it.Workorder == workorder)
.SetColumns(it => it.StoveCode == stove_code)
.SetColumns(it => it.FeedOrder == feed_order)
.ExecuteCommand();
} }
//XXX 领料出库操作(上边代码先不动) //XXX 领料出库操作(上边代码先不动)
MmRecordOutbound outRecordbound = Context MmRecordOutbound outRecordbound = Context
@@ -226,6 +220,7 @@ public class ReportFlowService : BaseService<ProReportwork01>, IReportFlowServic
MaterialCode = proWorkorder.MaterialCode, MaterialCode = proWorkorder.MaterialCode,
SupplierCode = supplierCode, SupplierCode = supplierCode,
BatchNo = feed_order, BatchNo = feed_order,
StoveCode = stoveCode,
LocationCode = "YCL001", LocationCode = "YCL001",
WarehouseCode = "WH003", WarehouseCode = "WH003",
OrderNo = proWorkorder.CustomerOrder, OrderNo = proWorkorder.CustomerOrder,