|
|
@@ -106,6 +106,7 @@ namespace Business.ResourceExamineManagement
|
|
|
|
|
|
level1Dto.needCount = level1Dto.qty * count;
|
|
|
level1Dto.lack_qty = level1Dto.needCount - level1Dto.sqty;
|
|
|
+ level1Dto.self_lack_qty = level1Dto.lack_qty;
|
|
|
//平铺需要数量
|
|
|
CaclMaterialShortage(returnlist);
|
|
|
|
|
|
@@ -119,11 +120,32 @@ namespace Business.ResourceExamineManagement
|
|
|
if (mooccupylist.Any())
|
|
|
{
|
|
|
mooccupyAllList.AddRange(mooccupylist);
|
|
|
+ //在制占用明细
|
|
|
+ level1Dto.mo_occupy_list = new List<mo_occupy>();
|
|
|
+ mooccupylist.ForEach(s =>
|
|
|
+ {
|
|
|
+ mo_occupy mooc = new mo_occupy();
|
|
|
+ mooc.moo_mo = s.moo_mo;
|
|
|
+ mooc.moo_stime = s.moo_ctime;
|
|
|
+ mooc.moo_etime = s.moo_etime;
|
|
|
+ mooc.moo_qty = s.moo_qty;
|
|
|
+ level1Dto.mo_occupy_list.Add(mooc);
|
|
|
+ });
|
|
|
}
|
|
|
-
|
|
|
+ //直接占用库存,缺料就生成采购
|
|
|
+ mo_ic_item_stockoccupy itemStockoccupyDto = new mo_ic_item_stockoccupy();
|
|
|
+ itemStockoccupyDto.bang_id = bangid;
|
|
|
+ itemStockoccupyDto.icitem_id = level1Dto.item_id;
|
|
|
+ itemStockoccupyDto.item_no = level1Dto.num;
|
|
|
+ itemStockoccupyDto.orderentry_id = sentrys.Id;
|
|
|
+
|
|
|
decimal moo_qty = mooccupylist.Sum(s => s.moo_qty.GetValueOrDefault());
|
|
|
level1Dto.mo_qty = moo_qty;
|
|
|
-
|
|
|
+ if (moo_qty != 0)
|
|
|
+ {
|
|
|
+ itemStockoccupyDto.quantity = moo_qty;
|
|
|
+ sklist.Add(itemStockoccupyDto);
|
|
|
+ }
|
|
|
if (moo_qty == level1Dto.lack_qty)
|
|
|
{
|
|
|
//在制完全足够
|
|
|
@@ -170,7 +192,8 @@ namespace Business.ResourceExamineManagement
|
|
|
CaleLackItem(level1Dto, childList, returnlist, sklist);
|
|
|
//level1Dto.kz = childList.Min(s => s.kz);//得到最小可制数量。
|
|
|
//再加个循环,来根据替代关系里的检查结果,根据规则明确使用和生成占用关系。
|
|
|
- CalcIcitem(childList, returnlist, bangid, input, sklist, plan_date, icitemlist, sentrys);
|
|
|
+ List<long> childidList = new List<long>();
|
|
|
+ CalcIcitem(childList, returnlist, bangid, input, sklist, plan_date, icitemlist, sentrys, childidList);
|
|
|
level1Dto.kitting_time = childList.Max(s => s.kitting_time);
|
|
|
//这里更新产品得满足时间。
|
|
|
if (mes_MorderDto != null)
|
|
|
@@ -285,6 +308,7 @@ namespace Business.ResourceExamineManagement
|
|
|
//判断状态
|
|
|
item.stock_state = item.lack_qty > 0 ? 0 : 1;
|
|
|
}
|
|
|
+ item.self_lack_qty = item.lack_qty;
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
@@ -298,18 +322,24 @@ namespace Business.ResourceExamineManagement
|
|
|
/// <param name="sklist"></param>
|
|
|
/// <param name="plan_date"></param>
|
|
|
public void CalcIcitem(List<BomChildExamineDto> childList, List<BomChildExamineDto> returnlist, long bangid, SeorderentryDto input, List<mo_ic_item_stockoccupy> sklist, DateTime
|
|
|
- ? plan_date, List<mo_ic_item> icitemlist, crm_seorderentry sentrys)
|
|
|
+ ? plan_date, List<mo_ic_item> icitemlist, crm_seorderentry sentrys, List<long> childidList)
|
|
|
{
|
|
|
foreach (var item in childList)
|
|
|
{
|
|
|
var parent = returnlist.Find(s => s.id == item.parent_id);
|
|
|
if (parent.stock_state == 0)
|
|
|
{
|
|
|
+ if (childidList.Contains(item.bom_child_id.GetValueOrDefault()))
|
|
|
+ {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
if (item.haveicsubs == 1)
|
|
|
{
|
|
|
//如果有替代关系,根据群组来明确使用哪个群组的替代料。按整批和混用逻辑来算
|
|
|
// 如果有群组替代,就移除掉被检查过的记录 item.icitem_ids
|
|
|
- CalcStrategy(item, returnlist, bangid, sklist, input, plan_date, icitemlist, sentrys);
|
|
|
+ //通过替代群组代码,将替代群组物料进行绑定。
|
|
|
+ childidList.AddRange(returnlist.Where(s => s.substitute_code == item.substitute_code).Select(d => d.bom_child_id.GetValueOrDefault()));
|
|
|
+ CalcStrategy(item, returnlist, bangid, sklist, input, plan_date, icitemlist, sentrys, childidList);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
@@ -322,7 +352,7 @@ namespace Business.ResourceExamineManagement
|
|
|
itemStockoccupyDto.item_no = item.num;
|
|
|
item.kitting_time = DateTime.Now;
|
|
|
item.is_use = true;
|
|
|
- StartProcessing(item, icitemlist, returnlist, plan_date, sentrys, sklist, itemStockoccupyDto, bangid, input);
|
|
|
+ StartProcessing(item, icitemlist, returnlist, plan_date, sentrys, sklist, itemStockoccupyDto, bangid, input, childidList);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
@@ -341,7 +371,7 @@ namespace Business.ResourceExamineManagement
|
|
|
/// <param name="bangid"></param>
|
|
|
/// <param name="input"></param>
|
|
|
public void StartProcessing(BomChildExamineDto item, List<mo_ic_item> icitemlist, List<BomChildExamineDto> returnlist, DateTime
|
|
|
- ? plan_date, crm_seorderentry sentrys, List<mo_ic_item_stockoccupy> sklist, mo_ic_item_stockoccupy itemStockoccupyDto, long bangid, SeorderentryDto input)
|
|
|
+ ? plan_date, crm_seorderentry sentrys, List<mo_ic_item_stockoccupy> sklist, mo_ic_item_stockoccupy itemStockoccupyDto, long bangid, SeorderentryDto input, List<long> childidList)
|
|
|
{
|
|
|
var parent = returnlist.Find(s => s.id == item.parent_id);
|
|
|
if (item.lack_qty > 0)
|
|
|
@@ -376,7 +406,7 @@ namespace Business.ResourceExamineManagement
|
|
|
//先计算末级数据的齐套时间。
|
|
|
if (cilList.Count() > 0)
|
|
|
{
|
|
|
- CalcIcitem(cilList, returnlist, bangid, input, sklist, plan_date, icitemlist, sentrys);
|
|
|
+ CalcIcitem(cilList, returnlist, bangid, input, sklist, plan_date, icitemlist, sentrys, childidList);
|
|
|
item.kitting_time = cilList.Max(s => s.kitting_time);
|
|
|
}
|
|
|
|
|
|
@@ -412,7 +442,7 @@ namespace Business.ResourceExamineManagement
|
|
|
//先计算末级数据的齐套时间。
|
|
|
if (cilList.Count() > 0)
|
|
|
{
|
|
|
- CalcIcitem(cilList, returnlist, bangid, input, sklist, plan_date, icitemlist, sentrys);
|
|
|
+ CalcIcitem(cilList, returnlist, bangid, input, sklist, plan_date, icitemlist, sentrys, childidList);
|
|
|
item.kitting_time = cilList.Max(s => s.kitting_time);
|
|
|
}
|
|
|
//1.先生成委外工单。
|
|
|
@@ -444,7 +474,7 @@ namespace Business.ResourceExamineManagement
|
|
|
/// <param name="input"></param>
|
|
|
/// <param name="plan_date"></param>
|
|
|
public void CalcStrategy(BomChildExamineDto item, List<BomChildExamineDto> returnlist, long bangid, List<mo_ic_item_stockoccupy> sklist, SeorderentryDto input, DateTime
|
|
|
- ? plan_date, List<mo_ic_item> icitemlist, crm_seorderentry sentrys)
|
|
|
+ ? plan_date, List<mo_ic_item> icitemlist, crm_seorderentry sentrys, List<long> childidList)
|
|
|
{
|
|
|
//提取群组关系
|
|
|
var sublist = returnlist.Where(s => s.parent_id == item.parent_id && s.num == item.num && s.level == item.level).OrderBy(c => c.substitute_all_num).ToList();
|
|
|
@@ -455,7 +485,7 @@ namespace Business.ResourceExamineManagement
|
|
|
case 0://整批
|
|
|
WholeBatchCheck(sublist, returnlist, sklist, select);
|
|
|
//如果都需要采购的情况下,则默认使用优先级最高的
|
|
|
- WholeBatch(item, sublist, returnlist, sklist, select, bangid, parent, input, plan_date, icitemlist, sentrys);
|
|
|
+ WholeBatch(item, sublist, returnlist, sklist, select, bangid, parent, input, plan_date, icitemlist, sentrys, childidList);
|
|
|
break;
|
|
|
case 1://混用
|
|
|
MixedUse(item, sublist, returnlist, sklist, bangid, parent, input, plan_date, icitemlist, sentrys);
|
|
|
@@ -470,7 +500,7 @@ namespace Business.ResourceExamineManagement
|
|
|
else
|
|
|
{
|
|
|
//走整批
|
|
|
- WholeBatch(item, sublist, returnlist, sklist, select, bangid, parent, input, plan_date, icitemlist, sentrys);
|
|
|
+ WholeBatch(item, sublist, returnlist, sklist, select, bangid, parent, input, plan_date, icitemlist, sentrys, childidList);
|
|
|
}
|
|
|
break;
|
|
|
}
|
|
|
@@ -523,7 +553,7 @@ namespace Business.ResourceExamineManagement
|
|
|
/// <param name="input"></param>
|
|
|
/// <param name="plan_date"></param>
|
|
|
public void WholeBatch(BomChildExamineDto item, List<BomChildExamineDto> sublist, List<BomChildExamineDto> returnlist, List<mo_ic_item_stockoccupy> sklist, List<BomChildExamineDto> select, long bangid, BomChildExamineDto parent, SeorderentryDto input, DateTime
|
|
|
- ? plan_date, List<mo_ic_item> icitemlist, crm_seorderentry sentrys)
|
|
|
+ ? plan_date, List<mo_ic_item> icitemlist, crm_seorderentry sentrys,List<long> childidList)
|
|
|
{
|
|
|
if (select.Count() == 0)
|
|
|
{
|
|
|
@@ -548,7 +578,7 @@ namespace Business.ResourceExamineManagement
|
|
|
itemStockoccupyDto.icitem_id = slt.item_id;
|
|
|
itemStockoccupyDto.item_no = slt.num;
|
|
|
slt.is_use = true;
|
|
|
- StartProcessing(slt, icitemlist, returnlist, plan_date, sentrys, sklist, itemStockoccupyDto, bangid, input);
|
|
|
+ StartProcessing(slt, icitemlist, returnlist, plan_date, sentrys, sklist, itemStockoccupyDto, bangid, input, childidList);
|
|
|
}
|
|
|
|
|
|
}
|
|
|
@@ -737,6 +767,7 @@ namespace Business.ResourceExamineManagement
|
|
|
item.sqty = item.sqty - stockQty;
|
|
|
item.lack_qty = parent.lack_qty * item.qty - item.sqty;
|
|
|
item.lack_qty = item.lack_qty > 0 ? item.lack_qty : 0;
|
|
|
+ item.self_lack_qty = item.lack_qty;
|
|
|
item.stock_state = item.lack_qty > 0 ? 0 : 1;
|
|
|
}
|
|
|
|