Преглед изворни кода

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

Dun.Jason пре 1 месец
родитељ
комит
70e3605819

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

@@ -6390,7 +6390,6 @@ public class OrderController : BaseController
                 HandlerType = dto.HandlerType,
                 BusinessType = dto.BusinessType,
             };
-            DateTime endTime = order.ExpiredTime!.Value;
             //todo
             //宜宾需求:1. 坐席申请特提:指派给申请人办理 2. 派单员申请特提:所有派单员都能办 3.其他特提场景:按节点原配置办理
             order.ProcessType = dto.FlowDirection is EFlowDirection.OrgToCenter or EFlowDirection.CenterToCenter or EFlowDirection.FiledToCenter
@@ -6400,7 +6399,9 @@ public class OrderController : BaseController
             if (dto.AlterTime)
             {
                 DateTime startTime = DateTime.Now;
-                if (order.CenterToOrgTime.HasValue && order.FileOrgIsCenter.HasValue &&  !order.FileOrgIsCenter.Value)
+                DateTime beginTime = DateTime.Now;
+
+				if (order.CenterToOrgTime.HasValue && order.FileOrgIsCenter.HasValue &&  !order.FileOrgIsCenter.Value)
                 {
                     startTime = order.CenterToOrgTime.Value;
                 }
@@ -6412,13 +6413,14 @@ public class OrderController : BaseController
                 if (_appOptions.Value.IsLuZhou)
                 {
                     startTime = order.ExpiredTime.Value;
+                    beginTime = startTime;
 				}
                 
-                var expiredTime = await _expireTime.CalcEndTime(DateTime.Now, startTime, order.AcceptTypeCode);
+                var expiredTime = await _expireTime.CalcEndTime(beginTime, startTime, order.AcceptTypeCode);
                 if (dto.TimeLimit.HasValue && dto.TimeLimit.Value > 0)
                 {
                     var config = new TimeConfig(dto.TimeLimit.Value, ETimeType.WorkDay);
-                    expiredTime = await _expireTime.CalcEndTime(DateTime.Now, startTime, config, order.AcceptTypeCode);
+                    expiredTime = await _expireTime.CalcEndTime(beginTime, startTime, config, order.AcceptTypeCode);
                 }
 
                 //if (expiredTime.EndTime < order.ExpiredTime.Value)
@@ -6449,15 +6451,15 @@ public class OrderController : BaseController
                 }
             }
 
