|
|
@@ -23,6 +23,8 @@ using Magicodes.ExporterAndImporter.Core.Extension;
|
|
|
using Volo.Abp.Domain.Repositories;
|
|
|
using System.Runtime.CompilerServices;
|
|
|
using NUglify.JavaScript;
|
|
|
+using MathNet.Numerics.Optimization.LineSearch;
|
|
|
+using MathNet.Numerics;
|
|
|
|
|
|
namespace Business.ResourceExamineManagement
|
|
|
{
|
|
|
@@ -487,6 +489,35 @@ namespace Business.ResourceExamineManagement
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ //获取计划日期在当前日期之前且报工数量为0的日计划
|
|
|
+ List<PeriodSequenceDet> oldSequenceDets = _periodSequenceDet.Select(p =>p.Domain ==domain && p.PlanDate < scheTime.Date && p.CompQty == 0).ToList();
|
|
|
+ List<ScheduleResultOpMaster> oldSchedules = new List<ScheduleResultOpMaster>();
|
|
|
+ if (oldSequenceDets.Any())
|
|
|
+ {
|
|
|
+ var oldWorkords = oldSequenceDets.Select(p => p.WorkOrds).ToList();
|
|
|
+ var oldDate = oldSequenceDets.Select(p => p.PlanDate).ToList();
|
|
|
+ var oldOps = oldSequenceDets.Select(p => p.Op).ToList();
|
|
|
+
|
|
|
+ //更新计划日期为当前日期
|
|
|
+ foreach (var oldItem in oldSequenceDets)
|
|
|
+ {
|
|
|
+ var curSche = _scheduleResultOpMaster.Select(p => p.Domain == domain && p.WorkOrd == oldItem.WorkOrds && p.WorkDate== oldItem.PlanDate && p.Op == oldItem.Op).FirstOrDefault();
|
|
|
+ if (curSche != null)
|
|
|
+ {
|
|
|
+ oldSchedules.Add(curSche);
|
|
|
+ }
|
|
|
+ oldItem.PlanDate = scheTime.Date;
|
|
|
+ }
|
|
|
+ string strScheTime = scheTime.Date.ToString("yyyy-MM-dd");
|
|
|
+ foreach (var oldItem in oldSchedules)
|
|
|
+ {
|
|
|
+ oldItem.WorkDate = scheTime.Date;
|
|
|
+ oldItem.WorkStartTime = Convert.ToDateTime(oldItem.WorkStartTime.ToString("yyyy-MM-dd HH:mm:ss").Replace(oldItem.WorkStartTime.ToString("yyyy-MM-dd"), strScheTime));
|
|
|
+ oldItem.WorkEndTime = Convert.ToDateTime(oldItem.WorkEndTime.ToString("yyyy-MM-dd HH:mm:ss").Replace(oldItem.WorkEndTime.ToString("yyyy-MM-dd"), strScheTime));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
using (TransactionScope scope = new TransactionScope())
|
|
|
{
|
|
|
try
|
|
|
@@ -502,10 +533,7 @@ namespace Business.ResourceExamineManagement
|
|
|
{
|
|
|
await _mysql_mes_morder.UpdateManyAsync(mesMorder);
|
|
|
}
|
|
|
- //删除当前日期下一天开始的工单排产记录
|
|
|
- _periodSequenceDet.Delete(p=>p.PlanDate >scheTime.Date && p.Domain == domain && p.OrdQty != 0);
|
|
|
- _scheduleResultOpMaster.Delete(p=>p.WorkDate > scheTime.Date && p.Domain == domain);
|
|
|
-
|
|
|
+
|
|
|
//添加工单工序准备开始时间记录
|
|
|
if (inserts.Any())
|
|
|
{
|
|
|
@@ -516,23 +544,46 @@ namespace Business.ResourceExamineManagement
|
|
|
{
|
|
|
_workOrdSetupTimeRecord.Update(updates);
|
|
|
}
|
|
|
+ //已投产的工单,只需要保存当前日期下一天的排产记录
|
|
|
+ List<string> sczWorkords = workOrds.Where(p => p.Status.ToUpper() == "W").Select(p=>p.WorkOrd).ToList();
|
|
|
+ if (sczWorkords.Any())
|
|
|
+ {
|
|
|
+ //删除当前日期下一天开始的工单排产记录
|
|
|
+ _periodSequenceDet.Delete(p => sczWorkords.Contains(p.WorkOrds) && p.PlanDate > scheTime.Date && p.Domain == domain && p.OrdQty != 0);
|
|
|
+ _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();
|
|
|
+ if (wscWorkords.Any())
|
|
|
+ {
|
|
|
+ //删除当前日期及以后的工单排产记录
|
|
|
+ _periodSequenceDet.Delete(p => wscWorkords.Contains(p.WorkOrds) && p.PlanDate >= scheTime.Date && p.Domain == domain && p.OrdQty != 0);
|
|
|
+ _scheduleResultOpMaster.Delete(p => wscWorkords.Contains(p.WorkOrd) && p.WorkDate >= scheTime.Date && p.Domain == domain);
|
|
|
|
|
|
- //当天日计划数据调整
|
|
|
- //获取当天重新排产的工单日计划
|
|
|
- var tdSeqDtls = periodSequenceDtls.Where(p => p.PlanDate == scheTime.Date).ToList();
|
|
|
- var tdSchMsts = scheduleMasters.Where(p => p.WorkDate == scheTime.Date).ToList();
|
|
|
- ////删除数据库中的已存在的当天日计划
|
|
|
- //_periodSequenceDet.Delete(p=>p.Domain == domain && tdSeqDtls.Select(m => m.Op).Contains(p.Op) && tdSeqDtls.Select(m => m.WorkOrds).Contains(p.WorkOrds) && p.PlanDate == scheTime.Date && p.OrdQty != 0);
|
|
|
- //_scheduleResultOpMaster.Delete(p=>p.Domain == domain && tdSchMsts.Select(m => m.Op).Contains(p.Op) && tdSchMsts.Select(m => m.WorkOrd).Contains(p.WorkOrd) && p.WorkDate == scheTime.Date);
|
|
|
- //保存下一天的日计划数据
|
|
|
- _periodSequenceDet.Insert(periodSequenceDtls.Where(p=>p.PlanDate > scheTime.Date).ToList());
|
|
|
- _scheduleResultOpMaster.Insert(scheduleMasters.Where(p => p.WorkDate > scheTime.Date).ToList());
|
|
|
+ //保存当前日期及以后的日计划数据
|
|
|
+ _periodSequenceDet.Insert(periodSequenceDtls.Where(p => wscWorkords.Contains(p.WorkOrds) && p.PlanDate >= scheTime.Date).ToList());
|
|
|
+ _scheduleResultOpMaster.Insert(scheduleMasters.Where(p => wscWorkords.Contains(p.WorkOrd) && p.WorkDate >= scheTime.Date).ToList());
|
|
|
+ }
|
|
|
+ //更新过期日计划的计划开工日期
|
|
|
+ if (oldSequenceDets.Any())
|
|
|
+ {
|
|
|
+ _periodSequenceDet.Update(oldSequenceDets);
|
|
|
+ }
|
|
|
+ if (oldSchedules.Any())
|
|
|
+ {
|
|
|
+ _scheduleResultOpMaster.Update(oldSchedules);
|
|
|
+ }
|
|
|
scope.Complete();
|
|
|
}
|
|
|
catch (Exception ex)
|
|
|
{
|
|
|
new NLogHelper("ProductionScheduleAppService").WriteLog("DoProductSchedule", "保存排产数据失败:" + ex.Message, _currentTenant.Id.ToString());
|
|
|
scope.Dispose();
|
|
|
+ return "NO|排产数据保存失败";
|
|
|
}
|
|
|
}
|
|
|
|