Parcourir la source

Merge branch 'test' of http://110.188.24.182:10023/Fengwo/hotline into test

田爽 il y a 4 mois
Parent
commit
48ad55dc80
1 fichiers modifiés avec 108 ajouts et 30 suppressions
  1. 108 30
      src/Hotline.Api/Controllers/PushProvinceController.cs

+ 108 - 30
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,44 +84,105 @@ 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)
+            if (list != null && list.Any())
+            {
+                foreach (var item in list)
+                {
+                    try
+                    {
+                        var visit = item.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>(item),
+                                No = visit.No,
+                                VisitType = visit.VisitType,
+                                VisitName = visit.CreatorName,
+                                VisitTime = visit.VisitTime,
+                                VisitRemark = string.IsNullOrEmpty(visitRemark) == true ? "满意" : visitRemark,
+                                AreaCode = item.AreaCode!,
+                                SubjectResultSatifyCode = visit.NowEvaluate.Key,
+                                FirstSatisfactionCode = item.FirstVisitResultCode,
+                                ClientGuid = ""
+                            }, cancellationToken: HttpContext.RequestAborted);
+                        }
+                    }
+                    catch { }
+                }
+            }
+        }
+
+        /// <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++)
             {
-                try
+                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);
+
+            if (unpublishOrders != null && unpublishOrders.Any())
+            {
+                foreach (var order in unpublishOrders)
                 {
-                    var visit = item.OrderVisits.FirstOrDefault();
-                    if (visit != 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))
                     {
-                        var visitRemark = visit.OrderVisitDetails.Where(q => q.VisitTarget == EVisitTarget.Org).FirstOrDefault()?.VisitContent;
-                        //推省上
-                        await _capPublisher.PublishAsync(Hotline.Share.Mq.EventNames.HotlineOrderVisited,
-                        new PublishVisitDto()
+                        if (_appOptions.Value.GetDefaultAppScopeConfiguration().CallCenterType == AppDefaults.CallCenterType.TianRun)
                         {
-                            Order = _mapper.Map<OrderDto>(item),
-                            No = visit.No,
-                            VisitType = visit.VisitType,
-                            VisitName = visit.CreatorName,
-                            VisitTime = visit.VisitTime,
-                            VisitRemark = string.IsNullOrEmpty(visitRemark) == true ? "满意" : visitRemark,
-                            AreaCode = item.AreaCode!,
-                            SubjectResultSatifyCode = visit.NowEvaluate.Key,
-                            FirstSatisfactionCode = item.FirstVisitResultCode,
-                            ClientGuid = ""
-                        }, cancellationToken: HttpContext.RequestAborted);
+                            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);
                 }
-                catch { }
             }
         }
 
-       
+
     }
 }