|
|
@@ -8,6 +8,7 @@ using Business.Model.Production;
|
|
|
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;
|
|
|
@@ -324,6 +325,7 @@ namespace Business.Quartz
|
|
|
Period = 1,//目前只考虑一班制
|
|
|
OrdQty = dto.ProductQty,
|
|
|
WorkOrds = workOrd.WorkOrd,
|
|
|
+ Op = item.Op,
|
|
|
IsActive = 1
|
|
|
});
|
|
|
//记录排产记录
|
|
|
@@ -388,6 +390,7 @@ namespace Business.Quartz
|
|
|
Period = 1,//目前只考虑一班制
|
|
|
OrdQty = residueQty,
|
|
|
WorkOrds = workOrd.WorkOrd,
|
|
|
+ Op = item.Op,
|
|
|
IsActive = 1
|
|
|
});
|
|
|
//记录排产记录
|
|
|
@@ -462,12 +465,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;
|
|
|
@@ -483,6 +522,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>
|
|
|
@@ -644,7 +710,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>();
|