refactor(MES): 优化工单查询和物料服务代码
- 简化不良品审批通知消息内容 - 调整命名空间引用顺序 - 统一代码格式和缩进 - 添加成品入库前的领料数量校验 - 优化批量领料逻辑和错误提示
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
using System.Collections.Generic;
|
||||
using Aliyun.OSS;
|
||||
using DOAN.Model.BZFM;
|
||||
using DOAN.Model.MES.order;
|
||||
@@ -13,7 +14,6 @@ using MailKit.Search;
|
||||
using Microsoft.Data.SqlClient;
|
||||
using Microsoft.IdentityModel.Tokens;
|
||||
using SqlSugar.DistributedSystem.Snowflake;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace DOAN.Service.MES.product
|
||||
{
|
||||
@@ -59,15 +59,15 @@ namespace DOAN.Service.MES.product
|
||||
WorkorderRaw = it.WorkorderRaw,
|
||||
})
|
||||
.ToList();
|
||||
foreach(var item in result)
|
||||
foreach (var item in result)
|
||||
{
|
||||
if (!string.IsNullOrEmpty(item.WorkorderRaw))
|
||||
{
|
||||
var workorderRawInfo = Context
|
||||
.Queryable<ProWorkorder>()
|
||||
.Where(x => x.Workorder == item.WorkorderRaw)
|
||||
.First();
|
||||
if(workorderRawInfo != null)
|
||||
.Queryable<ProWorkorder>()
|
||||
.Where(x => x.Workorder == item.WorkorderRaw)
|
||||
.First();
|
||||
if (workorderRawInfo != null)
|
||||
{
|
||||
item.StoveCode = workorderRawInfo.StoveCode;
|
||||
item.BatchNo = workorderRawInfo.FeedOrder;
|
||||
@@ -144,11 +144,13 @@ 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 PagedInfo<MaterialInventoryDto> GetMaterialInventoryList(WorkorderMaterialQueryDto query)
|
||||
public PagedInfo<MaterialInventoryDto> GetMaterialInventoryList(
|
||||
WorkorderMaterialQueryDto query
|
||||
)
|
||||
{
|
||||
try
|
||||
{
|
||||
@@ -225,7 +227,6 @@ namespace DOAN.Service.MES.product
|
||||
.ToList();
|
||||
result.Result.AddRange(InventoryList);
|
||||
result.TotalNum += 1;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -239,8 +240,6 @@ namespace DOAN.Service.MES.product
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 根据工单号获取可领料工单清单(产成品领取半成品)
|
||||
/// </summary>
|
||||
@@ -248,7 +247,9 @@ namespace DOAN.Service.MES.product
|
||||
/// <param name="isHideZero">是否隐藏0记录</param>
|
||||
/// <param name="searchType">查询范围 1-物料库 2-转用库</param>
|
||||
/// <returns>可领料工单清单</returns>
|
||||
public PagedInfo<ProWorkorderDto> GetPickableWorkordersByWorkorder(WorkorderMaterialQueryDto query)
|
||||
public PagedInfo<ProWorkorderDto> GetPickableWorkordersByWorkorder(
|
||||
WorkorderMaterialQueryDto query
|
||||
)
|
||||
{
|
||||
try
|
||||
{
|
||||
@@ -270,25 +271,26 @@ namespace DOAN.Service.MES.product
|
||||
{
|
||||
return Context
|
||||
.Queryable<MmRecordInbound>()
|
||||
.LeftJoin<ProWorkorder>((mri,pro)=>mri.Workorder == pro.Workorder)
|
||||
.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 != "已撤销" || mri.Remarks == null)
|
||||
//.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
|
||||
},
|
||||
(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
|
||||
)
|
||||
.ToPage(query);
|
||||
@@ -315,7 +317,9 @@ namespace DOAN.Service.MES.product
|
||||
/// <param name="workorder">工单号</param>
|
||||
/// <param name="isHideZero">是否隐藏为0记录</param>
|
||||
/// <returns>成品库存信息列表</returns>
|
||||
public PagedInfo<MaterialInventoryDto> GetProductInventoryList(WorkorderMaterialQueryDto query)
|
||||
public PagedInfo<MaterialInventoryDto> GetProductInventoryList(
|
||||
WorkorderMaterialQueryDto query
|
||||
)
|
||||
{
|
||||
try
|
||||
{
|
||||
@@ -369,7 +373,9 @@ namespace DOAN.Service.MES.product
|
||||
/// <param name="workorder">工单号</param>
|
||||
/// <param name="isHideZero">是否隐藏为0记录</param>
|
||||
/// <returns>可出货订单清单</returns>
|
||||
public PagedInfo<OrderPurchaseDto> GetShippableOrdersByWorkorder(WorkorderMaterialQueryDto query)
|
||||
public PagedInfo<OrderPurchaseDto> GetShippableOrdersByWorkorder(
|
||||
WorkorderMaterialQueryDto query
|
||||
)
|
||||
{
|
||||
try
|
||||
{
|
||||
@@ -419,8 +425,6 @@ namespace DOAN.Service.MES.product
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 工单领料接口
|
||||
/// </summary>
|
||||
@@ -478,7 +482,6 @@ namespace DOAN.Service.MES.product
|
||||
);
|
||||
// 示例返回true
|
||||
return result;
|
||||
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
@@ -508,11 +511,12 @@ namespace DOAN.Service.MES.product
|
||||
throw new Exception("传入参数Ids为空,无修改工单");
|
||||
}
|
||||
// 检查是否有采购记录
|
||||
var inboundRecordInfo = Context.Queryable<MmRecordInbound>()
|
||||
.Where(it => it.BatchNo == parm.BatchNo)
|
||||
.Where(it => it.TransactionType == "采购入库")
|
||||
.Where(it => it.Remarks != "已撤销" || it.Remarks == null)
|
||||
.First();
|
||||
var inboundRecordInfo = Context
|
||||
.Queryable<MmRecordInbound>()
|
||||
.Where(it => it.BatchNo == parm.BatchNo)
|
||||
.Where(it => it.TransactionType == "采购入库")
|
||||
.Where(it => it.Remarks != "已撤销" || it.Remarks == null)
|
||||
.First();
|
||||
if (inboundRecordInfo == null)
|
||||
{
|
||||
throw new Exception($"批次号{parm.BatchNo}无对应采购记录,请检查");
|
||||
@@ -532,7 +536,7 @@ namespace DOAN.Service.MES.product
|
||||
{
|
||||
throw new Exception($"工单异常{workOrderId},未找到工单");
|
||||
}
|
||||
if(workOrderInfo.RouteCode == "10")
|
||||
if (workOrderInfo.RouteCode == "10")
|
||||
{
|
||||
throw new Exception("10线工单不可批量领料");
|
||||
}
|
||||
@@ -542,37 +546,43 @@ namespace DOAN.Service.MES.product
|
||||
}
|
||||
else
|
||||
{
|
||||
if(standardMaterialCode != workOrderInfo.MaterialCode)
|
||||
if (standardMaterialCode != workOrderInfo.MaterialCode)
|
||||
{
|
||||
throw new Exception($"工单{workOrderInfo.Workorder}原材料与上一个工单不一致,上一个工单{standardMaterialCode}");
|
||||
throw new Exception(
|
||||
$"工单{workOrderInfo.Workorder}原材料与上一个工单不一致,上一个工单{standardMaterialCode}"
|
||||
);
|
||||
}
|
||||
}
|
||||
string workOrder = workOrderInfo.Workorder;
|
||||
string workOrder = workOrderInfo.Workorder;
|
||||
// 是否有领料记录
|
||||
bool hasOutMaterialRecord = Context.Queryable<MmRecordOutbound>()
|
||||
.Where(it => it.Workorder == workOrder)
|
||||
.Where(it => it.TransactionType == "领料出库")
|
||||
.Where(it => it.Remarks != "已撤销" || it.Remarks == null)
|
||||
.Any();
|
||||
bool hasOutMaterialRecord = Context
|
||||
.Queryable<MmRecordOutbound>()
|
||||
.Where(it => it.Workorder == workOrder)
|
||||
.Where(it => it.TransactionType == "领料出库")
|
||||
.Where(it => it.Remarks != "已撤销" || it.Remarks == null)
|
||||
.Any();
|
||||
if (hasOutMaterialRecord)
|
||||
{
|
||||
throw new Exception($"该工单{workOrder}已存在领料记录,无法再次领料");
|
||||
}
|
||||
batchTakeMaterialWorkOrderList.Add(workOrderInfo);
|
||||
}
|
||||
if(batchTakeMaterialWorkOrderList.Count == 0)
|
||||
if (batchTakeMaterialWorkOrderList.Count == 0)
|
||||
{
|
||||
throw new Exception($"待领料工单数量异常");
|
||||
}
|
||||
// 检查库存容量是否足够
|
||||
var inventoryInfo = Context.Queryable<MmInventory>()
|
||||
.Where(it => it.BatchNo == parm.BatchNo)
|
||||
.Where(it => it.MaterialCode == batchTakeMaterialWorkOrderList[0].MaterialCode)
|
||||
.Where(it => it.LocationCode == "YCL001")
|
||||
.First();
|
||||
var inventoryInfo = Context
|
||||
.Queryable<MmInventory>()
|
||||
.Where(it => it.BatchNo == parm.BatchNo)
|
||||
.Where(it => it.MaterialCode == batchTakeMaterialWorkOrderList[0].MaterialCode)
|
||||
.Where(it => it.LocationCode == "YCL001")
|
||||
.First();
|
||||
if (inventoryInfo.CurrentQty < batchTakeMaterialWorkOrderList.Count * parm.Quantity)
|
||||
{
|
||||
throw new Exception($"该批次库存数不足,目前库存数{inventoryInfo.CurrentQty},需要{batchTakeMaterialWorkOrderList.Count * parm.Quantity}");
|
||||
throw new Exception(
|
||||
$"该批次库存数不足,目前库存数{inventoryInfo.CurrentQty},需要{batchTakeMaterialWorkOrderList.Count * parm.Quantity}"
|
||||
);
|
||||
}
|
||||
|
||||
foreach (var workorderInfo in batchTakeMaterialWorkOrderList)
|
||||
@@ -584,7 +594,7 @@ namespace DOAN.Service.MES.product
|
||||
Quantity = parm.Quantity,
|
||||
MaterialInventoryId = inventoryInfo.Id,
|
||||
StoveCode = inboundRecordInfo.StoveCode,
|
||||
Operator = parm.Operator
|
||||
Operator = parm.Operator,
|
||||
};
|
||||
bool isOk = TakeMaterial(takeDto);
|
||||
if (isOk)
|
||||
@@ -636,6 +646,23 @@ namespace DOAN.Service.MES.product
|
||||
{
|
||||
throw new ArgumentException("工单不存在", nameof(request.Workorder));
|
||||
}
|
||||
var materialTakeInfo = Context
|
||||
.Queryable<MmRecordOutbound>()
|
||||
.Where(sub => sub.Workorder == request.Workorder)
|
||||
.Where(sub => sub.TransactionType == "领料出库")
|
||||
.Where(sub => sub.Remarks != "已撤销" || sub.Remarks == null)
|
||||
.First();
|
||||
if (materialTakeInfo == null)
|
||||
{
|
||||
throw new Exception("该工单还未领料");
|
||||
}
|
||||
if (
|
||||
workorderInfo.RouteCode != "10"
|
||||
&& Math.Abs(materialTakeInfo.Quantity) < request.Quantity
|
||||
)
|
||||
{
|
||||
throw new Exception("该工单成品入库数大于领料数");
|
||||
}
|
||||
ReportFlowService _reportFlowService = new ReportFlowService();
|
||||
string workorder = request.Workorder;
|
||||
int processId = 70;
|
||||
@@ -736,6 +763,5 @@ namespace DOAN.Service.MES.product
|
||||
throw new Exception(ex.Message);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user