|
|
@@ -210,6 +210,11 @@ namespace Business.ResourceExamineManagement
|
|
|
/// </summary>
|
|
|
private readonly ISqlRepository<PeriodSequenceDet> _periodSequenceDet;
|
|
|
|
|
|
+ /// <summary>
|
|
|
+ /// 排产结果明细
|
|
|
+ /// </summary>
|
|
|
+ private ISqlRepository<ScheduleResultOpMaster> _scheduleResultOpMaster;
|
|
|
+
|
|
|
/// <summary>
|
|
|
/// 工作日历
|
|
|
/// </summary>
|
|
|
@@ -424,6 +429,7 @@ namespace Business.ResourceExamineManagement
|
|
|
ISqlRepository<LocationDetail> locationDetail,
|
|
|
ISqlRepository<ItemPackMaster> itemPackMaster,
|
|
|
ISqlRepository<GeneralizedCodeMaster> generalizedCodeMaster,
|
|
|
+ ISqlRepository<ScheduleResultOpMaster> scheduleResultOpMaster,
|
|
|
IUnitOfWorkManager unitOfWorkManager
|
|
|
)
|
|
|
{
|
|
|
@@ -506,6 +512,7 @@ namespace Business.ResourceExamineManagement
|
|
|
_itemPackMaster = itemPackMaster;
|
|
|
_generalizedCodeMaster = generalizedCodeMaster;
|
|
|
_unitOfWorkManager = unitOfWorkManager;
|
|
|
+ _scheduleResultOpMaster = scheduleResultOpMaster;
|
|
|
}
|
|
|
#endregion
|
|
|
|
|
|
@@ -979,6 +986,7 @@ namespace Business.ResourceExamineManagement
|
|
|
srm_Pr.pr_rqty = prlist.Sum(s => s.pr_rqty);//需求数量
|
|
|
srm_Pr.pr_aqty = prlist.Sum(s => s.pr_aqty);//申请数量
|
|
|
srm_Pr.pr_sqty = prlist.Sum(s => s.pr_sqty);//建议数量
|
|
|
+ srm_Pr.pr_ssend_date= prlist.Min(s => s.pr_ssend_date);//系统建议下单日期
|
|
|
srm_Pr.pr_sarrive_date = prlist.Min(s => s.pr_sarrive_date);//系统建议到达日期(建议到货日期)
|
|
|
srm_Pr.pr_psend_date = prlist.Min(s => s.pr_psend_date);//计划下单日期
|
|
|
srm_Pr.pr_parrive_date = prlist.Min(s => s.pr_parrive_date);//计划到达日期
|
|
|
@@ -1027,8 +1035,8 @@ namespace Business.ResourceExamineManagement
|
|
|
//List<srm_pr_main> prlist = _mysql_srm_pr_main.GetListAsync(s => s.state == 1 || s.state == 2).Result;
|
|
|
//直接按间隔多少天一次来处理数据,定时任务按周四来考虑。
|
|
|
DateTime toTime = new DateTime(2023, 7, 6);
|
|
|
- DateTime starttime = toTime.AddDays(1);
|
|
|
- DateTime endtime = toTime.AddDays(8);
|
|
|
+ DateTime starttime = toTime.Date.AddDays(8);
|
|
|
+ DateTime endtime = toTime.Date.AddDays(14);
|
|
|
List<srm_pr_main> prlist = _mysql_srm_pr_main.GetListAsync(s => s.pr_rarrive_date >= starttime && s.pr_rarrive_date <= endtime && (s.state == 1 || s.state == 3)).Result;
|
|
|
//List<srm_pr_main> prlist = _mysql_srm_pr_main.GetListAsync(s => s.icitem_id == 1949).Result;
|
|
|
//List<srm_purchase> purchaselist = _mysql_srm_purchase.GetListAsync(s => prlist.Select(c => c.icitem_id).Contains(s.icitem_id) && prlist.Select(c => c.pr_purchaseid).Contains(s.supplier_id)).Result;
|
|
|
@@ -2149,21 +2157,33 @@ namespace Business.ResourceExamineManagement
|
|
|
/// </summary>
|
|
|
/// <param name="input"></param>
|
|
|
/// <returns></returns>
|
|
|
- public async Task<string> PlanOrderResourceCheck(string workOrd)
|
|
|
+ public async Task<string> PlanOrderResourceCheck()
|
|
|
{
|
|
|
- List<string> workOrds = workOrd.Split(",").ToList();
|
|
|
+ /*List<string> workOrds = workOrd.Split(",").ToList();
|
|
|
if (workOrds.Count == 0)
|
|
|
{
|
|
|
return "";
|
|
|
- }
|
|
|
- List<mes_morder> mo_Mes_Morders = _mysql_mes_morder.GetListAsync(x => workOrds.Contains(x.morder_no)).Result;
|
|
|
- if (mo_Mes_Morders.Any())
|
|
|
+ }*/
|
|
|
+ List<mes_morder> Mes_Morders = _mysql_mes_morder.GetListAsync(x => x.morder_type == "计划工单").Result;
|
|
|
+ //先排除锁定期内的工单 //优先级排序
|
|
|
+ DateTime lookTime = DateTime.Now.Date.AddDays((double)8);
|
|
|
+ Mes_Morders = Mes_Morders.Where(s => s.moentry_sys_stime > lookTime).OrderBy(s => s.moentry_sys_stime).ToList();
|
|
|
+
|
|
|
+ if (Mes_Morders.Any())
|
|
|
{
|
|
|
+ List<string> monolist = Mes_Morders.Select(c => c.morder_no).ToList();
|
|
|
+ //清理PR的占用。
|
|
|
+ List<srm_po_occupy> occupy = await _mysql_srm_po_occupy.GetListAsync(s => monolist.Contains(s.morder_mo));
|
|
|
+ _businessDbContext.BulkDelete(occupy);
|
|
|
+
|
|
|
+ //清理锁定期外的排程数据
|
|
|
+ _periodSequenceDet.Delete(s => monolist.Contains(s.WorkOrds));
|
|
|
+ _scheduleResultOpMaster.Delete(s => monolist.Contains(s.WorkOrd));
|
|
|
//只走计划工单
|
|
|
- await OrderKittingCheck(mo_Mes_Morders, true);
|
|
|
+ await OrderKittingCheck(Mes_Morders, true);
|
|
|
}
|
|
|
else {
|
|
|
- JsonConvert.SerializeObject("未查找到对应的计划工单,请联系管理员。");
|
|
|
+ return JsonConvert.SerializeObject("未查找到对应的计划工单,请联系管理员。");
|
|
|
}
|
|
|
return JsonConvert.SerializeObject("ok");
|
|
|
}
|
|
|
@@ -2187,7 +2207,7 @@ namespace Business.ResourceExamineManagement
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- mo_Mes_Morders = _mysql_mes_morder.GetListAsync(x => x.start_time > DateTime.Now.Date.AddDays(1) && x.start_time < DateTime.Now.Date.AddDays(day) && x.morder_state != MorderEnum.Accomplish_state && !x.IsDeleted).Result;
|
|
|
+ mo_Mes_Morders = _mysql_mes_morder.GetListAsync(x => x.start_time > DateTime.Now.Date.AddDays(1) && x.start_time < DateTime.Now.Date.AddDays(day) && x.morder_state == MorderEnum.Xd_state && !x.IsDeleted).Result;
|
|
|
}
|
|
|
//只做库存是否齐套检查
|
|
|
if (mo_Mes_Morders.Any())
|
|
|
@@ -2503,7 +2523,7 @@ namespace Business.ResourceExamineManagement
|
|
|
|
|
|
//计算
|
|
|
_CalcBomViewAppService.CalcView(getBomList, bangid, item.need_number.GetValueOrDefault(), item.start_time, sklist, sentry, item.urgent, icitemlist);
|
|
|
-
|
|
|
+
|
|
|
//TODO:最晚开始时间
|
|
|
var curFacDtl = leadTimeList.FirstOrDefault(p => p.item_id == childBom.icitem_id);
|
|
|
//物料齐套时间
|
|
|
@@ -2534,63 +2554,71 @@ namespace Business.ResourceExamineManagement
|
|
|
if (list.Any())
|
|
|
rtn.srm_pr_list = _CalcBomViewAppService.SRMPRDtoList;
|
|
|
}
|
|
|
- var itemsupplierList = _srm_supplier.Find(a => prmainlist.Select(i => i.pr_purchaseid).Contains(a.mysql_id) && a.tenant_id == input.tenantId && a.factory_id == input.factoryId).Result;
|
|
|
- if (prmainlist.Any())
|
|
|
+
|
|
|
+
|
|
|
+ //获取工单数据
|
|
|
+ var workOrdMasters = _workOrdMaster.Select(p => mo_Mes_Morders.Select(c=>c.morder_no).Contains(p.WorkOrd));
|
|
|
+ workOrdMasters.ForEach(s => {
|
|
|
+ s.OrdDate = DateTime.Now.Date.AddDays(7);//锁定期
|
|
|
+ s.DueDate = DateTime.Now.Date.AddDays(7);
|
|
|
+ });
|
|
|
+ //优先级排序
|
|
|
+ workOrdMasters = workOrdMasters.OrderBy(s => s.OrdDate).ToList();
|
|
|
+ //排产
|
|
|
+ await _productionScheduleAppService.DoProductShcedule(workOrdMasters);
|
|
|
+
|
|
|
+ foreach (var wod in workOrdMasters)
|
|
|
{
|
|
|
- var pr_mainlist = ObjectMapper.Map<List<mo_srm_pr_main>, List<srm_pr_main>>(prmainlist);
|
|
|
- PoActionListDto poaction = new PoActionListDto();
|
|
|
- //TODO:工单齐套检查需要调整
|
|
|
- //AutoCreatePOFromPR(prmainlist, bangid, icitemlist, itemsupplierList, poaction);
|
|
|
- using (var unitOfWork = _unitOfWorkManager.Begin(false, true))
|
|
|
+ var morder = mo_Mes_Morders.Find(s => s.morder_no == wod.WorkOrd);
|
|
|
+ morder.moentry_sys_stime = wod.OrdDate;
|
|
|
+ morder.moentry_sys_etime = wod.DueDate;
|
|
|
+
|
|
|
+ var exa = rtn.examines.Find(s => s.morder_no == wod.WorkOrd);
|
|
|
+ //根据排产后得日期,反推PR。
|
|
|
+ var wkordPrList = prmainlist.Where(s => s.pr_mono == wod.WorkOrd).ToList();
|
|
|
+
|
|
|
+ //反算所有的PR,根据时间减去提前期
|
|
|
+ wkordPrList.ForEach(pr =>
|
|
|
{
|
|
|
- try
|
|
|
+ var ts = pr.pr_parrive_date - pr.pr_psend_date;
|
|
|
+ var icitem = icitemlist.Find(s => s.mysql_id == pr.icitem_id);
|
|
|
+ if (icitem != null)
|
|
|
{
|
|
|
- await _srm_pr_main.InsertMany(prmainlist);
|
|
|
- _businessDbContext.BulkInsert(pr_mainlist);
|
|
|
- if (poaction.mopoMain.Any())
|
|
|
- {
|
|
|
- await _srm_po_main.InsertMany(poaction.mopoMain);
|
|
|
- }
|
|
|
- if (poaction.mopolist.Any())
|
|
|
+ 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)
|
|
|
{
|
|
|
- await _srm_po_list.InsertMany(poaction.mopolist);
|
|
|
- }
|
|
|
- if (poaction.poMain.Any())
|
|
|
- {
|
|
|
- _businessDbContext.BulkInsert(poaction.poMain);
|
|
|
- }
|
|
|
- if (poaction.polist.Any())
|
|
|
- {
|
|
|
- _businessDbContext.BulkInsert(poaction.polist);
|
|
|
- }
|
|
|
- if (poaction.mopoOccupiesList.Any())
|
|
|
- {
|
|
|
- var poOccupies = ObjectMapper.Map<List<mo_srm_po_occupy>, List<srm_po_occupy>>(poaction.mopoOccupiesList);
|
|
|
- _businessDbContext.BulkInsert(poOccupies);
|
|
|
+ pr.pr_ssend_date = DateTime.Now;
|
|
|
}
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
|
|
|
- if (poaction.poMasterList.Any())
|
|
|
- {
|
|
|
- _purOrdMaster.Insert(poaction.poMasterList);
|
|
|
- //快开平台用自增列RecId关联,所以需要插入后再查给明细表赋相应的值
|
|
|
- List<string> nbrs = poaction.poMasterList.Select(a => a.PurOrd).ToList();
|
|
|
- var nbrList = _purOrdMaster.Select(a => a.Domain == "1001" && nbrs.Contains(a.PurOrd));
|
|
|
- poaction.poDetailList.ForEach(c =>
|
|
|
- {
|
|
|
- c.PurOrdRecID = nbrList.Where(a => a.PurOrd == c.PurOrd).First().RecID;
|
|
|
- });
|
|
|
- _purOrdDetail.Insert(poaction.poDetailList);
|
|
|
- }
|
|
|
- await unitOfWork.CompleteAsync();
|
|
|
+ using (var unitOfWork = _unitOfWorkManager.Begin(false, true))
|
|
|
+ {
|
|
|
+ try
|
|
|
+ {
|
|
|
+ _businessDbContext.BulkUpdate(mo_Mes_Morders);
|
|
|
+ if (prmainlist.Any())
|
|
|
+ {
|
|
|
+ var pr_mainlist = ObjectMapper.Map<List<mo_srm_pr_main>, List<srm_pr_main>>(prmainlist);
|
|
|
+ _businessDbContext.BulkInsert(pr_mainlist);
|
|
|
}
|
|
|
- catch (Exception e)
|
|
|
+ if (_CalcBomViewAppService.srm_Po_OccupiesInsert.Any())
|
|
|
{
|
|
|
- unitOfWork.Dispose();
|
|
|
- new NLogHelper("ResourceExamineAppService").WriteLog("OrderKittingCheck", "工单检查数据更新失败:" + e.Message, _currentTenant.Id.ToString());
|
|
|
+ _CalcBomViewAppService.srm_Po_OccupiesInsert.ForEach(s => { s.tenant_id = param.tenantId; s.factory_id = param.factoryId; });
|
|
|
+ await _srm_po_occupy.InsertMany(_CalcBomViewAppService.srm_Po_OccupiesInsert);
|
|
|
}
|
|
|
+ await unitOfWork.CompleteAsync();
|
|
|
+ }
|
|
|
+ catch (Exception e)
|
|
|
+ {
|
|
|
+ unitOfWork.Dispose();
|
|
|
+ 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>();
|