Bläddra i källkod

产能检查调整

heteng 2 år sedan
förälder
incheckning
fb3d889146

+ 11 - 1
MicroServices/Business/Business.Application.Contracts/Dto/KittingTimeDto.cs

@@ -22,10 +22,20 @@ namespace Business.Dto
         public string ItemNum { get; set; }
 
         /// <summary>
-        /// 系统建议交期(产能)
+        /// 生产数量
+        /// </summary>
+        public decimal LackQty { get; set; }
+
+        /// <summary>
+        /// 物料齐套时间
         /// </summary>
         public DateTime sys_capacity_date { get; set; }
 
+        /// <summary>
+        /// 系统建议交期(产能)
+        /// </summary>
+        public DateTime kitting_time { get; set; }
+
         /// <summary>
         /// 系统建议交期(物料)
         /// </summary>

+ 62 - 2
MicroServices/Business/Business.Application/ResourceExamineManagement/ProductExamineAppService.cs

@@ -11,6 +11,8 @@ using System.Text;
 using System.Threading.Tasks;
 using Volo.Abp.Application.Services;
 using Volo.Abp.Domain.Repositories;
+using Business.Dto;
+using Business.Model.Sale;
 
 namespace Business.ResourceExamineManagement
 {
@@ -159,7 +161,65 @@ namespace Business.ResourceExamineManagement
             return sumQty;
         }
 
-
-
+        /// <summary>
+        /// 计算订单行的建议交期(产能/物料)
+        /// </summary>
+        /// <param name="sentrys"></param>
+        /// <param name="kittingTimes"></param>
+        /// <returns></returns>
+        public List<crm_seorderentry> CalcSuggestTime(List<crm_seorderentry> sentrys, List<KittingTimeDto> kittingTimes)
+        {
+            ProdExamineParamDto param;
+            foreach (var item in sentrys)
+            {
+                var dto = kittingTimes.FirstOrDefault(p=>p.sentry_id == item.Id);
+                if (dto == null)
+                {
+                    continue;
+                }
+                if (dto.LackQty == 0)//当前订单行库存足够
+                {
+                    item.sys_material_date = dto.kitting_time;
+                    item.sys_capacity_date = dto.kitting_time;
+                }
+                //计算系统建议交期(物料)
+                param = new ProdExamineParamDto
+                {
+                    ItemNum = item.item_number,
+                    QtyOrd = dto.LackQty,
+                    PlanStart = dto.kitting_time.Date.AddDays(1)
+                };
+                item.sys_material_date = ProductiveExamine(param);
+                item.sys_capacity_date = item.sys_material_date;
+                //计算系统交期(产能)
+                //获取主线最后一道工序
+                var routings = routingOps.Where(p => p.RoutingCode == item.item_number && p.ParentOp == 0).ToList();
+                if (routings.Count() == 0)
+                {
+                    continue;
+                }
+                //获取产线
+                var prodLine = prodLines.FirstOrDefault(p=>p.Part == item.item_number && p.Op == routings.Last().Op);
+                if (prodLine == null)
+                {
+                    continue;
+                }
+                //获取产线空闲开始时间
+                var schedules= periodSequences.Where(p => p.ItemNum == item.item_number && p.Op == prodLine.Op && p.Line == prodLine.Line).OrderByDescending(p => p.PlanDate).ToList();
+                if (schedules.Count() == 0)
+                {
+                    continue;
+                }
+                //产线空闲开始时间
+                var lastTime = schedules.First().PlanDate.GetValueOrDefault().Date;
+                if (lastTime >= param.PlanStart)//如果产线空闲时间大于或者等于系统建议交期(物料)的开工时间
+                {
+                    //取下一天开始计算生产结束时间
+                    param.PlanStart = lastTime.AddDays(1);
+                    item.sys_capacity_date = ProductiveExamine(param);
+                }
+            }
+            return sentrys;
+        }
     }
 }

+ 36 - 5
MicroServices/Business/Business.Application/ResourceExamineManagement/ResourceExamineAppService.cs

@@ -318,6 +318,11 @@ namespace Business.ResourceExamineManagement
         /// 优先级
         /// </summary>
         private readonly PriorityAppService _priorityAppService;
+
+        /// <summary>
+        /// 产能检查
+        /// </summary>
+        private readonly ProductExamineAppService _productExamineAppService;
         #endregion
 
         #region 构造函数
@@ -405,7 +410,8 @@ namespace Business.ResourceExamineManagement
             ISqlRepository<ProdLineDetail> prodLineDetail,
             ISqlRepository<ShopCalendarWorkCtr> shopCalendarWorkCtr,
             ISqlRepository<QualityLineWorkDetail> qualityLineWorkDetail,
-            ISqlRepository<HolidayMaster> holidayMaster
+            ISqlRepository<HolidayMaster> holidayMaster,
+            ProductExamineAppService productExamineAppService
             )
         {
             _mes_technique = mes_technique;
@@ -481,9 +487,10 @@ namespace Business.ResourceExamineManagement
             _priorityAppService= priorityAppService;
             _rf_serialnumber = rf_serialnumber;
             _prodLineDetail = prodLineDetail;
-            _shopCalendarWorkCtr= shopCalendarWorkCtr;
-            _qualityLineWorkDetail= qualityLineWorkDetail;
-            _holidayMaster= holidayMaster;
+            _shopCalendarWorkCtr = shopCalendarWorkCtr;
+            _qualityLineWorkDetail = qualityLineWorkDetail;
+            _holidayMaster = holidayMaster;
+            _productExamineAppService= productExamineAppService;
     }
         #endregion
 
@@ -619,10 +626,14 @@ namespace Business.ResourceExamineManagement
                     //记录订单行的建议交期
                     KittingTimeDto dto = new KittingTimeDto();
                     dto.sentry_id = item.Id;
-                    dto.sys_material_date = dtl.kitting_times;
+                    dto.ItemNum = item.item_number;
+                    dto.LackQty = getBomList.First(p => p.level == 1).lack_qty;
+                    dto.kitting_time = dtl.kitting_times;
                     kittingTimes.Add(dto);
                 }
             }
+            //计算订单行的建议交期(产能/物料)
+            CalcSuggestDate(sentrys, kittingTimes);
 
             await _mysql_crm_seorderentry.UpdateManyAsync(sentrys);
 
@@ -2360,5 +2371,25 @@ namespace Business.ResourceExamineManagement
                 RecursionProductStructure(parentItem, phantoms, rtnStructures);
             }
         }
+
+        /// <summary>
+        /// 计算订单行的系统建议交期
+        /// </summary>
+        /// <param name="sentrys"></param>
+        /// <param name="kittingTimes"></param>
+        public async void CalcSuggestDate(List<crm_seorderentry> sentrys, List<KittingTimeDto> kittingTimes) 
+        {
+            //获取排产记录
+            List<string> itemNums = sentrys.Select(p=>p.item_number).Distinct().ToList();
+            DateTime eralist = kittingTimes.Min(p => p.kitting_time).Date;
+            List<PeriodSequenceDet> periodSequences = _periodSequenceDet.Select(p => itemNums.Contains(p.ItemNum) && p.PlanDate >= eralist).ToList();
+            _productExamineAppService.periodSequences = periodSequences;
+            if (sentrys.Count() == 0)
+            {
+                return;
+            }
+            sentrys = _productExamineAppService.CalcSuggestTime(sentrys, kittingTimes);
+            await _mysql_crm_seorderentry.UpdateManyAsync(sentrys);
+        }
     }
 }