Jason vor 1 Jahr
Ursprung
Commit
29b8fff807

+ 19 - 9
src/Hotline.Api/Controllers/OrderController.cs

@@ -1,6 +1,5 @@
 using DotNetCore.CAP;
 using Hotline.Application.FlowEngine;
-using Hotline.Application.TimeLimits;
 using Hotline.Caching.Interfaces;
 using Hotline.File;
 using Hotline.FlowEngine.Definitions;
@@ -17,16 +16,15 @@ using Hotline.Settings.TimeLimits;
 using Hotline.Share.Dtos;
 using Hotline.Share.Dtos.FlowEngine;
 using Hotline.Share.Dtos.Order;
+using Hotline.Share.Dtos.Settings;
 using Hotline.Share.Enums.Order;
 using Hotline.Share.Mq;
 using Hotline.Share.Requests;
 using MapsterMapper;
 using MediatR;
 using Microsoft.AspNetCore.Mvc;
-using Microsoft.IdentityModel.Tokens;
 using MongoDB.Driver;
 using SqlSugar;
-using System.Threading;
 using XF.Domain.Authentications;
 using XF.Domain.Constants;
 using XF.Domain.Exceptions;
@@ -58,7 +56,7 @@ public class OrderController : BaseController
     private readonly IRepository<OrderVisitDetail> _orderVisitedDetailRepository;
     private readonly ICapPublisher _capPublisher;
     private readonly IRepository<OrderDelay> _orderDelayRepository;
-    private readonly ITimeLimitApplication _timeLimitApplication;
+    private readonly ITimeLimitDomainService _timeLimitDomainService;
     private readonly ISystemSettingCacheManager _systemSettingCacheManager;
     private readonly IRepository<OrderRedo> _orderRedoRepository;
     private readonly IRepository<OrderSupervise> _orderSuperviseRepository;
@@ -87,7 +85,7 @@ public class OrderController : BaseController
         IRepository<OrderVisitDetail> orderVisitedDetailRepository,
         ICapPublisher capPublisher,
         IRepository<OrderDelay> orderDelayRepository,
-        ITimeLimitApplication timeLimitApplication,
+        ITimeLimitDomainService timeLimitDomainService,
         ISystemSettingCacheManager systemSettingCacheManager,
         IRepository<OrderRedo> orderRedoRepository,
         IRepository<OrderSupervise> orderSuperviseRepository,
@@ -115,7 +113,7 @@ public class OrderController : BaseController
         _orderVisitedDetailRepository = orderVisitedDetailRepository;
         _capPublisher = capPublisher;
         _orderDelayRepository = orderDelayRepository;
-        _timeLimitApplication = timeLimitApplication;
+        _timeLimitDomainService = timeLimitDomainService;
         _systemSettingCacheManager = systemSettingCacheManager;
         _orderRedoRepository = orderRedoRepository;
         _orderSuperviseRepository = orderSuperviseRepository;
@@ -217,12 +215,12 @@ public class OrderController : BaseController
         await _mediator.Publish(new AddVisitNotify(visitedDetail), HttpContext.RequestAborted);
 
         //TODO 中国政府网
-        if (order.SourceChannel == "ZGZFW")
+        if (order.SourceChannelCode == "ZGZFW")
         {
 
         }
         //TODO 省政民互动
-        if (order.SourceChannel == "ZMHD")
+        if (order.SourceChannelCode == "ZMHD")
         {
 
         }
@@ -637,7 +635,7 @@ public class OrderController : BaseController
         model.DelayState = EDelayState.Examining;
         if (model.BeforeDelay != null)
         {
-            model.AfterDelay = _timeLimitApplication.CalcEndTime(model.BeforeDelay.Value, dto.DelayUnit, dto.DelayNum)?.EndTime;
+            model.AfterDelay = _timeLimitDomainService.CalcEndTime(model.BeforeDelay.Value, dto.DelayUnit, dto.DelayNum, false)?.EndTime;
         }
         model.ApplyDelayTime = DateTime.Now;
         model.No = order.No;
@@ -679,6 +677,18 @@ public class OrderController : BaseController
             .FirstAsync(x => x.Id == id);
     }
 
