田爽 před 9 měsíci
rodič
revize
f8beaa2090

+ 34 - 13
src/Hotline.Api/Controllers/OrderController.cs

@@ -1648,8 +1648,9 @@ public class OrderController : BaseController
             .Includes(x => x.OrderVisit)
             .Includes(x => x.OrderVisit, y => y.Order)
             .Includes(x => x.OrderVisit, y => y.Employee)
-            .LeftJoin<OrderScreen>((x, s) => x.Id == s.VisitDetailId && s.Status < EScreenStatus.End && s.IsDeleted == false)
-            .Where((x, s) => s.Id == null)
+            .LeftJoin<OrderScreen>((x, s) => x.Id == s.VisitDetailId  && s.IsDeleted == false)
+                    //&& s.Status < EScreenStatus.End
+			.Where((x, s) => s.Id == null)
             .WhereIF(dto.IsHomePage.HasValue && dto.IsHomePage == true,
                 x => x.OrderVisit.VisitTime < dto.CreationTimeEnd && x.OrderVisit.VisitTime > dto.CreationTimeStart)
             .WhereIF(!string.IsNullOrEmpty(dto.No), x => x.OrderVisit.Order!.No!.Contains(dto.No!))
@@ -1845,10 +1846,31 @@ public class OrderController : BaseController
     }
 
     /// <summary>
-    /// 查询工单甄别流程开启参数
+    /// 甄别流程退回
     /// </summary>
-    /// <returns></returns>
-    [HttpGet("screen/startflow")]
+    [HttpPost("screen/previous")]
+	public async Task ScreenPrevious([FromBody] PreviousWorkflowDto dto) 
+    {
+	    var workflow = await _workflowDomainService.GetWorkflowAsync(dto.WorkflowId, withSteps: true,
+		    cancellationToken: HttpContext.RequestAborted);
+        if (workflow.Steps.Count > 2)
+        {
+            await _workflowApplication.PreviousAsync(dto, HttpContext.RequestAborted);
+        }
+        else {
+            TerminateDto terDto = new TerminateDto
+            {
+                WorkflowId = dto.WorkflowId,
+                Opinion = "退回申请人"
+            };
+			await _workflowDomainService.TerminateAsync(terDto, HttpContext.RequestAborted);
+		}
+	}
+	/// <summary>
+	/// 查询工单甄别流程开启参数
+	/// </summary>
+	/// <returns></returns>
+	[HttpGet("screen/startflow")]
     public async Task<NextStepsDto> GetScreenFlowStartOptionsAsync()
     {
         //return await _workflowApplication.GetStartOptionsAsync(WorkflowModuleConsts.OrderScreen,
@@ -2671,7 +2693,7 @@ public class OrderController : BaseController
         {
             var workflow = await _workflowDomainService.GetWorkflowAsync(dto.WorkflowId, withSteps: true,
                 cancellationToken: HttpContext.RequestAborted);
-            var centerOpinion = workflow.Steps.Where(x => x.HandlerOrgId == OrgSeedData.CenterId).MaxBy(d => d.CreationTime)?.Opinion ?? string.Empty;
+            var centerOpinion = workflow.Steps.Where(x => x.HandlerOrgId == OrgSeedData.CenterId && x.StepType != EStepType.End).MaxBy(d => d.CreationTime)?.Opinion ?? string.Empty;
             dto.CenterOpinion = centerOpinion;
             List<OrderRemarksDto> remarks = workflow.Steps.Where(x => !string.IsNullOrEmpty(x.Remark)).Select(x => new OrderRemarksDto { Remark = x.Remark, RemarkTime = x.CreationTime, RemarkUser = x.CreatorName }).ToList();
             dto.OrderRemarks = remarks;
@@ -3306,6 +3328,7 @@ public class OrderController : BaseController
         var (total, items) = await _orderRepository
             .Queryable(hasHandled: isHandled)
             .Includes(d => d.OrderSpecials)
+            .Where(d=>d.Status != EOrderStatus.WaitForAccept || d.Status != EOrderStatus.BackToUnAccept || d.Status != EOrderStatus.SpecialToUnAccept)
             .WhereIF(dto.IsProvince.HasValue, d => d.IsProvince == dto.IsProvince)
             .WhereIF(!string.IsNullOrEmpty(dto.Keyword), d => d.Title.StartsWith(dto.Keyword))
             .WhereIF(!string.IsNullOrEmpty(dto.No), d => d.No == dto.No)
@@ -3701,7 +3724,7 @@ public class OrderController : BaseController
                 var processType = flowDirection == EFlowDirection.OrgToCenter || flowDirection == EFlowDirection.CenterToCenter
                     ? EProcessType.Zhiban
                     : EProcessType.Jiaoban;
-                await _orderRepository.Updateable().SetColumns(o => new Orders.Order() { ProcessType = processType,Status = EOrderStatus.SendBack })
+                await _orderRepository.Updateable().SetColumns(o => new Orders.Order() { ProcessType = processType })
                     .Where(o => o.Id == order.Id).ExecuteCommandAsync(HttpContext.RequestAborted);
                 //发送短信TODO
             }
@@ -3712,7 +3735,7 @@ public class OrderController : BaseController
             var processType = flowDirection == EFlowDirection.OrgToCenter || flowDirection == EFlowDirection.CenterToCenter
                 ? EProcessType.Zhiban
                 : EProcessType.Jiaoban;
-            await _orderRepository.Updateable().SetColumns(o => new Orders.Order() { ProcessType = processType, Status = EOrderStatus.SendBack })
+            await _orderRepository.Updateable().SetColumns(o => new Orders.Order() { ProcessType = processType })
                 .Where(o => o.Id == order.Id).ExecuteCommandAsync(HttpContext.RequestAborted);
             //发送短信TODO
         }
