Dun.Jason 10 ماه پیش
والد
کامیت
6a37bd08fd

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

@@ -2,7 +2,6 @@
 using Hotline.Application.StatisticalReport;
 using Hotline.Caching.Interfaces;
 using Hotline.CallCenter.Calls;
-using Hotline.FlowEngine.WorkflowModules;
 using Hotline.FlowEngine.Workflows;
 using Hotline.Orders;
 using Hotline.Repository.SqlSugar.Extensions;
@@ -15,8 +14,6 @@ using Hotline.Share.Dtos;
 using Hotline.Share.Dtos.Bi;
 using Hotline.Share.Dtos.Bigscreen;
 using Hotline.Share.Dtos.CallCenter;
-using Hotline.Share.Dtos.DataSharing.PusherHotlineDto;
-using Hotline.Share.Dtos.FlowEngine.Workflow;
 using Hotline.Share.Dtos.Order;
 using Hotline.Share.Enums.CallCenter;
 using Hotline.Share.Enums.FlowEngine;
@@ -26,16 +23,10 @@ using Hotline.Tools;
 using MapsterMapper;
 using Microsoft.AspNetCore.Authorization;
 using Microsoft.AspNetCore.Mvc;
-using NPOI.SS.Formula.Functions;
-using Org.BouncyCastle.Utilities;
 using SqlSugar;
-using System.Dynamic;
 using XF.Domain.Authentications;
-using XF.Domain.Constants;
 using XF.Domain.Exceptions;
 using XF.Domain.Repository;
-using XF.Utility.EnumExtensions;
-using static Microsoft.EntityFrameworkCore.DbLoggerCategory;
 
 namespace Hotline.Api.Controllers.Bi
 {
@@ -64,6 +55,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,
@@ -88,7 +80,8 @@ namespace Hotline.Api.Controllers.Bi
             IOrderSecondaryHandlingApplication orderSecondaryHandlingApplication,
             IOrderApplication orderApplication,
             ITimeLimitDomainService timeLimitDomainService,
-            IOrderReportApplication orderReportApplication
+            IOrderReportApplication orderReportApplication,
+            IRepository<SystemArea> systemAreaRepository
             )
         {
             _orderRepository = orderRepository;
@@ -114,6 +107,7 @@ namespace Hotline.Api.Controllers.Bi
             _orderApplication = orderApplication;
             _timeLimitDomainService = timeLimitDomainService;
             _orderReportApplication = orderReportApplication;
+            _systemAreaRepository = systemAreaRepository;
         }
 
         /// <summary>
@@ -2675,32 +2669,85 @@ namespace Hotline.Api.Controllers.Bi
         }
 
         /// <summary>
-        /// 信件来源分统计列表
+        /// 信件来源分统计列表
         /// </summary>
         /// <param name="dto"></param>
         /// <returns></returns>
         [HttpGet("order_source_hours_report_list")]
         public async Task<List<OrderSourceHeaderVo>> QueryOrderSourceHoursReportList([FromQuery] QueryOrderSourceRequest dto)
         {
-	        var data = await _orderApplication.QueryOrderSourceHoursList(dto);
-	        return data;
-	        ;
+            var data = await _orderApplication.QueryOrderSourceHoursList(dto);
+            return data;
+        }
+
+        /// <summary>
+        /// 信件来源分时统计表头
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [HttpGet("order_source_hours_report_header")]
+        public async Task<List<Kv>> QueryOrderSourceHoursReportHeader()
+        {
+            List<Kv> res = new List<Kv>
+            {
+                new Kv { Key = "宜宾110平台", Value = "Platform110" },
+                new Kv { Key = "电话", Value = "Phone" },
+                new Kv { Key = "因特网", Value = "Web" },
+                new Kv { Key = "其他", Value = "Rests" },
+                new Kv { Key = "自建", Value = "Created" },
+                new Kv { Key = "微信", Value = "WeChat" },
+                new Kv { Key = "APP", Value = "App" },
+                new Kv { Key = "智慧宜宾", Value = "WisdomYB" },
+                new Kv { Key = "综治平台", Value = "Platform" },
+                new Kv { Key = "省12328平台", Value = "Platform12328" },
+                new Kv { Key = "市州与网民", Value = "MayorAndNetizens" },
+                new Kv { Key = "宜宾融媒体", Value = "MediaYB" },
+                new Kv { Key = "省12345平台", Value = "Platform12345" },
+                new Kv { Key = "省政民互动", Value = "Interaction" },
+                new Kv { Key = "宜办事", Value = "ServiceYB" },
+                new Kv { Key = "市州互转", Value = "CityTransfer" },
+                new Kv { Key = "办不成事反映窗口", Value = "NoService" },
+                new Kv { Key = "I宜宾", Value = "Iyb" }
+            };
+            return res;
         }
-		/// <summary>
-		/// 信件来源时分统计导出
-		/// </summary>
-		/// <returns></returns>
-		[HttpPost("order_source_hours_list/_export")]
+
+        /// <summary>
+        /// 信件来源分时统计导出
+        /// </summary>
+        /// <returns></returns>
+        [HttpPost("order_source_hours_list/_export")]
         public async Task<FileStreamResult> QueryOrderSourceHoursReportList([FromBody] ExportExcelDto<QueryOrderSourceRequest> dto)
         {
-	        var data = await _orderApplication.QueryOrderSourceHoursList(dto.QueryDto);
-	        dynamic? dynamicClass = DynamicClassHelper.CreateDynamicClass(dto.ColumnInfos);
-	        var dtos = data
-		        .Select(stu => _mapper.Map(stu, typeof(OrderSourceHeaderVo), dynamicClass))
-		        .Cast<object>()
-		        .ToList();
-	        var stream = ExcelHelper.CreateStream(dtos);
-	        return ExcelStreamResult(stream, "信件来源统计列表数据");
+            var data = await _orderApplication.QueryOrderSourceHoursList(dto.QueryDto);
+            dynamic? dynamicClass = DynamicClassHelper.CreateDynamicClass(dto.ColumnInfos);
+            var dtos = data
+                .Select(stu => _mapper.Map(stu, typeof(OrderSourceHeaderVo), dynamicClass))
+                .Cast<object>()
+                .ToList();
+            var stream = ExcelHelper.CreateStream(dtos);
+            return ExcelStreamResult(stream, "信件来源分时统计列表数据");
+        }
+
+        /// <summary>
+        /// 区域分时统计
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [HttpGet("order_area_time")]
+        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 };
         }
 
 
@@ -2905,4 +2952,5 @@ namespace Hotline.Api.Controllers.Bi
         }
     }
     
+    }
 }

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

+ 1 - 1
src/Hotline.Application/Orders/IOrderApplication.cs

@@ -99,7 +99,7 @@ namespace Hotline.Application.Orders
         ISugarQueryable<Order> QueryOrderSourceDetail(QueryOrderSourceDetailRequest dto);
 
 		/// <summary>
-		/// 信件来源分统计列表
+		/// 信件来源分统计列表
 		/// </summary>
 		/// <param name="dto"></param>
 		/// <returns></returns>

+ 1 - 1
src/Hotline.Application/Orders/OrderApplication.cs

@@ -598,7 +598,7 @@ public class OrderApplication : IOrderApplication, IScopeDependency
     }
 
 	/// <summary>
-	/// 信件来源分统计列表
+	/// 信件来源分统计列表
 	/// </summary>
 	/// <param name="dto"></param>
 	/// <returns></returns>

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