|
|
@@ -170,7 +170,7 @@ namespace Business.ResourceExamineManagement
|
|
|
/// <param name="DeliverDate">交付日期</param>
|
|
|
/// <param name="seorderentry_id">销售订单子表ID</param>
|
|
|
/// <returns></returns>
|
|
|
- public async Task<int> CheckMorder(string bomNumber, decimal? Quantity, DateTime DeliverDate, crm_seorderentry seorderentry, ic_item ic_Item)
|
|
|
+ public async Task<List<mes_mooccupy>> CheckMorder(string bomNumber, decimal? Quantity, DateTime DeliverDate, crm_seorderentry seorderentry, ic_item ic_Item)
|
|
|
{
|
|
|
if (string.IsNullOrEmpty(bomNumber) || Quantity == null)
|
|
|
{
|
|
|
@@ -190,57 +190,134 @@ namespace Business.ResourceExamineManagement
|
|
|
//var ic_item = _ic_item.GetManyByCondition(x => x.number == seorderentry.item_number && x.tenant_id == seorderentry.tenant_id).Result.FirstOrDefault();
|
|
|
|
|
|
//工单已被占用后要与占用表关联查询...减去占用量后 剩下生产数量可供下个销售工单使用。
|
|
|
- var mes_mooccupyList = await _mes_mooccupy.GetManyByCondition(x => x.moo_state == 1 && !x.IsDeleted && x.tenant_id == seorderentry.tenant_id);
|
|
|
+ var mes_mooccupyList = await _mes_mooccupy.GetManyByCondition(x => x.moo_state == 1 && !x.IsDeleted && x.tenant_id == seorderentry.tenant_id
|
|
|
+ && x.fitem_number == seorderentry.item_number);
|
|
|
|
|
|
//首先满足需求数量工单其次判断是否满足交付日期、当数量不满足时继续查找最早交付日期订单 工单数量累加。
|
|
|
//当前工单计划日期-1天 小于交付日期 && 计算生产数量-入库数据并且大于需求产品数量。
|
|
|
var morderDataList = morderList.Where(x => x.planner_end_date.Value.AddDays(-1) < DeliverDate &&
|
|
|
- (x.morder_production_number - x.inventory_number) > Quantity).ToList();
|
|
|
-
|
|
|
-
|
|
|
- if (morderDataList.Count > 0)
|
|
|
+ (x.morder_production_number - x.inventory_number) > Quantity).OrderByDescending(x => x.planner_end_date).ToList();
|
|
|
+ List<mes_mooccupy> mes_Mooccupies = new List<mes_mooccupy>();
|
|
|
+ //当数量或日期不满足的时候,寻找最早日期的工单
|
|
|
+ if (morderDataList.Count == 0)
|
|
|
{
|
|
|
- //存在此数据满足当前BOM交付找到最早日期工单,则返回无需后续继续检查。
|
|
|
- var morder = morderDataList.OrderByDescending(x => x.planner_end_date).FirstOrDefault();
|
|
|
- var mooccupies = mes_mooccupyList.Where(x => x.moo_moid == morder.Id).ToList();
|
|
|
- var mes_Mooccupy = GetMooccupies(seorderentry, ic_Item, morder, mooccupies);
|
|
|
- await _mes_mooccupy.InsertOne(mes_Mooccupy);
|
|
|
- Number = 1;
|
|
|
+ morderDataList = morderList.Where(x => x.planner_end_date.Value.AddDays(-1) < DeliverDate).OrderByDescending(x => x.planner_end_date).ToList();
|
|
|
}
|
|
|
- else
|
|
|
+ //存在此数据满足当前BOM交付找到最早日期工单,则返回无需后续继续检查。
|
|
|
+ foreach (var item in morderDataList)
|
|
|
{
|
|
|
- // 寻找最早日期工单 && 计算生产数量-入库数据并且大于需求产品数量后累加直到满足需求产品数量
|
|
|
- var morderListData = morderList.Where(x => x.planner_end_date.Value.AddDays(-1) < DeliverDate).OrderByDescending(x => x.planner_end_date).ToList();
|
|
|
- List<mes_mooccupy> mes_Mooccupies = new List<mes_mooccupy>();
|
|
|
- decimal? number = Quantity;
|
|
|
- foreach (var item in morderListData)
|
|
|
+ //查询当前工单是否存在占用情况
|
|
|
+ var mooccupies = mes_mooccupyList.Where(x => x.moo_moid == item.Id).ToList();
|
|
|
+ if (mooccupies.Count > 0)
|
|
|
{
|
|
|
- //查询出工单已占用总数量
|
|
|
- var mooccupies = mes_mooccupyList.Where(x => x.moo_moid == item.Id).ToList();
|
|
|
- var mes_Mooccupy = GetMooccupies(seorderentry, ic_Item, item, mooccupies);
|
|
|
- mes_Mooccupies.Add(mes_Mooccupy);
|
|
|
- //需求数量-占用量后小于或等于0 停止循环占用工单
|
|
|
- if (number - mes_Mooccupy.moo_qty <= 0)
|
|
|
+ var Sumqty = mooccupies.Count > 0 ? mooccupies.Sum(x => x.moo_qty) : 0.00m;
|
|
|
+ //判断此工单剩余可占用数量
|
|
|
+ if (item.morder_production_number - item.inventory_number - Sumqty > 0)
|
|
|
{
|
|
|
- break;
|
|
|
+ var Sum = item.morder_production_number - item.inventory_number - Sumqty;
|
|
|
+ //剩余需要数量= 需要数量 -(计划数量 - 入库数量 - 已占用量)
|
|
|
+ Quantity = Quantity - (item.morder_production_number - item.inventory_number - Sumqty);
|
|
|
+ //当剩余需要数量大于0则继续寻找可占用工单,已满足需要数量停止循环查找
|
|
|
+ if (Quantity > 0)
|
|
|
+ {
|
|
|
+ var mes_Mooccupy = GetMooccupies(seorderentry, ic_Item, item, Sum);
|
|
|
+ mes_Mooccupies.Add(mes_Mooccupy);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ 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;
|
|
|
- }
|
|
|
}
|
|
|
- return Number;
|
|
|
+ await _mes_mooccupy.InsertMany(mes_Mooccupies);
|
|
|
+ #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
|
|
|
+ //TODO:返回占用数据,外层每个BOM根据占用工单数据判断是否满足。
|
|
|
+ return mes_Mooccupies;
|
|
|
}
|
|
|
/// <summary>
|
|
|
/// 拼接工单占用表
|
|
|
@@ -250,13 +327,8 @@ namespace Business.ResourceExamineManagement
|
|
|
/// <param name="item">工单表</param>
|
|
|
/// <param name="mes_mooccupy">占用工单表</param>
|
|
|
/// <returns></returns>
|
|
|
- public mes_mooccupy GetMooccupies(crm_seorderentry seorderentry, ic_item ic_item, mes_morder item, List<mes_mooccupy> mes_mooccupy)
|
|
|
+ public mes_mooccupy GetMooccupies(crm_seorderentry seorderentry, ic_item ic_item, mes_morder item, decimal? number)
|
|
|
{
|
|
|
- decimal? Sumqty = 0;
|
|
|
- if (mes_mooccupy.Count > 0)
|
|
|
- {
|
|
|
- Sumqty = mes_mooccupy.Sum(x => x.moo_qty);
|
|
|
- }
|
|
|
//生成mes_mooccupy工单占用表数据,代表多个工单被某个销售订单已占用。
|
|
|
mes_mooccupy mes_Mooccupy = new mes_mooccupy();
|
|
|
mes_Mooccupy.GenerateNewId();
|
|
|
@@ -270,16 +342,16 @@ namespace Business.ResourceExamineManagement
|
|
|
mes_Mooccupy.moo_moid = item.Id;
|
|
|
mes_Mooccupy.moo_mo = item.morder_no;
|
|
|
//占用量=生产计划数量-入库数量-已被占用数量
|
|
|
- mes_Mooccupy.moo_qty = item.morder_production_number - item.inventory_number - Sumqty;
|
|
|
- mes_Mooccupy.moo_stime = DateTime.Now.Date;
|
|
|
- mes_Mooccupy.moo_etime = DateTime.Now;//日期来源需确定
|
|
|
+ mes_Mooccupy.moo_qty = number;
|
|
|
+ mes_Mooccupy.moo_stime = item.moentry_sys_stime;
|
|
|
+ mes_Mooccupy.moo_etime = item.moentry_sys_etime;
|
|
|
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 = seorderentry.tenant_id;//取销售子表企业ID
|
|
|
mes_Mooccupy.factory_id = seorderentry.factory_id;
|
|
|
- mes_Mooccupy.factory_id = seorderentry.factory_id;
|
|
|
+ mes_Mooccupy.org_id = seorderentry.org_id;
|
|
|
return mes_Mooccupy;
|
|
|
}
|
|
|
}
|