@@ -3754,7 +3777,7 @@ public class OrderController : BaseController
                               flowDirection == EFlowDirection.CenterToCenter
                 ? EProcessType.Zhiban
                 : EProcessType.Jiaoban;
-            await _orderRepository.Updateable().SetColumns(o => new Orders.Order() { ProcessType = processType, Status = EOrderStatus.SendBack })
+            await _orderRepository.Updateable().SetColumns(o => new Orders.Order() { ProcessType = processType })
                 .Where(o => o.Id == sendBack.OrderId).ExecuteCommandAsync(HttpContext.RequestAborted);
             //发送短信TODO
             await _orderSendBackAuditRepository.UpdateAsync(sendBack, HttpContext.RequestAborted);
@@ -3794,7 +3817,7 @@ public class OrderController : BaseController
                 var processType = flowDirection == EFlowDirection.OrgToCenter || flowDirection == EFlowDirection.CenterToCenter
                     ? EProcessType.Zhiban
                     : EProcessType.Jiaoban;
-                await _orderRepository.Updateable().SetColumns(o => new Orders.Order() { ProcessType = processType, Status = EOrderStatus.SendBack })
+                await _orderRepository.Updateable().SetColumns(o => new Orders.Order() { ProcessType = processType})
                     .Where(o => o.Id == sendBack.OrderId).ExecuteCommandAsync(HttpContext.RequestAborted);
                 //发送短信TODO
             }
@@ -4289,8 +4312,6 @@ public class OrderController : BaseController
             var processType = dto.FlowDirection == EFlowDirection.OrgToCenter || dto.FlowDirection == EFlowDirection.CenterToCenter
                 ? EProcessType.Zhiban
                 : EProcessType.Jiaoban;
-            await _orderRepository.Updateable().SetColumns(o => new Orders.Order() { ProcessType = processType, Status = EOrderStatus.SendBack })
-                .Where(o => o.Id == order.Id).ExecuteCommandAsync(HttpContext.RequestAborted);
             await _workflowApplication.RecallAsync(recall, endTime, order.Status >= EOrderStatus.Filed, HttpContext.RequestAborted);
 			var publish = await _orderPublishRepository.GetAsync(x => x.OrderId == dto.OrderId);
             if (publish != null)
@@ -4308,7 +4329,7 @@ public class OrderController : BaseController
             }
 
             var reTransactNum = order.ReTransactNum.HasValue ? order.ReTransactNum.Value + 1 : 1;
-            await _orderRepository.Updateable().SetColumns(o => new Orders.Order() { ReTransactNum = reTransactNum }).Where(o => o.Id == order.Id)
+            await _orderRepository.Updateable().SetColumns(o => new Orders.Order() { ProcessType = processType,ReTransactNum = reTransactNum, Status = EOrderStatus.BackToUnAccept }).Where(o => o.Id == order.Id)
                 .ExecuteCommandAsync(HttpContext.RequestAborted);
 
             var visit = await _orderVisitRepository.GetAsync(x => x.OrderId == dto.OrderId && x.VisitState != EVisitState.None);

+ 69 - 6
src/Hotline.Api/Controllers/ProvinceStatisticsController.cs

@@ -4,11 +4,14 @@ using Hotline.Share.Dtos;
 using Hotline.Share.Dtos.Order;
 using Hotline.Share.Dtos.ProvinceStatistics;
 using Hotline.Share.Enums.Order;
