|
@@ -1,11 +1,19 @@
|
|
|
using DotNetCore.CAP;
|
|
|
+using Hotline.Application.CallCenter;
|
|
|
+using Hotline.Configurations;
|
|
|
+using Hotline.FlowEngine.Workflows;
|
|
|
using Hotline.Orders;
|
|
|
+using Hotline.Share.Dtos.FlowEngine.Workflow;
|
|
|
using Hotline.Share.Dtos.Order;
|
|
|
+using Hotline.Share.Dtos.TrCallCenter;
|
|
|
+using Hotline.Share.Enums.FlowEngine;
|
|
|
using Hotline.Share.Enums.Order;
|
|
|
using MapsterMapper;
|
|
|
using Microsoft.AspNetCore.Authorization;
|
|
|
using Microsoft.AspNetCore.Mvc;
|
|
|
+using Microsoft.Extensions.Options;
|
|
|
using SqlSugar;
|
|
|
+using XF.Domain.Repository;
|
|
|
|
|
|
namespace Hotline.Api.Controllers
|
|
|
{
|
|
@@ -15,16 +23,25 @@ namespace Hotline.Api.Controllers
|
|
|
private readonly IOrderRepository _orderRepository;
|
|
|
private readonly IMapper _mapper;
|
|
|
private readonly ICapPublisher _capPublisher;
|
|
|
+ private readonly IRepository<WorkflowTrace> _workflowTraceRepository;
|
|
|
+ private readonly ICallApplication _callApplication;
|
|
|
+ private readonly IOptionsSnapshot<AppConfiguration> _appOptions;
|
|
|
|
|
|
public PushProvinceController(ILogger<PushProvinceController> logger,
|
|
|
IOrderRepository orderRepository,
|
|
|
IMapper mapper,
|
|
|
- ICapPublisher capPublisher)
|
|
|
+ ICapPublisher capPublisher,
|
|
|
+ IRepository<WorkflowTrace> workflowTraceRepository,
|
|
|
+ ICallApplication callApplication,
|
|
|
+ IOptionsSnapshot<AppConfiguration> appOptions)
|
|
|
{
|
|
|
_logger = logger;
|
|
|
_orderRepository = orderRepository;
|
|
|
_mapper = mapper;
|
|
|
_capPublisher = capPublisher;
|
|
|
+ _workflowTraceRepository = workflowTraceRepository;
|
|
|
+ _callApplication = callApplication;
|
|
|
+ _appOptions = appOptions;
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
@@ -37,14 +54,14 @@ namespace Hotline.Api.Controllers
|
|
|
public async Task PushNewOrder(string Provinces)
|
|
|
{
|
|
|
Provinces = Provinces.Trim();
|
|
|
- string[] no = Provinces.Split(',');
|
|
|
- for (int i = 0; i < no.Length; i++)
|
|
|
+ string[] provinceNos = Provinces.Split(',');
|
|
|
+ for (int i = 0; i < provinceNos.Length; i++)
|
|
|
{
|
|
|
- no[i] = no[i].Trim();
|
|
|
+ provinceNos[i] = provinceNos[i].Trim();
|
|
|
}
|
|
|
|
|
|
var list = await _orderRepository.Queryable()
|
|
|
- .Where(x => no.Contains(x.ProvinceNo) && x.Status == EOrderStatus.Visited).ToListAsync();
|
|
|
+ .Where(x => provinceNos.Contains(x.ProvinceNo) && x.Status == EOrderStatus.Visited).ToListAsync();
|
|
|
if (list != null && list.Any())
|
|
|
{
|
|
|
foreach (var item in list)
|
|
@@ -67,14 +84,14 @@ namespace Hotline.Api.Controllers
|
|
|
public async Task PublishVisitToProvinceByNo(string Provinces)
|
|
|
{
|
|
|
Provinces = Provinces.Trim();
|
|
|
- string[] no = Provinces.Split(',');
|
|
|
- for (int i = 0; i < no.Length; i++)
|
|
|
+ string[] provinceNos = Provinces.Split(',');
|
|
|
+ for (int i = 0; i < provinceNos.Length; i++)
|
|
|
{
|
|
|
- no[i] = no[i].Trim();
|
|
|
+ provinceNos[i] = provinceNos[i].Trim();
|
|
|
}
|
|
|
var list = await _orderRepository.Queryable()
|
|
|
.Includes(x => x.OrderVisits.Where(q => q.VisitState == EVisitState.Visited).ToList(), d => d.OrderVisitDetails)
|
|
|
- .Where(x => no.Contains(x.ProvinceNo) && x.Status == EOrderStatus.Visited).ToListAsync();
|
|
|
+ .Where(x => provinceNos.Contains(x.ProvinceNo) && x.Status == EOrderStatus.Visited).ToListAsync();
|
|
|
|
|
|
foreach (var item in list)
|
|
|
{
|
|
@@ -105,6 +122,61 @@ namespace Hotline.Api.Controllers
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-
|
|
|
+ /// <summary>
|
|
|
+ /// 推送工单归档数据
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="Provinces"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpPost("pushfiledtoprovince")]
|
|
|
+ [AllowAnonymous]
|
|
|
+ public async Task PushFiledToProvince(string Provinces)
|
|
|
+ {
|
|
|
+ Provinces = Provinces.Trim();
|
|
|
+ string[] provinceNos = Provinces.Split(',');
|
|
|
+ for (int i = 0; i < provinceNos.Length; i++)
|
|
|
+ {
|
|
|
+ provinceNos[i] = provinceNos[i].Trim();
|
|
|
+ }
|
|
|
+
|
|
|
+ var unpublishOrders = await _orderRepository.Queryable()
|
|
|
+ .Where(d => provinceNos.Contains(d.ProvinceNo) && !string.IsNullOrEmpty(d.ProvinceNo) && d.Status >= EOrderStatus.Filed)
|
|
|
+ .ToListAsync(HttpContext.RequestAborted);
|
|
|
+
|
|
|
+ foreach (var order in unpublishOrders)
|
|
|
+ {
|
|
|
+ var trace = await _workflowTraceRepository.Queryable()
|
|
|
+ .FirstAsync(d => d.WorkflowId == order.WorkflowId && d.StepType == EStepType.End,
|
|
|
+ HttpContext.RequestAborted);
|
|
|
+ var orderFlowDto = new OrderFlowDto
|
|
|
+ {
|
|
|
+ Order = _mapper.Map<OrderDto>(order),
|
|
|
+ WorkflowTrace = _mapper.Map<WorkflowTraceDto>(trace)
|
|
|
+ };
|
|
|
+ if (order.SourceChannelCode == AppDefaults.SourceChannel.DianHua &&
|
|
|
+ !string.IsNullOrEmpty(order.CallId))
|
|
|
+ {
|
|
|
+ if (_appOptions.Value.GetDefaultAppScopeConfiguration().CallCenterType == AppDefaults.CallCenterType.TianRun)
|
|
|
+ {
|
|
|
+ var callRecord = await _callApplication.GetTianrunCallAsync(order.CallId, HttpContext.RequestAborted);
|
|
|
+ if (callRecord != null)
|
|
|
+ {
|
|
|
+ orderFlowDto.TrCallRecordDto = _mapper.Map<TrCallDto>(callRecord);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else if (_appOptions.Value.GetDefaultAppScopeConfiguration().CallCenterType == AppDefaults.CallCenterType.XingTang)
|
|
|
+ {
|
|
|
+ var call = await _callApplication.GetCallAsync(order.CallId, HttpContext.RequestAborted);
|
|
|
+ if (call is not null)
|
|
|
+ orderFlowDto.TrCallRecordDto = _mapper.Map<TrCallDto>(call);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //这里需要判断是否是警情退回
|
|
|
+ orderFlowDto.IsNonPoliceReturn = false;
|
|
|
+ await _capPublisher.PublishAsync(Hotline.Share.Mq.EventNames.HotlineOrderFiled, orderFlowDto, cancellationToken: HttpContext.RequestAborted);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
}
|
|
|
}
|