Browse Source

从新推送工单到省上

tangjiang 4 months ago
parent
commit
b410fba25f
1 changed files with 82 additions and 10 deletions
  1. 82 10
      src/Hotline.Api/Controllers/PushProvinceController.cs

+ 82 - 10
src/Hotline.Api/Controllers/PushProvinceController.cs

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