+    /// <summary>
+    /// 计算期满时间
+    /// </summary>
+    /// <param name="dto"></param>
+    /// <returns></returns>
+    [Permission(EPermission.DelayCalcEndTime)]
+    [HttpPost("delay-calc-endtime")]
+    public async Task<TimeResult?> DelayCalcEndTime([FromBody]DelayCalcEndTimeDto dto)
+    {
+        return _timeLimitDomainService.CalcEndTime(dto.BeginTime, dto.DelayUnit, dto.DelayNum, false);
+    }
+
     #endregion
 
     #region 工单甄别

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

@@ -54,7 +54,7 @@ namespace Hotline.Api.Controllers
             ISystemAreaDomainService systemAreaDomainService,
             IRepository<SystemArea> systemAreaRepository,
             ISystemCommonOpinionDomainService commonOpinionDomainService,
-            IRepository<SystemCommonOpinion> commonOpinionRepository
+            IRepository<SystemCommonOpinion> commonOpinionRepository,
             ISessionContext sessionContext
             )
         {
@@ -443,7 +443,7 @@ namespace Hotline.Api.Controllers
         [HttpGet("common-list")]
         public async Task<IReadOnlyList<SystemCommonOpinion>> GetCommon([FromQuery]ECommonType commonType,bool isOpen)
         {
-            return await _commonOpinionRepository.Queryable().Where(x => x.CommonType == commonType && x.IsOpen == isOpen && x.CreatorId == _sessionContext.UserId).ToListAsync();
+            return await _commonOpinionRepository.Queryable().Where(x => x.CommonType == commonType && x.IsOpen == isOpen && x.CreatorId == _sessionContext.RequiredUserId).ToListAsync();
         }
 
         /// <summary>

+ 1 - 24
src/Hotline.Api/Controllers/TestController.cs

@@ -1,5 +1,4 @@
-using Hotline.Application.TimeLimits;
-using Hotline.CallCenter.BlackLists;
+using Hotline.CallCenter.BlackLists;
 using Hotline.CallCenter.Devices;
 using Hotline.CallCenter.Ivrs;
 using Hotline.Identity.Roles;
@@ -9,8 +8,6 @@ using Hotline.Repository.SqlSugar;
 using Hotline.Repository.SqlSugar.Ts;
 using Hotline.Settings.TimeLimits;
 using Hotline.Share.Dtos.Realtime;
-using Hotline.Share.Dtos.Settings;
-using Hotline.Share.Enums.Settings;
 using Hotline.Users;
 using MediatR;
 using Microsoft.AspNetCore.Authorization;
@@ -19,10 +16,8 @@ using Microsoft.AspNetCore.SignalR;
 using Microsoft.Extensions.Options;
 using NewRock.Sdk;
 using NewRock.Sdk.Security;
-using NpgsqlTypes;
 using SqlSugar;
 using Wex.Sdk;
-using Wex.Sdk.Tel;
 using XC.RSAUtil;
 using XF.Domain.Authentications;
 using XF.Domain.Cache;
@@ -53,7 +48,6 @@ public class TestController : BaseController
     private readonly IRepository<Role> _roleRepository;
     private readonly IMediator _mediator;
 
-    private readonly ITimeLimitApplication _timeLimitApplication;
     private readonly IDistributedLock _distributedLock;
     private readonly IWexClient _wexClient;
     private readonly ISugarUnitOfWork<WexDbContext> _uowWex;
@@ -83,7 +77,6 @@ public class TestController : BaseController
         ISugarUnitOfWork<HotlineDbContext> uow,
         IRepository<Role> roleRepository,
         IMediator mediator,
-        ITimeLimitApplication timeLimitApplication,
         IDistributedLock distributedLock,
         IWexClient wexClient,
         ISugarUnitOfWork<WexDbContext> uowWex,
@@ -103,7 +96,6 @@ public class TestController : BaseController
         _uow = uow;
         _roleRepository = roleRepository;
         _mediator = mediator;
-        _timeLimitApplication = timeLimitApplication;
         _distributedLock = distributedLock;
         _wexClient = wexClient;
         _uowWex = uowWex;
@@ -178,21 +170,6 @@ public class TestController : BaseController
         return a;
     }
 
