浏览代码

Merge branch 'master' of http://110.188.24.182:10023/Fengwo/hotline

xf 1 年之前
父节点
当前提交
e1422bc2bb

+ 56 - 12
src/Hotline.Api/Controllers/Bi/BiOrderController.cs

@@ -782,30 +782,74 @@ namespace Hotline.Api.Controllers.Bi
 
             //部门
             var listOrg = await _orderVisitDetailRepository.Queryable()
-                .Includes(x => x.OrderVisit)
-                .Where(x => x.OrderVisit.VisitTime >= StartDate && x.OrderVisit.VisitTime <= EndDate && x.VisitTarget == EVisitTarget.Org && x.OrderVisit.VisitState == EVisitState.Visited)
-                .Select(x => new Satisfaction
-                {
-                    Dissatisfied = SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonListObjectAny(x.OrgProcessingResults, "key", "1") || SqlFunc.JsonListObjectAny(x.OrgProcessingResults, "key", "2"), 1, 0)),
-                    Satisfied = SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonListObjectAny(x.OrgProcessingResults, "key", "1") || SqlFunc.JsonListObjectAny(x.OrgProcessingResults, "key", "2"), 0, 1)),
-                }).ToListAsync();
+                .LeftJoin<OrderVisit>((it, o) => it.VisitId == o.Id)
+                .Where((it, o) => it.VisitTarget == EVisitTarget.Org && o.VisitTime >= StartDate && o.VisitTime <= EndDate && o.VisitState == EVisitState.Visited)
+                 .Select((it, o) => new Satisfaction
+                 {
+                     Dissatisfied = SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonListObjectAny(it.OrgProcessingResults, "key", "1") || SqlFunc.JsonListObjectAny(it.OrgProcessingResults, "key", "2"), 1, 0)),
+                     Satisfied = SqlFunc.AggregateSum(SqlFunc.IIF(SqlFunc.JsonListObjectAny(it.OrgProcessingResults, "key", "1") || SqlFunc.JsonListObjectAny(it.OrgProcessingResults, "key", "2"), 0, 1)),
+                 })
+                .ToListAsync();
 
             if (centerReportVisitd.Visitd > 0 && listOrg != null && listOrg.Count > 0 && listOrg[0].Satisfied > 0)
                 centerReportVisitd.OrgRate = Math.Round((listOrg[0].Satisfied / (double)centerReportVisitd.Visitd) * 100, 2);
 
             //坐席
             var listSet = await _orderVisitDetailRepository.Queryable()
-                .Includes(x => x.OrderVisit)
-                .Where(x => x.OrderVisit.VisitTime >= StartDate && x.OrderVisit.VisitTime <= EndDate && x.VisitTarget == EVisitTarget.Seat && x.OrderVisit.VisitState == EVisitState.Visited)
-                .Select(x => new Satisfaction
+                .LeftJoin<OrderVisit>((it, o) => it.VisitId == o.Id)
+                .Where((it, o) => it.VisitTarget == EVisitTarget.Seat && o.VisitTime >= StartDate && o.VisitTime <= EndDate && o.VisitState == EVisitState.Visited)
+                .Select((it, o) => new Satisfaction
                 {
-                    Dissatisfied = SqlFunc.AggregateSum(SqlFunc.IIF(x.SeatEvaluate == ESeatEvaluate.VeryNoSatisfied || x.SeatEvaluate == ESeatEvaluate.NoSatisfied, 1, 0)),
-                    Satisfied = SqlFunc.AggregateSum(SqlFunc.IIF(x.SeatEvaluate != ESeatEvaluate.VeryNoSatisfied && x.SeatEvaluate != ESeatEvaluate.NoSatisfied, 1, 0)),
+                    Dissatisfied = SqlFunc.AggregateSum(SqlFunc.IIF(it.SeatEvaluate == ESeatEvaluate.VeryNoSatisfied || it.SeatEvaluate == ESeatEvaluate.NoSatisfied, 1, 0)),
+                    Satisfied = SqlFunc.AggregateSum(SqlFunc.IIF(it.SeatEvaluate != ESeatEvaluate.VeryNoSatisfied && it.SeatEvaluate != ESeatEvaluate.NoSatisfied, 1, 0)),
                 }).ToListAsync();
 
             if (centerReportVisitd.Visitd > 0 && listSet != null && listSet.Count > 0 && listSet[0].Satisfied > 0)
                 centerReportVisitd.SeatsRate = Math.Round((listSet[0].Satisfied / (double)centerReportVisitd.Visitd) * 100, 2);
 
+            centerReportStatisticsDto.CenterReportVisitd = centerReportVisitd;
+            #endregion
+
+            #region 信件分布情况
+            //市直部门
+            var listOrgStatisticsCityAll = await _orderRepository.Queryable()
+              .LeftJoin<SystemOrganize>((it, o) => it.CurrentHandleOrgCode == o.Id)
+              .Where((it, o) => (o.OrgType == EOrgType.City || o.OrgType == EOrgType.Province) && it.CreationTime >= StartDate && it.CreationTime <= EndDate)
+             .GroupBy((it, o) => new
+             {
+                 it.CurrentHandleOrgCode,
+                 o.Name
+             })
+              .Select((it, o) => new OrgStatistics
+              {
+                  CountNum = SqlFunc.AggregateCount(it.CurrentHandleOrgCode),
+                  OrgName = o.Name
+              }).ToListAsync();
+
+            centerReportStatisticsDto.OrgStatisticsCityAll = new OrgStatisticsAll
+            {
+                OrgStatistics = listOrgStatisticsCityAll
+            };
+
+            //区县部门
+            var listOrgStatisticsAreaAll = await _orderRepository.Queryable()
+             .LeftJoin<SystemOrganize>((it, o) => it.CurrentHandleOrgCode == o.Id)
+             .Where((it, o) => o.OrgType == EOrgType.County && it.CreationTime >= StartDate && it.CreationTime <= EndDate)
+            .GroupBy((it, o) => new
+            {
+                it.CurrentHandleOrgCode,
+                o.Name
+            })
+             .Select((it, o) => new OrgStatistics
+             {
+                 CountNum = SqlFunc.AggregateCount(it.CurrentHandleOrgCode),
+                 OrgName = o.Name
+             }).ToListAsync();
+
+            centerReportStatisticsDto.OrgStatisticsAreaAll = new OrgStatisticsAll
+            {
+                OrgStatistics = listOrgStatisticsAreaAll
+            }; 
             #endregion
 
             return centerReportStatisticsDto;

+ 8 - 8
src/Hotline.Api/Controllers/OrderController.cs

@@ -2799,8 +2799,8 @@ public class OrderController : BaseController
         if (order.Workflow.IsInCountersign) throw UserFriendlyException.SameMessage("工单会签中,无法进行特提!");
 
         var model = _mapper.Map<OrderSpecial>(dto);
-        model.OrgId = _sessionContext.OrgId;
-        model.OrgName = _sessionContext.OrgName;
+        model.OrgId = order.CurrentHandleOrgCode;
+        model.OrgName = order.CurrentHandleOrgName;
         //if (!dto.Audit) model.State = 1;
         //取消根据进入界面判断是否审批  最新按照系统配置设定
         var audit = true;
@@ -2853,9 +2853,9 @@ public class OrderController : BaseController
                 await _orderVisitRepository.UpdateAsync(visit, HttpContext.RequestAborted);
             }
 
