xf 10 月之前
父節點
當前提交
e08babad7a

+ 146 - 132
src/Hotline.Api/Controllers/OrderController.cs

@@ -30,6 +30,7 @@ using Hotline.Share.Dtos.FlowEngine;
 using Hotline.Share.Dtos.FlowEngine.Workflow;
 using Hotline.Share.Dtos.Order;
 using Hotline.Share.Dtos.Order.Migration;
+using Hotline.Share.Dtos.Order.Publish;
 using Hotline.Share.Dtos.Settings;
 using Hotline.Share.Enums.CallCenter;
 using Hotline.Share.Enums.FlowEngine;
@@ -250,12 +251,12 @@ public class OrderController : BaseController
         var (total, items) = await _orderRepository.Queryable()
             .Includes(d => d.OrderPublish)
             .Where(x => x.Status == EOrderStatus.Filed)
-            .WhereIF(!string.IsNullOrEmpty(dto.Keyword),
-                d => d.Title.Contains(dto.Keyword!) || d.No.Contains(dto.Keyword!))
+            .WhereIF(!string.IsNullOrEmpty(dto.Keyword), d => d.Title.StartsWith(dto.Keyword!))
+            .WhereIF(!string.IsNullOrEmpty(dto.No), d => d.No == dto.No)
             .WhereIF(dto.PubState == EPubState.Pub, d => d.Status >= EOrderStatus.Published)
             .WhereIF(dto.PubState == EPubState.NoPub, d => d.Status < EOrderStatus.Published)
-            .WhereIF(!string.IsNullOrEmpty(dto.PubMan),
-                d => d.AcceptorName.Contains(dto.PubMan!) || d.AcceptorStaffNo.Contains(dto.PubMan!))
+            //.WhereIF(!string.IsNullOrEmpty(dto.PubMan),
+            //    d => d.AcceptorName.Contains(dto.PubMan!) || d.AcceptorStaffNo.Contains(dto.PubMan!))
             .WhereIF(dto.PubRange == EPublicState.Pub, d => d.OrderPublish.PublishState)
             .WhereIF(dto.PubRange == EPublicState.NoPub, d => !d.OrderPublish.PublishState)
             .WhereIF(dto.FiledType != null && dto.FiledType == FiledType.CenterFiled, d => d.ProcessType == EProcessType.Zhiban)
@@ -269,6 +270,7 @@ public class OrderController : BaseController
             .WhereIF(dto.CreationTimeEnd.HasValue, d => d.CreationTime <= dto.CreationTimeEnd)
             .WhereIF(dto.FiledTimeStart.HasValue, d => d.OrderPublish.CreationTime >= dto.CreationTimeStart)
             .WhereIF(dto.FiledTimeEnd.HasValue, d => d.OrderPublish.CreationTime <= dto.CreationTimeEnd)
+            .WhereIF(dto.QuerySelf.HasValue && dto.QuerySelf.Value, d => d.WaitForPublisherId == _sessionContext.RequiredUserId)
             .OrderByDescending(d => d.FiledTime)
             .ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
 
@@ -383,7 +385,6 @@ public class OrderController : BaseController
 
 
         var orderPublish = _mapper.Map<OrderPublish>(dto);
-
         orderPublish.OrderId = order.Id;
         orderPublish.No = order.No;
 
@@ -619,6 +620,23 @@ public class OrderController : BaseController
         }).ToList();
     }
 
+    /// <summary>
+    /// 发布平移
+    /// </summary>
+    [HttpPost("publish/migration")]
+    public async Task PublishMigrationBatch([FromBody] PublishMigrationDto dto)
+    {
+        var orders = await _orderRepository.Queryable()
+            .Where(d => dto.OrderIds.Contains(d.Id) && d.Status == EOrderStatus.Filed)
+            .ToListAsync(HttpContext.RequestAborted);
+        foreach (var order in orders)
+        {
+            order.WaitForPublisherId = dto.UserId;
+        }
+
+        await _orderRepository.UpdateRangeAsync(orders, HttpContext.RequestAborted);
+    }
+
     #endregion
 
     #region 工单回访
