Dun.Jason 1 ano atrás
pai
commit
1250abb56d
30 arquivos alterados com 626 adições e 85 exclusões
  1. 2 2
      src/Hotline.Api/Controllers/Bi/BiOrderController.cs
  2. 1 0
      src/Hotline.Api/Controllers/HomeController.cs
  3. 185 45
      src/Hotline.Api/Controllers/OrderController.cs
  4. 2 0
      src/Hotline.Api/Controllers/SchedulingController.cs
  5. 73 0
      src/Hotline.Api/Controllers/TranspondCityController.cs
  6. 5 3
      src/Hotline.Application/Identity/IdentityAppService.cs
  7. 5 5
      src/Hotline.Application/Orders/IOrderApplication.cs
  8. 15 4
      src/Hotline.Application/Orders/OrderApplication.cs
  9. 36 5
      src/Hotline.Application/Subscribers/DatasharingSubscriber.cs
  10. 8 1
      src/Hotline.Share/Dtos/Order/OrderDto.cs
  11. 20 0
      src/Hotline.Share/Dtos/Order/OrderSpecialDto.cs
  12. 13 4
      src/Hotline.Share/Dtos/Order/PublishedDto.cs
  13. 6 1
      src/Hotline.Share/Dtos/Order/QueryOrderDto.cs
  14. 34 0
      src/Hotline.Share/Dtos/OrderTranspond/QueryTranspondCityDto.cs
  15. 42 0
      src/Hotline.Share/Dtos/OrderTranspond/TranspondCityRawDataDto.cs
  16. 21 0
      src/Hotline.Share/Enums/Order/ESpecialType.cs
  17. 13 0
      src/Hotline.Share/Enums/Order/ETranspondDirection.cs
  18. 1 1
      src/Hotline.Share/Hotline.Share.csproj
  19. 9 0
      src/Hotline.Share/Mq/EventNames.Share.cs
  20. 7 0
      src/Hotline.Share/Requests/PagedKeywordRequest.cs
  21. 2 2
      src/Hotline/FlowEngine/Workflows/IWorkflowDomainService.cs
  22. 1 1
      src/Hotline/FlowEngine/Workflows/Workflow.cs
  23. 4 3
      src/Hotline/FlowEngine/Workflows/WorkflowDomainService.cs
  24. 51 0
      src/Hotline/OrderTranspond/TranspondCityRawData.cs
  25. 14 0
      src/Hotline/Orders/Order.cs
  26. 8 8
      src/Hotline/Orders/OrderDomainService.cs
  27. 2 0
      src/Hotline/Orders/OrderPublish.cs
  28. 26 0
      src/Hotline/Orders/OrderSpecial.cs
  29. 5 0
      src/Hotline/Settings/SysDicTypeConsts.cs
  30. 15 0
      src/XF.Domain/Constants/SettingConstants.cs

+ 2 - 2
src/Hotline.Api/Controllers/Bi/BiOrderController.cs

@@ -182,8 +182,8 @@ namespace Hotline.Api.Controllers.Bi
                 {
                     UserName = x.AcceptorName,
                     UserId = x.AcceptorId,
-                    CentreArchive = SqlFunc.AggregateSum(SqlFunc.IIF( x.Status >= EOrderStatus.Filed && x.ProcessType == EProcessType.Zhiban, 1, 0)),
-                    CentreCareOf = SqlFunc.AggregateSum(SqlFunc.IIF( x.Status >= EOrderStatus.Filed && x.ProcessType == EProcessType.Jiaoban, 1, 0)),
+                    CentreArchive = SqlFunc.AggregateSum(SqlFunc.IIF(x.Status >=  EOrderStatus.Filed && x.ProcessType == EProcessType.Zhiban, 1, 0)),
+                    CentreCareOf = SqlFunc.AggregateSum(SqlFunc.IIF(x.Status >= EOrderStatus.Filed && x.ProcessType == EProcessType.Jiaoban, 1, 0)),
                     //NoCentreCareOf = SqlFunc.AggregateSum(SqlFunc.IIF((int)x.Status < 300 && x.ExpiredTime > x.FiledTime, 1, 0)),
                     Invalid = SqlFunc.AggregateSum(SqlFunc.IIF(x.AcceptType == "无效", 1, 0)),
                     Repeat = SqlFunc.AggregateSum(SqlFunc.IIF(x.DuplicateIds != null && SqlFunc.JsonArrayLength(x.DuplicateIds) > 0, 1, 0))

+ 1 - 0
src/Hotline.Api/Controllers/HomeController.cs

@@ -172,6 +172,7 @@ public class HomeController : BaseController
             TalkingDealTime = int.Parse(_systemSettingCacheManager.GetSetting(SettingConstants.TalkingDealTime).SettingValue[0]),
             IsCustomEvent = bool.Parse(_systemSettingCacheManager.GetSetting(SettingConstants.IsCustomEvent).SettingValue[0]),
 			IsTranspondCity = bool.Parse(_systemSettingCacheManager.GetSetting(SettingConstants.TranspondCity).SettingValue[0]),
+			IsAverageSendOrder = bool.Parse(_systemSettingCacheManager.GetSetting(SettingConstants.AverageSendOrder).SettingValue[0]),
 		};
         return rsp;
     }

+ 185 - 45
src/Hotline.Api/Controllers/OrderController.cs

@@ -14,6 +14,7 @@ using Hotline.FlowEngine.Workflows;
 using Hotline.Import;
 using Hotline.Orders;
 using Hotline.Orders.Notifications;
+using Hotline.OrderTranspond;
 using Hotline.Permissions;
 using Hotline.Push.FWMessage;
 using Hotline.Push.Notifies;
@@ -104,6 +105,7 @@ public class OrderController : BaseController
     private readonly IRepository<OrderSendBackAudit> _orderSendBackAuditRepository;
     private readonly IRepository<User> _userRepository;
     private readonly IExportApplication _exportApplication;
+    private readonly IRepository<TranspondCityRawData> _transpondCityRawDataRepository;
 
     public OrderController(
         IOrderDomainService orderDomainService,
@@ -153,7 +155,8 @@ public class OrderController : BaseController
         ITypedCache<YbEnterpriseToken> cacheResponse,
         IRepository<OrderSendBackAudit> orderSendBackAuditRepository,
         IRepository<User> userRepository,
-        IExportApplication exportApplication
+        IExportApplication exportApplication,
+        IRepository<TranspondCityRawData> transpondCityRawDataRepository
         )
     {
         _orderDomainService = orderDomainService;
@@ -204,6 +207,7 @@ public class OrderController : BaseController
         _orderSendBackAuditRepository = orderSendBackAuditRepository;
         _userRepository = userRepository;
         _exportApplication = exportApplication;
+        _transpondCityRawDataRepository = transpondCityRawDataRepository;
     }
 
     #region 工单发布