+using Hotline.Share.Enums.Settings;
 using MapsterMapper;
 using Microsoft.AspNetCore.Mvc;
+using SqlSugar;
 using XF.Domain.Authentications;
 using XF.Domain.Exceptions;
 using XF.Domain.Repository;
+using XF.Utility.EnumExtensions;
 
 namespace Hotline.Api.Controllers
 {
@@ -63,12 +66,32 @@ namespace Hotline.Api.Controllers
         /// <param name="id"></param>
         /// <returns></returns>
         [HttpGet("get_order_send_back_detail")]
-        public async Task<OrderSendBack> GetOrderSendBackDetail(string id)
+        public async Task<ApplyDetailDto> GetOrderSendBackDetail(string id)
         {
             var data = await _orderSendBackRepository.GetAsync(p => p.Id == id, HttpContext.RequestAborted);
             if (data == null)
                 throw UserFriendlyException.SameMessage("退回查询失败");
-            return data;
+            ApplyDetailDto applyDetailDto = new ApplyDetailDto
+            {
+                ApplyOrgName = data.CreatorOrgName,
+                ApplyUserName = data.CreatorName,
+                ApplyTime = data.CreationTime,
+                ApplyReason = data.Content,
+                AuditName = data.AuditName,
+                AuditOrgName = data.AuditOrgName,
+                AuditTime = data.AuditTime,
+                AuditContent = data.Reason
+            };
+            if (data.State == 0)
+                applyDetailDto.AuditState = "申请中";
+            else if (data.State == 1)
+                applyDetailDto.AuditState = "同意";
+            else if (data.State == 2)
+                applyDetailDto.AuditState = "不同意";
+            else
+                applyDetailDto.AuditState = "申请中";
+
+            return applyDetailDto;
         }
 
         /// <summary>
@@ -100,12 +123,33 @@ namespace Hotline.Api.Controllers
         /// <param name="id"></param>
         /// <returns></returns>
         [HttpGet("get_order_delay_detail")]
-        public async Task<OrderDelay> GetOrderDelayDetail(string id)
+        public async Task<ApplyDetailDto> GetOrderDelayDetail(string id)
         {
             var data = await _orderDelayRepository.GetAsync(p => p.Id == id, HttpContext.RequestAborted);
             if (data == null)
                 throw UserFriendlyException.SameMessage("延期查询失败");
-            return data;
+
+            ApplyDetailDto applyDetailDto = new ApplyDetailDto
+            {
+                ApplyOrgName = data.ApplyOrgName,
+                ApplyUserName = data.EmployeeName,
+                ApplyTime = data.ApplyDelayTime,
+                ApplyReason = data.DelayReason,
+                AuditName = data.AuditName,
+                AuditOrgName = data.AuditOrgName,
+                AuditTime = data.AuditTime,
+                AuditContent = data.AuditOpinion,
+                ApplyDelayNum = data.DelayNum + data.DelayUnit.GetDescription()
+            };
+            if (data.DelayState == EDelayState.Examining)
+                applyDetailDto.AuditState = "申请中";
+            else if (data.DelayState == EDelayState.Pass)
+                applyDetailDto.AuditState = "同意";
+            else if (data.DelayState == EDelayState.NoPass)
+                applyDetailDto.AuditState = "不同意";
+            else
+                applyDetailDto.AuditState = "申请中";
+            return applyDetailDto;
         }
 
         /// <summary>
@@ -144,12 +188,31 @@ namespace Hotline.Api.Controllers
         /// <param name="id"></param>
         /// <returns></returns>
         [HttpGet("get_order_screen_detail")]
-        public async Task<OrderScreen> GetOrderScreenDetail(string id)
+        public async Task<ApplyDetailDto> GetOrderScreenDetail(string id)
         {
             var data = await _orderScreenRepository.GetAsync(p => p.Id == id, HttpContext.RequestAborted);
             if (data == null)
                 throw UserFriendlyException.SameMessage("甄别查询失败");
-            return data;
+            ApplyDetailDto applyDetailDto = new ApplyDetailDto
+            {
+                ApplyOrgName = data.CreatorOrgName,
+                ApplyUserName = data.CreatorName,
+                ApplyTime = data.CreationTime,
+                ApplyReason = data.Content,
+                AuditName = data.AuditName,
+                AuditOrgName = data.AuditOrgName,
+                AuditTime = data.AuditTime,
+                AuditContent = data.ReplyContent
+            };
+            if (data.Status == EScreenStatus.Approval)
+                applyDetailDto.AuditState = "申请中";
+            else if (data.Status == EScreenStatus.End)
+                applyDetailDto.AuditState = "同意";
+            else if (data.Status == EScreenStatus.Refuse)
+                applyDetailDto.AuditState = "不同意";
+            else
+                applyDetailDto.AuditState = "申请中";
+            return applyDetailDto;
         }
     }
 }