-    [AllowAnonymous]
-    [HttpGet("testtime")]
-    public async Task<TimeResult> TestTime(DateTime beginTime, ETimeType timeType, int timeValue)
-    {
-        return _timeLimitApplication.CalcEndTime(beginTime, timeType, timeValue);
-    }
-
-    [AllowAnonymous]
-    [HttpGet("timeend")]
-    public async Task<DateTime> GetWorkDayEnd(DateTime date, int days)
-    {
-        return _timeLimitApplication.GetEndDateWork(date, days);
-    }
-
-
     //[AllowAnonymous]
     [HttpGet("hash")]
     public async Task Hash()

+ 0 - 22
src/Hotline.Application/TimeLimits/ITimeLimitApplication.cs

@@ -1,22 +0,0 @@
-using Hotline.Share.Dtos.Settings;
-using Hotline.Share.Enums.Settings;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace Hotline.Application.TimeLimits
-{
-    public interface ITimeLimitApplication
-    {
-        TimeResult CalcEndTime(DateTime beginTime, ETimeType timeType, int timeValue);
-        /// <summary>
-        /// 计算工作时间(跳过休息日)
-        /// </summary>
-        /// <param name="date">开始时间</param>
-        /// <param name="days">天数</param>
-        /// <returns></returns>
-        DateTime GetEndDateWork(DateTime date, int days);
-    }
-}

+ 0 - 201
src/Hotline.Application/TimeLimits/TimeLimitApplication.cs

