|
|
@@ -3117,7 +3117,7 @@ namespace Business.Replenishment
|
|
|
weekPlan[i].ProductionOrder = morder_noList[i].NbrResult;
|
|
|
weekPlan[i].OrderNO = OrderNOList[i].NbrResult;
|
|
|
}
|
|
|
- await PlanOrderResourceCheck(moList.OrderBy(a=>a.moentry_sys_stime).ToList(), moentryList, bang_id,"", input);
|
|
|
+ await PlanOrderResourceCheck(moList.OrderBy(a=>a.moentry_sys_stime).ToList(), moentryList, bang_id,"",false);
|
|
|
|
|
|
var examine_resultList = _mysql_examine_result.GetListAsync(a => a.bangid == bang_id).Result;
|
|
|
await _businessDbContext.BulkInsertAsync(moList);
|
|
|
@@ -3272,7 +3272,7 @@ namespace Business.Replenishment
|
|
|
moentryList[i].moentry_mono = morder_noList[i].NbrResult;
|
|
|
weekplans[i].ProductionOrder = morder_noList[i].NbrResult;
|
|
|
}
|
|
|
- await PlanOrderResourceCheck(moList.OrderBy(a => a.moentry_sys_stime).ToList(), moentryList, bang_id, "", input);
|
|
|
+ await PlanOrderResourceCheck(moList.OrderBy(a => a.moentry_sys_stime).ToList(), moentryList, bang_id, "",false);
|
|
|
|
|
|
var examine_resultList = _mysql_examine_result.GetListAsync(a => a.bangid == bang_id).Result;
|
|
|
await _businessDbContext.BulkInsertAsync(moList);
|
|
|
@@ -4004,6 +4004,40 @@ namespace Business.Replenishment
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 获取虚拟件明细
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="dtl"></param>
|
|
|
+ /// <param name="returnList"></param>
|
|
|
+ /// <param name="childs"></param>
|
|
|
+ public void GetWorkDetalis(List<BomChildExamineDto> dtl, List<BomChildExamineDto> returnList, List<BomChildExamineDto> childs, List<ProductStructureOp> productOps)
|
|
|
+ {
|
|
|
+ returnList.AddRange(dtl.Where(x => x.erp_cls != 4).ToList());
|
|
|
+ var rst = childs.Where(s => dtl.Where(x => x.erp_cls == 4).Select(c => c.fid).Contains(s.parent_id.GetValueOrDefault())).ToList();
|
|
|
+ if (rst.Any())
|
|
|
+ {
|
|
|
+ if (productOps.Any())
|
|
|
+ {
|
|
|
+ //rst 虚拟件的子物料
|
|
|
+ foreach (var item in rst)
|
|
|
+ {
|
|
|
+ var parent = childs.Find(x => x.fid == item.parent_id);
|
|
|
+ if (parent != null)
|
|
|
+ {
|
|
|
+ var proOp = productOps.Find(x => x.ParentItem == parent.item_number && x.ComponentItem == item.item_number);
|
|
|
+ if (proOp != null)
|
|
|
+ {
|
|
|
+ item.Op = proOp.Op;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ GetWorkDetalis(rst, returnList, childs, productOps);
|
|
|
+ }
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
/// <summary>
|
|
|
/// 获取虚拟件明细
|
|
|
/// </summary>
|
|
|
@@ -4259,10 +4293,88 @@ namespace Business.Replenishment
|
|
|
var isExistSamePriority= _replenishmentWeekPlan.FindAsync(a => a.Id != id && a.Week == weekPlan.Week && a.Priority == newpriority).Result;
|
|
|
if(isExistSamePriority!=null)
|
|
|
return "优先级重复,请重新调整。";
|
|
|
+
|
|
|
weekPlan.Priority= newpriority;
|
|
|
weekPlan.Qty= newqty;
|
|
|
- weekPlan.InStockDate= newinstockdate;
|
|
|
- await _replenishmentWeekPlan.UpdateAsync(weekPlan);
|
|
|
+ //newinstockdate其实传的的工单开工日期
|
|
|
+ weekPlan.PlanStartDate= newinstockdate;
|
|
|
+
|
|
|
+ if(!string.IsNullOrEmpty(weekPlan.ProductionOrder))
|
|
|
+ {
|
|
|
+ long bang_id = help.NextId();
|
|
|
+ var moList = _mysql_mes_morder.GetListAsync(a => a.morder_no == weekPlan.ProductionOrder && a.factory_id == factoryid).Result;
|
|
|
+ var moentryList = _mysql_mes_moentry.GetListAsync(a => a.moentry_mono == weekPlan.ProductionOrder && a.factory_id == factoryid).Result;
|
|
|
+ var workmasterList = _workOrdMaster.Select(a => a.WorkOrd == weekPlan.ProductionOrder && a.Domain == factory_id);
|
|
|
+ var workRoutings = _workOrdRouting.Select(a => a.WorkOrd == weekPlan.ProductionOrder && a.Domain == factory_id);
|
|
|
+ //判断
|
|
|
+ if (moList.Count > 0 && (moList[0].morder_state == MorderEnum.Initial_state || string.IsNullOrEmpty(moList[0].morder_state))
|
|
|
+ && workmasterList.Count > 0 && (string.IsNullOrEmpty(workmasterList[0].Status) || workmasterList[0].Status == "p"))
|
|
|
+ {
|
|
|
+ moList[0].moentry_sys_stime = newinstockdate;
|
|
|
+ moList[0].need_number = newqty;
|
|
|
+ moList[0].morder_production_number = newqty;
|
|
|
+
|
|
|
+ moentryList[0].need_number = newqty;
|
|
|
+ moentryList[0].morder_production_number = newqty;
|
|
|
+
|
|
|
+ workmasterList[0].OrdDate = newinstockdate;
|
|
|
+ workmasterList[0].Priority = newpriority;
|
|
|
+ workmasterList[0].QtyOrded = newqty;
|
|
|
+
|
|
|
+ workRoutings?.ForEach(a =>
|
|
|
+ {
|
|
|
+ a.QtyOrded = newqty;
|
|
|
+ });
|
|
|
+
|
|
|
+ await PlanOrderResourceCheck(moList.OrderBy(a => a.moentry_sys_stime).ToList(), moentryList, bang_id, "", true);
|
|
|
+
|
|
|
+ var examine_resultList = _mysql_examine_result.GetListAsync(a => a.bangid == bang_id).Result;
|
|
|
+ if (weekPlan.IsReplenishmentModel == "N")
|
|
|
+ {
|
|
|
+ var moItem = examine_resultList.Find(b => b.morder_no == weekPlan.ProductionOrder);
|
|
|
+ List<RoutingOpDetail> routingOp = routingOps.Where(x => x.RoutingCode == weekPlan.ItemNumber).ToList();
|
|
|
+ //组装标准工时
|
|
|
+ var Assembly = routingOp.Where(x => x.Ufld1 == "组装" && x.MilestoneOp).FirstOrDefault();
|
|
|
+ //热封标准工时
|
|
|
+ var HeatSealing = routingOp.Where(x => x.Ufld1 == "热封" && x.MilestoneOp).FirstOrDefault();
|
|
|
+ //包装标准工时
|
|
|
+ var Packaging = routingOp.Where(x => x.Descr == "包装" && x.MilestoneOp).FirstOrDefault();
|
|
|
+ if (moItem != null && moItem.kitting_times < weekPlan.PlanStartDate)
|
|
|
+ {
|
|
|
+ weekPlan.ItemStatus = "齐套";
|
|
|
+ weekPlan.PlanKittingDate = moItem.kitting_times;
|
|
|
+ weekPlan.AssembleHours = Assembly == null ? 0 : Assembly.RunTime * weekPlan.Qty;
|
|
|
+ weekPlan.HeatSealHours = HeatSealing == null ? 0 : HeatSealing.RunTime * weekPlan.Qty;
|
|
|
+ weekPlan.PackageHours = Packaging == null ? 0 : Packaging.RunTime * weekPlan.Qty;
|
|
|
+ weekPlan.TotalHours = weekPlan.AssembleHours + weekPlan.HeatSealHours + weekPlan.PackageHours;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ weekPlan.ItemStatus = "欠料";
|
|
|
+ weekPlan.PlanKittingDate = moItem.kitting_times;
|
|
|
+ weekPlan.AssembleHours = Assembly == null ? 0 : Assembly.RunTime * weekPlan.Qty;
|
|
|
+ weekPlan.HeatSealHours = HeatSealing == null ? 0 : HeatSealing.RunTime * weekPlan.Qty;
|
|
|
+ weekPlan.PackageHours = Packaging == null ? 0 : Packaging.RunTime * weekPlan.Qty;
|
|
|
+ weekPlan.TotalHours = weekPlan.AssembleHours + weekPlan.HeatSealHours + weekPlan.PackageHours;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ await _replenishmentWeekPlan.UpdateAsync(weekPlan);
|
|
|
+ await _mysql_mes_morder.UpdateManyAsync(moList);
|
|
|
+ await _mysql_mes_moentry.UpdateManyAsync(moentryList);
|
|
|
+ _workOrdMaster.Update(workmasterList);
|
|
|
+ _workOrdRouting.Update(workRoutings);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ return "工单不是初始状态,不允许调整。";
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ await _replenishmentWeekPlan.UpdateAsync(weekPlan);
|
|
|
+ return "ok";
|
|
|
+ }
|
|
|
+
|
|
|
}
|
|
|
catch(Exception e)
|
|
|
{
|
|
|
@@ -4313,7 +4425,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,string analogCalcVersion, InputDto input)
|
|
|
+ public async Task<string> PlanOrderResourceCheck(List<mes_morder> Mes_Morders, List<mes_moentry> moentryList,long bangid,string analogCalcVersion,bool isChangePriority)
|
|
|
{
|
|
|
if (Mes_Morders.Any())
|
|
|
{
|
|
|
@@ -4373,7 +4485,7 @@ namespace Business.Replenishment
|
|
|
// _scheduleResultOpMaster.Delete(s => monolist.Contains(s.WorkOrd));
|
|
|
//}
|
|
|
//只走计划工单
|
|
|
- var rtn = await OrderKittingCheck(Mes_Morders, moentryList, bangid,analogCalcVersion, true);
|
|
|
+ var rtn = await OrderKittingCheck(Mes_Morders, moentryList, bangid,analogCalcVersion,isChangePriority, true);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
@@ -4423,7 +4535,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,string analogCalcVersion, bool planCheck = false)
|
|
|
+ public async Task<PschedDto> OrderKittingCheck(List<mes_morder> mo_Mes_Morders, List<mes_moentry> moentryList,long bangid,string analogCalcVersion, bool isChangePriority, bool planCheck = false)
|
|
|
{
|
|
|
//资源检查结果
|
|
|
PschedDto rtn = new PschedDto();
|
|
|
@@ -4610,7 +4722,76 @@ namespace Business.Replenishment
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+ //暂时屏蔽重新生成工单物料明细
|
|
|
+ List<WorkOrdDetail> mainWorkOrdDetails = new List<WorkOrdDetail>();
|
|
|
+ List<WorkOrdDetail> delWorkOrddetails = new List<WorkOrdDetail>();
|
|
|
+ if (isChangePriority)
|
|
|
+ {
|
|
|
+ //成品虚拟件对应关系
|
|
|
+ var productOpList = _productStructureOp.Select(x => mo_Mes_Morders.Select(c => c.product_code).Contains(x.ProductItem) && x.Domain == param.factoryId.ToString());
|
|
|
+ var workOrds = CalcPriority(mo_Mes_Morders.Select(p => p.morder_no).ToList(), param.factoryId.ToString());
|
|
|
+ delWorkOrddetails = _workOrdDetail.Select(x => workOrds.Select(c => c.RecID).Contains((int)x.WorkOrdMasterRecID) && x.Domain == param.factoryId.ToString());
|
|
|
+ foreach (var workord in mo_Mes_Morders)
|
|
|
+ {
|
|
|
+ long fid = GetParentMo(mo_Mes_Morders, workord);
|
|
|
+ var exm = examines.Find(s => s.morder_id == fid);
|
|
|
+ //var exm = examines.Find(s => s.morder_no == workord.morder_no);
|
|
|
+ if (exm != null)
|
|
|
+ {
|
|
|
+ var childs = exm.BomChildExamineList.Where(s => s.is_use == true).ToList();
|
|
|
|
|
|
+ var child = childs.Find(s => s.item_number == workord.product_code);
|
|
|
+ if (child == null)
|
|
|
+ {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ List<BomChildExamineDto> returnList = new List<BomChildExamineDto>();
|
|
|
+ var productOps = productOpList.Where(x => x.ProductItem == workord.product_code).ToList();
|
|
|
+ GetWorkDetalis(childs.Where(s => s.parent_id == child.fid).ToList(), returnList, childs, productOps);
|
|
|
+ if (returnList.Any())
|
|
|
+ {
|
|
|
+ WorkOrdDetail woDetail = null;
|
|
|
+ var calereturnList = returnList.OrderBy(c => c.item_number).Select(x => x.item_number).Distinct().ToList();
|
|
|
+ var work = workOrds.Find(x => x.WorkOrd == workord.morder_no);
|
|
|
+ if (work == null)
|
|
|
+ {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ short num = 1;
|
|
|
+ foreach (var caleNumber in calereturnList)
|
|
|
+ {
|
|
|
+ var caleList = returnList.Where(x => x.item_number == caleNumber).ToList();
|
|
|
+
|
|
|
+ //添加工单的物料信息
|
|
|
+ woDetail = new WorkOrdDetail();
|
|
|
+ woDetail.Domain = workord.factory_id.ToString();
|
|
|
+ woDetail.WorkOrd = workord.morder_no;
|
|
|
+ var oplist = caleList.Where(x => x.Op > 0).ToList();
|
|
|
+ woDetail.Op = 0;
|
|
|
+ if (oplist.Any())
|
|
|
+ {
|
|
|
+ woDetail.Op = oplist.Min(f => f.Op);
|
|
|
+ }
|
|
|
+ woDetail.ItemNum = caleNumber;
|
|
|
+ woDetail.QtyPosted = 0m;
|
|
|
+ woDetail.QtyReturned = 0m;
|
|
|
+ woDetail.Status = "";
|
|
|
+ woDetail.IsActive = true;
|
|
|
+ woDetail.CreateTime = DateTime.Now;
|
|
|
+ woDetail.Line = num;
|
|
|
+ woDetail.QtyRequired = caleList.Sum(c => c.needCount);
|
|
|
+ woDetail.WorkOrdMasterRecID = work.RecID;
|
|
|
+ if (workord.need_number != 0)
|
|
|
+ {
|
|
|
+ woDetail.FrozenBOMQty = Math.Round(woDetail.QtyRequired / workord.need_number.GetValueOrDefault(), 10);
|
|
|
+ }
|
|
|
+ mainWorkOrdDetails.Add(woDetail);
|
|
|
+ num++;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
//获取工单数据
|
|
|
var workOrdMasters = _workOrdMaster.Select(p => mo_Mes_Morders.Select(c => c.morder_no).Contains(p.WorkOrd));
|
|
|
workOrdMasters.ForEach(s => {
|
|
|
@@ -4693,6 +4874,17 @@ namespace Business.Replenishment
|
|
|
srmpooccupyInsert.ForEach(x => { x.GenerateNewId(help.NextId()); });
|
|
|
_businessDbContext.BulkInsert(srmpooccupyInsert);
|
|
|
}
|
|
|
+ if(isChangePriority)
|
|
|
+ {
|
|
|
+ if (delWorkOrddetails.Any())
|
|
|
+ {
|
|
|
+ _businessDbContext.BulkDelete(delWorkOrddetails);
|
|
|
+ }
|
|
|
+ if (mainWorkOrdDetails.Any())
|
|
|
+ {
|
|
|
+ _businessDbContext.BulkInsert(mainWorkOrdDetails);
|
|
|
+ }
|
|
|
+ }
|
|
|
await unitOfWork.CompleteAsync();
|
|
|
}
|
|
|
catch (Exception e)
|
|
|
@@ -5550,7 +5742,7 @@ namespace Business.Replenishment
|
|
|
//await _mysql_mes_morder.InsertManyAsync(moList);
|
|
|
//await _mysql_mes_moentry.InsertManyAsync(moentryList);
|
|
|
moList = moList.OrderBy(a => a.moentry_sys_stime).ToList();
|
|
|
- await PlanOrderResourceCheck(moList,moentryList, bangid, $"V{DateTime.Now.ToString("yyyyMMddHHmm")}", input);
|
|
|
+ await PlanOrderResourceCheck(moList,moentryList, bangid, $"V{DateTime.Now.ToString("yyyyMMddHHmm")}",false);
|
|
|
return "OK";
|
|
|
}
|
|
|
|