|
|
@@ -1909,7 +1909,7 @@ namespace Business.ResourceExamineManagement
|
|
|
if (srm_po_list.Count > 0)
|
|
|
{
|
|
|
//采购订单--取出状态为在途的PO
|
|
|
- var srm_po_main = _mysql_srm_po_main.GetListAsync(x => x.company_id == companyId && x.factory_id == factoryId && srm_po_list.Select(c => c.po_id).Contains(x.Id) && x.state != 4).Result;
|
|
|
+ var srm_po_main = _mysql_srm_po_main.GetListAsync(x => x.company_id == companyId && x.factory_id == factoryId && srm_po_list.Select(c => c.po_id).Contains(x.Id) && x.state != 3).Result;
|
|
|
if (srm_po_main.Count > 0)
|
|
|
{
|
|
|
var moSrm_po_main = ObjectMapper.Map<List<srm_po_main>, List<mo_srm_po_main>>(srm_po_main);
|
|
|
@@ -2349,22 +2349,17 @@ namespace Business.ResourceExamineManagement
|
|
|
/// </summary>
|
|
|
/// <param name="input"></param>
|
|
|
/// <returns></returns>
|
|
|
- public async Task<string> PlanOrderResourceCheck(string companyid)
|
|
|
+ public async Task<string> PlanOrderResourceCheck(string domain)
|
|
|
{
|
|
|
- /*List<string> workOrds = workOrd.Split(",").ToList();
|
|
|
- if (workOrds.Count == 0)
|
|
|
+ if (string.IsNullOrEmpty(domain))
|
|
|
{
|
|
|
- return "";
|
|
|
- }*/
|
|
|
- if (string.IsNullOrEmpty(companyid))
|
|
|
- {
|
|
|
- return "当前任务公司编码为空,请检查。";
|
|
|
+ return "当前任务工厂编号为空,请检查。";
|
|
|
}
|
|
|
|
|
|
- List<mes_morder> Mes_Morders = _mysql_mes_morder.GetListAsync(x => x.morder_type == "计划工单" && x.morder_state == "初始" && x.company_id == long.Parse(companyid)).Result;
|
|
|
+ List<mes_morder> Mes_Morders = _mysql_mes_morder.GetListAsync(x => x.morder_state == "初始" && x.factory_id.ToString() == domain).Result;
|
|
|
|
|
|
- //先排除锁定期内的工单 //优先级排序
|
|
|
- var sysSet = _generalizedCodeMaster.Select(s => s.FldName == "SystemConfig" && s.Val == "WorkOrderLockPeriod" && s.Domain == companyid).ToList();
|
|
|
+ /*//先排除锁定期内的工单 //优先级排序
|
|
|
+ var sysSet = _generalizedCodeMaster.Select(s => s.FldName == "SystemConfig" && s.Val == "WorkOrderLockPeriod" && s.Domain == domain).ToList();
|
|
|
decimal lookDay = 0;
|
|
|
if (sysSet.Any())
|
|
|
{
|
|
|
@@ -2373,12 +2368,17 @@ namespace Business.ResourceExamineManagement
|
|
|
}
|
|
|
lookDay = lookDay == 0 ? 7 : lookDay;
|
|
|
DateTime lookTime = DateTime.Now.Date.AddDays((double)lookDay);
|
|
|
- Mes_Morders = Mes_Morders.Where(s => s.moentry_sys_stime > lookTime || s.moentry_sys_stime == null).OrderBy(s => s.moentry_sys_stime).ToList();
|
|
|
+ Mes_Morders = Mes_Morders.Where(s => s.moentry_sys_stime > lookTime || s.moentry_sys_stime == null).OrderBy(s => s.moentry_sys_stime).ToList();*/
|
|
|
+
|
|
|
+
|
|
|
|
|
|
if (Mes_Morders.Any())
|
|
|
{
|
|
|
- Mes_Morders.ForEach(s => { s.moentry_sys_stime = DateTime.Now.Date.AddDays((double)lookDay + 1); });
|
|
|
List<string> monolist = Mes_Morders.Select(c => c.morder_no).ToList();
|
|
|
+
|
|
|
+ #region PR的清除目前不处理,待后续二期方案解决。
|
|
|
+ /*Mes_Morders.ForEach(s => { s.moentry_sys_stime = DateTime.Now.Date.AddDays((double)lookDay + 1); });
|
|
|
+
|
|
|
//清理PR的占用。
|
|
|
//如果PR没有转PO,则PR没有合并,就删除,有合并,就减少合并后的PR的数量。
|
|
|
var prlist = _mysql_srm_pr_main.GetListAsync(s => monolist.Contains(s.pr_mono)).Result;
|
|
|
@@ -2404,25 +2404,26 @@ namespace Business.ResourceExamineManagement
|
|
|
updatelist.Add(getPr);
|
|
|
}
|
|
|
}
|
|
|
- }
|
|
|
+ }*/
|
|
|
+ #endregion
|
|
|
List<srm_po_occupy> occupy = await _mysql_srm_po_occupy.GetListAsync(s => monolist.Contains(s.morder_mo));
|
|
|
_businessDbContext.BulkDelete(occupy);
|
|
|
- if (updatelist.Any())
|
|
|
+ /*if (updatelist.Any())
|
|
|
{
|
|
|
_businessDbContext.BulkUpdate(updatelist);
|
|
|
}
|
|
|
if (dellist.Any())
|
|
|
{
|
|
|
_businessDbContext.BulkDelete(dellist);
|
|
|
- }
|
|
|
+ }*/
|
|
|
//清理掉库存占用
|
|
|
var itemstockoccupy = _mysql_ic_item_stockoccupy.GetListAsync(s => monolist.Contains(s.morder_mo)).Result;
|
|
|
if (itemstockoccupy.Any())
|
|
|
{
|
|
|
_businessDbContext.BulkDelete(itemstockoccupy);
|
|
|
}
|
|
|
- //清理锁定期外的排程数据.
|
|
|
- var periodList = _periodSequenceDet.Select(s => monolist.Contains(s.WorkOrds));
|
|
|
+ //清理锁定期外的排程数据.工单排产会清理重排
|
|
|
+ /*var periodList = _periodSequenceDet.Select(s => monolist.Contains(s.WorkOrds));
|
|
|
if (periodList.Any())
|
|
|
{
|
|
|
_periodSequenceDet.Delete(s => monolist.Contains(s.WorkOrds));
|
|
|
@@ -2431,11 +2432,12 @@ namespace Business.ResourceExamineManagement
|
|
|
if (schedulList.Any())
|
|
|
{
|
|
|
_scheduleResultOpMaster.Delete(s => monolist.Contains(s.WorkOrd));
|
|
|
- }
|
|
|
+ }*/
|
|
|
//只走计划工单
|
|
|
var rtn = await OrderKittingCheck(Mes_Morders, true);
|
|
|
}
|
|
|
- else {
|
|
|
+ else
|
|
|
+ {
|
|
|
return "未查找到对应的计划工单,请联系管理员。";
|
|
|
}
|
|
|
return "ok";
|
|
|
@@ -2702,7 +2704,7 @@ namespace Business.ResourceExamineManagement
|
|
|
DateTime etime = DateTime.Now.Date.AddYears(2);
|
|
|
if (!string.IsNullOrEmpty(endtime))
|
|
|
{
|
|
|
- DateTime.TryParse(startime, out etime);
|
|
|
+ DateTime.TryParse(endtime, out etime);
|
|
|
}
|
|
|
//根据排产日计划来获取
|
|
|
var periodSd = _periodSequenceDet.Select(s => s.Domain == domain && string.IsNullOrEmpty(s.Status) == true && stime <= s.PlanDate && s.PlanDate <= etime).ToList();
|
|
|
@@ -3013,15 +3015,14 @@ namespace Business.ResourceExamineManagement
|
|
|
PschedDto rtn = new PschedDto();
|
|
|
//资源检查明细list
|
|
|
List<ExamineResult> examines = new List<ExamineResult>();
|
|
|
- OrderCheckDto input = new OrderCheckDto();
|
|
|
- if (mo_Mes_Morders.Any())
|
|
|
+ //OrderCheckDto input = new OrderCheckDto();
|
|
|
+ if (!mo_Mes_Morders.Any())
|
|
|
{
|
|
|
- input.company_id = mo_Mes_Morders[0].company_id;
|
|
|
- input.factoryId = mo_Mes_Morders[0].factory_id.GetValueOrDefault();
|
|
|
+ return rtn;
|
|
|
}
|
|
|
//资源检查入参全局变量赋值
|
|
|
- param.company_id = input.company_id;
|
|
|
- param.factoryId = input.factoryId;
|
|
|
+ param.company_id = mo_Mes_Morders[0].company_id;
|
|
|
+ param.factoryId = mo_Mes_Morders[0].factory_id.GetValueOrDefault();
|
|
|
param.checkflag = false;
|
|
|
param.checkPlan = planCheck;
|
|
|
//生成当前计算bangid
|
|
|
@@ -3038,12 +3039,12 @@ namespace Business.ResourceExamineManagement
|
|
|
List<mes_moentry> mo_Mes_Moentries = _mysql_mes_moentry.GetListAsync(x => morderIdList.Contains(x.moentry_moid.Value)).Result;
|
|
|
|
|
|
//获取订单行数据
|
|
|
- List<crm_seorderentry> sentrys = _mysql_crm_seorderentry.GetListAsync(p => p.company_id == input.company_id && p.factory_id == input.factoryId && !p.IsDeleted && mo_Mes_Moentries.Select(x => x.soentry_id).Contains(p.Id)).Result;
|
|
|
+ List<crm_seorderentry> sentrys = _mysql_crm_seorderentry.GetListAsync(p => p.company_id == param.company_id && p.factory_id == param.factoryId && !p.IsDeleted && mo_Mes_Moentries.Select(x => x.soentry_id).Contains(p.Id)).Result;
|
|
|
|
|
|
//删除同步Mysql后旧数据
|
|
|
await DeleteMySqlOldData(sentrys);
|
|
|
|
|
|
- List<mo_ic_bom> boms = _ic_bom.GetListAsync(p => mo_Mes_Morders.Select(m => m.bom_number).Contains(p.bom_number) && p.factory_id == input.factoryId && p.company_id == input.company_id && !p.IsDeleted).Result.ToList();
|
|
|
+ List<mo_ic_bom> boms = _ic_bom.GetListAsync(p => mo_Mes_Morders.Select(m => m.bom_number).Contains(p.bom_number) && p.factory_id == param.factoryId && p.company_id == param.company_id && !p.IsDeleted).Result.ToList();
|
|
|
|
|
|
//物料bom
|
|
|
List<mo_ic_bom> bomlist = new List<mo_ic_bom>();
|
|
|
@@ -3077,9 +3078,21 @@ namespace Business.ResourceExamineManagement
|
|
|
}
|
|
|
|
|
|
//数据库快照-同步mysql库数据到mongoDB中
|
|
|
- await DbSnapShot(input.company_id, input.factoryId, bangid, pretreatments);
|
|
|
+ await DbSnapShot(param.company_id, param.factoryId, bangid, pretreatments);
|
|
|
|
|
|
DataInitialization(boms, bangid, icitemlist, stocklist, pretreatments, sklist);
|
|
|
+
|
|
|
+ //调用优先级计算算法
|
|
|
+ var workOrds = _replenishmentAppService.CalcPriority(mo_Mes_Morders.Select(p => p.morder_no).ToList(), param.factoryId.ToString());
|
|
|
+ List<mes_morder> priorityMorderList = new List<mes_morder>();
|
|
|
+ foreach (var work in workOrds)
|
|
|
+ {
|
|
|
+ var mo = mo_Mes_Morders.Find(s => s.morder_no == work.WorkOrd);
|
|
|
+ if (mo != null)
|
|
|
+ {
|
|
|
+ priorityMorderList.Add(mo);
|
|
|
+ }
|
|
|
+ }
|
|
|
if (!planCheck)
|
|
|
{
|
|
|
//如果是齐套检查,则不考虑其他数据的占用,只看原材料库存
|
|
|
@@ -3089,7 +3102,7 @@ namespace Business.ResourceExamineManagement
|
|
|
_purchaseOrderAppService.param = param;
|
|
|
_CalcBomViewAppService.param = param;
|
|
|
_CalcBomViewAppService.IsInverted = true;
|
|
|
- foreach (var item in mo_Mes_Morders)
|
|
|
+ foreach (var item in priorityMorderList)
|
|
|
{
|
|
|
var moentry = mo_Mes_Moentries.Find(s => s.moentry_moid == item.Id);
|
|
|
if (moentry == null)
|
|
|
@@ -3131,7 +3144,7 @@ namespace Business.ResourceExamineManagement
|
|
|
_CalcBomViewAppService.BomStock(getBomList, stocklist, bangid);
|
|
|
|
|
|
//计算
|
|
|
- _CalcBomViewAppService.CalcView(getBomList, bangid, item.need_number.GetValueOrDefault(), item.start_time, sklist, sentry, icitemlist);
|
|
|
+ _CalcBomViewAppService.CalcView(getBomList, bangid, item.need_number.GetValueOrDefault(), item.moentry_sys_stime, sklist, sentry, icitemlist);
|
|
|
|
|
|
//TODO:最晚开始时间
|
|
|
var curFacDtl = leadTimeList.FirstOrDefault(p => p.item_id == childBom.icitem_id);
|
|
|
@@ -3164,61 +3177,26 @@ namespace Business.ResourceExamineManagement
|
|
|
rtn.srm_pr_list = _CalcBomViewAppService.SRMPRDtoList;
|
|
|
}
|
|
|
|
|
|
-
|
|
|
//获取工单数据
|
|
|
- var workOrdMasters = _workOrdMaster.Select(p => mo_Mes_Morders.Select(c=>c.morder_no).Contains(p.WorkOrd));
|
|
|
+ var workOrdMasters = _workOrdMaster.Select(p => mo_Mes_Morders.Select(c => c.morder_no).Contains(p.WorkOrd) && p.Domain == param.factoryId.ToString());
|
|
|
workOrdMasters.ForEach(s => {
|
|
|
var mo = mo_Mes_Morders.Find(m => m.morder_no == s.WorkOrd);
|
|
|
if (mo != null)
|
|
|
{
|
|
|
- //锁定期
|
|
|
s.OrdDate = mo.moentry_sys_stime;
|
|
|
s.DueDate = mo.moentry_sys_stime;
|
|
|
}
|
|
|
|
|
|
});
|
|
|
- //优先级排序
|
|
|
- workOrdMasters = workOrdMasters.OrderBy(s => s.OrdDate).ToList();
|
|
|
- //排产
|
|
|
- //await _productionScheduleAppService.DoProductSchedule(workOrdMasters, param.factoryId.ToString());
|
|
|
-
|
|
|
- foreach (var wod in workOrdMasters)
|
|
|
- {
|
|
|
- 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);
|
|
|
- exa.latest_times = morder.moentry_sys_etime.GetValueOrDefault().Date.AddDays(1);*/
|
|
|
- //根据排产后得日期,反推PR。
|
|
|
- /*var wkordPrList = prmainlist.Where(s => s.pr_mono == wod.WorkOrd).ToList();
|
|
|
-
|
|
|
- //反算所有的PR,根据时间减去提前期 //按最大预处理时间倒排
|
|
|
- var moIcitems = icitemlist.Where(s => s.is_clean == 1 && wkordPrList.Select(c => c.icitem_id).Contains(s.mysql_id)).ToList();
|
|
|
- //获取预处理提前期最大值
|
|
|
- decimal maxTime = 0;
|
|
|
- if (moIcitems.Any())
|
|
|
- {
|
|
|
- maxTime = moIcitems.Max(x => x.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);
|
|
|
- //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))
|
|
|
- {
|
|
|
- pr.pr_ssend_date = DateTime.Now.Date.AddDays(1);
|
|
|
- }
|
|
|
- });*/
|
|
|
- }
|
|
|
using (var unitOfWork = _unitOfWorkManager.Begin(false, true))
|
|
|
{
|
|
|
try
|
|
|
{
|
|
|
_businessDbContext.BulkUpdate(mo_Mes_Morders);
|
|
|
+ if (workOrdMasters.Any())
|
|
|
+ {
|
|
|
+ _workOrdMaster.Update(workOrdMasters);
|
|
|
+ }
|
|
|
if (prmainlist.Any())
|
|
|
{
|
|
|
var pr_mainlist = ObjectMapper.Map<List<mo_srm_pr_main>, List<srm_pr_main>>(prmainlist);
|
|
|
@@ -3958,6 +3936,7 @@ namespace Business.ResourceExamineManagement
|
|
|
workOrd = new WorkOrdMaster();
|
|
|
workOrd.Domain = item.factory_id.ToString();
|
|
|
workOrd.OrdDate = item.moentry_sys_stime;
|
|
|
+ workOrd.DueDate = item.moentry_sys_etime;
|
|
|
workOrd.ReleaseDate = Convert.ToDateTime(item.moentry_sys_stime.GetValueOrDefault().ToString("u"));
|
|
|
workOrd.WorkOrd = item.morder_no;
|
|
|
workOrd.ItemNum = item.product_code;//物料编码
|
|
|
@@ -4405,7 +4384,7 @@ namespace Business.ResourceExamineManagement
|
|
|
public async Task<string> ProductionSchedule(string domain)
|
|
|
{
|
|
|
//获取需要排产的工单(获取四周的工单:正常工单+已审批通过的特殊工单)
|
|
|
- DateTime endDate = DateTime.Now.Date.AddDays(28).AddDays(1);
|
|
|
+ DateTime endDate = DateTime.Now.Date.AddDays(118).AddDays(1);
|
|
|
//取数开始时间为当前天的下一天
|
|
|
DateTime startDate = DateTime.Now.Date.AddDays(1);
|
|
|
//尚未开始生产的工单+正在生产的工单
|