-            // if (dto.BusinessType == EBusinessType.Send && recall.NextHandlers.Any())
-            // {
-            //     var flowStepHandler = recall.NextHandlers.FirstOrDefault();
-            //     await _orderRepository.Updateable().SetColumns(o => new Orders.Order()
-            //             { CenterToOrgHandlerId = flowStepHandler.UserId, CenterToOrgHandlerName = flowStepHandler.Username })
-            //         .Where(o => o.Id == order.Id).ExecuteCommandAsync(HttpContext.RequestAborted);
-            // }
-
-            var (workflow, targetStepDefine, currentStep, targetStep, newStep, isOrgToCenter) =
+			// if (dto.BusinessType == EBusinessType.Send && recall.NextHandlers.Any())
+			// {
+			//     var flowStepHandler = recall.NextHandlers.FirstOrDefault();
+			//     await _orderRepository.Updateable().SetColumns(o => new Orders.Order()
+			//             { CenterToOrgHandlerId = flowStepHandler.UserId, CenterToOrgHandlerName = flowStepHandler.Username })
+			//         .Where(o => o.Id == order.Id).ExecuteCommandAsync(HttpContext.RequestAborted);
+			// }
+			DateTime endTime = order.ExpiredTime!.Value;
+			var (workflow, targetStepDefine, currentStep, targetStep, newStep, isOrgToCenter) =
                 await _workflowDomainService.RecallAsync(
                     recall, recall.NextHandlers.FirstOrDefault(), EWorkflowTraceType.Redo,
                     endTime, order.Status >= EOrderStatus.Filed, EHandleMode.Redo,

+ 144 - 10
src/Hotline.Api/Controllers/PbxController.cs

@@ -34,6 +34,17 @@ using Tr.Sdk;
 using Hotline.Configurations;
 using Hotline.FlowEngine.Workflows;
 using Hotline.Share.Dtos.FlowEngine.Workflow;
+using Senparc.Weixin.WxOpen.AdvancedAPIs.WxApp.WxAppJson;
+using Hotline.Application.CallCenter;
+using Hotline.Repository.SqlSugar.Extensions;
+using DocumentFormat.OpenXml.Spreadsheet;
+using Hotline.Share.Dtos.IndustryClassification;
+using Hotline.Share.Dtos.Order;
+using Hotline.Tools;
+using Hotline.Caching.Services;
+using Hotline.Repository.SqlSugar.System;
+using Hotline.Settings.TimeLimits;
+using Hotline.Share.Enums.Order;
 
 namespace Hotline.Api.Controllers
 {
@@ -68,6 +79,8 @@ namespace Hotline.Api.Controllers
         private readonly IWexTelGroupRepository _wexTelGroupRepository;
         private readonly IOptionsSnapshot<CallCenterConfiguration> _options;
         private readonly ISystemDicDataCacheManager _systemDicDataCacheManager;
+        private readonly IRepository<TelRestApply> _telRestApplyRepository;
+        private readonly IPbxApplication _pbxApplication;
 
 
         public PbxController(
@@ -97,7 +110,9 @@ namespace Hotline.Api.Controllers
             IWexTelGroupRepository wexTelGroupRepository,
             IOptionsSnapshot<AppConfiguration> appOptions,
             IOptionsSnapshot<CallCenterConfiguration> options,
-            ISystemDicDataCacheManager systemDicDataCacheManager)
+            ISystemDicDataCacheManager systemDicDataCacheManager,
+            IRepository<TelRestApply> telRestApplyRepository,
+            IPbxApplication pbxApplication)
         {
             _telRepository = telRepository;
             _telRestRepository = telRestRepository;
@@ -128,15 +143,12 @@ namespace Hotline.Api.Controllers
             {
                 _newRockDeviceManager = serviceProvider.GetRequiredService<INewRockDeviceManager>();
             }
+            _telRestApplyRepository = telRestApplyRepository;
+            _pbxApplication = pbxApplication;
         }
 
-
-
-
         #region 话机
 
-
-
         /// <summary>
         /// 根据设备自动同步分机数据到数据库
         /// </summary>
@@ -305,8 +317,8 @@ namespace Hotline.Api.Controllers
                 startWorkflowDto.DefinitionModuleCode = WorkflowModuleConsts.TelRestApply;
                 startWorkflowDto.Opinion = dto.Reason;
                 startWorkflowDto.Title = "分机休息申请流程";
-				// await _workflowApplication.StartWorkflowAsync(startWorkflowDto, telRest.Id, cancellationToken: HttpContext.RequestAborted);
-				//await _workflowDomainService.StartAsync(startWorkflowDto, telRest.Id, cancellationToken: HttpContext.RequestAborted);
+                // await _workflowApplication.StartWorkflowAsync(startWorkflowDto, telRest.Id, cancellationToken: HttpContext.RequestAborted);
+                //await _workflowDomainService.StartAsync(startWorkflowDto, telRest.Id, cancellationToken: HttpContext.RequestAborted);
                 await _workflowDomainService.StartToFirstStepAsync(startWorkflowDto, telRest.Id, cancellationToken: HttpContext.RequestAborted);
             }
         }
@@ -343,8 +355,8 @@ namespace Hotline.Api.Controllers
             startWorkflowDto.DefinitionModuleCode = WorkflowModuleConsts.TelRestApply;
             startWorkflowDto.Opinion = dto.Reason;
             startWorkflowDto.Title = "分机休息申请流程";
-			// await _workflowApplication.StartWorkflowAsync(startWorkflowDto, telRest.Id, cancellationToken: HttpContext.RequestAborted);
-			//await _workflowDomainService.StartAsync(startWorkflowDto, telRest.Id, cancellationToken: HttpContext.RequestAborted);
+            // await _workflowApplication.StartWorkflowAsync(startWorkflowDto, telRest.Id, cancellationToken: HttpContext.RequestAborted);
+            //await _workflowDomainService.StartAsync(startWorkflowDto, telRest.Id, cancellationToken: HttpContext.RequestAborted);
             await _workflowDomainService.StartToFirstStepAsync(startWorkflowDto, telRest.Id, cancellationToken: HttpContext.RequestAborted);
         }
 
@@ -1090,6 +1102,128 @@ namespace Hotline.Api.Controllers
             return telGroup;
         }
 
