|
|
@@ -19,6 +19,7 @@ using MongoDB.Driver.Linq;
|
|
|
using System;
|
|
|
using System.Collections;
|
|
|
using System.Collections.Generic;
|
|
|
+using System.ComponentModel.Design;
|
|
|
using System.Linq;
|
|
|
using System.Threading.Tasks;
|
|
|
using Volo.Abp.Application.Services;
|
|
|
@@ -3154,7 +3155,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,"",false);
|
|
|
+ await PlanOrderResourceCheck(moList.OrderBy(a=>a.moentry_sys_stime).ToList(), moentryList, bang_id,"",false,false);
|
|
|
|
|
|
var examine_resultList = _mysql_examine_result.GetListAsync(a => a.bangid == bang_id).Result;
|
|
|
await _businessDbContext.BulkInsertAsync(moList);
|
|
|
@@ -3237,7 +3238,7 @@ namespace Business.Replenishment
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
- /// 根据月度计划生成周计划
|
|
|
+ /// 根据周计划生成周工单
|
|
|
/// </summary>
|
|
|
/// <param name="input"></param>
|
|
|
/// <returns></returns>
|
|
|
@@ -3315,19 +3316,24 @@ 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, "",false);
|
|
|
-
|
|
|
- var examine_resultList = _mysql_examine_result.GetListAsync(a => a.bangid == bang_id).Result;
|
|
|
await _businessDbContext.BulkInsertAsync(moList);
|
|
|
await _businessDbContext.BulkInsertAsync(moentryList);
|
|
|
|
|
|
+ //2024/01/10:卫亮工单需求对齐采购需求,取所有未下达的工单做资源检查
|
|
|
+ var moListCheck=_mysql_mes_morder.GetListAsync(a=>(a.morder_state==MorderEnum.Initial_state|| string.IsNullOrEmpty(a.morder_state)) && a.factory_id == input.factory_id).Result;
|
|
|
+ var moEntryListCheck = _mysql_mes_moentry.GetListAsync(a => moListCheck.Select(b=>b.morder_no).ToList().Contains(a.moentry_mono) && a.factory_id == input.factory_id).Result;
|
|
|
+
|
|
|
+ await PlanOrderResourceCheck(moListCheck.OrderBy(a => a.moentry_sys_stime).ToList(), moEntryListCheck, bang_id, "",false,true);
|
|
|
+
|
|
|
+ var examine_resultList = _mysql_examine_result.GetListAsync(a => a.bangid == bang_id).Result;
|
|
|
+
|
|
|
+
|
|
|
//批量保存 后期考虑子工单
|
|
|
List<WorkOrdMaster> workOrdSave = new List<WorkOrdMaster>();
|
|
|
List<WorkOrdRouting> workOrdRoutingSave = new List<WorkOrdRouting>();
|
|
|
List<WorkOrdDetail> workOrdDetails = new List<WorkOrdDetail>();
|
|
|
if (moList.Any())
|
|
|
{
|
|
|
- moList.ForEach(s => { s.create_time = DateTime.Now; });
|
|
|
List<b_bom_child_examine> childExamineList = _mysql_bom_child_examine.GetListAsync(c => examine_resultList.Select(x => x.Id).Contains(c.examine_id.GetValueOrDefault())).Result;
|
|
|
//同步工单
|
|
|
CreateWorkOrdDates(moList, routingOps, workOrdSave, workOrdRoutingSave, workOrdDetails, examine_resultList, childExamineList);
|
|
|
@@ -3356,44 +3362,43 @@ namespace Business.Replenishment
|
|
|
_businessDbContext.BulkInsert(workOrdDetails);
|
|
|
}
|
|
|
|
|
|
- weekplans.ForEach(a =>
|
|
|
+ var weekplanList = _replenishmentWeekPlan.GetListAsync(a => moListCheck.Select(b=>b.morder_no).ToList().Contains(a.ProductionOrder) && a.IsReplenishmentModel=="N" && a.factory_id == input.factory_id).Result;
|
|
|
+
|
|
|
+ weekplanList.ForEach(a =>
|
|
|
{
|
|
|
- if (a.IsReplenishmentModel == "N")
|
|
|
+ var moItem = examine_resultList.Find(b => b.morder_no == a.ProductionOrder);
|
|
|
+ List<RoutingOpDetail> routingOp = routingOps.Where(x => x.RoutingCode == a.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 < a.PlanStartDate)
|
|
|
+ {
|
|
|
+ a.ItemStatus = "齐套";
|
|
|
+ a.PlanKittingDate = moItem.kitting_times;
|
|
|
+ a.AssembleHours = Assembly == null ? 0 : Assembly.RunTime * a.Qty;
|
|
|
+ a.HeatSealHours = HeatSealing == null ? 0 : HeatSealing.RunTime * a.Qty;
|
|
|
+ a.PackageHours = Packaging == null ? 0 : Packaging.RunTime * a.Qty;
|
|
|
+ a.TotalHours = a.AssembleHours + a.HeatSealHours + a.PackageHours;
|
|
|
+ }
|
|
|
+ else
|
|
|
{
|
|
|
- var moItem = examine_resultList.Find(b => b.morder_no == a.ProductionOrder);
|
|
|
- List<RoutingOpDetail> routingOp = routingOps.Where(x => x.RoutingCode == a.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 < a.PlanStartDate)
|
|
|
- {
|
|
|
- a.ItemStatus = "齐套";
|
|
|
- a.PlanKittingDate = moItem.kitting_times;
|
|
|
- a.AssembleHours = Assembly == null ? 0 : Assembly.RunTime * a.Qty;
|
|
|
- a.HeatSealHours = HeatSealing == null ? 0 : HeatSealing.RunTime * a.Qty;
|
|
|
- a.PackageHours = Packaging == null ? 0 : Packaging.RunTime * a.Qty;
|
|
|
- a.TotalHours = a.AssembleHours + a.HeatSealHours + a.PackageHours;
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- a.ItemStatus = "欠料";
|
|
|
- a.PlanKittingDate = moItem.kitting_times;
|
|
|
- a.AssembleHours = Assembly == null ? 0 : Assembly.RunTime * a.Qty;
|
|
|
- a.HeatSealHours = HeatSealing == null ? 0 : HeatSealing.RunTime * a.Qty;
|
|
|
- a.PackageHours = Packaging == null ? 0 : Packaging.RunTime * a.Qty;
|
|
|
- a.TotalHours = a.AssembleHours + a.HeatSealHours + a.PackageHours;
|
|
|
- }
|
|
|
- var workOrd = workOrdSave.Find(b => b.WorkOrd == a.ProductionOrder);
|
|
|
- if (workOrd != null)
|
|
|
- {
|
|
|
- a.Priority = workOrd.Priority;
|
|
|
- }
|
|
|
+ a.ItemStatus = "欠料";
|
|
|
+ a.PlanKittingDate = moItem.kitting_times;
|
|
|
+ a.AssembleHours = Assembly == null ? 0 : Assembly.RunTime * a.Qty;
|
|
|
+ a.HeatSealHours = HeatSealing == null ? 0 : HeatSealing.RunTime * a.Qty;
|
|
|
+ a.PackageHours = Packaging == null ? 0 : Packaging.RunTime * a.Qty;
|
|
|
+ a.TotalHours = a.AssembleHours + a.HeatSealHours + a.PackageHours;
|
|
|
+ }
|
|
|
+ var workOrd = workOrdSave.Find(b => b.WorkOrd == a.ProductionOrder);
|
|
|
+ if (workOrd != null)
|
|
|
+ {
|
|
|
+ a.Priority = workOrd.Priority;
|
|
|
}
|
|
|
});
|
|
|
- await _businessDbContext.BulkUpdateAsync(weekplans);
|
|
|
+ await _businessDbContext.BulkUpdateAsync(weekplanList);
|
|
|
return "OK";
|
|
|
}
|
|
|
|
|
|
@@ -4453,7 +4458,7 @@ namespace Business.Replenishment
|
|
|
a.QtyOrded = newqty;
|
|
|
});
|
|
|
|
|
|
- await PlanOrderResourceCheck(moList.OrderBy(a => a.moentry_sys_stime).ToList(), moentryList, bang_id, "", true);
|
|
|
+ await PlanOrderResourceCheck(moList.OrderBy(a => a.moentry_sys_stime).ToList(), moentryList, bang_id, "", true,false);
|
|
|
|
|
|
var examine_resultList = _mysql_examine_result.GetListAsync(a => a.bangid == bang_id).Result;
|
|
|
if (weekPlan.IsReplenishmentModel == "N")
|
|
|
@@ -4552,7 +4557,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,bool isChangePriority)
|
|
|
+ public async Task<string> PlanOrderResourceCheck(List<mes_morder> Mes_Morders, List<mes_moentry> moentryList,long bangid,string analogCalcVersion,bool isChangePriority,bool IsWeekPlan)
|
|
|
{
|
|
|
if (Mes_Morders.Any())
|
|
|
{
|
|
|
@@ -4612,7 +4617,7 @@ namespace Business.Replenishment
|
|
|
// _scheduleResultOpMaster.Delete(s => monolist.Contains(s.WorkOrd));
|
|
|
//}
|
|
|
//只走计划工单
|
|
|
- var rtn = await OrderKittingCheck(Mes_Morders, moentryList, bangid,analogCalcVersion,isChangePriority, true);
|
|
|
+ var rtn = await OrderKittingCheck(Mes_Morders, moentryList, bangid,analogCalcVersion,isChangePriority, true, IsWeekPlan);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
@@ -4662,7 +4667,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 isChangePriority, 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,bool IsWeekPlan=false)
|
|
|
{
|
|
|
//资源检查结果
|
|
|
PschedDto rtn = new PschedDto();
|
|
|
@@ -4732,7 +4737,37 @@ namespace Business.Replenishment
|
|
|
AutoCreateBomBill(param.company_id.ToString(), autoCreates);
|
|
|
pretreatments = _mysql_b_bom_pretreatment.GetListAsync(s => boms.Select(c => c.mysql_id).ToList().Contains(s.sourceid)).Result;
|
|
|
}
|
|
|
- AsyncItemStockFromWMS(pretreatments);
|
|
|
+ List<string> itemNums = new List<string>();
|
|
|
+ //计算需求
|
|
|
+ List<AlignmentCalcDto> AlignmentCalcList = new List<AlignmentCalcDto>();
|
|
|
+ if (IsWeekPlan)
|
|
|
+ {
|
|
|
+ var nbrList = _nbrMaster.Select(x => x.Domain == param.factoryId.ToString() && (x.Type == "SM" || x.Type == "Z07") && x.Status.ToUpper() != "C").ToList();
|
|
|
+ if (nbrList.Any())
|
|
|
+ {
|
|
|
+ var nbrDtlList = _nbrDetail.Select(x => nbrList.Select(c => c.RecID).Contains(x.NbrRecID) && x.Status.ToUpper() != "C").ToList();
|
|
|
+ if (nbrDtlList.Any())
|
|
|
+ {
|
|
|
+ nbrDtlList.ForEach(x => {
|
|
|
+ if (x.QtyOrd - x.QtyRec > 0)
|
|
|
+ {
|
|
|
+ var dto = AlignmentCalcList.Find(s => s.ItemNum == x.ItemNum);
|
|
|
+ if (dto == null)
|
|
|
+ {
|
|
|
+ dto = new AlignmentCalcDto();
|
|
|
+ dto.ItemNum = x.ItemNum;
|
|
|
+ AlignmentCalcList.Add(dto);
|
|
|
+ }
|
|
|
+ dto.NeedQty += x.QtyOrd - x.QtyRec;
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }
|
|
|
+ itemNums.AddRange(AlignmentCalcList.Select(x => x.ItemNum));
|
|
|
+ }
|
|
|
+ var pretreatList = pretreatments.Select(x => x.item_number).Distinct().ToList();
|
|
|
+ itemNums.AddRange(pretreatList);
|
|
|
+ AsyncItemStockFromWMS(itemNums);
|
|
|
|
|
|
//数据库快照-同步mysql库数据到mongoDB中
|
|
|
await DbSnapShot(input.company_id, input.factoryId, bangid, pretreatments, analogCalcVersion);
|
|
|
@@ -4919,18 +4954,98 @@ namespace Business.Replenishment
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- //获取工单数据
|
|
|
- var workOrdMasters = _workOrdMaster.Select(p => mo_Mes_Morders.Select(c => c.morder_no).Contains(p.WorkOrd));
|
|
|
- workOrdMasters.ForEach(s => {
|
|
|
- var mo = mo_Mes_Morders.Find(m => m.morder_no == s.WorkOrd);
|
|
|
- if (mo != null)
|
|
|
+
|
|
|
+ List<srm_pr_main> updatPrList = new List<srm_pr_main>();
|
|
|
+ List<srm_pr_main> deletePrList = new List<srm_pr_main>();
|
|
|
+ List<srm_pr_main> addPrList = new List<srm_pr_main>();
|
|
|
+ if (IsWeekPlan)
|
|
|
+ {
|
|
|
+ foreach (var exami in examines)
|
|
|
+ {
|
|
|
+ exami.BomChildExamineList.ForEach(x =>
|
|
|
+ {
|
|
|
+ if ((x.erp_cls == 2 || x.erp_cls == 3) && x.is_use)
|
|
|
+ {
|
|
|
+ var dto = AlignmentCalcList.Find(s => s.ItemNum == x.item_number);
|
|
|
+ if (dto == null)
|
|
|
+ {
|
|
|
+ dto = new AlignmentCalcDto();
|
|
|
+ dto.ItemNum = x.item_number;
|
|
|
+ AlignmentCalcList.Add(dto);
|
|
|
+ }
|
|
|
+ dto.NeedQty += x.needCount;
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+ var ic_items = _mysql_ic_item.GetListAsync(x => AlignmentCalcList.Select(c => c.ItemNum).Contains(x.number)).Result;
|
|
|
+ //库存
|
|
|
+ var dbitemstockList = _mysql_ic_item_stock.GetListAsync(a => AlignmentCalcList.Select(x => x.ItemNum).Contains(a.icitem_number) && a.factory_id == param.factoryId).Result;
|
|
|
+ //获取PR和PO
|
|
|
+ var DBprmainList = _mysql_srm_pr_main.GetListAsync(x => x.factory_id == param.factoryId && x.state != 0 && x.state != 4 && string.IsNullOrEmpty(x.analogcalcversion) == true && ic_items.Select(a => a.Id).Contains(x.icitem_id.GetValueOrDefault())).Result;
|
|
|
+ //PO、DO
|
|
|
+ var purordmstList = _PurOrdMaster.Select(x => string.IsNullOrEmpty(x.Status) && x.Status.ToUpper() != "C").ToList();
|
|
|
+ var purorddtlList = new List<PurOrdDetail>();
|
|
|
+ if (purordmstList.Any())
|
|
|
+ {
|
|
|
+ purorddtlList = _PurOrdDetail.Select(x => purordmstList.Select(a => a.PurOrd).Contains(x.PurOrd) && x.QtyOrded - x.RctQty > 0 && string.IsNullOrEmpty(x.Status) && x.Status.ToUpper() != "C").ToList();
|
|
|
+ }
|
|
|
+ AlignmentCalcList.ForEach(x =>
|
|
|
+ {
|
|
|
+ var stock = dbitemstockList.Find(c => c.icitem_number == x.ItemNum);
|
|
|
+ if (stock != null)
|
|
|
+ {
|
|
|
+ x.InventoryQty += stock.sqty.GetValueOrDefault();
|
|
|
+ }
|
|
|
+ if (DBprmainList.Any() || prmainlist.Any())
|
|
|
+ {
|
|
|
+ var icitem = ic_items.Find(a => a.number == x.ItemNum);
|
|
|
+ if (icitem != null)
|
|
|
+ {
|
|
|
+ x.ProcureQty += DBprmainList.Where(a => a.icitem_id == icitem.Id).Sum(c => c.pr_aqty.GetValueOrDefault());
|
|
|
+ x.ProcureQty += prmainlist.Where(a => a.icitem_id == icitem.Id).Sum(c => c.pr_aqty.GetValueOrDefault());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (purorddtlList.Any())
|
|
|
+ {
|
|
|
+ x.ProcureQty += purorddtlList.Where(a => a.ItemNum == x.ItemNum).Sum(c => c.QtyOrded - c.RctQty);
|
|
|
+ }
|
|
|
+ //差异数量=工单需求总数-库存数量-PR、PO采购在途数量
|
|
|
+ x.DifferenceQty = x.NeedQty - x.InventoryQty - x.ProcureQty;
|
|
|
+ });
|
|
|
+ //需要增加PR的集合
|
|
|
+ var prAddList = AlignmentCalcList.Where(x => x.DifferenceQty > 0).ToList();
|
|
|
+ //需要减少PR的集合
|
|
|
+ var prDelList = AlignmentCalcList.Where(x => x.DifferenceQty < 0).ToList();
|
|
|
+ var dbPurchaseList = _mysql_srm_purchase.GetListAsync(x => x.factory_id == param.factoryId && x.quota_rate.GetValueOrDefault() > 0 && AlignmentCalcList.Select(c => c.ItemNum).Contains(x.number)).Result;
|
|
|
+ //获取需要新增的PR
|
|
|
+ var sysSet = _generalizedCodeMaster.Select(s => s.FldName == "SystemConfig" && s.Val == "ScheduleAgreement" && s.Domain == param.factoryId.ToString()).ToList();
|
|
|
+ int ScheduleAgreement = 0;//计划协议 0不启用,1启用
|
|
|
+ if (sysSet.Any())
|
|
|
{
|
|
|
- //锁定期
|
|
|
- s.OrdDate = mo.moentry_sys_stime;
|
|
|
- s.DueDate = mo.moentry_sys_stime;
|
|
|
+ if (!string.IsNullOrEmpty(sysSet[0].Ufld1))
|
|
|
+ {
|
|
|
+ int.TryParse(sysSet[0].Ufld1, out ScheduleAgreement);
|
|
|
+ }
|
|
|
}
|
|
|
+ //需要新增的PR集合
|
|
|
+ addPrList = CalcPrAdd(prAddList, dbPurchaseList, ic_items, ScheduleAgreement);
|
|
|
+ if (addPrList.Any())
|
|
|
+ {
|
|
|
+ var addPrlistDto = _serialNumberAppService.GetBillNo(param.factoryId.ToString(), "PR", addPrList.Count, "admin", 1);
|
|
|
+ int index = 0;
|
|
|
+ foreach (var p in addPrList)
|
|
|
+ {
|
|
|
+ if (addPrlistDto[index] != null)
|
|
|
+ {
|
|
|
+ p.pr_billno = addPrlistDto[index].NbrResult.ToString();
|
|
|
+ }
|
|
|
+ index++;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //数据库需要减少的PR集合
|
|
|
+ CalcPrDel(prDelList, dbPurchaseList, ic_items, DBprmainList.Where(x=>x.state==1).ToList(), updatPrList, deletePrList);//只取新增状态的PR,可以做删除或者修改
|
|
|
+ }
|
|
|
|
|
|
- });
|
|
|
using (var unitOfWork = _unitOfWorkManager.Begin(false, true))
|
|
|
{
|
|
|
try
|
|
|
@@ -5012,6 +5127,21 @@ namespace Business.Replenishment
|
|
|
_businessDbContext.BulkInsert(mainWorkOrdDetails);
|
|
|
}
|
|
|
}
|
|
|
+ if (IsWeekPlan)
|
|
|
+ {
|
|
|
+ if (addPrList.Any())
|
|
|
+ {
|
|
|
+ _businessDbContext.BulkInsert(addPrList);
|
|
|
+ }
|
|
|
+ if (updatPrList.Any())
|
|
|
+ {
|
|
|
+ _businessDbContext.BulkUpdate(updatPrList);
|
|
|
+ }
|
|
|
+ if (deletePrList.Any())
|
|
|
+ {
|
|
|
+ await _mysql_srm_pr_main.HardDeleteAsync(deletePrList);
|
|
|
+ }
|
|
|
+ }
|
|
|
await unitOfWork.CompleteAsync();
|
|
|
}
|
|
|
catch (Exception e)
|
|
|
@@ -5029,6 +5159,113 @@ namespace Business.Replenishment
|
|
|
return rtn;
|
|
|
}
|
|
|
|
|
|
+ public void CalcPrDel(List<AlignmentCalcDto> prDelList,List<srm_purchase> purchase,List<ic_item> ic_items, List<srm_pr_main> dbPrlist, List<srm_pr_main> updatPrList, List<srm_pr_main> deletePrList)
|
|
|
+ {
|
|
|
+ prDelList.ForEach(dto => {
|
|
|
+ var itemPurList = purchase.Where(x => x.number == dto.ItemNum).ToList();
|
|
|
+ var icitem = ic_items.Find(x => x.number == dto.ItemNum);
|
|
|
+ if (itemPurList.Any() && icitem!=null)
|
|
|
+ {
|
|
|
+ itemPurList.ForEach(c => {
|
|
|
+ //当前供应商需减少数量
|
|
|
+ decimal qty = Math.Floor(Math.Abs(dto.DifferenceQty) * c.quota_rate.GetValueOrDefault() / 100);
|
|
|
+ //当前物料当前供应商的在途采购申请
|
|
|
+ var itemSupplierList = dbPrlist.Where(x => x.icitem_id == icitem.Id && x.pr_purchaseid == c.supplier_id).OrderByDescending(f => f.pr_sarrive_date).ToList();
|
|
|
+ if (itemSupplierList.Any())
|
|
|
+ {
|
|
|
+ foreach (var itemPr in itemSupplierList)
|
|
|
+ {
|
|
|
+ if (itemPr.pr_aqty > qty)//一个PR够减
|
|
|
+ {
|
|
|
+ itemPr.pr_aqty = itemPr.pr_aqty - qty;
|
|
|
+ updatPrList.Add(itemPr);
|
|
|
+ dto.updatePrlist.Add(itemPr);
|
|
|
+ dto.updateQty = qty;
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ else if (itemPr.pr_aqty == qty)//一个PR够减
|
|
|
+ {
|
|
|
+ dto.deleteQty += qty;
|
|
|
+ deletePrList.Add(itemPr);
|
|
|
+ dto.deletePrlist.Add(itemPr);
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ dto.deleteQty += itemPr.pr_aqty.GetValueOrDefault();
|
|
|
+ qty -= itemPr.pr_aqty.GetValueOrDefault();
|
|
|
+ deletePrList.Add(itemPr);
|
|
|
+ dto.deletePrlist.Add(itemPr);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ public List<srm_pr_main> CalcPrAdd(List<AlignmentCalcDto> prAddList, List<srm_purchase> purchase, List<ic_item> ic_items,int ScheduleAgreement)
|
|
|
+ {
|
|
|
+ List<srm_pr_main> prList = new List<srm_pr_main>();
|
|
|
+ prAddList.ForEach(dto => {
|
|
|
+ var itemPurList = purchase.Where(x => x.number == dto.ItemNum).ToList();
|
|
|
+ var icitem = ic_items.Find(x => x.number == dto.ItemNum);
|
|
|
+ foreach (var supplier in itemPurList)
|
|
|
+ {
|
|
|
+ srm_pr_main srm_Pr = new srm_pr_main();
|
|
|
+ srm_Pr.GenerateNewId(help.NextId());
|
|
|
+ srm_Pr.pr_order_type = icitem.erp_cls == 2 ? "L" : "";//单据类型
|
|
|
+ srm_Pr.supplier_type = supplier.supplier_type;
|
|
|
+ srm_Pr.IsRequireGoods = supplier.IsRequireGoods;
|
|
|
+ if (supplier.supplier_type == "VMI")
|
|
|
+ {
|
|
|
+ srm_Pr.IsRequireGoods = 1;
|
|
|
+ srm_Pr.pr_order_type = "K";
|
|
|
+ }
|
|
|
+ srm_Pr.pr_purchaseid = supplier.supplier_id;//供应商id
|
|
|
+ srm_Pr.pr_purchasenumber = supplier.supplier_number;//供应商编码
|
|
|
+ srm_Pr.pr_purchasename = supplier.supplier_name;//供应商名称
|
|
|
+ srm_Pr.pr_purchaser = supplier.order_rector_name;//采购员
|
|
|
+ srm_Pr.pr_purchaser_num = supplier.order_rector_num;//采购员工号(采购信息表)
|
|
|
+ srm_Pr.pr_rqty = Math.Ceiling(dto.DifferenceQty * supplier.quota_rate.GetValueOrDefault() / 100);//需求数量
|
|
|
+ srm_Pr.pr_aqty = srm_Pr.pr_rqty;//申请数量
|
|
|
+ srm_Pr.pr_sqty = srm_Pr.pr_rqty;//建议数量
|
|
|
+ srm_Pr.icitem_id = icitem.Id;//物料id
|
|
|
+ srm_Pr.icitem_name = icitem.name;//物料名称
|
|
|
+ //srm_Pr.num = returnlist.num;
|
|
|
+ if (ScheduleAgreement==1)
|
|
|
+ {
|
|
|
+ supplier.lead_time = 7;//启用计划协议时,默认为7天。
|
|
|
+ srm_Pr.pr_ssend_date = DateTime.Now.Date.AddDays(1);//系统建议下单日期
|
|
|
+ srm_Pr.pr_sarrive_date = DateTime.Now.AddDays((double)supplier.lead_time.GetValueOrDefault());//系统建议到达日期(建议到货日期)
|
|
|
+ }else
|
|
|
+ {
|
|
|
+ srm_Pr.pr_ssend_date = DateTime.Now.Date.AddDays(1);//系统建议下单日期
|
|
|
+ srm_Pr.pr_sarrive_date = DateTime.Now.Date.AddDays(1).AddDays((int)(Math.Ceiling(icitem.clean_leadtime.GetValueOrDefault() + icitem.self_inspection_date.GetValueOrDefault())));
|
|
|
+ }
|
|
|
+ srm_Pr.pr_sysprice = supplier.order_price;//系统价格(含税)
|
|
|
+ srm_Pr.pr_orderprice = srm_Pr.pr_rqty * supplier.order_price;//订单价格(含税)
|
|
|
+ srm_Pr.pr_price = supplier.netpurchase_price;//采购净价(不含税)
|
|
|
+ srm_Pr.pr_rate = supplier.taxrate;//税率
|
|
|
+ srm_Pr.pr_unit = icitem.unit;//单位
|
|
|
+ srm_Pr.state = 1;//状态
|
|
|
+ srm_Pr.old_apply_aqty = 0;//已申请数量
|
|
|
+ srm_Pr.pr_type = icitem.erp_cls == 2 ?2 :3;//申请类型
|
|
|
+ srm_Pr.currencytype = supplier.currency_type == null ? 1 : supplier.currency_type.Value;//币种
|
|
|
+ srm_Pr.secInv_ratio = icitem.secinv_ratio;//安全库存触发采购比例
|
|
|
+ srm_Pr.tenant_id = param.company_id;
|
|
|
+ srm_Pr.company_id = param.company_id;
|
|
|
+ srm_Pr.factory_id = param.factoryId;
|
|
|
+ srm_Pr.create_time = DateTime.Now;
|
|
|
+ srm_Pr.create_by_name = "admin";
|
|
|
+ srm_Pr.update_time = DateTime.Now;
|
|
|
+ srm_Pr.update_by_name = "admin";
|
|
|
+ prList.Add(srm_Pr);
|
|
|
+ dto.addPrlist.Add(srm_Pr);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ return prList;
|
|
|
+ }
|
|
|
public async Task ExamineResultInsertDBAsync(List<ExamineResult> examines)
|
|
|
{
|
|
|
//检查结果写入数据库
|
|
|
@@ -5907,7 +6144,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")}",false);
|
|
|
+ await PlanOrderResourceCheck(moList,moentryList, bangid, $"V{DateTime.Now.ToString("yyyyMMddHHmm")}",false,false);
|
|
|
return "OK";
|
|
|
}
|
|
|
|
|
|
@@ -6211,12 +6448,12 @@ namespace Business.Replenishment
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
- public void AsyncItemStockFromWMS(List<b_bom_pretreatment> bom_Pretreatments)
|
|
|
+ public void AsyncItemStockFromWMS(List<string> itemList)
|
|
|
{
|
|
|
//产品编码
|
|
|
- var itemList = bom_Pretreatments.Select(a => a.item_number).Distinct().ToList();
|
|
|
+ //var itemList = bom_Pretreatments.Select(a => a.item_number).Distinct().ToList();
|
|
|
List<string> itemChildList = new List<string>();
|
|
|
- itemChildList.AddRange(itemList);
|
|
|
+ itemChildList.AddRange(itemList.Distinct());
|
|
|
if (!itemChildList.Any())
|
|
|
{
|
|
|
return;
|