|
|
@@ -792,7 +792,16 @@ namespace Business.ResourceExamineManagement
|
|
|
rtn.item_stockoccupy_list = sklist;
|
|
|
|
|
|
//检查结果写入数据库
|
|
|
- var b_Examine_Results = ObjectMapper.Map<List<ExamineResult>, List<b_examine_result>>(rtn.examines);
|
|
|
+ await ExamineResultInsertDBAsync(rtn.examines);
|
|
|
+
|
|
|
+ //清空快照数据
|
|
|
+ await ClearSnapShot(bangid);
|
|
|
+ return JsonConvert.SerializeObject("ok");
|
|
|
+ }
|
|
|
+
|
|
|
+ public async Task ExamineResultInsertDBAsync(List<ExamineResult> examines)
|
|
|
+ {
|
|
|
+ //检查结果写入数据库
|
|
|
List<b_examine_result> examineList = new List<b_examine_result>();
|
|
|
List<b_bom_child_examine> bomExamineList = new List<b_bom_child_examine>();
|
|
|
List<b_mo_occupy> mooccupyList = new List<b_mo_occupy>();
|
|
|
@@ -801,7 +810,7 @@ namespace Business.ResourceExamineManagement
|
|
|
List<b_purchase> purchaseList = new List<b_purchase>();
|
|
|
List<b_purchase_occupy> purchaseoccupyList = new List<b_purchase_occupy>();
|
|
|
|
|
|
- foreach (var ex in rtn.examines)
|
|
|
+ foreach (var ex in examines)
|
|
|
{
|
|
|
var b_ex = ObjectMapper.Map<ExamineResult, b_examine_result>(ex);
|
|
|
b_ex.GenerateNewId(help.NextId());// = help.NextId();
|
|
|
@@ -884,7 +893,7 @@ namespace Business.ResourceExamineManagement
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
- using (var unitOfWork = _unitOfWorkManager.Begin(false,true))
|
|
|
+ using (var unitOfWork = _unitOfWorkManager.Begin(false, true))
|
|
|
{
|
|
|
try
|
|
|
{
|
|
|
@@ -916,20 +925,17 @@ namespace Business.ResourceExamineManagement
|
|
|
{
|
|
|
_businessBangDbContext.BulkInsert(purchaseoccupyList);
|
|
|
}
|
|
|
- await unitOfWork.CompleteAsync();
|
|
|
+ await unitOfWork.CompleteAsync();
|
|
|
}
|
|
|
catch (Exception e)
|
|
|
{
|
|
|
new NLogHelper("ResourceExamineAppService").WriteLog("ReceiveResult", "资源检查计算结果相关数据更新失败:" + e.Message, _currentTenant.Id.ToString());
|
|
|
unitOfWork.Dispose();
|
|
|
- return e.Message;
|
|
|
}
|
|
|
}
|
|
|
- //清空快照数据
|
|
|
- await ClearSnapShot(bangid);
|
|
|
- return JsonConvert.SerializeObject("ok");
|
|
|
}
|
|
|
|
|
|
+
|
|
|
//PR手动合并
|
|
|
public async Task<string> PrMerge(string ids)
|
|
|
{
|
|
|
@@ -2770,25 +2776,24 @@ namespace Business.ResourceExamineManagement
|
|
|
morder.moentry_sys_stime = wod.OrdDate;
|
|
|
morder.moentry_sys_etime = wod.DueDate;
|
|
|
|
|
|
- var exa = rtn.examines.Find(s => s.morder_no == wod.WorkOrd);
|
|
|
- exa.latest_times = morder.moentry_sys_etime.GetValueOrDefault().Date.AddDays(1);
|
|
|
+ /*var exa = rtn.examines.Find(s => s.morder_no == wod.WorkOrd);
|
|
|
+ exa.latest_times = morder.moentry_sys_etime.GetValueOrDefault().Date.AddDays(1);*/
|
|
|
//根据排产后得日期,反推PR。
|
|
|
var wkordPrList = prmainlist.Where(s => s.pr_mono == wod.WorkOrd).ToList();
|
|
|
|
|
|
- //反算所有的PR,根据时间减去提前期
|
|
|
+ //反算所有的PR,根据时间减去提前期 //按最大预处理时间倒排
|
|
|
+ var moIcitems = icitemlist.Where(s => wkordPrList.Select(c => c.icitem_id).Contains(s.Id)).ToList();
|
|
|
+ var maxTime = moIcitems.Max(s => s.clean_leadtime.GetValueOrDefault());
|
|
|
wkordPrList.ForEach(pr =>
|
|
|
{
|
|
|
var ts = pr.pr_parrive_date - pr.pr_psend_date;
|
|
|
- var icitem = icitemlist.Find(s => s.mysql_id == pr.icitem_id);
|
|
|
- if (icitem != null)
|
|
|
+ //var icitem = icitemlist.Find(s => s.mysql_id == pr.icitem_id);
|
|
|
+ //var bce = exa.BomChildExamineList.Find(s => s.item_id == pr.icitem_id && s.num == pr.num);
|
|
|
+ pr.pr_sarrive_date = morder.moentry_sys_stime.Value.AddDays((double)(0 - maxTime - 1));//到货还需要向前推 物料的预处理时间。到货日期必须提前一天到
|
|
|
+ pr.pr_ssend_date = pr.pr_sarrive_date.GetValueOrDefault().AddDays(0 - ts.Value.Days);
|
|
|
+ if (pr.pr_ssend_date < DateTime.Now.Date.AddDays(1))
|
|
|
{
|
|
|
- var bce = exa.BomChildExamineList.Find(s => s.item_id == pr.icitem_id && s.num == pr.num);
|
|
|
- pr.pr_sarrive_date = morder.moentry_sys_stime.Value.AddDays((double)(0 - bce.pre_time.GetValueOrDefault() - 1 - icitem.clean_leadtime.GetValueOrDefault()));//到货还需要向前推 物料的预处理时间。到货日期必须提前一天到
|
|
|
- pr.pr_ssend_date = pr.pr_sarrive_date.GetValueOrDefault().AddDays(0 - ts.Value.Days);
|
|
|
- if (pr.pr_ssend_date < DateTime.Now.Date.AddDays(1))
|
|
|
- {
|
|
|
- pr.pr_ssend_date = DateTime.Now.Date.AddDays(1);
|
|
|
- }
|
|
|
+ pr.pr_ssend_date = DateTime.Now.Date.AddDays(1);
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
@@ -2816,142 +2821,10 @@ namespace Business.ResourceExamineManagement
|
|
|
new NLogHelper("ResourceExamineAppService").WriteLog("OrderKittingCheck", "工单检查数据更新失败:" + e.Message, _currentTenant.Id.ToString());
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
- //检查结果写入数据库
|
|
|
- var b_Examine_Results = ObjectMapper.Map<List<ExamineResult>, List<b_examine_result>>(rtn.examines);
|
|
|
- List<b_examine_result> examineList = new List<b_examine_result>();
|
|
|
- List<b_bom_child_examine> bomExamineList = new List<b_bom_child_examine>();
|
|
|
- List<b_mo_occupy> mooccupyList = new List<b_mo_occupy>();
|
|
|
- List<b_mo_order> moorderList = new List<b_mo_order>();
|
|
|
- List<b_ooder> ooderList = new List<b_ooder>();
|
|
|
- List<b_purchase> purchaseList = new List<b_purchase>();
|
|
|
- List<b_purchase_occupy> purchaseoccupyList = new List<b_purchase_occupy>();
|
|
|
-
|
|
|
- foreach (var ex in rtn.examines)
|
|
|
- {
|
|
|
- var b_ex = ObjectMapper.Map<ExamineResult, b_examine_result>(ex);
|
|
|
- b_ex.GenerateNewId(help.NextId());// = help.NextId();
|
|
|
- if (_CalcBomViewAppService.mordersInsertList.Any())
|
|
|
- {
|
|
|
- var moentry = _CalcBomViewAppService.moentriesInsertList.Where(s => s.soentry_id == b_ex.sentry_id).FirstOrDefault();
|
|
|
- if (moentry != null)
|
|
|
- {
|
|
|
- var sentryMo = _CalcBomViewAppService.mordersInsertList.Where(s => s.mysql_id == moentry.moentry_moid).FirstOrDefault();
|
|
|
- if (sentryMo != null)
|
|
|
- {
|
|
|
- b_ex.morder_id = sentryMo.mysql_id;
|
|
|
- b_ex.morder_no = sentryMo.morder_no;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- b_ex.create_time = DateTime.Now;
|
|
|
- b_ex.company_id = param.company_id;
|
|
|
- b_ex.factory_id = param.factoryId;
|
|
|
- examineList.Add(b_ex);
|
|
|
- ex.BomChildExamineList.ForEach(s =>
|
|
|
- {
|
|
|
- var bc_ex = ObjectMapper.Map<BomChildExamineDto, b_bom_child_examine>(s);
|
|
|
- bc_ex.GenerateNewId(help.NextId());
|
|
|
- bc_ex.examine_id = b_ex.Id;
|
|
|
- bc_ex.company_id = param.company_id;
|
|
|
- bc_ex.factory_id = param.factoryId;
|
|
|
- bc_ex.create_time = DateTime.Now;
|
|
|
- bomExamineList.Add(bc_ex);
|
|
|
-
|
|
|
- if (s.mo_occupy_list != null)
|
|
|
- {
|
|
|
- var olist = ObjectMapper.Map<List<mo_occupy>, List<b_mo_occupy>>(s.mo_occupy_list);
|
|
|
- olist.ForEach(o =>
|
|
|
- {
|
|
|
- o.bom_child_examine_id = bc_ex.Id; o.company_id = param.company_id;
|
|
|
- o.factory_id = param.factoryId;
|
|
|
- });
|
|
|
- mooccupyList.AddRange(olist);
|
|
|
- }
|
|
|
- if (s.make_list != null)
|
|
|
- {
|
|
|
- var mlist = ObjectMapper.Map<List<moorder>, List<b_mo_order>>(s.make_list);
|
|
|
- mlist.ForEach(o =>
|
|
|
- {
|
|
|
- o.bom_child_examine_id = bc_ex.Id; o.company_id = param.company_id;
|
|
|
- o.factory_id = param.factoryId;
|
|
|
- });
|
|
|
- moorderList.AddRange(mlist);
|
|
|
- }
|
|
|
- if (s.subcontracting_list != null)
|
|
|
- {
|
|
|
- var slist = ObjectMapper.Map<List<ooder>, List<b_ooder>>(s.subcontracting_list);
|
|
|
- slist.ForEach(o =>
|
|
|
- {
|
|
|
- o.bom_child_examine_id = bc_ex.Id; o.company_id = param.company_id;
|
|
|
- o.factory_id = param.factoryId;
|
|
|
- });
|
|
|
- ooderList.AddRange(slist);
|
|
|
- }
|
|
|
- if (s.purchase_list != null)
|
|
|
- {
|
|
|
- var plist = ObjectMapper.Map<List<purchase>, List<b_purchase>>(s.purchase_list);
|
|
|
- plist.ForEach(o =>
|
|
|
- {
|
|
|
- o.bom_child_examine_id = bc_ex.Id; o.company_id = param.company_id;
|
|
|
- o.factory_id = param.factoryId;
|
|
|
- });
|
|
|
- purchaseList.AddRange(plist);
|
|
|
- }
|
|
|
- if (s.purchase_occupy_list != null)
|
|
|
- {
|
|
|
- var purlist = ObjectMapper.Map<List<purchase_occupy>, List<b_purchase_occupy>>(s.purchase_occupy_list);
|
|
|
- purlist.ForEach(o =>
|
|
|
- {
|
|
|
- o.bom_child_examine_id = bc_ex.Id; o.company_id = param.company_id;
|
|
|
- o.factory_id = param.factoryId;
|
|
|
- });
|
|
|
- purchaseoccupyList.AddRange(purlist);
|
|
|
- }
|
|
|
- });
|
|
|
- }
|
|
|
- using (var unitOfWork = _unitOfWorkManager.Begin(false, true))
|
|
|
- {
|
|
|
- try
|
|
|
- {
|
|
|
- if (examineList.Any())
|
|
|
- {
|
|
|
- _businessBangDbContext.BulkInsert(examineList);
|
|
|
- }
|
|
|
- if (bomExamineList.Any())
|
|
|
- {
|
|
|
- _businessBangDbContext.BulkInsert(bomExamineList.OrderBy(s => s.num_order).ToList());
|
|
|
- }
|
|
|
- if (mooccupyList.Any())
|
|
|
- {
|
|
|
- _businessBangDbContext.BulkInsert(mooccupyList);
|
|
|
- }
|
|
|
- if (moorderList.Any())
|
|
|
- {
|
|
|
- _businessBangDbContext.BulkInsert(moorderList);
|
|
|
- }
|
|
|
- if (ooderList.Any())
|
|
|
- {
|
|
|
- _businessBangDbContext.BulkInsert(ooderList);
|
|
|
- }
|
|
|
- if (purchaseList.Any())
|
|
|
- {
|
|
|
- _businessBangDbContext.BulkInsert(purchaseList);
|
|
|
- }
|
|
|
- if (purchaseoccupyList.Any())
|
|
|
- {
|
|
|
- _businessBangDbContext.BulkInsert(purchaseoccupyList);
|
|
|
- }
|
|
|
- await unitOfWork.CompleteAsync();
|
|
|
- }
|
|
|
- catch (Exception e)
|
|
|
- {
|
|
|
- new NLogHelper("ResourceExamineAppService").WriteLog("OrderKittingCheck", "工单检查资源检查计算结果数据更新失败:" + e.Message, _currentTenant.Id.ToString());
|
|
|
- unitOfWork.Dispose();
|
|
|
- }
|
|
|
- }
|
|
|
+
|
|
|
}
|
|
|
-
|
|
|
+ //检查结果写入数据库
|
|
|
+ await ExamineResultInsertDBAsync(examines);
|
|
|
//清空快照数据
|
|
|
await ClearSnapShot(bangid);
|
|
|
return rtn;
|
|
|
@@ -3151,29 +3024,47 @@ namespace Business.ResourceExamineManagement
|
|
|
{
|
|
|
if (dbPeriodSequences.Any())
|
|
|
{
|
|
|
+ List<string> AllLines = dbPeriodSequences.Where(a => workOrdMasters.Select(b=>b.WorkOrd).Contains(a.WorkOrds)).Select(a => a.Line).Distinct().ToList();
|
|
|
+ List<LineMaster> AllLineMasters = _lineMaster.Select(p => AllLines.Contains(p.Line) && p.Domain == workOrdMasters[0].Domain && p.IsActive);
|
|
|
+
|
|
|
+
|
|
|
//按照工单领料,一个工单一个领料单,之前是按照排产日期和产线分别领料
|
|
|
foreach (var workord in workOrdMasters)
|
|
|
{
|
|
|
Dictionary<string, decimal> dictItemQty = new Dictionary<string, decimal>();
|
|
|
List<string> lines = dbPeriodSequences.Where(a => a.WorkOrds == workord.WorkOrd).Select(a => a.Line).Distinct().ToList();
|
|
|
- List<LineMaster> lineMasters = _lineMaster.Select(p => lines.Contains(p.Line) && p.Domain == "1001" && p.IsActive);
|
|
|
+ List<LineMaster> lineMasters = AllLineMasters.Where(p => lines.Contains(p.Line) && p.Domain == workord.Domain && p.IsActive).ToList();
|
|
|
List<ProductStructureMaster> itemList = GetProductStructure(dbPeriodSequences.First(a => a.WorkOrds == workord.WorkOrd).ItemNum);
|
|
|
var childrenList = itemList.Select(a => a.ComponentItem).Distinct().ToList();
|
|
|
- List<ItemMaster> itemLocList = _itemMaster.Select(p => childrenList.Contains(p.ItemNum) && p.Domain == "1001" && p.IsActive).Distinct().ToList();
|
|
|
- List<ItemPackMaster> itemPackList = _itemPackMaster.Select(p => childrenList.Contains(p.ItemNum) && p.Domain == "1001" && p.IsActive).Distinct().ToList();
|
|
|
+ List<ItemMaster> itemLocList = _itemMaster.Select(p => childrenList.Contains(p.ItemNum) && p.Domain == workord.Domain && p.IsActive).Distinct().ToList();
|
|
|
+ var dopIcitems = _ic_item.GetListAsync(s => itemLocList.Select(c => c.ItemNum).Contains(s.number)).Result;
|
|
|
+ //获取预处理提前期最大值
|
|
|
+ decimal cleanTime = 0;
|
|
|
+ if (dopIcitems.Any())
|
|
|
+ {
|
|
|
+ cleanTime = dopIcitems.Max(s => s.clean_leadtime.GetValueOrDefault());
|
|
|
+ }
|
|
|
+ List<ItemPackMaster> itemPackList = _itemPackMaster.Select(p => childrenList.Contains(p.ItemNum) && p.Domain == workord.Domain && p.IsActive).Distinct().ToList();
|
|
|
var Nbr = GetMaxSerialNumber(417416915624005);
|
|
|
//根据某一产线汇总即该工单的总数
|
|
|
decimal QtyOrdSum = dbPeriodSequences.Where(a => a.WorkOrds == workord.WorkOrd && a.Line == lines[0]).Sum(a => a.OrdQty.GetValueOrDefault());
|
|
|
string LocationTo= lineMasters.FirstOrDefault()?.Location;
|
|
|
+ DateTime eff = workord.OrdDate.GetValueOrDefault().Date.AddDays(-1);
|
|
|
+ DateTime start = eff.AddDays((double)(0 - cleanTime - 1));
|
|
|
+ if (start <= DateTime.Now.Date)
|
|
|
+ {
|
|
|
+ start = DateTime.Now.Date;
|
|
|
+ }
|
|
|
nbrMasterList.Add(new NbrMaster
|
|
|
{
|
|
|
Domain = "1001",
|
|
|
Type = "SM",
|
|
|
Nbr = Nbr,
|
|
|
Remark = "下达自动领料",
|
|
|
- Date = dbPeriodSequences.Where(a => a.WorkOrds == workord.WorkOrd).Min(a => a.PlanDate),
|
|
|
+ //Date = dbPeriodSequences.Where(a => a.WorkOrds == workord.WorkOrd).Min(a => a.PlanDate),
|
|
|
//ProdLine = item.Line,
|
|
|
- EffDate = workord.OrdDate.GetValueOrDefault().Date.AddDays(-1),
|
|
|
+ EffDate = eff,
|
|
|
+ Date = start,
|
|
|
Status = "",
|
|
|
WorkOrd = workord.WorkOrd,
|
|
|
QtyOrd = QtyOrdSum,
|