@@ -233,6 +237,7 @@ public class OrderController : BaseController
             .WhereIF(dto.IsCountersign != null && dto.IsCountersign == false, d => d.CounterSignType == null)
             .WhereIF(dto.AcceptTypes.Any(), d => dto.AcceptTypes.Contains(d.AcceptType))
             .WhereIF(dto.HotspotIds.Any(), d => dto.HotspotIds.Contains(d.HotspotId))
+            .WhereIF(dto.Resolve.HasValue, d=> d.OrderPublish.Resolve  ==  dto.Resolve)
             .WhereIF(dto.CreationTimeStart.HasValue, d => d.CreationTime >= dto.CreationTimeStart)
             .WhereIF(dto.CreationTimeEnd.HasValue, d => d.CreationTime <= dto.CreationTimeEnd)
             .WhereIF(dto.FiledTimeStart.HasValue, d => d.OrderPublish.CreationTime >= dto.CreationTimeStart)
@@ -469,12 +474,13 @@ public class OrderController : BaseController
     /// <returns></returns>
     [Permission(EPermission.PublishedOrder)]
     [HttpGet("published")]
-    public async Task<PagedDto<PublishedDto>> PublishedOrderList([FromQuery] PagedKeywordRequest dto)
+    public async Task<PagedDto<PublishedDto>> PublishedOrderList([FromQuery] PublishedPagedRequest dto)
     {
         var (total, items) = await _orderPublishRepository.Queryable()
             .Includes(x => x.Order)
             .WhereIF(!string.IsNullOrEmpty(dto.Keyword),
                 d => d.Order.Title.Contains(dto.Keyword!) || d.Order.No.Contains(dto.Keyword!))
+            .WhereIF(dto.Resolve.HasValue, x=>x.Resolve == dto.Resolve)
             .OrderBy(d => d.CreationTime)
             .ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
 
@@ -2340,9 +2346,10 @@ public class OrderController : BaseController
 
         //内容分词
         await _orderApplication.OrderParticiple(dto.Content, order.Id, HttpContext.RequestAborted);
-
-        //sms
-        try
+		//敏感分词
+		await _orderApplication.OrderSensitiveParticiple(dto.Content, order.Id, HttpContext.RequestAborted);
+		//sms
+		try
         {
             if (order.AcceptSms)
             {
@@ -2452,7 +2459,9 @@ public class OrderController : BaseController
         if (dto.Files.Any())
             order.FileJson = await _fileRepository.AddFileAsync(dto.Files, order.Id, "", HttpContext.RequestAborted);
         await _orderRepository.UpdateNav(order).Include(d => d.OrderExtension).ExecuteCommandAsync();
-    }
+        //敏感分词
+        await _orderApplication.OrderSensitiveParticiple(dto.Content, order.Id, HttpContext.RequestAborted);
+	}
 
     /// <summary>
     /// 开始工单办理流程
@@ -2493,20 +2502,31 @@ public class OrderController : BaseController
 
         try
         {
-	        // 平均派单
-	        if (dto.Workflow.BusinessType == EBusinessType.Send)
-	        {
-		        dto.Workflow.NextHandlers = await _orderDomainService.AverageOrder(HttpContext.RequestAborted);
-	        }
+            // 平均派单
+            if (dto.Workflow.BusinessType == EBusinessType.Send)
+            {
+                dto.Workflow.NextHandlers = await _orderDomainService.AverageOrder(HttpContext.RequestAborted);
+            }
             //是否市州互转
-            if (dto.Data.Transpond.HasValue  && dto.Data.Transpond.Value)
+            if (dto.Data.Transpond.HasValue && dto.Data.Transpond.Value)
             {
                 var order = await _orderRepository.GetAsync(id, HttpContext.RequestAborted);
                 var orderDto = _mapper.Map<OrderDto>(order);
-				await _capPublisher.PublishAsync(Hotline.Share.Mq.EventNames.HotlineOrderTranspondCity, orderDto);
-			}
+                await _capPublisher.PublishAsync(Hotline.Share.Mq.EventNames.HotlineOrderTranspondCity, orderDto);
+                //保存本地数据
+                TranspondCityRawData cityRawData = new TranspondCityRawData
+                {
+                    OrderCode = order.No,
+                    TransferOutTime = DateTime.Now,
+                    CityName = order.TranspondCityName,
+                    Direction = ETranspondDirection.Out
+                };
+
+                await _transpondCityRawDataRepository.AddAsync(cityRawData, HttpContext.RequestAborted);
+
+            }
 
-			var startDto = _mapper.Map<StartWorkflowDto>(dto.Workflow);
+            var startDto = _mapper.Map<StartWorkflowDto>(dto.Workflow);
             startDto.DefinitionModuleCode = WorkflowModuleConsts.OrderHandle;
             startDto.Title = dto.Data.Title;
             await _workflowApplication.StartWorkflowAsync(startDto, id, dto.Data.ExpiredTime, HttpContext.RequestAborted);
@@ -2573,18 +2593,14 @@ public class OrderController : BaseController
 
         _mapper.Map(expiredTimeConfig, order);
         await _orderRepository.UpdateAsync(order, HttpContext.RequestAborted);
-        // 平均派单
-        if (dto.BusinessType == EBusinessType.Send)
+        var averageSendOrder = bool.Parse(_systemSettingCacheManager.GetSetting(SettingConstants.AverageSendOrder).SettingValue[0]);
+		// 平均派单
+		if (dto.BusinessType == EBusinessType.Send && averageSendOrder)
         {
             dto.NextHandlers = await _orderDomainService.AverageOrder(HttpContext.RequestAborted);
         }
 
         await _workflowApplication.NextAsync(dto, order.ExpiredTime, HttpContext.RequestAborted);
-
-        if (dto.IsSms)
-        {
-            //发送短信
-        }
     }
 
     /// <summary>