@@ -636,18 +654,18 @@ public class OrderController : BaseController
             .Includes(x => x.Employee)
             .Includes(x => x.OrderVisitDetails)
             .WhereIF(dto.VisitState == EVisitStateQuery.NoVisit,
-                x => (x.VisitState == Share.Enums.Order.EVisitState.WaitForVisit ||
-                      x.VisitState == Share.Enums.Order.EVisitState.NoSatisfiedWaitForVisit) &&
+                x => (x.VisitState == EVisitState.WaitForVisit ||
+                      x.VisitState == EVisitState.NoSatisfiedWaitForVisit) &&
                      x.Order.IsProvince == false)
-            .WhereIF(dto.VisitState == EVisitStateQuery.Visited,
-                x => x.VisitState == Share.Enums.Order.EVisitState.Visited)
-            .WhereIF(!string.IsNullOrEmpty(dto.Keyword),
-                x => x.Order.Title.Contains(dto.Keyword!) || x.Order.No.Contains(dto.Keyword!))
+            .WhereIF(dto.VisitState == EVisitStateQuery.Visited, x => x.VisitState == EVisitState.Visited)
+            .WhereIF(!string.IsNullOrEmpty(dto.Keyword), x => x.Order.Title.StartsWith(dto.Keyword!))
+            .WhereIF(!string.IsNullOrEmpty(dto.No), d => d.No == dto.No)
             .WhereIF(dto.VisitType != null, x => x.VisitType == dto.VisitType)
             .WhereIF(dto.FiledType != null && dto.FiledType == FiledType.CenterFiled, d => d.Order.ProcessType == EProcessType.Zhiban)
             .WhereIF(dto.FiledType != null && dto.FiledType == FiledType.OrgFiled, d => d.Order.ProcessType == EProcessType.Jiaoban)
             .WhereIF(dto.IsCountersign != null && dto.IsCountersign == true, d => d.Order.CounterSignType != null)
             .WhereIF(dto.IsCountersign != null && dto.IsCountersign == false, d => d.Order.CounterSignType == null)
+            .WhereIF(dto.QuerySelf.HasValue && dto.QuerySelf.Value, d => d.EmployeeId == _sessionContext.RequiredUserId)
             .OrderByDescending(x => x.PublishTime)
             .ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
         return new PagedDto<OrderVisitDto>(total, _mapper.Map<IReadOnlyList<OrderVisitDto>>(items));
@@ -796,7 +814,7 @@ public class OrderController : BaseController
         visit.OrgJudge = dto.OrgJudge;
         visit.SeatJudge = dto.SeatJudge;
 
-        if (visit.OrgJudge==true || visit.SeatJudge==true)
+        if (visit.OrgJudge == true || visit.SeatJudge == true)
         {
             visit.JudgeState = EJudgeState.Judging;
         }
