Эх сурвалжийг харах

Merge branch 'test_20241225' of http://110.188.24.182:10023/Fengwo/hotline into test_20241225

tangjiang 4 сар өмнө
parent
commit
e260d77309

+ 2 - 2
src/Hotline.Api/Controllers/TestController.cs

@@ -519,8 +519,8 @@ ICallApplication callApplication,
         //var r = _timeLimitDomainService.CalcExpiredTime(DateTime.Now, EFlowDirection.CenterToCenter, batchId);
         //var r = _timeLimitDomainService.CalcEndTime(DateTime.Parse("2024-09-12 14:45:47"), Share.Enums.Settings.ETimeType.WorkDay, 2, 80, 50);
         //_capPublisher.PublishDelay((DateTime.Now.AddMinutes(2) - DateTime.Now), EventNames.OrderRelateCall, "123");
-        //var times = _expireTime.CalcExpiredTime(DateTime.Parse("2024-12-11 14:45:58"), DateTime.Parse("2024-12-11 14:45:58"), EFlowDirection.CenterToOrg,new OrderTimeClacInfo() { AcceptTypeCode= "20" });
-        var times = await _expireTime.CalcWorkTimeToDecimal(DateTime.Parse("2024-12-16 21:36:27"), DateTime.Parse("2024-12-17 12:47:05"), false);
+        var times =await _expireTime.CalcExpiredTime(DateTime.Parse("2024-12-09 22:45:58"), DateTime.Parse("2024-12-09 22:45:58"), EFlowDirection.CenterToOrg,new OrderTimeClacInfo() { AcceptTypeCode= "20" });
+        //var times = await _expireTime.CalcWorkTimeToDecimal(DateTime.Parse("2024-12-16 21:36:27"), DateTime.Parse("2024-12-17 12:47:05"), false);
         //await _capPublisher.PublishDelay(EventNames.OrderRelateCall, "123", cancellationToken: HttpContext.RequestAborted);
         return OpenResponse.Ok(times);
     }

+ 2 - 2
src/Hotline/FlowEngine/Workflows/WorkflowDomainService.cs

@@ -998,10 +998,10 @@ namespace Hotline.FlowEngine.Workflows
                 prevStep.FlowAssignType = prevStep.BusinessType is EBusinessType.Seat ? EFlowAssignType.Role :
                     prevStep.BusinessType is EBusinessType.Send ? EFlowAssignType.User : EFlowAssignType.Org;
             }
-
+            //甄别退回到最开始节点到部门
             if (workflow.FlowType == EFlowType.Review && workflow.ModuleCode == WorkflowModuleConsts.OrderScreen)
             {
-                prevStep.FlowAssignType = EFlowAssignType.Org;
+                prevStep.FlowAssignType = prevStep.StepType == EStepType.Start ? EFlowAssignType.Org : prevStep.FlowAssignType;
             }
 
 

+ 103 - 5
src/Hotline/Settings/TimeLimitDomain/ExpireTimeSupplier/WorkDaySupplier.cs

@@ -182,9 +182,19 @@ public class WorkDaySupplier : IExpireTimeSupplier, IScopeDependency
                 startTimeOne = startTimeOne.AddSeconds(scondsOne);
                 break;
             case 1:
+
+                //计算一天多少个工作小时
+                var durationType1 = WorkEndTime - WorkBeginTime;
+                double workMinutesType1 = durationType1.TotalMinutes;
+                double totalWorkMinutesType1 = (workMinutesType1 * timeConfig.Count) * (timeConfig.Percentage / 100.00);
+                double totalWorkMinutesOneType1 = (workMinutesType1 * timeConfig.Count) * (timeConfig.PercentageOne / 100.00);
+
+                #region 计算期满时间
                 if (!isWorkSend)
                 {
                     beginTime = WorkBeginTime;
+                    startTime = WorkBeginTime;
+                    startTimeOne = WorkBeginTime;
                 }
                 while(true)
                 {
@@ -211,7 +221,7 @@ public class WorkDaySupplier : IExpireTimeSupplier, IScopeDependency
                     }
                 }
                 beginTime = beginTime.AddSeconds(-1);