@@ -2651,8 +2667,8 @@ public class OrderController : BaseController
         var definition = wfModule.Definition;
         var rsp = new
         {
-			TranspondCity = _sysDicDataCacheManager.GetSysDicDataCache(SysDicTypeConsts.TranspondCity),
-			AcceptTypeOptions = _sysDicDataCacheManager.GetSysDicDataCache(SysDicTypeConsts.AcceptType),
+            TranspondCity = _sysDicDataCacheManager.GetSysDicDataCache(SysDicTypeConsts.TranspondCity),
+            AcceptTypeOptions = _sysDicDataCacheManager.GetSysDicDataCache(SysDicTypeConsts.AcceptType),
             ChannelOptions = _sysDicDataCacheManager.GetSysDicDataCache(TimeLimitBaseDataConsts.SourceChannel),
             OrgsOptions = await _organizeRepository.GetOrgJson(),
             EmergencyLevelOptions = EnumExts.GetDescriptions<EEmergencyLevel>(),
@@ -2673,8 +2689,8 @@ public class OrderController : BaseController
     {
         var rsp = new
         {
-	        TranspondCity = _sysDicDataCacheManager.GetSysDicDataCache(SysDicTypeConsts.TranspondCity),
-			ChannelOptions = _sysDicDataCacheManager.GetSysDicDataCache(TimeLimitBaseDataConsts.SourceChannel),
+            TranspondCity = _sysDicDataCacheManager.GetSysDicDataCache(SysDicTypeConsts.TranspondCity),
+            ChannelOptions = _sysDicDataCacheManager.GetSysDicDataCache(TimeLimitBaseDataConsts.SourceChannel),
             AcceptTypeOptions = _sysDicDataCacheManager.GetSysDicDataCache(SysDicTypeConsts.AcceptType),
             EmergencyLevelOptions = EnumExts.GetDescriptions<EEmergencyLevel>(),
             PushTypeOptions = _sysDicDataCacheManager.GetSysDicDataCache(SysDicTypeConsts.PushType),
@@ -3168,7 +3184,7 @@ public class OrderController : BaseController
                 Opinion = dto.Cause
             };
             //if (dto.AlterTime)
-            //    recall.External = new External { TimeLimit = dto.TimeLimit, TimeLimitUnit = dto.TimeLimitUnit };
+            //    recall.External = new External { TimeLimit = dto.TimeLimit, TimeLimitUnit = ETimeType.WorkDay };
             //if (dto.Files.Any()) recall.Files = dto.Files;
 
             //todo 特提重办,按审批通过时间依据中心派至部门的规则计算期满时间,更新order
@@ -3226,12 +3242,90 @@ public class OrderController : BaseController
         }
     }
 
-    /// <summary>
-    /// 审批工单特提信息
-    /// </summary>
-    /// <param name="dto"></param>
-    /// <returns></returns>
-    [Permission(EPermission.AuditSpecial)]
+	/// <summary>
+	/// 工单重办信息
+	/// </summary>
+	/// <param name="dtos"></param>
+	/// <returns></returns>
+	[Permission(EPermission.ApplySpecial)]
+	[HttpPost("re_transact")]
+	[LogFilter("工单重办")]
+	public async Task Add([FromBody] OrderReTransactDto dto)
+	{
+		var specialAny = await _orderSpecialRepository.Queryable().Where(x => x.OrderId == dto.OrderId && x.State == 0)
+			.AnyAsync();
+		if (specialAny) throw UserFriendlyException.SameMessage("工单已存在待审批特提信息!");
+
+		var screen = await _orderScreenRepository.Queryable().Where(x => x.OrderId == dto.OrderId && (int)x.Status < 2).AnyAsync();
+		if (screen) throw UserFriendlyException.SameMessage("工单存在甄别中的信息!");
+
+		var order = await _orderRepository
+			.Queryable()
+			.Includes(d => d.Workflow)
+			.FirstAsync(d => d.Id == dto.OrderId);
+		if (order.Workflow.IsInCountersign) throw UserFriendlyException.SameMessage("工单会签中,无法进行重办!");
+
+		var model = _mapper.Map<OrderSpecial>(dto);
+		var orgs = order.HandlerOrgs;
+		model.OrgId = orgs != null && orgs.Count > 0 ? orgs[0].Key : "";
+		model.OrgName = orgs != null && orgs.Count > 0 ? orgs[0].Value : "";
+		var step = await _workflowDomainService.FindLastStepAsync(model.WorkflowId, HttpContext.RequestAborted);
+		model.StepName = step.Name;
+		model.StepCode = step.Code;
+		model.State = 1;
+        model.ESpecialType = ESpecialType.ReTransact;
+
+		model.InitId();
+		if (dto.Files.Any())
+			model.FileJson = await _fileRepository.AddFileAsync(dto.Files, model.Id, "", HttpContext.RequestAborted);
+		await _orderSpecialRepository.AddAsync(model, HttpContext.RequestAborted);
+		if (model.State == 1)
+		{
+			var recall = new RecallDto
+			{
+				WorkflowId = dto.WorkflowId!,
+				NextStepCode = dto.NextStepCode,
+				NextStepName = dto.NextStepName,
+				NextHandlers = dto.NextHandlers,
+				Opinion = dto.Cause
+			};
+            if (dto.AlterTime)
+                recall.External = new External { TimeLimit = dto.TimeLimit, TimeLimitUnit = ETimeType.WorkDay };
+
+            await _workflowApplication.RecallAsync(recall, order.ExpiredTime, HttpContext.RequestAborted);
+
+			var publish = await _orderPublishRepository.GetAsync(x => x.OrderId == dto.OrderId);
+			if (publish != null)
+			{
+				var publishHistory = _mapper.Map<OrderPublishHistory>(publish);
+				publishHistory.OrderPublishId = publish.Id;
+				publishHistory.ArrangeTitleAfter = publish.ArrangeTitle;
+				publishHistory.ArrangeTitleBefor = publish.ArrangeTitle;
+				publishHistory.ArrangeContentAfter = publish.ArrangeContent;
+				publishHistory.ArrangeContentBefor = publish.ArrangeContent;
+				publishHistory.ArrangeOpinionAfter = publish.ArrangeOpinion;
+				publishHistory.ArrangeOpinionBefor = publish.ArrangeOpinion;
+				await _orderPublishHistoryRepository.AddAsync(publishHistory, HttpContext.RequestAborted);
+				await _orderPublishRepository.RemoveAsync(publish, false, HttpContext.RequestAborted);
+			}
+			var reTransactNum = order.ReTransactNum.HasValue ? order.ReTransactNum.Value + 1 : 1;
+            await  _orderRepository.Updateable().SetColumns(o=> new Order() { ReTransactNum = reTransactNum } ).Where(o=>o.Id == order.Id).ExecuteCommandAsync(HttpContext.RequestAborted);
+
+			var visit = await _orderVisitRepository.GetAsync(x => x.OrderId == dto.OrderId && x.VisitState != EVisitState.None);
+			if (visit != null)
+			{
+				visit.VisitState = EVisitState.None;
+				await _orderVisitRepository.UpdateAsync(visit, HttpContext.RequestAborted);
+			}
+		}
+	}
+
+	/// <summary>
+	/// 审批工单特提信息
+	/// </summary>
+	/// <param name="dto"></param>
+	/// <returns></returns>
+	[Permission(EPermission.AuditSpecial)]
     [HttpPut("special")]
     [LogFilter("审批工单特提")]
     public async Task Update([FromBody] AuditOrderSpecialDto dto)