+ 5 - 1
src/Hotline.Application/Handlers/FlowEngine/WorkflowPreviousHandler.cs

@@ -78,9 +78,13 @@ namespace Hotline.Application.Handlers.FlowEngine
 					_mapper.Map(workflow, order);
                     if (notification.TargetStep.StepType is EStepType.Start)
                     {
-                        order.Status = EOrderStatus.BackToUnAccept;
+	                    order.Status = EOrderStatus.BackToUnAccept;
                         //order.BackToUnsign();
                     }
+                    else
+					{
+                        order.Status = EOrderStatus.SendBack;
+                    }
 
                     await _orderRepository.UpdateAsync(order, cancellationToken);
                     //if (notification.IsOrgToCenter)

+ 1 - 1
src/Hotline.Application/Orders/OrderApplication.cs

@@ -1003,7 +1003,7 @@ public class OrderApplication : IOrderApplication, IScopeDependency
                AreaCode = pp.Id,
                AreaName = pp.AreaName,
                Count = SqlFunc.AggregateSum(dd.Count)
-           }).Where(q=>q.HotspotName!="").ToPivotListAsync(q=> q.AreaCode, q=> new { q.HotspotName,q.HotspotId},q=> q.Sum(x=>x.Count));
+           }).Where(q => q.HotspotName != "").ToPivotListAsync(q=> q.AreaCode, q=> new { q.HotspotName,q.HotspotId},q=> q.Sum(x=>x.Count));
 
         var areaTitleList = await _systemAreaRepository.Queryable().Where(x => SqlFunc.Length(x.Id) == 6 && x.Id != "510000").OrderBy(x => x.Id).ToListAsync();
         return (areaTitleList, returnList);

+ 61 - 0
src/Hotline.Share/Dtos/ProvinceStatistics/ApplyDetailDto.cs

@@ -0,0 +1,61 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Hotline.Share.Dtos.ProvinceStatistics
+{
+    public class ApplyDetailDto
+    {
+        /// <summary>
+        /// 申请部门名称
+        /// </summary>
+        public string? ApplyOrgName { get; set; }
+
+        /// <summary>
+        /// 申请人名称
+        /// </summary>
+        public string? ApplyUserName { get; set; }
+
+        /// <summary>
+        /// 申请时间
+        /// </summary>
+        public DateTime? ApplyTime { get; set; }
+
+        /// <summary>
+        /// 申请理由
+        /// </summary>
+        public string ApplyReason { get; set; }
+
+        /// <summary>
+        /// 延期申请时限
+        /// </summary>
+        public string? ApplyDelayNum { get; set; }
+
+        /// <summary>
+        /// 审核人
+        /// </summary>
+        public string? AuditName { get; set; }
+
+        /// <summary>
+        /// 审核部门
+        /// </summary>
+        public string? AuditOrgName { get; set; }
+
+        /// <summary>
+        /// 审核时间
+        /// </summary>
+        public DateTime? AuditTime { get; set; }
+
+        /// <summary>
+        /// 审核内容
+        /// </summary>
+        public string? AuditContent { get; set; }
+
+        /// <summary>
+        /// 审核状态
+        /// </summary>
+        public string? AuditState { get; set; }
+    }
+}

+ 0 - 148
src/Hotline.Share/Dtos/ProvinceStatistics/OrderBaseDto.cs

