|
@@ -9,8 +9,10 @@ using Hotline.FlowEngine.Workflows;
|
|
|
using Hotline.Orders;
|
|
|
using Hotline.OrderTranspond;
|
|
|
using Hotline.Settings;
|
|
|
+using Hotline.Settings.TimeLimits;
|
|
|
using Hotline.Share.Dtos;
|
|
|
using Hotline.Share.Dtos.DataSharing.PusherHotlineDto;
|
|
|
+using Hotline.Share.Dtos.File;
|
|
|
using Hotline.Share.Dtos.FlowEngine;
|
|
|
using Hotline.Share.Dtos.Order;
|
|
|
using Hotline.Share.Dtos.OrderTranspond;
|
|
@@ -19,6 +21,7 @@ using Hotline.Share.Enums.Order;
|
|
|
using Hotline.Share.Enums.Quality;
|
|
|
using Hotline.Share.Mq;
|
|
|
using MapsterMapper;
|
|
|
+using StackExchange.Redis;
|
|
|
using XF.Domain.Dependency;
|
|
|
using XF.Domain.Exceptions;
|
|
|
using XF.Domain.Repository;
|
|
@@ -51,6 +54,8 @@ namespace Hotline.Application.Subscribers
|
|
|
private readonly ISystemOrganizeRepository _systemOrganizeRepository;
|
|
|
private readonly IRepository<TranspondCityRawData> _transpondCityRawDataRepository;
|
|
|
private readonly IRepository<Workflow> _workflowRepository;
|
|
|
+ private readonly IRepository<OrderComplement> _orderComplementRepository;
|
|
|
+ private readonly ITimeLimitDomainService _timeLimitDomainService;
|
|
|
private readonly IOrderApplication _orderApplication;
|
|
|
|
|
|
public DataSharingSubscriber(
|
|
@@ -75,6 +80,8 @@ namespace Hotline.Application.Subscribers
|
|
|
ISystemOrganizeRepository systemOrganizeRepository,
|
|
|
IRepository<TranspondCityRawData> transpondCityRawDataRepository,
|
|
|
IRepository<Workflow> workflowRepository,
|
|
|
+ IRepository<OrderComplement> orderComplementRepository,
|
|
|
+ ITimeLimitDomainService timeLimitDomainService,
|
|
|
IOrderApplication orderApplication
|
|
|
)
|
|
|
{
|
|
@@ -98,6 +105,8 @@ namespace Hotline.Application.Subscribers
|
|
|
_systemOrganizeRepository = systemOrganizeRepository;
|
|
|
_transpondCityRawDataRepository = transpondCityRawDataRepository;
|
|
|
_workflowRepository = workflowRepository;
|
|
|
+ _orderComplementRepository = orderComplementRepository;
|
|
|
+ _timeLimitDomainService = timeLimitDomainService;
|
|
|
_orderApplication = orderApplication;
|
|
|
}
|
|
|
|
|
@@ -112,11 +121,32 @@ namespace Hotline.Application.Subscribers
|
|
|
{
|
|
|
sendBack.Result = dto.Result;
|
|
|
sendBack.Reason = dto.Reason;
|
|
|
- var order = await _orderRepository.GetAsync(sendBack.OrderId, cancellationToken);
|
|
|
- order.Status = EOrderStatus.WaitForAccept;
|
|
|
- await _orderRepository.UpdateAsync(order, cancellationToken);
|
|
|
+ if (dto.Files != null && dto.Files.Any())
|
|
|
+ {
|
|
|
+ sendBack.FileJson = await _fileRepository.AddFileAsync(dto.Files, sendBack.Id, string.Empty, cancellationToken);
|
|
|
+ }
|
|
|
+
|
|
|
if (dto.Result is 1)
|
|
|
{
|
|
|
+ var order = await _orderRepository.GetAsync(sendBack.OrderId, cancellationToken);
|
|
|
+ if (order is null)
|
|
|
+ throw new UserFriendlyException("无效工单编号");
|
|
|
+ var now = DateTime.Now;
|
|
|
+ var handleDuration = order.StartTime.HasValue
|
|
|
+ ? _timeLimitDomainService.CalcWorkTime(order.StartTime.Value,
|
|
|
+ now, order.ProcessType is EProcessType.Zhiban)
|
|
|
+ : 0;
|
|
|
+ var fileDuration = order.CenterToOrgTime.HasValue
|
|
|
+ ? _timeLimitDomainService.CalcWorkTime(order.CenterToOrgTime.Value,
|
|
|
+ now, order.ProcessType is EProcessType.Zhiban)
|
|
|
+ : 0;
|
|
|
+ var allDuration = order.StartTime.HasValue
|
|
|
+ ? _timeLimitDomainService.CalcWorkTime(order.StartTime.Value, now,
|
|
|
+ order.ProcessType is EProcessType.Zhiban)
|
|
|
+ : 0;
|
|
|
+ order.File(now, handleDuration, fileDuration, allDuration);
|
|
|
+ await _orderRepository.UpdateAsync(order, cancellationToken);
|
|
|
+
|
|
|
var current = SessionContextCreator.CreateSessionContext(dto.Source);
|
|
|
if (string.IsNullOrEmpty(order.WorkflowId))
|
|
|
{
|
|
@@ -177,6 +207,11 @@ namespace Hotline.Application.Subscribers
|
|
|
[CapSubscribe(Hotline.Share.Mq.EventNames.SharingOrderRemind)]
|
|
|
public async Task RecOrderUrgeAsync(ProvinceOrderUrgeDto dto, CancellationToken cancellationToken)
|
|
|
{
|
|
|
+ var exists = await _orderUrgeRepository.Queryable()
|
|
|
+ .AnyAsync(d => d.DsBisId == dto.DsBisId, cancellationToken);
|
|
|
+ if (exists)
|
|
|
+ throw new UserFriendlyException($"收到重复催办编号: {dto.DsBisId}");
|
|
|
+
|
|
|
var order = await _orderRepository.Queryable().Where(x => x.ProvinceNo == dto.CaseSerial).FirstAsync(cancellationToken);
|
|
|
var model = new OrderUrge();
|
|
|
model.InitId();
|
|
@@ -246,6 +281,11 @@ namespace Hotline.Application.Subscribers
|
|
|
[CapSubscribe(Hotline.Share.Mq.EventNames.SharingOrderSupervise)]
|
|
|
public async Task RecOrderSuperviseAsync(ProvinceSendOrderSuperviseDto dto, CancellationToken cancellationToken)
|
|
|
{
|
|
|
+ var exists = await _orderSuperviseRepository.Queryable()
|
|
|
+ .AnyAsync(d => d.SuperviseSerial == dto.ProvinceOrderSuperviseDto.SuperviseSerial, cancellationToken);
|
|
|
+ if (exists)
|
|
|
+ throw new UserFriendlyException($"收到重复督办编号: {dto.ProvinceOrderSuperviseDto.SuperviseSerial}");
|
|
|
+
|
|
|
var order = await _orderRepository.Queryable().Where(x => x.ProvinceNo == dto.ProvinceOrderSuperviseDto!.CaseSerial).FirstAsync(cancellationToken);
|
|
|
var org = await _systemOrganizeRepository.GetAsync(x => x.Id == order.ActualHandleOrgCode, cancellationToken);
|
|
|
var model = new OrderSupervise();
|
|
@@ -271,11 +311,16 @@ namespace Hotline.Application.Subscribers
|
|
|
[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);
|
|
|
+ //var order = await _orderRepository.Queryable()
|
|
|
+ // .Where(x => x.ProvinceNo == dto.ProvinceScreenResult!.CaseSerial)
|
|
|
+ // .FirstAsync(cancellationToken);
|
|
|
+ //var orderScreen = await _orderScreenRepository.Queryable()
|
|
|
+ // .Where(x => x.OrderId == order.Id && x.Status == Share.Enums.Order.EScreenStatus.Approval)
|
|
|
+ // .FirstAsync(cancellationToken);
|
|
|
+
|
|
|
var orderScreen = await _orderScreenRepository.Queryable()
|
|
|
- .Where(x => x.OrderId == order.Id && x.Status == Share.Enums.Order.EScreenStatus.Approval)
|
|
|
+ .Where(x => x.Order.ProvinceNo == dto.ProvinceScreenResult.CaseSerial &&
|
|
|
+ x.Status == EScreenStatus.Approval)
|
|
|
.FirstAsync(cancellationToken);
|
|
|
|
|
|
var current = SessionContextCreator.CreateSessionContext(dto.Source);
|
|
@@ -435,8 +480,9 @@ namespace Hotline.Application.Subscribers
|
|
|
await _workflowApplication.HandleToEndAsync(current, orderDelay.WorkflowId, dto.Opinion, dto.Files,
|
|
|
dto.IsPass ? EReviewResult.Approval : EReviewResult.Failed, cancellationToken);
|
|
|
|
|
|
- //await _workflowApplication.JumpToEndAsync(current, orderDelay.WorkflowId, dto.Opinion, dto.Files,
|
|
|
- // dto.IsPass ? EReviewResult.Approval : EReviewResult.Failed, cancellationToken);
|
|
|
+ if (dto.Files != null && dto.Files.Any())
|
|
|
+ orderDelay.FileJson = await _fileRepository.AddFileAsync(dto.Files, orderDelay.Id, orderDelay.WorkflowId, cancellationToken);
|
|
|
+ await _orderDelayRepository.UpdateAsync(orderDelay, cancellationToken);
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -464,7 +510,7 @@ namespace Hotline.Application.Subscribers
|
|
|
{
|
|
|
case "0":
|
|
|
//退回:撤回至发起人
|
|
|
- await _workflowDomainService.RecallToStartStepAsync(order.WorkflowId, dto.Opinion, current, cancellationToken);
|
|
|
+ await _workflowDomainService.RecallToStartStepAsync(order.WorkflowId, dto.Opinion, current, cancellationToken);//todo think是否需要保存附件至省平台办理节点?
|
|
|
break;
|
|
|
case "1":
|
|
|
//办结:归档
|
|
@@ -472,6 +518,22 @@ namespace Hotline.Application.Subscribers
|
|
|
cancellationToken: cancellationToken);
|
|
|
break;
|
|
|
}
|
|
|
+
|
|
|
+ var now = DateTime.Now;
|
|
|
+ var handleDuration = order.StartTime.HasValue
|
|
|
+ ? _timeLimitDomainService.CalcWorkTime(order.StartTime.Value,
|
|
|
+ now, order.ProcessType is EProcessType.Zhiban)
|
|
|
+ : 0;
|
|
|
+ var fileDuration = order.CenterToOrgTime.HasValue
|
|
|
+ ? _timeLimitDomainService.CalcWorkTime(order.CenterToOrgTime.Value,
|
|
|
+ now, order.ProcessType is EProcessType.Zhiban)
|
|
|
+ : 0;
|
|
|
+ var allDuration = order.StartTime.HasValue
|
|
|
+ ? _timeLimitDomainService.CalcWorkTime(order.StartTime.Value, now,
|
|
|
+ order.ProcessType is EProcessType.Zhiban)
|
|
|
+ : 0;
|
|
|
+ order.File(now, handleDuration, fileDuration, allDuration);
|
|
|
+ await _orderRepository.UpdateAsync(order, cancellationToken);
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
@@ -531,6 +593,93 @@ namespace Hotline.Application.Subscribers
|
|
|
await _orderDomainService.AddOrderComplementAsync(dto, cancellationToken);
|
|
|
}
|
|
|
|
|
|
+ public async Task RecFilesAsync(ReceiveFilesFromDsDto dto, CancellationToken cancellationToken)
|
|
|
+ {
|
|
|
+ if (dto.Files == null || !dto.Files.Any())
|
|
|
+ throw new UserFriendlyException("未收到任何附件");
|
|
|
+
|
|
|
+ switch (dto.DsBisType)
|
|
|
+ {
|
|
|
+ case EDsBisType.AcceptOrder:
|
|
|
+ var order = await _orderRepository.GetAsync(d => d.ProvinceNo == dto.ProvinceNo, cancellationToken);
|
|
|
+ if (order is null)
|
|
|
+ throw new UserFriendlyException("无效省工单编号");
|
|
|
+
|
|
|
+ order.FileJson = await _fileRepository.AddFileAsync(dto.Files, order.Id, order.WorkflowId ?? string.Empty, cancellationToken);
|
|
|
+ await _orderRepository.UpdateAsync(order, cancellationToken);
|
|
|
+ break;
|
|
|
+ case EDsBisType.OrderPreviousResult:
|
|
|
+ var sendBack = await _orderSendBackRepository.Queryable()
|
|
|
+ .Where(d => d.Order.ProvinceNo == dto.ProvinceNo)
|
|
|
+ .FirstAsync(cancellationToken);
|
|
|
+ if (sendBack is null)
|
|
|
+ throw new UserFriendlyException("无效省工单退回编号");
|
|
|
+
|
|
|
+ sendBack.FileJson = await _fileRepository.AddFileAsync(dto.Files, sendBack.Id, string.Empty, cancellationToken);
|
|
|
+ await _orderSendBackRepository.UpdateAsync(sendBack, cancellationToken);
|
|
|
+ break;
|
|
|
+ case EDsBisType.SendOrderSupervise:
|
|
|
+ var orderSupervise = await _orderSuperviseRepository
|
|
|
+ .GetAsync(d => d.SuperviseSerial == dto.SuperviseId, cancellationToken);
|
|
|
+ if (orderSupervise is null)
|
|
|
+ throw new UserFriendlyException("无效省工单督办编号");
|
|
|
+
|
|
|
+ orderSupervise.FileJson = await _fileRepository.AddFileAsync(dto.Files, orderSupervise.Id, "", cancellationToken);
|
|
|
+ await _orderSuperviseRepository.AddAsync(orderSupervise, cancellationToken);
|
|
|
+ break;
|
|
|
+ case EDsBisType.SendOrderUrge:
|
|
|
+ var orderUrge = await _orderUrgeRepository
|
|
|
+ .GetAsync(d => d.DsBisId == dto.DsBisId, cancellationToken);
|
|
|
+ if (orderUrge is null)
|
|
|
+ throw new UserFriendlyException("无效省工单催办业务编号");
|
|
|
+
|
|
|
+ orderUrge.FileJson = await _fileRepository.AddFileAsync(dto.Files, orderUrge.Id, "", cancellationToken);
|
|
|
+ await _orderUrgeRepository.UpdateAsync(orderUrge, cancellationToken);
|
|
|
+ break;
|
|
|
+ case EDsBisType.OrderScreenResult:
|
|
|
+ var orderScreen = await _orderScreenRepository.Queryable()
|
|
|
+ .Where(x => x.Order.ProvinceNo == dto.ProvinceNo && x.Status == Share.Enums.Order.EScreenStatus.Approval)
|
|
|
+ .FirstAsync(cancellationToken);
|
|
|
+ if (orderScreen is null)
|
|
|
+ throw new UserFriendlyException("未查询到对应省工单甄别数据");
|
|
|
+
|
|
|
+ orderScreen.FileJson = await _fileRepository.AddFileAsync(dto.Files, orderScreen.Id, "", cancellationToken);
|
|
|
+ await _orderScreenRepository.UpdateAsync(orderScreen, cancellationToken);
|
|
|
+ break;
|
|
|
+ case EDsBisType.OrderDelayResult:
|
|
|
+ var orderDelay = await _orderDelayRepository.Queryable()
|
|
|
+ .Where(d => d.Order.ProvinceNo == dto.ProvinceNo && d.DelayState == EDelayState.Examining)
|
|
|
+ .FirstAsync(cancellationToken);
|
|
|
+ if (orderDelay is null)
|
|
|
+ throw new UserFriendlyException($"未查询到延期数据, ProvinceNo: {dto.ProvinceNo}");
|
|
|
+
|
|
|
+ if (dto.Files != null && dto.Files.Any())
|
|
|
+ orderDelay.FileJson = await _fileRepository.AddFileAsync(dto.Files, orderDelay.Id, orderDelay.WorkflowId, cancellationToken);
|
|
|
+ await _orderDelayRepository.UpdateAsync(orderDelay, cancellationToken);
|
|
|
+ break;
|
|
|
+ case EDsBisType.SendOrderComplement:
|
|
|
+ var complement = await _orderComplementRepository
|
|
|
+ .GetAsync(d => d.DsBisId == dto.DsBisId, cancellationToken);
|
|
|
+ if (complement is null)
|
|
|
+ throw new UserFriendlyException(
|
|
|
+ $"未查询到补充信息, ProvinceNo: {dto.ProvinceNo}, DsBisIs: {dto.DsBisId}");
|
|
|
+
|
|
|
+ if (dto.Files.Any()) complement.FileJson = await _fileRepository.AddFileAsync(dto.Files, complement.Id, "", cancellationToken);
|
|
|
+ await _orderComplementRepository.UpdateAsync(complement, cancellationToken);
|
|
|
+ break;
|
|
|
+ case EDsBisType.OrderHandleResult:
|
|
|
+ var order1 = await _orderRepository.GetAsync(d=>d.ProvinceNo == dto.ProvinceNo, cancellationToken);
|
|
|
+ if (order1 is null)
|
|
|
+ throw new UserFriendlyException($"无效工单编号, ProvinceNo: {dto.ProvinceNo}");
|
|
|
+ if (string.IsNullOrEmpty(order1.WorkflowId))
|
|
|
+ throw new UserFriendlyException($"该工单未开启流程,ProvinceNo: {dto.ProvinceNo}");
|
|
|
+ await _workflowApplication.UpdateProvinceHandleResultFilesAsync(order1.WorkflowId, dto.Files, cancellationToken);
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ throw new ArgumentOutOfRangeException();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
/// <summary>
|
|
|
/// 接收市州互转返回数据
|
|
|
/// </summary>
|