仓库-出库单,出库记录,批量查看,成品库等功能优化调整,出库逻辑调整

This commit is contained in:
2024-04-29 17:00:38 +08:00
parent c99118ea02
commit cffe4b138f
10 changed files with 352 additions and 17 deletions

View File

@@ -39,6 +39,8 @@ namespace ZR.Service.mes.wms
var predicate = Expressionable.Create<WmOutOrder>()
.AndIF(!string.IsNullOrEmpty(parm.ShipmentNum), it => it.ShipmentNum.Contains(parm.ShipmentNum))
.AndIF(!string.IsNullOrEmpty(parm.CustomNo), it => it.CustomNo.Contains(parm.CustomNo))
.AndIF(parm.Type > 0, it => it.Type == parm.Type)
.AndIF(parm.Status > -1, it => it.Status == parm.Status)
.AndIF(parm.Year > 0, it => it.Year == parm.Year)
.AndIF(parm.Week > 0, it => it.Year == parm.Week)
.AndIF(parm.Date > 0, it => it.Year == parm.Date)
@@ -149,7 +151,7 @@ namespace ZR.Service.mes.wms
{
return null;
}
}
/// <summary>
/// 删除出货单关联的物料出货单
@@ -259,11 +261,11 @@ namespace ZR.Service.mes.wms
material_num = material_num + (int)product.GoodsNumLogic;
}
}
wmMaterialQuery_Stock_item.stockQuantity = material_num;
material_stockQuantity_list.Add(wmMaterialQuery_Stock_item);
wmMaterialQuery_Stock_item.stockQuantity = material_num;
material_stockQuantity_list.Add(wmMaterialQuery_Stock_item);
@@ -567,7 +569,7 @@ namespace ZR.Service.mes.wms
// 当前工单出库计划
var exp = Expressionable.Create<WmOutOrderPlan>()
.And(it => it.FkOutOrderId == shipment_num)
.AndIF(!string.IsNullOrEmpty(partnumber),it => it.MaterialCode == partnumber)
.AndIF(!string.IsNullOrEmpty(partnumber), it => it.MaterialCode == partnumber)
.ToExpression();
List<WmOutOrderPlan> wmOutOrderPlan = Context.Queryable<WmOutOrderPlan>()
.Where(exp)
@@ -590,6 +592,7 @@ namespace ZR.Service.mes.wms
// 出库记录
List<WmGoodsOutRecord> outPackageList = Context.Queryable<WmGoodsOutRecord>()
.Where(it => it.PackageCodeClient.Contains(item.Patchcode))
.Where(it => it.FkOutOrderId == shipment_num)
.ToList();
int outPackageNum = 0;
int outPartnumberNum = 0;
@@ -616,7 +619,7 @@ namespace ZR.Service.mes.wms
OutPackageNum = outPackageNum,
OutPartnumberNum = outPartnumberNum,
IsError = (nowPartnumberNum + outPartnumberNum) != item.PartnumberNum,
IsOver = outPartnumberNum == item.PartnumberNum
IsOver = outPartnumberNum > item.PartnumberNum
};
result.Add(newItem);
}
@@ -660,7 +663,7 @@ namespace ZR.Service.mes.wms
//3 判断箱子是否配置零件号
if (parnumber != resultionPackage.PartNumner)
{
return "此箱子不选择的物料号";
return "此箱子不选择的物料号";
}
// 3.1判断是否已入库
@@ -683,8 +686,9 @@ namespace ZR.Service.mes.wms
//}
// 5. 确保出最早批次
string short_path = resultionPackage.PatchCode.Split('_')[0];
WmOutOrderPlan plan_item = Context.Queryable<WmOutOrderPlan>()
// 严格规则
return CheckRuleJudgmentFirstInFirstOut(shipment_num, short_path);
/*WmOutOrderPlan plan_item = Context.Queryable<WmOutOrderPlan>()
.Where(it => it.FkOutOrderId == shipment_num)
.Where(it => it.Patchcode == short_path)
.OrderBy(it => it.Outorder)
@@ -692,18 +696,28 @@ namespace ZR.Service.mes.wms
if (plan_item != null)
{
// 查看此批次号在此工单下已出库箱子数量
int patchInNum = Context.Queryable<WmGoodsOutRecord>()
.Where(it => it.PackageCodeClient.Contains(short_path))
.Where(it => it.FkOutOrderId == shipment_num)
.Count();
var plan_earliest = Context.Queryable<WmOutOrderPlan>()
.Where(it => it.FkOutOrderId == shipment_num)
.Where(it => it.MaterialCode == plan_item.MaterialCode)
.Where(it => it.PackageNum > it.ReceivedPackNum)
.Where(it => it.PackageNum > patchInNum)
.OrderBy(it => it.Outorder)
.First();
//已经出库完成,没有可以出库的了
if (plan_earliest == null)
{
return "此物料已经全部出库完成,无法继续出库";
return "此物料在计划中已经全部出库完成,无法继续出库";
}
if (plan_earliest.Id == plan_item.Id)
// 批次号是最早批次
*//*if (plan_earliest.Id == plan_item.Id)
{
return "ok";
}*//*
if (plan_earliest.Patchcode == short_path)
{
return "ok";
}
@@ -711,7 +725,7 @@ namespace ZR.Service.mes.wms
{
return "不是此物料最早批次,无法出库";
}
}
}*/
// 6 .还差一个 数量超过要出库的箱子
return "此箱标签不可出库,批次号不在出库单计划内!请检查出库单计划!";
}
@@ -743,6 +757,80 @@ namespace ZR.Service.mes.wms
return result;
}
/// <summary>
/// 出库单先进先出规则判断(严格复杂版)
/// </summary>
/// <param name="shipment_num">工单号</param>
/// <param name="shortPackageCode">短批次号</param>
/// <returns> "ok" 代表通过,其余返回错误提示</returns>
/// <exception cref="NotImplementedException"></exception>
public string CheckRuleJudgmentFirstInFirstOut(string shipment_num, string shortPackageCode)
{
// 1.检查是否有记录
var exp1 = Expressionable.Create<WmOutOrderPlan>()
.And(it => it.FkOutOrderId == shipment_num)
.And(it => it.Patchcode == shortPackageCode)
.ToExpression();
bool hasRecord = Context.Queryable<WmOutOrderPlan>()
.Where(exp1)
.Any();
if (!hasRecord)
{
return "此批次号不在出库单计划中!";
}
// 1.取出出库单计划
List<WmOutOrderPlan> plans = Context.Queryable<WmOutOrderPlan>()
.Where(it => it.FkOutOrderId == shipment_num)
.OrderBy(it => it.Outorder)
.ToList();
foreach (WmOutOrderPlan plan in plans)
{
// 2.此出库单下的批次号的已出库记录
var exp2 = Expressionable.Create<WmGoodsOutRecord>()
.And(it => it.PackageCodeClient.Contains(plan.Patchcode))
.And(it => it.FkOutOrderId == shipment_num)
.ToExpression();
List<WmGoodsOutRecord> outPackageList = Context.Queryable<WmGoodsOutRecord>()
.Where(exp2)
.ToList();
int outPackageNum = 0;
int outPartnumberNum = 0;
foreach (WmGoodsOutRecord outItem in outPackageList)
{
outPackageNum += 1;
outPartnumberNum += (int)outItem.GoodsNumAction;
}
// 按顺序检查是否出完
if (plan.Patchcode != shortPackageCode)
{
// 检查此批次是否出完
if (outPartnumberNum >= plan.RequireNum)
{
// 出完了
continue;
}
else
{
return "不是出库单计划中此物料的最早批次,无法出库! 计划中批次:" + plan.Patchcode + "未出完!";
}
}
else
{
// 检查此批次是否出完
if (outPartnumberNum < plan.RequireNum)
{
return "ok";
}
else
{
// 出完了
return "此批次已在出库计划中出完! 当前已出库:" + outPartnumberNum + "个零件!";
}
}
}
return "经检查,此批次号不在出库单计划中!";
}
}
}