|
|
@@ -1525,10 +1525,25 @@ namespace Business.Replenishment
|
|
|
_workOrdRouting.Delete(a => workOrderDelete.Contains(a.WorkOrd) && a.Domain == input.factory_id.ToString());
|
|
|
_workOrdDetail.Delete(a => workOrderDelete.Contains(a.WorkOrd) && a.Domain == input.factory_id.ToString());
|
|
|
var deletedOrderList=_mysql_mes_morder.GetListAsync(a=>workOrderDelete.Contains(a.morder_no) && a.factory_id == input.factory_id).Result;
|
|
|
+ var deletedIds = deletedOrderList.Select(a => a.Id).ToList();
|
|
|
await _mysql_mes_morder.DeleteManyAsync(deletedOrderList);
|
|
|
var deletedEntryList= _mysql_mes_moentry.GetListAsync(a => workOrderDelete.Contains(a.moentry_mono) && a.factory_id == input.factory_id).Result;
|
|
|
await _mysql_mes_moentry.DeleteManyAsync(deletedEntryList);
|
|
|
var examine_result = _mysql_examine_result.GetListAsync(a => workOrderDelete.Contains(a.morder_no) && a.factory_id == input.factory_id).Result;
|
|
|
+ List<srm_po_occupy> occupy = await _mysql_srm_po_occupy.GetListAsync(s => workOrderDelete.Contains(s.morder_mo));
|
|
|
+ _businessDbContext.BulkDelete(occupy);
|
|
|
+ //清理工单占用
|
|
|
+ List<mes_mooccupy> mooccupy = await _mysql_mes_mooccupy.GetListAsync(s => deletedIds.Contains(s.moo_id.GetValueOrDefault()));
|
|
|
+ if (mooccupy.Any())
|
|
|
+ {
|
|
|
+ _businessDbContext.BulkDelete(mooccupy);
|
|
|
+ }
|
|
|
+ //清理掉库存占用
|
|
|
+ var itemstockoccupy = _mysql_ic_item_stockoccupy.GetListAsync(s => workOrderDelete.Contains(s.morder_mo)).Result;
|
|
|
+ if (itemstockoccupy.Any())
|
|
|
+ {
|
|
|
+ _businessDbContext.BulkDelete(itemstockoccupy);
|
|
|
+ }
|
|
|
await _mysql_bom_child_examine.DeleteAsync(a => examine_result.Select(b => b.Id).ToList().Contains(a.examine_id.Value) && a.factory_id == input.factory_id);
|
|
|
await _mysql_examine_result.DeleteManyAsync(examine_result);
|
|
|
await _replenishmentWeekPlan.HardDeleteAsync(weekPlanDelete);
|
|
|
@@ -1549,6 +1564,23 @@ namespace Business.Replenishment
|
|
|
List<ReplenishmentWeekPlan> weekPlan = new List<ReplenishmentWeekPlan>();
|
|
|
long bang_id = help.NextId();
|
|
|
|
|
|
+ //获取BOM用于分解到原材料
|
|
|
+ var boms = _ic_bom.GetListAsync(a => planItemList.Contains(a.item_number) && a.factory_id == input.factory_id).Result;
|
|
|
+ var pretreatments = _mysql_b_bom_pretreatment.GetListAsync(s => boms.Select(c => c.mysql_id).ToList().Contains(s.sourceid)).Result;
|
|
|
+ List<mo_ic_bom> autoCreates = new List<mo_ic_bom>();
|
|
|
+ boms.ForEach(p =>
|
|
|
+ {
|
|
|
+ if (!pretreatments.Where(s => s.sourceid == p.mysql_id).Any())
|
|
|
+ {
|
|
|
+ autoCreates.Add(p);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ if (autoCreates.Any())
|
|
|
+ {
|
|
|
+ AutoCreateBomBill(input.company_id.ToString(), autoCreates);
|
|
|
+ pretreatments = _mysql_b_bom_pretreatment.GetListAsync(s => boms.Select(c => c.mysql_id).ToList().Contains(s.sourceid)).Result;
|
|
|
+ }
|
|
|
+
|
|
|
List<string> weeks = new List<string>();
|
|
|
for (int k = 0; k < replenishmentDto.SaleFcstMonth; k++)
|
|
|
{
|
|
|
@@ -1624,6 +1656,8 @@ namespace Business.Replenishment
|
|
|
kTime = kTime.AddDays(1 - kTime.Day);//某月第一天
|
|
|
var monthWeekPlan = planList.Where(a => a.planmonth == kMonth).ToList();
|
|
|
var ropList = planList.Select(t => t.number).Distinct().ToList();
|
|
|
+ //中间件汇总,比如A成品10、11、12月都需要中间件C,B成品11、12月都需要中间件C,那么中间件C需要每个月汇总平均分到4周
|
|
|
+ Dictionary<string, decimal?> subProductItem = new Dictionary<string, decimal?>();
|
|
|
foreach (var itemSeq in ropList)
|
|
|
{
|
|
|
if(shipPlanList.Select(s=>s.SAPItemNumber).ToList().Contains(itemSeq))
|
|
|
@@ -1750,6 +1784,28 @@ namespace Business.Replenishment
|
|
|
moentryList.Add(mes_Moentry);
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ var planBOM = boms.Find(b => b.item_number == itemSeq);
|
|
|
+ var pretreament = pretreatments.Where(c => c.sourceid == planBOM.mysql_id).ToList();
|
|
|
+ var returnlist = ObjectMapper.Map<List<b_bom_pretreatment>, List<BomChildExamineDto>>(pretreament);
|
|
|
+ returnlist = returnlist.OrderBy(s => s.num_order).ToList();
|
|
|
+ var level1Dto = returnlist[0];
|
|
|
+ level1Dto.needCount = itemQty.GetValueOrDefault();
|
|
|
+ CaclMaterialShortage(returnlist);
|
|
|
+ foreach (var r in returnlist)
|
|
|
+ {
|
|
|
+ if(r.item_number!=itemSeq && r.erp_cls==1)
|
|
|
+ {
|
|
|
+ if (subProductItem.ContainsKey(r.item_number))
|
|
|
+ {
|
|
|
+ subProductItem[r.item_number] += r.needCount;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ subProductItem.Add(r.item_number, r.needCount);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
@@ -1763,13 +1819,16 @@ namespace Business.Replenishment
|
|
|
weekPlan[i].OrderNO = OrderNOList[i].NbrResult;
|
|
|
}
|
|
|
|
|
|
- await _mysql_mes_morder.InsertManyAsync(moList);
|
|
|
- await _mysql_mes_moentry.InsertManyAsync(moentryList);
|
|
|
-
|
|
|
await PlanOrderResourceCheck(moList, moentryList, bang_id, input);
|
|
|
|
|
|
-
|
|
|
var examine_resultList = _mysql_examine_result.GetListAsync(a => a.bangid == bang_id).Result;
|
|
|
+ moList.ForEach(mo =>
|
|
|
+ {
|
|
|
+ var moItem = examine_resultList.Find(b => b.morder_no == mo.morder_no);
|
|
|
+ mo.moentry_sys_stime = moItem.kitting_times;
|
|
|
+ });
|
|
|
+ await _mysql_mes_morder.InsertManyAsync(moList);
|
|
|
+ await _mysql_mes_moentry.InsertManyAsync(moentryList);
|
|
|
|
|
|
//批量保存 后期考虑子工单
|
|
|
List<WorkOrdMaster> workOrdSave = new List<WorkOrdMaster>();
|
|
|
@@ -2326,6 +2385,7 @@ namespace Business.Replenishment
|
|
|
var productStructureMs = _productStructureMaster.Select(x => morders.Select(c => c.morder_no).Contains(x.ParentItem) && x.Domain == param.factoryId.ToString());
|
|
|
foreach (var item in morders)
|
|
|
{
|
|
|
+ var moItem = exmResult.Find(b => b.morder_no ==item.morder_no);
|
|
|
//添加工单数据
|
|
|
workOrd = new WorkOrdMaster();
|
|
|
workOrd.Domain = item.factory_id.ToString();
|