Browse Source

手动排产接口调整

heteng 2 years ago
parent
commit
b76365255c

+ 2 - 2
MicroServices/Business/Business.Application.Contracts/ResourceExamineManagement/IResourceExamineAppService.cs

@@ -17,9 +17,9 @@ namespace Business.ResourceExamineManagement
         /// <summary>
         /// Éú²úÅŲú
         /// </summary>
-        /// <param name="workOrds"></param>
+        /// <param name="domain"></param>
         /// <returns></returns>
-        Task<string> ProductionSchedule(string workOrds, string domain);
+        Task<string> ProductionSchedule(string domain);
 
         /// <summary>
         /// Ï´ïÁìÁÏ

+ 16 - 5
MicroServices/Business/Business.Application/ResourceExamineManagement/ProductionScheduleAppService.cs

@@ -18,6 +18,7 @@ using Microsoft.Extensions.Configuration;
 using MongoDB.Driver.Linq;
 using Amazon.Runtime.Internal.Util;
 using IdentityModel.Client;
+using Amazon.Runtime;
 
 namespace Business.ResourceExamineManagement
 {
@@ -197,7 +198,8 @@ namespace Business.ResourceExamineManagement
             
             //获取需要排产的工单(获取四周的工单:正常工单+已审批通过的特殊工单)
             DateTime endDate = DateTime.Now.Date.AddWeeks(4).AddDays(1);
-            DateTime startDate = DateTime.Now.Date;
+            //取数开始时间需要排除掉锁定期内的工单
+            DateTime startDate = DateTime.Now.Date.AddDays(1).AddDays((double)lockDays);
             var workOrds = _workOrdMaster.Select(p => p.IsActive && p.Domain == domain && p.OrdDate < endDate && p.OrdDate >= startDate && string.IsNullOrEmpty(p.Status) && (string.IsNullOrEmpty(p.Typed) || (!string.IsNullOrEmpty(p.Typed) && p.BusinessID >0 ))).ToList();
             await DoProductSchedule(workOrds, domain, 1);
         }
@@ -205,7 +207,7 @@ namespace Business.ResourceExamineManagement
         /// <summary>
         /// 生产排产
         /// </summary>
-        /// <param name="workOrds">工单</param>
+        /// <param name="workOrds">需要重新排产的工单</param>
         /// <param name="factoryid">工单的工厂id</param>
         /// <param name="type">排产类型:1-自动排产;2-手动排产</param>
         /// <returns></returns>
@@ -236,10 +238,15 @@ namespace Business.ResourceExamineManagement
             prodLineDetailRunCrews = _prodLineDetailRunCrew.Select(x => prodLines.Select(p => p.RecID).Contains(x.ProdLineDetailRecID) && x.IsActive && x.Domain == domain).ToList();
             //获取加班设置
             resourceOccupancyTimes = _resourceOccupancyTime.Select(x => prodLines.Select(p => p.Line).Contains(x.Resource) && x.IsActive && x.Domain == domain && x.StartTime.Value > DateTime.Now).ToList();
-            //获取生产周期数据,TODO:需要过滤锁定期之外的工单
+            //获取生产周期数据
             List<PeriodSequenceDet> dbPeriodSequences = _periodSequenceDet.Select(p => lines.Contains(p.Line) && p.PlanDate >= earlist && p.Domain == domain && p.IsActive);
-            //获取当前日期往后的排产记录数据,TODO:需要过滤锁定期之外的工单
+            //获取当前日期往后的排产记录数据
             List<ScheduleResultOpMaster> dbSchedules = _scheduleResultOpMaster.Select(p => lines.Contains(p.Line) && p.WorkDate >= earlist && p.Domain == domain);
+            //获取锁定期之外的工单排产数据
+            List<PeriodSequenceDet> delPeriodSequences = dbPeriodSequences.Where(p => workOrds.Select(m => m.WorkOrd).Contains(p.WorkOrds)).ToList();
+            List<ScheduleResultOpMaster> delSchedules = dbSchedules.Where(p => workOrds.Select(m => m.WorkOrd).Contains(p.WorkOrd)).ToList();
+            //产线占用记录排除锁定期之前的工单
+            dbSchedules = dbSchedules.Where(p => !workOrds.Select(m => m.WorkOrd).Contains(p.WorkOrd)).ToList();
             //获取工作日历数据:产线的工作日历+默认的工作日历
             calendars = _shopCalendarWorkCtr.Select(p => (lines.Contains(p.ProdLine) || string.IsNullOrEmpty(p.ProdLine)) && p.Domain == domain && p.IsActive);
             //获取产线休息记录数据
