|
|
@ -66,7 +66,7 @@ namespace BBWYB.Server.Business |
|
|
|
else if (startTime.Hour >= 9 && startTime.Hour < 12) |
|
|
|
{ |
|
|
|
//计算从起点时间的9点开始到当前时间的时差
|
|
|
|
var timeSpan = DateTime.Now - startTime.Date.AddHours(9); |
|
|
|
var timeSpan = startTime - startTime.Date.AddHours(9); |
|
|
|
if (timeSpan.TotalMinutes <= 5) |
|
|
|
{ |
|
|
|
//从9点开始小于5分钟以内,以当天18点结束
|
|
|
@ -87,7 +87,7 @@ namespace BBWYB.Server.Business |
|
|
|
} |
|
|
|
else if (startTime.Hour >= 13 && startTime.Hour < 18) |
|
|
|
{ |
|
|
|
var timeSpan = DateTime.Now - startTime.Date.AddHours(13); |
|
|
|
var timeSpan = startTime - startTime.Date.AddHours(13); |
|
|
|
//到下一个工作日的当前时间结束
|
|
|
|
addDay = CalculateAddDay(startTime.DayOfWeek); |
|
|
|
addHour = 13; |
|
|
@ -124,17 +124,17 @@ namespace BBWYB.Server.Business |
|
|
|
addHour = 11; |
|
|
|
else if (startTime.Hour >= 9 && startTime.Hour < 12) |
|
|
|
{ |
|
|
|
//计算从起点时间的9点开始到当前时间的时差
|
|
|
|
var timeSpan = startTime - startTime.Date.AddHours(9); |
|
|
|
if (timeSpan.TotalHours <= 1) |
|
|
|
//如果在10点钟以前,则加两个小时
|
|
|
|
if (startTime.Hour < 10) |
|
|
|
{ |
|
|
|
addHour = 11; |
|
|
|
addSeconds = (int)timeSpan.TotalSeconds; |
|
|
|
addSeconds = Convert.ToInt32((startTime - startTime.Date.AddHours(9)).TotalSeconds); |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
addHour = 13; |
|
|
|
addSeconds = 7200 - (int)timeSpan.TotalSeconds; |
|
|
|
var to12senconds = Convert.ToInt32((startTime.Date.AddHours(12) - startTime).TotalSeconds); |
|
|
|
addSeconds = 7200 - to12senconds; |
|
|
|
} |
|
|
|
} |
|
|
|
else if (startTime.Hour >= 12 && startTime.Hour < 13) |
|
|
@ -143,18 +143,22 @@ namespace BBWYB.Server.Business |
|
|
|
} |
|
|
|
else if (startTime.Hour >= 13 && startTime.Hour < 18) |
|
|
|
{ |
|
|
|
var timeSpan = startTime - startTime.Date.AddHours(13); |
|
|
|
|
|
|
|
if (timeSpan.TotalHours <= 3) |
|
|
|
if (startTime.Hour < 16) |
|
|
|
{ |
|
|
|
addHour = startTime.Hour + 2; |
|
|
|
addSeconds = startTime.Minute * 60 + startTime.Second; |
|
|
|
} |
|
|
|
else if (startTime.Hour == 16 && startTime.Minute <= 5) |
|
|
|
{ |
|
|
|
//从16点开始小于5分钟以内,以当天18点结束
|
|
|
|
addHour = 18; |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
addDay = CalculateAddDay(startTime.DayOfWeek); |
|
|
|
addHour = 9; |
|
|
|
addSeconds = Convert.ToInt32(7200 - (startTime - startTime.Date.AddHours(16)).TotalSeconds); |
|
|
|
var to18senconds = Convert.ToInt32((startTime.Date.AddHours(18) - startTime).TotalSeconds); |
|
|
|
addSeconds = 7200 - to18senconds; |
|
|
|
} |
|
|
|
} |
|
|
|
else if (startTime.Hour >= 18) |
|
|
@ -166,5 +170,76 @@ namespace BBWYB.Server.Business |
|
|
|
} |
|
|
|
return startTime.Date.AddDays(addDay).AddHours(addHour).AddSeconds(addSeconds); |
|
|
|
} |
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// 计算剩余任务时间(秒)
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="expirationTime"></param>
|
|
|
|
/// <returns></returns>
|
|
|
|
public long CalculateLessTimeForWorkHour(DateTime expirationTime) |
|
|
|
{ |
|
|
|
if (DateTime.Now >= expirationTime) |
|
|
|
return 0; |
|
|
|
|
|
|
|
//强制过期时间在工作时间点内
|
|
|
|
if (expirationTime.Hour < 9) |
|
|
|
expirationTime = expirationTime.Date.AddHours(9); |
|
|
|
else if (expirationTime.Hour >= 12 && expirationTime.Hour < 13) |
|
|
|
expirationTime = expirationTime.Date.AddHours(12); |
|
|
|
else if (expirationTime.Hour >= 18) |
|
|
|
expirationTime = expirationTime.Date.AddDays(CalculateAddDay(expirationTime.DayOfWeek)).AddHours(9); |
|
|
|
|
|
|
|
var startTime = DateTime.Now; |
|
|
|
long lessTime = 0; |
|
|
|
while (true) |
|
|
|
{ |
|
|
|
//把非工作时间段转换成工作时间段
|
|
|
|
if (startTime.DayOfWeek == DayOfWeek.Sunday) |
|
|
|
{ |
|
|
|
startTime = startTime.Date.AddDays(1).AddHours(9); |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
if (startTime.Hour < 9) |
|
|
|
startTime = startTime.Date.AddHours(9); |
|
|
|
else if (startTime.Hour >= 12 && startTime.Hour < 13) |
|
|
|
startTime = startTime.Date.AddHours(13); |
|
|
|
else if (startTime.Hour >= 18) |
|
|
|
startTime = startTime.Date.AddDays(CalculateAddDay(startTime.DayOfWeek)).AddHours(9); |
|
|
|
} |
|
|
|
|
|
|
|
//计算上午工作时间段
|
|
|
|
if (startTime.Hour >= 9 && startTime.Hour < 12) |
|
|
|
{ |
|
|
|
if (expirationTime <= startTime.Date.AddHours(12)) |
|
|
|
{ |
|
|
|
lessTime += Convert.ToInt32((expirationTime - startTime).TotalSeconds); |
|
|
|
break; |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
lessTime += 10800; |
|
|
|
startTime = startTime.Date.AddHours(13); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
//计算下午工作时间段
|
|
|
|
if (startTime.Hour >= 13 && startTime.Hour < 18) |
|
|
|
{ |
|
|
|
if (expirationTime <= startTime.Date.AddHours(18)) |
|
|
|
{ |
|
|
|
lessTime += Convert.ToInt32((expirationTime - startTime).TotalSeconds); |
|
|
|
break; |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
lessTime += 18000; |
|
|
|
startTime = startTime.Date.AddDays(CalculateAddDay(startTime.DayOfWeek)).AddHours(9); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
return lessTime; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|