|
@@ -1,4 +1,5 @@
|
|
|
using DocumentFormat.OpenXml.Drawing.Charts;
|
|
|
+using DocumentFormat.OpenXml.Office2016.Drawing.ChartDrawing;
|
|
|
using DotNetCore.CAP;
|
|
|
using Hotline.Ai.Visit;
|
|
|
using Hotline.Application.CallCenter;
|
|
@@ -39,6 +40,7 @@ using Hotline.Share.Dtos.FlowEngine.Workflow;
|
|
|
using Hotline.Share.Dtos.Order;
|
|
|
using Hotline.Share.Dtos.Realtime;
|
|
|
using Hotline.Share.Dtos.TrCallCenter;
|
|
|
+using Hotline.Share.Enums.CallCenter;
|
|
|
using Hotline.Share.Enums.FlowEngine;
|
|
|
using Hotline.Share.Enums.JudicialManagement;
|
|
|
using Hotline.Share.Enums.Order;
|
|
@@ -54,6 +56,7 @@ using Microsoft.AspNetCore.Mvc;
|
|
|
using Microsoft.Extensions.Options;
|
|
|
using MiniExcelLibs;
|
|
|
using Newtonsoft.Json;
|
|
|
+using NPOI.POIFS.Crypt.Dsig;
|
|
|
using SqlSugar;
|
|
|
using StackExchange.Redis;
|
|
|
using System.Threading;
|
|
@@ -134,6 +137,7 @@ public class TestController : BaseController
|
|
|
//private readonly ICacheManager<User> _cache;
|
|
|
private readonly ICalcExpireTime _expireTime;
|
|
|
private readonly ICallNativeRepository _callNativeRepository;
|
|
|
+ private readonly IRepository<OldSendProData> _oldSendProDataRepository;
|
|
|
|
|
|
|
|
|
public TestController(
|
|
@@ -187,7 +191,8 @@ ICallApplication callApplication,
|
|
|
ISystemSettingCacheManager systemSettingCacheManager,
|
|
|
ICalcExpireTime expireTime
|
|
|
,
|
|
|
- ICallNativeRepository callNativeRepository)
|
|
|
+ ICallNativeRepository callNativeRepository,
|
|
|
+ IRepository<OldSendProData> oldSendProDataRepository)
|
|
|
{
|
|
|
_logger = logger;
|
|
|
//_authorizeGenerator = authorizeGenerator;
|
|
@@ -221,7 +226,6 @@ ICallApplication callApplication,
|
|
|
_qualityApplication = qualityApplication;
|
|
|
_enforcementApplication = enforcementApplication;
|
|
|
_workflowDomainService = workflowDomainService;
|
|
|
- _orderRepository = orderRepository;
|
|
|
_mapper = mapper;
|
|
|
_orderReportApplication = orderReportApplication;
|
|
|
_enforcementOrdersRepository = enforcementOrdersRepository;
|
|
@@ -237,8 +241,225 @@ ICallApplication callApplication,
|
|
|
_systemSettingCacheManager = systemSettingCacheManager;
|
|
|
_expireTime = expireTime;
|
|
|
_callNativeRepository = callNativeRepository;
|
|
|
+ _oldSendProDataRepository = oldSendProDataRepository;
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 修改泸州省工单编码区域
|
|
|
+ /// </summary>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpPost("updateoldsendprodata")]
|
|
|
+ [AllowAnonymous]
|
|
|
+ public async Task UpdateOldSendProData()
|
|
|
+ {
|
|
|
+ var list = await _oldSendProDataRepository.Queryable().Where(p => p.ProvinceNo.Contains("99511500")).ToListAsync();
|
|
|
+ if (list != null && list.Any())
|
|
|
+ {
|
|
|
+ foreach (var item in list)
|
|
|
+ {
|
|
|
+ var prono = item.ProvinceNo;
|
|
|
+ prono = prono.Replace("99511500", "99510500");
|
|
|
+ item.NewProvinceNo = prono;
|
|
|
+ await _oldSendProDataRepository.UpdateAsync(item);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 修改工单省编号
|
|
|
+ /// </summary>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpPost("updatesendprodata")]
|
|
|
+ [AllowAnonymous]
|
|
|
+ public async Task UpdateSendProData()
|
|
|
+ {
|
|
|
+ var list = await _oldSendProDataRepository.Queryable().Where(p => p.ProvinceNo.Contains("99511500")).ToListAsync();
|
|
|
+ if (list != null && list.Any())
|
|
|
+ {
|
|
|
+ foreach (var item in list)
|
|
|
+ {
|
|
|
+ var data = await _orderRepository.GetAsync(p => p.Id == item.Id, HttpContext.RequestAborted);
|
|
|
+ if (data != null)
|
|
|
+ {
|
|
|
+ data.ProvinceNo = item.NewProvinceNo;
|
|
|
+ await _orderRepository.Updateable(data).UpdateColumns(d => d.ProvinceNo).ExecuteCommandAsync(HttpContext.RequestAborted);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
+ /// <summary>
|
|
|
+ /// 从新推送省上数据
|
|
|
+ /// </summary>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpGet("sendpushprodata")]
|
|
|
+ [AllowAnonymous]
|
|
|
+ public async Task SendPushProData(string provinceNo)
|
|
|
+ {
|
|
|
+ //推送 受理信息、结果信息、过程信息、话务信息、回访信息
|
|
|
+ var list = await _oldSendProDataRepository.Queryable().WhereIF(!string.IsNullOrEmpty(provinceNo), p => p.ProvinceNo == provinceNo).ToListAsync();
|
|
|
+ if (list != null && list.Any())
|
|
|
+ {
|
|
|
+ foreach (var item in list)
|
|
|
+ {
|
|
|
+ var order = await _orderRepository.GetAsync(p => p.Id == item.Id, HttpContext.RequestAborted);
|
|
|
+ if (order != null)
|
|
|
+ {
|
|
|
+ //受理信息
|
|
|
+ #region 受理信息
|
|
|
+ //var publishCallRecordDto = new PublishCallRecrodDto() { };
|
|
|
+ //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)
|
|
|
+ // {
|
|
|
+ // publishCallRecordDto.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)
|
|
|
+ // {
|
|
|
+ // publishCallRecordDto.TrCallRecordDto = _mapper.Map<TrCallDto>(call);
|
|
|
+
|
|
|
+ // // 工单开始办理如果获取的通话记录是呼出并且录音文件是空就不推送通话记录
|
|
|
+ // // 如果 通话记录是呼入, 并且没有录音文件
|
|
|
+ // if (_systemSettingCacheManager.OrderStartHandlerPushCallIsNull && call.Direction == ECallDirection.Out && !string.IsNullOrEmpty(call.AudioFile))
|
|
|
+ // {
|
|
|
+ // publishCallRecordDto.TrCallRecordDto = null;
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ //}
|
|
|
+ //publishCallRecordDto.Order = _mapper.Map<OrderDto>(order);
|
|
|
+
|
|
|
+ //await _capPublisher.PublishAsync(EventNames.HotlineOrderFlowStarted, publishCallRecordDto,
|
|
|
+ // cancellationToken: HttpContext.RequestAborted);
|
|
|
+ #endregion
|
|
|
+
|
|
|
+ //结果信息
|
|
|
+ #region 受理信息、话务信息、结果信息
|
|
|
+ if (order != null)
|
|
|
+ {
|
|
|
+ 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);
|
|
|
+
|
|
|
+ // 工单开始办理如果获取的通话记录是呼出并且录音文件是空就不推送通话记录
|
|
|
+ // 如果 通话记录是呼入, 并且没有录音文件
|
|
|
+ if (_systemSettingCacheManager.OrderStartHandlerPushCallIsNull && call.Direction == ECallDirection.Out && !string.IsNullOrEmpty(call.AudioFile))
|
|
|
+ {
|
|
|
+ orderFlowDto.TrCallRecordDto = null;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //这里需要判断是否是警情退回
|
|
|
+ orderFlowDto.IsNonPoliceReturn = false;
|
|
|
+ await _capPublisher.PublishAsync(Hotline.Share.Mq.EventNames.HotlineOrderFiled, orderFlowDto, cancellationToken: HttpContext.RequestAborted);
|
|
|
+ //_logger.LogWarning($"推送完成: {order.ProvinceNo}");
|
|
|
+ }
|
|
|
+
|
|
|
+ #endregion
|
|
|
+
|
|
|
+ //过程信息
|
|
|
+ #region 过程信息
|
|
|
+ //查询过程数据
|
|
|
+
|
|
|
+ if (order != null)
|
|
|
+ {
|
|
|
+ var listStep = await _workflowTraceRepository.Queryable()
|
|
|
+ .Where(p => p.WorkflowId == order.WorkflowId && p.TraceState == EWorkflowTraceState.Normal).ToListAsync();
|
|
|
+ if (listStep != null && listStep.Any())
|
|
|
+ {
|
|
|
+ foreach (var itemStep in listStep)
|
|
|
+ {
|
|
|
+ var orderDto = _mapper.Map<OrderDto>(order);
|
|
|
+ var flowDto = new OrderFlowDto
|
|
|
+ {
|
|
|
+ Order = orderDto,
|
|
|
+ WorkflowTrace = _mapper.Map<WorkflowTraceDto>(itemStep),
|
|
|
+ ExpiredTimeChanged = false,
|
|
|
+ HandlerOrgLevel = itemStep.HandlerOrgId.CalcOrgLevel()
|
|
|
+ };
|
|
|
+ await _capPublisher.PublishAsync(Hotline.Share.Mq.EventNames.HotlineOrderFlowHandled, flowDto, cancellationToken: HttpContext.RequestAborted);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ #endregion
|
|
|
+ //话务信息
|
|
|
+
|
|
|
+ //回访信息
|
|
|
+ #region 回访信息
|
|
|
+
|
|
|
+ if (order != null && order.Status == EOrderStatus.Visited)
|
|
|
+ {
|
|
|
+ var listVist = await _orderRepository.Queryable()
|
|
|
+ .Includes(x => x.OrderVisits.Where(q => q.VisitState == EVisitState.Visited).ToList(), d => d.OrderVisitDetails)
|
|
|
+ .Where(x => x.Id == item.Id && x.Status == EOrderStatus.Visited).ToListAsync();
|
|
|
+
|
|
|
+ foreach (var itemVisit in listVist)
|
|
|
+ {
|
|
|
+ try
|
|
|
+ {
|
|
|
+ var visit = itemVisit.OrderVisits.FirstOrDefault();
|
|
|
+ if (visit != null)
|
|
|
+ {
|
|
|
+ var visitRemark = visit.OrderVisitDetails.Where(q => q.VisitTarget == EVisitTarget.Org).FirstOrDefault()?.VisitContent;
|
|
|
+ //推省上
|
|
|
+ await _capPublisher.PublishAsync(Hotline.Share.Mq.EventNames.HotlineOrderVisited,
|
|
|
+ new PublishVisitDto()
|
|
|
+ {
|
|
|
+ Order = _mapper.Map<OrderDto>(itemVisit),
|
|
|
+ No = visit.No,
|
|
|
+ VisitType = visit.VisitType,
|
|
|
+ VisitName = visit.CreatorName,
|
|
|
+ VisitTime = visit.VisitTime,
|
|
|
+ VisitRemark = string.IsNullOrEmpty(visitRemark) == true ? "满意" : visitRemark,
|
|
|
+ AreaCode = itemVisit.AreaCode!,
|
|
|
+ SubjectResultSatifyCode = visit.NowEvaluate.Key,
|
|
|
+ FirstSatisfactionCode = itemVisit.FirstVisitResultCode,
|
|
|
+ ClientGuid = ""
|
|
|
+ }, cancellationToken: HttpContext.RequestAborted);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ catch { }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ #endregion
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
|
|
|
[HttpGet("time")]
|
|
|
[AllowAnonymous]
|
|
@@ -1054,7 +1275,7 @@ ICallApplication callApplication,
|
|
|
/// <returns></returns>
|
|
|
[HttpPost("push_order_call")]
|
|
|
[AllowAnonymous]
|
|
|
- public async Task PushOrderCallAsync([FromBody]List<string> ProvinceNos)
|
|
|
+ public async Task PushOrderCallAsync([FromBody] List<string> ProvinceNos)
|
|
|
{
|
|
|
var orders = await _orderRepository.Queryable()
|
|
|
.Where(m => ProvinceNos.Contains(m.ProvinceNo))
|