|
|
@@ -491,6 +491,23 @@ namespace Business.Replenishment
|
|
|
}
|
|
|
}
|
|
|
#endregion
|
|
|
+
|
|
|
+ //var pretreatments = _mysql_b_bom_pretreatment.GetListAsync(s => bomList.Select(c => c.Id).ToList().Contains(s.sourceid)).Result;
|
|
|
+ //List<mo_ic_bom> autoCreates = new List<mo_ic_bom>();
|
|
|
+ //var mobomlist = ObjectMapper.Map<List<ic_bom>, List<mo_ic_bom>>(bomList);
|
|
|
+ //mobomlist.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 => bomList.Select(c => c.Id).ToList().Contains(s.sourceid)).Result;
|
|
|
+ //}
|
|
|
+
|
|
|
//年度生产大纲实体
|
|
|
List<ReplenishmentAnnualProduction> annualProductionOutlines = new List<ReplenishmentAnnualProduction>();
|
|
|
List<YearDemandManagement> frontYearDemand = new List<YearDemandManagement>();
|
|
|
@@ -616,6 +633,87 @@ namespace Business.Replenishment
|
|
|
annualProductionOutline.factory_id = input.factory_id;
|
|
|
annualProductionOutline.org_id = input.org_id;
|
|
|
annualProductionOutlines.Add(annualProductionOutline);
|
|
|
+
|
|
|
+ //var planBOM = bomList.Find(b => b.item_number == productList[i].SAPItemNumber);
|
|
|
+ //var pretreament = pretreatments.Where(c => c.sourceid == planBOM.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 = productList[i].Qty;
|
|
|
+ //CaclMaterialShortage(returnlist);
|
|
|
+ //foreach (var r in returnlist)
|
|
|
+ //{
|
|
|
+ // if (r.item_number != productList[i].SAPItemNumber && r.erp_cls == 1 && !string.IsNullOrEmpty(r.bom_number))
|
|
|
+ // {
|
|
|
+ // if (r.needCount <= 0)
|
|
|
+ // continue;
|
|
|
+ // var ic_itemSub = _itemMaster.Select(x => x.ItemNum == r.item_number && x.Domain == input.factory_id.ToString());
|
|
|
+ // if (ic_itemSub.Count <= 0)
|
|
|
+ // continue;
|
|
|
+
|
|
|
+ // mes_morder mes_MorderSub = new mes_morder();
|
|
|
+ // mes_MorderSub.GenerateNewId(help.NextId());
|
|
|
+ // mes_MorderSub.morder_type = MorderEnum.JhMorder;
|
|
|
+ // mes_MorderSub.work_order_type = MorderEnum.CgMorder;
|
|
|
+ // mes_MorderSub.morder_state = "";
|
|
|
+ // var nbrlistDto = _serialNumberAppService.GetBillNo(input.factory_id.ToString(), "M5", 1, "", 1);
|
|
|
+ // if (nbrlistDto.Any())
|
|
|
+ // {
|
|
|
+ // mes_MorderSub.morder_no = nbrlistDto[0].NbrResult;
|
|
|
+ // }
|
|
|
+ // else
|
|
|
+ // {
|
|
|
+ // return "没有正确获取到工单编号,请检查";
|
|
|
+ // }
|
|
|
+ // mes_MorderSub.fms_number = "";
|
|
|
+ // mes_MorderSub.bom_number = r.bom_number;
|
|
|
+ // mes_MorderSub.fmodel = ic_itemSub[0].Descr1;
|
|
|
+ // mes_MorderSub.urgent = 1;
|
|
|
+ // mes_MorderSub.moentry_startup_status = 0;
|
|
|
+ // mes_MorderSub.tenant_id = input.tenant_id;
|
|
|
+ // mes_MorderSub.factory_id = input.factory_id;
|
|
|
+ // mes_MorderSub.company_id = input.company_id;
|
|
|
+ // mes_MorderSub.org_id = input.org_id;
|
|
|
+ // mes_MorderSub.product_code = ic_itemSub[0].ItemNum;
|
|
|
+ // mes_MorderSub.product_name = ic_itemSub[0].Descr;
|
|
|
+ // mes_MorderSub.morder_date = DateTime.Now.Date.AddDays(1);
|
|
|
+ // if (ic_itemSub[0].PurLT > 0)
|
|
|
+ // {
|
|
|
+ // mes_MorderSub.moentry_sys_stime = Convert.ToDateTime(productList[i].PlanMonth + "-01").AddDays(-ic_itemSub[0].PurLT);
|
|
|
+ // }
|
|
|
+ // else
|
|
|
+ // {
|
|
|
+ // mes_MorderSub.moentry_sys_stime = Convert.ToDateTime(productList[i].PlanMonth + "-01").AddDays(-1);
|
|
|
+ // }
|
|
|
+ // mes_MorderSub.moentry_prd = null;
|
|
|
+ // mes_MorderSub.moentry_prdname = null;
|
|
|
+ // mes_MorderSub.moentry_wrkc = null;
|
|
|
+ // mes_MorderSub.moentry_wrkcname = null;
|
|
|
+ // mes_MorderSub.picking_qty = 0;
|
|
|
+ // mes_MorderSub.unit = ic_itemSub[0].UM;
|
|
|
+ // mes_MorderSub.morder_production_number = r.needCount;
|
|
|
+ // mes_MorderSub.need_number = r.needCount;
|
|
|
+ // mes_MorderSub.remaining_number = 0;
|
|
|
+ // mes_MorderSub.create_time = DateTime.Now;
|
|
|
+ // //生成工单子表数据
|
|
|
+ // mes_moentry mes_MoentrySub = new mes_moentry();
|
|
|
+ // mes_MoentrySub.GenerateNewId(help.NextId());
|
|
|
+ // mes_MoentrySub.moentry_moid = mes_MorderSub.Id;
|
|
|
+ // mes_MoentrySub.moentry_mono = mes_MorderSub.morder_no;
|
|
|
+ // mes_MoentrySub.unit = ic_itemSub[0].UM;
|
|
|
+ // mes_MoentrySub.morder_production_number = r.needCount;
|
|
|
+ // mes_MoentrySub.need_number = r.needCount;
|
|
|
+ // mes_MoentrySub.remaining_number = 0;
|
|
|
+ // mes_MoentrySub.tenant_id = input.tenant_id;
|
|
|
+ // mes_MoentrySub.factory_id = input.factory_id;
|
|
|
+ // mes_MoentrySub.company_id = input.company_id;
|
|
|
+ // mes_MoentrySub.org_id = input.org_id;
|
|
|
+ // mes_MoentrySub.create_time = DateTime.Now;
|
|
|
+
|
|
|
+ // moList.Add(mes_MorderSub);
|
|
|
+ // moentryList.Add(mes_MoentrySub);
|
|
|
+ // }
|
|
|
+ //}
|
|
|
}
|
|
|
//保存数据
|
|
|
using (var unitOfWork = _unitOfWorkManager.Begin(false, true))
|
|
|
@@ -626,8 +724,9 @@ namespace Business.Replenishment
|
|
|
await _businessDbContext.BulkDeleteAsync(toDelete);
|
|
|
await _businessDbContext.BulkInsertAsync(annualProductionOutlines);
|
|
|
await CalcLongPeriodItemPR(input);
|
|
|
- await CalcROP(input);
|
|
|
- await SaveProductionMasterPlan(input, annualProductionOutlines);
|
|
|
+ //await CalcROP(input);
|
|
|
+ //await SaveProductionMasterPlan(input, annualProductionOutlines);
|
|
|
+ //await CalcWeekPlan(input);
|
|
|
await unitOfWork.CompleteAsync();
|
|
|
}
|
|
|
catch (Exception e)
|
|
|
@@ -653,12 +752,6 @@ namespace Business.Replenishment
|
|
|
input.year = DateTime.Now.Year;
|
|
|
input.month = DateTime.Now.Month;
|
|
|
}
|
|
|
- //每年10月份做下一年的销售预测
|
|
|
- if (DateTime.Now.Month >= 10)
|
|
|
- {
|
|
|
- input.year = DateTime.Now.AddYears(1).Year;
|
|
|
- input.month = DateTime.Now.Month;
|
|
|
- }
|
|
|
//计算当前年月的N0,N+1,N+2
|
|
|
List<string> planMons = GetPlanMonth(4);
|
|
|
List<ProductionMasterPlan> productionMasters= new List<ProductionMasterPlan>();
|
|
|
@@ -1523,7 +1616,6 @@ namespace Business.Replenishment
|
|
|
addList?.ForEach(item => { item.GenerateNewId(help.NextId()); });
|
|
|
await _businessDbContext.BulkInsertAsync(addList);
|
|
|
await _businessDbContext.BulkUpdateAsync(updateList);
|
|
|
- await CalcWeekPlan(input);
|
|
|
return "OK";
|
|
|
}
|
|
|
private List<ReplenishmentSubItemDto> CalcMonthPlanSubItem(List<MonthlyShipmentPlan> planList,List<mo_ic_bom> boms, List<b_bom_pretreatment> pretreatments)
|
|
|
@@ -1782,177 +1874,15 @@ namespace Business.Replenishment
|
|
|
//中间件汇总,比如A成品10、11、12月都需要中间件C,B成品11、12月都需要中间件C,那么中间件C需要每个月汇总平均分到4周
|
|
|
Dictionary<string, decimal?> subProductItem = new Dictionary<string, decimal?>();
|
|
|
Dictionary<string, BomChildExamineDto> subProductItemModel = new Dictionary<string, BomChildExamineDto>();
|
|
|
- //用于判断生产批量,小于排产批量就按照批量生产(应该要判断是否有该年度的工单有的话不生产?待确认)
|
|
|
- var itemMasterList = _itemMaster.Select(t => shipPlanList.Select(s => s.SAPItemNumber).ToList().Contains(t.ItemNum) && t.Domain==input.factory_id.ToString() &&t.MinOrdSales>0);
|
|
|
- //单独算生产批量
|
|
|
- var pcpl = planList.Where(t => itemMasterList.Select(i=>i.ItemNum).ToList().Contains(t.number)).Select(t => t.number).Distinct().ToList();
|
|
|
- foreach (var itemSeq in pcpl)
|
|
|
- {
|
|
|
- var monthPlanItem = monthPlan.Find(x => x.ItemNumber == itemSeq);
|
|
|
- ReplenishmentROPWeekPlan item = new ReplenishmentROPWeekPlan();
|
|
|
- decimal? itemQty = 0;
|
|
|
- int days = 15;
|
|
|
- for (int k = 0; k < 12; k++)
|
|
|
- {
|
|
|
- var weekTime = GetNextMonday().AddDays(28);//增加四周
|
|
|
- weekTime = weekTime.AddDays(7 * k);
|
|
|
- string kMonth = $"{weekTime.Year}-{weekTime.Month.ToString("00")}";
|
|
|
- //瑞奇国科海王
|
|
|
- var monthPlanTotal = planList.Where(a => a.planmonth == kMonth &&a.number==itemSeq).ToList();
|
|
|
- if (monthPlanTotal != null && monthPlanTotal.Count > 0)
|
|
|
- {
|
|
|
- item = monthPlanTotal[0];
|
|
|
- //瑞奇补货计划!Y5 + 瑞奇补货计划!Z5 + 国科补货计划!Y5 + 国科补货计划!Z5 + 海王补货计划!Y4 + 海王补货计划!Z4
|
|
|
- itemQty += monthPlanTotal.Sum(a => a.montheop1) + monthPlanTotal.Sum(a => a.montheop2);
|
|
|
- //每次都是发布12周,每个月4周,不用判断存不存在(退市的可能没有)
|
|
|
- if (item.area != "国内" && item.area != "中国")
|
|
|
- {
|
|
|
- days = 8;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- if (itemQty > 0)
|
|
|
- {
|
|
|
- itemQty = Math.Max(itemMasterList.Find(a => a.ItemNum == itemSeq).MinOrdSales, itemQty.GetValueOrDefault());
|
|
|
- var weekTime = GetNextMonday().AddDays(28);//增加四周
|
|
|
- string kMonth = $"{weekTime.Year}-{weekTime.Month.ToString("00")}";
|
|
|
- var isexist=_mysql_mes_morder.GetListAsync(a => a.product_code == itemSeq && a.moentry_sys_etime.Value.Year == weekTime.Year).Result;
|
|
|
- if(isexist.Count==0)
|
|
|
- {
|
|
|
- var bom = bomList.Find(b => b.item_number == itemSeq);
|
|
|
- var ic_item = itemList.Find(b => b.number == itemSeq);
|
|
|
- mes_morder mes_Morder = new mes_morder();
|
|
|
- mes_Morder.GenerateNewId(help.NextId());
|
|
|
- mes_Morder.morder_type = MorderEnum.JhMorder;
|
|
|
- mes_Morder.work_order_type = MorderEnum.CgMorder;
|
|
|
- mes_Morder.morder_state = "";
|
|
|
- mes_Morder.morder_no = Guid.NewGuid().ToString();
|
|
|
- mes_Morder.fms_number = ic_item.fms_number;
|
|
|
- mes_Morder.bom_number = bom.bom_number;
|
|
|
- mes_Morder.fmodel = ic_item.model;
|
|
|
- mes_Morder.moentry_startup_status = 0;
|
|
|
- mes_Morder.tenant_id = input.tenant_id;
|
|
|
- mes_Morder.factory_id = input.factory_id;
|
|
|
- mes_Morder.company_id = input.company_id;
|
|
|
- mes_Morder.org_id = input.org_id;
|
|
|
- mes_Morder.product_code = ic_item.number;
|
|
|
- mes_Morder.product_name = ic_item.name;
|
|
|
- mes_Morder.morder_date = DateTime.Now.Date.AddDays(1);
|
|
|
- mes_Morder.moentry_prd = null;
|
|
|
- mes_Morder.moentry_prdname = null;
|
|
|
- mes_Morder.moentry_wrkc = null;
|
|
|
- mes_Morder.moentry_wrkcname = null;
|
|
|
- mes_Morder.picking_qty = 0;
|
|
|
- mes_Morder.unit = ic_item.unit;
|
|
|
- mes_Morder.morder_production_number = Math.Ceiling(itemQty.GetValueOrDefault() / 4);
|
|
|
- mes_Morder.need_number = Math.Ceiling(itemQty.GetValueOrDefault() / 4);
|
|
|
- //成品半成品取周一为入库时间开始往前推
|
|
|
- mes_Morder.moentry_sys_stime = weekTime.AddDays(-ProductTime(routingOps, ic_item.number, input.factory_id.ToString(), mes_Morder.need_number.GetValueOrDefault()) - days);
|
|
|
- mes_Morder.moentry_sys_etime = weekTime.AddDays(-days);
|
|
|
- mes_Morder.remaining_number = 0;
|
|
|
- mes_Morder.create_time = DateTime.Now;
|
|
|
- mes_Morder.bang_id = bang_id;
|
|
|
- //生成工单子表数据
|
|
|
- mes_moentry mes_Moentry = new mes_moentry();
|
|
|
- mes_Moentry.GenerateNewId(help.NextId());
|
|
|
- mes_Moentry.moentry_moid = mes_Morder.Id;
|
|
|
- mes_Moentry.moentry_mono = mes_Morder.morder_no;
|
|
|
- mes_Moentry.unit = ic_item.unit;
|
|
|
- mes_Moentry.morder_production_number = Math.Ceiling(itemQty.GetValueOrDefault() / 4); ;
|
|
|
- mes_Moentry.need_number = Math.Ceiling(itemQty.GetValueOrDefault() / 4); ;
|
|
|
- mes_Moentry.remaining_number = 0;
|
|
|
- mes_Moentry.tenant_id = input.tenant_id;
|
|
|
- mes_Moentry.factory_id = input.factory_id;
|
|
|
- mes_Moentry.company_id = input.company_id;
|
|
|
- mes_Moentry.org_id = input.org_id;
|
|
|
- mes_Moentry.create_time = DateTime.Now;
|
|
|
- mes_Moentry.bang_id = bang_id;
|
|
|
-
|
|
|
- ReplenishmentWeekPlan weekItem = new ReplenishmentWeekPlan();
|
|
|
- weekItem.Priority = 1;
|
|
|
- weekItem.Area = item.area;
|
|
|
- weekItem.PlanStartDate = mes_Morder.moentry_sys_stime.GetValueOrDefault();
|
|
|
- weekItem.Week = $"WK{GetWeekOfYear(mes_Morder.moentry_sys_stime.Value).ToString("00")}";
|
|
|
- weekItem.OrderNO = Guid.NewGuid().ToString();
|
|
|
- weekItem.ProductionOrder = mes_Morder.morder_no;
|
|
|
- weekItem.SAPOrderNO = "";
|
|
|
- weekItem.OrderType = "量产";
|
|
|
- weekItem.ProductionBatch = "";
|
|
|
- weekItem.ProductionStatus = "";
|
|
|
- weekItem.ProdLine = item.ProdLine;
|
|
|
- weekItem.ProdRange = item.ProdRange;
|
|
|
- weekItem.Line = monthPlanItem?.WorkshopLine;
|
|
|
- weekItem.ItemNumber = item.number;
|
|
|
- weekItem.Model = item.model;
|
|
|
- weekItem.Languages = item.Languages;
|
|
|
- weekItem.Qty = mes_Morder.morder_production_number.Value;
|
|
|
- weekItem.ItemStatus = "";
|
|
|
- weekItem.PlanKittingDate = DateTime.Now;
|
|
|
- weekItem.Year = weekTime.Year;
|
|
|
- weekItem.Month = weekTime.Month;
|
|
|
- weekItem.WeekSeq = WeekOfMonth(weekTime, 1);
|
|
|
- weekItem.PlanMonth = kMonth;
|
|
|
- weekItem.tenant_id = input.tenant_id;
|
|
|
- weekItem.factory_id = input.factory_id;
|
|
|
- weekItem.company_id = input.company_id;
|
|
|
- weekItem.org_id = input.org_id;
|
|
|
- weekItem.create_time = DateTime.Now;
|
|
|
- weekItem.DistributionChannel = item.distributionchannel;
|
|
|
- weekItem.IsReplenishmentModel = "N";
|
|
|
- if (item.area == "国内" || item.area == "中国")
|
|
|
- {
|
|
|
- weekItem.SterilizationDate = mes_Morder.moentry_sys_etime.Value;
|
|
|
- weekItem.InStockDate = mes_Morder.moentry_sys_etime.Value.AddDays(days);
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- weekItem.SterilizationDate = mes_Morder.moentry_sys_etime.Value;
|
|
|
- weekItem.InStockDate = mes_Morder.moentry_sys_etime.Value.AddDays(days);
|
|
|
- }
|
|
|
- weekItem.AssembleHours = 0;
|
|
|
- weekItem.HeatSealHours = 0;
|
|
|
- weekItem.PackageHours = 0;
|
|
|
- weekItem.TotalHours = 0;
|
|
|
- //Q2023/11/15的需求同一周有相同物料的工单不继续生成,不考虑数量的偏差
|
|
|
- if (!weekProductPlanList.Any(a => a.ItemNumber == item.number && a.Week == weekItem.Week))
|
|
|
- {
|
|
|
- weekPlan.Add(weekItem);
|
|
|
- moList.Add(mes_Morder);
|
|
|
- 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 && !string.IsNullOrEmpty(r.bom_number))
|
|
|
- {
|
|
|
- if (subProductItem.ContainsKey(r.item_number))
|
|
|
- {
|
|
|
- subProductItem[r.item_number] += r.needCount;
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- subProductItem.Add(r.item_number, r.needCount);
|
|
|
- subProductItemModel.Add(r.item_number, r);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
+ var ropList = planList.Where(t => shipPlanList.Select(s => s.SAPItemNumber).ToList().Contains(t.number)).Select(t => t.number).Distinct().ToList();
|
|
|
+ var itemMasterList = _itemMaster.Select(t => ropList.Contains(t.ItemNum) && t.Domain == input.factory_id.ToString());
|
|
|
+ Dictionary<string, decimal> minordsalesQty = new Dictionary<string, decimal>();
|
|
|
for (int k = 0; k < 12; k++)
|
|
|
{
|
|
|
var weekTime = GetNextMonday().AddDays(28);//增加四周
|
|
|
weekTime = weekTime.AddDays(7 * k);
|
|
|
string kMonth = $"{weekTime.Year}-{weekTime.Month.ToString("00")}";
|
|
|
var monthWeekPlan = planList.Where(a => a.planmonth == kMonth).ToList();
|
|
|
- var ropList = planList.Where(t => shipPlanList.Select(s => s.SAPItemNumber).ToList().Contains(t.number)).Select(t => t.number).Distinct().ToList();
|
|
|
foreach (var itemSeq in ropList)
|
|
|
{
|
|
|
var monthPlanItem = monthPlan.Find(x => x.ItemNumber == itemSeq);
|
|
|
@@ -1969,10 +1899,450 @@ namespace Business.Replenishment
|
|
|
{
|
|
|
days = 8;
|
|
|
}
|
|
|
- if (itemQty > 0 && !pcpl.Contains(itemSeq))
|
|
|
+ var itemMaster = itemMasterList.Find(i => i.ItemNum == itemSeq);
|
|
|
+ if (itemMaster != null && itemMaster.MinOrdSales > 0)
|
|
|
+ {
|
|
|
+ if(minordsalesQty.ContainsKey(itemSeq))
|
|
|
+ {
|
|
|
+ //多补了后面就少生产
|
|
|
+ if (minordsalesQty[itemSeq]>=Math.Ceiling(itemQty.GetValueOrDefault()))
|
|
|
+ {
|
|
|
+ //不用生产直接扣减
|
|
|
+ minordsalesQty[itemSeq] -= Math.Ceiling(itemQty.GetValueOrDefault());
|
|
|
+ }else
|
|
|
+ {
|
|
|
+ var needQty = Math.Ceiling(itemQty.GetValueOrDefault()) - minordsalesQty[itemSeq];
|
|
|
+ //小于还是按照生产批量生产
|
|
|
+ if (needQty<itemMaster.MinOrdSales)
|
|
|
+ {
|
|
|
+ minordsalesQty[itemSeq] += (itemMaster.MinOrdSales - needQty);//多生产的数量
|
|
|
+ var bom = bomList.Find(b => b.item_number == itemSeq);
|
|
|
+ var ic_item = itemList.Find(b => b.number == itemSeq);
|
|
|
+ mes_morder mes_Morder = new mes_morder();
|
|
|
+ mes_Morder.GenerateNewId(help.NextId());
|
|
|
+ mes_Morder.morder_type = MorderEnum.JhMorder;
|
|
|
+ mes_Morder.work_order_type = MorderEnum.CgMorder;
|
|
|
+ mes_Morder.morder_state = "";
|
|
|
+ mes_Morder.morder_no = Guid.NewGuid().ToString();
|
|
|
+ mes_Morder.fms_number = ic_item.fms_number;
|
|
|
+ mes_Morder.bom_number = bom.bom_number;
|
|
|
+ mes_Morder.fmodel = ic_item.model;
|
|
|
+ mes_Morder.moentry_startup_status = 0;
|
|
|
+ mes_Morder.tenant_id = input.tenant_id;
|
|
|
+ mes_Morder.factory_id = input.factory_id;
|
|
|
+ mes_Morder.company_id = input.company_id;
|
|
|
+ mes_Morder.org_id = input.org_id;
|
|
|
+ mes_Morder.product_code = ic_item.number;
|
|
|
+ mes_Morder.product_name = ic_item.name;
|
|
|
+ mes_Morder.morder_date = DateTime.Now.Date.AddDays(1);
|
|
|
+ mes_Morder.moentry_prd = null;
|
|
|
+ mes_Morder.moentry_prdname = null;
|
|
|
+ mes_Morder.moentry_wrkc = null;
|
|
|
+ mes_Morder.moentry_wrkcname = null;
|
|
|
+ mes_Morder.picking_qty = 0;
|
|
|
+ mes_Morder.unit = ic_item.unit;
|
|
|
+ mes_Morder.morder_production_number = Math.Ceiling(itemMaster.MinOrdSales);
|
|
|
+ mes_Morder.need_number = Math.Ceiling(itemMaster.MinOrdSales);
|
|
|
+ //成品半成品取周一为入库时间开始往前推
|
|
|
+ mes_Morder.moentry_sys_stime = weekTime.AddDays(-ProductTime(routingOps, ic_item.number, input.factory_id.ToString(), mes_Morder.need_number.GetValueOrDefault()) - days);
|
|
|
+ mes_Morder.moentry_sys_etime = weekTime.AddDays(-days);
|
|
|
+ mes_Morder.remaining_number = 0;
|
|
|
+ mes_Morder.create_time = DateTime.Now;
|
|
|
+ mes_Morder.bang_id = bang_id;
|
|
|
+ //生成工单子表数据
|
|
|
+ mes_moentry mes_Moentry = new mes_moentry();
|
|
|
+ mes_Moentry.GenerateNewId(help.NextId());
|
|
|
+ mes_Moentry.moentry_moid = mes_Morder.Id;
|
|
|
+ mes_Moentry.moentry_mono = mes_Morder.morder_no;
|
|
|
+ mes_Moentry.unit = ic_item.unit;
|
|
|
+ mes_Moentry.morder_production_number = Math.Ceiling(itemMaster.MinOrdSales);
|
|
|
+ mes_Moentry.need_number = Math.Ceiling(itemMaster.MinOrdSales);
|
|
|
+ mes_Moentry.remaining_number = 0;
|
|
|
+ mes_Moentry.tenant_id = input.tenant_id;
|
|
|
+ mes_Moentry.factory_id = input.factory_id;
|
|
|
+ mes_Moentry.company_id = input.company_id;
|
|
|
+ mes_Moentry.org_id = input.org_id;
|
|
|
+ mes_Moentry.create_time = DateTime.Now;
|
|
|
+ mes_Moentry.bang_id = bang_id;
|
|
|
+
|
|
|
+ ReplenishmentWeekPlan weekItem = new ReplenishmentWeekPlan();
|
|
|
+ weekItem.Priority = 1;
|
|
|
+ weekItem.Area = item.area;
|
|
|
+ weekItem.PlanStartDate = mes_Morder.moentry_sys_stime.GetValueOrDefault();
|
|
|
+ weekItem.Week = $"WK{GetWeekOfYear(mes_Morder.moentry_sys_stime.Value).ToString("00")}";
|
|
|
+ weekItem.OrderNO = Guid.NewGuid().ToString();
|
|
|
+ weekItem.ProductionOrder = mes_Morder.morder_no;
|
|
|
+ weekItem.SAPOrderNO = "";
|
|
|
+ weekItem.OrderType = "量产";
|
|
|
+ weekItem.ProductionBatch = "";
|
|
|
+ weekItem.ProductionStatus = "";
|
|
|
+ weekItem.ProdLine = item.ProdLine;
|
|
|
+ weekItem.ProdRange = item.ProdRange;
|
|
|
+ weekItem.Line = monthPlanItem?.WorkshopLine;
|
|
|
+ weekItem.ItemNumber = item.number;
|
|
|
+ weekItem.Model = item.model;
|
|
|
+ weekItem.Languages = item.Languages;
|
|
|
+ weekItem.Qty = mes_Morder.morder_production_number.Value;
|
|
|
+ weekItem.ItemStatus = "";
|
|
|
+ weekItem.PlanKittingDate = DateTime.Now;
|
|
|
+ weekItem.Year = weekTime.Year;
|
|
|
+ weekItem.Month = weekTime.Month;
|
|
|
+ weekItem.WeekSeq = WeekOfMonth(weekTime, 1);
|
|
|
+ weekItem.PlanMonth = kMonth;
|
|
|
+ weekItem.tenant_id = input.tenant_id;
|
|
|
+ weekItem.factory_id = input.factory_id;
|
|
|
+ weekItem.company_id = input.company_id;
|
|
|
+ weekItem.org_id = input.org_id;
|
|
|
+ weekItem.create_time = DateTime.Now;
|
|
|
+ weekItem.DistributionChannel = item.distributionchannel;
|
|
|
+ weekItem.IsReplenishmentModel = "N";
|
|
|
+ if (item.area == "国内" || item.area == "中国")
|
|
|
+ {
|
|
|
+ weekItem.SterilizationDate = mes_Morder.moentry_sys_etime.Value;
|
|
|
+ weekItem.InStockDate = mes_Morder.moentry_sys_etime.Value.AddDays(days);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ weekItem.SterilizationDate = mes_Morder.moentry_sys_etime.Value;
|
|
|
+ weekItem.InStockDate = mes_Morder.moentry_sys_etime.Value.AddDays(days);
|
|
|
+ }
|
|
|
+ weekItem.AssembleHours = 0;
|
|
|
+ weekItem.HeatSealHours = 0;
|
|
|
+ weekItem.PackageHours = 0;
|
|
|
+ weekItem.TotalHours = 0;
|
|
|
+ //Q2023/11/15的需求同一周有相同物料的工单不继续生成,不考虑数量的偏差
|
|
|
+ if (!weekProductPlanList.Any(a => a.ItemNumber == item.number && a.Week == weekItem.Week))
|
|
|
+ {
|
|
|
+ weekPlan.Add(weekItem);
|
|
|
+ moList.Add(mes_Morder);
|
|
|
+ moentryList.Add(mes_Moentry);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ var bom = bomList.Find(b => b.item_number == itemSeq);
|
|
|
+ var ic_item = itemList.Find(b => b.number == itemSeq);
|
|
|
+ mes_morder mes_Morder = new mes_morder();
|
|
|
+ mes_Morder.GenerateNewId(help.NextId());
|
|
|
+ mes_Morder.morder_type = MorderEnum.JhMorder;
|
|
|
+ mes_Morder.work_order_type = MorderEnum.CgMorder;
|
|
|
+ mes_Morder.morder_state = "";
|
|
|
+ mes_Morder.morder_no = Guid.NewGuid().ToString();
|
|
|
+ mes_Morder.fms_number = ic_item.fms_number;
|
|
|
+ mes_Morder.bom_number = bom.bom_number;
|
|
|
+ mes_Morder.fmodel = ic_item.model;
|
|
|
+ mes_Morder.moentry_startup_status = 0;
|
|
|
+ mes_Morder.tenant_id = input.tenant_id;
|
|
|
+ mes_Morder.factory_id = input.factory_id;
|
|
|
+ mes_Morder.company_id = input.company_id;
|
|
|
+ mes_Morder.org_id = input.org_id;
|
|
|
+ mes_Morder.product_code = ic_item.number;
|
|
|
+ mes_Morder.product_name = ic_item.name;
|
|
|
+ mes_Morder.morder_date = DateTime.Now.Date.AddDays(1);
|
|
|
+ mes_Morder.moentry_prd = null;
|
|
|
+ mes_Morder.moentry_prdname = null;
|
|
|
+ mes_Morder.moentry_wrkc = null;
|
|
|
+ mes_Morder.moentry_wrkcname = null;
|
|
|
+ mes_Morder.picking_qty = 0;
|
|
|
+ mes_Morder.unit = ic_item.unit;
|
|
|
+ mes_Morder.morder_production_number = Math.Ceiling(needQty);
|
|
|
+ mes_Morder.need_number = Math.Ceiling(needQty);
|
|
|
+ //成品半成品取周一为入库时间开始往前推
|
|
|
+ mes_Morder.moentry_sys_stime = weekTime.AddDays(-ProductTime(routingOps, ic_item.number, input.factory_id.ToString(), mes_Morder.need_number.GetValueOrDefault()) - days);
|
|
|
+ mes_Morder.moentry_sys_etime = weekTime.AddDays(-days);
|
|
|
+ mes_Morder.remaining_number = 0;
|
|
|
+ mes_Morder.create_time = DateTime.Now;
|
|
|
+ mes_Morder.bang_id = bang_id;
|
|
|
+ //生成工单子表数据
|
|
|
+ mes_moentry mes_Moentry = new mes_moentry();
|
|
|
+ mes_Moentry.GenerateNewId(help.NextId());
|
|
|
+ mes_Moentry.moentry_moid = mes_Morder.Id;
|
|
|
+ mes_Moentry.moentry_mono = mes_Morder.morder_no;
|
|
|
+ mes_Moentry.unit = ic_item.unit;
|
|
|
+ mes_Moentry.morder_production_number = Math.Ceiling(needQty);
|
|
|
+ mes_Moentry.need_number = Math.Ceiling(needQty);
|
|
|
+ mes_Moentry.remaining_number = 0;
|
|
|
+ mes_Moentry.tenant_id = input.tenant_id;
|
|
|
+ mes_Moentry.factory_id = input.factory_id;
|
|
|
+ mes_Moentry.company_id = input.company_id;
|
|
|
+ mes_Moentry.org_id = input.org_id;
|
|
|
+ mes_Moentry.create_time = DateTime.Now;
|
|
|
+ mes_Moentry.bang_id = bang_id;
|
|
|
+
|
|
|
+ ReplenishmentWeekPlan weekItem = new ReplenishmentWeekPlan();
|
|
|
+ weekItem.Priority = 1;
|
|
|
+ weekItem.Area = item.area;
|
|
|
+ weekItem.PlanStartDate = mes_Morder.moentry_sys_stime.GetValueOrDefault();
|
|
|
+ weekItem.Week = $"WK{GetWeekOfYear(mes_Morder.moentry_sys_stime.Value).ToString("00")}";
|
|
|
+ weekItem.OrderNO = Guid.NewGuid().ToString();
|
|
|
+ weekItem.ProductionOrder = mes_Morder.morder_no;
|
|
|
+ weekItem.SAPOrderNO = "";
|
|
|
+ weekItem.OrderType = "量产";
|
|
|
+ weekItem.ProductionBatch = "";
|
|
|
+ weekItem.ProductionStatus = "";
|
|
|
+ weekItem.ProdLine = item.ProdLine;
|
|
|
+ weekItem.ProdRange = item.ProdRange;
|
|
|
+ weekItem.Line = monthPlanItem?.WorkshopLine;
|
|
|
+ weekItem.ItemNumber = item.number;
|
|
|
+ weekItem.Model = item.model;
|
|
|
+ weekItem.Languages = item.Languages;
|
|
|
+ weekItem.Qty = mes_Morder.morder_production_number.Value;
|
|
|
+ weekItem.ItemStatus = "";
|
|
|
+ weekItem.PlanKittingDate = DateTime.Now;
|
|
|
+ weekItem.Year = weekTime.Year;
|
|
|
+ weekItem.Month = weekTime.Month;
|
|
|
+ weekItem.WeekSeq = WeekOfMonth(weekTime, 1);
|
|
|
+ weekItem.PlanMonth = kMonth;
|
|
|
+ weekItem.tenant_id = input.tenant_id;
|
|
|
+ weekItem.factory_id = input.factory_id;
|
|
|
+ weekItem.company_id = input.company_id;
|
|
|
+ weekItem.org_id = input.org_id;
|
|
|
+ weekItem.create_time = DateTime.Now;
|
|
|
+ weekItem.DistributionChannel = item.distributionchannel;
|
|
|
+ weekItem.IsReplenishmentModel = "N";
|
|
|
+ if (item.area == "国内" || item.area == "中国")
|
|
|
+ {
|
|
|
+ weekItem.SterilizationDate = mes_Morder.moentry_sys_etime.Value;
|
|
|
+ weekItem.InStockDate = mes_Morder.moentry_sys_etime.Value.AddDays(days);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ weekItem.SterilizationDate = mes_Morder.moentry_sys_etime.Value;
|
|
|
+ weekItem.InStockDate = mes_Morder.moentry_sys_etime.Value.AddDays(days);
|
|
|
+ }
|
|
|
+ weekItem.AssembleHours = 0;
|
|
|
+ weekItem.HeatSealHours = 0;
|
|
|
+ weekItem.PackageHours = 0;
|
|
|
+ weekItem.TotalHours = 0;
|
|
|
+ //Q2023/11/15的需求同一周有相同物料的工单不继续生成,不考虑数量的偏差
|
|
|
+ if (!weekProductPlanList.Any(a => a.ItemNumber == item.number && a.Week == weekItem.Week))
|
|
|
+ {
|
|
|
+ weekPlan.Add(weekItem);
|
|
|
+ moList.Add(mes_Morder);
|
|
|
+ moentryList.Add(mes_Moentry);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }else
|
|
|
+ {
|
|
|
+ //小于还是按照生产批量生产
|
|
|
+ if (Math.Ceiling(itemQty.GetValueOrDefault()) < itemMaster.MinOrdSales)
|
|
|
+ {
|
|
|
+ //多生产的数量
|
|
|
+ minordsalesQty.Add(itemSeq, itemMaster.MinOrdSales - Math.Ceiling(itemQty.GetValueOrDefault()));
|
|
|
+ var bom = bomList.Find(b => b.item_number == itemSeq);
|
|
|
+ var ic_item = itemList.Find(b => b.number == itemSeq);
|
|
|
+ mes_morder mes_Morder = new mes_morder();
|
|
|
+ mes_Morder.GenerateNewId(help.NextId());
|
|
|
+ mes_Morder.morder_type = MorderEnum.JhMorder;
|
|
|
+ mes_Morder.work_order_type = MorderEnum.CgMorder;
|
|
|
+ mes_Morder.morder_state = "";
|
|
|
+ mes_Morder.morder_no = Guid.NewGuid().ToString();
|
|
|
+ mes_Morder.fms_number = ic_item.fms_number;
|
|
|
+ mes_Morder.bom_number = bom.bom_number;
|
|
|
+ mes_Morder.fmodel = ic_item.model;
|
|
|
+ mes_Morder.moentry_startup_status = 0;
|
|
|
+ mes_Morder.tenant_id = input.tenant_id;
|
|
|
+ mes_Morder.factory_id = input.factory_id;
|
|
|
+ mes_Morder.company_id = input.company_id;
|
|
|
+ mes_Morder.org_id = input.org_id;
|
|
|
+ mes_Morder.product_code = ic_item.number;
|
|
|
+ mes_Morder.product_name = ic_item.name;
|
|
|
+ mes_Morder.morder_date = DateTime.Now.Date.AddDays(1);
|
|
|
+ mes_Morder.moentry_prd = null;
|
|
|
+ mes_Morder.moentry_prdname = null;
|
|
|
+ mes_Morder.moentry_wrkc = null;
|
|
|
+ mes_Morder.moentry_wrkcname = null;
|
|
|
+ mes_Morder.picking_qty = 0;
|
|
|
+ mes_Morder.unit = ic_item.unit;
|
|
|
+ mes_Morder.morder_production_number = Math.Ceiling(itemMaster.MinOrdSales);
|
|
|
+ mes_Morder.need_number = Math.Ceiling(itemMaster.MinOrdSales);
|
|
|
+ //成品半成品取周一为入库时间开始往前推
|
|
|
+ mes_Morder.moentry_sys_stime = weekTime.AddDays(-ProductTime(routingOps, ic_item.number, input.factory_id.ToString(), mes_Morder.need_number.GetValueOrDefault()) - days);
|
|
|
+ mes_Morder.moentry_sys_etime = weekTime.AddDays(-days);
|
|
|
+ mes_Morder.remaining_number = 0;
|
|
|
+ mes_Morder.create_time = DateTime.Now;
|
|
|
+ mes_Morder.bang_id = bang_id;
|
|
|
+ //生成工单子表数据
|
|
|
+ mes_moentry mes_Moentry = new mes_moentry();
|
|
|
+ mes_Moentry.GenerateNewId(help.NextId());
|
|
|
+ mes_Moentry.moentry_moid = mes_Morder.Id;
|
|
|
+ mes_Moentry.moentry_mono = mes_Morder.morder_no;
|
|
|
+ mes_Moentry.unit = ic_item.unit;
|
|
|
+ mes_Moentry.morder_production_number = Math.Ceiling(itemMaster.MinOrdSales);
|
|
|
+ mes_Moentry.need_number = Math.Ceiling(itemMaster.MinOrdSales);
|
|
|
+ mes_Moentry.remaining_number = 0;
|
|
|
+ mes_Moentry.tenant_id = input.tenant_id;
|
|
|
+ mes_Moentry.factory_id = input.factory_id;
|
|
|
+ mes_Moentry.company_id = input.company_id;
|
|
|
+ mes_Moentry.org_id = input.org_id;
|
|
|
+ mes_Moentry.create_time = DateTime.Now;
|
|
|
+ mes_Moentry.bang_id = bang_id;
|
|
|
+
|
|
|
+ ReplenishmentWeekPlan weekItem = new ReplenishmentWeekPlan();
|
|
|
+ weekItem.Priority = 1;
|
|
|
+ weekItem.Area = item.area;
|
|
|
+ weekItem.PlanStartDate = mes_Morder.moentry_sys_stime.GetValueOrDefault();
|
|
|
+ weekItem.Week = $"WK{GetWeekOfYear(mes_Morder.moentry_sys_stime.Value).ToString("00")}";
|
|
|
+ weekItem.OrderNO = Guid.NewGuid().ToString();
|
|
|
+ weekItem.ProductionOrder = mes_Morder.morder_no;
|
|
|
+ weekItem.SAPOrderNO = "";
|
|
|
+ weekItem.OrderType = "量产";
|
|
|
+ weekItem.ProductionBatch = "";
|
|
|
+ weekItem.ProductionStatus = "";
|
|
|
+ weekItem.ProdLine = item.ProdLine;
|
|
|
+ weekItem.ProdRange = item.ProdRange;
|
|
|
+ weekItem.Line = monthPlanItem?.WorkshopLine;
|
|
|
+ weekItem.ItemNumber = item.number;
|
|
|
+ weekItem.Model = item.model;
|
|
|
+ weekItem.Languages = item.Languages;
|
|
|
+ weekItem.Qty = mes_Morder.morder_production_number.Value;
|
|
|
+ weekItem.ItemStatus = "";
|
|
|
+ weekItem.PlanKittingDate = DateTime.Now;
|
|
|
+ weekItem.Year = weekTime.Year;
|
|
|
+ weekItem.Month = weekTime.Month;
|
|
|
+ weekItem.WeekSeq = WeekOfMonth(weekTime, 1);
|
|
|
+ weekItem.PlanMonth = kMonth;
|
|
|
+ weekItem.tenant_id = input.tenant_id;
|
|
|
+ weekItem.factory_id = input.factory_id;
|
|
|
+ weekItem.company_id = input.company_id;
|
|
|
+ weekItem.org_id = input.org_id;
|
|
|
+ weekItem.create_time = DateTime.Now;
|
|
|
+ weekItem.DistributionChannel = item.distributionchannel;
|
|
|
+ weekItem.IsReplenishmentModel = "N";
|
|
|
+ if (item.area == "国内" || item.area == "中国")
|
|
|
+ {
|
|
|
+ weekItem.SterilizationDate = mes_Morder.moentry_sys_etime.Value;
|
|
|
+ weekItem.InStockDate = mes_Morder.moentry_sys_etime.Value.AddDays(days);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ weekItem.SterilizationDate = mes_Morder.moentry_sys_etime.Value;
|
|
|
+ weekItem.InStockDate = mes_Morder.moentry_sys_etime.Value.AddDays(days);
|
|
|
+ }
|
|
|
+ weekItem.AssembleHours = 0;
|
|
|
+ weekItem.HeatSealHours = 0;
|
|
|
+ weekItem.PackageHours = 0;
|
|
|
+ weekItem.TotalHours = 0;
|
|
|
+ //Q2023/11/15的需求同一周有相同物料的工单不继续生成,不考虑数量的偏差
|
|
|
+ if (!weekProductPlanList.Any(a => a.ItemNumber == item.number && a.Week == weekItem.Week))
|
|
|
+ {
|
|
|
+ weekPlan.Add(weekItem);
|
|
|
+ moList.Add(mes_Morder);
|
|
|
+ moentryList.Add(mes_Moentry);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ var bom = bomList.Find(b => b.item_number == itemSeq);
|
|
|
+ var ic_item = itemList.Find(b => b.number == itemSeq);
|
|
|
+ mes_morder mes_Morder = new mes_morder();
|
|
|
+ mes_Morder.GenerateNewId(help.NextId());
|
|
|
+ mes_Morder.morder_type = MorderEnum.JhMorder;
|
|
|
+ mes_Morder.work_order_type = MorderEnum.CgMorder;
|
|
|
+ mes_Morder.morder_state = "";
|
|
|
+ mes_Morder.morder_no = Guid.NewGuid().ToString();
|
|
|
+ mes_Morder.fms_number = ic_item.fms_number;
|
|
|
+ mes_Morder.bom_number = bom.bom_number;
|
|
|
+ mes_Morder.fmodel = ic_item.model;
|
|
|
+ mes_Morder.moentry_startup_status = 0;
|
|
|
+ mes_Morder.tenant_id = input.tenant_id;
|
|
|
+ mes_Morder.factory_id = input.factory_id;
|
|
|
+ mes_Morder.company_id = input.company_id;
|
|
|
+ mes_Morder.org_id = input.org_id;
|
|
|
+ mes_Morder.product_code = ic_item.number;
|
|
|
+ mes_Morder.product_name = ic_item.name;
|
|
|
+ mes_Morder.morder_date = DateTime.Now.Date.AddDays(1);
|
|
|
+ mes_Morder.moentry_prd = null;
|
|
|
+ mes_Morder.moentry_prdname = null;
|
|
|
+ mes_Morder.moentry_wrkc = null;
|
|
|
+ mes_Morder.moentry_wrkcname = null;
|
|
|
+ mes_Morder.picking_qty = 0;
|
|
|
+ mes_Morder.unit = ic_item.unit;
|
|
|
+ mes_Morder.morder_production_number = Math.Ceiling(itemQty.GetValueOrDefault());
|
|
|
+ mes_Morder.need_number = Math.Ceiling(itemQty.GetValueOrDefault());
|
|
|
+ //成品半成品取周一为入库时间开始往前推
|
|
|
+ mes_Morder.moentry_sys_stime = weekTime.AddDays(-ProductTime(routingOps, ic_item.number, input.factory_id.ToString(), mes_Morder.need_number.GetValueOrDefault()) - days);
|
|
|
+ mes_Morder.moentry_sys_etime = weekTime.AddDays(-days);
|
|
|
+ mes_Morder.remaining_number = 0;
|
|
|
+ mes_Morder.create_time = DateTime.Now;
|
|
|
+ mes_Morder.bang_id = bang_id;
|
|
|
+ //生成工单子表数据
|
|
|
+ mes_moentry mes_Moentry = new mes_moentry();
|
|
|
+ mes_Moentry.GenerateNewId(help.NextId());
|
|
|
+ mes_Moentry.moentry_moid = mes_Morder.Id;
|
|
|
+ mes_Moentry.moentry_mono = mes_Morder.morder_no;
|
|
|
+ mes_Moentry.unit = ic_item.unit;
|
|
|
+ mes_Moentry.morder_production_number = Math.Ceiling(itemQty.GetValueOrDefault());
|
|
|
+ mes_Moentry.need_number =Math.Ceiling(itemQty.GetValueOrDefault());
|
|
|
+ mes_Moentry.remaining_number = 0;
|
|
|
+ mes_Moentry.tenant_id = input.tenant_id;
|
|
|
+ mes_Moentry.factory_id = input.factory_id;
|
|
|
+ mes_Moentry.company_id = input.company_id;
|
|
|
+ mes_Moentry.org_id = input.org_id;
|
|
|
+ mes_Moentry.create_time = DateTime.Now;
|
|
|
+ mes_Moentry.bang_id = bang_id;
|
|
|
+
|
|
|
+ ReplenishmentWeekPlan weekItem = new ReplenishmentWeekPlan();
|
|
|
+ weekItem.Priority = 1;
|
|
|
+ weekItem.Area = item.area;
|
|
|
+ weekItem.PlanStartDate = mes_Morder.moentry_sys_stime.GetValueOrDefault();
|
|
|
+ weekItem.Week = $"WK{GetWeekOfYear(mes_Morder.moentry_sys_stime.Value).ToString("00")}";
|
|
|
+ weekItem.OrderNO = Guid.NewGuid().ToString();
|
|
|
+ weekItem.ProductionOrder = mes_Morder.morder_no;
|
|
|
+ weekItem.SAPOrderNO = "";
|
|
|
+ weekItem.OrderType = "量产";
|
|
|
+ weekItem.ProductionBatch = "";
|
|
|
+ weekItem.ProductionStatus = "";
|
|
|
+ weekItem.ProdLine = item.ProdLine;
|
|
|
+ weekItem.ProdRange = item.ProdRange;
|
|
|
+ weekItem.Line = monthPlanItem?.WorkshopLine;
|
|
|
+ weekItem.ItemNumber = item.number;
|
|
|
+ weekItem.Model = item.model;
|
|
|
+ weekItem.Languages = item.Languages;
|
|
|
+ weekItem.Qty = mes_Morder.morder_production_number.Value;
|
|
|
+ weekItem.ItemStatus = "";
|
|
|
+ weekItem.PlanKittingDate = DateTime.Now;
|
|
|
+ weekItem.Year = weekTime.Year;
|
|
|
+ weekItem.Month = weekTime.Month;
|
|
|
+ weekItem.WeekSeq = WeekOfMonth(weekTime, 1);
|
|
|
+ weekItem.PlanMonth = kMonth;
|
|
|
+ weekItem.tenant_id = input.tenant_id;
|
|
|
+ weekItem.factory_id = input.factory_id;
|
|
|
+ weekItem.company_id = input.company_id;
|
|
|
+ weekItem.org_id = input.org_id;
|
|
|
+ weekItem.create_time = DateTime.Now;
|
|
|
+ weekItem.DistributionChannel = item.distributionchannel;
|
|
|
+ weekItem.IsReplenishmentModel = "N";
|
|
|
+ if (item.area == "国内" || item.area == "中国")
|
|
|
+ {
|
|
|
+ weekItem.SterilizationDate = mes_Morder.moentry_sys_etime.Value;
|
|
|
+ weekItem.InStockDate = mes_Morder.moentry_sys_etime.Value.AddDays(days);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ weekItem.SterilizationDate = mes_Morder.moentry_sys_etime.Value;
|
|
|
+ weekItem.InStockDate = mes_Morder.moentry_sys_etime.Value.AddDays(days);
|
|
|
+ }
|
|
|
+ weekItem.AssembleHours = 0;
|
|
|
+ weekItem.HeatSealHours = 0;
|
|
|
+ weekItem.PackageHours = 0;
|
|
|
+ weekItem.TotalHours = 0;
|
|
|
+ //Q2023/11/15的需求同一周有相同物料的工单不继续生成,不考虑数量的偏差
|
|
|
+ if (!weekProductPlanList.Any(a => a.ItemNumber == item.number && a.Week == weekItem.Week))
|
|
|
+ {
|
|
|
+ weekPlan.Add(weekItem);
|
|
|
+ moList.Add(mes_Morder);
|
|
|
+ moentryList.Add(mes_Moentry);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ if (itemQty > 0)
|
|
|
{
|
|
|
//四周数量合并,完工日期取第三周的时间
|
|
|
- if(k<=3)
|
|
|
+ if (k<=3)
|
|
|
{
|
|
|
var MonthMo = moList.Find(a => a.product_code == itemSeq && (
|
|
|
a.moentry_sys_etime == GetNextMonday().AddDays(28).AddDays(-days) ||
|
|
|
@@ -2598,17 +2968,25 @@ namespace Business.Replenishment
|
|
|
var middleItemList = _itemMaster.Select(a => subProductItem.Keys.Contains(a.ItemNum) && a.Domain == input.factory_id.ToString());
|
|
|
foreach (var key in subProductItem.Keys)
|
|
|
{
|
|
|
- var itemQty = subProductItem[key];
|
|
|
- var middleItem = middleItemList.Find(m => m.ItemNum == key).MinOrdSales;
|
|
|
- if (middleItem == 0)
|
|
|
- middleItem = 10000;
|
|
|
- if (itemQty < middleItem)
|
|
|
+ var itemQty = subProductItem[key]/3;
|
|
|
+ var middle = middleItemList.Find(m => m.ItemNum == key);
|
|
|
+ var middleItem = middle.MinOrdSales;
|
|
|
+ if(middleItem > 0)
|
|
|
{
|
|
|
- itemQty = middleItem;
|
|
|
+ if (itemQty < middleItem)
|
|
|
+ itemQty = middleItem;
|
|
|
+ if (middle.ItemType == "RS30" && middle.PurMfg == "L" && middle.OrdMult > 0)
|
|
|
+ {
|
|
|
+ itemQty = Math.Ceiling(Math.Ceiling(itemQty.GetValueOrDefault() / middle.OrdMult) * middle.OrdMult);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ itemQty = Math.Ceiling(itemQty.GetValueOrDefault());
|
|
|
+ }
|
|
|
}
|
|
|
- else if (middleItem > 0)
|
|
|
+ else
|
|
|
{
|
|
|
- itemQty = Math.Ceiling(Math.Ceiling(itemQty.GetValueOrDefault()/ (3*middleItem)) * middleItem);
|
|
|
+ itemQty = Math.Ceiling(itemQty.GetValueOrDefault());
|
|
|
}
|
|
|
if(!weeksubPlanList.Any(a=>a.ItemNumber== subProductItemModel[key].item_number && a.PlanMonth== kMonth))
|
|
|
{
|
|
|
@@ -4770,18 +5148,17 @@ namespace Business.Replenishment
|
|
|
List<mes_moentry> moentryList = new List<mes_moentry>();
|
|
|
var list = _serialNumberAppService.GetBillNo(input.factory_id.ToString(), "M5", productList.Count(), "", 1);
|
|
|
long bangid = help.NextId();
|
|
|
+
|
|
|
+
|
|
|
for (int i = 0;i< productList.Count();i++)
|
|
|
{
|
|
|
- if (productList[i].Qty < 0)
|
|
|
+ if (productList[i].Qty<=0)
|
|
|
continue;
|
|
|
var ic_item = mesItem.Find(x => x.ItemNum == productList[i].SAPItemNumber);
|
|
|
var bom = bomList.Find(a => a.item_number == productList[i].SAPItemNumber);
|
|
|
- ////if (ic_item.PurLT < ropParam.LongPeriodDay)
|
|
|
- //// continue;
|
|
|
mes_morder mes_Morder = new mes_morder();
|
|
|
mes_Morder.GenerateNewId(help.NextId());
|
|
|
mes_Morder.morder_type = MorderEnum.JhMorder;
|
|
|
- //mes_Morder.morder_icitem_type
|
|
|
mes_Morder.work_order_type = MorderEnum.CgMorder;
|
|
|
mes_Morder.morder_state ="";
|
|
|
mes_Morder.morder_no = list[i].NbrResult.ToString();
|
|
|
@@ -4798,14 +5175,11 @@ namespace Business.Replenishment
|
|
|
mes_Morder.product_name = ic_item.Descr;
|
|
|
mes_Morder.morder_date = DateTime.Now.Date.AddDays(1);
|
|
|
mes_Morder.moentry_sys_stime= Convert.ToDateTime(productList[i].PlanMonth + "-01");
|
|
|
- //mes_Morder.morder_fstate = "计划";
|
|
|
- //TODO:目前没有取值位置
|
|
|
mes_Morder.moentry_prd = null;
|
|
|
mes_Morder.moentry_prdname = null;
|
|
|
mes_Morder.moentry_wrkc = null;
|
|
|
mes_Morder.moentry_wrkcname = null;
|
|
|
mes_Morder.picking_qty = 0;
|
|
|
- //TODO:可删除主表字段
|
|
|
mes_Morder.unit = ic_item.UM;
|
|
|
mes_Morder.morder_production_number = productList[i].Qty;
|
|
|
mes_Morder.need_number = productList[i].Qty;
|
|
|
@@ -4832,6 +5206,7 @@ namespace Business.Replenishment
|
|
|
//长周期物料只产生PR不生成实际工单
|
|
|
//await _mysql_mes_morder.InsertManyAsync(moList);
|
|
|
//await _mysql_mes_moentry.InsertManyAsync(moentryList);
|
|
|
+ moList = moList.OrderBy(a => a.moentry_sys_etime).ToList();
|
|
|
await PlanOrderResourceCheck(moList,moentryList, bangid,input);
|
|
|
return "OK";
|
|
|
}
|