fix(物料管理): 修复批次号默认值问题并优化工单导入逻辑
修复QcScrapRecordsService和ReportFlowService中批次号默认值为"000"的问题,改为使用实际批次号 重构ProWorkorderImportService中的工单编号生成逻辑,改为按导入顺序生成而非按产品分组 完善IProWorkorderMaterialService接口定义,增加参数并调整方法位置 优化ProWorkorderMaterialService中的库存查询方法,增加过滤条件和参数
This commit is contained in:
@@ -37,6 +37,7 @@ namespace DOAN.Service.MES.product
|
||||
.Where(it => it.Workorder == workorder)
|
||||
.Where(it => it.TransactionType == "领料出库")
|
||||
.Where(it => it.Remarks != "已撤销")
|
||||
//.WhereIF(isHideZero, it => it != "已撤销")
|
||||
.Select(it => new MaterialTakeDto
|
||||
{
|
||||
Id = it.Id,
|
||||
@@ -78,6 +79,7 @@ namespace DOAN.Service.MES.product
|
||||
/// 根据工单号查询工单已成品入库清单
|
||||
/// </summary>
|
||||
/// <param name="workorder">工单号</param>
|
||||
/// <param name="isHideZero">是否隐藏0库存</param>
|
||||
/// <returns>成品入库清单数据</returns>
|
||||
public List<ProductStorageDto> GetProductStorageList(string workorder)
|
||||
{
|
||||
@@ -108,6 +110,7 @@ namespace DOAN.Service.MES.product
|
||||
/// 根据工单号查询工单已出货清单
|
||||
/// </summary>
|
||||
/// <param name="workorder">工单号</param>
|
||||
/// <param name="isHideZero">是否隐藏0库存</param>
|
||||
/// <returns>出货清单数据</returns>
|
||||
public List<ShipmentDto> GetShipmentList(string workorder)
|
||||
{
|
||||
@@ -138,9 +141,11 @@ namespace DOAN.Service.MES.product
|
||||
/// <summary>
|
||||
/// 根据工单查询物料库存接口
|
||||
/// </summary>
|
||||
/// <param name="workorder">工单号</param>
|
||||
/// <param name="workorder">工单号</param>
|
||||
/// <param name="isHideZero">是否隐藏0</param>
|
||||
/// <param name="searchType">查询范围 1-物料库 2-转用库</param>
|
||||
/// <returns>物料库存信息列表</returns>
|
||||
public List<MaterialInventoryDto> GetMaterialInventoryList(string workorder)
|
||||
public List<MaterialInventoryDto> GetMaterialInventoryList(string workorder, bool isHideZero = true, int searchType = 1)
|
||||
{
|
||||
try
|
||||
{
|
||||
@@ -166,7 +171,7 @@ namespace DOAN.Service.MES.product
|
||||
.Queryable<MmInventory>()
|
||||
.Where(it => it.MaterialCode == materialCode)
|
||||
.Where(it => it.LocationCode == "YCL001")
|
||||
.Where(it => it.CurrentQty > 0)
|
||||
.WhereIF(isHideZero, it => it.CurrentQty > 0)
|
||||
.Select(it => new MaterialInventoryDto
|
||||
{
|
||||
MaterialId = it.Id,
|
||||
@@ -196,7 +201,7 @@ namespace DOAN.Service.MES.product
|
||||
.Where(it => it.MaterialCode == mmMaterial.MaterialCode)
|
||||
.Where(it => it.SupplierCode == mmMaterial.SupplierCode)
|
||||
.Where(it => it.LocationCode == "YCL001" || it.LocationCode == "CP001")
|
||||
.Where(it => it.CurrentQty > 0)
|
||||
.WhereIF(isHideZero, it => it.CurrentQty > 0)
|
||||
.Select(it => new MaterialInventoryDto
|
||||
{
|
||||
MaterialId = it.Id,
|
||||
@@ -225,6 +230,187 @@ namespace DOAN.Service.MES.product
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 根据工单号获取可领料工单清单(产成品领取半成品)
|
||||
/// </summary>
|
||||
/// <param name="workorder">工单号</param>
|
||||
/// <param name="isHideZero">是否隐藏0记录</param>
|
||||
/// <param name="searchType">查询范围 1-物料库 2-转用库</param>
|
||||
/// <returns>可领料工单清单</returns>
|
||||
public List<ProWorkorderDto> GetPickableWorkordersByWorkorder(string workorder, bool isHideZero = true, int searchType = 1)
|
||||
{
|
||||
try
|
||||
{
|
||||
// 参数验证
|
||||
if (string.IsNullOrEmpty(workorder))
|
||||
{
|
||||
throw new ArgumentNullException(nameof(workorder), "工单号不能为空");
|
||||
}
|
||||
|
||||
var workorderInfo = Context
|
||||
.Queryable<ProWorkorder>()
|
||||
.First(it => it.Workorder == workorder);
|
||||
if (workorderInfo == null)
|
||||
{
|
||||
throw new ArgumentException("工单不存在", nameof(workorder));
|
||||
}
|
||||
// 需要领取半成品
|
||||
if (workorderInfo.RouteCode == "10")
|
||||
{
|
||||
return Context
|
||||
.Queryable<MmRecordInbound>()
|
||||
.LeftJoin<ProWorkorder>((mri,pro)=>mri.Workorder == pro.Workorder)
|
||||
.Where((mri, pro) => mri.MaterialCode == workorderInfo.MaterialCode)
|
||||
.Where((mri, pro) => mri.TransactionType == "生产入库")
|
||||
.Where((mri, pro) => mri.Remarks != "已撤销")
|
||||
//.Where((mri, pro) => pro.ShipmentNum < pro.PlanNum)
|
||||
.OrderByDescending((mri, pro) => mri.Workorder)
|
||||
.Select(
|
||||
(mri, pro) => new ProWorkorderDto
|
||||
{
|
||||
Id = pro.Id,
|
||||
Workorder = mri.Workorder,
|
||||
productionName = mri.MaterialCode,
|
||||
productionCode = mri.MaterialName,
|
||||
MaterialCode = mri.MaterialCode,
|
||||
MaterialName = mri.MaterialName,
|
||||
ShipmentNum = pro.ShipmentNum,
|
||||
PlanNum = pro.PlanNum,
|
||||
Remark01 = mri.Remarks
|
||||
},
|
||||
true
|
||||
)
|
||||
.Take(30)
|
||||
.ToList();
|
||||
}
|
||||
else
|
||||
{
|
||||
// 非10线则返回库存
|
||||
|
||||
// 示例返回空列表
|
||||
return new List<ProWorkorderDto>();
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
// 集成现有系统的日志记录
|
||||
// Log.Error("获取可领料工单清单失败", ex);
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 根据工单号查询成品库存
|
||||
/// </summary>
|
||||
/// <param name="workorder">工单号</param>
|
||||
/// <param name="isHideZero">是否隐藏为0记录</param>
|
||||
/// <returns>成品库存信息列表</returns>
|
||||
public List<MaterialInventoryDto> GetProductInventoryList(string workorder, bool isHideZero = true)
|
||||
{
|
||||
try
|
||||
{
|
||||
// 参数验证
|
||||
if (string.IsNullOrEmpty(workorder))
|
||||
{
|
||||
throw new ArgumentNullException(nameof(workorder), "工单号不能为空");
|
||||
}
|
||||
|
||||
var workorderInfo = Context
|
||||
.Queryable<ProWorkorder>()
|
||||
.First(it => it.Workorder == workorder);
|
||||
if (workorderInfo == null)
|
||||
{
|
||||
throw new ArgumentException("工单不存在", nameof(workorder));
|
||||
}
|
||||
var result = Context
|
||||
.Queryable<MmInventory>()
|
||||
.Where(it => it.MaterialCode == workorderInfo.productionCode)
|
||||
.Where(it => it.LocationCode == "CP001")
|
||||
.WhereIF(isHideZero, it => it.CurrentQty > 0)
|
||||
.Select(it => new MaterialInventoryDto
|
||||
{
|
||||
MaterialId = it.Id,
|
||||
MaterialCode = it.MaterialCode,
|
||||
MaterialName = it.MaterialName,
|
||||
CurrentQuantity = it.CurrentQty,
|
||||
SupplierCode = it.SupplierCode,
|
||||
SupplierName = it.SupplierName,
|
||||
Unit = it.Unit,
|
||||
BatchNo = it.BatchNo,
|
||||
})
|
||||
.OrderByDescending(it => it.BatchNo)
|
||||
.Take(10)
|
||||
.ToList();
|
||||
|
||||
return result;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
// 集成现有系统的日志记录
|
||||
// Log.Error("查询成品库存失败", ex);
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 根据工单号获取可出货订单清单
|
||||
/// </summary>
|
||||
/// <param name="workorder">工单号</param>
|
||||
/// <param name="isHideZero">是否隐藏为0记录</param>
|
||||
/// <returns>可出货订单清单</returns>
|
||||
public List<OrderPurchaseDto> GetShippableOrdersByWorkorder(string workorder, bool isHideZero = true)
|
||||
{
|
||||
try
|
||||
{
|
||||
// 参数验证
|
||||
if (string.IsNullOrEmpty(workorder))
|
||||
{
|
||||
throw new ArgumentNullException(nameof(workorder), "工单号不能为空");
|
||||
}
|
||||
|
||||
var workorderInfo = Context
|
||||
.Queryable<ProWorkorder>()
|
||||
.First(it => it.Workorder == workorder);
|
||||
if (workorderInfo == null)
|
||||
{
|
||||
throw new ArgumentException("工单不存在", nameof(workorder));
|
||||
}
|
||||
var orderPurchaseList = Context
|
||||
.Queryable<OrderPurchase>()
|
||||
.Where(o => o.MaterialCode == workorderInfo.productionCode)
|
||||
.Where(it => it.Orderindicator != 1)
|
||||
//.Where(it => it.Orderindicator != -1)
|
||||
.OrderBy(it => it.DeliveryDate)
|
||||
.Select(
|
||||
o => new OrderPurchaseDto
|
||||
{
|
||||
Id = o.Id,
|
||||
OrderNoMes = o.OrderNoMes,
|
||||
MaterialCode = o.MaterialCode,
|
||||
MaterialName = o.MaterialName,
|
||||
DemandQuantity = o.DemandQuantity,
|
||||
DeliveryQuantity = o.DeliveryQuantity,
|
||||
DeliveryDate = o.DeliveryDate,
|
||||
},
|
||||
true
|
||||
)
|
||||
.ToList();
|
||||
|
||||
// 示例返回空列表
|
||||
return orderPurchaseList;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
// 集成现有系统的日志记录
|
||||
// Log.Error("获取可出货订单清单失败", ex);
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 工单领料接口
|
||||
/// </summary>
|
||||
@@ -423,178 +609,5 @@ namespace DOAN.Service.MES.product
|
||||
throw new Exception(ex.Message);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 根据工单号获取可领料工单清单(产成品领取半成品)
|
||||
/// </summary>
|
||||
/// <param name="workorder">工单号</param>
|
||||
/// <returns>可领料工单清单</returns>
|
||||
public List<ProWorkorderDto> GetPickableWorkordersByWorkorder(string workorder)
|
||||
{
|
||||
try
|
||||
{
|
||||
// 参数验证
|
||||
if (string.IsNullOrEmpty(workorder))
|
||||
{
|
||||
throw new ArgumentNullException(nameof(workorder), "工单号不能为空");
|
||||
}
|
||||
|
||||
var workorderInfo = Context
|
||||
.Queryable<ProWorkorder>()
|
||||
.First(it => it.Workorder == workorder);
|
||||
if (workorderInfo == null)
|
||||
{
|
||||
throw new ArgumentException("工单不存在", nameof(workorder));
|
||||
}
|
||||
// 需要领取半成品
|
||||
if (workorderInfo.RouteCode == "10")
|
||||
{
|
||||
return Context
|
||||
.Queryable<MmRecordInbound>()
|
||||
.LeftJoin<ProWorkorder>((mri,pro)=>mri.Workorder == pro.Workorder)
|
||||
.Where((mri, pro) => mri.MaterialCode == workorderInfo.MaterialCode)
|
||||
.Where((mri, pro) => mri.TransactionType == "生产入库")
|
||||
.Where((mri, pro) => mri.Remarks != "已撤销")
|
||||
//.Where((mri, pro) => pro.ShipmentNum < pro.PlanNum)
|
||||
.OrderByDescending((mri, pro) => mri.Workorder)
|
||||
.Select(
|
||||
(mri, pro) => new ProWorkorderDto
|
||||
{
|
||||
Id = pro.Id,
|
||||
Workorder = mri.Workorder,
|
||||
productionName = mri.MaterialCode,
|
||||
productionCode = mri.MaterialName,
|
||||
MaterialCode = mri.MaterialCode,
|
||||
MaterialName = mri.MaterialName,
|
||||
ShipmentNum = pro.ShipmentNum,
|
||||
PlanNum = pro.PlanNum,
|
||||
Remark01 = mri.Remarks
|
||||
},
|
||||
true
|
||||
)
|
||||
.Take(30)
|
||||
.ToList();
|
||||
}
|
||||
else
|
||||
{
|
||||
// 非10线则返回库存
|
||||
|
||||
// 示例返回空列表
|
||||
return new List<ProWorkorderDto>();
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
// 集成现有系统的日志记录
|
||||
// Log.Error("获取可领料工单清单失败", ex);
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 根据工单号获取可出货订单清单
|
||||
/// </summary>
|
||||
/// <param name="workorder">工单号</param>
|
||||
/// <returns>可出货订单清单</returns>
|
||||
public List<OrderPurchaseDto> GetShippableOrdersByWorkorder(string workorder)
|
||||
{
|
||||
try
|
||||
{
|
||||
// 参数验证
|
||||
if (string.IsNullOrEmpty(workorder))
|
||||
{
|
||||
throw new ArgumentNullException(nameof(workorder), "工单号不能为空");
|
||||
}
|
||||
|
||||
var workorderInfo = Context
|
||||
.Queryable<ProWorkorder>()
|
||||
.First(it => it.Workorder == workorder);
|
||||
if (workorderInfo == null)
|
||||
{
|
||||
throw new ArgumentException("工单不存在", nameof(workorder));
|
||||
}
|
||||
var orderPurchaseList = Context
|
||||
.Queryable<OrderPurchase>()
|
||||
.Where(o => o.MaterialCode == workorderInfo.productionCode)
|
||||
.Where(it => it.Orderindicator != 1)
|
||||
//.Where(it => it.Orderindicator != -1)
|
||||
.OrderBy(it => it.DeliveryDate)
|
||||
.Select(
|
||||
o => new OrderPurchaseDto
|
||||
{
|
||||
Id = o.Id,
|
||||
OrderNoMes = o.OrderNoMes,
|
||||
MaterialCode = o.MaterialCode,
|
||||
MaterialName = o.MaterialName,
|
||||
DemandQuantity = o.DemandQuantity,
|
||||
DeliveryQuantity = o.DeliveryQuantity,
|
||||
DeliveryDate = o.DeliveryDate,
|
||||
},
|
||||
true
|
||||
)
|
||||
.ToList();
|
||||
|
||||
// 示例返回空列表
|
||||
return orderPurchaseList;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
// 集成现有系统的日志记录
|
||||
// Log.Error("获取可出货订单清单失败", ex);
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 根据工单号查询成品库存
|
||||
/// </summary>
|
||||
/// <param name="workorder">工单号</param>
|
||||
/// <returns>成品库存信息列表</returns>
|
||||
public List<MaterialInventoryDto> GetProductInventoryList(string workorder)
|
||||
{
|
||||
try
|
||||
{
|
||||
// 参数验证
|
||||
if (string.IsNullOrEmpty(workorder))
|
||||
{
|
||||
throw new ArgumentNullException(nameof(workorder), "工单号不能为空");
|
||||
}
|
||||
|
||||
var workorderInfo = Context
|
||||
.Queryable<ProWorkorder>()
|
||||
.First(it => it.Workorder == workorder);
|
||||
if (workorderInfo == null)
|
||||
{
|
||||
throw new ArgumentException("工单不存在", nameof(workorder));
|
||||
}
|
||||
var result = Context
|
||||
.Queryable<MmInventory>()
|
||||
.Where(it => it.MaterialCode == workorderInfo.productionCode)
|
||||
.Where(it => it.LocationCode == "CP001")
|
||||
//.Where(it => it.CurrentQty > 0)
|
||||
.Select(it => new MaterialInventoryDto
|
||||
{
|
||||
MaterialId = it.Id,
|
||||
MaterialCode = it.MaterialCode,
|
||||
MaterialName = it.MaterialName,
|
||||
CurrentQuantity = it.CurrentQty,
|
||||
SupplierCode = it.SupplierCode,
|
||||
SupplierName = it.SupplierName,
|
||||
Unit = it.Unit,
|
||||
BatchNo = it.BatchNo,
|
||||
})
|
||||
.OrderByDescending(it => it.BatchNo)
|
||||
.Take(10)
|
||||
.ToList();
|
||||
|
||||
return result;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
// 集成现有系统的日志记录
|
||||
// Log.Error("查询成品库存失败", ex);
|
||||
throw;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user