-                while(true)
+                while (true)
                 {
                     if(await IsWorkDay(beginTime))
                     {
@@ -233,11 +243,99 @@ public class WorkDaySupplier : IExpireTimeSupplier, IScopeDependency
                     //    beginTime = beginTime.AddDays(1);
                     //}
                 }
+                #endregion
+
+                //计算即将超期时间
+                while(true)
+                {
+                    if (!await IsWorkDay(startTime))
+                        startTime = startTime.AddDays(1);
+                    else
+                        break;
+                }
 
-                var scondsPlan = (beginTime - startTime).TotalSeconds * (timeConfig.Percentage / 100.00);
-                startTime = startTime.AddSeconds(scondsPlan);
-                var scondsPlanOne = (beginTime - startTimeOne).TotalSeconds * (timeConfig.PercentageOne / 100.00);
-                startTimeOne = startTimeOne.AddSeconds(scondsPlanOne);
+                days = 1;
+                while(true && totalWorkMinutesType1!=0)
+                {
+                    if(await IsWorkDay(startTime.AddDays(days)))
+                    {
+                        if (totalWorkMinutesType1> workMinutesType1)
+                        {
+                            startTime = startTime.AddDays(days);
+                            totalWorkMinutesType1 = totalWorkMinutesType1 - workMinutesType1;
+                            days = 1;
+                        }
+                        else
+                        {
+                            if (startTime.AddMinutes(totalWorkMinutesType1) > DateTime.Parse(startTime.ToShortDateString() + " " + timeConfig.WorkTime[1] + ":00"))
+                            {
+                                totalWorkMinutesType1 = totalWorkMinutesType1 - ((DateTime.Parse(startTime.ToShortDateString() + " " + timeConfig.WorkTime[1] + ":00") - startTime).TotalMinutes);
+                                startTime = startTime.AddDays(days);
+                                startTime = DateTime.Parse(startTime.ToShortDateString() + " " + timeConfig.WorkTime[0] + ":00").AddMinutes(totalWorkMinutesType1);
+                                totalWorkMinutesType1 = 0;
+                                days = 1;
+                            }
+                            else
+                            {
+                                startTime = startTime.AddMinutes(totalWorkMinutesType1);
+                                totalWorkMinutesOneType1 = 0;
+                                days = 1;
+                            }
+                        }
+                    }
+                    else
+                    {
+                        days++;
+                    }
+                }
+
+                //计算50%即将超期时间
+                while (true)
+                {
+                    if (!await IsWorkDay(startTimeOne))
+                        startTimeOne = startTimeOne.AddDays(1);
+                    else
+                        break;
+                }
+
+                days = 1;
+                while (true && totalWorkMinutesOneType1 != 0)
+                {
+                    if (await IsWorkDay(startTimeOne.AddDays(days)))
+                    {
+                        if (totalWorkMinutesOneType1 > workMinutesType1)
+                        {
+                            startTimeOne = startTimeOne.AddDays(days);
+                            totalWorkMinutesOneType1 = totalWorkMinutesOneType1 - workMinutesType1;
+                            days = 1;
+                        }
+                        else if (totalWorkMinutesOneType1 <= workMinutesType1)
+                        {
+                            if (startTimeOne.AddMinutes(totalWorkMinutesOneType1) > DateTime.Parse(startTimeOne.ToShortDateString() + " " + timeConfig.WorkTime[1] + ":00"))
+                            {
+                                totalWorkMinutesOneType1 = totalWorkMinutesOneType1 - ((DateTime.Parse(startTimeOne.ToShortDateString() + " " + timeConfig.WorkTime[1] + ":00") - startTimeOne).TotalMinutes);
+                                startTimeOne = startTimeOne.AddDays(days);
+                                startTimeOne = DateTime.Parse(startTimeOne.ToShortDateString() + " " + timeConfig.WorkTime[0] + ":00").AddMinutes(totalWorkMinutesOneType1);
+                                totalWorkMinutesOneType1 = 0;
+                                days = 1;
+                            }
+                            else
+                            {
+                                startTimeOne = startTimeOne.AddMinutes(totalWorkMinutesOneType1);
+                                totalWorkMinutesOneType1 = 0;
+                                days = 1;
+                            }
+                        }
+                    }
+                    else
+                    {
+                        days++;
+                    }
+                }
+                //var scondsPlan = (beginTime - startTime).TotalSeconds * (timeConfig.Percentage / 100.00);
+                //startTime = startTime.AddSeconds(scondsPlan);
+                //var scondsPlanOne = (beginTime - startTimeOne).TotalSeconds * (timeConfig.PercentageOne / 100.00);
+                //startTimeOne = startTimeOne.AddSeconds(scondsPlanOne);
                 break;
             case 2:
                 //计算一天多少个工作小时