|
|
@@ -25,6 +25,7 @@ using System.Runtime.CompilerServices;
|
|
|
using NUglify.JavaScript;
|
|
|
using MathNet.Numerics.Optimization.LineSearch;
|
|
|
using MathNet.Numerics;
|
|
|
+using Volo.Abp.Options;
|
|
|
|
|
|
namespace Business.ResourceExamineManagement
|
|
|
{
|
|
|
@@ -523,70 +524,90 @@ namespace Business.ResourceExamineManagement
|
|
|
if (sczWorkords.Any())
|
|
|
{
|
|
|
//获取计划日期在当前日期之后且已投产的日计划,将其计划开工日期改为当天
|
|
|
- List<PeriodSequenceDet> wlSequenceDets = _periodSequenceDet.Select(p => p.Domain == domain && sczWorkords.Contains(p.WorkOrds) && p.Status.ToUpper() == "W" && p.PlanDate > scheTime.Date).ToList();
|
|
|
- List<ScheduleResultOpMaster> wlSchedules = new List<ScheduleResultOpMaster>();
|
|
|
+ List<PeriodSequenceDet> wlSequenceDets = _periodSequenceDet.Select(p => p.Domain == domain && sczWorkords.Contains(p.WorkOrds) && p.PlanDate > scheTime.Date).ToList();
|
|
|
+ List<ScheduleResultOpMaster> wlSchedules = _scheduleResultOpMaster.Select(p => p.Domain == domain && sczWorkords.Contains(p.WorkOrd) && p.WorkDate > scheTime.Date).ToList();
|
|
|
//获取当天的日计划
|
|
|
List<PeriodSequenceDet> dtSequenceDets = _periodSequenceDet.Select(p => p.Domain == domain && sczWorkords.Contains(p.WorkOrds) && p.PlanDate == scheTime.Date).ToList();
|
|
|
List<ScheduleResultOpMaster> dtScheduleResults = _scheduleResultOpMaster.Select(p => p.Domain == domain && sczWorkords.Contains(p.WorkOrd) && p.WorkDate == scheTime.Date).ToList();
|
|
|
//需要更新的日计划
|
|
|
List<PeriodSequenceDet> upSequenceDets = new List<PeriodSequenceDet>();
|
|
|
List<ScheduleResultOpMaster> upScheduleResults = new List<ScheduleResultOpMaster>();
|
|
|
- if (wlSequenceDets.Any())
|
|
|
+ //需要删除的日计划
|
|
|
+ List<PeriodSequenceDet> delSequenceDets = new List<PeriodSequenceDet>();
|
|
|
+ List<ScheduleResultOpMaster> delScheduleResults = new List<ScheduleResultOpMaster>();
|
|
|
+ PeriodSequenceDet seqInfo = new PeriodSequenceDet();
|
|
|
+ ScheduleResultOpMaster schInfo = new ScheduleResultOpMaster();
|
|
|
+ foreach (var gdh in sczWorkords)
|
|
|
{
|
|
|
- var wlWorkords = wlSequenceDets.Select(p => p.WorkOrds).ToList();
|
|
|
- var wlDate = wlSequenceDets.Select(p => p.PlanDate).ToList();
|
|
|
- var wlOps = wlSequenceDets.Select(p => p.Op).ToList();
|
|
|
- //更新计划日期为当前日期
|
|
|
- foreach (var wlItem in wlSequenceDets)
|
|
|
+ //提前投产的日计划
|
|
|
+ var tcSeqs = wlSequenceDets.Where(p => p.WorkOrds == gdh && p.Status.ToUpper() == "W").ToList();
|
|
|
+ //当前工单存在未来日期投产的日计划
|
|
|
+ if (tcSeqs.Any())
|
|
|
{
|
|
|
- var curSche = _scheduleResultOpMaster.Select(p => p.Domain == domain && p.WorkOrd == wlItem.WorkOrds && p.WorkDate == wlItem.PlanDate && p.Op == wlItem.Op).FirstOrDefault();
|
|
|
- if (curSche != null)
|
|
|
+ //获取提前投产的工序
|
|
|
+ List<int> ops = tcSeqs.Select(p => p.Op).Distinct().ToList();
|
|
|
+ foreach (var op in ops)
|
|
|
{
|
|
|
- //如果当天有日计划,则只需要更新计划数量
|
|
|
- var cInfo = dtScheduleResults.FirstOrDefault(p => p.WorkOrd == wlItem.WorkOrds && p.WorkDate == scheTime.Date && p.Op == wlItem.Op);
|
|
|
- if (cInfo != null)
|
|
|
+ //当前工序提前投产的日计划
|
|
|
+ var opSeqs = tcSeqs.Where(p => p.Op == op).ToList();
|
|
|
+ //获取当天的日计划
|
|
|
+ var dtSeq = dtSequenceDets.FirstOrDefault(p=>p.WorkOrds == gdh && p.Op == op);
|
|
|
+ if (dtSeq != null )
|
|
|
{
|
|
|
- cInfo.WorkQty = cInfo.WorkQty + curSche.WorkQty;
|
|
|
- upScheduleResults.Add(cInfo);
|
|
|
+ delSequenceDets.Add(dtSeq);
|
|
|
}
|
|
|
- else {
|
|
|
- string strScheTime = scheTime.Date.ToString("yyyy-MM-dd");
|
|
|
- curSche.WorkDate = scheTime.Date;
|
|
|
- curSche.WorkStartTime = Convert.ToDateTime(curSche.WorkStartTime.ToString("yyyy-MM-dd HH:mm:ss").Replace(curSche.WorkStartTime.ToString("yyyy-MM-dd"), strScheTime));
|
|
|
- curSche.WorkEndTime = Convert.ToDateTime(curSche.WorkEndTime.ToString("yyyy-MM-dd HH:mm:ss").Replace(curSche.WorkEndTime.ToString("yyyy-MM-dd"), strScheTime));
|
|
|
- upScheduleResults.Add(curSche);
|
|
|
+ seqInfo = new PeriodSequenceDet();
|
|
|
+ seqInfo = opSeqs[0];
|
|
|
+ seqInfo.PlanDate = scheTime.Date;
|
|
|
+ seqInfo.OrdQty = opSeqs.Sum(p => p.OrdQty) + (dtSeq != null ? dtSeq.OrdQty : 0m);
|
|
|
+ seqInfo.CompQty = opSeqs.Sum(p=>p.CompQty) + (dtSeq != null ? dtSeq.CompQty : 0m);
|
|
|
+ upSequenceDets.Add(seqInfo);
|
|
|
+
|
|
|
+ //获取提前投产的日计划
|
|
|
+ var opSchs = wlSchedules.Where(p => p.WorkOrd == gdh && p.Op == op && opSeqs.Select(m => m.PlanDate).Contains(p.WorkDate)).ToList();
|
|
|
+ schInfo = opSchs[0];
|
|
|
+ string strScheTime = scheTime.Date.ToString("yyyy-MM-dd");
|
|
|
+ schInfo.WorkDate = scheTime.Date;
|
|
|
+ schInfo.WorkQty = seqInfo.OrdQty;
|
|
|
+ schInfo.WorkStartTime = Convert.ToDateTime(schInfo.WorkStartTime.ToString("yyyy-MM-dd HH:mm:ss").Replace(schInfo.WorkStartTime.ToString("yyyy-MM-dd"), strScheTime));
|
|
|
+ schInfo.WorkEndTime = Convert.ToDateTime(schInfo.WorkEndTime.ToString("yyyy-MM-dd HH:mm:ss").Replace(schInfo.WorkEndTime.ToString("yyyy-MM-dd"), strScheTime));
|
|
|
+ upScheduleResults.Add(schInfo);
|
|
|
+ //获取当天的日计划
|
|
|
+ var dtSch = dtScheduleResults.FirstOrDefault(p=>p.WorkOrd == gdh && p.Op == op);
|
|
|
+ if (dtSch != null)//当天有日计划
|
|
|
+ {
|
|
|
+ delScheduleResults.Add(dtSch);
|
|
|
}
|
|
|
}
|
|
|
- //如果当天有日计划,则只需要更新状态和计划数量
|
|
|
- var info = dtSequenceDets.FirstOrDefault(p=>p.WorkOrds == wlItem.WorkOrds && p.PlanDate == scheTime.Date && p.Op == wlItem.Op);
|
|
|
- if (info != null)
|
|
|
- {
|
|
|
- info.OrdQty = info.OrdQty + wlItem.OrdQty;
|
|
|
- info.Status = wlItem.Status;
|
|
|
- upSequenceDets.Add(info);
|
|
|
- }
|
|
|
- else { //当天没有日计划,则更新计划日期
|
|
|
- wlItem.PlanDate = scheTime.Date;
|
|
|
- upSequenceDets.Add(wlItem);
|
|
|
- }
|
|
|
- }
|
|
|
- //更新过期日计划的计划开工日期
|
|
|
- if (upSequenceDets.Any())
|
|
|
- {
|
|
|
- _periodSequenceDet.Update(upSequenceDets);
|
|
|
- }
|
|
|
- if (upScheduleResults.Any())
|
|
|
- {
|
|
|
- _scheduleResultOpMaster.Update(upScheduleResults);
|
|
|
}
|
|
|
}
|
|
|
+ //更新提前投产的日计划
|
|
|
+ if (upSequenceDets.Any())
|
|
|
+ {
|
|
|
+ _periodSequenceDet.Update(upSequenceDets);
|
|
|
+ }
|
|
|
+ if (upScheduleResults.Any())
|
|
|
+ {
|
|
|
+ _scheduleResultOpMaster.Update(upScheduleResults);
|
|
|
+ }
|
|
|
+ //删除当天的日计划
|
|
|
+ if (delSequenceDets.Any())
|
|
|
+ {
|
|
|
+ _periodSequenceDet.Delete(delSequenceDets);
|
|
|
+ }
|
|
|
+ if (delScheduleResults.Any())
|
|
|
+ {
|
|
|
+ _scheduleResultOpMaster.Update(delScheduleResults);
|
|
|
+ }
|
|
|
+
|
|
|
//删除当前日期下一天开始的工单排产记录
|
|
|
- _periodSequenceDet.Delete(p => sczWorkords.Contains(p.WorkOrds) && p.PlanDate > scheTime.Date && p.Domain == domain && p.OrdQty != 0);
|
|
|
+ _periodSequenceDet.Delete(p => sczWorkords.Contains(p.WorkOrds) && p.PlanDate > scheTime.Date && p.Domain == domain);
|
|
|
_scheduleResultOpMaster.Delete(p => sczWorkords.Contains(p.WorkOrd) && p.WorkDate > scheTime.Date && p.Domain == domain);
|
|
|
|
|
|
//保存下一天的日计划数据
|
|
|
_periodSequenceDet.Insert(periodSequenceDtls.Where(p => sczWorkords.Contains(p.WorkOrds) && p.PlanDate > scheTime.Date).ToList());
|
|
|
_scheduleResultOpMaster.Insert(scheduleMasters.Where(p => sczWorkords.Contains(p.WorkOrd) && p.WorkDate > scheTime.Date).ToList());
|
|
|
+
|
|
|
}
|
|
|
//未投产的工单,当前日期及以后的排产记录全部删除
|
|
|
List<string> wscWorkords = workOrds.Where(p => p.Status.ToUpper() != "W").Select(p => p.WorkOrd).ToList();
|