@@ -872,7 +890,7 @@ public class OrderController : BaseController
     [HttpGet("visit/judge-query")]
     public async Task<PagedDto<OrderVisitDto>> VisitJudgeQuery([FromQuery] VisitJudgeQueryReq dto)
     {
-        var (total,items) =await _orderVisitRepository.Queryable()
+        var (total, items) = await _orderVisitRepository.Queryable()
             .Includes(x => x.Order)
             .Includes(x => x.Employee)
             .Where(x => x.VisitState == EVisitState.Visited)
@@ -889,11 +907,11 @@ public class OrderController : BaseController
             .WhereIF(dto.ActualHandleTimeEnd.HasValue, d => d.Order.ActualHandleTime <= dto.ActualHandleTimeEnd) //办结时间结束
             .WhereIF(dto.VisitTimeStart.HasValue, d => d.VisitTime >= dto.VisitTimeStart) //回访开始时间
             .WhereIF(dto.VisitTimeEnd.HasValue, d => d.VisitTime <= dto.VisitTimeEnd)
-            .WhereIF(dto.IsIng == true, d=>d.JudgeState == EJudgeState.Judging)
-            .WhereIF(dto.IsIng == false,d=>d.JudgeState != EJudgeState.Judging)
-            .WhereIF(dto.JudgeState!=null,d=>d.JudgeState == dto.JudgeState)
-            .WhereIF(dto.OrgJudge!=null,d=>d.OrgJudge == dto.OrgJudge)
-            .WhereIF(dto.SeatJudge!=null,d=>d.SeatJudge == dto.SeatJudge)
+            .WhereIF(dto.IsIng == true, d => d.JudgeState == EJudgeState.Judging)
+            .WhereIF(dto.IsIng == false, d => d.JudgeState != EJudgeState.Judging)
+            .WhereIF(dto.JudgeState != null, d => d.JudgeState == dto.JudgeState)
+            .WhereIF(dto.OrgJudge != null, d => d.OrgJudge == dto.OrgJudge)
+            .WhereIF(dto.SeatJudge != null, d => d.SeatJudge == dto.SeatJudge)
             .OrderByDescending(x => x.VisitTime)
             .ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
         return new PagedDto<OrderVisitDto>(total, _mapper.Map<IReadOnlyList<OrderVisitDto>>(items));
@@ -911,7 +929,7 @@ public class OrderController : BaseController
         foreach (var id in dto.Ids)
         {
             var visit = await _orderVisitRepository.Queryable().FirstAsync(d => d.Id == id, HttpContext.RequestAborted);
-            if (visit!= null && visit.VisitState == EVisitState.Visited)
+            if (visit != null && visit.VisitState == EVisitState.Visited)
             {
                 visit.JudgeState = dto.IsAgree ? EJudgeState.Agreed : EJudgeState.UnAgreed;
                 visit.JudgeUserId = _sessionContext.RequiredUserId;
@@ -928,32 +946,24 @@ public class OrderController : BaseController
         return new JudgeVisitRsp() { ErrorCount = error, SuccessCount = dto.Ids.Count - error };
     }
 
-
-
     /// <summary>
-    /// 批量分配回访人员
+    /// 回访平移
     /// </summary>
     /// <param name="dto"></param>
     /// <returns></returns>
-    [HttpPost("visit/distribution")]
-    public async Task<DistributionVisitRspDto> DistributionVisit([FromBody] DistributionVisitDto dto)
+    [HttpPost("visit/migration")]
+    public async Task VisitMigrationBatch([FromBody] DistributionVisitDto dto)
     {
-        int error = 0;
-        foreach (var id in dto.Ids)
+        var visits = await _orderVisitRepository.Queryable()
+            .Where(d => d.VisitState == EVisitState.WaitForVisit && dto.Ids.Contains(d.Id))
+            .ToListAsync(HttpContext.RequestAborted);
+
+        foreach (var visit in visits)
         {
-            var visit = await _orderVisitRepository.Queryable().FirstAsync(d => d.Id == id, HttpContext.RequestAborted);
-            if (visit != null && visit.VisitState == EVisitState.WaitForVisit)
-            {
-                visit.EmployeeId = dto.EmployeeId;
-                await _orderVisitRepository.UpdateAsync(visit, HttpContext.RequestAborted);
-            }
-            else
-            {
-                error++;
-            }
+            visit.EmployeeId = dto.EmployeeId;
         }
 
-        return new DistributionVisitRspDto() { ErrorCount = error, SuccessCount = dto.Ids.Count - error };
+        await _orderVisitRepository.UpdateRangeAsync(visits, HttpContext.RequestAborted);
     }
 
     #endregion
@@ -2792,20 +2802,24 @@ public class OrderController : BaseController
                 ExpiredTime = timeResult.EndTime,
                 NearlyExpiredTime = timeResult.NearlyExpiredTime
             };
+            var canUpdateOrderSender = bool.Parse(_systemSettingCacheManager.GetSetting(SettingConstants.CanUpdateOrderSender).SettingValue[0]);
             order.CenterToOrg(
                 expiredTimeConfig.TimeText, expiredTimeConfig.Count,
                 expiredTimeConfig.TimeType, expiredTimeConfig.ExpiredTime,
                 expiredTimeConfig.NearlyExpiredTime, dto.Opinion,
-                _sessionContext.RequiredUserId, _sessionContext.UserName);
+                _sessionContext.RequiredUserId, _sessionContext.UserName,
+                canUpdateOrderSender);
         }
         else if (dto.FlowDirection is EFlowDirection.CenterToOrg)
         {
             expiredTimeConfig = _timeLimitDomainService.CalcExpiredTime(DateTime.Now, EFlowDirection.CenterToOrg, order.AcceptTypeCode);
+            var canUpdateOrderSender = bool.Parse(_systemSettingCacheManager.GetSetting(SettingConstants.CanUpdateOrderSender).SettingValue[0]);
             order.CenterToOrg(
                 expiredTimeConfig.TimeText, expiredTimeConfig.Count,
                 expiredTimeConfig.TimeType, expiredTimeConfig.ExpiredTime,
                 expiredTimeConfig.NearlyExpiredTime, dto.Opinion,
-                _sessionContext.RequiredUserId, _sessionContext.UserName);
+                _sessionContext.RequiredUserId, _sessionContext.UserName,
+                canUpdateOrderSender);
             //写入质检
             await _qualityApplication.AddQualityAsync(EQualitySource.Send, order.Id, HttpContext.RequestAborted);
         }
