Forráskód Böngészése

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

田爽 1 hónapja
szülő
commit
c072479659

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

@@ -3203,6 +3203,44 @@ public class OrderController : BaseController
         return new PagedDto<SuperviseOrderDto>(total, _mapper.Map<IReadOnlyList<SuperviseOrderDto>>(items));
     }
 
+    /// <summary>
+    /// 督办查询部门经办人手机号
+    /// </summary>
+    /// <param name="orgCode"></param>
+    /// <returns></returns>
+    [HttpGet("supervise/geturgetel/{orgCode}")]
+    public async Task<Kv> GetUrgeTel(string orgCode)
+    {
+        Kv k = new Kv();
+        var acceptSmsRoleIds = _systemSettingCacheManager.GetSetting(SettingConstants.AcceptSmsRoleIds)?.SettingValue;
+        //查询部门所有账号
+        var userlist = await _userRepository.Queryable().Where(x =>
+            x.OrgId == orgCode && !string.IsNullOrEmpty(x.PhoneNo) &&
+            x.Roles.Any(d => acceptSmsRoleIds.Contains(d.Id))).ToListAsync();
+        if (userlist != null && userlist.Count > 0)
+        {
+            k.Key = userlist[0].Name;
+            k.Value = userlist[0].PhoneNo;
+        }
+        return k;
+    }
+
+    /// <summary>
+    /// 旅游列表
+    /// </summary>
+    /// <param name="dto"></param>
+    /// <returns></returns>
+    [HttpGet("supervise/Travel")]
+    public async Task<IReadOnlyList<OrderDto>> QueryTravel([FromQuery] QueryOrderDto dto)
+    {
+        var orders = await _orderApplication.QueryTravel(dto)
+            .ToPageListWithoutTotalAsync(dto, HttpContext.RequestAborted);
+        var list = _mapper.Map<IReadOnlyList<OrderDto>>(orders);
+        if (_appOptions.Value.IsLuZhou && !_sessionContext.OrgIsCenter)
+            list = list.Select(p => p.DataMask()).ToList();
+        return list;
+    }
+
     /// <summary>
     /// 申请督办
     /// </summary>
@@ -3238,27 +3276,64 @@ public class OrderController : BaseController
                 //发送短信
                 try
                 {
-                    var acceptSmsRoleIds = _systemSettingCacheManager.GetSetting(SettingConstants.AcceptSmsRoleIds)?.SettingValue;
-                    //查询部门所有账号
-                    var userlist = await _userRepository.Queryable().Where(x =>
-                        x.OrgId == model.OrgId && !string.IsNullOrEmpty(x.PhoneNo) &&
-                        x.Roles.Any(d => acceptSmsRoleIds.Contains(d.Id))).ToListAsync();
-                    //发送短信
-                    foreach (var user in userlist)
+                    if (string.IsNullOrEmpty(dto.PhoneNo))
                     {
-                        var messageDto = new Share.Dtos.Push.MessageDto
+                        #region 普通督办短信内容
+                        var acceptSmsRoleIds = _systemSettingCacheManager.GetSetting(SettingConstants.AcceptSmsRoleIds)?.SettingValue;
+                        //查询部门所有账号
+                        var userlist = await _userRepository.Queryable().Where(x =>
+                            x.OrgId == model.OrgId && !string.IsNullOrEmpty(x.PhoneNo) &&
+                            x.Roles.Any(d => acceptSmsRoleIds.Contains(d.Id))).ToListAsync();
+                        //发送短信
+                        foreach (var user in userlist)
                         {
-                            PushBusiness = EPushBusiness.OrderSupervise,
-                            ExternalId = order.Id,
-                            OrderId = order.Id,
-                            PushPlatform = EPushPlatform.Sms,
-                            Remark = order.Title,
-                            Name = user.Name,
-                            TemplateCode = "1003",
-                            Params = new List<string>() { order.No },
-                            TelNumber = user.PhoneNo,
-                        };
-                        await _mediator.Publish(new PushMessageNotify(messageDto), HttpContext.RequestAborted);
+                            var messageDto = new Share.Dtos.Push.MessageDto
+                            {
+                                PushBusiness = EPushBusiness.OrderSupervise,
+                                ExternalId = order.Id,
+                                OrderId = order.Id,
+                                PushPlatform = EPushPlatform.Sms,
+                                Remark = order.Title,
+                                Name = user.Name,
+                                TemplateCode = "1003",
+                                Params = new List<string>() { order.No },
+                                TelNumber = user.PhoneNo,
+                            };
+                            await _mediator.Publish(new PushMessageNotify(messageDto), HttpContext.RequestAborted);
+                        }
+                        #endregion
+                    }
+                    else
+                    {
+                        #region 旅游督办短信内容
+
+                        var acceptSmsRoleIds = _systemSettingCacheManager.GetSetting(SettingConstants.AcceptSmsRoleIds)?.SettingValue;
+                        //查询部门所有账号
+                        var userlist = await _userRepository.Queryable().Where(x =>
+                            x.OrgId == model.OrgId && x.PhoneNo == dto.PhoneNo &&
+                            x.Roles.Any(d => acceptSmsRoleIds.Contains(d.Id))).ToListAsync();
+
+                        var Contact = !string.IsNullOrEmpty(order.FromPhone) ? order.FromPhone : order.Contact;
+
+                        //发送短信
+                        if (userlist != null && userlist.Count > 0)
+                        {
+                            var messageDto = new Share.Dtos.Push.MessageDto
+                            {
+                                PushBusiness = EPushBusiness.OrderSupervise,
+                                ExternalId = order.Id,
+                                OrderId = order.Id,
+                                PushPlatform = EPushPlatform.Sms,
+                                Remark = order.Title,
+                                Name = userlist[0].Name,
+                                TemplateCode = "1022",
+                                Params = new List<string>() { dto.ApplyContent, order.No, Contact, order.Content },
+                                TelNumber = userlist[0].PhoneNo,
+                            };
+                            await _mediator.Publish(new PushMessageNotify(messageDto), HttpContext.RequestAborted);
+                        }
+
+                        #endregion
                     }
                 }
                 catch
