|
|
@@ -221,7 +221,7 @@ namespace Business.ResourceExamineManagement
|
|
|
/// <param name="DeliverDate">交付日期</param>
|
|
|
/// <param name="seorderentry_id">销售订单子表ID</param>
|
|
|
/// <returns></returns>
|
|
|
- public List<mo_mes_mooccupy> CheckMorder(string itemNumber, decimal Quantity, DateTime DeliverDate, crm_seorderentry seorderentry, mo_ic_item ic_Item, long bang_id)
|
|
|
+ public List<mo_mes_mooccupy> CheckMorder(string itemNumber, decimal Quantity, DateTime DeliverDate, crm_seorderentry seorderentry, mo_ic_item ic_Item, long bang_id, mes_morder mes_morder=null)
|
|
|
{
|
|
|
//获取销售订单信息
|
|
|
//var seorder = await _crm_seorder.FindAsync(x => x.Id == OrderId);
|
|
|
@@ -242,22 +242,34 @@ namespace Business.ResourceExamineManagement
|
|
|
//&& x.fitem_number == ic_Item.number && x.bang_id == bang_id);
|
|
|
|
|
|
var mes_mooccupyList = mo_Mes_Mooccupies.Where(x => x.fitem_number == ic_Item.number);
|
|
|
- DateTime totime = DateTime.Now;
|
|
|
+ DateTime totime = DateTime.Now.Date;
|
|
|
//首先满足需求数量工单其次判断是否满足交付日期、当数量不满足时继续查找最早交付日期订单 工单数量累加。
|
|
|
//当前工单计划日期-1天 小于交付日期 && 计算生产数量-入库数据并且大于需求产品数量。
|
|
|
- var moentrys = mo_Mes_Moentry.Where(s => s.soentry_id == seorderentry.Id);
|
|
|
- //找到当前订单行生成的主工单
|
|
|
- var toMid = moentrys.Select(s => s.moentry_moid).ToList();
|
|
|
- var morderDataList = mo_Mes_Morders.Where(x => x.product_code == itemNumber && x.morder_type == MorderEnum.JhMorder && totime < x.moentry_sys_etime.GetValueOrDefault() && x.moentry_sys_etime.GetValueOrDefault() < DeliverDate &&
|
|
|
- (x.morder_production_number - x.inventory_number - mes_mooccupyList.Where(p => p.moo_moid.GetValueOrDefault() == x.mysql_id)?.Sum(m => m.moo_qty)) > Quantity)
|
|
|
- .OrderByDescending(x => x.planner_end_date).ToList();
|
|
|
-
|
|
|
+ List<mo_mes_morder> morderDataList = new List<mo_mes_morder>();
|
|
|
List<mo_mes_mooccupy> mes_Mooccupies = new List<mo_mes_mooccupy>();
|
|
|
- //当数量或日期不满足的时候,寻找最早日期的工单
|
|
|
- if (morderDataList.Count == 0)
|
|
|
+ if (mes_morder != null)
|
|
|
{
|
|
|
- morderDataList = mo_Mes_Morders.Where(x => x.product_code == itemNumber && (x.morder_type == MorderEnum.JhMorder || toMid.Contains(x.mysql_id)) && totime < x.moentry_sys_etime.GetValueOrDefault() && x.moentry_sys_etime.GetValueOrDefault() < DeliverDate).OrderByDescending(x => x.planner_end_date).ToList();
|
|
|
+ //半成品检查进入
|
|
|
+ //只找父级的子工单
|
|
|
+ morderDataList = mo_Mes_Morders.Where(x => x.product_code == itemNumber && x.parent_id == mes_morder.Id).ToList();
|
|
|
+ //如果当前父级产生的子工单,数量不够时
|
|
|
+ if (morderDataList.Sum(x => x.morder_production_number.GetValueOrDefault()) - morderDataList.Sum(x => x.inventory_number.GetValueOrDefault()) < Quantity)
|
|
|
+ {
|
|
|
+ //再找没有被计划占用的子工单
|
|
|
+ morderDataList.AddRange(mo_Mes_Morders.Where(x => x.product_code == itemNumber && x.parent_id.GetValueOrDefault() == 0 && x.morder_type == MorderEnum.JhMorder && totime < x.moentry_sys_etime.GetValueOrDefault() && x.moentry_sys_etime.GetValueOrDefault() < DeliverDate &&
|
|
|
+ (x.morder_production_number - x.inventory_number - mes_mooccupyList.Where(p => p.moo_moid.GetValueOrDefault() == x.mysql_id)?.Sum(m => m.moo_qty)) > Quantity)
|
|
|
+ .OrderByDescending(x => x.planner_end_date).ToList());
|
|
|
+ }
|
|
|
}
|
|
|
+ else
|
|
|
+ {
|
|
|
+ //成品进入,只找没有父级的工单,并且是计划工单
|
|
|
+ morderDataList = mo_Mes_Morders.Where(x => x.product_code == itemNumber && x.parent_id.GetValueOrDefault() == 0 && x.morder_type == MorderEnum.JhMorder && totime < x.moentry_sys_etime.GetValueOrDefault() && x.moentry_sys_etime.GetValueOrDefault() < DeliverDate &&
|
|
|
+ (x.morder_production_number - x.inventory_number - mes_mooccupyList.Where(p => p.moo_moid.GetValueOrDefault() == x.mysql_id)?.Sum(m => m.moo_qty)) > Quantity)
|
|
|
+ .OrderByDescending(x => x.planner_end_date).ToList();
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
var QuantityNumber = 0.00m;
|
|
|
//存在此数据满足当前BOM交付找到最早日期工单,则返回无需后续继续检查。
|
|
|
foreach (var item in morderDataList)
|
|
|
@@ -270,48 +282,6 @@ namespace Business.ResourceExamineManagement
|
|
|
var Sum = item.morder_production_number.GetValueOrDefault() - item.inventory_number.GetValueOrDefault() - Sumqty.GetValueOrDefault();
|
|
|
if (Sum > 0)
|
|
|
{
|
|
|
- #region 注释
|
|
|
- //if (Sumqty > 0 || item.inventory_number > 0)
|
|
|
- //{
|
|
|
- // ProdExamineParamDto prodExamine = new ProdExamineParamDto()
|
|
|
- // {
|
|
|
- // bom_number = item.bom_number,
|
|
|
- // version = version,
|
|
|
- // packages = (int)(item.inventory_number + Sumqty).GetValueOrDefault(),
|
|
|
- // tenantId = item.tenant_id,
|
|
|
- // factoryId = item.factory_id.GetValueOrDefault()
|
|
|
-
|
|
|
- // };
|
|
|
- // //获取入库和已占用的数据的生产时长
|
|
|
- // var ProductiveDate = _productExamineAppService.ProductiveExamine(prodExamine);
|
|
|
- // var Day = ProductiveDate.Result / (60 * 10);
|
|
|
- // //工单被完全占用结束日期为工单结束时间
|
|
|
- // if (Quantity - (item.morder_production_number - item.inventory_number - Sumqty) == 0)
|
|
|
- // {
|
|
|
-
|
|
|
- // var date = item.moentry_sys_stime.GetValueOrDefault().AddDays((double)Day);
|
|
|
- // var endDate = item.moentry_sys_etime;
|
|
|
- // }
|
|
|
- // //工单未被完成占用计算结束日期
|
|
|
- // else if (item.morder_production_number - item.inventory_number - Sumqty - Quantity > 0)
|
|
|
- // {
|
|
|
- // var date = item.moentry_sys_stime.GetValueOrDefault().AddDays((double)Day);
|
|
|
- // ProdExamineParamDto EndprodExamine = new ProdExamineParamDto()
|
|
|
- // {
|
|
|
- // bom_number = item.bom_number,
|
|
|
- // version = version,
|
|
|
- // packages = (int)Quantity,
|
|
|
- // tenantId = item.tenant_id,
|
|
|
- // factoryId = item.factory_id.GetValueOrDefault()
|
|
|
- // };
|
|
|
- // var EndProductiveDate = _productExamineAppService.ProductiveExamine(EndprodExamine);
|
|
|
- // var EndDay = ProductiveDate.Result / (60 * 10);
|
|
|
- // var endDate = date.AddDays((double)EndDay);
|
|
|
- // }
|
|
|
-
|
|
|
- //}
|
|
|
-
|
|
|
- #endregion
|
|
|
//工单可占用数量-需求数量小于0时 占用工单全部可占用数量
|
|
|
if (Sum - Quantity <= 0)
|
|
|
{
|
|
|
@@ -333,91 +303,12 @@ namespace Business.ResourceExamineManagement
|
|
|
}
|
|
|
|
|
|
}
|
|
|
- #region 注释
|
|
|
- // if (morderDataList.Count > 0)
|
|
|
- // {
|
|
|
- // //存在此数据满足当前BOM交付找到最早日期工单,则返回无需后续继续检查。
|
|
|
- // var morder = morderDataList.OrderByDescending(x => x.planner_end_date);
|
|
|
- // foreach (var item in morder)
|
|
|
- // {
|
|
|
- // var mooccupies = mes_mooccupyList.Where(x => x.moo_moid == item.Id).ToList();
|
|
|
- // if (mooccupies.Count > 0)
|
|
|
- // {
|
|
|
- // var Sumqty = mooccupies.Sum(x => x.moo_qty);
|
|
|
- // //判断此工单剩下数量是否还有
|
|
|
- // if (item.morder_production_number - item.inventory_number - Sumqty > 0)
|
|
|
- // {
|
|
|
- // var Sum = item.morder_production_number - item.inventory_number - Sumqty;
|
|
|
- // //需要数量-(计划数量-入库数量-已占用量)
|
|
|
- // Quantity = Quantity - (item.morder_production_number - item.inventory_number - Sumqty);
|
|
|
- // if (Quantity > 0)
|
|
|
- // {
|
|
|
- // var mes_Mooccupy = GetMooccupies(seorderentry, ic_Item, item, Sum);
|
|
|
- // mes_Mooccupies.Add(mes_Mooccupy);
|
|
|
- // }
|
|
|
- // else
|
|
|
- // {
|
|
|
- // break;
|
|
|
- // }
|
|
|
- // }
|
|
|
- // }
|
|
|
- // }
|
|
|
- // await _mes_mooccupy.InsertMany(mes_Mooccupies);
|
|
|
- // Number = 1;
|
|
|
- // }
|
|
|
- // else
|
|
|
- // {
|
|
|
- // // 寻找最早日期工单 && 计算生产数量-入库数据并且大于需求产品数量后累加直到满足需求产品数量
|
|
|
- // var morderListData = morderList.Where(x => x.planner_end_date.Value.AddDays(-1) < DeliverDate).OrderByDescending(x => x.planner_end_date).ToList();
|
|
|
-
|
|
|
- // decimal? number = Quantity;
|
|
|
- // foreach (var item in morderListData)
|
|
|
- // {
|
|
|
- // //查询出工单已占用总数量
|
|
|
- // var mooccupies = mes_mooccupyList.Where(x => x.moo_moid == item.Id).ToList();
|
|
|
-
|
|
|
- // var Sumqty = mooccupies.Count > 0 ? mooccupies.Sum(x => x.moo_qty) : 0.00m;
|
|
|
- // //判断此工单剩下数量是否还有
|
|
|
- // if (item.morder_production_number - item.inventory_number - Sumqty > 0)
|
|
|
- // {
|
|
|
- // var Sum = item.morder_production_number - item.inventory_number - Sumqty;
|
|
|
- // //需要数量-(计划数量-入库数量-已占用量)
|
|
|
- // Quantity = Quantity - (item.morder_production_number - item.inventory_number - Sumqty);
|
|
|
- // if (Quantity > 0)
|
|
|
- // {
|
|
|
- // var mes_Mooccupy = GetMooccupies(seorderentry, ic_Item, item, Sum);
|
|
|
- // mes_Mooccupies.Add(mes_Mooccupy);
|
|
|
- // }
|
|
|
- // else
|
|
|
- // {
|
|
|
- // break;
|
|
|
- // }
|
|
|
- // }
|
|
|
-
|
|
|
- // //var mes_Mooccupy = GetMooccupies(seorderentry, ic_Item, item, mooccupies);
|
|
|
- // //mes_Mooccupies.Add(mes_Mooccupy);
|
|
|
- // //需求数量-占用量后小于或等于0 停止循环占用工单
|
|
|
- // //if (number - mes_Mooccupy.moo_qty <= 0)
|
|
|
- // //{
|
|
|
- // // break;
|
|
|
- // //}
|
|
|
- // }
|
|
|
- // var morderDatas = morderList.Where(x => x.planner_end_date.Value.AddDays(-1) > DeliverDate &&
|
|
|
- //(x.morder_production_number - x.inventory_number) > Quantity).ToList();
|
|
|
- // if (number > 0)
|
|
|
- // {
|
|
|
- // Number = 3;
|
|
|
- // }
|
|
|
- // if (morderDatas.Count > 0)
|
|
|
- // {
|
|
|
- // Number = 2;
|
|
|
- // }
|
|
|
- // else
|
|
|
- // {
|
|
|
- // Number = 1;
|
|
|
- // }
|
|
|
- // }
|
|
|
- #endregion
|
|
|
+ if (mes_morder != null) {
|
|
|
+ mes_Mooccupies.ForEach(me =>
|
|
|
+ {
|
|
|
+ me.moo_id = mes_morder.Id;
|
|
|
+ });
|
|
|
+ }
|
|
|
//TODO:返回占用数据,外层每个BOM根据占用工单数据判断是否满足。
|
|
|
return mes_Mooccupies.OrderByDescending(s => s.moo_etime).ToList();
|
|
|
}
|