田爽 1 year ago
parent
commit
75eb7fd5b3

+ 67 - 22
src/Hotline.Api/Controllers/OrderController.cs

@@ -45,6 +45,7 @@ using Hotline.Push.Notifies;
 using Hotline.Users;
 using MongoDB.Driver;
 using System.Threading;
+using Microsoft.AspNetCore.Authorization;
 
 namespace Hotline.Api.Controllers;
 
@@ -1240,7 +1241,7 @@ public class OrderController : BaseController
     [HttpGet("delay")]
     public async Task<PagedDto<OrderDelayDto>> DelayList([FromQuery] DelayListDto dto)
     {
-        var (total, items) = await _orderDelayRepository.Queryable(permissionVerify:true)
+        var (total, items) = await _orderDelayRepository.Queryable(permissionVerify: true)
             .Includes(x => x.Order)
             .Includes(x => x.Workflow)
             .WhereIF(!string.IsNullOrEmpty(dto.Keyword),
@@ -2010,17 +2011,17 @@ public class OrderController : BaseController
     [HttpGet]
     public async Task<PagedDto<OrderDto>> Query([FromQuery] QueryOrderDto dto)
     {
-        var (total, items) = await _orderRepository.Queryable(permissionVerify:true)
-            .Includes(x=>x.OrderScreens)
+        var (total, items) = await _orderRepository.Queryable(permissionVerify: true)
+            .Includes(x => x.OrderScreens)
             .WhereIF(!string.IsNullOrEmpty(dto.Keyword), d => d.Title.Contains(dto.Keyword!)) //标题
-            .WhereIF(!string.IsNullOrEmpty(dto.ProvinceNo), d=> d.ProvinceNo.Contains(dto.ProvinceNo)) //省本地编号
-            .WhereIF(!string.IsNullOrEmpty(dto.No),d=>d.No.Contains(dto.No)) //工单编码
-            //.WhereIF(!string.IsNullOrEmpty(dto.Content), d => d.Content.Contains(dto.Content!))
+            .WhereIF(!string.IsNullOrEmpty(dto.ProvinceNo), d => d.ProvinceNo.Contains(dto.ProvinceNo)) //省本地编号
+            .WhereIF(!string.IsNullOrEmpty(dto.No), d => d.No.Contains(dto.No)) //工单编码
+                                                                                //.WhereIF(!string.IsNullOrEmpty(dto.Content), d => d.Content.Contains(dto.Content!))
             .WhereIF(dto.AcceptTypes.Any(), d => dto.AcceptTypes.Contains(d.AcceptType)) //受理类型
             .WhereIF(dto.Channels.Any(), d => dto.Channels.Contains(d.SourceChannelCode)) //来源渠道
             .WhereIF(dto.HotspotIds.Any(), d => dto.HotspotIds.Contains(d.HotspotId)) //热点类型
             .WhereIF(!string.IsNullOrEmpty(dto.TransferPhone), d => d.TransferPhone.Contains(dto.TransferPhone!)) //转接号码
-            //.WhereIF(dto.OrgCodes.Any(), d => d.Workflow.Assigns.Any(s => dto.OrgCodes.Contains(s.OrgCode)))
+                                                                                                                  //.WhereIF(dto.OrgCodes.Any(), d => d.Workflow.Assigns.Any(s => dto.OrgCodes.Contains(s.OrgCode)))
             .WhereIF(dto.OrgCodes.Any(), d => dto.OrgCodes.Contains(d.Workflow.ActualHandleOrgCode)) //接办部门
             .WhereIF(!string.IsNullOrEmpty(dto.NameOrNo), d => d.AcceptorName.Contains(dto.NameOrNo!) || d.AcceptorStaffNo.Contains(dto.NameOrNo!)) //受理人/坐席
             .WhereIF(dto.CreationTimeStart.HasValue, d => d.CreationTime >= dto.CreationTimeStart) //受理时间开始
@@ -2031,16 +2032,16 @@ public class OrderController : BaseController
             .WhereIF(dto.ExpiredTimeStart.HasValue, d => d.ExpiredTime >= dto.ExpiredTimeStart) //超期时间开始
             .WhereIF(dto.ExpiredTimeEnd.HasValue, d => d.ExpiredTime <= dto.ExpiredTimeEnd) //超期时间结束
             .WhereIF(dto.Statuses.Any(), d => dto.Statuses.Contains(d.Status))  //工单状态
-            .WhereIF(dto.Statuses.Any(d => d == EOrderStatus.BackToUnAccept), d => d.Status <= EOrderStatus.BackToUnAccept) 
-            .WhereIF(!string.IsNullOrEmpty(dto.ActualHandlerName),d=>d.ActualHandlerName.Contains(dto.ActualHandlerName)) //接办人
-            .WhereIF(dto.IsScreen==true,d=>d.OrderScreens.Any(x=>x.Status != EScreenStatus.Refuse)) //有甄别
-            .WhereIF(dto.IsScreen==false,d=>!d.OrderScreens.Any(x=>x.Status != EScreenStatus.Refuse)) //无甄别
-            .WhereIF(!string.IsNullOrEmpty(dto.CurrentStepCode),d=> d.CurrentStepCode == dto.CurrentStepCode) //当前办理节点
-            .WhereIF(dto.ActualHandleTimeStart.HasValue,d=>d.ActualHandleTime>= dto.ActualHandleTimeStart) //办结时间开始
-            .WhereIF(dto.ActualHandleTimeEnd.HasValue,d=>d.ActualHandleTime<= dto.ActualHandleTimeEnd) //办结时间结束
-            .WhereIF(dto.IsOverTime==true ,d=>(d.ExpiredTime < DateTime.Now && d.Status< EOrderStatus.Filed) || (d.ExpiredTime < d.ActualHandleTime && d.Status >= EOrderStatus.Filed)) //是 超期
-            .WhereIF(dto.IsOverTime==false,d=>(d.ExpiredTime > DateTime.Now && d.Status< EOrderStatus.Filed) || (d.ExpiredTime > d.ActualHandleTime && d.Status >= EOrderStatus.Filed)) //否 超期
-            .WhereIF(dto.IdentityType!=null, d=>d.IdentityType == dto.IdentityType) //来电主体
+            .WhereIF(dto.Statuses.Any(d => d == EOrderStatus.BackToUnAccept), d => d.Status <= EOrderStatus.BackToUnAccept)
+            .WhereIF(!string.IsNullOrEmpty(dto.ActualHandlerName), d => d.ActualHandlerName.Contains(dto.ActualHandlerName)) //接办人
+            .WhereIF(dto.IsScreen == true, d => d.OrderScreens.Any(x => x.Status != EScreenStatus.Refuse)) //有甄别
+            .WhereIF(dto.IsScreen == false, d => !d.OrderScreens.Any(x => x.Status != EScreenStatus.Refuse)) //无甄别
+            .WhereIF(!string.IsNullOrEmpty(dto.CurrentStepCode), d => d.CurrentStepCode == dto.CurrentStepCode) //当前办理节点
+            .WhereIF(dto.ActualHandleTimeStart.HasValue, d => d.ActualHandleTime >= dto.ActualHandleTimeStart) //办结时间开始
+            .WhereIF(dto.ActualHandleTimeEnd.HasValue, d => d.ActualHandleTime <= dto.ActualHandleTimeEnd) //办结时间结束
+            .WhereIF(dto.IsOverTime == true, d => (d.ExpiredTime < DateTime.Now && d.Status < EOrderStatus.Filed) || (d.ExpiredTime < d.ActualHandleTime && d.Status >= EOrderStatus.Filed)) //是 超期
+            .WhereIF(dto.IsOverTime == false, d => (d.ExpiredTime > DateTime.Now && d.Status < EOrderStatus.Filed) || (d.ExpiredTime > d.ActualHandleTime && d.Status >= EOrderStatus.Filed)) //否 超期
+            .WhereIF(dto.IdentityType != null, d => d.IdentityType == dto.IdentityType) //来电主体
             .OrderByDescending(d => d.CreationTime)
             .ToPagedListAsync(dto, HttpContext.RequestAborted);
 
@@ -2216,6 +2217,50 @@ public class OrderController : BaseController
         return order.Id;
     }
 
+    [HttpPost("add-anonymous")]
+    [AllowAnonymous]
+    public async Task<string> AddAnonymous([FromBody] AddOrderDto dto)
+    {
+        var order = await _orderRepository.GetAsync(d => d.ExternalId == dto.ExternalId, HttpContext.RequestAborted);
+        if (order is not null)
+        {
+            if (order.Source == ESource.ProvinceStraight)
+            {
+                //todo 标记为重办
+            }
+            else
+            {
+                _mapper.Map(dto, order);
+            }
+
+            if (dto.Files.Any())
+                order.FileJson = await _fileRepository.AddFileAsync(dto.Files, order.Id, "", HttpContext.RequestAborted);
+
+            await _orderRepository.UpdateAsync(order, HttpContext.RequestAborted);
+        }
+        else
+        {
+            order = _mapper.Map<Order>(dto);
+            order.InitId();
+            if (dto.Files.Any())
+                order.FileJson = await _fileRepository.AddFileAsync(dto.Files, order.Id, "", HttpContext.RequestAborted);
+            await _orderDomainService.AddAsync(order, HttpContext.RequestAborted);
+        }
+
+        if (dto.RepeatableEventDetails?.Any() ?? false)
+        {
+            dto.RepeatableEventDetails.ForEach(x => x.OrderId = order.Id);
+            List<RepeatableEventDetail> repeatables =
+                _mapper.Map<List<RepeatableEventDetail>>(dto.RepeatableEventDetails);
+            await _repeatableEventDetailRepository.AddRangeAsync(repeatables, HttpContext.RequestAborted);
+        }
+
+        //内容分词
+        await _orderApplication.OrderParticiple(dto.Content, order.Id, HttpContext.RequestAborted);
+
+        return order.Id;
+    }
+
     /// <summary>
     /// 删除工单
     /// </summary>
@@ -2404,7 +2449,7 @@ public class OrderController : BaseController
             EmergencyLevelOptions = EnumExts.GetDescriptions<EEmergencyLevel>(),
             PushTypeOptions = _sysDicDataCacheManager.GetSysDicDataCache(SysDicTypeConsts.PushType),
             OrderStatusOptions = EnumExts.GetDescriptions<EOrderStatus>(),
-            CurrentStepOptions = definition?.Steps.Select(x=>new Kv(x.Code,x.Name)),
+            CurrentStepOptions = definition?.Steps.Select(x => new Kv(x.Code, x.Name)),
             IdentityTypeOptions = EnumExts.GetDescriptions<EIdentityType>()
         };
         return rsp;
@@ -2800,8 +2845,8 @@ public class OrderController : BaseController
 
         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 :"";
+        model.OrgId = orgs != null && orgs.Count > 0 ? orgs[0].Key : "";
+        model.OrgName = orgs != null && orgs.Count > 0 ? orgs[0].Value : "";
         //if (!dto.Audit) model.State = 1;
         //取消根据进入界面判断是否审批  最新按照系统配置设定
         var audit = true;
@@ -2855,7 +2900,7 @@ public class OrderController : BaseController
             }
 
             if (order != null && ("001170".Equals(model.OrgId) ||
-								  "001177".Equals(model.OrgId) ||
+                                  "001177".Equals(model.OrgId) ||
                                   "001180".Equals(model.OrgId)))
             {
                 await _capPublisher.PublishAsync(Hotline.Share.Mq.EventNames.HotlineOrderFlowRecalled,
@@ -2932,7 +2977,7 @@ public class OrderController : BaseController
 
             var order = await _orderRepository.GetAsync(x => x.Id == special.OrderId);
             if (order != null && ("001170".Equals(special.OrgId) ||
-								  "001177".Equals(special.OrgId) ||
+                                  "001177".Equals(special.OrgId) ||
                                   "001180".Equals(special.OrgId)))
             {
                 await _capPublisher.PublishAsync(Hotline.Share.Mq.EventNames.HotlineOrderFlowRecalled,

+ 172 - 17
src/Hotline.Application/Subscribers/DatasharingSubscriber.cs

@@ -4,6 +4,8 @@ using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
 using DotNetCore.CAP;
+using Hotline.Application.Quality;
+using Hotline.Orders;
 using Hotline.Application.FlowEngine;
 using Hotline.File;
 using Hotline.FlowEngine.Workflows;
@@ -11,6 +13,9 @@ using Hotline.Orders;
 using Hotline.Share.Dtos;
 using Hotline.Share.Dtos.DataSharing.PusherHotlineDto;
 using Hotline.Share.Dtos.Order;
+using Hotline.Share.Enums.Order;
+using Hotline.Share.Enums.Quality;
+using MapsterMapper;
 using Microsoft.AspNetCore.Http;
 using XF.Domain.Authentications;
 using XF.Domain.Dependency;
@@ -23,6 +28,23 @@ namespace Hotline.Application.Subscribers
     /// </summary>
     public class DataSharingSubscriber : ICapSubscribe, ITransientDependency
     {
+        private readonly IRepository<OrderVisit> _orderVisitRepository;
+        private readonly IRepository<OrderVisitDetail> _orderVisitDetailRepository;
+        private readonly IMapper _mapper;
+        private readonly IOrderRepository _orderRepository;
+        private readonly ICapPublisher _capPublisher;
+        private readonly IQualityApplication _qualityApplication;
+        private readonly IRepository<OrderDelay> _orderDelayRepository;
+
+        public DataSharingSubscriber(IRepository<OrderVisit> orderVisitRepository, IRepository<OrderVisitDetail> orderVisitDetailRepository, IMapper mapper, IOrderRepository orderRepository, ICapPublisher capPublisher, IQualityApplication qualityApplication, IRepository<OrderDelay> orderDelayRepository)
+        {
+            _orderVisitRepository = orderVisitRepository;
+            _orderVisitDetailRepository = orderVisitDetailRepository;
+            _mapper = mapper;
+            _orderRepository = orderRepository;
+            _capPublisher = capPublisher;
+            _orderDelayRepository = orderDelayRepository;
+        }
 	    private readonly IRepository<OrderSendBack> _orderSendBackRepository;
 	    private readonly IOrderRepository _orderRepository;
 	    private readonly IWorkflowApplication _workflowApplication;
@@ -75,20 +97,20 @@ namespace Hotline.Application.Subscribers
             }
 		}
 
-		/// <summary>
-		/// 服务工单撤单
-		/// </summary>
-		[CapSubscribe(Hotline.Share.Mq.EventNames.SharingOrderRevoke)]
+        /// <summary>
+        /// 服务工单撤单
+        /// </summary>
+        [CapSubscribe(Hotline.Share.Mq.EventNames.SharingOrderRevoke)]
         public async Task RecCancelOrderAsync(CancelOrderDto dto, CancellationToken cancellationToken)
         {
 	        var order = await _orderRepository.GetAsync(dto.OrderId, cancellationToken);
 			await _workflowApplication.JumpToEndAsync(order.WorkflowId, dto.Opinion, null, cancellationToken: cancellationToken);
 		}
 
-		/// <summary>
-		/// 服务工单催单
-		/// </summary>
-		[CapSubscribe(Hotline.Share.Mq.EventNames.SharingOrderRemind)]
+        /// <summary>
+        /// 服务工单催单
+        /// </summary>
+        [CapSubscribe(Hotline.Share.Mq.EventNames.SharingOrderRemind)]
         public async Task RecOrderUrgeAsync(ProvinceOrderUrgeDto dto, CancellationToken cancellationToken)
         {
             var order = await _orderRepository.Queryable().Where(x => x.ProvinceNo == dto.CaseSerial).FirstAsync(cancellationToken);
@@ -110,10 +132,10 @@ namespace Hotline.Application.Subscribers
 			}
 		}
 
-		/// <summary>
-		/// 督办工单派发接口
+        /// <summary>
+        /// 督办工单派发接口
         /// </summary>
-		[CapSubscribe(Hotline.Share.Mq.EventNames.SharingOrderSupervise)]
+        [CapSubscribe(Hotline.Share.Mq.EventNames.SharingOrderSupervise)]
         public async Task RecOrderSuperviseAsync(ProvinceSendOrderSuperviseDto dto, CancellationToken cancellationToken)
         {
 	        var order = await _orderRepository.Queryable().Where(x => x.ProvinceNo == dto.ProvinceOrderSuperviseDto!.CaseSerial).FirstAsync(cancellationToken);
@@ -131,10 +153,10 @@ namespace Hotline.Application.Subscribers
 			await _orderSuperviseRepository.AddAsync(model, cancellationToken);
 		}
 
-		/// <summary>
-		/// 服务工单甄别结果
+        /// <summary>
+        /// 服务工单甄别结果
         /// </summary>
-		[CapSubscribe(Hotline.Share.Mq.EventNames.SharingOrderScreen)]
+        [CapSubscribe(Hotline.Share.Mq.EventNames.SharingOrderScreen)]
         public async Task RecOrderScreenResultAsync(ProvinceSendScreenResultDto dto, CancellationToken cancellationToken)
         {
 	        var order = await _orderRepository.Queryable().Where(x => x.ProvinceNo == dto.ProvinceScreenResult!.CaseSerial).FirstAsync(cancellationToken);
@@ -159,12 +181,145 @@ namespace Hotline.Application.Subscribers
 			await _orderScreenRepository.UpdateAsync(orderScreen, cancellationToken);
 		}
 
-		/// <summary>
-		/// 更新工单受理附件
+        /// <summary>
+        /// 更新工单受理附件
         /// </summary>
-		[CapSubscribe(Hotline.Share.Mq.EventNames.SharingOrderUpdataFiles)]
+        [CapSubscribe(Hotline.Share.Mq.EventNames.SharingOrderUpdataFiles)]
         public async Task RecOrderUpdataFilesAsync(OrderUpdataFiles dto, CancellationToken cancellationToken)
         {
+
+        }
+
+        /// <summary>
+        /// 工单回访
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <param name="cancellationToken"></param>
+        /// <returns></returns>
+        [CapSubscribe(Hotline.Share.Mq.EventNames.SharingOrderVisitAllOther)]
+        public async Task OrderVisitWeb(OrderVisitWebDto dto, CancellationToken cancellationToken)
+        {
+            var visit = await _orderVisitRepository.Queryable()
+                .Includes(x => x.Order)
+                .Includes(x => x.OrderVisitDetails)
+                .FirstAsync(x => x.Id == dto.Id);
+            if (visit != null)
+            {
+                var first = dto.OrderVisitDetailDto.FirstOrDefault(x => x.VisitTarget == EVisitTarget.Org);
+
+                if (first != null)
+                {
+                    visit.NowEvaluate = first.OrgProcessingResults;
+                    visit.Order.Visited(first.OrgProcessingResults.Key, first.OrgProcessingResults.Value);
+                }
+                visit.VisitState = EVisitState.Visited;
+                visit.VisitTime = dto.VisitTime;
+                visit.VisitType = dto.VisitType;
+
+                for (int i = 0; i < visit.OrderVisitDetails.Count; i++)
+                {
+                    var detail = visit.OrderVisitDetails[i];
+                    var detaildto = dto.OrderVisitDetailDto.FirstOrDefault(x => x.Id == detail.Id);
+                    if (detaildto != null)
+                    {
+                        _mapper.Map(detaildto, visit.OrderVisitDetails[i]);
+                    }
+                }
+
+                await _orderVisitRepository.UpdateAsync(visit, cancellationToken);
+                await _orderVisitDetailRepository.UpdateRangeAsync(visit.OrderVisitDetails, cancellationToken);
+                await _orderRepository.UpdateAsync(visit.Order, cancellationToken);
+                var orderDto = _mapper.Map<OrderDto>(visit.Order);
+                if (first != null)
+                {
+                    //推省上
+                    await _capPublisher.PublishAsync(Hotline.Share.Mq.EventNames.HotlineOrderVisited,
+                            new PublishVisitDto()
+                            {
+                                Order = orderDto,
+                                No = visit.No,
+                                VisitType = visit.VisitType,
+                                VisitName = visit.CreatorName,
+                                VisitTime = visit.VisitTime,
+                                VisitRemark = first.VisitContent,
+                                AreaCode = visit.Order.AreaCode!,
+                                SubjectResultSatifyCode = first.OrgProcessingResults.Key,
+                                FirstSatisfactionCode = visit.Order.FirstVisitResultCode!,
+                                ClientGuid = ""
+                            }, cancellationToken: cancellationToken);
+                }
+                //处理网站通知差评数据
+                //if (visit.Order.Source == ESource.Hotline && visit.OrderVisitDetails.Any(x => x.OrgHandledAttitude?.Key == "1" || x.OrgHandledAttitude?.Key == "2" || x.OrgProcessingResults?.Key == "1" || x.OrgProcessingResults?.Key == "2"))
+                //{
+                //    //处理老数据
+                //    visit.VisitState = EVisitState.None;
+                //    await _orderVisitRepository.UpdateAsync(visit, cancellationToken);
+                //    //推送老数据变更给门户
+                //    await _capPublisher.PublishAsync(Hotline.Share.Mq.EventNames.HotlineOrderVisitedWeb, new PublishVisitAllDto()
+                //    {
+                //        Id = visit.Id,
+                //        Order = orderDto,
+                //        OrderVisitDetails = _mapper.Map<List<VisitDetailDto>>(visit.OrderVisitDetails),
+                //        VisitTime = visit.VisitTime,
+                //        VisitType = visit.VisitType,
+                //        VisitState = visit.VisitState,
+                //        PublishTime = visit.PublishTime,
+                //    }, cancellationToken: cancellationToken);
+
+                //    //包含不满意数据,重新生成新的回访
+                //    var newOrderVisit = _mapper.Map<OrderVisit>(visit);
+                //    newOrderVisit.InitId();
+                //    newOrderVisit.VisitState = EVisitState.NoSatisfiedWaitForVisit;
+                //    newOrderVisit.VisitTime = null;
+                //    newOrderVisit.IsCanHandle = false;
+                //    newOrderVisit.IsCanAiVisit = false;
+                //    newOrderVisit.AiVisitCount = 0;
+                //    await _orderVisitRepository.AddAsync(newOrderVisit, cancellationToken);
+                //    var list = _mapper.Map<List<OrderVisitDetail>>(visit.OrderVisitDetails);
+                //    list.ForEach(x =>
+                //    {
+                //        x.VisitId = newOrderVisit.Id;
+                //        x.VoiceEvaluate = null;
+                //        x.VoiceEvaluate = null;
+                //        x.OrgHandledAttitude = null;
+                //        x.OrgNoSatisfiedReason = null;
+                //        x.OrgProcessingResults = null;
+                //        x.VisitContent = "";
+                //    });
+                //    await _orderVisitDetailRepository.AddRangeAsync(list, cancellationToken);
+                //    //推送新数据给门户
+                //    await _capPublisher.PublishAsync(Hotline.Share.Mq.EventNames.HotlineOrderVisitedWeb, new PublishVisitAllDto()
+                //    {
+                //        Id = newOrderVisit.Id,
+                //        Order = orderDto,
+                //        OrderVisitDetails = _mapper.Map<List<VisitDetailDto>>(list),
+                //        VisitTime = newOrderVisit.VisitTime,
+                //        VisitType = newOrderVisit.VisitType,
+                //        VisitState = newOrderVisit.VisitState,
+                //        PublishTime = newOrderVisit.PublishTime,
+                //    }, cancellationToken: cancellationToken);
+                //}
+                //else
+                //{
+                //写入质检
+                await _qualityApplication.AddQualityAsync(EQualitySource.Visit, orderDto.Id, visit.Id,
+                    cancellationToken);
+                //}
+            }
+        }
+
+        /// <summary>
+        /// 订阅省工单延期消息
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <param name="cancellationToken"></param>
+        /// <returns></returns>
+        [CapSubscribe(Hotline.Share.Mq.EventNames.SharingOrderDelayResult)]
+        public async Task OrderDelayWeb(DelayProvinceResultDto dto, CancellationToken cancellationToken)
+        {
+
+        }
+    }
 			if (dto == null && dto.Files.Any()) {
 				var order = await _orderRepository.GetAsync(dto.OrderId, cancellationToken);
 				order.FileJson = await _fileRepository.AddFileAsync(dto.Files, dto.OrderId, "", cancellationToken);

+ 4 - 112
src/Hotline.Application/Subscribers/OrderSubscriber.cs

@@ -19,126 +19,18 @@ namespace Hotline.Application.Subscribers
         private readonly IOrderRepository _orderRepository;
         private readonly ICapPublisher _capPublisher;
         private readonly IQualityApplication _qualityApplication;
+        private readonly IRepository<OrderDelay> _orderDelayRepository;
 
-        public OrderSubscriber(IRepository<OrderVisit> orderVisitRepository,IRepository<OrderVisitDetail> orderVisitDetailRepository,IMapper mapper,IOrderRepository orderRepository, ICapPublisher capPublisher, IQualityApplication qualityApplication)
+        public OrderSubscriber(IRepository<OrderVisit> orderVisitRepository,IRepository<OrderVisitDetail> orderVisitDetailRepository,IMapper mapper,IOrderRepository orderRepository, ICapPublisher capPublisher, IQualityApplication qualityApplication, IRepository<OrderDelay> orderDelayRepository)
         {
             _orderVisitRepository = orderVisitRepository;
             _orderVisitDetailRepository = orderVisitDetailRepository;
             _mapper = mapper;
             _orderRepository = orderRepository;
             _capPublisher = capPublisher;
+            _orderDelayRepository = orderDelayRepository;
         }
 
-        [CapSubscribe(Hotline.Share.Mq.EventNames.SharingOrderVisitAllOther)]
-        public async Task OrderVisitWeb(OrderVisitWebDto dto, CancellationToken cancellationToken)
-        {
-            var visit = await _orderVisitRepository.Queryable()
-                .Includes(x=>x.Order)
-                .Includes(x=>x.OrderVisitDetails)
-                .FirstAsync(x => x.Id == dto.Id);
-            if (visit != null)
-            {
-                var first = dto.OrderVisitDetailDto.FirstOrDefault(x => x.VisitTarget == EVisitTarget.Org);
-
-                if (first != null)
-                {
-                    visit.NowEvaluate = first.OrgProcessingResults;
-                    visit.Order.Visited(first.OrgProcessingResults.Key, first.OrgProcessingResults.Value);
-                }
-                visit.VisitState = EVisitState.Visited;
-                visit.VisitTime = dto.VisitTime;
-                visit.VisitType = dto.VisitType;
-
-                for (int i = 0; i < visit.OrderVisitDetails.Count; i++)
-                {
-                    var detail = visit.OrderVisitDetails[i];
-                    var detaildto = dto.OrderVisitDetailDto.FirstOrDefault(x => x.Id == detail.Id);
-                    if (detaildto != null)
-                    {
-                        _mapper.Map(detaildto, visit.OrderVisitDetails[i]);
-                    }
-                }
-
-                await _orderVisitRepository.UpdateAsync(visit, cancellationToken);
-                await _orderVisitDetailRepository.UpdateRangeAsync(visit.OrderVisitDetails, cancellationToken);
-                await _orderRepository.UpdateAsync(visit.Order, cancellationToken);
-                var orderDto = _mapper.Map<OrderDto>(visit.Order);
-                if (first != null)
-                {
-                    //推省上
-                    await _capPublisher.PublishAsync(Hotline.Share.Mq.EventNames.HotlineOrderVisited,
-                            new PublishVisitDto()
-                            {
-                                Order = orderDto,
-                                No = visit.No,
-                                VisitType = visit.VisitType,
-                                VisitName = visit.CreatorName,
-                                VisitTime = visit.VisitTime,
-                                VisitRemark = first.VisitContent,
-                                AreaCode = visit.Order.AreaCode!,
-                                SubjectResultSatifyCode = first.OrgProcessingResults.Key,
-                                FirstSatisfactionCode = visit.Order.FirstVisitResultCode!,
-                                ClientGuid = ""
-                            }, cancellationToken: cancellationToken);
-                }
-                //处理网站通知差评数据
-                //if (visit.Order.Source == ESource.Hotline && visit.OrderVisitDetails.Any(x => x.OrgHandledAttitude?.Key == "1" || x.OrgHandledAttitude?.Key == "2" || x.OrgProcessingResults?.Key == "1" || x.OrgProcessingResults?.Key == "2"))
-                //{
-                //    //处理老数据
-                //    visit.VisitState = EVisitState.None;
-                //    await _orderVisitRepository.UpdateAsync(visit, cancellationToken);
-                //    //推送老数据变更给门户
-                //    await _capPublisher.PublishAsync(Hotline.Share.Mq.EventNames.HotlineOrderVisitedWeb, new PublishVisitAllDto()
-                //    {
-                //        Id = visit.Id,
-                //        Order = orderDto,
-                //        OrderVisitDetails = _mapper.Map<List<VisitDetailDto>>(visit.OrderVisitDetails),
-                //        VisitTime = visit.VisitTime,
-                //        VisitType = visit.VisitType,
-                //        VisitState = visit.VisitState,
-                //        PublishTime = visit.PublishTime,
-                //    }, cancellationToken: cancellationToken);
-
-                //    //包含不满意数据,重新生成新的回访
-                //    var newOrderVisit = _mapper.Map<OrderVisit>(visit);
-                //    newOrderVisit.InitId();
-                //    newOrderVisit.VisitState = EVisitState.NoSatisfiedWaitForVisit;
-                //    newOrderVisit.VisitTime = null;
-                //    newOrderVisit.IsCanHandle = false;
-                //    newOrderVisit.IsCanAiVisit = false;
-                //    newOrderVisit.AiVisitCount = 0;
-                //    await _orderVisitRepository.AddAsync(newOrderVisit, cancellationToken);
-                //    var list = _mapper.Map<List<OrderVisitDetail>>(visit.OrderVisitDetails);
-                //    list.ForEach(x =>
-                //    {
-                //        x.VisitId = newOrderVisit.Id;
-                //        x.VoiceEvaluate = null;
-                //        x.VoiceEvaluate = null;
-                //        x.OrgHandledAttitude = null;
-                //        x.OrgNoSatisfiedReason = null;
-                //        x.OrgProcessingResults = null;
-                //        x.VisitContent = "";
-                //    });
-                //    await _orderVisitDetailRepository.AddRangeAsync(list, cancellationToken);
-                //    //推送新数据给门户
-                //    await _capPublisher.PublishAsync(Hotline.Share.Mq.EventNames.HotlineOrderVisitedWeb, new PublishVisitAllDto()
-                //    {
-                //        Id = newOrderVisit.Id,
-                //        Order = orderDto,
-                //        OrderVisitDetails = _mapper.Map<List<VisitDetailDto>>(list),
-                //        VisitTime = newOrderVisit.VisitTime,
-                //        VisitType = newOrderVisit.VisitType,
-                //        VisitState = newOrderVisit.VisitState,
-                //        PublishTime = newOrderVisit.PublishTime,
-                //    }, cancellationToken: cancellationToken);
-                //}
-                //else
-                //{
-                    //写入质检
-                    await _qualityApplication.AddQualityAsync(EQualitySource.Visit, orderDto.Id, visit.Id,
-                        cancellationToken);
-                //}
-            }
-        }
+       
     }
 }

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

@@ -222,6 +222,11 @@ namespace Hotline.Share.Dtos.Order
         public List<FileDto> Files { get; set; }
     }
 
+    public record OrderDelayWebDto
+    {
+
+    }
+
     public class PublishOrderDelayDto
     {
         public string Id { get; set; }