Переглянути джерело

Merge branch 'master' of http://110.188.24.182:10023/Fengwo/hotline

田爽 1 рік тому
батько
коміт
e244bba150

+ 86 - 23
src/Hotline.Api/Controllers/OrderController.cs

@@ -619,6 +619,15 @@ public class OrderController : BaseController
 
     #region 二次回访申请
 
+    [HttpGet("visitapply/visitagainlist")]
+    public async Task OrderVisitAgainList([FromQuery]OrderVisitAgainListDto dto)
+    {
+    //    await _orderVisitRepository.Queryable()
+    //        .Includes(x=>x.Order)
+    //        .Where()
+    }
+
+
     /// <summary>
     /// 二次回访申请
     /// </summary>
@@ -627,12 +636,11 @@ public class OrderController : BaseController
     /// <exception cref="UserFriendlyException"></exception>
     [Permission(EPermission.ApplyOrderVisit)]
     [HttpPost("visitapply/add")]
-    public async Task ApplyOrderVisit([FromBody] VisitStartFlowDto dto)
+    public async Task ApplyOrderVisit([FromBody]AddVisitApplyDto dto)
     {
-        var orderVisitApply = _mapper.Map<OrderVisitApply>(dto.Data);
+        var orderVisitApply = _mapper.Map<OrderVisitApply>(dto);
         //验证是否可以申请二次回访
 
-
         var isAny = await _orderVisitApplyRepository.AnyAsync(x => x.OrderId == orderVisitApply.OrderId && x.VisitApplyState != EVisitApplyState.NoPass, HttpContext.RequestAborted);
         if (isAny)
             throw UserFriendlyException.SameMessage("当前状态不能申请二次回访");
@@ -642,34 +650,89 @@ public class OrderController : BaseController
             throw UserFriendlyException.SameMessage("会签件不能申请二次回访");
 
         orderVisitApply.EmployeeId = _sessionContext.RequiredUserId;
-        var id = await _orderVisitApplyRepository.AddAsync(orderVisitApply, HttpContext.RequestAborted);
-
-        try
-        {
-            var startDto = _mapper.Map<StartWorkflowDto>(dto.Workflow);
-            startDto.DefinitionModuleCode = WorkflowModuleConsts.VisitApply;
-            startDto.Title = orderVisitApply.VisitReason;
-            string workFlowId = await _workflowApplication.StartWorkflowAsync(startDto, id, cancellationToken: HttpContext.RequestAborted);
-            orderVisitApply.WorkflowId = workFlowId;
-            await _orderVisitApplyRepository.UpdateAsync(orderVisitApply, HttpContext.RequestAborted);
-        }
-        catch (Exception ex)
-        {
-            await _orderDelayRepository.RemoveAsync(id, false, HttpContext.RequestAborted);
-            throw new UserFriendlyException($"工单二次回访流程失败!, {ex.Message}", "工单二次回访流程失败");
-        }
+        orderVisitApply.VisitApplyState = EVisitApplyState.Examining;
+        await _orderVisitApplyRepository.AddAsync(orderVisitApply, HttpContext.RequestAborted);
     }
 
     /// <summary>
-    /// 查询二次申请流程开启参数
+    /// 二次回访审核
     /// </summary>
+    /// <param name="dto"></param>
     /// <returns></returns>
