仓库-出库单,出库记录,批量查看,成品库等功能优化调整,出库逻辑调整
This commit is contained in:
@@ -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 "经检查,此批次号不在出库单计划中!";
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user