@@ -4770,106 +4784,106 @@ public class OrderController : BaseController
     {
         var (total, items) = await _orderApplication.GetAboutToExpireAsync(dto).ToPagedListAsync(dto, HttpContext.RequestAborted);
         return new PagedDto<OrderDto>(total, _mapper.Map<IReadOnlyList<OrderDto>>(items));
-	}
+    }
 
-	/// <summary>
-	/// 工单即将超期列表导出
-	/// </summary>
-	/// <returns></returns>
-	[HttpPost("order/about_expire/_export")]
+    /// <summary>
+    /// 工单即将超期列表导出
+    /// </summary>
+    /// <returns></returns>
+    [HttpPost("order/about_expire/_export")]
     public async Task<FileStreamResult> AboutListExport([FromBody] ExportExcelDto<AboutToExpireListDto> dto)
     {
-	    var query = _orderApplication.GetAboutToExpireAsync(dto.QueryDto);
-	    List<Hotline.Orders.Order> orders;
-	    if (dto.IsExportAll)
-	    {
-		    orders = await query.ToListAsync(HttpContext.RequestAborted);
-	    }
-	    else
-	    {
-		    var (_, items) = await query.ToPagedListAsync(dto.QueryDto, HttpContext.RequestAborted);
-		    orders = items;
-	    }
-	    var ordersDtos = _mapper.Map<ICollection<OrderDto>>(orders);
-	    dynamic? dynamicClass = DynamicClassHelper.CreateDynamicClass(dto.ColumnInfos);
-	    var dtos = ordersDtos
-		    .Select(stu => _mapper.Map(stu, typeof(OrderDto), dynamicClass))
-		    .Cast<object>()
-		    .ToList();
-	    var stream = ExcelHelper.CreateStream(dtos);
-	    return ExcelStreamResult(stream, "工单即将超期列表数据");
-    }
-
-	///// <summary>
-	///// 工单即将超期节点列表
-	///// </summary>
-	///// <param name="dto"></param>
-	///// <returns></returns>
-	//[HttpGet("order/about_expire_node/list")]
-	//public async Task<PagedDto<WorkflowOrderDto>> AboutNodeList([FromQuery] AboutToExpireListDto dto)
-	//{
-	//    return await _orderApplication.GetAboutToExpireNodeAsync(dto, HttpContext.RequestAborted);
-	//}
-
-	/// <summary>
-	/// 工单超期列表
-	/// </summary>
-	/// <param name="dto"></param>
-	/// <returns></returns>
-	[HttpGet("order/expire/list")]
+        var query = _orderApplication.GetAboutToExpireAsync(dto.QueryDto);
+        List<Hotline.Orders.Order> orders;
+        if (dto.IsExportAll)
+        {
+            orders = await query.ToListAsync(HttpContext.RequestAborted);
+        }
+        else
+        {
+            var (_, items) = await query.ToPagedListAsync(dto.QueryDto, HttpContext.RequestAborted);
+            orders = items;
+        }
+        var ordersDtos = _mapper.Map<ICollection<OrderDto>>(orders);
+        dynamic? dynamicClass = DynamicClassHelper.CreateDynamicClass(dto.ColumnInfos);
+        var dtos = ordersDtos
+            .Select(stu => _mapper.Map(stu, typeof(OrderDto), dynamicClass))
+            .Cast<object>()
+            .ToList();
+        var stream = ExcelHelper.CreateStream(dtos);
+        return ExcelStreamResult(stream, "工单即将超期列表数据");
+    }
+
+    ///// <summary>
+    ///// 工单即将超期节点列表
+    ///// </summary>
+    ///// <param name="dto"></param>
+    ///// <returns></returns>
+    //[HttpGet("order/about_expire_node/list")]
+    //public async Task<PagedDto<WorkflowOrderDto>> AboutNodeList([FromQuery] AboutToExpireListDto dto)
+    //{
+    //    return await _orderApplication.GetAboutToExpireNodeAsync(dto, HttpContext.RequestAborted);
+    //}
+
+    /// <summary>
+    /// 工单超期列表
+    /// </summary>
+    /// <param name="dto"></param>
+    /// <returns></returns>
+    [HttpGet("order/expire/list")]
     public async Task<PagedDto<OrderDto>> ExpireList([FromQuery] AboutToExpireListDto dto)
     {
         var (total, items) = await _orderApplication.GetToExpireAsync(dto).ToPagedListAsync(dto, HttpContext.RequestAborted);
         return new PagedDto<OrderDto>(total, _mapper.Map<IReadOnlyList<OrderDto>>(items));
-	}
-
-	/// <summary>
-	/// 工单超期列表导出
-	/// </summary>
-	/// <returns></returns>
-	[HttpPost("order/expire/_export")]
-	public async Task<FileStreamResult> ExpireListExport([FromBody] ExportExcelDto<AboutToExpireListDto> dto)
-	{
-		var query = _orderApplication.GetToExpireAsync(dto.QueryDto);
-		List<Hotline.Orders.Order> orders;
-		if (dto.IsExportAll)
-		{
-			orders = await query.ToListAsync(HttpContext.RequestAborted);
-		}
-		else
-		{
-			var (_, items) = await query.ToPagedListAsync(dto.QueryDto, HttpContext.RequestAborted);
-			orders = items;
-		}
-		var ordersDtos = _mapper.Map<ICollection<OrderDto>>(orders);
-		dynamic? dynamicClass = DynamicClassHelper.CreateDynamicClass(dto.ColumnInfos);
-		var dtos = ordersDtos
-			.Select(stu => _mapper.Map(stu, typeof(OrderDto), dynamicClass))
-			.Cast<object>()
-			.ToList();
-		var stream = ExcelHelper.CreateStream(dtos);
-		return ExcelStreamResult(stream, "工单超期列表数据");
-	}
-
-	///// <summary>
-	///// 工单超期节点列表
-	///// </summary>
-	///// <param name="dto"></param>
-	///// <returns></returns>
-	//[HttpGet("order/expire_node/list")]
-	//public async Task<PagedDto<WorkflowOrderDto>> NodeList([FromQuery] AboutToExpireListDto dto)
-	//{
-	//    return await _orderApplication.GetToExpireNodeAsync(dto, HttpContext.RequestAborted);
-	//}
-
-	#endregion
-
-	#region 工单签收
-
-	/// <summary>
-	/// 工单签收
-	/// </summary>
-	[HttpPost("sign/{orderId}")]
+    }
+
+    /// <summary>
+    /// 工单超期列表导出
+    /// </summary>
+    /// <returns></returns>
+    [HttpPost("order/expire/_export")]
+    public async Task<FileStreamResult> ExpireListExport([FromBody] ExportExcelDto<AboutToExpireListDto> dto)
+    {
+        var query = _orderApplication.GetToExpireAsync(dto.QueryDto);
+        List<Hotline.Orders.Order> orders;
+        if (dto.IsExportAll)
+        {
+            orders = await query.ToListAsync(HttpContext.RequestAborted);
+        }
+        else
+        {
+            var (_, items) = await query.ToPagedListAsync(dto.QueryDto, HttpContext.RequestAborted);
+            orders = items;
+        }
+        var ordersDtos = _mapper.Map<ICollection<OrderDto>>(orders);
+        dynamic? dynamicClass = DynamicClassHelper.CreateDynamicClass(dto.ColumnInfos);
+        var dtos = ordersDtos
+            .Select(stu => _mapper.Map(stu, typeof(OrderDto), dynamicClass))
+            .Cast<object>()
+            .ToList();
+        var stream = ExcelHelper.CreateStream(dtos);
+        return ExcelStreamResult(stream, "工单超期列表数据");
+    }
+
+    ///// <summary>
+    ///// 工单超期节点列表
+    ///// </summary>
+    ///// <param name="dto"></param>
+    ///// <returns></returns>
+    //[HttpGet("order/expire_node/list")]
+    //public async Task<PagedDto<WorkflowOrderDto>> NodeList([FromQuery] AboutToExpireListDto dto)
+    //{
+    //    return await _orderApplication.GetToExpireNodeAsync(dto, HttpContext.RequestAborted);
+    //}
+
+    #endregion
+
+    #region 工单签收
+
+    /// <summary>
+    /// 工单签收
+    /// </summary>
+    [HttpPost("sign/{orderId}")]
     [LogFilter("工单签收")]
     public async Task Sign(string orderId)
     {

+ 10 - 0
src/Hotline.Share/Dtos/Order/OrderVisitDto.cs

@@ -33,6 +33,16 @@ namespace Hotline.Share.Dtos.Order
         /// 回访方式
         /// </summary>
         public EVisitType? VisitType { get; set; }
+
+        /// <summary>
+        /// 工单编号
+        /// </summary>
+        public string? No { get; set; }
+
+        /// <summary>
+        /// 是否只查询自己的待回访工单
+        /// </summary>
+        public bool? QuerySelf { get; set; }
     }
 
     public record VisitJudgeQueryReq:PagedKeywordRequest