@@ -331,8 +338,12 @@ namespace Business.ResourceExamineManagement
             {
                 try
                 {
-                    //记录排产数据
+                    //更新工单计划开工时间、计划结束时间
                     _workOrdMaster.Update(workOrds);
+                    //删除锁定期之外的工单排产记录
+                    _periodSequenceDet.Delete(delPeriodSequences);
+                    _scheduleResultOpMaster.Delete(delSchedules);
+                    //保存排产记录
                     _periodSequenceDet.Insert(periodSequenceDtls);
                     _scheduleResultOpMaster.Insert(scheduleMasters);
                     scope.Complete();

+ 21 - 20
MicroServices/Business/Business.Application/ResourceExamineManagement/ResourceExamineAppService.cs

@@ -3572,26 +3572,6 @@ namespace Business.ResourceExamineManagement
             return Wildcard.Replace(serialNumber, formData);
         }
 
-        /// <summary>
-        /// 生产排产
-        /// </summary>
-        /// <param name="workOrd"></param>
-        /// <returns></returns>
-        /// <exception cref="NotImplementedException"></exception>
-        public async Task<string> ProductionSchedule(string workOrd,string domain)
-        {
-            List<string> workOrds = workOrd.Split(",").ToList();
-            if (workOrds.Count == 0)
-            {
-                return "没有需要排产的工单。";
-            }
-            //获取工单数据
-            var workOrdMasters = _workOrdMaster.Select(p => workOrds.Contains(p.WorkOrd) && p.Domain == domain);
-            //排产
-            //await _productionScheduleAppService.DoProductSchedule(workOrdMasters, workOrdMasters[0].Domain, 1);
-            return "ok";
-        }
-
         /// <summary>
         /// 生成领料单
         /// </summary>
@@ -4134,5 +4114,26 @@ namespace Business.ResourceExamineManagement
                 dlist.Add(d);
             });
         }
+
+        /// <summary>
+        /// 手动排产接口
+        /// </summary>
+        /// <param name="domain"></param>
+        /// <returns></returns>
+        /// <exception cref="NotImplementedException"></exception>
+        public async Task<string> ProductionSchedule(string domain)
+        {
+            //获取排产锁定期
+            var generalizedCodeMaster = _generalizedCodeMaster.Select(p => p.FldName == "SystemConfig" && p.Val == "WorkOrderLockPeriod" && p.Domain == domain && p.IsActive).FirstOrDefault();
+            decimal lockDays = generalizedCodeMaster != null ? generalizedCodeMaster.UDeci1 : 0;
+
+            //获取需要排产的工单(获取四周的工单:正常工单+已审批通过的特殊工单)
+            DateTime endDate = DateTime.Now.Date.AddWeeks(4).AddDays(1);
+            //取数开始时间需要排除掉锁定期内的工单
+            DateTime startDate = DateTime.Now.Date.AddDays(1).AddDays((double)lockDays);
+            var workOrds = _workOrdMaster.Select(p => p.IsActive && p.Domain == domain && p.OrdDate < endDate && p.OrdDate >= startDate && string.IsNullOrEmpty(p.Status) && (string.IsNullOrEmpty(p.Typed) || (!string.IsNullOrEmpty(p.Typed) && p.BusinessID > 0))).ToList();
+            await _productionScheduleAppService.DoProductSchedule(workOrds, domain, 2);
+            return "ok";
+        }
     }
 }

+ 3 - 3
MicroServices/Business/Business.HttpApi/Controllers/ResourceExamineController.cs

@@ -35,13 +35,13 @@ namespace Business.Controllers
         /// <summary>
         /// 生产排产
         /// </summary>
-        /// <param name="workOrds"></param>
+        /// <param name="domain"></param>
         /// <returns></returns>
         [HttpPost]
         [Route("productionschedule")]
-        public Task<string> ProductionSchedule(string workOrds, string domain)
+        public Task<string> ProductionSchedule(string domain)
         {
-            return _ResourceExamineAppService.ProductionSchedule(workOrds, domain);
+            return _ResourceExamineAppService.ProductionSchedule(domain);
         }
 
         /// <summary>