-    [HttpGet("visitapply/startflow")]
-    public async Task<NextStepsDto> GetVisitFlowStartOptions()
+    [Permission(EPermission.ExaminOrderVisit)]
+    [HttpPost("visitapply/examin")]
+    public async Task ExaminOrderVisit([FromBody]ExaminOrderVisitDto dto)
     {
-        return await _workflowApplication.GetStartStepsAsync(WorkflowModuleConsts.VisitApply, HttpContext.RequestAborted);
+        //获取二次回访申请
+        var visitApplyModel = await _orderVisitApplyRepository.GetAsync(dto.Id, HttpContext.RequestAborted);
+        if (visitApplyModel == null)
+            throw UserFriendlyException.SameMessage("无效申请");
+        if (visitApplyModel.VisitApplyState != EVisitApplyState.Examining)
+            throw UserFriendlyException.SameMessage("当前状态不能审核");
+
+        if (dto.IsPass)
+            visitApplyModel.VisitApplyState = EVisitApplyState.Pass;
+        else
+            visitApplyModel.VisitApplyState = EVisitApplyState.NoPass;
+        visitApplyModel.ExaminOpinion = dto.ExaminOpinion;
+        visitApplyModel.ExaminManId = _sessionContext.RequiredUserId;
+        visitApplyModel.ExaminTime = DateTime.Now;
+        await _orderVisitApplyRepository.UpdateAsync(visitApplyModel,HttpContext.RequestAborted);
+        //TODO 处理通过后的业务
+        if (dto.IsPass)
+        {
+            //处理申请单
+            visitApplyModel.VisitApplyState = EVisitApplyState.Pass;
+            await _orderVisitApplyRepository.UpdateAsync(visitApplyModel, HttpContext.RequestAborted);
+            //处理原回访数据
+            var visitModel = await _orderVisitRepository.GetAsync(visitApplyModel.OrderVisitId, HttpContext.RequestAborted);
+            if (visitModel != null)
+            {
+                visitModel.VisitState = EVisitState.None;
+                await _orderVisitRepository.UpdateAsync(visitModel, HttpContext.RequestAborted);
+                //处理新回访数据
+                //查询原回访数据子表
+                var visitModelNew = _mapper.Map<OrderVisit>(visitModel);
+                visitModelNew.InitId();
+                visitModelNew.CreationTime = DateTime.Now;
+                visitModelNew.CreatorId = string.Empty;
+                visitModelNew.CreatorName = string.Empty;
+                visitModelNew.CreatorOrgId = string.Empty;
+                visitModelNew.CreatorOrgName = string.Empty;
+                visitModelNew.CreatorOrgLevel = 0;
+                visitModelNew.AreaId = string.Empty;
+                visitModelNew.VisitState = EVisitState.WaitForVisit;
+
+                var id = await _orderVisitRepository.AddAsync(visitModelNew, HttpContext.RequestAborted);
+                var visitModelDetail = await _orderVisitedDetailRepository.Queryable().Where(x => x.VisitId == visitModel.Id).ToListAsync(HttpContext.RequestAborted);
+                var visitDetailListNew = new List<OrderVisitDetail>();
+                //TODO
+                foreach (var item in visitModelDetail)
+                {
+                    var visitDetail = new OrderVisitDetail();
+                    visitDetail.VisitId = id;
+                    visitDetail.VisitOrgCode = item.VisitOrgCode;
+                    visitDetail.VisitOrgName = item.VisitOrgName;
+                    visitDetail.VisitTarget = item.VisitTarget;
+                    visitDetailListNew.Add(visitDetail);
+                }
+                await _orderVisitedDetailRepository.AddRangeAsync(visitDetailListNew, HttpContext.RequestAborted);
+
+            }
+        }
+        else
+        {
+            //处理申请单
+            visitApplyModel.VisitApplyState = EVisitApplyState.NoPass;
+            visitApplyModel.ExaminManId = _sessionContext.RequiredUserId;
+            visitApplyModel.ExaminOpinion = dto.ExaminOpinion;
+            visitApplyModel.ExaminTime = DateTime.Now;
+            await _orderVisitApplyRepository.UpdateAsync(visitApplyModel, HttpContext.RequestAborted);
+        }
+
     }
 
+
     /// <summary>
     /// 二次回访申请列表
     /// </summary>

+ 1 - 1
src/Hotline.Api/config/appsettings.Development.json

@@ -60,7 +60,7 @@
     }
   },
   "DatabaseConfiguration": {
-    "ApplyDbMigrations": true,
+    "ApplyDbMigrations": false,
     "ApplySeed": false
   },
   "MqConfiguration": {

+ 0 - 54
src/Hotline.Application/Handlers/FlowEngine/EndWorkflowHandler.cs

@@ -240,60 +240,6 @@ public class EndWorkflowHandler : INotificationHandler<EndWorkflowNotify>
                     }
                 }
                 break;