+        #endregion
+
+        #region 小休审批
+
+        /// <summary>
+        /// 列表页面基础数据
+        /// </summary>
+        /// <returns></returns>
+        [HttpGet("base-data")]
+        public async Task<object> BaseData()
+        {
+            var rsp = new
+            {
+                RestReason = _systemDicDataCacheManager.GetSysDicDataCache(SysDicTypeConsts.RestReason),
+                AuditStatus = EnumExts.GetDescriptions<ETelRestAuditStatus>()
+            };
+            return rsp;
+        }
+
+        /// <summary>
+        /// 小休申请
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        /// <exception cref="UserFriendlyException"></exception>
+        [HttpPost("addtelrest")]
+        public async Task AddTelRest([FromBody] TelRestApplyAddDto dto)
+        {
+            if (string.IsNullOrEmpty(dto.TelNo))
+                throw new UserFriendlyException("分机号不能为空!");
+            if (dto.Reason == null)
+                throw new UserFriendlyException("小休原因不能为空!");
+
+            var data = await _telRestApplyRepository.GetAsync(p => p.TelNo == dto.TelNo && p.CreatorId == _sessionContext.RequiredUserId &&
+            p.AuditStatus == ETelRestAuditStatus.NoAudit, HttpContext.RequestAborted);
+            if (data != null)
+                throw new UserFriendlyException("小休申请审批中,暂时无法操作!");
+
+            TelRestApply telRestApply = new()
+            {
+                TelNo = dto.TelNo,
+                Reason = dto.Reason.Value,
+                ReasonId = dto.Reason.Key,
+                StaffNo = _sessionContext.StaffNo,
+                AuditStatus = ETelRestAuditStatus.NoAudit
+            };
+            await _telRestApplyRepository.AddAsync(telRestApply, HttpContext.RequestAborted);
+        }
+
+        /// <summary>
+        /// 小休审批
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        /// <exception cref="UserFriendlyException"></exception>
+        [HttpPost("telrest_apply_audit")]
+        public async Task TelRestApplyAudit([FromBody] TelRestApplyAuditDto dto)
+        {
+            if (dto.IsPass == false && string.IsNullOrEmpty(dto.AuditOpinion))
+                throw new UserFriendlyException("审批原因不能为空!");
+            var data = await _telRestApplyRepository.GetAsync(dto.Id, HttpContext.RequestAborted);
+            if (data == null)
+                throw new UserFriendlyException("审批数据查询失败!");
+            data.AuditUserName = _sessionContext.UserName;
+            data.AuditUserId = _sessionContext.RequiredUserId;
+            data.AuditOrgId = _sessionContext.RequiredOrgId;
+            data.AuditOrgName = _sessionContext.OrgName;
+            data.AuditTime = DateTime.Now;
+            data.AuditOpinion = dto.AuditOpinion;
+            data.AuditStatus = dto.IsPass == true ? ETelRestAuditStatus.Pass : ETelRestAuditStatus.NoPass;
+            await _telRestApplyRepository.UpdateAsync(data, HttpContext.RequestAborted);
+            if (dto.IsPass)
+            {
+                //审批通过发送通知给前端
+                await _telDomainService.TelRestApplyPassAsync(data.CreatorId, HttpContext.RequestAborted);
+            }
+        }
+
+        /// <summary>
+        /// 小修申请记录
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [HttpGet("get_restapply_list")]
+        public async Task<PagedDto<TelRestApplyListDto>> GetRestApplyList([FromQuery] TelRestApplyRequestDto dto)
+        {
+            var (total, items) = await _pbxApplication.GetRestApplyList(dto).ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
+
+            return new PagedDto<TelRestApplyListDto>(total, items);
+        }
+
+        /// <summary>
+        /// 小修申请记录--导出
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [HttpPost("get_restapply_list_export")]
+        public async Task<FileStreamResult> GetRestApplyListExport([FromBody] ExportExcelDto<TelRestApplyRequestDto> dto)
+        {
+            var query = _pbxApplication.GetRestApplyList(dto.QueryDto);
+
+            List<TelRestApplyListDto> data;
+            if (dto.IsExportAll)
+            {
+                data = await query.ToListAsync(HttpContext.RequestAborted);
+            }
+            else
+            {
+                var (_, items) = await query.ToPagedListAsync(dto.QueryDto, HttpContext.RequestAborted);
+                data = items;
+            }
+            dynamic? dynamicClass = DynamicClassHelper.CreateDynamicClass(dto.ColumnInfos);
+            var dtos = data
+                .Select(stu => _mapper.Map(stu, typeof(TelRestApplyListDto), dynamicClass))
+                .Cast<object>()
+                .ToList();
+
+            var stream = ExcelHelper.CreateStream(dtos);
+            return ExcelStreamResult(stream, "小修申请记录数据");
+        }
+
+
         #endregion
     }
 }