@@ -5675,34 +5750,34 @@ public class OrderController : BaseController
         {
             if (order.FileJson != null)
             {
-				var ids = order.FileJson.Select(x => x.Id).ToList();
-				allFiles = await _fileRepository.GetFilesAsync(ids, cancellationToken: HttpContext.RequestAborted);
-				allFiles.ForEach(x => x.GetStepName("工单受理"));
-			}
-		}
-		foreach (var step in steps)
-		{
-			if (step.FileJson != null && step.FileJson.Any())
-			{
-				var ids = step.FileJson.Select(x => x.Id).ToList();
-				var stepFiles = await _fileRepository.GetPermissionFilesAsync(ids, HttpContext.RequestAborted);
-				stepFiles.ForEach(x => x.GetStepName(step.Name));
-				allFiles.AddRange(stepFiles);
-			}
-		}
-		return allFiles;
-	}
-
-	/// <summary>
-	/// 获取流程信息
-	/// </summary>
-	/// <param name="workflowId"></param>
-	/// <returns></returns>
-	[HttpGet("all_file/workflow/{workflowId}")]
-	public async Task<WorkflowDto> GetOrderWorkflowAsync(string workflowId)
-	{
-		var workflow = await _workflowDomainService.GetWorkflowAsync(workflowId, withSteps: true,
-			cancellationToken: HttpContext.RequestAborted);
+                var ids = order.FileJson.Select(x => x.Id).ToList();
+                allFiles = await _fileRepository.GetFilesAsync(ids, cancellationToken: HttpContext.RequestAborted);
+                allFiles.ForEach(x => x.GetStepName("工单受理"));
+            }
+        }
+        foreach (var step in steps)
+        {
+            if (step.FileJson != null && step.FileJson.Any())
+            {
+                var ids = step.FileJson.Select(x => x.Id).ToList();
+                var stepFiles = await _fileRepository.GetPermissionFilesAsync(ids, HttpContext.RequestAborted);
+                stepFiles.ForEach(x => x.GetStepName(step.Name));
+                allFiles.AddRange(stepFiles);
+            }
+        }
+        return allFiles;
+    }
+
+    /// <summary>
+    /// 获取流程信息
+    /// </summary>
+    /// <param name="workflowId"></param>
+    /// <returns></returns>
+    [HttpGet("all_file/workflow/{workflowId}")]
+    public async Task<WorkflowDto> GetOrderWorkflowAsync(string workflowId)
+    {
+        var workflow = await _workflowDomainService.GetWorkflowAsync(workflowId, withSteps: true,
+            cancellationToken: HttpContext.RequestAborted);
         var steps = _mapper.Map<List<WorkflowTraceDto>>(workflow.Steps);
         if (!_sessionContext.OrgIsCenter)
         {

+ 2 - 1
src/Hotline.Application/OrderApp/IOrderApplication.cs

@@ -115,6 +115,7 @@ namespace Hotline.Application.OrderApp
         #region 工单办理
 
         ISugarQueryable<Order> QueryOrders(QueryOrderDto dto);
+        ISugarQueryable<Order> QueryTravel(QueryOrderDto dto);
 
         /// <summary>
         /// 保存工单办理时页面填写的数据
@@ -414,7 +415,7 @@ namespace Hotline.Application.OrderApp
         /// 将工单从网格员节点办理至工单标记节点
         /// </summary>
         /// <returns></returns>
-        Task HandleFromWanggeyuanToMaskAsync(string orderId,string opinion, CancellationToken cancellation);
+        Task HandleFromWanggeyuanToMaskAsync(string orderId, string opinion, CancellationToken cancellation);
 
         /// <summary>
         /// 查询退回操作目标节点的指派对象

+ 129 - 0
src/Hotline.Application/OrderApp/OrderApplication.cs

@@ -1763,6 +1763,135 @@ public class OrderApplication : IOrderApplication, IScopeDependency
         return query;
     }
 
+    public ISugarQueryable<Order> QueryTravel(QueryOrderDto dto)
+    {
+        var query = _orderRepository.Queryable(canView: false);
+        query = query.Includes(d => d.OrderScreens).Includes(d => d.OrderTags);
+
+        query = query
+                .Where(d => d.FocusOnEvents.Contains("7"))
+                .WhereIF(!string.IsNullOrEmpty(dto.Keyword), d => d.Title.Contains(dto.Keyword!)) //标题
+                .WhereIF(!string.IsNullOrEmpty(dto.ProvinceNo), d => d.ProvinceNo.Contains(dto.ProvinceNo)) //省本地编号
+                .WhereIF(!string.IsNullOrEmpty(dto.ReceiveProvinceNo), d => d.ReceiveProvinceNo.Contains(dto.ReceiveProvinceNo)) //省编号
+                .WhereIF(dto.IsSecret.HasValue, d => d.IsSecret == dto.IsSecret.Value)
+                .WhereIF(dto.IsReTransact.HasValue && dto.IsReTransact.Value, d => d.ReTransactNum > 0)
+                .WhereIF(dto.IsReTransact.HasValue && dto.IsReTransact.Value == false, d => d.ReTransactNum == null || d.ReTransactNum == 0)
+                .WhereIF(!string.IsNullOrEmpty(dto.No), d => d.No.Contains(dto.No)) //工单编码
+                .WhereIF(!string.IsNullOrEmpty(dto.AcceptType), d => d.AcceptTypeCode == dto.AcceptType) //受理类型
+                                                                                                         //.WhereIF(dto.AcceptTypes.Any(), d => dto.AcceptTypes.Contains(d.AcceptTypeCode)) //受理类型
+                .WhereIF(!string.IsNullOrEmpty(dto.Channel), d => d.SourceChannelCode == dto.Channel)
+                .WhereIF(!string.IsNullOrEmpty(dto.Hotspot), d => d.HotspotSpliceName != null && d.HotspotSpliceName.Contains(dto.Hotspot))
+                .WhereIF(!string.IsNullOrEmpty(dto.TransferPhone), d => d.TransferPhone == dto.TransferPhone!) //转接号码
+                                                                                                               //.WhereIF(dto.OrgCodes.Any(), d => d.Workflow.Assigns.Any(s => dto.OrgCodes.Contains(s.OrgCode)))
+                                                                                                               //.WhereIF(dto.OrgCodes.Any(), d => dto.OrgCodes.Contains(d.ActualHandleOrgCode)) //接办部门
+                                                                                                               //.WhereIF(!string.IsNullOrEmpty(dto.OrgId), d => d.CurrentHandleOrgId == dto.OrgId)//接办部门
+                .WhereIF(!string.IsNullOrEmpty(dto.OrgLevelOneName), d => d.OrgLevelOneName.Contains(dto.OrgLevelOneName)) //一级部门
+                .WhereIF(!string.IsNullOrEmpty(dto.ActualHandleOrgName), d => d.ActualHandleOrgName.Contains(dto.ActualHandleOrgName)) //接办部门(综合查询模糊)
+                .WhereIF(!string.IsNullOrEmpty(dto.NameOrNo), d => d.AcceptorName == dto.NameOrNo! || d.AcceptorStaffNo == dto.NameOrNo!) //受理人/坐席
+                .WhereIF(dto.CreationTimeStart.HasValue, d => d.CreationTime >= dto.CreationTimeStart) //受理时间开始
+                .WhereIF(dto.CreationTimeEnd.HasValue, d => d.CreationTime <= dto.CreationTimeEnd) //受理时间结束
+                .WhereIF(dto.StartTimeStart.HasValue, d => d.StartTime >= dto.StartTimeStart) //流程开启时间开始
+                .WhereIF(dto.StartTimeEnd.HasValue, d => d.StartTime <= dto.StartTimeEnd) //流程开启时间结束
+                                                                                          //.WhereIF(dto.EmergencyLevels.Any(), d => dto.EmergencyLevels.Contains(d.EmergencyLevel))  //紧急程度
+                .WhereIF(!string.IsNullOrEmpty(dto.FromPhone), d => d.FromPhone.Contains(dto.FromPhone)) //来电号码
+                .WhereIF(!string.IsNullOrEmpty(dto.PhoneNo), d => d.Contact.Contains(dto.PhoneNo)) //联系电话
+                                                                                                   //.WhereIF(!string.IsNullOrEmpty(dto.PushTypeCode), d => d.PushTypeCode == dto.PushTypeCode) //推送分类
+                .WhereIF(!string.IsNullOrEmpty(dto.PushTypeCode), x => x.OrderPushTypes.Any(opt => opt.PushTypeCode == dto.PushTypeCode)) //推送分类
+                .WhereIF(dto.ExpiredTimeStart.HasValue, d => d.ExpiredTime >= dto.ExpiredTimeStart) //超期时间开始
+                .WhereIF(dto.ExpiredTimeEnd.HasValue, d => d.ExpiredTime <= dto.ExpiredTimeEnd) //超期时间结束
+                                                                                                //.WhereIF(dto.Statuses.Any(), d => dto.Statuses.Contains(d.Status))  //工单状态
+                .WhereIF(dto.Status.HasValue, d => d.Status == dto.Status) //工单状态
+                                                                           //.WhereIF(dto.Statuses.Any(d => d == EOrderStatus.SpecialToUnAccept), d => d.Status <= EOrderStatus.SpecialToUnAccept)
+                .WhereIF(!string.IsNullOrEmpty(dto.ActualHandlerName), d => d.ActualHandlerName == dto.ActualHandlerName) //接办人
+                .WhereIF(dto.IsScreen == true, d => d.OrderScreens.Any(x => x.Status != EScreenStatus.Refuse)) //有甄别
+                .WhereIF(dto.IsScreen == false, d => !d.OrderScreens.Any(x => x.Status != EScreenStatus.Refuse)) //无甄别
+                .WhereIF(!string.IsNullOrEmpty(dto.CurrentStepCode), d => d.CurrentStepCode == dto.CurrentStepCode) //当前办理节点
+                .WhereIF(dto.ActualHandleTimeStart.HasValue, d => d.FiledTime >= dto.ActualHandleTimeStart) //办结时间开始
+                .WhereIF(dto.ActualHandleTimeEnd.HasValue, d => d.FiledTime <= dto.ActualHandleTimeEnd) //办结时间结束
+                .WhereIF(dto.IsOverTime == true,
+                    d => (d.ExpiredTime < DateTime.Now && d.Status < EOrderStatus.Filed) ||
+                         (d.ExpiredTime < d.FiledTime && d.Status >= EOrderStatus.Filed)) //是 超期
+                .WhereIF(dto.IsOverTime == false,
+                    d => (d.ExpiredTime > DateTime.Now && d.Status < EOrderStatus.Filed) ||
+                         (d.ExpiredTime > d.FiledTime && d.Status >= EOrderStatus.Filed)) //否 超期
+                .WhereIF(dto.IdentityType != null, d => d.IdentityType == dto.IdentityType) //来电主体
+                .WhereIF(!string.IsNullOrEmpty(dto.FromName), d => d.FromName == dto.FromName) //来电人姓名
+                .WhereIF(!string.IsNullOrEmpty(dto.AreaCode) && dto.AreaCode.LastIndexOf("00") > 0,
+                    d => d.AreaCode.StartsWith(SqlFunc.Substring(dto.AreaCode, 0, 4)))
+                .WhereIF(!string.IsNullOrEmpty(dto.AreaCode) && dto.AreaCode.LastIndexOf("00") <= 0, d => d.AreaCode.StartsWith(dto.AreaCode))
+                .WhereIF(dto.IsProvinceOrder.HasValue && dto.IsProvinceOrder == true && dto.ProvinceSearch != true, d => d.IsProvince == true)
+                .WhereIF(dto.IsProvinceOrder.HasValue && dto.IsProvinceOrder == false && dto.ProvinceSearch != true, d => d.IsProvince == false)
+                .WhereIF(dto.IsProvinceOrder.HasValue && dto.IsProvinceOrder == true && dto.ProvinceSearch == true, d => d.Source == ESource.ProvinceStraight)
+                .WhereIF(!string.IsNullOrEmpty(dto.SensitiveWord), d => SqlFunc.JsonArrayAny(d.Sensitive, dto.SensitiveWord))
+                .WhereIF(dto.IsSensitiveWord.HasValue && dto.IsSensitiveWord == true,
+                    d => d.Sensitive != null && SqlFunc.JsonArrayLength(d.Sensitive) > 0)
+                .WhereIF(dto.IsUrgent.HasValue, d => d.IsUrgent == dto.IsUrgent.Value)
+                .WhereIF(!string.IsNullOrEmpty(dto.ProvinceChannel) && dto.ProvinceChannel == "1", d => d.Source == ESource.ProvinceStraight &&
+                    d.SourceChannelCode == "SZMHD" && d.IsProvince == false) //政民互动直派
+                .WhereIF(!string.IsNullOrEmpty(dto.ProvinceChannel) && dto.ProvinceChannel == "2", d => d.Source == ESource.ProvinceStraight &&
+                    d.SourceChannelCode == "SZMHD" && d.IsProvince == true) //政民互动
+                .WhereIF(!string.IsNullOrEmpty(dto.ProvinceChannel) && dto.ProvinceChannel == "3", d => d.Source == ESource.ProvinceStraight &&
+                    d.SourceChannelCode == "S12345" && d.IsProvince == true) //省12345
+                                                                             //.WhereIF(!string.IsNullOrEmpty(dto.ContentRetrieval),d => d.Title.Contains(dto.ContentRetrieval) || d.Content.Contains(dto.ContentRetrieval) || d.FileOpinion.Contains(dto.ContentRetrieval) || d.ActualOpinion.Contains(dto.ContentRetrieval))
+                .WhereIF(!string.IsNullOrEmpty(dto.ContentRetrieval), d => d.Content.Contains(dto.ContentRetrieval!))
+                .WhereIF(!string.IsNullOrEmpty(dto.FileOption), d => d.FileOpinion.Contains(dto.FileOption!))
+                .WhereIF(dto.IsSgin.HasValue && dto.IsSgin == true, d => d.CurrentStepAcceptTime != null)
+                .WhereIF(dto.IsSgin.HasValue && dto.IsSgin == false, d => d.CurrentStepAcceptTime == null)
+                .WhereIF(dto.FiledType is FiledType.CenterFiled, d => d.FileOrgIsCenter == true) //d => d.ProcessType == EProcessType.Zhiban
+                .WhereIF(dto.FiledType is FiledType.OrgFiled, d => d.FileOrgIsCenter == false) //d => d.ProcessType == EProcessType.Jiaoban
+                                                                                               //.WhereIF(!string.IsNullOrEmpty(dto.OrderTagCode), d => d.OrderTagCode == dto.OrderTagCode)// 工单标签
+                .WhereIF(!string.IsNullOrEmpty(dto.OrderTagCode), d => d.OrderTags.Any(ot => ot.DicDataValue == dto.OrderTagCode)) //工单标签
+                .OrderByIF(string.IsNullOrEmpty(dto.SortField), d => d.CreationTime, OrderByType.Desc) //默认排序时间为创建时间
+                .OrderByIF(dto is { SortField: "no", SortRule: 0 }, d => d.No, OrderByType.Asc) //工单编号升序
+                .OrderByIF(dto is { SortField: "no", SortRule: 1 }, d => d.No, OrderByType.Desc) //工单编号降序
+                .OrderByIF(dto is { SortField: "isProvinceText", SortRule: 0 }, d => d.IsProvince, OrderByType.Asc) //是否省工单升序
+                .OrderByIF(dto is { SortField: "isProvinceText", SortRule: 1 }, d => d.IsProvince, OrderByType.Desc) //是否省工单降序
+                .OrderByIF(dto is { SortField: "reTransactNum", SortRule: 0 }, d => d.ReTransactNum, OrderByType.Asc) //重办次数升序
+                .OrderByIF(dto is { SortField: "reTransactNum", SortRule: 1 }, d => d.ReTransactNum, OrderByType.Desc) //重办次数降序
+                .OrderByIF(dto is { SortField: "isUrgentText", SortRule: 0 }, d => d.IsUrgent, OrderByType.Asc) //是否紧急升序
+                .OrderByIF(dto is { SortField: "isUrgentText", SortRule: 1 }, d => d.IsUrgent, OrderByType.Desc) //是否紧急降序
+                .OrderByIF(dto is { SortField: "isSecret", SortRule: 0 }, d => d.IsSecret, OrderByType.Asc) //是否紧急升序
+                .OrderByIF(dto is { SortField: "isSecret", SortRule: 1 }, d => d.IsSecret, OrderByType.Desc) //是否紧急降序
+                .OrderByIF(dto is { SortField: "currentStepName", SortRule: 0 }, d => d.CurrentStepName, OrderByType.Asc) //当前节点升序
+                .OrderByIF(dto is { SortField: "currentStepName", SortRule: 1 }, d => d.CurrentStepName, OrderByType.Desc) //当前节点降序
+                .OrderByIF(dto is { SortField: "actualStepAcceptText", SortRule: 0 }, d => d.ActualHandleStepAcceptTime.HasValue,
+                    OrderByType.Asc) //受理情况升序
+                .OrderByIF(dto is { SortField: "actualStepAcceptText", SortRule: 1 }, d => d.ActualHandleStepAcceptTime.HasValue,
+                    OrderByType.Desc) //受理情况降序
+                .OrderByIF(dto is { SortField: "statusText", SortRule: 0 }, d => d.Status, OrderByType.Asc) //工单状态升序
+                .OrderByIF(dto is { SortField: "statusText", SortRule: 1 }, d => d.Status, OrderByType.Desc) //工单状态降序
+                .OrderByIF(dto is { SortField: "creationTime", SortRule: 0 }, d => d.StartTime, OrderByType.Asc) //受理时间升序
+                .OrderByIF(dto is { SortField: "creationTime", SortRule: 1 }, d => d.StartTime, OrderByType.Desc) //受理时间降序
+                .OrderByIF(dto is { SortField: "expiredTime", SortRule: 0 }, d => d.ExpiredTime, OrderByType.Asc) //超期时间升序
+                .OrderByIF(dto is { SortField: "expiredTime", SortRule: 1 }, d => d.ExpiredTime, OrderByType.Desc) //超期时间降序
+                .OrderByIF(dto is { SortField: "filedTime", SortRule: 0 }, d => d.FiledTime, OrderByType.Asc) //办结时间升序
+                .OrderByIF(dto is { SortField: "filedTime", SortRule: 1 }, d => d.FiledTime, OrderByType.Desc) //办结时间降序
+                .OrderByIF(dto is { SortField: "orgLevelOneName", SortRule: 0 }, d => d.OrgLevelOneName, OrderByType.Asc) //一级部门升序
+                .OrderByIF(dto is { SortField: "orgLevelOneName", SortRule: 1 }, d => d.OrgLevelOneName, OrderByType.Desc) //一级部门降序
+                .OrderByIF(dto is { SortField: "orgLevelTwoName", SortRule: 0 }, d => d.OrgLevelTwoName, OrderByType.Asc) //二级部门升序
+                .OrderByIF(dto is { SortField: "orgLevelTwoName", SortRule: 1 }, d => d.OrgLevelTwoName, OrderByType.Desc) //二级部门降序
+                .OrderByIF(dto is { SortField: "actualHandleOrgName", SortRule: 0 }, d => d.ActualHandleOrgName, OrderByType.Asc) //接办部门升序
+                .OrderByIF(dto is { SortField: "actualHandleOrgName", SortRule: 1 }, d => d.ActualHandleOrgName, OrderByType.Desc) //接办部门降序
+                .OrderByIF(dto is { SortField: "acceptType", SortRule: 0 }, d => d.AcceptTypeCode, OrderByType.Asc) //受理类型升序
+                .OrderByIF(dto is { SortField: "acceptType", SortRule: 1 }, d => d.AcceptTypeCode, OrderByType.Desc) //受理类型降序
+                .OrderByIF(dto is { SortField: "counterSignTypeText", SortRule: 0 }, d => d.CounterSignType, OrderByType.Asc) //是否会签升序
+                .OrderByIF(dto is { SortField: "counterSignTypeText", SortRule: 1 }, d => d.CounterSignType, OrderByType.Desc) //是否会签降序
+                .OrderByIF(dto is { SortField: "hotspotSpliceName", SortRule: 0 }, d => d.HotspotSpliceName, OrderByType.Asc) //热点分类全称升序
+                .OrderByIF(dto is { SortField: "hotspotSpliceName", SortRule: 1 }, d => d.HotspotSpliceName, OrderByType.Desc) //热点分类全称降序
+                .OrderByIF(dto is { SortField: "hotspotName", SortRule: 0 }, d => d.HotspotName, OrderByType.Asc) //热点分类升序
+                .OrderByIF(dto is { SortField: "hotspotName", SortRule: 1 }, d => d.HotspotName, OrderByType.Desc) //热点分类降序
+                .OrderByIF(dto is { SortField: "acceptorName", SortRule: 0 }, d => d.AcceptorName, OrderByType.Asc) //受理人升序
+                .OrderByIF(dto is { SortField: "acceptorName", SortRule: 1 }, d => d.AcceptorName, OrderByType.Desc) //受理人降序
+                .OrderByIF(dto is { SortField: "currentStepAcceptTime", SortRule: 0 }, d => d.CurrentStepAcceptTime, OrderByType.Asc) //接办时间升序
+                .OrderByIF(dto is { SortField: "currentStepAcceptTime", SortRule: 1 }, d => d.CurrentStepAcceptTime, OrderByType.Desc) //接办时间降序
+            ;
+
+        query = query
+            .Includes(x => x.OrderSupervises.OrderByDescending(d => d.CreationTime).Take(2).ToList());
+
+        return query;
+    }
+
     /// <summary>
     /// 未签收统计
     /// </summary>

+ 32 - 17
src/Hotline.Share/Dtos/Order/OrderDto.cs

@@ -622,20 +622,20 @@ namespace Hotline.Share.Dtos.Order
         /// </summary>
 		public string ThreeHotspotName => !string.IsNullOrEmpty(HotspotSpliceName) && HotspotSpliceName.Split("-").Length >= 3 ? HotspotSpliceName.Split("-")[2] : string.Empty;
 
-		/// <summary>
-		/// 四级热点
-		/// </summary>
-		public string FourHotspotName => !string.IsNullOrEmpty(HotspotSpliceName) && HotspotSpliceName.Split("-").Length >=4 ? HotspotSpliceName.Split("-")[3] : string.Empty;
+        /// <summary>
+        /// 四级热点
+        /// </summary>
+        public string FourHotspotName => !string.IsNullOrEmpty(HotspotSpliceName) && HotspotSpliceName.Split("-").Length >= 4 ? HotspotSpliceName.Split("-")[3] : string.Empty;
 
-		/// <summary>
-		/// 五级热点
-		/// </summary>
-		public string FiveHotspotName => !string.IsNullOrEmpty(HotspotSpliceName) && HotspotSpliceName.Split("-").Length >= 5 ? HotspotSpliceName.Split("-")[4] : string.Empty;
+        /// <summary>
+        /// 五级热点
+        /// </summary>
+        public string FiveHotspotName => !string.IsNullOrEmpty(HotspotSpliceName) && HotspotSpliceName.Split("-").Length >= 5 ? HotspotSpliceName.Split("-")[4] : string.Empty;
 
-		/// <summary>
-		/// 特提次数
-		/// </summary>
-		public int SpecialNum { get; set; }
+        /// <summary>
+        /// 特提次数
+        /// </summary>
+        public int SpecialNum { get; set; }
 
         private string CalculateExpiredText()
         {
@@ -1071,6 +1071,21 @@ namespace Hotline.Share.Dtos.Order
 
             return overDays;
         }
+
+        /// <summary>
+        /// 工单督办
+        /// </summary>
+        public List<OrderSuperviseDto> OrderSupervises { get; set; }
+
+        /// <summary>
+        /// 督办情况1
+        /// </summary>
+        public string? SuperviseInfo1 => OrderSupervises != null && OrderSupervises.Count > 0 ? OrderSupervises[0].CreationTime.ToString("yyyy-MM-dd HH:mm:ss") + "已通知" + OrderSupervises[0].OrgName : "";
+        
+        /// <summary>
+        /// 督办情况2
+        /// </summary>
+        public string? SuperviseInfo2 => OrderSupervises != null && OrderSupervises.Count > 1 ? OrderSupervises[1].CreationTime.ToString("yyyy-MM-dd HH:mm:ss") + "已通知" + OrderSupervises[1].OrgName : "";
     }
 
 