@@ -3461,29 +3555,75 @@ public class OrderController : BaseController
     public async Task<object> SpecialBaseData(string id)
     {
         var step = await _workflowApplication.GetRecallStepsAsync(id, HttpContext.RequestAborted);
-        if (step != null && step.Steps.Any() && _sessionContext.Roles.Contains("zuoxi"))
+        var specialSeats = bool.Parse(_systemSettingCacheManager.GetSetting(SettingConstants.SpecialSeats).SettingValue[0]);
+        var specialSendOrder = bool.Parse(_systemSettingCacheManager.GetSetting(SettingConstants.SpecialSendOrder).SettingValue[0]);
+
+		var baseTypeId = string.Empty;
+        if (step != null && step.Steps.Any() && _sessionContext.Roles.Contains("zuoxi") && specialSeats)
         {
-            step.Steps = step.Steps.Where(x => x.Key == "start").ToList();
-        }
+			step.Steps = step.Steps.Where(x => x.Key.ToLower() == "start").ToList();
+			if (step.Steps.Any()) baseTypeId = step.Steps[0].Key;
+		}
+
+        if (step != null && step.Steps.Any() && _sessionContext.Roles.Contains("paidanyuan") && specialSendOrder)
+        {
+            step.Steps = step.Steps.Where(d => d.BusinessType is EBusinessType.Send).ToList();
+            if (step.Steps.Any()) baseTypeId = step.Steps[0].Key;
+		}
         var rsp = new
         {
             SpecialTimeType = EnumExts.GetDescriptions<ETimeType>(),
             SpecialReason = _sysDicDataCacheManager.GetSysDicDataCache(SysDicTypeConsts.SpecialReason),
-            Step = step
-        };
+            Step = step,
+            BaseTypeId = baseTypeId
+		};
         return rsp;
     }
 
-    #endregion
-
-    #region 市民信息
-
     /// <summary>
-    /// 新增市民信息
+    /// 重办基础数据
     /// </summary>
-    /// <param name="dtos"></param>
     /// <returns></returns>
-    [HttpPost("citizen")]
+    [HttpGet("reTransact/base/{id}")]
+    public async Task<object> ReTransactBaseData(string id)
+    {
+        var order = await _orderRepository.GetAsync(id, HttpContext.RequestAborted);
+        List<Kv> orgs = new List<Kv> { new Kv { Key = "001", Value = "市民热线服务系统" } };
+        if (order == null ) throw UserFriendlyException.SameMessage("无效工单信息!");
+        if (order.CounterSignType == ECounterSignType.Center)
+        {
+	        //中心会签调取方法
+        }
+        else
+        {
+	        if (!string.IsNullOrEmpty(order.OrgLevelOneCode) && order.OrgLevelOneCode != "001")
+	        {
+                orgs.Add(new Kv { Key = order.OrgLevelOneCode,Value = order.OrgLevelOneName });
+			}
+		}
+		var step = await _workflowApplication.GetRecallStepsAsync(order.WorkflowId, HttpContext.RequestAborted);
+        //获取部门信息
+	    var rsp = new
+	    {
+		    SpecialTimeType = EnumExts.GetDescriptions<ETimeType>(),
+		    SpecialReason = _sysDicDataCacheManager.GetSysDicDataCache(SysDicTypeConsts.SpecialReason),
+		    ReTransactErrorType = _sysDicDataCacheManager.GetSysDicDataCache(SysDicTypeConsts.ReTransactErrorType),
+			Step = step,
+            Orgs = orgs,
+		};
+	    return rsp;
+    }
+
+	#endregion
+
+	#region 市民信息
+
+	/// <summary>
+	/// 新增市民信息
+	/// </summary>
+	/// <param name="dtos"></param>
+	/// <returns></returns>
+	[HttpPost("citizen")]
     [LogFilter("新增市民信息")]
     public async Task Add([FromBody] CitizenAddDto dto)
     {

+ 2 - 0
src/Hotline.Api/Controllers/SchedulingController.cs

@@ -308,6 +308,8 @@ namespace Hotline.Api.Controllers
 				throw UserFriendlyException.SameMessage("传入排班班次信息错误");
 			_mapper.Map(dto, scheduling);
 			scheduling.ShiftName = shift.Name;
+			scheduling.WorkingTime = shift.WorkingTime;
+			scheduling.OffDutyTime = shift.OffDutyTime;
 			await _schedulingRepository.UpdateAsync(scheduling, HttpContext.RequestAborted);
 		}
 

+ 73 - 0
src/Hotline.Api/Controllers/TranspondCityController.cs

@@ -0,0 +1,73 @@
+using Hotline.OrderTranspond;
+using Hotline.Share.Dtos;
+using Hotline.Share.Dtos.OrderTranspond;
+using Hotline.Share.Enums.Order;
+using MapsterMapper;
+using Microsoft.AspNetCore.Mvc;
+using SqlSugar;
+using XF.Domain.Repository;
+
+namespace Hotline.Api.Controllers
+{
+    public class TranspondCityController : BaseController
+    {
+
+        private readonly IRepository<TranspondCityRawData> _transpondCityRawDataRepository;
+
+        private readonly IMapper _mapper;
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="transpondCityRawDataRepository"></param>
+        /// <param name="mapper"></param>
+        public TranspondCityController(IRepository<TranspondCityRawData> transpondCityRawDataRepository,
+           IMapper mapper)
+        {
+            _transpondCityRawDataRepository = transpondCityRawDataRepository;
+            _mapper = mapper;
+        }
+
+        /// <summary>
+        /// 转出
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [HttpGet("order_transfer_out_list")]
+        public async Task<PagedDto<TranspondCityRawDataDto>> OrderTransferOutList([FromQuery] QueryTranspondCityDto dto)
+        {
+            RefAsync<int> total = 0;
+            var items = await _transpondCityRawDataRepository.Queryable()
+                .Where(p => p.Direction == ETranspondDirection.Out)
+                .WhereIF(!string.IsNullOrEmpty(dto.OrderCode), p => p.OrderCode.Contains(dto.OrderCode))
+                .WhereIF(dto.StartTime.HasValue, p => p.TransferOutTime >= dto.StartTime)
+                   .WhereIF(dto.EndTime.HasValue, p => p.TransferOutTime <= dto.EndTime)
+                             .WhereIF(!string.IsNullOrEmpty(dto.CiryName), p => p.CityName.Contains(dto.CiryName))
+                 .OrderByDescending(d => d.CreationTime)
+                 .ToPageListAsync(dto.PageIndex, dto.PageSize, total);
+            //返回数据
+            return new PagedDto<TranspondCityRawDataDto>(total.Value, _mapper.Map<IReadOnlyList<TranspondCityRawDataDto>>(items));
+        }
+
+        /// <summary>
+        /// 转入
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [HttpGet("order_receive_in_list")]
+        public async Task<PagedDto<TranspondCityRawDataDto>> OrderReceiveInList([FromQuery] QueryTranspondCityDto dto)
+        {
+            RefAsync<int> total = 0;
+            var items = await _transpondCityRawDataRepository.Queryable()
+                .Where(p => p.Direction == ETranspondDirection.In)
+                .WhereIF(!string.IsNullOrEmpty(dto.OrderCode), p => p.OrderCode.Contains(dto.OrderCode))
+                .WhereIF(dto.StartTime.HasValue, p => p.TransferOutTime >= dto.StartTime)
+                   .WhereIF(dto.EndTime.HasValue, p => p.TransferOutTime <= dto.EndTime)
+                             .WhereIF(!string.IsNullOrEmpty(dto.CiryName), p => p.CityName.Contains(dto.CiryName))
+                 .OrderByDescending(d => d.CreationTime)
+                 .ToPageListAsync(dto.PageIndex, dto.PageSize, total);
+            //返回数据
+            return new PagedDto<TranspondCityRawDataDto>(total.Value, _mapper.Map<IReadOnlyList<TranspondCityRawDataDto>>(items));
+        }
+    }
+}