+ 15 - 0
src/Hotline.Application/CallCenter/IPbxApplication.cs

@@ -0,0 +1,15 @@
+using Hotline.Share.Dtos.CallCenter;
+using SqlSugar;
+
+namespace Hotline.Application.CallCenter
+{
+    public interface IPbxApplication
+    {
+        /// <summary>
+        /// 小修申请记录
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        ISugarQueryable<TelRestApplyListDto> GetRestApplyList(TelRestApplyRequestDto dto);
+    }
+}

+ 59 - 0
src/Hotline.Application/CallCenter/PbxApplication.cs

@@ -0,0 +1,59 @@
+using Hotline.CallCenter.Tels;
+using Hotline.Share.Dtos.CallCenter;
+using Hotline.Share.Enums.CallCenter;
+using SqlSugar;
+using XF.Domain.Dependency;
+using XF.Domain.Repository;
+
+namespace Hotline.Application.CallCenter
+{
+    public class PbxApplication : IPbxApplication, IScopeDependency
+    {
+        private readonly IRepository<TelRestApply> _telRestApplyRepository;
+
+        public PbxApplication(IRepository<TelRestApply> telRestApplyRepository)
+        {
+            _telRestApplyRepository = telRestApplyRepository;
+        }
+
+        /// <summary>
+        /// 小修申请记录
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        public ISugarQueryable<TelRestApplyListDto> GetRestApplyList(TelRestApplyRequestDto dto)
+        {
+            var query = _telRestApplyRepository.Queryable()
+                .WhereIF(dto.Type is 0, p => p.AuditStatus == ETelRestAuditStatus.NoAudit)
+                .WhereIF(dto.Type is 1, p => p.AuditStatus == ETelRestAuditStatus.Pass || p.AuditStatus == ETelRestAuditStatus.NoPass)
+                .WhereIF(!string.IsNullOrEmpty(dto.ApplyUserName), p => p.CreatorName == dto.ApplyUserName)
+                .WhereIF(dto.ApplyStartTime.HasValue, p => p.CreationTime >= dto.ApplyStartTime)
+                .WhereIF(dto.ApplyEndTime.HasValue, p => p.CreationTime <= dto.ApplyEndTime)
+                .WhereIF(dto.AuditStatus.HasValue, p => p.AuditStatus == dto.AuditStatus)
+                .WhereIF(!string.IsNullOrEmpty(dto.AuditUserName), p => p.AuditUserName == dto.AuditUserName)
+                .WhereIF(dto.AuditStartTime.HasValue, p => p.AuditTime >= dto.AuditStartTime)
+                .WhereIF(dto.AuditEndTime.HasValue, p => p.AuditTime <= dto.AuditEndTime)
+                .Select(p => new TelRestApplyListDto
+                {
+                    ApplyUserName = p.CreatorName,
+                    ApplyTime = p.CreationTime,
+                    Reason = p.Reason,
+                    ReasonId = p.ReasonId,
+                    AuditUserName = p.AuditUserName,
+                    AuditUserId = p.AuditUserId,
+                    AuditOrgName = p.AuditOrgName,
+                    AuditOrgId = p.AuditOrgId,
+                    AuditTime = p.AuditTime,
+                    AuditStatus = p.AuditStatus,
+                    AuditOpinion = p.AuditOpinion
+                })
+                .OrderByIF(dto is { SortField: "applyTime", SortRule: 0 }, p => p.ApplyTime, OrderByType.Asc) //申请时间升序
+                .OrderByIF(dto is { SortField: "applyTime", SortRule: 1 }, p => p.ApplyTime, OrderByType.Desc) //申请时间降序
+                .OrderByIF(dto is { SortField: "auditTime", SortRule: 0 }, p => p.AuditTime, OrderByType.Asc) //审核时间升序
+                .OrderByIF(dto is { SortField: "auditTime", SortRule: 1 }, p => p.AuditTime, OrderByType.Desc) //审核时间降序
+                .OrderByIF(string.IsNullOrEmpty(dto.SortField), p => p.ApplyTime, OrderByType.Desc)
+               ;
+            return query;
+        }
+    }
+}

+ 2 - 1
src/Hotline.Application/Orders/Handlers/OrderScreenHandler/OrderScreenEndWorkflowHandler.cs

