|
|
@@ -658,6 +658,12 @@ namespace Business.Replenishment
|
|
|
input.year = DateTime.Now.Year;
|
|
|
input.month = DateTime.Now.Month;
|
|
|
}
|
|
|
+ //每年10月份做下一年的销售预测
|
|
|
+ if (DateTime.Now.Month >= 10)
|
|
|
+ {
|
|
|
+ input.year = DateTime.Now.AddYears(1).Year;
|
|
|
+ input.month = DateTime.Now.Month;
|
|
|
+ }
|
|
|
//计算当前年月的N0,N+1,N+2
|
|
|
List<string> planMons = GetPlanMonth(4);
|
|
|
List<ProductionMasterPlan> productionMasters= new List<ProductionMasterPlan>();
|
|
|
@@ -688,7 +694,7 @@ namespace Business.Replenishment
|
|
|
var productionMasterPlan = _productionMasterPlan.GetListAsync(x => planMons.Contains(x.PlanMonth) && !x.IsDeleted && x.factory_id == input.factory_id).Result.OrderBy(p => p.PlanMonth).ThenBy(o => o.OrderNum).ToList();
|
|
|
List<InvMaster> locations = _invMaster.Select(x => annualProduction.Select(m => m.SAPItemNumber).Contains(x.ItemNum) && x.Domain == input.factory_id.ToString() && x.IsActive).ToList();
|
|
|
var InProdcutQty=GetInProdcutQty(annualProduction.Select(m => m.SAPItemNumber).ToList(),input);
|
|
|
- var itemStock = CalcStock(annualProduction.Select(m => m.SAPItemNumber).ToList(),input);
|
|
|
+ var itemStock = CalcStock(annualProduction.Select(m => m.SAPItemNumber).Distinct().ToList(),input);
|
|
|
//主生产计划渠道合并,只考虑瑞奇库存不考虑国科海王库存
|
|
|
List<MonthlyShipmentPlan> shipList = new List<MonthlyShipmentPlan>();
|
|
|
foreach (var item in annualProduction)
|
|
|
@@ -1221,7 +1227,7 @@ namespace Business.Replenishment
|
|
|
//先计算成品
|
|
|
planList?.Where(s => s.PlanMonth == itemMonth).ToList()?.ForEach(a =>
|
|
|
{
|
|
|
- var icItem = itemProductList.Find(s => s.number == a.SAPItemNumber);
|
|
|
+ var icItem = itemProductList.Find(p => p.number == a.SAPItemNumber);
|
|
|
if (icItem != null)
|
|
|
{
|
|
|
bool isExist = ropModelList.Find(r => r.planmonth == itemMonth && r.number == a.SAPItemNumber &&r.distributionchannel==a.DistributionChannel) == null ? false : true;
|
|
|
@@ -1229,6 +1235,10 @@ namespace Business.Replenishment
|
|
|
if (isExist)
|
|
|
{
|
|
|
rop = ropModelList.Find(r => r.planmonth == itemMonth && r.number == a.SAPItemNumber &&r.distributionchannel==a.DistributionChannel);
|
|
|
+ if(rop.Id== 1838608575099491266)
|
|
|
+ {
|
|
|
+ string test = itemMonth;
|
|
|
+ }
|
|
|
}
|
|
|
rop.number = a.SAPItemNumber;
|
|
|
rop.name = icItem.name;
|
|
|
@@ -1421,6 +1431,10 @@ namespace Business.Replenishment
|
|
|
if (isExist)
|
|
|
{
|
|
|
rop = ropModelList.Find(r => r.planmonth == itemMonth && r.number == d.ItemNumber && r.distributionchannel == "瑞奇");
|
|
|
+ if (rop.Id == 1838608575099491266)
|
|
|
+ {
|
|
|
+ string test = itemMonth;
|
|
|
+ }
|
|
|
}
|
|
|
rop.number = d.ItemNumber;
|
|
|
rop.name = icItem.name;
|
|
|
@@ -1610,7 +1624,7 @@ namespace Business.Replenishment
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
- /// 根据月计划生产周计划
|
|
|
+ /// 根据月度计划生成周计划
|
|
|
/// </summary>
|
|
|
/// <param name="input"></param>
|
|
|
/// <returns></returns>
|
|
|
@@ -1730,8 +1744,8 @@ namespace Business.Replenishment
|
|
|
//周补货计划只计算成品,不需要到原材料
|
|
|
if (planItemList.Contains(item.number))
|
|
|
{
|
|
|
- int publishedWeekCount = weekPlanList.Where(a => a.PlanMonth == kMonth && a.ItemNumber == item.number && a.ProductionStatus == "已发布" && a.DistributionChannel == item.distributionchannel).Count();
|
|
|
- decimal publishedWeekQtySum = weekPlanList.Where(a => a.PlanMonth == kMonth && a.ItemNumber == item.number && a.ProductionStatus == "已发布" && a.DistributionChannel == item.distributionchannel).Sum(a => a.Qty);
|
|
|
+ int publishedWeekCount = weekProductPlanList.Where(a => a.PlanMonth == kMonth && a.ItemNumber == item.number && a.ProductionStatus == "已发布" && a.DistributionChannel == item.distributionchannel).Count();
|
|
|
+ decimal publishedWeekQtySum = weekProductPlanList.Where(a => a.PlanMonth == kMonth && a.ItemNumber == item.number && a.ProductionStatus == "已发布" && a.DistributionChannel == item.distributionchannel).Sum(a => a.Qty);
|
|
|
var weekItemPlan = weekPlanList.Find(a => a.PlanMonth == kMonth && a.ItemNumber == item.number && a.WeekSeq == WeekOfMonth(weekPlanTime, 1) && a.DistributionChannel == item.distributionchannel);
|
|
|
if (weekItemPlan != null)
|
|
|
{
|
|
|
@@ -1769,61 +1783,6 @@ namespace Business.Replenishment
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- #region
|
|
|
- //for (int k = 0; k < replenishmentDto.SaleFcstMonth+1; k++)
|
|
|
- //{
|
|
|
- // //如果该10月有发布的2周生产计划,则周补货量=10月补货量-已发布的2周生产计划数量/剩余周次(2)
|
|
|
- // string kMonth = $"{DateTime.Now.AddMonths(k+1).Year}-{DateTime.Now.AddMonths(k+1).Month.ToString("00")}";
|
|
|
- // var monthWeekPlan = planList.Where(a => a.planmonth == kMonth).ToList();
|
|
|
- // foreach (var item in monthWeekPlan)
|
|
|
- // {
|
|
|
- // //周补货计划只计算成品,不需要到原材料
|
|
|
- // if(planItemList.Contains(item.number))
|
|
|
- // {
|
|
|
- // int publishedWeekCount = weekPlanList.Where(a => a.PlanMonth == kMonth && a.ItemNumber == item.number && a.ProductionStatus == "已发布" && a.DistributionChannel == item.distributionchannel).Count();
|
|
|
- // decimal publishedWeekQtySum = weekPlanList.Where(a => a.PlanMonth == kMonth && a.ItemNumber == item.number && a.ProductionStatus == "已发布" && a.DistributionChannel == item.distributionchannel).Sum(a => a.Qty);
|
|
|
- // //每次都是发布12周,每个月4周,不用判断存不存在(退市的可能没有)
|
|
|
- // for (int w = 0; w < 4; w++)
|
|
|
- // {
|
|
|
- // var weekItemPlan = weekPlanList.Find(a => a.PlanMonth == kMonth && a.ItemNumber == item.number && a.WeekSeq == w && a.DistributionChannel == item.distributionchannel);
|
|
|
- // if (weekItemPlan != null)
|
|
|
- // {
|
|
|
- // if (weekItemPlan.ProductionStatus != "已发布" && publishedWeekCount < 4)
|
|
|
- // {
|
|
|
- // weekItemPlan.Qty = Math.Ceiling((item.montheop1.GetValueOrDefault() + item.montheop2.GetValueOrDefault() - publishedWeekQtySum) / (4 - publishedWeekCount));
|
|
|
- // updateRopList.Add(weekItemPlan);
|
|
|
- // }
|
|
|
- // }
|
|
|
- // else if (publishedWeekCount < 4)
|
|
|
- // {
|
|
|
- // ReplenishmentWeekPlan weekItemPlanAdd = new ReplenishmentWeekPlan();
|
|
|
- // weekItemPlanAdd.Area = item.area;
|
|
|
- // weekItemPlanAdd.Week = $"WK{GetWeekOfYear(DateTime.Now.AddDays(1 - DateTime.Now.Day).AddMonths(k+1).AddDays(7 * (w))).ToString("00")}";
|
|
|
- // weekItemPlanAdd.DistributionChannel = item.distributionchannel;
|
|
|
- // weekItemPlanAdd.ProdLine = item.ProdLine;
|
|
|
- // weekItemPlanAdd.ProdRange = item.ProdRange;
|
|
|
- // weekItemPlanAdd.Model = item.model;
|
|
|
- // weekItemPlanAdd.ItemNumber = item.number;
|
|
|
- // weekItemPlanAdd.Languages = item.Languages;
|
|
|
- // weekItemPlanAdd.Qty = Math.Ceiling((item.montheop1.GetValueOrDefault() + item.montheop2.GetValueOrDefault() - publishedWeekQtySum) / (4 - publishedWeekCount));
|
|
|
- // weekItemPlanAdd.Year = DateTime.Now.AddMonths(k+1).Year;
|
|
|
- // weekItemPlanAdd.Month = DateTime.Now.AddMonths(k+1).Month;
|
|
|
- // weekItemPlanAdd.PlanMonth = $"{DateTime.Now.AddMonths(k +1).Year}-{DateTime.Now.AddMonths(k+1 ).Month.ToString("00")}"; ;
|
|
|
- // weekItemPlanAdd.WeekSeq = w;
|
|
|
- // weekItemPlanAdd.tenant_id = input.tenant_id;
|
|
|
- // weekItemPlanAdd.company_id = input.company_id;
|
|
|
- // weekItemPlanAdd.factory_id = input.factory_id;
|
|
|
- // weekItemPlanAdd.create_time = DateTime.Now;
|
|
|
- // weekItemPlanAdd.org_id = input.org_id;
|
|
|
- // weekItemPlanAdd.ItemStatus = "";
|
|
|
- // weekItemPlanAdd.IsReplenishmentModel = "Y";
|
|
|
- // addRopList.Add(weekItemPlanAdd);
|
|
|
- // }
|
|
|
- // }
|
|
|
- // }
|
|
|
- // }
|
|
|
- //}
|
|
|
- #endregion
|
|
|
await _businessDbContext.BulkInsertAsync(addRopList);
|
|
|
await _businessDbContext.BulkInsertAsync(updateRopList);
|
|
|
|
|
|
@@ -1839,7 +1798,7 @@ namespace Business.Replenishment
|
|
|
Dictionary<string, BomChildExamineDto> subProductItemModel = new Dictionary<string, BomChildExamineDto>();
|
|
|
for (int k = 0; k < 12; k++)
|
|
|
{
|
|
|
- var weekTime = GetNextMonday().AddMonths(1);
|
|
|
+ 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();
|
|
|
@@ -1958,30 +1917,34 @@ namespace Business.Replenishment
|
|
|
weekItem.HeatSealHours = 0;
|
|
|
weekItem.PackageHours = 0;
|
|
|
weekItem.TotalHours = 0;
|
|
|
- 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))
|
|
|
+ //Q2023/11/15的需求同一周有相同物料的工单不继续生成,不考虑数量的偏差
|
|
|
+ if(!weekProductPlanList.Any(a=>a.ItemNumber==item.number && a.Week== weekItem.Week))
|
|
|
{
|
|
|
- if (subProductItem.ContainsKey(r.item_number))
|
|
|
- {
|
|
|
- subProductItem[r.item_number] += r.needCount;
|
|
|
- }
|
|
|
- else
|
|
|
+ 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)
|
|
|
{
|
|
|
- subProductItem.Add(r.item_number, r.needCount);
|
|
|
- subProductItemModel.Add(r.item_number, r);
|
|
|
+ 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);
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
@@ -1992,7 +1955,7 @@ namespace Business.Replenishment
|
|
|
List<string> subItems = new List<string>();
|
|
|
for (int j = 0; j < 4; j++)
|
|
|
{
|
|
|
- var jweekTime = GetNextMonday().AddMonths(1);
|
|
|
+ var jweekTime = GetNextMonday().AddDays(28);
|
|
|
jweekTime = jweekTime.AddDays(28 * j);
|
|
|
string jMonth = $"{jweekTime.Year}-{jweekTime.Month.ToString("00")}";
|
|
|
subItems.Add(jMonth);
|
|
|
@@ -2001,7 +1964,7 @@ namespace Business.Replenishment
|
|
|
//中间件钉匣泡壳四周开一张工单
|
|
|
for (int i = 0; i < 4; i++)
|
|
|
{
|
|
|
- var weekTime = GetNextMonday().AddMonths(1);
|
|
|
+ var weekTime = GetNextMonday().AddDays(28);
|
|
|
weekTime = weekTime.AddDays(28 * i);
|
|
|
string kMonth = $"{weekTime.Year}-{weekTime.Month.ToString("00")}";
|
|
|
if (prodLines.Count == 0)
|
|
|
@@ -2128,416 +2091,6 @@ namespace Business.Replenishment
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- #region
|
|
|
- //for (int k = 0; k < replenishmentDto.SaleFcstMonth; k++)
|
|
|
- //{
|
|
|
- // //如果该10月有发布的2周生产计划,则周生产数量=9月补货量-已发布的2周生产计划数量/剩余周次(2)
|
|
|
- // string kMonth = $"{DateTime.Now.AddMonths(k+1).Year}-{DateTime.Now.AddMonths(k+1).Month.ToString("00")}";
|
|
|
- // string kPreMonth= $"{DateTime.Now.AddMonths(k ).Year}-{DateTime.Now.AddMonths(k ).Month.ToString("00")}";
|
|
|
- // var kTime = DateTime.Now.AddMonths(k+1);
|
|
|
- // kTime = kTime.AddDays(1 - kTime.Day);//某月第一天
|
|
|
- // var monthWeekPlan = planList.Where(a => a.planmonth == kMonth).ToList();
|
|
|
- // var ropList = planList.Select(t => t.number).Distinct().ToList();
|
|
|
- // //中间件汇总,比如A成品10、11、12月都需要中间件C,B成品11、12月都需要中间件C,那么中间件C需要每个月汇总平均分到4周
|
|
|
- // Dictionary<string, decimal?> subProductItem = new Dictionary<string, decimal?>();
|
|
|
- // Dictionary<string, BomChildExamineDto> subProductItemModel = new Dictionary<string, BomChildExamineDto>();
|
|
|
- // foreach (var itemSeq in ropList)
|
|
|
- // {
|
|
|
- // if(shipPlanList.Select(s=>s.SAPItemNumber).ToList().Contains(itemSeq))
|
|
|
- // {
|
|
|
- // 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;
|
|
|
- // }
|
|
|
- // int publishedWeekCount = weekProductPlanList.Where(a => a.PlanMonth == kPreMonth && a.ItemNumber == item.number && a.ProductionStatus == "已发布" && a.DistributionChannel == item.distributionchannel).Count();
|
|
|
- // decimal publishedWeekQtySum = weekProductPlanList.Where(a => a.PlanMonth == kPreMonth && a.ItemNumber == item.number && a.ProductionStatus == "已发布" && a.DistributionChannel == item.distributionchannel).Sum(a => a.Qty);
|
|
|
- // for (int w = 0; w < 4; w++)
|
|
|
- // {
|
|
|
- // var weekItemPlan = weekProductPlanList.Find(a => a.PlanMonth == kPreMonth && a.ItemNumber == item.number && a.WeekSeq == w);
|
|
|
- // if (weekItemPlan != null)
|
|
|
- // {
|
|
|
- // if (weekItemPlan.ProductionStatus != "已发布" && publishedWeekCount < 4)
|
|
|
- // {
|
|
|
- // weekItemPlan.Qty = Math.Ceiling((item.montheop1.GetValueOrDefault() + item.montheop2.GetValueOrDefault() - publishedWeekQtySum) / (4 - publishedWeekCount));
|
|
|
- // updateRopList.Add(weekItemPlan);
|
|
|
- // }
|
|
|
- // }
|
|
|
- // 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 = _serialNumberAppService.GetBillNo(input.factory_id.ToString(), "MPO", 1, "", 1)[0].NbrResult;
|
|
|
- // 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 = kTime.AddDays(7 * w - ProductTime(routingOps, ic_item.number, input.factory_id.ToString(), mes_Morder.need_number.GetValueOrDefault()) - days);
|
|
|
- // mes_Morder.moentry_sys_etime = kTime.AddDays(7 * w - 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 = _serialNumberAppService.GetBillNo(input.factory_id.ToString(), "WO", 1, "", 1)[0].NbrResult;
|
|
|
- // 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 = DateTime.Now.AddMonths(k).Year;
|
|
|
- // weekItem.Month = DateTime.Now.AddMonths(k).Month;
|
|
|
- // weekItem.PlanMonth = kMonth;
|
|
|
- // weekItem.WeekSeq = w;
|
|
|
- // 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(15);
|
|
|
- // }
|
|
|
- // else
|
|
|
- // {
|
|
|
- // weekItem.SterilizationDate = mes_Morder.moentry_sys_etime.Value;
|
|
|
- // weekItem.InStockDate = mes_Morder.moentry_sys_etime.Value.AddDays(8);
|
|
|
- // }
|
|
|
- // weekItem.AssembleHours = 0;
|
|
|
- // weekItem.HeatSealHours = 0;
|
|
|
- // weekItem.PackageHours = 0;
|
|
|
- // weekItem.TotalHours = 0;
|
|
|
- // 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);
|
|
|
- // }
|
|
|
- // }
|
|
|
- // }
|
|
|
- // }
|
|
|
- // }
|
|
|
- // }
|
|
|
- // if(prodLines.Count==0)
|
|
|
- // {
|
|
|
- // prodLines=_prodLineDetail.Select(p => subProductItem.Keys.Contains(p.Part) && p.Domain == input.factory_id.ToString() && p.IsActive && routingOpList.Select(m => m.Op).Contains(p.Op)).OrderBy(x => x.Sequence).ToList();
|
|
|
- // }
|
|
|
- // if(lineMasters.Count==0)
|
|
|
- // {
|
|
|
- // lineMasters = _lineMaster.Select(p => prodLines.Select(a => a.Line).Contains(p.Line) && p.Domain == input.factory_id.ToString() && p.IsActive).ToList();
|
|
|
- // }
|
|
|
- // var middleItemList=_itemMaster.Select(a => subProductItem.Keys.Contains(a.ItemNum) && a.Domain == input.factory_id.ToString());
|
|
|
- // foreach (var key in subProductItem.Keys)
|
|
|
- // {
|
|
|
- // var itemQty = subProductItem[key];
|
|
|
- // var middleItem = middleItemList.Find(m => m.ItemNum == key).MinOrdSales;
|
|
|
- // if (middleItem == 0)
|
|
|
- // middleItem = 10000;
|
|
|
- // if (itemQty< middleItem)
|
|
|
- // {
|
|
|
- // itemQty = middleItem;
|
|
|
- // }else if(middleItem>0)
|
|
|
- // {
|
|
|
- // itemQty = Math.Ceiling(Math.Ceiling(itemQty.GetValueOrDefault()/ middleItem) * middleItem);
|
|
|
- // }
|
|
|
-
|
|
|
- // int publishedWeekCount = weekProductPlanList.Where(a => a.PlanMonth == kPreMonth && a.ItemNumber == key && a.ProductionStatus == "已发布").Count();
|
|
|
- // decimal publishedWeekQtySum = weekProductPlanList.Where(a => a.PlanMonth == kPreMonth && a.ItemNumber == key && a.ProductionStatus == "已发布").Sum(a => a.Qty);
|
|
|
- // //如果平均每周的需求大于经济批量直接均分
|
|
|
- // if(publishedWeekCount<4 && itemQty/(4-publishedWeekCount)>= middleItem)
|
|
|
- // {
|
|
|
- // for(int w= publishedWeekCount;w<4;w++)
|
|
|
- // {
|
|
|
- // 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 = _serialNumberAppService.GetBillNo(input.factory_id.ToString(), "MPO", 1, "", 1)[0].NbrResult;
|
|
|
- // mes_Morder.morder_no = Guid.NewGuid().ToString();
|
|
|
- // mes_Morder.fms_number = "";
|
|
|
- // mes_Morder.bom_number = subProductItemModel[key].bom_number;
|
|
|
- // mes_Morder.fmodel = subProductItemModel[key].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 = subProductItemModel[key].item_number;
|
|
|
- // mes_Morder.product_name = subProductItemModel[key].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 = subProductItemModel[key].unit;
|
|
|
- // mes_Morder.morder_production_number = Math.Ceiling((itemQty.GetValueOrDefault() - publishedWeekQtySum) / (4 - publishedWeekCount));
|
|
|
- // mes_Morder.need_number = Math.Ceiling((itemQty.GetValueOrDefault() - publishedWeekQtySum) / (4 - publishedWeekCount));
|
|
|
- // //成品半成品取周一为入库时间开始往前推
|
|
|
- // mes_Morder.moentry_sys_stime = kTime.AddDays(7 * w - ProductTime(routingOps, subProductItemModel[key].item_number, input.factory_id.ToString(), mes_Morder.need_number.GetValueOrDefault()));
|
|
|
- // mes_Morder.moentry_sys_etime = kTime.AddDays(7 * w);
|
|
|
- // 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 = subProductItemModel[key].unit;
|
|
|
- // mes_Moentry.morder_production_number = Math.Ceiling((itemQty.GetValueOrDefault() - publishedWeekQtySum) / (4 - publishedWeekCount));
|
|
|
- // mes_Moentry.need_number = Math.Ceiling((itemQty.GetValueOrDefault() - publishedWeekQtySum) / (4 - publishedWeekCount));
|
|
|
- // 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;
|
|
|
-
|
|
|
- // var prodLine = prodLines.Where(x => x.Part == key).OrderBy(x => x.Sequence).FirstOrDefault();
|
|
|
- // ReplenishmentWeekPlan weekItem = new ReplenishmentWeekPlan();
|
|
|
- // weekItem.Priority = 1;
|
|
|
- // weekItem.Area = "";
|
|
|
- // weekItem.PlanStartDate = mes_Morder.moentry_sys_stime.GetValueOrDefault();
|
|
|
- // weekItem.Week = $"WK{GetWeekOfYear(mes_Morder.moentry_sys_stime.Value).ToString("00")}";
|
|
|
- // //weekItem.OrderNO = _serialNumberAppService.GetBillNo(input.factory_id.ToString(), "WO", 1, "", 1)[0].NbrResult;
|
|
|
- // weekItem.OrderNO = Guid.NewGuid().ToString();
|
|
|
- // weekItem.ProductionOrder = mes_Morder.morder_no;
|
|
|
- // weekItem.SAPOrderNO = "";
|
|
|
- // weekItem.OrderType = "量产";
|
|
|
- // weekItem.ProductionBatch = "";
|
|
|
- // weekItem.ProductionStatus = "";
|
|
|
- // weekItem.ProdLine = "";
|
|
|
- // weekItem.ProdRange = "";
|
|
|
- // if (prodLine != null && lineMasters.Find(b => b.Line == prodLine.Line) != null)
|
|
|
- // {
|
|
|
- // weekItem.Line = lineMasters.Find(b => b.Line == prodLine.Line).Describe;
|
|
|
- // }
|
|
|
- // else
|
|
|
- // {
|
|
|
- // weekItem.Line = "";
|
|
|
- // }
|
|
|
-
|
|
|
- // weekItem.ItemNumber = key;
|
|
|
- // weekItem.Model = subProductItemModel[key].model;
|
|
|
- // weekItem.Languages = "";
|
|
|
- // weekItem.Qty = mes_Morder.morder_production_number.Value;
|
|
|
- // weekItem.ItemStatus = "";
|
|
|
- // weekItem.PlanKittingDate = DateTime.Now;
|
|
|
- // weekItem.Year = DateTime.Now.AddMonths(k).Year;
|
|
|
- // weekItem.Month = DateTime.Now.AddMonths(k).Month;
|
|
|
- // weekItem.PlanMonth = kMonth;
|
|
|
- // weekItem.WeekSeq = w;
|
|
|
- // 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 = "瑞奇";
|
|
|
- // weekItem.IsReplenishmentModel = "N";
|
|
|
- // weekItem.InStockDate = mes_Morder.moentry_sys_etime.Value;
|
|
|
- // weekItem.AssembleHours = 0;
|
|
|
- // weekItem.HeatSealHours = 0;
|
|
|
- // weekItem.PackageHours = 0;
|
|
|
- // weekItem.TotalHours = 0;
|
|
|
- // weekPlan.Add(weekItem);
|
|
|
- // moList.Add(mes_Morder);
|
|
|
- // moentryList.Add(mes_Moentry);
|
|
|
- // }
|
|
|
- // }else if(publishedWeekCount < 4 && itemQty / (4 - publishedWeekCount) < middleItem)//不够的话就按顺序排
|
|
|
- // {
|
|
|
- // for (int w = publishedWeekCount; w < 4; w++)
|
|
|
- // {
|
|
|
- // if(itemQty>0)
|
|
|
- // {
|
|
|
- // 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 = _serialNumberAppService.GetBillNo(input.factory_id.ToString(), "MPO", 1, "", 1)[0].NbrResult;
|
|
|
- // mes_Morder.morder_no = Guid.NewGuid().ToString();
|
|
|
- // mes_Morder.fms_number = "";
|
|
|
- // mes_Morder.bom_number = subProductItemModel[key].bom_number;
|
|
|
- // mes_Morder.fmodel = subProductItemModel[key].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 = subProductItemModel[key].item_number;
|
|
|
- // mes_Morder.product_name = subProductItemModel[key].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 = subProductItemModel[key].unit;
|
|
|
- // mes_Morder.morder_production_number =middleItem;
|
|
|
- // mes_Morder.need_number = middleItem;
|
|
|
- // //成品半成品取周一为入库时间开始往前推
|
|
|
- // mes_Morder.moentry_sys_stime = kTime.AddDays(7 * w - ProductTime(routingOps, subProductItemModel[key].item_number, input.factory_id.ToString(), mes_Morder.need_number.GetValueOrDefault()));
|
|
|
- // mes_Morder.moentry_sys_etime = kTime.AddDays(7 * w);
|
|
|
- // 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 = subProductItemModel[key].unit;
|
|
|
- // mes_Moentry.morder_production_number = middleItem;
|
|
|
- // mes_Moentry.need_number = middleItem;
|
|
|
- // 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;
|
|
|
-
|
|
|
- // var prodLine = prodLines.Where(x => x.Part == key).OrderBy(x => x.Sequence).FirstOrDefault();
|
|
|
- // ReplenishmentWeekPlan weekItem = new ReplenishmentWeekPlan();
|
|
|
- // weekItem.Priority = 1;
|
|
|
- // weekItem.Area = "";
|
|
|
- // weekItem.PlanStartDate = mes_Morder.moentry_sys_stime.GetValueOrDefault();
|
|
|
- // weekItem.Week = $"WK{GetWeekOfYear(mes_Morder.moentry_sys_stime.Value).ToString("00")}";
|
|
|
- // //weekItem.OrderNO = _serialNumberAppService.GetBillNo(input.factory_id.ToString(), "WO", 1, "", 1)[0].NbrResult;
|
|
|
- // weekItem.OrderNO = Guid.NewGuid().ToString();
|
|
|
- // weekItem.ProductionOrder = mes_Morder.morder_no;
|
|
|
- // weekItem.SAPOrderNO = "";
|
|
|
- // weekItem.OrderType = "量产";
|
|
|
- // weekItem.ProductionBatch = "";
|
|
|
- // weekItem.ProductionStatus = "";
|
|
|
- // weekItem.ProdLine = "";
|
|
|
- // weekItem.ProdRange = "";
|
|
|
- // if (prodLine != null && lineMasters.Find(b => b.Line == prodLine.Line) != null)
|
|
|
- // {
|
|
|
- // weekItem.Line = lineMasters.Find(b => b.Line == prodLine.Line).Describe;
|
|
|
- // }
|
|
|
- // else
|
|
|
- // {
|
|
|
- // weekItem.Line = "";
|
|
|
- // }
|
|
|
-
|
|
|
- // weekItem.ItemNumber = key;
|
|
|
- // weekItem.Model = subProductItemModel[key].model;
|
|
|
- // weekItem.Languages = "";
|
|
|
- // weekItem.Qty = mes_Morder.morder_production_number.Value;
|
|
|
- // weekItem.ItemStatus = "";
|
|
|
- // weekItem.PlanKittingDate = DateTime.Now;
|
|
|
- // weekItem.Year = DateTime.Now.AddMonths(k).Year;
|
|
|
- // weekItem.Month = DateTime.Now.AddMonths(k).Month;
|
|
|
- // weekItem.PlanMonth = kMonth;
|
|
|
- // weekItem.WeekSeq = w;
|
|
|
- // 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 = "瑞奇";
|
|
|
- // weekItem.IsReplenishmentModel = "N";
|
|
|
- // weekItem.InStockDate = mes_Morder.moentry_sys_etime.Value;
|
|
|
- // weekItem.AssembleHours = 0;
|
|
|
- // weekItem.HeatSealHours = 0;
|
|
|
- // weekItem.PackageHours = 0;
|
|
|
- // weekItem.TotalHours = 0;
|
|
|
- // weekPlan.Add(weekItem);
|
|
|
- // moList.Add(mes_Morder);
|
|
|
- // moentryList.Add(mes_Moentry);
|
|
|
- // itemQty -= middleItem;
|
|
|
- // }
|
|
|
- // }
|
|
|
- // }
|
|
|
- // }
|
|
|
- //}
|
|
|
- #endregion
|
|
|
var morder_noList = _serialNumberAppService.GetBillNo(input.factory_id.ToString(), "M5", moList.Count, "", 1);
|
|
|
var OrderNOList = _serialNumberAppService.GetBillNo(input.factory_id.ToString(), "MPO", moList.Count, "", 1);
|
|
|
for (int i = 0; i < moList.Count; i++)
|
|
|
@@ -2547,7 +2100,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, moentryList, bang_id, input,false);
|
|
|
|
|
|
var examine_resultList = _mysql_examine_result.GetListAsync(a => a.bangid == bang_id).Result;
|
|
|
await _businessDbContext.BulkInsertAsync(moList);
|
|
|
@@ -2568,7 +2121,7 @@ namespace Business.Replenishment
|
|
|
if (workOrdSave.Any())
|
|
|
{
|
|
|
workOrdSave = CalcPriority(workOrdSave, input.factory_id.ToString());
|
|
|
- _workOrdMaster.Insert(workOrdSave);
|
|
|
+ _businessDbContext.BulkInsert(workOrdSave);
|
|
|
}
|
|
|
var DBworkOrdList = _workOrdMaster.Select(a => workOrdSave.Count > 0 && a.Domain == workOrdSave[0].Domain && workOrdSave.Select(c => c.WorkOrd).Contains(a.WorkOrd));
|
|
|
if (workOrdRoutingSave.Any())
|
|
|
@@ -2577,7 +2130,7 @@ namespace Business.Replenishment
|
|
|
{
|
|
|
c.WorkOrdMasterRecID = DBworkOrdList.Where(a => a.WorkOrd == c.WorkOrd).First().RecID;
|
|
|
});
|
|
|
- _workOrdRouting.Insert(workOrdRoutingSave);
|
|
|
+ _businessDbContext.BulkInsert(workOrdRoutingSave);
|
|
|
}
|
|
|
if (workOrdDetails.Any())
|
|
|
{
|
|
|
@@ -2585,7 +2138,7 @@ namespace Business.Replenishment
|
|
|
{
|
|
|
c.WorkOrdMasterRecID = DBworkOrdList.Where(a => a.WorkOrd == c.WorkOrd).First().RecID;
|
|
|
});
|
|
|
- _workOrdDetail.Insert(workOrdDetails);
|
|
|
+ _businessDbContext.BulkInsert(workOrdDetails);
|
|
|
}
|
|
|
|
|
|
weekPlan.ForEach(a =>
|
|
|
@@ -2758,7 +2311,7 @@ namespace Business.Replenishment
|
|
|
pretreatments = _mysql_b_bom_pretreatment.GetListAsync(s => boms.Select(c => c.mysql_id).ToList().Contains(s.sourceid)).Result;
|
|
|
}
|
|
|
|
|
|
- var itemStock = CalcStock(ropModelList.Select(a => a.number).ToList(), input);
|
|
|
+ var itemStock = CalcStock(ropModelList.Select(a => a.number).Distinct().ToList(), input);
|
|
|
var bomList = _ic_bom.GetListAsync(a => ropModelList.Select(a => a.number).ToList().Contains(a.item_number) && !a.IsDeleted && a.factory_id == input.factory_id).Result;
|
|
|
List<mes_morder> moList = new List<mes_morder>();
|
|
|
List<mes_moentry> moentryList = new List<mes_moentry>();
|
|
|
@@ -3340,19 +2893,19 @@ namespace Business.Replenishment
|
|
|
var inProductList = _mes_mooccupy.GetListAsync(a => works.Select(a => a.WorkOrd).Contains(a.moo_mo)).Result;
|
|
|
|
|
|
//优先1:T1、海外销售订单新产生的生产指令;
|
|
|
- var T1WOListNew=T1WOList.Where(a=> !inProductList.Select(b=>b.moo_mo).Contains(a.WorkOrd))?.OrderBy(a=>a.DueDate).ToList();
|
|
|
+ var T1WOListNew=T1WOList.Where(a=> !inProductList.Select(b=>b.moo_mo).Contains(a.WorkOrd))?.OrderBy(a => a.DueDate).ThenBy(a => a.OrdDate).ToList();
|
|
|
//优先2:T1、海外销售订单关联的在制生产指令;
|
|
|
- var T1WOListInProduct = T1WOList.Where(a => inProductList.Select(b => b.moo_mo).Contains(a.WorkOrd))?.OrderBy(a => a.DueDate).ToList();
|
|
|
+ var T1WOListInProduct = T1WOList.Where(a => inProductList.Select(b => b.moo_mo).Contains(a.WorkOrd))?.OrderBy(a => a.DueDate).ThenBy(a => a.OrdDate).ToList();
|
|
|
//优先3:平台(国科、海王)销售订单新产生的生产指令;
|
|
|
- var T2WOListNew = T2WOList.Where(a => !inProductList.Select(b => b.moo_mo).Contains(a.WorkOrd))?.OrderBy(a => a.DueDate).ToList();
|
|
|
+ var T2WOListNew = T2WOList.Where(a => !inProductList.Select(b => b.moo_mo).Contains(a.WorkOrd))?.OrderBy(a => a.DueDate).ThenBy(a => a.OrdDate).ToList();
|
|
|
//优先4:平台(国科、海王)销售订单关联的在制生产指令;
|
|
|
- var T2WOListInProduct = T2WOList.Where(a => !inProductList.Select(b => b.moo_mo).Contains(a.WorkOrd))?.OrderBy(a => a.DueDate).ToList();
|
|
|
+ var T2WOListInProduct = T2WOList.Where(a => !inProductList.Select(b => b.moo_mo).Contains(a.WorkOrd))?.OrderBy(a => a.DueDate).ThenBy(a => a.OrdDate).ToList();
|
|
|
//优先5:除销售订单以外,计划补货订单关联的生产指令;
|
|
|
var PlanWOList = works.Except(T1WOListNew).ToList();
|
|
|
PlanWOList = works.Except(T1WOListInProduct).ToList();
|
|
|
PlanWOList = works.Except(T2WOListNew).ToList();
|
|
|
PlanWOList = works.Except(T2WOListInProduct).ToList();
|
|
|
- PlanWOList= PlanWOList.OrderBy(a => a.DueDate).ToList();
|
|
|
+ PlanWOList= PlanWOList.OrderBy(a => a.DueDate).ThenBy(a => a.OrdDate).ToList();
|
|
|
//先按生产指令的类型,再按生产指令的完工日期顺序排产;
|
|
|
List<WorkOrdMaster> orderedList = new List<WorkOrdMaster>();
|
|
|
decimal Priority = 1.0m;
|
|
|
@@ -3422,19 +2975,19 @@ namespace Business.Replenishment
|
|
|
var inProductList = _mes_mooccupy.GetListAsync(a => works.Select(a => a.WorkOrd).Contains(a.moo_mo)).Result;
|
|
|
|
|
|
//优先1:T1、海外销售订单新产生的生产指令;
|
|
|
- var T1WOListNew = T1WOList.Where(a => !inProductList.Select(b => b.moo_mo).Contains(a.WorkOrd))?.OrderBy(a => a.DueDate).ToList();
|
|
|
+ var T1WOListNew = T1WOList.Where(a => !inProductList.Select(b => b.moo_mo).Contains(a.WorkOrd))?.OrderBy(a => a.DueDate).ThenBy(a=>a.OrdDate).ToList();
|
|
|
//优先2:T1、海外销售订单关联的在制生产指令;
|
|
|
- var T1WOListInProduct = T1WOList.Where(a => inProductList.Select(b => b.moo_mo).Contains(a.WorkOrd))?.OrderBy(a => a.DueDate).ToList();
|
|
|
+ var T1WOListInProduct = T1WOList.Where(a => inProductList.Select(b => b.moo_mo).Contains(a.WorkOrd))?.OrderBy(a => a.DueDate).ThenBy(a=>a.OrdDate).ToList();
|
|
|
//优先3:平台(国科、海王)销售订单新产生的生产指令;
|
|
|
- var T2WOListNew = T2WOList.Where(a => !inProductList.Select(b => b.moo_mo).Contains(a.WorkOrd))?.OrderBy(a => a.DueDate).ToList();
|
|
|
+ var T2WOListNew = T2WOList.Where(a => !inProductList.Select(b => b.moo_mo).Contains(a.WorkOrd))?.OrderBy(a => a.DueDate).ThenBy(a=>a.OrdDate).ToList();
|
|
|
//优先4:平台(国科、海王)销售订单关联的在制生产指令;
|
|
|
- var T2WOListInProduct = T2WOList.Where(a => !inProductList.Select(b => b.moo_mo).Contains(a.WorkOrd))?.OrderBy(a => a.DueDate).ToList();
|
|
|
+ var T2WOListInProduct = T2WOList.Where(a => !inProductList.Select(b => b.moo_mo).Contains(a.WorkOrd))?.OrderBy(a => a.DueDate).ThenBy(a=>a.OrdDate).ToList();
|
|
|
//优先5:除销售订单以外,计划补货订单关联的生产指令;
|
|
|
var PlanWOList = works.Except(T1WOListNew).ToList();
|
|
|
PlanWOList = works.Except(T1WOListInProduct).ToList();
|
|
|
PlanWOList = works.Except(T2WOListNew).ToList();
|
|
|
PlanWOList = works.Except(T2WOListInProduct).ToList();
|
|
|
- PlanWOList = PlanWOList.OrderBy(a => a.DueDate).ToList();
|
|
|
+ PlanWOList = PlanWOList.OrderBy(a => a.DueDate).ThenBy(a=>a.OrdDate).ToList();
|
|
|
//先按生产指令的类型,再按生产指令的完工日期顺序排产;
|
|
|
List<WorkOrdMaster> orderedList = new List<WorkOrdMaster>();
|
|
|
decimal Priority = 1.0m;
|
|
|
@@ -3584,7 +3137,7 @@ namespace Business.Replenishment
|
|
|
/// </summary>
|
|
|
/// <param name="input"></param>
|
|
|
/// <returns></returns>
|
|
|
- public async Task<string> PlanOrderResourceCheck(List<mes_morder> Mes_Morders, List<mes_moentry> moentryList,long bangid, InputDto input)
|
|
|
+ public async Task<string> PlanOrderResourceCheck(List<mes_morder> Mes_Morders, List<mes_moentry> moentryList,long bangid, InputDto input,bool longPeriodCheck)
|
|
|
{
|
|
|
if (Mes_Morders.Any())
|
|
|
{
|
|
|
@@ -3644,7 +3197,7 @@ namespace Business.Replenishment
|
|
|
// _scheduleResultOpMaster.Delete(s => monolist.Contains(s.WorkOrd));
|
|
|
//}
|
|
|
//只走计划工单
|
|
|
- var rtn = await OrderKittingCheck(Mes_Morders, moentryList, bangid, true);
|
|
|
+ var rtn = await OrderKittingCheck(Mes_Morders, moentryList, bangid, longPeriodCheck, true);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
@@ -3694,7 +3247,7 @@ namespace Business.Replenishment
|
|
|
/// 工单检查物料齐套
|
|
|
/// </summary>
|
|
|
/// <param name="input"></param>
|
|
|
- public async Task<PschedDto> OrderKittingCheck(List<mes_morder> mo_Mes_Morders, List<mes_moentry> moentryList,long bangid, bool planCheck = false)
|
|
|
+ public async Task<PschedDto> OrderKittingCheck(List<mes_morder> mo_Mes_Morders, List<mes_moentry> moentryList,long bangid,bool longPeriodCheck, bool planCheck = false)
|
|
|
{
|
|
|
//资源检查结果
|
|
|
PschedDto rtn = new PschedDto();
|
|
|
@@ -3842,6 +3395,16 @@ namespace Business.Replenishment
|
|
|
}
|
|
|
if (prmainlist.Any())
|
|
|
{
|
|
|
+ var ropParam = GetROPParam(input.factoryId.ToString());
|
|
|
+ var itemIds = prmainlist.Select(a => a.icitem_id).Distinct().ToList();
|
|
|
+ var itemList=_mysql_ic_item.GetListAsync(a => itemIds.Contains(a.Id) && a.factory_id == input.factoryId).Result;
|
|
|
+ var mesItem = _itemMaster.Select(a => itemList.Select(a=>a.number).ToList().Contains(a.ItemNum) && a.PurLT>= ropParam.LongPeriodDay && a.IsActive && a.Domain == input.factoryId.ToString());
|
|
|
+ List<long> longPRIds = new List<long>();
|
|
|
+ foreach(var item in mesItem)
|
|
|
+ {
|
|
|
+ longPRIds.Add(itemList.Find(a => a.number == item.ItemNum).Id);
|
|
|
+ }
|
|
|
+ prmainlist = prmainlist.Where(a => longPRIds.Contains(a.icitem_id.GetValueOrDefault())).ToList();
|
|
|
var nbrlistDto = _serialNumberAppService.GetBillNo(prmainlist[0].factory_id.ToString(), "PR", prmainlist.Count, "admin", 1);
|
|
|
int index = 0;
|
|
|
foreach (var p in prmainlist)
|
|
|
@@ -4663,7 +4226,7 @@ namespace Business.Replenishment
|
|
|
//长周期物料只产生PR不生成实际工单
|
|
|
//await _mysql_mes_morder.InsertManyAsync(moList);
|
|
|
//await _mysql_mes_moentry.InsertManyAsync(moentryList);
|
|
|
- await PlanOrderResourceCheck(moList,moentryList, bangid,input);
|
|
|
+ await PlanOrderResourceCheck(moList,moentryList, bangid,input,true);
|
|
|
return "OK";
|
|
|
}
|
|
|
|