+ 1 - 1
src/Hotline.Share/Dtos/Order/Publish/QueryOrderPublishDto.cs

@@ -70,5 +70,5 @@ public record QueryOrderPublishDto : PagedKeywordRequest
     /// <summary>
     /// 是否只查询自己的待发布工单
     /// </summary>
-    public bool QuerySelf { get; set; }
+    public bool? QuerySelf { get; set; }
 }

+ 65 - 126
src/Hotline.Share/Dtos/Order/QueryOrderDto.cs

@@ -151,76 +151,14 @@ namespace Hotline.Share.Dtos.Order
         /// </summary>
         public bool? IsSensitiveWord { get; set; }
 
-		/// <summary>
-		/// 敏感词
-		/// </summary>
-		public string? SensitiveWord { get; set;}
-    }
-
-
-    public record QueryOrderPublishDto : PagedKeywordRequest
-    {
-        /// <summary>
-        /// 发布状态
-        /// </summary>
-        public EPubState? PubState { get; set; }
-
-
-        /// <summary>
-        /// 工单标题
-        /// </summary>
-        public string? OrderTitle { get; set; }
-
-        /// <summary>
-        /// 发布人
-        /// </summary>
-        public string? PubMan { get; set; }
-
-        /// <summary>
-        /// 发布范围
-        /// </summary>
-        public EPublicState? PubRange { get; set; }
-
-        /// <summary>
-        /// 受理类型
-        /// </summary>
-        public List<string>? AcceptTypes { get; set; } = new();
-
-        /// <summary>
-        /// 热点分类
-        /// </summary>
-        public List<string>? HotspotIds { get; set; } = new();
-
-        /// <summary>
-        /// 受理时间(工单创建时间)
-        /// </summary>
-        public DateTime? CreationTimeStart { get; set; }
-        public DateTime? CreationTimeEnd { get; set; }
-
-        /// <summary>
-        /// 归档时间
-        /// </summary>
-        public DateTime? FiledTimeStart { get; set; }
-        public DateTime? FiledTimeEnd { get; set; }
-
-        /// <summary>
-        /// 归档方式
-        /// </summary>
-        public FiledType? FiledType { get; set; }
-
-        /// <summary>
-        /// 是否会签
-        /// </summary>
-        public bool? IsCountersign { get; set; }
-
         /// <summary>
-        /// 是否解决
+        /// 敏感词
         /// </summary>
-        public bool? Resolve { get; set; }
+        public string? SensitiveWord { get; set; }
+    }
 