-            if (order != null && ("001170".Equals(order.CurrentHandleOrgCode) ||
-								  "001177".Equals(order.CurrentHandleOrgCode) ||
-                                  "001180".Equals(order.CurrentHandleOrgCode)))
+            if (order != null && ("001170".Equals(model.OrgId) ||
+								  "001177".Equals(model.OrgId) ||
+                                  "001180".Equals(model.OrgId)))
             {
                 await _capPublisher.PublishAsync(Hotline.Share.Mq.EventNames.HotlineOrderFlowRecalled,
                new PublishSpecialDto { Order = _mapper.Map<OrderDto>(order), Special = _mapper.Map<OrderSpecialDto>(model) }, cancellationToken: HttpContext.RequestAborted);
@@ -2930,9 +2930,9 @@ public class OrderController : BaseController
             }
 
             var order = await _orderRepository.GetAsync(x => x.Id == special.OrderId);
-            if (order != null && ("001170".Equals(order.CurrentHandleOrgCode) ||
-								  "001177".Equals(order.CurrentHandleOrgCode) ||
-                                  "001180".Equals(order.CurrentHandleOrgCode)))
+            if (order != null && ("001170".Equals(special.OrgId) ||
+								  "001177".Equals(special.OrgId) ||
+                                  "001180".Equals(special.OrgId)))
             {
                 await _capPublisher.PublishAsync(Hotline.Share.Mq.EventNames.HotlineOrderFlowRecalled,
              new PublishSpecialDto { Order = _mapper.Map<OrderDto>(order), Special = _mapper.Map<OrderSpecialDto>(special) }, cancellationToken: HttpContext.RequestAborted);

+ 49 - 0
src/Hotline.Share/Dtos/CallCenter/CenterReportStatisticsDto.cs

@@ -18,6 +18,11 @@ namespace Hotline.Share.Dtos.CallCenter
         /// </summary>
         public CenterReportOrderDto CenterReportOrder { get; set; }
 
+        /// <summary>
+        /// 信件回访量
+        /// </summary>
+        public CenterReportVisitdDto CenterReportVisitd { get; set; }
+
         /// <summary>
         /// 来源
         /// </summary>
@@ -27,6 +32,16 @@ namespace Hotline.Share.Dtos.CallCenter
         /// 信件分类
         /// </summary>
         public List<CenterReportOrderSourceChannelDto> CenterReportOrderAcceptTypes { get; set; }
+
+        /// <summary>
+        /// 市直部门
+        /// </summary>
+        public OrgStatisticsAll OrgStatisticsCityAll { get; set; }
+
+        /// <summary>
+        /// 区县部门
+        /// </summary>
+        public OrgStatisticsAll OrgStatisticsAreaAll { get; set; }
     }
 
     /// <summary>
@@ -174,4 +189,38 @@ namespace Hotline.Share.Dtos.CallCenter
         /// </summary>
         public int Dissatisfied { get; set; }
     }
+
+    /// <summary>
+    /// 信件分布
+    /// </summary>
+    public class OrgStatisticsAll
+    {
+        /// <summary>
+        /// 总数
+        /// </summary>
+        public int OrgStatisticsCountAll => Totalize();
+
+        /// <summary>
+        /// 明细
+        /// </summary>
+        public List<OrgStatistics> OrgStatistics { get; set; }
+
+        public int Totalize()
+        {
+            int SunNum = 0;
+            foreach (var item in OrgStatistics)
+            {
+                SunNum += item.CountNum;
+            }
+
+            return SunNum;
+        }
+    }
+
+    public class OrgStatistics
+    {
+        public string OrgName { get; set; }
+
+        public int CountNum { get; set; }
+    }
 }