Quellcode durchsuchen

周计划合并工单

Murphy vor 2 Jahren
Ursprung
Commit
62b45073c8

+ 753 - 117
MicroServices/Business/Business.Application/ReplenishmentManagement/ReplenishmentAppService.cs

@@ -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());

+ 1 - 1
MicroServices/Business/Business.Host/Business.Host.csproj

@@ -9,7 +9,7 @@
   </PropertyGroup>
 
   <ItemGroup>
-	 <PackageReference Include="Huffey.Quartz.MUI" Version="1.0.4" />
+	 <PackageReference Include="Huffey.Quartz.MUI" Version="1.0.5" />
 	 <PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="6.0.3" />
     <PackageReference Include="Microsoft.AspNetCore.DataProtection.StackExchangeRedis" Version="6.0.3" />
     <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="6.0.5">