-	}
 
-    public enum FiledType 
+    public enum FiledType
     {
         [Description("中心归档")]
         CenterFiled = 10,
@@ -229,7 +167,7 @@ namespace Hotline.Share.Dtos.Order
         OrgFiled = 20,
     }
 
-    public record QueryOrderRedoRecordDto: PagedKeywordRequest
+    public record QueryOrderRedoRecordDto : PagedKeywordRequest
     {
 
     }
@@ -466,7 +404,7 @@ namespace Hotline.Share.Dtos.Order
         /// 办理 true  审批 false 
         /// </summary>
         public bool Handle { get; set; }
-	}
+    }
 
 
     public record DelayCalcEndTimeDto
@@ -489,30 +427,30 @@ namespace Hotline.Share.Dtos.Order
     }
 
     public record ApplySuperviseDto
-	{
-	    public string OrderId { get; set; }
+    {
+        public string OrderId { get; set; }
     }
 
     public record SuperviseListDto : PagedKeywordRequest
     {
-	    /// <summary>
-	    /// 督办回复状态
-	    /// </summary>
-	    public int? SuperviseState { get; set; }
+        /// <summary>
+        /// 督办回复状态
+        /// </summary>
+        public int? SuperviseState { get; set; }
 
-	    public DateTime? CreationTimeStart { get; set; }
-	    public DateTime? CreationTimeEnd { get; set; }
-	}
+        public DateTime? CreationTimeStart { get; set; }
+        public DateTime? CreationTimeEnd { get; set; }
+    }
 
     public record ScreenListDto : PagedKeywordRequest
     {
-		/// <summary>
-		/// 甄别申请状态
-		/// </summary>
-		public EScreenStatus? Status { get; set; }
+        /// <summary>
+        /// 甄别申请状态
+        /// </summary>
+        public EScreenStatus? Status { get; set; }
 
-		public DateTime? CreationTimeStart { get; set; }
-	    public DateTime? CreationTimeEnd { get; set; }
+        public DateTime? CreationTimeStart { get; set; }
+        public DateTime? CreationTimeEnd { get; set; }
 
         public string? OrderId { get; set; }
 
@@ -521,12 +459,12 @@ namespace Hotline.Share.Dtos.Order
         /// </summary>
         public int source { get; set; }
 
-	}
+    }
 
