tangjiang 10 月之前
父节点
当前提交
19814e359d

+ 27 - 1
src/Hotline.Api/Controllers/Bi/BiOrderController.cs

@@ -25,6 +25,7 @@ using Hotline.Tools;
 using MapsterMapper;
 using Microsoft.AspNetCore.Authorization;
 using Microsoft.AspNetCore.Mvc;
+using Microsoft.EntityFrameworkCore.Migrations.Operations;
 using NPOI.SS.Formula.Functions;
 using Org.BouncyCastle.Utilities;
 using SqlSugar;
@@ -63,6 +64,7 @@ namespace Hotline.Api.Controllers.Bi
         private readonly IOrderApplication _orderApplication;
         private readonly ITimeLimitDomainService _timeLimitDomainService;
         private readonly IOrderReportApplication _orderReportApplication;
+        private readonly IRepository<SystemArea> _systemAreaRepository;
 
         public BiOrderController(
             IOrderRepository orderRepository,
@@ -87,7 +89,8 @@ namespace Hotline.Api.Controllers.Bi
             IOrderSecondaryHandlingApplication orderSecondaryHandlingApplication,
             IOrderApplication orderApplication,
             ITimeLimitDomainService timeLimitDomainService,
-            IOrderReportApplication orderReportApplication
+            IOrderReportApplication orderReportApplication,
+             IRepository<SystemArea> systemAreaRepository
             )
         {
             _orderRepository = orderRepository;
@@ -113,6 +116,7 @@ namespace Hotline.Api.Controllers.Bi
             _orderApplication = orderApplication;
             _timeLimitDomainService = timeLimitDomainService;
             _orderReportApplication = orderReportApplication;
+            _systemAreaRepository = systemAreaRepository;
         }
 
         /// <summary>
@@ -2672,5 +2676,27 @@ namespace Hotline.Api.Controllers.Bi
             var stream = ExcelHelper.CreateStream(dtos);
             return ExcelStreamResult(stream, "信件来源统计明细数据");
         }
+
+        /// <summary>
+        /// 区域分时统计
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [HttpPost("order_area_time")]
+        [AllowAnonymous]
+        public async Task<object> OrderAreaTime([FromQuery] PagedKeywordRequest dto)
+        {
+            var item = await _orderRepository.OrderAreaTime(dto.StartTime, dto.EndTime);
+
+            var titleData = await _systemAreaRepository.Queryable()
+                .Where(p => p.Id.Length == 6 && p.Id != "510000")
+                .Select(p => new
+                {
+                    Key = p.Id,
+                    Value = p.AreaName
+                }).ToListAsync();
+
+            return new { Item = item, TitleData = titleData };
+        }
     }
 }

+ 7 - 5
src/Hotline.Api/Controllers/TestController.cs

@@ -202,10 +202,10 @@ public class TestController : BaseController
     }
     [HttpGet("testo111")]
     [AllowAnonymous]
-    public async Task<object> Test111(DateTime StartTime, DateTime? EndTime)
+    public async Task<object> Test111(DateTime StartTime, DateTime EndTime)
     {
 
-        var list = await _orderRepository.Queryable()
+        var list11 =await  _orderRepository.Queryable()
                  .Where(p => p.CreationTime >= StartTime && p.CreationTime <= EndTime)
                  .Select(p => new
                  {
@@ -213,16 +213,18 @@ public class TestController : BaseController
                      Hour = p.CreationTime.Hour
 
                  }).MergeTable()
-                 .LeftJoin<SystemArea>((p,a)=>p.AreaCode==a.Id)
+                 .LeftJoin<SystemArea>((p, a) => p.AreaCode == a.Id)
                  .GroupBy((p, a) => a.AreaName)
                  .GroupBy((p, a) => p.Hour)
                  .Select((p, a) => new
                  {
                      AreaCode = a.AreaName,
                      Hour = p.Hour,
-                     count = SqlFunc.AggregateCount(p.AreaCode)
-                 }).ToPivotTableAsync(p => p.AreaCode, p => p.Hour, p => p.Sum(x => x.count));
+                     count = SqlFunc.AggregateSum(SqlFunc.IIF(p.AreaCode!= null, 1, 0) )
+                 })//.ToListAsync();
+                .ToPivotTableAsync(p => p.AreaCode, p => p.Hour, p => p.Sum(x => x.count));
 
+        var list=await _orderRepository.OrderAreaTime(StartTime, EndTime);    
         return list;
     }
 

+ 56 - 4
src/Hotline.Repository.SqlSugar/Orders/OrderRepository.cs

@@ -1,8 +1,11 @@
-using Hotline.Orders;
+using Hotline.CallCenter.Calls;
+using Hotline.Orders;
 using Hotline.Repository.SqlSugar.DataPermissions;
 using Hotline.Repository.SqlSugar.Extensions;
 using Hotline.Settings;
 using Hotline.Settings.Hotspots;