+ 5 - 3
src/Hotline.Application/Identity/IdentityAppService.cs

@@ -138,9 +138,11 @@ public class IdentityAppService : IIdentityAppService, IScopeDependency
         try
         {
             DateTime time = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd"));
-            //根据当前时间获取排班信息
-            var scheduling = await _schedulingRepository.Queryable().Includes(x => x.SchedulingUser)
-                .Where(x => x.SchedulingTime == time && x.WorkingTime <= DateTime.Now.TimeOfDay && x.OffDutyTime >= DateTime.Now.TimeOfDay && x.AtWork!.Value && x.SchedulingUser.UserId == id)
+
+	            //&& x.AtWork!.Value != true
+			//根据当前时间获取排班信息
+			var scheduling = await _schedulingRepository.Queryable().Includes(x => x.SchedulingUser)
+                .Where(x => x.SchedulingTime == time && x.WorkingTime <= DateTime.Now.TimeOfDay && x.OffDutyTime >= DateTime.Now.TimeOfDay && ( x.AtWork == true || x.AtWork  == null) && x.SchedulingUser.UserId == id)
                 .OrderBy(x => x.SendOrderNum).FirstAsync(cancellationToken);
             if (scheduling != null)
             {

+ 5 - 5
src/Hotline.Application/Orders/IOrderApplication.cs

@@ -38,11 +38,11 @@ namespace Hotline.Application.Orders
         Task<PagedDto<OrderDto>> GetAboutToExpireAsync(AboutToExpireListDto dto, CancellationToken cancellationToken);
         //Task<PagedDto<WorkflowOrderDto>> GetAboutToExpireNodeAsync(AboutToExpireListDto dto, CancellationToken cancellationToken);
         Task OrderParticiple(string inputStr, string orderId, CancellationToken cancellationToken);
-
-        /// <summary>
-        /// 接收外部平台工单
-        /// </summary>
-        Task<AddOrderResponse> ReceiveOrderFromExternalAsync(AddOrderDto dto, CancellationToken cancellationToken);
+        Task OrderSensitiveParticiple(string inputStr, string orderId, CancellationToken cancellationToken);
+		/// <summary>
+		/// 接收外部平台工单
+		/// </summary>
+		Task<AddOrderResponse> ReceiveOrderFromExternalAsync(AddOrderDto dto, CancellationToken cancellationToken);
 
         /// <summary>
         /// 接收外部平台修改工单附件

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

@@ -259,10 +259,21 @@ public class OrderApplication : IOrderApplication, IScopeDependency
         }
     }
 
-    /// <summary>
-    /// 接收外部平台工单
-    /// </summary>
-    public Task<AddOrderResponse> ReceiveOrderFromExternalAsync(AddOrderDto dto, CancellationToken cancellationToken)
+    public async Task OrderSensitiveParticiple(string inputStr, string orderId, CancellationToken cancellationToken) 
+    {
+	    var words = await _orderWrodRepository.Queryable().Where(x => x.IsEnable == 1 && x.Classify.Contains("敏感标签")).Select(x => x.Tag).ToListAsync(cancellationToken);
+	    var res = new List<string>();
+	    if (words.Any()) res = ParticipleTool.SegMMDouble(inputStr, ref words);
+        if (res.Any())
+        {
+            await _orderRepository.Updateable().SetColumns(o=> new Order() { Sensitive  =res}).Where(o=>o.Id == orderId).ExecuteCommandAsync(cancellationToken);
+		}
+	}
+
+	/// <summary>
+	/// 接收外部平台工单
+	/// </summary>
+	public Task<AddOrderResponse> ReceiveOrderFromExternalAsync(AddOrderDto dto, CancellationToken cancellationToken)
     {
         switch (dto.Source)
         {

+ 36 - 5
src/Hotline.Application/Subscribers/DatasharingSubscriber.cs

@@ -18,6 +18,8 @@ using XF.Domain.Repository;
 using System.Security.Permissions;
 using MediatR;
 using Hotline.Settings;
+using Hotline.OrderTranspond;
+using Hotline.Share.Dtos.OrderTranspond;
 
 namespace Hotline.Application.Subscribers
 {
@@ -46,8 +48,9 @@ namespace Hotline.Application.Subscribers
         private readonly IRepository<OrderExtension> _orderExtensionRepository;
         private readonly IRepository<SystemDicData> _systemDicDataRepository;
         private readonly ISystemOrganizeRepository _systemOrganizeRepository;
+        private readonly IRepository<TranspondCityRawData> _transpondCityRawDataRepository;
 
-		public DataSharingSubscriber(
+        public DataSharingSubscriber(
             IRepository<OrderVisit> orderVisitRepository,
             IRepository<OrderVisitDetail> orderVisitDetailRepository,
             IMapper mapper,
@@ -66,7 +69,8 @@ namespace Hotline.Application.Subscribers
             IRepository<OrderExtension> orderExtensionRepository,
             IFileRepository fileRepository,
             IRepository<SystemDicData> systemDicDataRepository,
-            ISystemOrganizeRepository systemOrganizeRepository)
+            ISystemOrganizeRepository systemOrganizeRepository,
+            IRepository<TranspondCityRawData> transpondCityRawDataRepository)
         {
             _orderSendBackRepository = orderSendBackRepository;
             _workflowApplication = workflowApplication;
@@ -86,7 +90,9 @@ namespace Hotline.Application.Subscribers
             _orderDelayRepository = orderDelayRepository;
             _systemDicDataRepository = systemDicDataRepository;
             _systemOrganizeRepository = systemOrganizeRepository;
-		}
+            _transpondCityRawDataRepository = transpondCityRawDataRepository;
+
+        }
 
         /// <summary>
         /// 接收工单退回结果
@@ -153,13 +159,13 @@ namespace Hotline.Application.Subscribers
         {
             var order = await _orderRepository.Queryable().Where(x => x.ProvinceNo == dto.ProvinceOrderSuperviseDto!.CaseSerial).FirstAsync(cancellationToken);
             var org = await _systemOrganizeRepository.GetAsync(x => x.Name == dto.ProvinceOrderSuperviseDto!.SuperviseRsvDept, cancellationToken);
-			var model = new OrderSupervise();
+            var model = new OrderSupervise();
             model.InitId();
             model.OrderId = order.Id;
             model.ReplyLimitTime = dto.ProvinceOrderSuperviseDto.SuperviseReturnDate;
             model.OrgName = org.Name;
             model.OrgId = org.Id;
-			model.LaunchOrgName = dto.ProvinceOrderSuperviseDto.SuperviseSendDept;
+            model.LaunchOrgName = dto.ProvinceOrderSuperviseDto.SuperviseSendDept;
             model.State = 0;
             model.Province = true;
             model.ApplyContent = dto.ProvinceOrderSuperviseDto.SuperviseContent;
@@ -523,5 +529,30 @@ namespace Hotline.Application.Subscribers
         {
             await _orderDomainService.AddOrderComplementAsync(dto, cancellationToken);
         }
+
+        /// <summary>
+        /// 接收市州互转返回数据
+        /// </summary>
+        [CapSubscribe(EventNames.SharingOrderTranspondCity)]
+        public async Task RecTranspondCityRawDataAsync(TranspondCityRawDataDto dto, CancellationToken cancellationToken)
+        {
+            var data = await _transpondCityRawDataRepository.GetAsync(p => p.OrderCode == dto.OrderCode && p.Direction == ETranspondDirection.Out, cancellationToken);
+            if (data != null)
+            {
+                data.IsSuccess = dto.IsSuccess;
+                data.SendTimes = dto.SendTimes;
+                data.Result = dto.Result;
+                await _transpondCityRawDataRepository.UpdateAsync(data, cancellationToken);
+            }
+        }
+
+        /// <summary>
+        /// 接收市州互转接收原始数据
+        /// </summary>
+        [CapSubscribe(EventNames.SharingOrderReceiveTranspondCity)]
+        public async Task RecTranspondCityReceiveRawDataAsync(TranspondCityRawDataDto dto, CancellationToken cancellationToken)
+        {
+            await _transpondCityRawDataRepository.AddAsync(_mapper.Map<TranspondCityRawData>(dto), cancellationToken);
+        }
     }
 }

+ 8 - 1
src/Hotline.Share/Dtos/Order/OrderDto.cs

@@ -425,7 +425,14 @@ namespace Hotline.Share.Dtos.Order
         public string? RecordingBaseAddress { get; set; }
         public string? RecordingAbsolutePath { get; set; }
 
-    }
+        public int? ReTransactNum { get; set; }
+
+        /// <summary>
+        /// 敏感标签
+        /// </summary>
+        public List<string>? Sensitive { get; set; }
+
+	}
 
     public class UpdateOrderDto : AddOrderDto
     {

+ 20 - 0
src/Hotline.Share/Dtos/Order/OrderSpecialDto.cs

@@ -408,4 +408,24 @@ namespace Hotline.Share.Dtos.Order
             return null;
         }
     }