@@ -1,201 +0,0 @@
-
-using Hotline.Settings.TimeLimits;
-using Hotline.Share.Dtos.Settings;
-using Hotline.Share.Enums.Settings;
-using System.Data;
-using XF.Domain.Dependency;
-
-namespace Hotline.Application.TimeLimits
-{
-    public class TimeLimitApplication:ITimeLimitApplication, IScopeDependency
-    {
-        private readonly ITimeLimitRepository _timeLimitRepository;
-        private readonly IDaySettingRepository _daySettingRepository;
-
-        public TimeLimitApplication(ITimeLimitRepository timeLimitRepository, IDaySettingRepository daySettingRepository)
-        {
-            _timeLimitRepository = timeLimitRepository;
-            _daySettingRepository = daySettingRepository;
-        }
-
-
-
-        /// <summary>
-        /// 计算结束时间
-        /// </summary>
-        /// <param name="beginTime"></param>
-        /// <param name="timeType"></param>
-        /// <param name="timeValue"></param>
-        public TimeResult CalcEndTime(DateTime beginTime, ETimeType timeType, int timeValue)
-        {
-           
-            var time = beginTime;
-            switch (timeType)
-            {
-                //新增对应小时
-                case ETimeType.Hour:
-                    return new TimeResult { EndTime = beginTime.AddHours(timeValue), RuleStr = timeValue + "小时" };
-                //新增工作日
-                case ETimeType.WorkDay:
-                    //检查时间段内是否存在休息日或者工作日
-                    int day = 1;
-                    for (int i = 1; i < timeValue + 1; i++)
-                    {
-                        if (IsWorkDay(beginTime.AddDays(day)))
-                        {
-                            beginTime = beginTime.AddDays(day);
-                            day = 1;
-                        }
-                        else
-                        {
-                            i--;
-                            day++;
-                        }
-                    }
-                    return new TimeResult { EndTime = beginTime, RuleStr = timeValue + "个工作日" };
-                //新增自然日
-                case ETimeType.Day:
-                    return new TimeResult { EndTime = beginTime.AddDays(timeValue), RuleStr = timeValue + "个自然日" };
-                default:
-                    return null;
-            }
-        }
-
-        private bool IsWorkDay(DateTime date)
-        {
-            return _daySettingRepository.IsWorkDay(date).GetAwaiter().GetResult();
-        }
-
-        /// <summary>
-        /// 计算工作时间(跳过休息日)
-        /// </summary>
-        /// <param name="date"></param>
-        /// <param name="days"></param>
-        /// <returns></returns>
-        public DateTime GetEndDateWork(DateTime date,int days)
-        {
-            for (int i = 0; i < days; )
-            {
-                date = date.AddDays(1);
-                if (IsWorkDay(date))
-                    i++;
-            }
-            return date;
-        }
-
-        //public async Task<TimeResult> Get(string WorkflowCode, DateTime BeginTime, Dictionary<string, string> param)
-        //{
-        //    //1>> 取出对应已启用的配置
-        //    var model = await _timeLimitRepository.GetAsync(x => x.WorkflowCode == WorkflowCode && x.TimeLimitState == Share.Enums.Settings.ETimeLimitState.Enable);
-        //    if (model != null)
-        //    {
-        //        #region  组合优先级
-        //        //2>> 优先级 组合逻辑判定 (组合重复取最短时间)
-        //        if (model.Combination?.Count > 0)
-        //        {
-        //            //待计算集合
-        //            List<CombinationModel> list = new List<CombinationModel>();
-        //            foreach (var item in model.Combination)
-        //            {
-        //                //判断是否包含当前组合的所有参数
-        //                int countx = item.CombinationParam.Count(x => param.Any(d => d.Key == x.Code && d.Value == x.ParamValue));
-        //                //如果包含 就加入到待计算的集合中
-        //                if (countx == item.CombinationParam.Count)
-        //                {
-        //                    list.Add(item);
-        //                }
-        //            }
-        //            if (list.Count > 0)
-        //            {
-        //                //获取符合参数条件的组合最小时间单位
-        //                var comHavMinParam = list.OrderBy(x => x.Hour).FirstOrDefault();
-        //                if (comHavMinParam != null && comHavMinParam?.TimeLimit != ETimeType.WorkDay)
-        //                {
-        //                    return CalcEndTime(BeginTime, comHavMinParam.TimeLimit, comHavMinParam.TimeLimitValue);
-        //                }
-        //                else
-        //                {
-        //                    //获取符合参数条件的组合(工作日)最小单位
-        //                    var comHavMinParamWorkDay = list.OrderBy(x => x.Hour).FirstOrDefault(x => x.TimeLimit == ETimeType.WorkDay);
-
-        //                    //如果符合条件的组合和符合条件的组合(工作日)都存在
-        //                    if (comHavMinParam != null && comHavMinParamWorkDay != null)
-        //                    {
-        //                        var comMinParamResult = CalcEndTime(BeginTime, comHavMinParam.TimeLimit, comHavMinParam.TimeLimitValue);
-        //                        var comMinParamWorkDayResult = CalcEndTime(BeginTime, comHavMinParamWorkDay.TimeLimit, comHavMinParamWorkDay.TimeLimitValue);
-        //                        if (comMinParamResult.EndTime != null && comMinParamWorkDayResult.EndTime != null && DateTime.Compare(comMinParamResult.EndTime.Value, comMinParamWorkDayResult.EndTime.Value) <= 0)
-        //                        {
-        //                            return comMinParamResult;
-        //                        }
-        //                        else
-        //                        {
-        //                            return comMinParamWorkDayResult;
-        //                        }
-        //                    }
-        //                }
-        //            }
-        //        }
-        //        #endregion
-
-        //        #region 排序优先级
-        //        //3>> 优先级 排序逻辑判定
-        //        if (model.Priority?.Count > 0)
-        //        {
-        //            var firstModel = model.Priority.OrderBy(x => x.Sort).FirstOrDefault(x => param.Any(d => d.Key == x.Code && d.Value == x.ParamTypeValue));
-        //            //如果找到排序条件 走排序逻辑
-        //            if (firstModel != null)
-        //            {
-        //                var CanUseModel = model.ParamArr?.FirstOrDefault(x => x.ParamType == firstModel.ParamType && x.Id == firstModel.Code);
-        //                if (CanUseModel != null)
-        //                {
-        //                    #region 计算结束时间
-        //                    return CalcEndTime(BeginTime, CanUseModel.TimeLimitType, CanUseModel.TimeLimitValue);
-        //                    #endregion
-        //                }
-        //            }
-
-        //        }
-        //        #endregion
-
-        //        #region 配置优先级
-        //        // 4>> 优先级 配置逻辑判定
-        //        if (model.ParamArr?.Count > 0)
-        //        {
-        //            //获取符合参数条件的配置最小时间单位
-        //            var havMinParam = model.ParamArr.OrderBy(x => x.Hour).FirstOrDefault(x => x.TimeLimitType != ETimeType.WorkDay && param.Any(d => d.Key == x.ParamType && d.Value == x.Id));
-        //            //获取符合参数条件的配置(工作日)最小时间单位
-        //            var havMinParamWorkDay = model.ParamArr.OrderBy(x => x.Hour).FirstOrDefault(x => x.TimeLimitType == ETimeType.WorkDay && param.Any(d => d.Key == x.ParamType && d.Value == x.Id));
-        //            //如果符合条件的参数和符合条件的参数(工作日)都存在
-        //            if (havMinParam != null && havMinParamWorkDay != null)
-        //            {
-        //                var minParamResult = CalcEndTime(BeginTime, havMinParam.TimeLimitType, havMinParam.TimeLimitValue);
-        //                var minParamWorkDayResult = CalcEndTime(BeginTime, havMinParam.TimeLimitType, havMinParam.TimeLimitValue);
-        //                if (minParamResult.EndTime != null && minParamWorkDayResult.EndTime != null && DateTime.Compare(minParamResult.EndTime.Value, minParamWorkDayResult.EndTime.Value) <= 0)
-        //                {
-        //                    return minParamResult;
-        //                }
-        //                else
-        //                {
-        //                    return minParamWorkDayResult;
-        //                }
-        //            }
-        //            else
-        //            {
-        //                return new TimeResult() { EndTime = null, RuleId = "", RuleStr = "" };
-        //            }
-        //        }
-        //        else
-        //        {
-        //            return new TimeResult() { EndTime = null, RuleId = "", RuleStr = "" };
-        //        }
-
-        //        #endregion
-
-        //    }
-        //    return null;
-        //}
-
-
-
-    }
-}