+using Hotline.Share.Dtos.CallCenter;
+using Hotline.Share.Enums.CallCenter;
 using Hotline.Share.Requests;
 using SqlSugar;
 using System.Reflection;
@@ -125,7 +128,7 @@ namespace Hotline.Repository.SqlSugar.Orders
                        .Select(p => new DepartmentalProcessingStatisticsDataDto
                        {
                            OrgCode = p.OrgCode,
-                         //  OrderCountNum = SqlFunc.AggregateSum(p.OrderCountNum),
+                           //  OrderCountNum = SqlFunc.AggregateSum(p.OrderCountNum),
                            YbOrderCountNum = SqlFunc.AggregateSum(p.YbOrderCountNum),
                            ZbOrderCountNum = SqlFunc.AggregateSum(p.ZbOrderCountNum),
                            Archived = SqlFunc.AggregateSum(p.Archived),
@@ -135,7 +138,7 @@ namespace Hotline.Repository.SqlSugar.Orders
                            PublishedNoOpen = SqlFunc.AggregateSum(p.PublishedNoOpen),
                            YbOverdue = SqlFunc.AggregateSum(p.YbOverdue),
                            ZbOverdue = SqlFunc.AggregateSum(p.ZbOverdue),
-                           CompleteOnTime= SqlFunc.AggregateSum(p.CompleteOnTime),
+                           CompleteOnTime = SqlFunc.AggregateSum(p.CompleteOnTime),
                            HqybOverdue = SqlFunc.AggregateSum(p.HqybOverdue),
                            HqzbOverdue = SqlFunc.AggregateSum(p.HqzbOverdue),
                            DelayEnd = SqlFunc.AggregateSum(p.DelayEnd),
@@ -150,7 +153,56 @@ namespace Hotline.Repository.SqlSugar.Orders
                        })
                        .MergeTable();
 
-                      
+
+        }
+
+        /// <summary>
+        /// 区域分时统计
+        /// </summary>
+        /// <param name="StartTime"></param>
+        /// <param name="EndTime"></param>
+        /// <returns></returns>
+        public async Task<object> OrderAreaTime(DateTime? StartTime, DateTime? EndTime)
+        {
+            List<int> dts = new List<int>();
+            for (int i = 0; i < 24; i++)
+            {
+                dts.Add(i);
+            }
+
+            var listHour = Db.Reportable(dts).ToQueryable<int>();
+            var listOrder = Db.Queryable<Order>()
+                 .Where(p => p.CreationTime >= StartTime && p.CreationTime <= EndTime)
+                 .Select(p => new
+                 {
+                     AreaCode = p.AreaCode.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("6")),
+                     Hour = p.CreationTime.Hour.ToString()
+                 })
+               .MergeTable();
+
+            var listOrg = Db.Queryable<SystemArea>()
+              .LeftJoin(listOrder, (s, p) => s.Id == p.AreaCode)
+              .Where((s, p) => s.Id.Length == 6 && s.Id != "510000")
+              .GroupBy((s, p) => s.Id)
+              .GroupBy((s, p) => p.Hour)
+              .Select((s, p) => new
+              {
+                  count = SqlFunc.AggregateSum(SqlFunc.IIF(p.AreaCode != null && p.AreaCode != "", 1, 0)),
+                  AreaCode = s.Id,
+                  Hour = SqlFunc.IIF(p.Hour == null || p.Hour == "", "0", p.Hour)
+              })
+              .MergeTable();
+
+            return await listHour.LeftJoin(listOrg, (x, p) => x.ColumnName.ToString() == p.Hour)
+                .OrderBy(x => x.ColumnName)
+               .Select((x, p) => new
+               {
+                   Hour = x.ColumnName.ToString()+":00 - "+ x.ColumnName.ToString()+":59",
+                   p.AreaCode,
+                   p.count
+               })
+                .ToPivotListAsync(p => p.AreaCode, p => p.Hour, p => p.Sum(x => x.count));
+
         }
 
         public ISugarQueryable<SelectOrderId> OrderListUnionAll(ISugarQueryable<SelectOrderId> t1, ISugarQueryable<SelectOrderId> t2)

+ 7 - 1
src/Hotline/Orders/IOrderRepository.cs

@@ -24,7 +24,13 @@ namespace Hotline.Orders
 
         ISugarQueryable<SelectOrderId> OrderListUnionAll(ISugarQueryable<SelectOrderId> t1, ISugarQueryable<SelectOrderId> t2);
 
-
+        /// <summary>
+        /// 区域分时统计
+        /// </summary>
+        /// <param name="StartTime"></param>
+        /// <param name="EndTime"></param>
+        /// <returns></returns>
+        Task<object> OrderAreaTime(DateTime? StartTime, DateTime? EndTime);
 
     }