-	public record MayScreenListDto : PagedKeywordRequest
+    public record MayScreenListDto : PagedKeywordRequest
     {
-	    public DateTime? CreationTimeStart { get; set; }
-	    public DateTime? CreationTimeEnd { get; set; }
+        public DateTime? CreationTimeStart { get; set; }
+        public DateTime? CreationTimeEnd { get; set; }
         public bool? IsHomePage { get; set; }
 
         /// <summary>
@@ -579,45 +517,45 @@ namespace Hotline.Share.Dtos.Order
         /// </summary>
         public DateTime? EndActualHandleTime { get; set; }
 
-		/// <summary>
-		/// 归档时间(暂为流程结束时间,因流程结束自动归档)
-		/// </summary>
-		public DateTime? FiledTime { get; set; }
+        /// <summary>
+        /// 归档时间(暂为流程结束时间,因流程结束自动归档)
+        /// </summary>
+        public DateTime? FiledTime { get; set; }
 
         /// <summary>
         /// 归档时间(暂为流程结束时间,因流程结束自动归档)
         /// </summary>
         public DateTime? EndFiledTime { get; set; }
 
-		/// <summary>
-		/// 受理时间
-		/// </summary>
-		public DateTime? CreationTime { get; set; }
+        /// <summary>
+        /// 受理时间
+        /// </summary>
+        public DateTime? CreationTime { get; set; }
 
-		/// <summary>
-		/// 受理时间
-		/// </summary>
-		public DateTime? EndCreationTime { get; set; }
+        /// <summary>
+        /// 受理时间
+        /// </summary>
+        public DateTime? EndCreationTime { get; set; }
 
-		/// <summary>
-		/// 回访时间
-		/// </summary>
-		public DateTime? VisitTime { get; set; }
+        /// <summary>
+        /// 回访时间
+        /// </summary>
+        public DateTime? VisitTime { get; set; }
 
-		/// <summary>
-		/// 回访时间
-		/// </summary>
-		public DateTime? EndVisitTime { get; set; }
+        /// <summary>
+        /// 回访时间
+        /// </summary>
+        public DateTime? EndVisitTime { get; set; }
 
-		/// <summary>
-		/// 回访部门名称
-		/// </summary>
-		public string? VisitOrgName { get; set; }
+        /// <summary>
+        /// 回访部门名称
+        /// </summary>
+        public string? VisitOrgName { get; set; }
 
-		/// <summary>
-		/// 部门办件结果
-		/// </summary>
-		public string? OrgProcessingResults { get; set; }
+        /// <summary>
+        /// 部门办件结果
+        /// </summary>
+        public string? OrgProcessingResults { get; set; }
 
         /// <summary>
         /// 部门办件态度
@@ -628,23 +566,24 @@ namespace Hotline.Share.Dtos.Order
         /// 不满意原因
         /// </summary>
         public string? OrgNoSatisfiedReason { get; set; }
-	}
+    }
 
