|
|
@ -20,63 +20,27 @@ namespace BBWY.Client.Helpers |
|
|
|
return false; |
|
|
|
} |
|
|
|
|
|
|
|
/* |
|
|
|
中转仓各工序时效限制: |
|
|
|
待验收:8个工作时 |
|
|
|
待排单:1个工作时 |
|
|
|
待包装:8个工作时 |
|
|
|
待封箱:5个工作时 |
|
|
|
待贴单:2个工作时 |
|
|
|
总时长:24个工作时 |
|
|
|
|
|
|
|
*/ |
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// 待验收:8个工作时
|
|
|
|
/// </summary>
|
|
|
|
const int wait_inspection_task_time = 8; |
|
|
|
/// <summary>
|
|
|
|
/// 待排单:1个工作时
|
|
|
|
/// </summary>
|
|
|
|
const int wait_schedule_task_time = 1; |
|
|
|
/// <summary>
|
|
|
|
/// 待包装:8个工作时
|
|
|
|
/// </summary>
|
|
|
|
const int wait_package_task_time = 8; |
|
|
|
/// <summary>
|
|
|
|
/// 待封箱:5个工作时
|
|
|
|
/// </summary>
|
|
|
|
const int wait_sealbox_task_time = 5; |
|
|
|
/// <summary>
|
|
|
|
/// 待贴单:2个工作时
|
|
|
|
/// </summary>
|
|
|
|
const int wait_stickynote_task_time = 2; |
|
|
|
/// <summary>
|
|
|
|
/// 总时长:24个工作时
|
|
|
|
/// </summary>
|
|
|
|
const int all_task_time = 24; |
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// 计算有效开始时间
|
|
|
|
/// 计算有效超时时间
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="startTime"></param>
|
|
|
|
/// <returns></returns>
|
|
|
|
public static DateTime AccountEffectiveStartTime(DateTime startTime) |
|
|
|
public static DateTime AccountEffectiveOverTime(DateTime overTime) |
|
|
|
{ |
|
|
|
var userStartTime = startTime;//有效开始时间
|
|
|
|
var userStartTime = overTime;//有效开始时间
|
|
|
|
|
|
|
|
if (startTime.Hour < 9) |
|
|
|
if (overTime.Hour < 9) |
|
|
|
{ |
|
|
|
userStartTime = startTime.Date.AddHours(9);//未到9店 按9点计时
|
|
|
|
userStartTime = overTime.Date.AddHours(9);//未到9店 按9点计时
|
|
|
|
} |
|
|
|
if (startTime.Hour >= 18)//从隔天9点开始计时
|
|
|
|
if (overTime.Hour >= 18)//从隔天9点开始计时
|
|
|
|
{ |
|
|
|
userStartTime = startTime.Date.AddHours(18);//超过18点 按次日9点计时
|
|
|
|
userStartTime = overTime.Date.AddHours(18);//超过18点 按次日9点计时
|
|
|
|
} |
|
|
|
if (startTime.Hour == 12) |
|
|
|
if (overTime.Hour == 12) |
|
|
|
{ |
|
|
|
userStartTime = startTime.Date.AddHours(13);//中午未到13点 按13点计时
|
|
|
|
userStartTime = overTime.Date.AddHours(13);//中午未到13点 按13点计时
|
|
|
|
} |
|
|
|
|
|
|
|
if (userStartTime.DayOfWeek == DayOfWeek.Sunday) |
|
|
@ -88,25 +52,25 @@ namespace BBWY.Client.Helpers |
|
|
|
} |
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// 计算有效完成时间
|
|
|
|
/// 计算有效当前时间
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="endTime">完成时间</param>
|
|
|
|
/// <returns></returns>
|
|
|
|
public static DateTime AccountEffectiveCompletedTime(DateTime endTime) |
|
|
|
public static DateTime AccountEffectiveNowTime(DateTime nowTime) |
|
|
|
{ |
|
|
|
var userEndTime = endTime;//有效开始时间
|
|
|
|
var userEndTime = nowTime;//有效开始时间
|
|
|
|
|
|
|
|
if (endTime.Hour < 9) |
|
|
|
if (nowTime.Hour < 9) |
|
|
|
{ |
|
|
|
userEndTime = endTime.Date.AddDays(-1).AddHours(18);//未到9店 按前一天 18点完成
|
|
|
|
userEndTime = nowTime.Date.AddDays(-1).AddHours(18);//未到9店 按前一天 18点完成
|
|
|
|
} |
|
|
|
if (endTime.Hour >= 18) |
|
|
|
if (nowTime.Hour >= 18) |
|
|
|
{ |
|
|
|
userEndTime = endTime.Date.AddHours(18);//超过18点 按18点完成
|
|
|
|
userEndTime = nowTime.Date.AddHours(18);//超过18点 按18点完成
|
|
|
|
} |
|
|
|
if (endTime.Hour == 12) |
|
|
|
if (nowTime.Hour == 12) |
|
|
|
{ |
|
|
|
userEndTime = endTime.Date.AddHours(12);//中午未到13点 按12点计时
|
|
|
|
userEndTime = nowTime.Date.AddHours(12);//中午未到13点 按12点计时
|
|
|
|
} |
|
|
|
|
|
|
|
if (userEndTime.DayOfWeek == DayOfWeek.Sunday) |
|
|
@ -118,150 +82,68 @@ namespace BBWY.Client.Helpers |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//public static DateTime AccountOverTime(DateTime startTime, OverTimeType overTimeType)
|
|
|
|
//{
|
|
|
|
// double userTime = 0;
|
|
|
|
// switch (overTimeType)
|
|
|
|
// {
|
|
|
|
// case OverTimeType.待验收:
|
|
|
|
// userTime = wait_inspection_task_time;
|
|
|
|
// break;
|
|
|
|
// case OverTimeType.待包装:
|
|
|
|
// userTime = wait_package_task_time;
|
|
|
|
// break;
|
|
|
|
// case OverTimeType.待封箱:
|
|
|
|
// userTime = wait_sealbox_task_time;
|
|
|
|
// break;
|
|
|
|
// case OverTimeType.待贴单:
|
|
|
|
// userTime = wait_stickynote_task_time;
|
|
|
|
// break;
|
|
|
|
// case OverTimeType.待排单:
|
|
|
|
// userTime = wait_schedule_task_time;
|
|
|
|
// break;
|
|
|
|
// default:
|
|
|
|
// break;
|
|
|
|
// }
|
|
|
|
// var userStartTime = AccountEffectiveStartTime(startTime);
|
|
|
|
|
|
|
|
|
|
|
|
// return AccountOverTime(userStartTime, userTime);
|
|
|
|
|
|
|
|
//}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// 计算任务超时截止时间
|
|
|
|
/// 计算有效剩余时长
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="userStartTime">有效任务开始时间</param>
|
|
|
|
/// <param name="useTime">有效时长</param>
|
|
|
|
/// <param name="startTime">开始时间</param>
|
|
|
|
/// <param name="completedTime">完成时间</param>
|
|
|
|
/// <returns></returns>
|
|
|
|
public static DateTime AccountOverTime(DateTime userStartTime, double useTime) |
|
|
|
public static TimeSpan AccountEffectiveRemainDuration(DateTime nowTime, DateTime overTime) |
|
|
|
{ |
|
|
|
|
|
|
|
|
|
|
|
var overTime = userStartTime.AddHours(useTime);//17点 5
|
|
|
|
|
|
|
|
if (userStartTime.Hour <= 12 && overTime.Hour > 12)//中午休息时间
|
|
|
|
{ |
|
|
|
overTime = overTime.AddHours(1); |
|
|
|
} |
|
|
|
|
|
|
|
if (overTime.Hour >= 18) |
|
|
|
{ |
|
|
|
overTime = overTime.Date.AddDays(1).AddHours(9).Add((overTime - overTime.Date.AddHours(18))); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if (overTime.DayOfWeek == DayOfWeek.Sunday) |
|
|
|
{ |
|
|
|
overTime = overTime.Date.AddDays(1);//周日算周一
|
|
|
|
} |
|
|
|
return overTime; |
|
|
|
|
|
|
|
var effectiveNowTime = AccountEffectiveNowTime(nowTime); |
|
|
|
|
|
|
|
} |
|
|
|
var effectiveOverTime = AccountEffectiveOverTime(overTime); |
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// 释放挂起任务 增加超时时长
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="userStartTime">有效任务开始时间</param>
|
|
|
|
/// <param name="useTime">有效挂起时长</param>
|
|
|
|
/// <returns></returns>
|
|
|
|
public static DateTime AccountOverTime(DateTime userStartTime, TimeSpan useTime) |
|
|
|
if (effectiveNowTime < effectiveOverTime) |
|
|
|
{ |
|
|
|
return AccountEffectiveDuration(effectiveNowTime , effectiveOverTime); |
|
|
|
|
|
|
|
|
|
|
|
var overTime = userStartTime.Add(useTime);//17点 5
|
|
|
|
|
|
|
|
if (userStartTime.Hour <= 12 && overTime.Hour > 12)//中午休息时间
|
|
|
|
{ |
|
|
|
overTime = overTime.AddHours(1); |
|
|
|
} |
|
|
|
|
|
|
|
if (overTime.Hour >= 18) |
|
|
|
{ |
|
|
|
overTime = overTime.Date.AddDays(1).AddHours(9).Add((overTime - overTime.Date.AddHours(18))); |
|
|
|
} |
|
|
|
return -AccountEffectiveDuration( effectiveOverTime, effectiveNowTime); |
|
|
|
|
|
|
|
|
|
|
|
if (overTime.DayOfWeek == DayOfWeek.Sunday) |
|
|
|
{ |
|
|
|
overTime = overTime.Date.AddDays(1);//周日算周一
|
|
|
|
} |
|
|
|
return overTime; |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// 有效任务时长()
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="startTime"></param>
|
|
|
|
/// <param name="CompletedTime"></param>
|
|
|
|
/// /// <param name="EffectiveAbortTaskDuration"> 有效挂起时长</param>
|
|
|
|
/// <returns></returns>
|
|
|
|
public static TimeSpan AccountEffectiveTaskDuration(DateTime startTime, DateTime CompletedTime, TimeSpan? EffectiveAbortTaskDuration) |
|
|
|
{ |
|
|
|
//计算超时天数 如果时间里包含周日 则扣一天 1天按8小时计算
|
|
|
|
return AccountEffectiveDuration(startTime, CompletedTime).Add(EffectiveAbortTaskDuration ?? TimeSpan.FromHours(0)); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// 计算有效时长(超时时长 任务耗时)
|
|
|
|
/// 计算有效时长(任务耗时)
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="startTime">开始时间</param>
|
|
|
|
/// <param name="completedTime">完成时间</param>
|
|
|
|
/// <returns></returns>
|
|
|
|
public static TimeSpan AccountEffectiveDuration(DateTime startTime, DateTime completedTime) |
|
|
|
public static TimeSpan AccountEffectiveDuration(DateTime effectiveStartTime, DateTime effectiveCompletedTime) |
|
|
|
{ |
|
|
|
var effectiveStartTime = AccountEffectiveStartTime(startTime); |
|
|
|
|
|
|
|
var effectiveCompletedTime = AccountEffectiveCompletedTime(completedTime); |
|
|
|
|
|
|
|
var timespan = effectiveCompletedTime - effectiveStartTime; |
|
|
|
|
|
|
|
int effectiveDays = timespan.Days - CountSundays(effectiveStartTime, effectiveCompletedTime);//有效相隔天数
|
|
|
|
|
|
|
|
var hoursTimeSpan = timespan.Add(TimeSpan.FromDays(-effectiveDays));//计算小时差
|
|
|
|
|
|
|
|
var hoursTimeSpan = timespan.Add(TimeSpan.FromDays(-CountSundays(effectiveStartTime, effectiveCompletedTime)));//计算小时差
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//1. 开始时间 12点 结束时间 10点
|
|
|
|
if (effectiveStartTime.Millisecond > effectiveCompletedTime.Millisecond) |
|
|
|
if (effectiveStartTime.TimeOfDay > effectiveCompletedTime.TimeOfDay) |
|
|
|
{ |
|
|
|
if (effectiveStartTime.Hour <= 12)//-16小时
|
|
|
|
return hoursTimeSpan.Add(TimeSpan.FromHours(-16)).Add(TimeSpan.FromDays(effectiveDays)); |
|
|
|
return hoursTimeSpan.Add(TimeSpan.FromHours(-16)); |
|
|
|
else |
|
|
|
{ |
|
|
|
if (effectiveCompletedTime.Hour <= 12) |
|
|
|
return hoursTimeSpan.Add(TimeSpan.FromHours(-15)).Add(TimeSpan.FromDays(effectiveDays )); |
|
|
|
return hoursTimeSpan.Add(TimeSpan.FromHours(-15)); |
|
|
|
else |
|
|
|
return hoursTimeSpan.Add(TimeSpan.FromHours(-16)).Add(TimeSpan.FromDays(effectiveDays)); |
|
|
|
return hoursTimeSpan.Add(TimeSpan.FromHours(-16)); |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
@ -269,14 +151,13 @@ namespace BBWY.Client.Helpers |
|
|
|
{ |
|
|
|
if (effectiveCompletedTime.Hour > 12) |
|
|
|
if (effectiveStartTime.Hour <= 12) |
|
|
|
return hoursTimeSpan.Add(TimeSpan.FromHours(-1)).Add(TimeSpan.FromDays(effectiveDays)); |
|
|
|
return hoursTimeSpan.Add(TimeSpan.FromHours(-1)); |
|
|
|
|
|
|
|
return hoursTimeSpan.Add(TimeSpan.FromDays(effectiveDays)); |
|
|
|
return hoursTimeSpan; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// 判断两个日期之间有多少个星期日
|
|
|
|
/// </summary>
|
|
|
|