@@ -1838,9 +1853,9 @@ namespace Hotline.Share.Dtos.Order
     }
 
     public class OrderStepUploadFilesDto
-	{
-		public string OrderId { get; set; }
-		public string StepId { get; set; }
-		public List<FileDto> Files { get; set; } = new();
-	}
+    {
+        public string OrderId { get; set; }
+        public string StepId { get; set; }
+        public List<FileDto> Files { get; set; } = new();
+    }
 }

+ 172 - 165
src/Hotline.Share/Dtos/Order/OrderSuperviseDto.cs

@@ -8,170 +8,177 @@ using System.Threading.Tasks;
 
 namespace Hotline.Share.Dtos.Order
 {
-	public class OrderSuperviseDto: SuperviseOrderDto
-	{
-		/// <summary>
-		/// 附件列表
-		/// </summary>
-		public List<FileDto> Files { get; set; } = new();
-
-		/// <summary>
-		/// 附件列表
-		/// </summary>
-		public List<FileDto> ReplyFiles { get; set; } = new();
-	}
-
-	public class ApplyOrderSuperviseDto 
-	{
-		/// <summary>
-		/// 工单ID
-		/// </summary>
-		public string OrderId { get; set; }
-
-		public List<ApplyOrderSuperviseOrgDto> SuperviseOrgDtos { get; set; }
-
-		/// <summary>
-		/// 督办回复时限
-		/// </summary>
-		public DateTime ReplyLimitTime { get; set; }
-
-		/// <summary>
-		/// 督办申请内容
-		/// </summary>
-		public string ApplyContent { get; set; }
-
-		/// <summary>
-		/// 是否接受短信,勾选校验手机号
-		/// </summary>
-		public bool AcceptSms { get; set; }
-
-		/// <summary>
-		/// 督办省编号
-		/// </summary>
-		public string? SUPERVISE_SERIAL { get; set; }
-
-		/// <summary>
-		/// 附件列表
-		/// </summary>
-		public List<FileDto> Files { get; set; } = new();
-	}
-	public class ReplyOrderSuperviseDto 
-	{
-
-		public string Id { get; set; }
-
-		/// <summary>
-		/// 督办回复内容
-		/// </summary>
-		public string ReplyContent { get; set; }
-
-
-		/// <summary>
-		/// 回复人
-		/// </summary>
-		public string? ReplyId { get; set; }
-
-		/// <summary>
-		/// 附件列表
-		/// </summary>
-		public List<FileDto> Files { get; set; } = new();
-	}
-
-	public class SignOrderSuperviseDto 
-	{
-		public string Id { get; set; }
-	}
-
-	public class ApplyOrderSuperviseOrgDto {
-		/// <summary>
-		/// 被督办部门ID
-		/// </summary>
-		public string OrgId { get; set; }
-
-		/// <summary>
-		/// 被督办部门名称
-		/// </summary>
-		public string OrgName { get; set; }
-
-	}
-
-
-	public class ProvinceOrderSuperviseDto
-	{
-		/// <summary>
-		/// 督办编号
-		/// </summary>
-		public string SuperviseSerial { get; set; }
-
-		/// <summary>
-		/// 省工单编号
-		/// </summary>
-		public string CaseSerial { get; set; }
-
-		/// <summary>
-		/// 督办标题
-		/// </summary>
-		public string SuperviseTitle { get; set; }
-
-		/// <summary>
-		/// 督办内容
-		/// </summary>
-		public string SuperviseContent { get; set; }
-
-		/// <summary>
-		/// 督办发起人
-		/// </summary>
-		public string SupervisePerson { get; set; }
-
-		/// <summary>
-		/// 督办发起时间
-		/// </summary>
-		public DateTime SuperviseTime { get; set; }
-
-		/// <summary>
-		/// 督办发起单位
-		/// </summary>
-		public string SuperviseSendDept { get; set; }
-
-		/// <summary>
-		/// 被督办单位
-		/// </summary>
-		public string SuperviseRsvDept { get; set; }
-
-		/// <summary>
-		/// 督办类型
-		/// </summary>
-		public string SuperviseType { get; set; }
-
-		/// <summary>
-		/// 督办反馈截止时间
-		/// </summary>
-		public DateTime SuperviseReturnDate { get; set; }
-
-		/// <summary>
-		/// 行政区划代码
-		/// </summary>
-		public string AreaCode { get; set; }
-
-		/// <summary>
-		/// 附件列表
-		/// </summary>
-		public List<FileDto> Files { get; set; } = new();
-	}
-	public class PublishSuperviseDto
-	{
-		// <summary>
-		/// 工单对象
-		/// </summary>
-		public OrderDto Order { get; set; }
-
-
-		public SuperviseOrderDto Supervise { get; set; }
-
-		/// <summary>
-		/// 附件
-		/// </summary>
-		public string ClientGuid { get; set; }
-	}
+    public class OrderSuperviseDto : SuperviseOrderDto
+    {
+        /// <summary>
+        /// 附件列表
+        /// </summary>
+        public List<FileDto> Files { get; set; } = new();
+
+        /// <summary>
+        /// 附件列表
+        /// </summary>
+        public List<FileDto> ReplyFiles { get; set; } = new();
+    }
+
+    public class ApplyOrderSuperviseDto
+    {
+        /// <summary>
+        /// 工单ID
+        /// </summary>
+        public string OrderId { get; set; }
+
+        public List<ApplyOrderSuperviseOrgDto> SuperviseOrgDtos { get; set; }
+
+        /// <summary>
+        /// 督办回复时限
+        /// </summary>
+        public DateTime ReplyLimitTime { get; set; }
+
+        /// <summary>
+        /// 督办申请内容
+        /// </summary>
+        public string ApplyContent { get; set; }
+
+        /// <summary>
+        /// 是否接受短信,勾选校验手机号
+        /// </summary>
+        public bool AcceptSms { get; set; }
+
+        /// <summary>
+        /// 督办省编号
+        /// </summary>
+        public string? SUPERVISE_SERIAL { get; set; }
+
+        /// <summary>
+        /// 附件列表
+        /// </summary>
+        public List<FileDto> Files { get; set; } = new();
+
+        /// <summary>
+        /// 旅游督办手机号
+        /// </summary>
+        public string? PhoneNo { get; set; }
+
+    }
+    public class ReplyOrderSuperviseDto
+    {
+
+        public string Id { get; set; }
+
+        /// <summary>
+        /// 督办回复内容
+        /// </summary>
+        public string ReplyContent { get; set; }
+
+
+        /// <summary>
+        /// 回复人
+        /// </summary>
+        public string? ReplyId { get; set; }
+
+        /// <summary>
+        /// 附件列表
+        /// </summary>
+        public List<FileDto> Files { get; set; } = new();
+    }
+
+    public class SignOrderSuperviseDto
+    {
+        public string Id { get; set; }
+    }
+
+    public class ApplyOrderSuperviseOrgDto
+    {
+        /// <summary>
+        /// 被督办部门ID
+        /// </summary>
+        public string OrgId { get; set; }
+
+        /// <summary>
+        /// 被督办部门名称
+        /// </summary>
+        public string OrgName { get; set; }
+
+    }
+
+
+    public class ProvinceOrderSuperviseDto
+    {
+        /// <summary>
+        /// 督办编号
+        /// </summary>
+        public string SuperviseSerial { get; set; }
+
+        /// <summary>
+        /// 省工单编号
+        /// </summary>
+        public string CaseSerial { get; set; }
+
+        /// <summary>
+        /// 督办标题
+        /// </summary>
+        public string SuperviseTitle { get; set; }
+
+        /// <summary>
+        /// 督办内容
+        /// </summary>
+        public string SuperviseContent { get; set; }
+
+        /// <summary>
+        /// 督办发起人
+        /// </summary>
+        public string SupervisePerson { get; set; }
+
+        /// <summary>
+        /// 督办发起时间
+        /// </summary>
+        public DateTime SuperviseTime { get; set; }
+
+        /// <summary>
+        /// 督办发起单位
+        /// </summary>
+        public string SuperviseSendDept { get; set; }
+
+        /// <summary>
+        /// 被督办单位
+        /// </summary>
+        public string SuperviseRsvDept { get; set; }
+
+        /// <summary>
+        /// 督办类型
+        /// </summary>
+        public string SuperviseType { get; set; }
+
+        /// <summary>
+        /// 督办反馈截止时间
+        /// </summary>
+        public DateTime SuperviseReturnDate { get; set; }
+
+        /// <summary>
+        /// 行政区划代码
+        /// </summary>
+        public string AreaCode { get; set; }
+
+        /// <summary>
+        /// 附件列表
+        /// </summary>
+        public List<FileDto> Files { get; set; } = new();
+    }
+    public class PublishSuperviseDto
+    {
+        // <summary>
+        /// 工单对象
+        /// </summary>
+        public OrderDto Order { get; set; }
+
+
+        public SuperviseOrderDto Supervise { get; set; }
+
+        /// <summary>
+        /// 附件
+        /// </summary>
+        public string ClientGuid { get; set; }
+    }
 
 }

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