-	public record UrgeListDto : PagedKeywordRequest
+    public record UrgeListDto : PagedKeywordRequest
     {
-	    /// <summary>
-	    /// 回复状态
-	    /// </summary>
-	    public int? UrgeState { get; set; }
-	    public DateTime? CreationTimeStart { get; set; }
-	    public DateTime? CreationTimeEnd { get; set; }
+        /// <summary>
+        /// 回复状态
+        /// </summary>
+        public int? UrgeState { get; set; }
+        public DateTime? CreationTimeStart { get; set; }
+        public DateTime? CreationTimeEnd { get; set; }
     }
 
-    public class QueryRepeatableEventDto {
-		public string? HotspotSpliceName { get; set; }
+    public class QueryRepeatableEventDto
+    {
+        public string? HotspotSpliceName { get; set; }
 
         public string? Address { get; set; }
-	}
+    }
 
 
     public enum EPublicState

+ 19 - 6
src/Hotline/Orders/Order.cs

@@ -322,7 +322,7 @@ namespace Hotline.Orders
         public string? CenterToOrgOpinion { get; set; }
 
         /// <summary>
-        /// 交
+        /// 交
         /// </summary>
         public string? CenterToOrgHandlerId { get; set; }
         public string? CenterToOrgHandlerName { get; set; }
@@ -607,6 +607,7 @@ namespace Hotline.Orders
         public string? AcceptorOrgName { get; set; }
 
         #endregion
+
         #region 派单人
 
         /// <summary>
@@ -751,6 +752,11 @@ namespace Hotline.Orders
         /// </summary>
         [SugarColumn(DefaultValue = "f")]
         public bool IsResolved { get; set; }
+
+        /// <summary>
+        /// 待发布人Id
+        /// </summary>
+        public string WaitForPublisherId { get; set; }
     }
 
     public partial class Order
@@ -914,19 +920,26 @@ namespace Hotline.Orders
 
         public void CenterToOrg(string timelimit, int timelimitCount, ETimeType timilimitUnit,
             DateTime expiredTime, DateTime nearlyExpiredTime,
-            string opinion, string handlerId, string handlerName)
+            string opinion, string handlerId, string handlerName,
+            bool canUpdateOrderSender)
         {
             ProcessType = EProcessType.Jiaoban;
             TimeLimit = timelimit;
             TimeLimitCount = timelimitCount;
             TimeLimitUnit = timilimitUnit;
             ExpiredTime = expiredTime;
-            CenterToOrgTime = DateTime.Now;
-            CenterToOrgOpinion = opinion;
-            CenterToOrgHandlerId = handlerId;
-            CenterToOrgHandlerName = handlerName;
+            if (canUpdateOrderSender)
+            {
+                CenterToOrgTime = DateTime.Now;
+                CenterToOrgOpinion = opinion;
+                CenterToOrgHandlerId = handlerId;
+                CenterToOrgHandlerName = handlerName;
+            }
             NearlyExpiredTime = nearlyExpiredTime;
             SendOrderNumber += 1;
+
+            if (string.IsNullOrEmpty(WaitForPublisherId))
+                WaitForPublisherId = handlerId;
         }
 
         public void OrgToCenter(string timelimit, int timelimitCount, ETimeType timilimitUnit, DateTime expiredTime, DateTime nearlyExpiredTime)

+ 1 - 0
src/Hotline/Orders/OrderVisit.cs

@@ -11,6 +11,7 @@ namespace Hotline.Orders;
 /// 已回访工单
 /// </summary>
 [Description("工单回访")]
+[SugarIndex("index_order_no", nameof(OrderVisit.No), OrderByType.Desc)]
 public class OrderVisit : CreationEntity
 {
     /// <summary>

+ 5 - 0
src/Hotline/Settings/SettingConstants.cs

@@ -337,5 +337,10 @@
         /// 呼入分机组号
         /// </summary>
         public const string CallInQueueId = "CallInQueueId";
+
+        /// <summary>
+        /// 更新工单派单员信息
+        /// </summary>
+        public const string CanUpdateOrderSender = "CanUpdateOrderSender";
 	}
 }