先进先出

This commit is contained in:
qianhao.xu
2024-04-14 11:16:19 +08:00
parent 910a82a747
commit 4b053452d0
6 changed files with 154 additions and 76 deletions

View File

@@ -26,7 +26,7 @@ namespace ZR.Service.mes.wms
[AppService(ServiceType = typeof(IWmOutOrderService), ServiceLifetime = LifeTime.Transient)]
public class WmOutOrderService : BaseService<WmOutOrder>, IWmOutOrderService
{
/// <summary>
/// 查询出货单(物料+客户)列表
@@ -38,9 +38,9 @@ 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.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)
.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)
;
var response = Queryable()
.Where(predicate.ToExpression())
@@ -147,11 +147,11 @@ namespace ZR.Service.mes.wms
/// </summary>
/// <param name="primarys"></param>
/// <returns></returns>
public int Delete_fk_matrial(string[] primarys)
public int Delete_fk_matrial(string[] primarys)
{
if(primarys.Count()>0)
if (primarys.Count() > 0)
{
for(int i = 0; i < primarys.Length; i++)
for (int i = 0; i < primarys.Length; i++)
{
Context.Deleteable<WmMaterialOutorder>().Where(it => it.FkOutorderId == primarys[i]).ExecuteCommand();
}
@@ -223,7 +223,7 @@ namespace ZR.Service.mes.wms
List<WmMaterial> materialList = Context.Queryable<WmMaterial>()
.Where(predicate.ToExpression())
.OrderByDescending(it => it.CreatedTime)
.ToPageList(parm.PageNum, parm.PageSize, ref total);
@@ -251,13 +251,13 @@ namespace ZR.Service.mes.wms
material_num = material_num + (int)product.GoodsNumLogic;
}
}
if(material_num>0)
if (material_num > 0)
{
wmMaterialQuery_Stock_item.stockQuantity = material_num;
material_stockQuantity_list.Add(wmMaterialQuery_Stock_item);
}
}
@@ -276,18 +276,18 @@ namespace ZR.Service.mes.wms
public List<WmMaterialQuery_print> Queryoutoder_matrials(string shipment_num)
{
List<WmMaterialQuery_print> stockList = Context.Queryable<WmMaterialOutorder>()
.LeftJoin<WmMaterial>((mo, m) => mo.FkMaterialId == m.Id)
.Where(mo => mo.FkOutorderId == shipment_num)
.Select((mo, m) => new WmMaterialQuery_print()
{
//物料号
Partnumber = m.Partnumber,
// 描述
ProductName = m.ProductName,
//需求零件数
RequireOutNum = mo.OuthouseNum
}).ToList();
List<WmMaterialQuery_print> stockList = Context.Queryable<WmMaterialOutorder>()
.LeftJoin<WmMaterial>((mo, m) => mo.FkMaterialId == m.Id)
.Where(mo => mo.FkOutorderId == shipment_num)
.Select((mo, m) => new WmMaterialQuery_print()
{
//物料号
Partnumber = m.Partnumber,
// 描述
ProductName = m.ProductName,
//需求零件数
RequireOutNum = mo.OuthouseNum
}).ToList();
if (stockList != null && stockList.Count > 0)
@@ -305,16 +305,16 @@ namespace ZR.Service.mes.wms
stock.ItemNum = num ?? 0;
// 需求箱数
List<WmGoodsNowProduction> list= Context.Queryable<WmGoodsNowProduction>()
.Where(it => it.Partnumber == stock.Partnumber).OrderByDescending(it=>it.PackageCodeClient).ToList();
List<WmGoodsNowProduction> list = Context.Queryable<WmGoodsNowProduction>()
.Where(it => it.Partnumber == stock.Partnumber).OrderByDescending(it => it.PackageCodeClient).ToList();
int sum = 0;
foreach (var item in list)
{
sum = sum + item.GoodsNumLogic??0;
if(sum>= stock.RequireOutNum)
sum = sum + item.GoodsNumLogic ?? 0;
if (sum >= stock.RequireOutNum)
{
stock.Require_pack_num=list.IndexOf(item)+1;
stock.Require_pack_num = list.IndexOf(item) + 1;
break;
}
@@ -358,7 +358,7 @@ namespace ZR.Service.mes.wms
.Where(it => it.Partnumber == partnumber)
.OrderBy(it => it.PackageCodeClient)
.ToList();
// 判断要出多少批次的货
List<WmOutOrderPlan> wmOutOrderPlans = new List<WmOutOrderPlan>();
// 当前累计批次货物总数
@@ -377,6 +377,7 @@ namespace ZR.Service.mes.wms
// 获得批次的总零件数
orderPlan.PartnumberNum = witem.GoodsNumLogic;
orderPlan.RequireNum = require_num;
orderPlan.ReceivedNum = 0;
orderPlan.Patchtime = Resolution_bath(witem.PackageCodeOriginal);
wmOutOrderPlans.Add(orderPlan);
// 实际值计算
@@ -387,7 +388,7 @@ namespace ZR.Service.mes.wms
if (wmOutOrderPlans.Count > 0)
{
// 根据批次号下划线前进行聚合
List < WmOutOrderPlan > material_plan_item = wmOutOrderPlans.GroupBy(it => it.Patchcode_short).Select(g => new
List<WmOutOrderPlan> material_plan_item = wmOutOrderPlans.GroupBy(it => it.Patchcode_short).Select(g => new
WmOutOrderPlan
{
FkOutOrderId = g.Max(p => p.FkOutOrderId),
@@ -396,14 +397,15 @@ namespace ZR.Service.mes.wms
WarehouseCode = g.Max(p => p.WarehouseCode),
MaterialCode = g.Max(p => p.MaterialCode),
PackageNum = g.Count(),
PartnumberNum = g.Sum(p=>p.PartnumberNum),
PartnumberNum = g.Sum(p => p.PartnumberNum),
RequireNum = g.Max(p => p.RequireNum),
ReceivedNum = 0,
Patchtime = g.Max(p => p.Patchtime),
}).ToList();
planList=planList.Concat(material_plan_item).ToList();
planList = planList.Concat(material_plan_item).ToList();
}
}
}
@@ -413,14 +415,14 @@ namespace ZR.Service.mes.wms
{
witem.Id = count;
witem.Outorder = count;
count++;
witem.Inventory_pack_num = Context.Queryable<WmGoodsNowProduction>()
.Where(it=>it.PackageCodeClient.Contains(witem.Patchcode))
.Where(it => it.PackageCodeClient.Contains(witem.Patchcode))
.Count();
witem.Inventory_num = Context.Queryable<WmGoodsNowProduction>()
.Where(it => it.PackageCodeClient.Contains( witem.Patchcode))
.Sum(it=>it.GoodsNumLogic)??0;
.Where(it => it.PackageCodeClient.Contains(witem.Patchcode))
.Sum(it => it.GoodsNumLogic) ?? 0;
}
@@ -444,36 +446,79 @@ namespace ZR.Service.mes.wms
{
foreach (var item in doMaterialOut.PatchCode)
{
UseTran2(() =>
//TODO 保证 同一出货单下 同一物料下最早批次
// 取出同一出货单下 同一物料下 未满箱的最早批次
WmOutOrderPlan plan_item =Context.Queryable<WmOutOrderPlan>()
.Where(it => it.FkOutOrderId == shipnumber)
.Where(it => it.Patchcode == item).First();
var plan_earliest = Context.Queryable<WmOutOrderPlan>()
.Where(it => it.FkOutOrderId == shipnumber)
.Where(it=>it.MaterialCode== plan_item.MaterialCode)
.Where(it=>it.PackageNum>it.ReceivedPackNum)
.OrderBy(it=>it.Outorder)
.First();
//已经出库完成,没有可以出库的了
if(plan_earliest != null)
{
return (100, 100);
}
if (plan_earliest.Id == plan_earliest.Id)
{
WmGoodsOutRecord record = new WmGoodsOutRecord();
record.Id = SnowFlakeSingle.Instance.NextId().ToString();
WmGoodsNowProduction nowProduction = Context.Queryable<WmGoodsNowProduction>()
.Where(it => it.PackageCodeClient == item).First();
if (nowProduction != null)
// TODO 每次出库要出库计划累加
Context.Updateable<WmOutOrderPlan>()
.SetColumns(it => it.ReceivedPackNum == it.ReceivedPackNum + 1)
.Where(it => it.FkOutOrderId == shipnumber)
.Where(it => it.Patchcode == item)
.ExecuteCommand();
UseTran2(() =>
{
record.FkNowProductionId = nowProduction.Id;
record.PackageCodeClient = nowProduction.PackageCodeClient;
record.PackageCode = nowProduction.PackageCode;
record.PackageCodeOriginal = nowProduction.PackageCodeOriginal;
record.LocationCode = nowProduction.LocationCode;
record.Partnumber = nowProduction.Partnumber;
record.GoodsNumLogic = nowProduction.GoodsNumLogic;
record.GoodsNumAction = nowProduction.GoodsNumAction;
record.EntryWarehouseTime = nowProduction.EntryWarehouseTime;
record.OutTime = DateTime.Now;
record.CreatedTime = DateTime.Now;
record.CreatedBy = Createby;
record.FkOutOrderId = shipnumber;
sum_insert = Context.Insertable(record).ExecuteCommand();
sum_delete += Context.Deleteable<WmGoodsNowProduction>()
.Where(it => it.PackageCodeClient == item)
.ExecuteCommand();
}
WmGoodsOutRecord record = new WmGoodsOutRecord();
record.Id = SnowFlakeSingle.Instance.NextId().ToString();
WmGoodsNowProduction nowProduction = Context.Queryable<WmGoodsNowProduction>()
.Where(it => it.PackageCodeClient == item).First();
if (nowProduction != null)
{
record.FkNowProductionId = nowProduction.Id;
record.PackageCodeClient = nowProduction.PackageCodeClient;
record.PackageCode = nowProduction.PackageCode;
record.PackageCodeOriginal = nowProduction.PackageCodeOriginal;
record.LocationCode = nowProduction.LocationCode;
record.Partnumber = nowProduction.Partnumber;
record.GoodsNumLogic = nowProduction.GoodsNumLogic;
record.GoodsNumAction = nowProduction.GoodsNumAction;
record.EntryWarehouseTime = nowProduction.EntryWarehouseTime;
record.OutTime = DateTime.Now;
record.CreatedTime = DateTime.Now;
record.CreatedBy = Createby;
record.FkOutOrderId = shipnumber;
sum_insert = Context.Insertable(record).ExecuteCommand();
sum_delete += Context.Deleteable<WmGoodsNowProduction>()
.Where(it => it.PackageCodeClient == item)
.ExecuteCommand();
}
});
}
else
{
// 不在最早批次内
return (200, 200);
}
});
}
}
@@ -517,7 +562,7 @@ namespace ZR.Service.mes.wms
/// <param name="production_packcode"></param>
/// <param name="shipment_num"></param>
/// <returns></returns>
public string CheckProductionOut(string production_packcode, string shipment_num)
public string CheckProductionOut(string parnumber, string production_packcode, string shipment_num)
{
try
{
@@ -540,13 +585,19 @@ namespace ZR.Service.mes.wms
{
return "标签解析异常!请检查标签";
}
// 3.判断是否已入库
bool isExistedWarehouse = Context.Queryable<WmGoodsNowProduction>().Where(it => it.PackageCodeClient == resultionPackage.PatchCode).Any();
if (!isExistedWarehouse)
//3 判断箱子是否配置零件号
if (parnumber != resultionPackage.PartNumner)
{
return "该箱号未入库!请先入库";
return "此箱子不在选择的物料号";
}
// 3.判断是否已入库
//bool isExistedWarehouse = Context.Queryable<WmGoodsNowProduction>().Where(it => it.PackageCodeClient == resultionPackage.PatchCode).Any();
//if (!isExistedWarehouse)
//{
// return "该箱号未入库!请先入库";
//}
// 4.获取出库单号对应的出库计划
List<WmOutOrderPlan> orderPlans = Generate_outorderplan(shipment_num);
// 5.配对是否符合出库条件
@@ -565,7 +616,7 @@ namespace ZR.Service.mes.wms
{
return "此箱标签存在异常不可出库!";
}
}
@@ -577,7 +628,15 @@ namespace ZR.Service.mes.wms
/// <exception cref="NotImplementedException"></exception>
public int PersistenceOutorderplan(string shipment_num)
{
throw new NotImplementedException();
List<WmOutOrderPlan> orderPlans = Generate_outorderplan(shipment_num);
var x = Context.Storageable(orderPlans)
.WhereColumns(it => it.FkOutOrderId)
.WhereColumns(it => it.MaterialCode)
.ToStorage();
int result = x.AsInsertable.ExecuteCommand(); //执行插入
x.AsUpdateable.ExecuteCommand(); //执行更新 
return result;
}