|
|
@@ -1782,13 +1782,177 @@ 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.GetValueOrDefault().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);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
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();
|
|
|
+ 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);
|
|
|
@@ -1805,129 +1969,445 @@ namespace Business.Replenishment
|
|
|
{
|
|
|
days = 8;
|
|
|
}
|
|
|
- if (itemQty > 0)
|
|
|
+ if (itemQty > 0 && !pcpl.Contains(itemSeq))
|
|
|
{
|
|
|
- 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 == "中国")
|
|
|
+ //四周数量合并,完工日期取第三周的时间
|
|
|
+ if(k<=3)
|
|
|
+ {
|
|
|
+ var MonthMo = moList.Find(a => a.product_code == itemSeq && (
|
|
|
+ a.moentry_sys_etime == GetNextMonday().AddDays(28) ||
|
|
|
+ a.moentry_sys_etime == GetNextMonday().AddDays(28 + 7) ||
|
|
|
+ a.moentry_sys_etime == GetNextMonday().AddDays(28 + 14) ||
|
|
|
+ a.moentry_sys_etime == GetNextMonday().AddDays(28 + 21)));
|
|
|
+ if (MonthMo != null)
|
|
|
+ {
|
|
|
+ MonthMo.morder_production_number += Math.Ceiling(itemQty.GetValueOrDefault() / 4);
|
|
|
+ MonthMo.need_number += Math.Ceiling(itemQty.GetValueOrDefault() / 4);
|
|
|
+ MonthMo.moentry_sys_stime = GetNextMonday().AddDays(28).AddDays(14).AddDays(-ProductTime(routingOps, MonthMo.product_code, input.factory_id.ToString(), MonthMo.need_number.GetValueOrDefault()) - days);
|
|
|
+ MonthMo.moentry_sys_etime = GetNextMonday().AddDays(28).AddDays(14).AddDays(-days);
|
|
|
+
|
|
|
+ moentryList.Find(a=>a.moentry_mono==MonthMo.morder_no).morder_production_number += Math.Ceiling(itemQty.GetValueOrDefault() / 4);
|
|
|
+ moentryList.Find(a => a.moentry_mono == MonthMo.morder_no).need_number += Math.Ceiling(itemQty.GetValueOrDefault() / 4);
|
|
|
+ weekPlan.Find(a => a.ProductionOrder == MonthMo.morder_no).PlanStartDate = MonthMo.moentry_sys_stime;
|
|
|
+ weekPlan.Find(a => a.ProductionOrder == MonthMo.morder_no).Week = $"WK{GetWeekOfYear(MonthMo.moentry_sys_stime.Value).ToString("00")}";
|
|
|
+ weekPlan.Find(a => a.ProductionOrder == MonthMo.morder_no).Qty = MonthMo.morder_production_number.Value;
|
|
|
+ weekPlan.Find(a => a.ProductionOrder == MonthMo.morder_no).Year = GetNextMonday().AddDays(28).AddDays(14).Year;
|
|
|
+ weekPlan.Find(a => a.ProductionOrder == MonthMo.morder_no).Month = GetNextMonday().AddDays(28).AddDays(14).Month;
|
|
|
+ weekPlan.Find(a => a.ProductionOrder == MonthMo.morder_no).WeekSeq = WeekOfMonth(GetNextMonday().AddDays(28).AddDays(14), 1);
|
|
|
+ weekPlan.Find(a => a.ProductionOrder == MonthMo.morder_no).PlanMonth = $"{GetNextMonday().AddDays(28).AddDays(14).Year}-{GetNextMonday().AddDays(28).AddDays(14).Month.ToString("00")}";
|
|
|
+ if (item.area == "国内" || item.area == "中国")
|
|
|
+ {
|
|
|
+ weekPlan.Find(a => a.ProductionOrder == MonthMo.morder_no).SterilizationDate = MonthMo.moentry_sys_etime.Value;
|
|
|
+ weekPlan.Find(a => a.ProductionOrder == MonthMo.morder_no).InStockDate = MonthMo.moentry_sys_etime.Value.AddDays(days);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ weekPlan.Find(a => a.ProductionOrder == MonthMo.morder_no).SterilizationDate = MonthMo.moentry_sys_etime.Value;
|
|
|
+ weekPlan.Find(a => a.ProductionOrder == MonthMo.morder_no).InStockDate = MonthMo.moentry_sys_etime.Value.AddDays(days);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ 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() / 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);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else if(k<=7)
|
|
|
{
|
|
|
- weekItem.SterilizationDate = mes_Morder.moentry_sys_etime.Value;
|
|
|
- weekItem.InStockDate = mes_Morder.moentry_sys_etime.Value.AddDays(days);
|
|
|
+ var MonthMo = moList.Find(a => a.product_code == itemSeq && (
|
|
|
+ a.moentry_sys_etime == GetNextMonday().AddDays(28+28) ||
|
|
|
+ a.moentry_sys_etime == GetNextMonday().AddDays(28 +35) ||
|
|
|
+ a.moentry_sys_etime == GetNextMonday().AddDays(28 + 42) ||
|
|
|
+ a.moentry_sys_etime == GetNextMonday().AddDays(28 + 49)));
|
|
|
+ if (MonthMo != null)
|
|
|
+ {
|
|
|
+ MonthMo.morder_production_number += Math.Ceiling(itemQty.GetValueOrDefault() / 4);
|
|
|
+ MonthMo.need_number += Math.Ceiling(itemQty.GetValueOrDefault() / 4);
|
|
|
+ MonthMo.moentry_sys_stime = GetNextMonday().AddDays(28).AddDays(42).AddDays(-ProductTime(routingOps, MonthMo.product_code, input.factory_id.ToString(), MonthMo.need_number.GetValueOrDefault()) - days);
|
|
|
+ MonthMo.moentry_sys_etime = GetNextMonday().AddDays(28).AddDays(42).AddDays(-days);
|
|
|
+
|
|
|
+ moentryList.Find(a => a.moentry_mono == MonthMo.morder_no).morder_production_number += Math.Ceiling(itemQty.GetValueOrDefault() / 4);
|
|
|
+ moentryList.Find(a => a.moentry_mono == MonthMo.morder_no).need_number += Math.Ceiling(itemQty.GetValueOrDefault() / 4);
|
|
|
+ weekPlan.Find(a => a.ProductionOrder == MonthMo.morder_no).PlanStartDate = MonthMo.moentry_sys_stime;
|
|
|
+ weekPlan.Find(a => a.ProductionOrder == MonthMo.morder_no).Week = $"WK{GetWeekOfYear(MonthMo.moentry_sys_stime.Value).ToString("00")}";
|
|
|
+ weekPlan.Find(a => a.ProductionOrder == MonthMo.morder_no).Qty = MonthMo.morder_production_number.Value;
|
|
|
+ weekPlan.Find(a => a.ProductionOrder == MonthMo.morder_no).Year = GetNextMonday().AddDays(28).AddDays(42).Year;
|
|
|
+ weekPlan.Find(a => a.ProductionOrder == MonthMo.morder_no).Month = GetNextMonday().AddDays(28).AddDays(42).Month;
|
|
|
+ weekPlan.Find(a => a.ProductionOrder == MonthMo.morder_no).WeekSeq = WeekOfMonth(GetNextMonday().AddDays(28).AddDays(42), 1);
|
|
|
+ weekPlan.Find(a => a.ProductionOrder == MonthMo.morder_no).PlanMonth = $"{GetNextMonday().AddDays(28).AddDays(42).Year}-{GetNextMonday().AddDays(28).AddDays(42).Month.ToString("00")}";
|
|
|
+ if (item.area == "国内" || item.area == "中国")
|
|
|
+ {
|
|
|
+ weekPlan.Find(a => a.ProductionOrder == MonthMo.morder_no).SterilizationDate = MonthMo.moentry_sys_etime.Value;
|
|
|
+ weekPlan.Find(a => a.ProductionOrder == MonthMo.morder_no).InStockDate = MonthMo.moentry_sys_etime.Value.AddDays(days);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ weekPlan.Find(a => a.ProductionOrder == MonthMo.morder_no).SterilizationDate = MonthMo.moentry_sys_etime.Value;
|
|
|
+ weekPlan.Find(a => a.ProductionOrder == MonthMo.morder_no).InStockDate = MonthMo.moentry_sys_etime.Value.AddDays(days);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ 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() / 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);
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- weekItem.SterilizationDate = mes_Morder.moentry_sys_etime.Value;
|
|
|
- weekItem.InStockDate = mes_Morder.moentry_sys_etime.Value.AddDays(days);
|
|
|
+ var MonthMo = moList.Find(a => a.product_code == itemSeq && (
|
|
|
+ a.moentry_sys_etime == GetNextMonday().AddDays(28 + 56) ||
|
|
|
+ a.moentry_sys_etime == GetNextMonday().AddDays(28 + 63) ||
|
|
|
+ a.moentry_sys_etime == GetNextMonday().AddDays(28 + 70) ||
|
|
|
+ a.moentry_sys_etime == GetNextMonday().AddDays(28 + 77)));
|
|
|
+ if (MonthMo != null)
|
|
|
+ {
|
|
|
+ MonthMo.morder_production_number += Math.Ceiling(itemQty.GetValueOrDefault() / 4);
|
|
|
+ MonthMo.need_number += Math.Ceiling(itemQty.GetValueOrDefault() / 4);
|
|
|
+ MonthMo.moentry_sys_stime = GetNextMonday().AddDays(28).AddDays(70).AddDays(-ProductTime(routingOps, MonthMo.product_code, input.factory_id.ToString(), MonthMo.need_number.GetValueOrDefault()) - days);
|
|
|
+ MonthMo.moentry_sys_etime = GetNextMonday().AddDays(28).AddDays(70).AddDays(-days);
|
|
|
+
|
|
|
+ moentryList.Find(a => a.moentry_mono == MonthMo.morder_no).morder_production_number += Math.Ceiling(itemQty.GetValueOrDefault() / 4);
|
|
|
+ moentryList.Find(a => a.moentry_mono == MonthMo.morder_no).need_number += Math.Ceiling(itemQty.GetValueOrDefault() / 4);
|
|
|
+ weekPlan.Find(a => a.ProductionOrder == MonthMo.morder_no).PlanStartDate = MonthMo.moentry_sys_stime;
|
|
|
+ weekPlan.Find(a => a.ProductionOrder == MonthMo.morder_no).Week = $"WK{GetWeekOfYear(MonthMo.moentry_sys_stime.Value).ToString("00")}";
|
|
|
+ weekPlan.Find(a => a.ProductionOrder == MonthMo.morder_no).Qty = MonthMo.morder_production_number.Value;
|
|
|
+ weekPlan.Find(a => a.ProductionOrder == MonthMo.morder_no).Year = GetNextMonday().AddDays(28).AddDays(70).Year;
|
|
|
+ weekPlan.Find(a => a.ProductionOrder == MonthMo.morder_no).Month = GetNextMonday().AddDays(28).AddDays(70).Month;
|
|
|
+ weekPlan.Find(a => a.ProductionOrder == MonthMo.morder_no).WeekSeq = WeekOfMonth(GetNextMonday().AddDays(28).AddDays(70), 1);
|
|
|
+ weekPlan.Find(a => a.ProductionOrder == MonthMo.morder_no).PlanMonth = $"{GetNextMonday().AddDays(28).AddDays(70).Year}-{GetNextMonday().AddDays(28).AddDays(70).Month.ToString("00")}";
|
|
|
+ if (item.area == "国内" || item.area == "中国")
|
|
|
+ {
|
|
|
+ weekPlan.Find(a => a.ProductionOrder == MonthMo.morder_no).SterilizationDate = MonthMo.moentry_sys_etime.Value;
|
|
|
+ weekPlan.Find(a => a.ProductionOrder == MonthMo.morder_no).InStockDate = MonthMo.moentry_sys_etime.Value.AddDays(days);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ weekPlan.Find(a => a.ProductionOrder == MonthMo.morder_no).SterilizationDate = MonthMo.moentry_sys_etime.Value;
|
|
|
+ weekPlan.Find(a => a.ProductionOrder == MonthMo.morder_no).InStockDate = MonthMo.moentry_sys_etime.Value.AddDays(days);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ 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() / 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);
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
- 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))
|
|
|
+ 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)
|
|
|
{
|
|
|
- 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 (r.item_number != itemSeq && r.erp_cls == 1 && !string.IsNullOrEmpty(r.bom_number))
|
|
|
+ if (subProductItem.ContainsKey(r.item_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);
|
|
|
- }
|
|
|
+ subProductItem[r.item_number] += r.needCount;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ subProductItem.Add(r.item_number, r.needCount);
|
|
|
+ subProductItemModel.Add(r.item_number, r);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
@@ -1935,6 +2415,162 @@ namespace Business.Replenishment
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+ #region
|
|
|
+ //滚动12周逻辑保留
|
|
|
+ //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);
|
|
|
+ // //瑞奇国科海王
|
|
|
+ // var monthPlanTotal = monthWeekPlan.Where(x => x.number == itemSeq).ToList();
|
|
|
+ // if (monthPlanTotal != null && monthPlanTotal.Count > 0)
|
|
|
+ // {
|
|
|
+ // var item = monthPlanTotal[0];
|
|
|
+ // //瑞奇补货计划!Y5 + 瑞奇补货计划!Z5 + 国科补货计划!Y5 + 国科补货计划!Z5 + 海王补货计划!Y4 + 海王补货计划!Z4
|
|
|
+ // var itemQty = monthPlanTotal.Sum(a => a.montheop1) + monthPlanTotal.Sum(a => a.montheop2);
|
|
|
+ // //每次都是发布12周,每个月4周,不用判断存不存在(退市的可能没有)
|
|
|
+ // int days = 15;
|
|
|
+ // if (item.area != "国内" && item.area != "中国")
|
|
|
+ // {
|
|
|
+ // days = 8;
|
|
|
+ // }
|
|
|
+ // if (itemQty > 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);
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ //}
|
|
|
+ #endregion
|
|
|
List<string> subItems = new List<string>();
|
|
|
for (int j = 0; j < 3; j++)
|
|
|
{
|
|
|
@@ -2083,7 +2719,7 @@ namespace Business.Replenishment
|
|
|
weekPlan[i].ProductionOrder = morder_noList[i].NbrResult;
|
|
|
weekPlan[i].OrderNO = OrderNOList[i].NbrResult;
|
|
|
}
|
|
|
- await PlanOrderResourceCheck(moList, moentryList, bang_id, input);
|
|
|
+ await PlanOrderResourceCheck(moList.OrderBy(a=>a.moentry_sys_etime).ToList(), moentryList, bang_id, input);
|
|
|
|
|
|
var examine_resultList = _mysql_examine_result.GetListAsync(a => a.bangid == bang_id).Result;
|
|
|
await _businessDbContext.BulkInsertAsync(moList);
|
|
|
@@ -4091,7 +4727,7 @@ namespace Business.Replenishment
|
|
|
var ropParam = GetROPParam(input.factory_id.ToString());
|
|
|
//获取滚动未来六个月数据
|
|
|
var monthlist = GetYearPlanMonth(input.year);
|
|
|
- var productList = _replenishmentAnnualProduction.GetListAsync(a => monthlist.Contains(a.PlanMonth) && !a.IsDeleted && a.factory_id == input.factory_id).Result.OrderBy(s=>s.OrderNum).ToList();
|
|
|
+ var productList = _replenishmentAnnualProduction.GetListAsync(a => monthlist.Contains(a.PlanMonth) && !a.IsDeleted && a.factory_id == input.factory_id).Result.OrderBy(s=>s.PlanMonth).ThenBy(s=>s.OrderNum).ToList();
|
|
|
var itemList= productList.Select(a=>a.SAPItemNumber).Distinct().ToList();
|
|
|
var planList=_mysql_ic_item.GetListAsync(a=>itemList.Contains(a.number) && a.factory_id==input.factory_id && !a.IsDeleted).Result.ToList();
|
|
|
var mesItem=_itemMaster.Select(a => itemList.Contains(a.ItemNum) &&a.IsActive && a.Domain==input.factory_id.ToString());
|