+
+	public class OrderReTransactDto : OrderSpecialAddDto
+	{
+		/// <summary>
+		/// 错件类型
+		/// </summary>
+		public List<ReTransactError> ReTransactError { get; set; }
+	}
+
+	public class ReTransactError
+	{
+
+		public string OrgId { get; set; }
+
+		public string OrgName { get; set; }
+
+		public string ErrorId { get; set; }
+
+		public string ErrorName { get; set; }
+	}
 }

+ 13 - 4
src/Hotline.Share/Dtos/Order/PublishedDto.cs

@@ -28,10 +28,12 @@ public class PublishedDto
 
     public string? PublishMan { get; set; }
 
-    /// <summary>
-    /// 最近更新时间
-    /// </summary>
-    public DateTime? LastModificationTime { get; set; }
+    public bool? Resolve { get; set; }
+
+	/// <summary>
+	/// 最近更新时间
+	/// </summary>
+	public DateTime? LastModificationTime { get; set; }
 }
 
 public class PublishDto : OrderDto
@@ -52,6 +54,8 @@ public class PublishDto : OrderDto
     public DateTime? PublishTime { get; set; }
 
     public string? PublishMan { get; set; }
+
+    public bool? Resolve { get; set; }
 }
 
 
@@ -254,6 +258,11 @@ public class PublishOrderDto
     public string? Remark { get; set; }
 
     #endregion
+
+    /// <summary>
+    /// 是否解决
+    /// </summary>
+    public bool? Resolve { get; set; }
 }
 
 

+ 6 - 1
src/Hotline.Share/Dtos/Order/QueryOrderDto.cs

@@ -201,7 +201,12 @@ namespace Hotline.Share.Dtos.Order
         /// </summary>
         public bool? IsCountersign { get; set; }
 
-    }
+        /// <summary>
+        /// 是否解决
+        /// </summary>
+        public bool? Resolve { get; set; }
+
+	}
 
     public enum FiledType 
     {

+ 34 - 0
src/Hotline.Share/Dtos/OrderTranspond/QueryTranspondCityDto.cs

@@ -0,0 +1,34 @@
+using Hotline.Share.Requests;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Hotline.Share.Dtos.OrderTranspond
+{
+    public record QueryTranspondCityDto: PagedRequest
+    {
+        /// <summary>
+        /// 编号
+        /// </summary>
+        public string? OrderCode { get; set; }
+
+        /// <summary>
+        /// 开始时间
+        /// </summary>
+        public DateTime? StartTime { get; set; }
+
+        /// <summary>
+        /// 结束时间
+        /// </summary>
+        public DateTime? EndTime { get; set; }
+
+        /// <summary>
+        /// 名称
+        /// </summary>
+        public string? CiryName { get; set;}
+
+
+    }
+}

+ 42 - 0
src/Hotline.Share/Dtos/OrderTranspond/TranspondCityRawDataDto.cs

@@ -0,0 +1,42 @@
+using Hotline.Share.Enums.Order;
+
+namespace Hotline.Share.Dtos.OrderTranspond
+{
+    public class TranspondCityRawDataDto
+    {
+        /// <summary>
+        /// 工单编号
+        /// </summary>
+        public string OrderCode { get; set; }
+
+        /// <summary>
+        /// 转出/转入时间  
+        /// </summary>
+        public DateTime? TransferOutTime { get; set; }
+
+        /// <summary>
+        /// 推送次数
+        /// </summary>
+        public int SendTimes { get; set; }
+
+        /// <summary>
+        /// 推送成功
+        /// </summary>
+        public bool IsSuccess { get; set; }
+
+        /// <summary>
+        /// 请求结果/转入数据
+        /// </summary>
+        public string? Result { get; set; }
+
+        /// <summary>
+        /// 市州名称
+        /// </summary>
+        public string? CityName { get; set; }
+
+        /// <summary>
+        /// 转出或者转入
+        /// </summary>
+        public ETranspondDirection Direction { get; set; }
+    }
+}

+ 21 - 0
src/Hotline.Share/Enums/Order/ESpecialType.cs

@@ -0,0 +1,21 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Hotline.Share.Enums.Order
+{
+	public enum ESpecialType
+	{
+		/// <summary>
+		/// 特提
+		/// </summary>
+		Special = 1,
+
+		/// <summary>
+		/// 重办
+		/// </summary>
+		ReTransact = 2,
+	}
+}

+ 13 - 0
src/Hotline.Share/Enums/Order/ETranspondDirection.cs

@@ -0,0 +1,13 @@
+using System.ComponentModel;
+
+namespace Hotline.Share.Enums.Order
+{
+    public enum ETranspondDirection
+    {
+        [Description("转出")]
+        Out = 0,
+
+        [Description("转入")]
+        In = 1,
+    }
+}

+ 1 - 1
src/Hotline.Share/Hotline.Share.csproj

@@ -7,7 +7,7 @@
     <GenerateDocumentationFile>True</GenerateDocumentationFile>
     <NoWarn>$(NoWarn);1591;8618;</NoWarn>
     <GeneratePackageOnBuild>True</GeneratePackageOnBuild>
-    <Version>1.0.65</Version>
+    <Version>1.0.67</Version>
   </PropertyGroup>
 
   <ItemGroup>

+ 9 - 0
src/Hotline.Share/Mq/EventNames.Share.cs

@@ -85,5 +85,14 @@
         /// </summary>
         public const string SharingOrderUpdataFiles = "sharing.order.visit.update.files";
 
+        /// <summary>
+        /// 市州互转数据返回
+        /// </summary>
+        public const string SharingOrderTranspondCity = "sharing.order.transpond.city";
+
+        /// <summary>
+        /// 市州互转 接收原始数据
+        /// </summary>
+        public const string SharingOrderReceiveTranspondCity = "sharing.order.receive.transpond.city";
     }
 }