-            case WorkflowModuleConsts.VisitApply:
-                //获取单据
-                var visitApply = await _orderVisitApplyRepository.GetAsync(workflow.ExternalId, cancellationToken);
-                if (visitApply!=null)
-                {
-                    if (isReviewPass)
-                    {
-                        //处理申请单
-                        visitApply.VisitApplyState = EVisitApplyState.Pass;
-                        await _orderVisitApplyRepository.UpdateAsync(visitApply, cancellationToken);
-                        //处理原回访数据
-                        var visitModel = await _orderVisitRepository.GetAsync(visitApply.OrderVisitId, cancellationToken);
-                        if (visitModel != null)
-                        {
-                            visitModel.VisitState = EVisitState.None;
-                            await _orderVisitRepository.UpdateAsync(visitModel, cancellationToken);
-                            //处理新回访数据
-                            //查询原回访数据子表
-                            var visitModelNew = _mapper.Map<OrderVisit>(visitModel);
-                            visitModelNew.InitId();
-                            visitModelNew.CreationTime = DateTime.Now;
-                            visitModelNew.CreatorId = string.Empty;
-                            visitModelNew.CreatorName = string.Empty;
-                            visitModelNew.CreatorOrgId = string.Empty;
-                            visitModelNew.CreatorOrgName = string.Empty;
-                            visitModelNew.CreatorOrgLevel = 0;
-                            visitModelNew.AreaId = string.Empty;
-                            visitModelNew.VisitState = EVisitState.WaitForVisit;
-
-                            var id = await _orderVisitRepository.AddAsync(visitModelNew, cancellationToken);
-                            var visitModelDetail = await _orderVisitedDetailRepository.Queryable().Where(x => x.VisitId == visitModel.Id).ToListAsync(cancellationToken);
-                            var visitDetailListNew = new List<OrderVisitDetail>();
-                            //TODO
-                            foreach (var item in visitModelDetail)
-                            {
-                                var visitDetail = new OrderVisitDetail();
-                                visitDetail.VisitId = id;
-                                visitDetail.VisitOrgCode = item.VisitOrgCode;
-                                visitDetail.VisitOrgName = item.VisitOrgName;
-                                visitDetail.VisitTarget = item.VisitTarget;
-                                visitDetailListNew.Add(visitDetail);
-                            }
-                            await _orderVisitedDetailRepository.AddRangeAsync(visitDetailListNew, cancellationToken);
-
-                        }
-                    }
-                    else 
-                    {
-                        //处理申请单
-                        visitApply.VisitApplyState = EVisitApplyState.NoPass;
-                        await _orderVisitApplyRepository.UpdateAsync(visitApply, cancellationToken);
-                    }
-                }
-                break;
         }
     }
 }

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

@@ -507,6 +507,12 @@ namespace Hotline.Share.Dtos.Order
         NoPub = 2
     }
 
+    public record OrderVisitAgainListDto: PagedKeywordRequest
+    {
+
+    }
+
+
     public class AddVisitApplyDto
     {
         public string OrderNo { get; set; }
@@ -520,6 +526,17 @@ namespace Hotline.Share.Dtos.Order
         public List<string> FileIds { get; set; }
     }
 
+
+    public class ExaminOrderVisitDto
+    {
+        public string Id { get; set; }
+
+        public string? ExaminOpinion { get; set; }
+
+        public bool IsPass { get; set; }
+    }
+
+
     public class VisitApplyDto
     {
         public string OrderNo { get; set; }

+ 0 - 6
src/Hotline/FlowEngine/WorkflowModules/WorkflowModuleConsts.cs

@@ -54,11 +54,6 @@ public class WorkflowModuleConsts
     /// </summary>
     public const string CircularApply = "CircularApply";
 
-    /// <summary>
-    /// 二次回访申请
-    /// </summary>
-    public const string VisitApply = "VisitApply";
-
 
     public static List<WorkflowModule> AllModules =>
         new()
@@ -73,6 +68,5 @@ public class WorkflowModuleConsts
             new(OrderScreen,"工单甄别"),
             new(BulletinApply,"公告审批"),
             new(CircularApply,"通知审批"),
-            new(VisitApply,"二次回访申请")
         };
 }

+ 16 - 5
src/Hotline/Orders/OrderVisitApply.cs

@@ -31,16 +31,27 @@ namespace Hotline.Orders
         [Navigate(NavigateType.OneToOne,nameof(OrderVisitId))]
         public OrderVisit OrderVisit { get; set; }
 
+        public EVisitApplyState VisitApplyState { get; set; }
 
         /// <summary>
-        /// 流程ID
+        /// 审核意见
         /// </summary>
-        public string? WorkflowId { get; set; }
+        public string? ExaminOpinion { get; set; }
 
-        [Navigate(NavigateType.OneToOne,nameof(WorkflowId))]
-        public Workflow? Workflow { get; set; }
+        /// <summary>
+        /// 审核人
+        /// </summary>
+        public string? ExaminManId { get; set; }
 
+        /// <summary>
+        /// 审核人
+        /// </summary>
+        [Navigate(NavigateType.OneToOne,nameof(OrderVisitId))]
+        public User ExaminMan { get; set; }
 
-        public EVisitApplyState VisitApplyState { get; set; }
+        /// <summary>
+        /// 审核时间
+        /// </summary>
+        public DateTime? ExaminTime { get; set; }
     }
 }

+ 6 - 2
src/Hotline/Permissions/EPermission.cs

