|
@@ -15,7 +15,7 @@ using XF.Domain.Exceptions;
|
|
|
|
|
|
namespace Hotline.Application.Handlers.Order
|
|
|
{
|
|
|
- public class ReceiveOrderNotifyHandler : IRequestHandler<ReceiveOrderNotify, AddOrderResponse>
|
|
|
+ public class ReceiveOrderNotifyHandler : IRequestHandler<ReceiveOrderNotify, AddOrderResponse?>
|
|
|
{
|
|
|
private readonly IOrderRepository _orderRepository;
|
|
|
private readonly IOrderDomainService _orderDomainService;
|
|
@@ -38,9 +38,53 @@ namespace Hotline.Application.Handlers.Order
|
|
|
/// <param name="request">The request</param>
|
|
|
/// <param name="cancellationToken">Cancellation token</param>
|
|
|
/// <returns>Response from the request</returns>
|
|
|
- public async Task<AddOrderResponse> Handle(ReceiveOrderNotify request, CancellationToken cancellationToken)
|
|
|
+ public Task<AddOrderResponse?> Handle(ReceiveOrderNotify request, CancellationToken cancellationToken)
|
|
|
{
|
|
|
var dto = request.AddOrderDto;
|
|
|
+ switch (dto.Source)
|
|
|
+ {
|
|
|
+ case ESource.ProvinceStraight:
|
|
|
+ return ReceiveOrderFromProvinceAsync(dto, cancellationToken);
|
|
|
+ case ESource.Police110:
|
|
|
+ case ESource.CityDataExchangeLz:
|
|
|
+ case ESource.ConvergenceMedia:
|
|
|
+ return ReceiveOrderFromOtherPlatformAsync(dto, cancellationToken);
|
|
|
+ case ESource.Hotline:
|
|
|
+ case ESource.HotlineImport:
|
|
|
+ default:
|
|
|
+ throw new ArgumentOutOfRangeException();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 接受外部工单(除省平台)
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="dto"></param>
|
|
|
+ /// <param name="cancellationToken"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ private async Task<AddOrderResponse?> ReceiveOrderFromOtherPlatformAsync(AddOrderDto dto,
|
|
|
+ CancellationToken cancellationToken)
|
|
|
+ {
|
|
|
+ if (string.IsNullOrEmpty(dto.ExternalId))
|
|
|
+ throw new UserFriendlyException("工单外部编号不能为空");
|
|
|
+
|
|
|
+ var exists = await _orderRepository.AnyAsync(d => d.ExternalId == dto.ExternalId, cancellationToken);
|
|
|
+ if (exists) return null;
|
|
|
+ var order = _mapper.Map<Hotline.Orders.Order>(dto);
|
|
|
+ var orderId = await _orderDomainService.AddAsync(order, cancellationToken);
|
|
|
+ return new AddOrderResponse
|
|
|
+ {
|
|
|
+ Id = orderId,
|
|
|
+ No = order.No,
|
|
|
+ Password = order.Password!
|
|
|
+ };
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 接受省平台工单
|
|
|
+ /// </summary>
|
|
|
+ private async Task<AddOrderResponse?> ReceiveOrderFromProvinceAsync(AddOrderDto dto, CancellationToken cancellationToken)
|
|
|
+ {
|
|
|
if (string.IsNullOrEmpty(dto.ProvinceNo))
|
|
|
throw new UserFriendlyException("无效省工单编号");
|
|
|
|
|
@@ -64,19 +108,16 @@ namespace Hotline.Application.Handlers.Order
|
|
|
{
|
|
|
Id = orderId,
|
|
|
No = order.No,
|
|
|
- Password = order.Password
|
|
|
+ Password = order.Password!
|
|
|
};
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- if (order.Source is ESource.ProvinceStraight)
|
|
|
- {
|
|
|
- //todo 特提(撤回至发起)
|
|
|
+ // 特提(撤回至发起)
|
|
|
+ if (!string.IsNullOrEmpty(order.WorkflowId))
|
|
|
await _workflowApplication.RecallToStartAsync(order.WorkflowId, "省工单重派", cancellationToken);
|
|
|
- }
|
|
|
-
|
|
|
return _mapper.Map<AddOrderResponse>(order);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
-}
|
|
|
+}
|