+ 7 - 0
src/Hotline.Share/Requests/PagedKeywordRequest.cs

@@ -61,6 +61,13 @@ public record OrgDataListDetailRequest:PagedRequest
 	public int ExpiredType { get; set; }
 }
 
+public record PublishedPagedRequest : PagedKeywordRequest {
+	/// <summary>
+	/// 是否解决
+	/// </summary>
+	public bool? Resolve { get; set; }
+}
+
 public record HotspotSubtotalReportPagedRequest : ReportPagedRequest
 {
 

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

@@ -22,7 +22,7 @@ namespace Hotline.FlowEngine.Workflows
         /// 进行流程的开始节点
         /// </summary>
         Task StartAsync(Workflow workflow, WorkflowStep startStep, BasicWorkflowDto dto, StepDefine firstStepDefine,
-            bool isNextDynamic, FlowAssignInfo flowAssignInfo, ECounterSignType counterSignType, DateTime? expiredTime,
+            bool isNextDynamic, FlowAssignInfo flowAssignInfo, ECounterSignType? counterSignType, DateTime? expiredTime,
             CancellationToken cancellationToken);
 
         /// <summary>
@@ -200,7 +200,7 @@ namespace Hotline.FlowEngine.Workflows
         /// <summary>
         /// 获取会签类型
         /// </summary>
-        ECounterSignType GetCounterSignType(EBusinessType businessType);
+        ECounterSignType? GetCounterSignType(EBusinessType businessType);
 
         /// <summary>
         /// 查询退回节点信息

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

@@ -620,7 +620,7 @@ public partial class Workflow
     /// <summary>
     /// 开始会签
     /// </summary>
-    public void StartCountersign(string startCsStepId, ECounterSignType counterSignType)
+    public void StartCountersign(string startCsStepId, ECounterSignType? counterSignType)
     {
         IsInCountersign = true;
         TopCountersignStepId = startCsStepId;

+ 4 - 3
src/Hotline/FlowEngine/Workflows/WorkflowDomainService.cs

@@ -98,7 +98,7 @@ namespace Hotline.FlowEngine.Workflows
         /// </summary>
         public async Task StartAsync(Workflow workflow, WorkflowStep startStep, BasicWorkflowDto dto,
             StepDefine firstStepDefine, bool isNextDynamic, FlowAssignInfo flowAssignInfo,
-            ECounterSignType counterSignType, DateTime? expiredTime, CancellationToken cancellationToken)
+            ECounterSignType? counterSignType, DateTime? expiredTime, CancellationToken cancellationToken)
         {
             //1. 创建first节点 (和trace)2.办理开始节点 
 
@@ -637,7 +637,7 @@ namespace Hotline.FlowEngine.Workflows
         public async Task<IReadOnlyList<string>> GetUnhandleStepIdsFromSendPoolAsync(string sendPoolId, CancellationToken cancellationToken)
         {
             return await _workflowStepRepository.Queryable()
-                .Where(d => d.Handlers.Any(x => x.Key == sendPoolId))
+                .Where(d => SqlFunc.JsonListObjectAny(d.Handlers,"Key", sendPoolId))
                 .Select(d => d.Id)
                 .ToListAsync(cancellationToken);
         }
@@ -1120,12 +1120,13 @@ namespace Hotline.FlowEngine.Workflows
         /// <param name="businessType"></param>
         /// <returns></returns>
         /// <exception cref="ArgumentOutOfRangeException"></exception>
-        public ECounterSignType GetCounterSignType(EBusinessType businessType) =>
+        public ECounterSignType? GetCounterSignType(EBusinessType businessType) =>
             businessType switch
             {
                 EBusinessType.Center => ECounterSignType.Center,
                 EBusinessType.Send => ECounterSignType.Center,
                 EBusinessType.Department => ECounterSignType.Department,
+                EBusinessType.File => null,
                 _ => throw new ArgumentOutOfRangeException(nameof(businessType), businessType, null)
             };
 

+ 51 - 0
src/Hotline/OrderTranspond/TranspondCityRawData.cs

@@ -0,0 +1,51 @@
+using Hotline.Share.Enums.Order;
+using SqlSugar;
+using XF.Domain.Repository;
+
+namespace Hotline.OrderTranspond
+{
+    public class TranspondCityRawData : CreationEntity
+    {
+        /// <summary>
+        /// 工单编号
+        /// </summary>
+        [SugarColumn(ColumnDescription = "工单编号")]
+        public string OrderCode { get; set; }
+
+        /// <summary>
+        /// 转出/转入时间  
+        /// </summary>
+        [SugarColumn(ColumnDescription = "转出/转入时间  ")]
+        public DateTime? TransferOutTime { get; set; }
+
+        /// <summary>
+        /// 推送次数
+        /// </summary>
+        [SugarColumn(ColumnDescription = "推送次数")]
+        public int SendTimes { get; set; }
+
+        /// <summary>
+        /// 推送成功
+        /// </summary>
+        [SugarColumn(ColumnDescription = "推送成功")]
+        public bool IsSuccess { get; set; }
+
+        /// <summary>
+        /// 请求结果/转入数据
+        /// </summary>
+        [SugarColumn(ColumnDataType = "text", ColumnDescription = "返回数据")]
+        public string? Result { get; set; }
+
+        /// <summary>
+        /// 市州名称
+        /// </summary>
+        [SugarColumn(ColumnDescription = "市州名称")]
+        public string? CityName { get; set; }
+
+        /// <summary>
+        /// 转出或者转入
+        /// </summary>
+        [SugarColumn(ColumnDescription = "转出或者转入")]
+        public ETranspondDirection Direction { get; set; }
+    }
+}

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

@@ -670,6 +670,20 @@ namespace Hotline.Orders
 		/// </summary>
 		public string? TranspondCityValue { get; set; }
 		#endregion
+
+		#region 重办
+
+        /// <summary>
+        /// 重办次数
+        /// </summary>
+        public int? ReTransactNum { get; set; }
+		#endregion
+
+		/// <summary>
+		/// 敏感标签
+		/// </summary>
+		[SugarColumn(ColumnDataType = "json", IsJson = true, IsNullable = true)]
+		public List<string>? Sensitive { get; set; }
 	}
 
 	public partial class Order

+ 8 - 8
src/Hotline/Orders/OrderDomainService.cs

@@ -187,7 +187,7 @@ public class OrderDomainService : IOrderDomainService, IScopeDependency
 		DateTime time = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd"));
 		//根据当前时间获取排班信息
 		var scheduling = await _schedulingRepository.Queryable().Includes(x => x.SchedulingUser)
-			.Where(x => x.SchedulingTime == time && x.WorkingTime <= DateTime.Now.TimeOfDay && x.OffDutyTime >= DateTime.Now.TimeOfDay && x.AtWork!.Value == true)
+			.Where(x => x.SchedulingTime == time && x.WorkingTime <= DateTime.Now.TimeOfDay && x.OffDutyTime >= DateTime.Now.TimeOfDay && x.AtWork == true)
 			.OrderBy(x => x.SendOrderNum).FirstAsync(cancellationToken);
 		if (scheduling != null)
 		{
@@ -245,7 +245,7 @@ public class OrderDomainService : IOrderDomainService, IScopeDependency
 		//3.平均分配剩下的工单给今天上班的人
 		DateTime time = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd"));
 		var schedulings = await _schedulingRepository.Queryable().Includes(x => x.SchedulingUser)
-			.Where(x => x.SchedulingTime!.Value == time && x.WorkingTime!.Value <= DateTime.Now.TimeOfDay && x.OffDutyTime!.Value >= DateTime.Now.TimeOfDay && x.AtWork!.Value == true)
+			.Where(x => x.SchedulingTime!.Value == time && x.WorkingTime!.Value <= DateTime.Now.TimeOfDay && x.OffDutyTime!.Value >= DateTime.Now.TimeOfDay && x.AtWork == true)
 			.OrderBy(x => x.SendOrderNum).ToListAsync(cancellationToken);
 
 		if (schedulings.Any())
@@ -263,9 +263,9 @@ public class OrderDomainService : IOrderDomainService, IScopeDependency
 					List<string> stepIds = new List<string>();
 					for (int i = 0; i < sendNum; i++)
 					{
-						stepIds.Add(stepsList[i]);
-						stepsList.Remove(stepsList[i]);
-					}
+						stepIds.Add(stepsList[0]);
+                        stepsList.Remove(stepsList[0]);
+                    }
 					handlers.Add(new ValueTuple<string, string, IReadOnlyList<string>>(scheduling.SchedulingUser.UserId, scheduling.SchedulingUser.UserName, stepIds));
 
 				}