@@ -4,6 +4,7 @@ using Hotline.FlowEngine.Notifications;
 using Hotline.FlowEngine.WorkflowModules;
 using Hotline.Orders;
 using Hotline.Push.Notifies;
+using Hotline.SeedData;
 using Hotline.Share.Dtos;
 using Hotline.Share.Dtos.Order;
 using Hotline.Share.Enums.Order;
@@ -155,7 +156,7 @@ public class OrderScreenEndWorkflowHandler : INotificationHandler<EndWorkflowNot
                 if (_appOptions.Value.IsZiGong)
                 {
                     var user = await _userRepository.GetAsync(p => p.Id == screen.CreatorId, cancellationToken);
-                    if (user != null)
+                    if (user != null && user.OrgId != OrgSeedData.CenterId)
                     {
                         var isReviewPassText = isReviewPass == true ? "审批通过" : "审批拒绝";
                         var messageDto = new Share.Dtos.Push.MessageDto

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

@@ -1565,8 +1565,9 @@ public class OrderApplication : IOrderApplication, IScopeDependency
                 .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, d => d.IsProvince == true)
-                .WhereIF(dto.IsProvinceOrder.HasValue && dto.IsProvinceOrder == false, d => d.IsProvince == false)
+                .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)
@@ -1587,8 +1588,7 @@ public class OrderApplication : IOrderApplication, IScopeDependency
                                                                                                //.WhereIF(!string.IsNullOrEmpty(dto.OrderTagCode), d => d.OrderTagCode == dto.OrderTagCode)// 工单标签
                 .WhereIF(!string.IsNullOrEmpty(dto.OrderTagCode), d => d.OrderTags.Any(ot => ot.DicDataValue == dto.OrderTagCode)) //工单标签
                 .WhereIF(!string.IsNullOrEmpty(dto.FocusOnEvents),
-                    d => d.FocusOnEvents.Contains(dto
-                        .FocusOnEvents)) //!string.IsNullOrEmpty(d.FocusOnEvents) && SqlFunc.SplitIn(d.FocusOnEvents, dto.FocusOnEvents))
+                    d => d.FocusOnEvents.Contains(dto.FocusOnEvents)) //!string.IsNullOrEmpty(d.FocusOnEvents) && SqlFunc.SplitIn(d.FocusOnEvents, dto.FocusOnEvents))
                 .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) //工单编号降序

+ 138 - 0
src/Hotline.Share/Dtos/CallCenter/TelRestApplyAddDto.cs

@@ -0,0 +1,138 @@
+using Hotline.Share.Enums.CallCenter;
+using Hotline.Share.Requests;
+using XF.Utility.EnumExtensions;
+
+namespace Hotline.Share.Dtos.CallCenter
+{
+    /// <summary>
+    /// 申请
+    /// </summary>
+    public class TelRestApplyAddDto
+    {
+        /// <summary>
+        /// 分机号(冗余)
+        /// </summary>
+        public string TelNo { get; set; }
+
+        /// <summary>
+        /// 小休原因
+        /// </summary>
+        public Kv Reason { get; set; }
+    }
+
+    /// <summary>
+    /// 审批
+    /// </summary>
+    public class TelRestApplyAuditDto
+    {
+        /// <summary>
+        /// 数据Id
+        /// </summary>
+        public string Id { get; set; }
+
+        /// <summary>
+        /// 审批原因
+        /// </summary>
+        public string AuditOpinion { get; set; }
+
+        /// <summary>
+        /// 是否通过
+        /// </summary>
+        public bool IsPass { get; set; }
+    }
+
+    public record TelRestApplyRequestDto : PagedKeywordRequest
+    {
+        /// <summary>
+        /// 0:待审批  1:已审批
+        /// </summary>
+        public int Type { get; set; }
+
+        /// <summary>
+        /// 申请人
+        /// </summary>
+        public string ApplyUserName { get; set; }
+
+        /// <summary>
+        /// 申请时间
+        /// </summary>
+        public DateTime? ApplyStartTime { get; set; }
+        public DateTime? ApplyEndTime { get; set; }
+
+        /// <summary>
+        /// 小休原因
+        /// </summary>
+        public string ReasonId { get; set; }
+
+        /// <summary>
+        /// 审核状态
+        /// </summary>
+        public ETelRestAuditStatus? AuditStatus { get; set; }
+
+        /// <summary>
+        /// 审核人
+        /// </summary>
+        public string? AuditUserName { get; set; }
+
+        /// <summary>
+        /// 审核时间
+        /// </summary>
+        public DateTime? AuditStartTime { get; set; }
+        /// <summary>
+        /// 审核时间
+        /// </summary>
+        public DateTime? AuditEndTime { get; set; }
+    }
+
+    /// <summary>
+    /// 列表数据
+    /// </summary>
+    public class TelRestApplyListDto
+    {
+        /// <summary>
+        /// 申请人
+        /// </summary>
+        public string ApplyUserName { get; set; }
+
+        /// <summary>
+        /// 申请时间
+        /// </summary>
+        public DateTime? ApplyTime { get; set; }
+
+        public string Reason { get; set; }
+
+        public string ReasonId { get; set; }
+
+        /// <summary>
+        /// 审核人
+        /// </summary>
+        public string? AuditUserName { get; set; }
+        public string? AuditUserId { get; set; }
+
+        /// <summary>
+        /// 审核部门
+        /// </summary>
+        public string? AuditOrgName { get; set; }
+        public string? AuditOrgId { get; set; }
+
+        /// <summary>
+        /// 审核时间
+        /// </summary>
+        public DateTime? AuditTime { get; set; }
+
+        /// <summary>
+        /// 审核意见
+        /// </summary>
+        public string? AuditOpinion { get; set; }
+
+        /// <summary>
+        /// 审核状态
+        /// </summary>
+        public ETelRestAuditStatus AuditStatus { get; set; }
+
+        /// <summary>
+        /// 审核状态
+        /// </summary>
+        public string AuditStatusText => AuditStatus.GetDescription();
+    }
+}

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