+ 9 - 0
src/Hotline.Share/Dtos/Order/QueryOrderDto.cs

@@ -241,6 +241,15 @@ namespace Hotline.Share.Dtos.Order
         public List<string> FileIds { get; set; }
     }
 
+    public record DelayCalcEndTimeDto
+    {
+        public DateTime BeginTime { get; set; }
+
+        public int DelayNum { get; set; }
+
+        public ETimeType DelayUnit { get; set; }
+    }
+
     public record DelayListDto : PagedKeywordRequest
     {
         /// <summary>

+ 1 - 1
src/Hotline.Share/Dtos/Settings/CommonDto.cs

@@ -50,7 +50,7 @@ namespace Hotline.Share.Dtos.Settings
     public class AddAreaDto
     {
         public string AreaName { get; set; }
-
+            
         public string ParentId { get; set; }
 
         public string AreaNameAbbreviation { get; set; }

+ 9 - 5
src/Hotline/Permissions/EPermission.cs

@@ -999,13 +999,19 @@ namespace Hotline.Permissions
         /// </summary>
         [Display(GroupName = "OrderDelay",Name = "延期详情",Description ="延期详情")]
         DelayEntity = 500403,
-		#endregion
 
-		#region 工单督办管理
+        /// <summary>
+        /// 计算期满时间
+        /// </summary>
+        [Display(GroupName = "OrderDelay",Name ="计算期满时间",Description ="计算期满时间")]
+        DelayCalcEndTime = 500404,
+        #endregion
+
+        #region 工单督办管理
         /// <summary>
         ///工单督办列表
         /// </summary>
-		[Display(GroupName = "OrderSupervise", Name = "工单督办列表", Description = "工单督办列表")]
+        [Display(GroupName = "OrderSupervise", Name = "工单督办列表", Description = "工单督办列表")]
 		SuperviseOrderList = 500601,
 
 		/// <summary>
@@ -1282,7 +1288,5 @@ namespace Hotline.Permissions
 		#endregion
 
 		#endregion
-
-
 	}
 }