|
@@ -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);
|