fix(订单服务): 修复订单采购服务中的验证逻辑和状态处理

- 移除OrderPurchaseDto中Id字段的必填验证
- 修改ProWorkorderMaterialService中的订单筛选条件
- 增强AddOrderPurchase和UpdateOrderPurchase方法的验证逻辑
- 为订单添加初始状态值和事务处理
- 修复导入日期处理和空值判断
This commit is contained in:
2026-02-03 10:12:30 +08:00
parent 3f8b6c3ea9
commit c6efde0593
3 changed files with 75 additions and 12 deletions

View File

@@ -46,7 +46,6 @@ namespace DOAN.Model.MES.order.Dto
/// </summary> /// </summary>
public class OrderPurchaseDto public class OrderPurchaseDto
{ {
[Required(ErrorMessage = "雪花id不能为空")]
public string Id { get; set; } public string Id { get; set; }
public DateTime? ImportDate { get; set; } public DateTime? ImportDate { get; set; }

View File

@@ -1,4 +1,5 @@
using Aliyun.OSS; using Aliyun.OSS;
using DOAN.Model.BZFM;
using DOAN.Model.MES.order; using DOAN.Model.MES.order;
using DOAN.Model.MES.order.Dto; using DOAN.Model.MES.order.Dto;
using DOAN.Model.MES.product; using DOAN.Model.MES.product;
@@ -46,7 +47,7 @@ namespace DOAN.Service.MES.order
var workorderInfo = Context.Queryable<ProWorkorder>() var workorderInfo = Context.Queryable<ProWorkorder>()
.Where(it => it.Workorder.Contains(parm.WorkOrder)) .Where(it => it.Workorder.Contains(parm.WorkOrder))
.First(); .First();
if(workorderInfo != null) if (workorderInfo != null)
{ {
parm.OrderNoMes = workorderInfo.CustomerOrder; parm.OrderNoMes = workorderInfo.CustomerOrder;
} }
@@ -97,7 +98,46 @@ namespace DOAN.Service.MES.order
/// <returns></returns> /// <returns></returns>
public OrderPurchase AddOrderPurchase(OrderPurchase model) public OrderPurchase AddOrderPurchase(OrderPurchase model)
{ {
return Insertable(model).ExecuteReturnEntity(); // 订单号唯一性验证
var existingOrder = Context.Queryable<OrderPurchase>()
.Where(it => it.OrderNoMes == model.OrderNoMes)
.First();
if (existingOrder != null)
{
throw new ArgumentException($"订单号 {model.OrderNoMes} 已存在,请使用其他订单号");
}
// 设置初始值
DateTime now = DateTime.Now;
model.Id = SnowFlakeSingle.Instance.NextId().ToString();
var materialInfo = Context.Queryable<MmMaterial>().Where(it => it.MaterialCode == model.MaterialCode).First();
if(materialInfo == null)
{
throw new ArgumentException($"物料号 {model.MaterialCode} 不在清单中,请检查");
}
model.MaterialName = materialInfo.MaterialName;
model.ImportDate = now;
model.DocumentDate = now;
model.CreatedTime = now;
model.CreatedBy = "";
model.UpdatedTime = now;
model.UpdatedBy = "";
// 设置默认值
model.Specordindicator = -1; // 不处理
model.DeliveryQuantity = 0; // 实际交货数量初始为0
model.Orderindicator = -1; // 订单未完成(初始状态)
model.Status = 0; // 状态待处理
// 使用事务处理
OrderPurchase result = null;
UseTran2(() =>
{
result = Insertable(model).ExecuteReturnEntity();
});
return result;
} }
/// <summary> /// <summary>
@@ -107,7 +147,31 @@ namespace DOAN.Service.MES.order
/// <returns></returns> /// <returns></returns>
public int UpdateOrderPurchase(OrderPurchase model) public int UpdateOrderPurchase(OrderPurchase model)
{ {
return Update(model, true); // 订单号唯一性验证
var existingOrder = Context.Queryable<OrderPurchase>()
.Where(it => it.OrderNoMes == model.OrderNoMes && it.Id != model.Id)
.First();
if (existingOrder != null)
{
throw new ArgumentException($"订单号 {model.OrderNoMes} 已存在,请使用其他订单号");
}
var materialInfo = Context.Queryable<MmMaterial>().Where(it => it.MaterialCode == model.MaterialCode).First();
if (materialInfo == null)
{
throw new ArgumentException($"物料号 {model.MaterialCode} 不在清单中,请检查");
}
model.MaterialName = materialInfo.MaterialName;
// 使用事务处理
int result = 0;
UseTran2(() =>
{
result = Update(model, true);
});
return result;
} }
/// <summary> /// <summary>
@@ -145,7 +209,7 @@ namespace DOAN.Service.MES.order
// 将单元格的数字值转换为DateTime // 将单元格的数字值转换为DateTime
importDate = cell?.DateCellValue?? DateTime.MinValue; importDate = cell?.DateCellValue ?? DateTime.MinValue;
importDate = importDate.Date; importDate = importDate.Date;
// 遍历每一行 // 遍历每一行
@@ -234,13 +298,13 @@ namespace DOAN.Service.MES.order
}); });
return result; return result;
} }
if(orderPurchases.Count>0) if (orderPurchases.Count > 0)
{ {
int result = 0; int result = 0;
UseTran2(() => UseTran2(() =>
{ {
Context.Deleteable<OrderPurchase>().Where(x => x.ImportDate == importDate).ExecuteCommand(); Context.Deleteable<OrderPurchase>().Where(x => x.ImportDate == importDate).ExecuteCommand();
result= Context.Insertable(orderPurchases).ExecuteCommand(); result = Context.Insertable(orderPurchases).ExecuteCommand();
}); });
return result; return result;

View File

@@ -479,7 +479,7 @@ namespace DOAN.Service.MES.product
var orderPurchaseList = Context var orderPurchaseList = Context
.Queryable<OrderPurchase>() .Queryable<OrderPurchase>()
.Where(o => o.MaterialCode == workorderInfo.productionCode) .Where(o => o.MaterialCode == workorderInfo.productionCode)
.Where(it => it.Orderindicator == 0) .Where(it => it.Orderindicator != -1)
.OrderBy(it => it.DeliveryDate) .OrderBy(it => it.DeliveryDate)
.Select( .Select(
o => new OrderPurchaseDto o => new OrderPurchaseDto