@@ -910,17 +910,17 @@ namespace Hotline.Orders
         [SugarColumn(ColumnDataType = "json", IsJson = true, IsNullable = true, ColumnDescription = "附件JSON")]
         public List<FileJson>? FileJson { get; set; }
 
-		//[SugarColumn(ColumnDataType = "json", IsJson = true, IsNullable = true, ColumnDescription = "附件列表附件JSON")]
-		//public List<FileJson>? ListFileJson { get; set; }
+        //[SugarColumn(ColumnDataType = "json", IsJson = true, IsNullable = true, ColumnDescription = "附件列表附件JSON")]
+        //public List<FileJson>? ListFileJson { get; set; }
 
-		#endregion
+        #endregion
 
-		#region 市州工单互转
+        #region 市州工单互转
 
-		/// <summary>
-		/// 是否转发
-		/// </summary>
-		[SugarColumn(ColumnDescription = "是否转发")]
+        /// <summary>
+        /// 是否转发
+        /// </summary>
+        [SugarColumn(ColumnDescription = "是否转发")]
         public bool? Transpond { get; set; }
 
         /// <summary>
@@ -1224,6 +1224,12 @@ namespace Hotline.Orders
         [Navigate(NavigateType.OneToOne, nameof(Id), nameof(OrderSnapshot.Id))]
         public OrderSnapshot OrderSnapshot { get; set; }
 
+        /// <summary>
+        /// 工单督办
+        /// </summary>
+        [Navigate(NavigateType.OneToMany, nameof(OrderSupervise.OrderId))]
+        public List<OrderSupervise> OrderSupervises { get; set; }
+
         #region Method
 
         public void Cancel()