From 0dd7da64123501a92b313d17cb3ee3c64986c079 Mon Sep 17 00:00:00 2001
From: "506583276@qq.com" <506583276@qq.com>
Date: Wed, 29 Nov 2023 20:11:24 +0800
Subject: [PATCH] 1
---
BBWY.Client/Helpers/PackTaskTimerHelper.cs | 302 ++++++++++++++++++
.../PackTask/WareHouseListViewModel.cs | 25 +-
2 files changed, 323 insertions(+), 4 deletions(-)
create mode 100644 BBWY.Client/Helpers/PackTaskTimerHelper.cs
diff --git a/BBWY.Client/Helpers/PackTaskTimerHelper.cs b/BBWY.Client/Helpers/PackTaskTimerHelper.cs
new file mode 100644
index 00000000..feacb6f9
--- /dev/null
+++ b/BBWY.Client/Helpers/PackTaskTimerHelper.cs
@@ -0,0 +1,302 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace BBWY.Client.Helpers
+{
+ public class PackTaskTimerHelper
+ {
+ ///
+ /// 是否停止倒计时
+ ///
+ ///
+ ///
+ public static bool IsStopTimer(DateTime dateTime)
+ {
+ var hour = dateTime.Hour;
+
+ if (hour < 9 || hour >= 18 || (hour == 12))
+ return true;
+ return false;
+ }
+
+ /*
+ 中转仓各工序时效限制:
+ 待验收:8个工作时
+ 待排单:1个工作时
+ 待包装:8个工作时
+ 待封箱:5个工作时
+ 待贴单:2个工作时
+ 总时长:24个工作时
+
+ */
+
+ ///
+ /// 待验收:8个工作时
+ ///
+ const int wait_inspection_task_time = 8;
+ ///
+ /// 待排单:1个工作时
+ ///
+ const int wait_schedule_task_time = 1;
+ ///
+ /// 待包装:8个工作时
+ ///
+ const int wait_package_task_time = 8;
+ ///
+ /// 待封箱:5个工作时
+ ///
+ const int wait_sealbox_task_time = 5;
+ ///
+ /// 待贴单:2个工作时
+ ///
+ const int wait_stickynote_task_time = 2;
+ ///
+ /// 总时长:24个工作时
+ ///
+ const int all_task_time = 24;
+
+
+ ///
+ /// 计算有效开始时间
+ ///
+ ///
+ ///
+ public static DateTime AccountEffectiveStartTime(DateTime startTime)
+ {
+ var userStartTime = startTime;//有效开始时间
+
+ if (startTime.Hour < 9)
+ {
+ userStartTime = startTime.Date.AddHours(9);//未到9店 按9点计时
+ }
+ if (startTime.Hour >= 18)//从隔天9点开始计时
+ {
+ userStartTime = startTime.Date.AddHours(18);//超过18点 按次日9点计时
+ }
+ if (startTime.Hour == 12)
+ {
+ userStartTime = startTime.Date.AddHours(13);//中午未到13点 按13点计时
+ }
+
+ if (userStartTime.DayOfWeek == DayOfWeek.Sunday)
+ {
+ userStartTime = userStartTime.Date.AddDays(1).AddHours(9);//周日算周1 9点开始
+ }
+
+ return userStartTime;
+ }
+
+ ///
+ /// 计算有效完成时间
+ ///
+ /// 完成时间
+ ///
+ public static DateTime AccountEffectiveCompletedTime(DateTime endTime)
+ {
+ var userEndTime = endTime;//有效开始时间
+
+ if (endTime.Hour < 9)
+ {
+ userEndTime = endTime.Date.AddDays(-1).AddHours(18);//未到9店 按前一天 18点完成
+ }
+ if (endTime.Hour >= 18)
+ {
+ userEndTime = endTime.Date.AddHours(18);//超过18点 按18点完成
+ }
+ if (endTime.Hour == 12)
+ {
+ userEndTime = endTime.Date.AddHours(12);//中午未到13点 按12点计时
+ }
+
+ if (userEndTime.DayOfWeek == DayOfWeek.Sunday)
+ {
+ userEndTime = userEndTime.Date.AddDays(-1).AddHours(18);//周日算周六 18点完成
+ }
+ return userEndTime;
+ }
+
+
+
+ //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);
+
+ //}
+
+
+
+
+ ///
+ /// 计算任务超时截止时间
+ ///
+ /// 有效任务开始时间
+ /// 有效时长
+ ///
+ public static DateTime AccountOverTime(DateTime userStartTime, double useTime)
+ {
+
+
+ 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;
+
+
+ }
+
+
+ ///
+ /// 释放挂起任务 增加超时时长
+ ///
+ /// 有效任务开始时间
+ /// 有效挂起时长
+ ///
+ public static DateTime AccountOverTime(DateTime userStartTime, TimeSpan useTime)
+ {
+
+
+ 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)));
+ }
+
+
+ if (overTime.DayOfWeek == DayOfWeek.Sunday)
+ {
+ overTime = overTime.Date.AddDays(1);//周日算周一
+ }
+ return overTime;
+
+
+ }
+
+
+ ///
+ /// 有效任务时长()
+ ///
+ ///
+ ///
+ /// /// 有效挂起时长
+ ///
+ public static TimeSpan AccountEffectiveTaskDuration(DateTime startTime, DateTime CompletedTime, TimeSpan? EffectiveAbortTaskDuration)
+ {
+ //计算超时天数 如果时间里包含周日 则扣一天 1天按8小时计算
+ return AccountEffectiveDuration(startTime, CompletedTime).Add(EffectiveAbortTaskDuration ?? TimeSpan.FromHours(0));
+ }
+
+
+ ///
+ /// 计算有效时长(超时时长 任务耗时)
+ ///
+ /// 开始时间
+ /// 完成时间
+ ///
+ public static TimeSpan AccountEffectiveDuration(DateTime startTime, DateTime completedTime)
+ {
+ 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));//计算小时差
+
+
+
+ //1. 开始时间 12点 结束时间 10点
+ if (effectiveStartTime.Millisecond > effectiveCompletedTime.Millisecond)
+ {
+ if (effectiveStartTime.Hour <= 12)//-16小时
+ return hoursTimeSpan.Add(TimeSpan.FromHours(-16)).Add(TimeSpan.FromDays(effectiveDays));
+ else
+ {
+ if (effectiveCompletedTime.Hour <= 12)
+ return hoursTimeSpan.Add(TimeSpan.FromHours(-15)).Add(TimeSpan.FromDays(effectiveDays ));
+ else
+ return hoursTimeSpan.Add(TimeSpan.FromHours(-16)).Add(TimeSpan.FromDays(effectiveDays));
+ }
+
+ }
+ else//2. 开始时间 10点 结束时间 11点/ 14点
+ {
+ if (effectiveCompletedTime.Hour > 12)
+ if (effectiveStartTime.Hour <= 12)
+ return hoursTimeSpan.Add(TimeSpan.FromHours(-1)).Add(TimeSpan.FromDays(effectiveDays));
+
+ return hoursTimeSpan.Add(TimeSpan.FromDays(effectiveDays));
+ }
+ }
+
+
+
+ ///
+ /// 判断两个日期之间有多少个星期日
+ ///
+ ///
+ ///
+ ///
+ private static int CountSundays(DateTime startDate, DateTime endDate)
+ {
+ int sundays = 0;
+
+ while (startDate <= endDate)
+ {
+ if (startDate.DayOfWeek == DayOfWeek.Sunday)
+ {
+ sundays++;
+ }
+ startDate = startDate.AddDays(1);
+ }
+
+ return sundays;
+ }
+ }
+}
diff --git a/BBWY.Client/ViewModels/PackTask/WareHouseListViewModel.cs b/BBWY.Client/ViewModels/PackTask/WareHouseListViewModel.cs
index 17938dc4..d5030e58 100644
--- a/BBWY.Client/ViewModels/PackTask/WareHouseListViewModel.cs
+++ b/BBWY.Client/ViewModels/PackTask/WareHouseListViewModel.cs
@@ -1135,7 +1135,7 @@ namespace BBWY.Client.ViewModels.PackTask
{
- if (IsPassInspection||model.TaskAbortTime != null)//验收过 跳过询问
+ if (IsPassInspection || model.TaskAbortTime != null)//验收过 跳过询问
{
isqualityCer = true;
return;
@@ -2371,6 +2371,7 @@ namespace BBWY.Client.ViewModels.PackTask
var packtasks = PackTaskList.Where(p => p.TaskState == Models.TaskState.待验收 && p.QualityCompletionOverTime != null && p.TaskAbortTime == null).ToList();
if (packtasks.Count() > 0)
{
+ Thread.Sleep(1000);
IsStartThread = true;
while (IsStartThread)
{
@@ -2378,11 +2379,27 @@ namespace BBWY.Client.ViewModels.PackTask
{
foreach (var item in packtasks)
{
+ //TimeSpan datetime;
+ //if (item.SendToSetSkuConfigureTime != null)
+ // datetime = item.QualityCompletionOverTime.Value.Subtract(item.SendToSetSkuConfigureTime.Value);
+ //else
+ // datetime = item.QualityCompletionOverTime.Value.Subtract(DateTime.Now);
+ //item.QualityRemainTime = OverTimeHelper.GetTimeString(datetime);
+ //if (datetime.TotalMilliseconds > 0)
+ //{
+ // item.IsQualityOverTime = false;
+
+ //}
+ //else
+ //{
+ // item.IsQualityOverTime = true;
+ //}
+
TimeSpan datetime;
- if (item.SendToSetSkuConfigureTime != null)
- datetime = item.QualityCompletionOverTime.Value.Subtract(item.SendToSetSkuConfigureTime.Value);
+ if (item.QualityCompletionOverTime.Value > DateTime.Now)
+ datetime = PackTaskTimerHelper.AccountEffectiveDuration(DateTime.Now, item.QualityCompletionOverTime.Value);
else
- datetime = item.QualityCompletionOverTime.Value.Subtract(DateTime.Now);
+ datetime = -PackTaskTimerHelper.AccountEffectiveDuration( item.QualityCompletionOverTime.Value, DateTime.Now);
item.QualityRemainTime = OverTimeHelper.GetTimeString(datetime);
if (datetime.TotalMilliseconds > 0)
{