@@ -161,6 +161,10 @@ namespace Hotline.Share.Dtos.Order
         /// </summary>
         public bool? IsProvinceOrder { get; set; }
 
+        /// <summary>
+        /// 是否省综合查询
+        /// </summary>
+        public bool? ProvinceSearch { get; set; }
 
         /// <summary>
         /// 是否敏感词

+ 28 - 0
src/Hotline.Share/Enums/CallCenter/ETelRestAuditStatus.cs

@@ -0,0 +1,28 @@
+using System.ComponentModel;
+
+namespace Hotline.Share.Enums.CallCenter
+{
+    public enum ETelRestAuditStatus
+    {
+        /// <summary>
+        /// 待审核
+        /// </summary>
+        [Description("待审核")]
+        NoAudit = 0,
+        /// <summary>
+        /// 审核通过
+        /// </summary>
+        [Description("审核通过")]
+        Pass = 1,
+        /// <summary>
+        /// 审核不通过
+        /// </summary>
+        [Description("审核不通过")]
+        NoPass = 2,
+        /// <summary>
+        /// 撤销
+        /// </summary>
+        [Description("撤销")]
+        Revoke = 3,
+    }
+}

+ 49 - 6
src/Hotline/CallCenter/Tels/TelRestApply.cs

@@ -1,13 +1,56 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
+using Hotline.Share.Enums.CallCenter;
+using SqlSugar;
 using XF.Domain.Repository;
 
 namespace Hotline.CallCenter.Tels
 {
-    public class TelRestApply: PositionWorkflowEntity
+    public class TelRestApply : CreationEntity
     {
+        /// <summary>
+        /// 分机id
+        /// </summary>
+        public string? TelId { get; set; }
+
+        /// <summary>
+        /// 分机号(冗余)
+        /// </summary>
+        public string TelNo { get; set; }
+
+        public string Reason { get; set; }
+
+        public string ReasonId { get; set; }
+
+        /// <summary>
+        /// 审核人
+        /// </summary>
+        public string? AuditUserName { get; set; }
+        public string? AuditUserId { get; set; }
+
+        /// <summary>
+        /// 审核部门
+        /// </summary>
+        public string? AuditOrgName { get; set; }
+        public string? AuditOrgId { get; set; }
+
+        /// <summary>
+        /// 审核时间
+        /// </summary>
+        public DateTime? AuditTime { get; set; }
+
+        /// <summary>
+        /// 审核意见
+        /// </summary>
+        [SugarColumn(ColumnDescription = "审核意见", ColumnDataType = "varchar(2000)")]
+        public string? AuditOpinion { get; set; }
+
+        /// <summary>
+        /// 审核状态
+        /// </summary>
+        public ETelRestAuditStatus AuditStatus { get; set; }
+
+        /// <summary>
+        /// 工号(冗余)
+        /// </summary>
+        public string? StaffNo { get; set; }
     }
 }