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

Merge branch 'dev' of http://git.12345lm.cn/Fengwo/hotline into dev

Dun.Jason 10 місяців тому
батько
коміт
78e2a382ca

+ 47 - 16
src/Hotline.Api/Controllers/OrderController.cs

@@ -2462,7 +2462,20 @@ public class OrderController : BaseController
             dto.CanHandle = result.CanHandle;
             dto.CanPrevious = result.CanPrevious;
             dto.CanInsteadHandle = !dto.CanHandle && canInsteadHandle;
-            dto.PreviousOpinion = result.previousOpinion;
+            if (result.Trace is not null)
+            {
+	            dto.PreviousOpinion = result.Trace!.Opinion;
+				var sendBack = await _orderSendBackAuditRepository.Queryable().Where(x => x.OrderId == dto.Id && x.TraceId == result.Trace.Id).OrderByDescending(x => x.CreationTime).FirstAsync();
+	            if (sendBack is { Id: not null })
+	            {
+					dto.SendBackOpinion = !string.IsNullOrEmpty(sendBack.Content) ? sendBack.Content : string.Empty;
+					if (sendBack.State == ESendBackAuditState.Refuse)
+					{
+						dto.SendBackRefuseOpinion = sendBack.AuditContent;
+                        dto.SendBackAuditTime = sendBack.AuditTime;
+					}
+				}
+			}
 
 			await _mediator.Publish(new GetOrderDetailNotify(result.Workflow,
                 _sessionContext.RequiredUserId, _sessionContext.UserName,
@@ -2543,8 +2556,6 @@ public class OrderController : BaseController
                 cancellationToken: HttpContext.RequestAborted);
             var centerOpinion = workflow.Steps.Where(x => x.HandlerOrgId == OrgSeedData.CenterId).OrderByDescending(x => x.CreationTime).Select(x => x.Opinion).First();
             dto.CenterOpinion = string.IsNullOrEmpty(centerOpinion) ? string.Empty : centerOpinion;
-            var sendBack = await _orderSendBackAuditRepository.Queryable().Where(x => x.OrderId == dto.Id).OrderByDescending(x => x.CreationTime).FirstAsync();
-            dto.SendBackOpinion = sendBack is { Id: not null } && !string.IsNullOrEmpty(sendBack.Content) ? sendBack.Content : string.Empty;
             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;
         }
@@ -3518,8 +3529,9 @@ public class OrderController : BaseController
                     SendBackOrgName = prevStep.HandlerOrgName,//prevStep!.AcceptorOrgName,
                     WorkflowOrgId = _sessionContext.RequiredOrgId,
                     WorkflowUserId = _sessionContext.RequiredUserId,
-                    WorkflowRoleIds = _sessionContext.Roles.ToList()
-                };
+                    WorkflowRoleIds = _sessionContext.Roles.ToList(),
+                    TraceId = currentStep.Id
+				};
                 await _orderSendBackAuditRepository.AddAsync(audit, HttpContext.RequestAborted);
             }
             else
@@ -3576,7 +3588,6 @@ public class OrderController : BaseController
             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);
     }
@@ -3635,12 +3646,17 @@ public class OrderController : BaseController
              .Includes(x => x.Order)
              .WhereIF(!string.IsNullOrEmpty(dto.Keyword),
                  d => d.Order.Title.Contains(dto.Keyword!) || d.Order.No.Contains(dto.Keyword!))
-             .WhereIF(dto.CreationTimeStart.HasValue, d => d.CreationTime >= dto.CreationTimeStart)
-             .WhereIF(dto.CreationTimeEnd.HasValue, d => d.CreationTime <= dto.CreationTimeEnd)
+             .WhereIF(!string.IsNullOrEmpty(dto.Title), d => d.Order.Title.Contains(dto.Title!) )
+             .WhereIF(!string.IsNullOrEmpty(dto.No),d => d.Order.No.Contains(dto.No!))
+             .WhereIF(!string.IsNullOrEmpty(dto.AcceptTypeCode), d => d.Order.AcceptTypeCode == dto.AcceptTypeCode)
+             .WhereIF(!string.IsNullOrEmpty(dto.OrgName), d => d.ApplyOrgName == dto.OrgName)
+			 .WhereIF(dto.StartTime.HasValue, d => d.CreationTime >= dto.StartTime)
+             .WhereIF(dto.EndTime.HasValue, d => d.CreationTime <= dto.EndTime)
              .WhereIF(dto.AuditState == 1, d => d.State == ESendBackAuditState.Apply)
              .WhereIF(dto.AuditState == 2 && !dto.State.HasValue, d => d.State > ESendBackAuditState.Apply)
              .WhereIF(dto.AuditState == 2 && dto.State.HasValue, d => d.State == dto.State)