@@ -276,9 +276,9 @@ public class OrderDomainService : IOrderDomainService, IScopeDependency
 				List<string> stepIds = new List<string>();
 				for (int i = 0; i < sendNum; i++)
 				{
-					stepIds.Add(stepsList[i]);
-					stepsList.Remove(stepsList[i]);
-				}
+					stepIds.Add(stepsList[0]);
+                    stepsList.Remove(stepsList[0]);
+                }
 				handlers.Add(new ValueTuple<string, string, IReadOnlyList<string>>(schedulings[0].SchedulingUser.UserId, schedulings[0].SchedulingUser.UserName, stepIds));
 
 			}

+ 2 - 0
src/Hotline/Orders/OrderPublish.cs

@@ -93,4 +93,6 @@ public class OrderPublish : FullStateEntity
     /// </summary>
     public string? Remark { get; set; }
     #endregion
+
+    public bool? Resolve { get; set; }
 }

+ 26 - 0
src/Hotline/Orders/OrderSpecial.cs

@@ -7,6 +7,8 @@ using System.Threading.Tasks;
 using Hotline.FlowEngine.Workflows;
 using Hotline.Share.Dtos;
 using Hotline.Share.Dtos.File;
+using Hotline.Share.Dtos.Order;
+using Hotline.Share.Enums.Order;
 using Hotline.Share.Enums.Settings;
 using SqlSugar;
 using XF.Domain.Repository;
@@ -85,5 +87,29 @@ namespace Hotline.Orders
 
         [SugarColumn(ColumnDataType = "json", IsJson = true, IsNullable = true)]
         public List<FileJson>? ReplyFileJson { get; set; }
+
+        /// <summary>
+        /// 特提类型
+        /// </summary>
+        public ESpecialType? ESpecialType { get; set; }
+
+		/// <summary>
+		/// 错件类型
+		/// </summary>
+		[SugarColumn(ColumnDataType = "json", IsJson = true, IsNullable = true)]
+		public List<ReTransactError> ReTransactError { get; set; }
+
+
 	}
+
+    //public class ReTransactError { 
+    
+    //    public string OrgId { get; set; }
+
+    //    public string OrgName { get; set; }
+
+    //    public string ErrorId { get; set; }
+
+    //    public string ErrorName { get; set; }
+    //}
 }

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

@@ -210,4 +210,9 @@ public class SysDicTypeConsts
 	/// </summary>
 	public const string TranspondCity = "TranspondCity";
 
+	/// <summary>
+	/// 错件类型
+	/// </summary>
+	public const string ReTransactErrorType = "ReTransactErrorType";
+
 }

+ 15 - 0
src/XF.Domain/Constants/SettingConstants.cs

@@ -182,5 +182,20 @@ namespace XF.Domain.Constants
         /// </summary>
         public const string TranspondCity = "TranspondCity";
 
+		/// <summary>
+		/// 特提坐席权限
+		/// </summary>
+		public const string SpecialSeats = "SpecialSeats";
+
+		/// <summary>
+		/// 特提派单组权限
+		/// </summary>
+		public const string SpecialSendOrder = "SpecialSendOrder";
+
+		/// <summary>
+		/// 平均派单
+		/// </summary>
+		public const string AverageSendOrder = "AverageSendOrder";
+
 	}
 }