Jelajahi Sumber

Merge branch 'dev' of http://123.60.180.165:4647/ZZYDOP/DOPCore into dev

tangdi 3 tahun lalu
induk
melakukan
8de4e248ac

+ 68 - 1
MicroServices/Business/Business.Application/Quartz/ProductionScheduleAppService.cs

@@ -9,6 +9,7 @@ using EFCore.BulkExtensions;
 using System;
 using System.Collections.Generic;
 using System.Collections.Immutable;
+using System.Globalization;
 using System.Linq;
 using System.Threading.Tasks;
 using Volo.Abp.Application.Services;
@@ -325,6 +326,7 @@ namespace Business.Quartz
                             Period = 1,//目前只考虑一班制
                             OrdQty = dto.ProductQty,
                             WorkOrds = workOrd.WorkOrd,
+                            Op = item.Op,
                             IsActive = 1
                         });
                         //记录排产记录
@@ -389,6 +391,7 @@ namespace Business.Quartz
                             Period = 1,//目前只考虑一班制
                             OrdQty = residueQty,
                             WorkOrds = workOrd.WorkOrd,
+                            Op = item.Op,
                             IsActive = 1
                         });
                         //记录排产记录
@@ -463,12 +466,48 @@ namespace Business.Quartz
             DateTime actStart = startTime;
             //开始时间是周几
             int weekDay = (int)startTime.DayOfWeek;
+            //判断当天是否是工作日
+            bool isWorkDay = CheckIsWorkDay(startTime);
+            if (!isWorkDay)//不是工作日
+            {
+                //获取下一个工作日开始时间
+                actStart = GetNextWorkDay(weekDay, startTime, curCalendars);
+                return actStart;
+            }
+
             //当天的工作日历
             var shopCal = curCalendars.Where(p => p.WeekDay == weekDay).First();
             //当前日期的工作时间段
             List<LineWorkPointDto> workPoints = DealWorkDayToLevels(startTime, shopCal, curQtyDtls);
             //计算starttime处于那个工作时间段
             var curPoint = workPoints.Where(p => startTime >= p.StartPoint && startTime <= p.EndPoint).FirstOrDefault();
+            if (curPoint == null)//不处于工作时间段
+            {
+                //开始时间小于当天工作开始时间
+                if (startTime < workPoints.First().StartPoint)
+                {
+                    actStart = workPoints.First().StartPoint;
+                }
+                //开始时间大于当前工作结束时间
+                else if (startTime > workPoints.Last().EndPoint)
+                {
+                    //获取下一个工作日开始时间
+                    actStart = GetNextWorkDay(weekDay, startTime, curCalendars);
+                }
+                else {//开始时间位于当天的休息时间段
+                    foreach (var item in workPoints)
+                    {
+                        //获取下一个时间段
+                        var next = workPoints.First(p=>p.Level == item.Level + 1);
+                        if (item.EndPoint < startTime &&  startTime < next.StartPoint)
+                        {
+                            actStart = next.StartPoint;
+                            break;
+                        }
+                    }
+                }
+                return actStart;
+            }
             if (startTime != curPoint.EndPoint)
             {
                 return actStart;
@@ -484,6 +523,33 @@ namespace Business.Quartz
             return actStart;
         }
 
+        /// <summary>
+        /// 判断当天是否是工作日
+        /// </summary>
+        /// <param name="dateTime"></param>
+        /// <returns></returns>
+        public bool CheckIsWorkDay(DateTime dateTime)
+        {
+            bool isWorkDay = true;
+            //周几
+            int weekDay = (int)dateTime.DayOfWeek;
+            //判断当天是否是工作日
+            if (weekDay == 0 || weekDay == 6)//周六或者周日,需要判断是否调休,需要加班
+            {
+                if (!holidays.Exists(p => p.Dated.GetValueOrDefault().Date == dateTime.Date && p.Ufld1 == "调休"))//不是调休
+                {
+                    isWorkDay = false;
+                }
+                return isWorkDay;
+            }
+            //不是周六周日,需要判断是不是节假日
+            if (holidays.Exists(p => p.Dated.GetValueOrDefault().Date == dateTime.Date && p.Ufld1 == "休假"))//是节假日
+            {
+                isWorkDay = false;
+            }
+            return isWorkDay;
+        }
+
         /// <summary>
         /// 计算子产线实际排产开始时间
         /// </summary>
@@ -645,7 +711,8 @@ namespace Business.Quartz
             //排产记录结束日期是周几
             int weekDay = (int)startTime.DayOfWeek;
             //计算当天的开工时间点,停工时间点
-            DateTime dayStartPoint = startTime.Date.AddHours(Convert.ToDouble(shopCal.ShiftsStart1));
+            string strStart = shopCal.ShiftsStart1.ToString("0.00").Replace(".", ":");
+            DateTime dayStartPoint = Convert.ToDateTime(date + strStart);
             DateTime dayEndPoint = dayStartPoint.AddHours(Convert.ToDouble(shopCal.ShiftsHours1));
             //工作时间段
             List<LineWorkPointDto> workPoints = new List<LineWorkPointDto>();

+ 1 - 0
MicroServices/Business/Bussiness.Model/Production/HolidayMaster.cs

@@ -11,6 +11,7 @@ namespace Business.Model.Production
     /// <summary>
     /// 节假日记录表
     /// </summary>
+    [Comment("节假日记录表")]
     public class HolidayMaster
     {
         /// <summary>

+ 6 - 0
MicroServices/Business/Bussiness.Model/Production/PeriodSequenceDet.cs

@@ -64,6 +64,12 @@ namespace Business.Model.Production
         [Comment("工单")]
         public string? WorkOrds { get; set; }
 
+        /// <summary>
+        /// 工序
+        /// </summary>
+        [Comment("工序")]
+        public int Op { get; set; }
+
         /// <summary>
         /// 是否有效:1-有效;0-无效
         /// </summary>

+ 1 - 0
MicroServices/Business/Bussiness.Model/Production/QualityLineWorkDetail.cs

@@ -11,6 +11,7 @@ namespace Business.Model.Production
     /// <summary>
     /// 产线休息时间记录表
     /// </summary>
+    [Comment("产线休息时间记录表")]
     public class QualityLineWorkDetail
     {
         /// <summary>

+ 1 - 1
MicroServices/Business/Bussiness.Model/Production/ShopCalendarWorkCtr.cs

@@ -11,7 +11,7 @@ namespace Business.Model.Production
     /// <summary>
     /// 工作日历表
     /// </summary>
-    [Comment("工单工艺流程表")]
+    [Comment("工作日历表")]
     public class ShopCalendarWorkCtr
     {
         /// <summary>