-             .WhereIF(_sessionContext.Roles.Contains("role_sysadmin") == false, x => x.SendBackOrgId == _sessionContext.OrgId);// 123 系统管理员
+             .WhereIF(dto.AuditState == 3 && _sessionContext.RequiredOrgId != OrgSeedData.CenterId, x => x.SendBackOrgId.StartsWith(_sessionContext.OrgId))
+             .WhereIF(_sessionContext.Roles.Contains("role_sysadmin") == false && dto.AuditState != 3,x => x.SendBackOrgId == _sessionContext.OrgId);// 123 系统管理员
 
         var (total, items) = await query.OrderByDescending(x => x.CreationTime)
             .ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
@@ -3661,16 +3677,31 @@ public class OrderController : BaseController
             .FirstAsync(x => x.Id == id);
     }
 
-    #endregion
-
-    #region 省工单退回
-
     /// <summary>
-    /// 工单退回列表
+    /// 列表页面基础数据
     /// </summary>
-    /// <param name="dto"></param>
     /// <returns></returns>
-    [Permission(EPermission.SendBackOrder)]
+    [HttpGet("order_previous/base-data")]
+    public async Task<object> OrderSendBackBaseData()
+    {
+	    var rsp = new
+	    {
+		    AcceptTypeOptions = _sysDicDataCacheManager.GetSysDicDataCache(SysDicTypeConsts.AcceptType),
+		    ESendBackAuditState = EnumExts.GetDescriptions<ESendBackAuditState>(),
+	    };
+	    return rsp;
+    }
+
+	#endregion
+
+	#region 省工单退回
+
+	/// <summary>
+	/// 工单退回列表
+	/// </summary>
+	/// <param name="dto"></param>
+	/// <returns></returns>
+	[Permission(EPermission.SendBackOrder)]
     [HttpGet("send_back")]
     public async Task<PagedDto<OrderSendBackDto>> UrgeList([FromQuery] OrderSendBackListDto dto)
     {

+ 11 - 4
src/Hotline.Application/Orders/OrderApplication.cs

@@ -677,19 +677,26 @@ public class OrderApplication : IOrderApplication, IScopeDependency
 			.InnerJoin<SystemOrganize>((x, so) => x.ActualHandleOrgCode == so.Id)
 			.Where(x => x.CreationTime >= dto.StartTime && x.CreationTime <= dto.EndTime)
             .WhereIF(dto.Statuses.Any(), x => dto.Statuses.Contains(x.Status))  //工单状态
+            .WhereIF( dto.ExpiredType is  2, x=>x.OrderDelays.Any(x=>  x.DelayState == EDelayState.Pass))
             .Where(x =>
 				(x.Status >= EOrderStatus.Filed && x.ExpiredTime < x.FiledTime) || (x.Status < EOrderStatus.Filed && x.ExpiredTime < SqlFunc.GetDate()))
-			.WhereIF(!string.IsNullOrEmpty(dto.OrgCode) && IsCenter == false, x => x.ActualHandleOrgCode.StartsWith(dto.OrgCode))
+            .WhereIF(IsCenter == false, x => x.ActualHandleOrgCode.StartsWith(_sessionContext.RequiredOrgId))
+			.WhereIF(!string.IsNullOrEmpty(dto.OrgName)  , x => x.AcceptorOrgName == dto.OrgName)
 			.MergeTable();
 
         var queryCountersign = _workflowCountersignRepository.Queryable()
             .LeftJoin<WorkflowCountersignMember>((x, o) => x.Id == o.WorkflowCountersignId)
             .Where((x, o) => x.CreationTime >= dto.StartTime && x.CreationTime <= dto.EndTime && x.IsExpired.HasValue && x.IsExpired.Value == true)
-            .WhereIF(!string.IsNullOrEmpty(dto.OrgCode) && IsCenter == false, (x, o) => o.Key.StartsWith(dto.OrgCode))
-            .Select((x, o) => new { Id = x.WorkflowId })
+            .WhereIF(IsCenter == false, (x, o) => o.Key.StartsWith(_sessionContext.RequiredOrgId))
+			.WhereIF(!string.IsNullOrEmpty(dto.OrgName), (x, o) => o.Value == dto.OrgName)
+            .Select((x, o) => new { Id = x.WorkflowId, ActualHandleOrgCode = o.Key, ActualHandleOrgName = o.Value })
             .MergeTable();
 
-         quer = quer.InnerJoin(queryCountersign, (x, c) => x.WorkflowId == c.Id);
+        quer = quer.LeftJoin(queryCountersign, (x, c) => x.WorkflowId == c.Id).Select((x, c) => new Order
+        {
+	        DaysOverdueOrgName = SqlFunc.IIF(!string.IsNullOrEmpty(c.Id), c.ActualHandleOrgName, x.ActualHandleOrgName),
+			Id = x.Id.SelectAll()
+		}) ;
         return quer;
 	}
 