@@ -1512,7 +1512,6 @@ namespace Hotline.Permissions
         /// </summary>
         [Display(GroupName = "VisitApplyList",Name ="二次回访申请列表",Description ="二次回访申请列表")]
         VisitApplyList = 501800,
-
         /// <summary>
         /// 申请二次回访
         /// </summary>
@@ -1523,7 +1522,12 @@ namespace Hotline.Permissions
         /// </summary>
         [Display(GroupName = "VisitApplyEntity",Name = "二次回访申请对象",Description ="二次回访申请对象")]
         VisitApplyEntity = 501802,
-		#endregion
+        /// <summary>
+        /// 二次回访审核
+        /// </summary>
+        [Display(GroupName = "ExaminOrderVisit",Name ="二次回访审核",Description = "二次回访审核")]
+        ExaminOrderVisit = 501803,
+        #endregion
 
 		#region 工单退回管理
 		/// <summary>

+ 11 - 0
src/Hotline/Settings/TimeLimits/ITimeLimitDomainService.cs

@@ -6,6 +6,17 @@ namespace Hotline.Settings.TimeLimits
 {
     public interface ITimeLimitDomainService
     {
+
+        /// <summary>
+        /// 获取办理时限配置
+        /// </summary>
+        /// <param name="code"></param>
+        /// <param name="iscanter"></param>
+        /// <returns></returns>
+        int GetOrderTimeLimitConfig(string? code);
+
+
+
         /// <summary>
         /// 新增
         /// </summary>

+ 26 - 2
src/Hotline/Settings/TimeLimits/TimeLimitDomainService.cs

@@ -1,7 +1,9 @@
-using Hotline.Share.Dtos.Settings;
+using Hotline.Caching.Interfaces;
+using Hotline.Share.Dtos.Settings;
 using Hotline.Share.Enums.FlowEngine;
 using Hotline.Share.Enums.Order;
 using Hotline.Share.Enums.Settings;
+using XF.Domain.Constants;
 using XF.Domain.Dependency;
 using XF.Domain.Exceptions;
 using XF.Domain.Repository;
@@ -14,12 +16,14 @@ namespace Hotline.Settings.TimeLimits
         private readonly IDaySettingRepository _daySettingRepository;
         private List<CalcTimeSetting> timeSettingList;
         private readonly IRepository<SystemSetting> _systemSettingRepository;
+        private readonly ISystemSettingCacheManager _systemSettingCacheManager;
 
-        public TimeLimitDomainService(ITimeLimitRepository timeLimitRepository, IDaySettingRepository daySettingRepository, IRepository<SystemSetting> systemSettingRepository)
+        public TimeLimitDomainService(ITimeLimitRepository timeLimitRepository, IDaySettingRepository daySettingRepository, IRepository<SystemSetting> systemSettingRepository, ISystemSettingCacheManager systemSettingCacheManager)
         {
             _timeLimitRepository = timeLimitRepository;
             _daySettingRepository = daySettingRepository;
             _systemSettingRepository = systemSettingRepository;
+            _systemSettingCacheManager = systemSettingCacheManager;
 
             //初始化常量TODO
             timeSettingList = new List<CalcTimeSetting>();
@@ -45,6 +49,26 @@ namespace Hotline.Settings.TimeLimits
             timeSettingList.Add(setting10);
         }
 
+
+        /// <summary>
+        /// 获取办理时限配置
+        /// </summary>
+        /// <param name="code"></param>
+        /// <param name="iscanter"></param>
+        /// <returns></returns>
+        public int GetOrderTimeLimitConfig(string? code)
+        {
+            if (string.IsNullOrEmpty(code))
+            {
+                 return int.Parse(_systemSettingCacheManager.GetSetting(SettingConstants.BackCenterTimeSetting).SettingValue[0]);
+            }
+            else
+            {
+                return timeSettingList.FirstOrDefault(x => x.BugCode == code).TimeValue;
+            }
+        }
+
+
         public async Task<string> AddAsync(TimeLimit model, CancellationToken cancellationToken)
         {
             return await _timeLimitRepository.AddAsync(model, cancellationToken);

+ 5 - 0
src/XF.Domain/Constants/SettingConstants.cs

@@ -81,5 +81,10 @@ namespace XF.Domain.Constants
         /// 分机是否需要验证
         /// </summary>
         public const string IsTelNeedVerify = "IsTelNeedVerify";
+
+        /// <summary>
+        /// 退回中心时限
+        /// </summary>
+        public const string BackCenterTimeSetting = "BackCenterTimeSetting";
     }
 }