@@ -1,148 +0,0 @@
-using Hotline.Share.Enums.Order;
-using XF.Utility.EnumExtensions;
-
-namespace Hotline.Share.Dtos.ProvinceStatistics
-{
-    public class OrderBaseDto
-    {
-        public string OrderId { get; set; }
-
-        /// <summary>
-        /// 工单状态
-        /// </summary>
-        public EOrderStatus Status { get; set; }
-        public string StatusText => Status.GetDescription();
-
-        /// <summary>
-        /// 过期状态
-        /// </summary>
-        public EExpiredStatus? ExpiredStatus => CalculateExpiredState();
-
-        /// <summary>
-        /// 过期状态
-        /// </summary>
-        public string ExpiredStatusText => ExpiredStatus?.GetDescription() ?? string.Empty;
-
-        /// <summary>
-        /// 工单编码(20220101000001)
-        /// </summary>
-        public string No { get; set; }
-
-        /// <summary>
-        /// 来源渠道
-        /// </summary>
-        public string? SourceChannel { get; set; }
-        public string? SourceChannelCode { get; set; }
-
-        /// <summary>
-        /// 受理类型
-        /// </summary>
-        public string? AcceptType { get; set; }
-        public string? AcceptTypeCode { get; set; }
-
-        /// <summary>
-        /// 标题
-        /// </summary>
-        public string Title { get; set; }
-
-        /// <summary>
-        /// 热点
-        /// </summary>
-        public string? HotspotId { get; set; }
-        public string? HotspotName { get; set; }
-        public string? HotspotSpliceName { get; set; }
-
-        public DateTime CreationTime { get; set; }
-
-        /// <summary>
-        /// 省编号
-        /// </summary>
-        public string? ProvinceNo { get; set; }
-
-        /// <summary>
-        /// 过期时间
-        /// </summary>
-        public DateTime? ExpiredTime { get; set; }
-
-        /// <summary>
-        /// 即将超期时间
-        /// </summary>
-        public DateTime? NearlyExpiredTime { get; set; }
-
-        /// <summary>
-        /// 即将超期第一级
-        /// </summary>
-        public DateTime? NearlyExpiredTimeOne { get; set; }
-
-        /// <summary>
-        /// 实际办理节点名称(会签状态此字段保存最外层会签发起节点名称)
-        /// </summary>
-        public string? ActualHandleStepName { get; set; }
-
-        /// <summary>
-        /// 是否紧急
-        /// </summary>
-        public bool IsUrgent { get; set; }
-
-        public string IsUrgentText => IsUrgent ? "紧急" : "";
-
-        /// <summary>
-        /// 实际办理时间
-        /// </summary>
-        public DateTime? ActualHandleTime { get; set; }
-
-        /// <summary>
-        /// 实际办理人id
-        /// </summary>
-        public string? ActualHandlerId { get; set; }
-
-        /// <summary>
-        /// 实际办理人名称
-        /// </summary>
-        public string? ActualHandlerName { get; set; }
-
-        /// <summary>
-        /// 实际办理部门名称
-        /// </summary>
-        public string? ActualHandleOrgName { get; set; }
-
-        /// <summary>
-        /// 实际办理部门编码
-        /// </summary>
-        public string? ActualHandleOrgCode { get; set; }
-
-        public EExpiredStatus? CalculateExpiredState()
-        {
-            DateTime? dateTime = DateTime.Now;
-            if (Status >= EOrderStatus.Filed)
-            {
-                dateTime = ActualHandleTime;
-            }
-            //ExpiredStatus
-            if (ExpiredTime.HasValue)
-            {
-                if (NearlyExpiredTimeOne.HasValue && dateTime < NearlyExpiredTimeOne)
-                {
-                    return EExpiredStatus.Normal;
-                }
-                else if (!NearlyExpiredTimeOne.HasValue && dateTime < NearlyExpiredTime)
-                {
-                    return EExpiredStatus.Normal;
-                }
-                else if (NearlyExpiredTimeOne.HasValue && dateTime > NearlyExpiredTimeOne && dateTime < NearlyExpiredTime)
-                {
-                    return EExpiredStatus.GoingToExpiredOne;
-                }
-                else if (dateTime > NearlyExpiredTime && dateTime < ExpiredTime)
-                {
-                    return EExpiredStatus.GoingToExpired;
-                }
-                else
-                {
-                    return EExpiredStatus.Expired;
-                }
-            }
-            return null;
-        }
-    }
-}

+ 21 - 3
src/Hotline.Share/Dtos/ProvinceStatistics/ProvinceSendBackListDto.cs

@@ -164,8 +164,16 @@ namespace Hotline.Share.Dtos.ProvinceStatistics
         /// </summary>
         public EDelayState DelayState { get; set; }
 
-        public string? DelayStateText => DelayState.GetDescription();
-
+        public string? DelayStateText => CalcRate();
+        public string CalcRate()
+        {
+            if (DelayState == EDelayState.Pass)
+                return "同意";
+            else if (DelayState == EDelayState.NoPass)
+                return "不同意";
+            else
+                return "申请中";
+        }
     }
 
     /// <summary>
@@ -234,7 +242,17 @@ namespace Hotline.Share.Dtos.ProvinceStatistics
         /// </summary>
         public EScreenStatus Status { get; set; }
 
-        public string? StatusText => Status.GetDescription();
+        public string? StatusText => CalcRate();
+
+        public string CalcRate()
+        {
+            if (Status == EScreenStatus.End)
+                return "同意";
+            else if (Status == EScreenStatus.Refuse)
+                return "不同意";
+            else
+                return "申请中";
+        }
 
     }
 }