+ 2 - 2
src/Hotline.Repository.SqlSugar/Extensions/SqlSugarStartupExtensions.cs

@@ -207,8 +207,8 @@ namespace Hotline.Repository.SqlSugar.Extensions
             /***写AOP等方法***/
             db.Aop.OnLogExecuting = (sql, pars) =>
             {
-                // Log.Information("Sql: {0}", sql);
-                // Log.Information("SqlParameters: {0}", string.Join(',', pars.Select(d => d.Value)));
+                Log.Information("Sql: {0}", sql);
+                Log.Information("SqlParameters: {0}", string.Join(',', pars.Select(d => d.Value)));
             };
             db.Aop.OnError = (exp) =>//SQL报错
             {

+ 18 - 3
src/Hotline.Share/Dtos/Order/OrderDto.cs

@@ -425,6 +425,11 @@ namespace Hotline.Share.Dtos.Order
             return string.Empty;
         }
 
+        /// <summary>
+        /// 超期部门
+        /// </summary>
+        public string DaysOverdueOrgName { get; set; }
+
 		public EExpiredStatus? CalculateExpiredState()
         {
             DateTime? dateTime = DateTime.Now;
@@ -534,14 +539,24 @@ namespace Hotline.Share.Dtos.Order
         public string CenterOpinion { get; set; }
 
         /// <summary>
-        /// 退回意见
+        /// 退回原因
         /// </summary>
         public string SendBackOpinion { get; set; }
 
         /// <summary>
-        /// 退回意见
+        /// 退回原因
         /// </summary>
-        public List<OrderRemarksDto> OrderRemarks { get; set; }
+        public string SendBackRefuseOpinion { get; set; }
+
+        /// <summary>
+        /// 审批时间
+        /// </summary>
+        public DateTime? SendBackAuditTime { get; set; }
+
+		/// <summary>
+		/// 退回意见
+		/// </summary>
+		public List<OrderRemarksDto> OrderRemarks { get; set; }
 
 	}
 

+ 26 - 4
src/Hotline.Share/Dtos/Order/SendBackDto.cs

@@ -129,16 +129,38 @@ namespace Hotline.Share.Dtos.Order
 	}
 	public record SendBackListDto : PagedKeywordRequest
 	{
-		public DateTime? CreationTimeStart { get; set; }
-		public DateTime? CreationTimeEnd { get; set; }
-
 		/// <summary>
 		/// </summary>
 		public ESendBackAuditState? State { get; set; }
 
 		/// <summary>
-		/// 1 待办  2 已办
+		/// 1 待办  2 已办 3全部
 		/// </summary>
 		public int AuditState { get; set; }
+
+		/// <summary>
+		/// 0 全部  1 我的
+		/// </summary>
+		public int? DataScope { get; set; }
+
+		/// <summary>
+		/// 工单标题
+		/// </summary>
+		public string Title { get; set; }
+
+		/// <summary>
+		/// 工单编号
+		/// </summary>
+		public string No { get; set; }
+
+		/// <summary>
+		/// 受理类型
+		/// </summary>
+		public string? AcceptTypeCode { get; set; }
+
+		/// <summary>
+		/// 申请部门
+		/// </summary>
+		public string? OrgName { get; set; }
 	}
 }

+ 1 - 1
src/Hotline.Share/Requests/PagedKeywordRequest.cs

@@ -99,7 +99,7 @@ public record OrgDataListAllDetailRequest : PagedRequest
 	/// <summary>
 	/// 部门Code
 	/// </summary>
-	public string OrgCode { get; set; }
+	public string OrgName { get; set; }
 
 	/// <summary>
 	/// 工单编号

+ 1 - 1
src/Hotline/CallCenter/Calls/TrCallRecord.cs

