|
|
@@ -100,6 +100,10 @@ namespace Business.ResourceExamineManagement
|
|
|
/// 生产工单主表
|
|
|
/// </summary>
|
|
|
private readonly IMongoDB<mes_morder> _mes_morder;
|
|
|
+ /// <summary>
|
|
|
+ /// 在制工单占用记录表
|
|
|
+ /// </summary>
|
|
|
+ private readonly IMongoDB<mes_mooccupy> _mes_mooccupy;
|
|
|
#endregion
|
|
|
|
|
|
/// <summary>
|
|
|
@@ -117,6 +121,7 @@ namespace Business.ResourceExamineManagement
|
|
|
IMongoDB<ic_bom_child> ic_bom_child,
|
|
|
IMongoDB<ic_item_stock> ic_item_stock,
|
|
|
IMongoDB<mes_morder> mes_morder,
|
|
|
+ IMongoDB<mes_mooccupy> mes_mooccupy,
|
|
|
IBasicRepository<ic_item, long> mysql_ic_item,
|
|
|
IBasicRepository<ic_bom, long> mysql_ic_bom,
|
|
|
IBasicRepository<ic_bom_child, long> mysql_ic_bom_child
|
|
|
@@ -361,6 +366,11 @@ namespace Business.ResourceExamineManagement
|
|
|
var morderList = await _mes_morder.GetManyByCondition(filter);
|
|
|
//首先满足需求数量工单其次判断是否满足交付日期、当数量不满足时继续查找最早交付日期订单 工单数量累加。
|
|
|
|
|
|
+ //工单已被占用后要与占用表关联查询...减去占用量后 剩下生产数量可供下个销售工单使用。
|
|
|
+ Expression<Func<mes_mooccupy, bool>> mooccupyfilter = x => x.moo_state == 1 && x.IsDeleted == false;
|
|
|
+ var mes_mooccupyList = await _mes_mooccupy.GetManyByCondition(mooccupyfilter);
|
|
|
+ //morderList = morderList.Where(x => x.Id.IsIn(mes_mooccupyList.Select(p => p.moo_moid))).ToList();
|
|
|
+
|
|
|
//当前工单计划日期-1天 小于交付日期 && 计算生产数量-入库数据并且大于需求产品数量。
|
|
|
var morderDataList = morderList.Where(x => x.planner_end_date.Value.AddDays(-1) < DeliverDate &&
|
|
|
(x.morder_production_number - x.inventory_number) > Quantity).ToList();
|
|
|
@@ -368,7 +378,28 @@ namespace Business.ResourceExamineManagement
|
|
|
{
|
|
|
//存在此数据满足当前BOM交付找到最早日期工单,则返回无需后续继续检查。
|
|
|
var morder = morderDataList.OrderByDescending(x => x.planner_end_date).FirstOrDefault();
|
|
|
+
|
|
|
//生成mes_mooccupy工单占用表数据,代表此工单被某个销售订单已占用。
|
|
|
+ mes_mooccupy mes_Mooccupy = new mes_mooccupy();
|
|
|
+ mes_Mooccupy.GenerateNewId();
|
|
|
+ mes_Mooccupy.moo_id_type = "分配";
|
|
|
+ mes_Mooccupy.moo_id_billid = 0;//销售订单ID
|
|
|
+ mes_Mooccupy.fbill_no = "0";//销售订单号
|
|
|
+ mes_Mooccupy.fentry_id = 0;//销售订单行
|
|
|
+ mes_Mooccupy.fitem_name = string.Empty;//物料名称
|
|
|
+ mes_Mooccupy.fitem_number = bomNumber;
|
|
|
+ mes_Mooccupy.fmodel = string.Empty;//规格型号
|
|
|
+ mes_Mooccupy.moo_moid = morder.Id;
|
|
|
+ mes_Mooccupy.moo_mo = morder.morder_no;
|
|
|
+ mes_Mooccupy.moo_qty = Quantity;
|
|
|
+ mes_Mooccupy.moo_stime = DateTime.Now;
|
|
|
+ mes_Mooccupy.moo_etime = DateTime.Now;//日期来源需确定
|
|
|
+ mes_Mooccupy.moo_state = 1;
|
|
|
+ mes_Mooccupy.moo_cbr = string.Empty;
|
|
|
+ //mes_Mooccupy.moo_ctime = ;
|
|
|
+ mes_Mooccupy.moo_creason = string.Empty;
|
|
|
+ mes_Mooccupy.tenant_id = 0;
|
|
|
+ await _mes_mooccupy.InsertOne(mes_Mooccupy);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
@@ -380,16 +411,21 @@ namespace Business.ResourceExamineManagement
|
|
|
throw new NotImplementedException("无可用在制工单!");
|
|
|
}
|
|
|
List<mes_morder> mes_Morders = new List<mes_morder>();
|
|
|
+ List<mes_mooccupy> mes_Mooccupies = new List<mes_mooccupy>();
|
|
|
decimal? number = Quantity;
|
|
|
foreach (var item in morderListData)
|
|
|
{
|
|
|
- number = number - (item.morder_production_number - item.inventory_number);
|
|
|
- if (number < 0)
|
|
|
+ //查询出工单已占用总数量
|
|
|
+ var mes_mooccupy = mes_mooccupyList.Where(x => x.moo_moid == item.Id).ToList();
|
|
|
+ // 需要数量-(生产计划数量-入库数量-已被占用数量)
|
|
|
+ number = number - (item.morder_production_number - item.inventory_number - mes_mooccupy.Sum(x => x.moo_qty));
|
|
|
+ if (number <= 0)
|
|
|
{
|
|
|
mes_Morders.Add(item);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
+ mes_Morders.Add(item);
|
|
|
break;
|
|
|
}
|
|
|
}
|