@@ -78,7 +78,7 @@ namespace Hotline.CallCenter.Calls
         /// <summary>
         /// 线路号
         /// </summary>
-        public string Gateway { get; set; }
+        public string? Gateway { get; set; }
         /// <summary>
         /// 呼出时自定义的内容
         /// </summary>

+ 1 - 1
src/Hotline/FlowEngine/Workflows/IWorkflowDomainService.cs

@@ -36,7 +36,7 @@ namespace Hotline.FlowEngine.Workflows
         /// <summary>
         /// 查询工作流包含当前用户办理权限(是否可办理)
         /// </summary>
-        Task<(Workflow Workflow, string? CountersignId, bool CanHandle, bool CanPrevious,string? previousOpinion)> GetWorkflowHandlePermissionAsync(
+        Task<(Workflow Workflow, string? CountersignId, bool CanHandle, bool CanPrevious, WorkflowTrace? Trace)> GetWorkflowHandlePermissionAsync(
             string workflowId, string userId, string orgId, string[] roleIds, CancellationToken cancellationToken = default);
 
         /// <summary>

+ 8 - 7
src/Hotline/FlowEngine/Workflows/WorkflowDomainService.cs

@@ -234,8 +234,8 @@ namespace Hotline.FlowEngine.Workflows
         /// <summary>
         /// 查询工作流包含当前用户结束会签权限(是否可结束)
         /// </summary>
-        public async Task<(Workflow Workflow, string? CountersignId, bool CanHandle, bool CanPrevious, string?
-                previousOpinion)>
+        public async Task<(Workflow Workflow, string? CountersignId, bool CanHandle, bool CanPrevious, WorkflowTrace?
+		        Trace)>
             GetWorkflowHandlePermissionAsync(
                 string workflowId, string userId, string orgId, string[] roleIds,
                 CancellationToken cancellationToken = default)
@@ -256,20 +256,21 @@ namespace Hotline.FlowEngine.Workflows
             }
 
             var unhandlePreviousTrace = workflow.Traces.FirstOrDefault(d =>
-                d.Status is not EWorkflowStepStatus.Handled &&
-                d.TraceType is EWorkflowTraceType.Previous);
-            var previousOpinion = unhandlePreviousTrace?.Opinion ?? null;
+                d.Status is not EWorkflowStepStatus.Handled 
+                //&& d.TraceType is EWorkflowTraceType.Previous
+                );
+            //var previousOpinion = unhandlePreviousTrace?.Opinion ?? null;
 
             var unCompletedCountersign = workflow.Countersigns
                 .FirstOrDefault(d => !d.IsCompleted() && d.StarterId == userId);
             if (unCompletedCountersign is null) 
-                return (workflow, null, canHandle, canPrevious, previousOpinion);
+                return (workflow, null, canHandle, canPrevious, unhandlePreviousTrace);
 
             //var existCountersignEndStep = workflow.Steps.Exists(d =>
             //    d.IsCountersignEndStep && d.CountersignStartStepId == unCompletedCountersign.StartStepId);
             //return (workflow, existCountersignEndStep ? null : unCompletedCountersign.Id, canPrevious);
 
-            return (workflow, unCompletedCountersign.Id, canHandle, canPrevious, previousOpinion);
+            return (workflow, unCompletedCountersign.Id, canHandle, canPrevious, unhandlePreviousTrace);
         }
 
         /// <summary>

+ 8 - 2
src/Hotline/Orders/Order.cs

@@ -825,9 +825,15 @@ namespace Hotline.Orders
         /// </summary>
         [SugarColumn(ColumnDescription = "政民互动公开ID")]
         public string? OrderProvinceZmhdId { get; set; }
-    }
 
-    public partial class Order
+		/// <summary>
+		/// 超期部门
+		/// </summary>
+		[SugarColumn(IsIgnore = true)]
+		public string? DaysOverdueOrgName { get; set; }
+	}
+
+	public partial class Order
     {
         /// <summary>
         /// 受理人

+ 6 - 0
src/Hotline/Orders/OrderSendBackAudit.cs

@@ -20,6 +20,12 @@ namespace Hotline.Orders
 		[SugarColumn(ColumnDescription = "工单ID")]
 		public string OrderId { get; set; }
 
+		/// <summary>
+		/// 流程快照ID
+		/// </summary>
+		[SugarColumn(ColumnDescription = "流程快照ID")]
+		public string? TraceId { get; set; }
+
 		/// <summary>
 		/// 状态
 		/// </summary>