Browse Source

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

Dun.Jason 4 months ago
parent
commit
ee54260f39

+ 20 - 11
src/Hotline.Api/Controllers/Bi/BiOrderController.cs

@@ -34,8 +34,10 @@ using Microsoft.Extensions.Options;
 using Org.BouncyCastle.Utilities.Collections;
 using SqlSugar;
 using System.Data;
+using Hotline.Share.Dtos.WebPortal;
 using XF.Domain.Authentications;
 using XF.Domain.Exceptions;
+using XF.Domain.Filters;
 using XF.Domain.Repository;
 using XF.Utility.EnumExtensions;
 
@@ -3769,17 +3771,17 @@ namespace Hotline.Api.Controllers.Bi
         [HttpGet("order_acceptance_time")]
         public async Task<object> OrderAcceptanceTime([FromQuery] TimeSharingPagedKeywordRequest dto)
         {
-            var item = await _orderRepository.OrderAcceptanceTime(dto);
+	        var titleData = await _systemDicDataRepository.Queryable()
+		        .Where(p => p.DicTypeCode == "AcceptType")
+		        .Select(p => new Kv()
+		        {
+			        Key = p.DicDataValue,
+			        Value = p.DicDataName
+		        }).OrderBy(p => p.Key).ToListAsync();
 
-            var titleData = await _systemDicDataRepository.Queryable()
-                .Where(p => p.DicTypeCode == "AcceptType")
-                .Select(p => new
-                {
-                    Key = p.DicDataValue,
-                    Value = p.DicDataName
-                }).ToListAsync();
-
-            return new { Item = item, TitleData = titleData };
+			var item = await _orderRepository.OrderAcceptanceTime(dto);
+			 var res = new  { Item = item, TitleData = titleData };
+			return res;
         }
 
         /// <summary>
@@ -3790,7 +3792,14 @@ namespace Hotline.Api.Controllers.Bi
         [HttpPost("order_acceptance_time_export")]
         public async Task<FileStreamResult> OrderAcceptanceTimeExport([FromBody] TimeSharingPagedKeywordRequest dto)
         {
-            var dataTable = await _orderRepository.OrderAcceptanceTimeExport(dto);
+	        var titleData = await _systemDicDataRepository.Queryable()
+		        .Where(p => p.DicTypeCode == "AcceptType")
+		        .Select(p => new Kv()
+		        {
+			        Key = p.DicDataValue,
+			        Value = p.DicDataName
+		        }).OrderBy(p => p.Key).ToListAsync();
+			var dataTable = await _orderRepository.OrderAcceptanceTimeExport(dto, titleData);
             var stream = ExcelHelper.CreateStream(dataTable);
             return ExcelStreamResult(stream, "受理类型分时统计数据");
         }

+ 0 - 3
src/Hotline.Api/Controllers/OrderController.cs

@@ -4350,9 +4350,6 @@ public class OrderController : BaseController
             .OrderBy(d => d.CreationTime)
             .ToTreeAsync(d => d.Traces, d => d.ParentId, null);
 
-        //todo files
-        //await _fileRepository.WorkflowTraceRecursion(workflowDto.Traces, HttpContext.RequestAborted);
-
         return _mapper.Map<IReadOnlyList<OrderFlowTraceDto>>(traces);
     }
 

+ 2 - 2
src/Hotline.Api/Program.cs

@@ -38,8 +38,8 @@ try
         .Enrich.FromLogContext()
         .ReadFrom.Configuration(ctx.Configuration), true)
         ;
-
-    builder
+    //builder.Services.AddControllers().AddNewtonsoftJson();
+	builder
         .ConfigureServices()
         .ConfigurePipelines()
         .Run();

+ 14 - 9
src/Hotline.Application/Orders/OrderApplication.cs

@@ -94,8 +94,9 @@ public class OrderApplication : IOrderApplication, IScopeDependency
     private readonly IRepository<OrderPublishHistory> _orderPublishHistoryRepository;
     private readonly IOrderDelayRepository _orderDelayRepository;
     private readonly IRepository<OrderSecondaryHandling> _orderSecondaryHandlingRepository;
+    private readonly IRepository<SchedulingUser> _schedulingUserRepository;
 
-    public OrderApplication(
+	public OrderApplication(
         IOrderDomainService orderDomainService,
         IOrderRepository orderRepository,
         IWorkflowDomainService workflowDomainService,
@@ -133,7 +134,8 @@ public class OrderApplication : IOrderApplication, IScopeDependency
         IOrderTerminateRepository orderTerminateRepository,
         IRepository<OrderPublishHistory> orderPublishHistoryRepository,
         IRepository<OrderSecondaryHandling> orderSecondaryHandlingRepository,
-        IOrderDelayRepository orderDelayRepository)
+        IRepository<SchedulingUser> schedulingUserRepository,
+		IOrderDelayRepository orderDelayRepository)
     {
         _orderDomainService = orderDomainService;
         _workflowDomainService = workflowDomainService;
@@ -173,6 +175,7 @@ public class OrderApplication : IOrderApplication, IScopeDependency
         _sessionContext = sessionContext;
         _orderDelayRepository = orderDelayRepository;
         _orderSecondaryHandlingRepository = orderSecondaryHandlingRepository;
+        _schedulingUserRepository = schedulingUserRepository;
     }
 
     /// <summary>
@@ -3302,15 +3305,17 @@ public class OrderApplication : IOrderApplication, IScopeDependency
                 SendOrderNum = 0,
                 NoSendOrderNum = SqlFunc.AggregateDistinctCount(w.ExternalId),
             });
-        var items = await itemsHandled.LeftJoin(itemsNo, (hand, nohand) => hand.UserId == nohand.UserId)
-            .GroupBy((hand, nohand) => new { hand.UserId, hand.UserName })
-            .Select((hand, nohand) => new BiOrderSendVo
-            {
-                UserId = hand.UserId,
-                UserName = hand.UserName,
+        var items = await _schedulingUserRepository.Queryable()
+		    .LeftJoin(itemsHandled,(all, hand)=> all.UserId == hand.UserId)
+			.LeftJoin(itemsNo, (all, hand, nohand) => hand.UserId == nohand.UserId)
+            .GroupBy((all, hand, nohand) => new { all.UserId, all.UserName })
+            .Select((all, hand, nohand) => new BiOrderSendVo
+            {
+                UserId = all.UserId,
+                UserName = all.UserName,
                 SendOrderNum = SqlFunc.AggregateSum(hand.SendOrderNum),
                 NoSendOrderNum = SqlFunc.AggregateSum(nohand.NoSendOrderNum),
-            }).ToListAsync();
+            }).MergeTable().Where(vo=> vo.SendOrderNum > 0 || vo.NoSendOrderNum > 0).ToListAsync();
 
         var items2 = await _workflowTraceRepository.Queryable()
             .LeftJoin<Workflow>((x, w) => x.WorkflowId == w.Id)

+ 165 - 17
src/Hotline.Repository.SqlSugar/Orders/OrderRepository.cs

@@ -1,4 +1,5 @@
-using Hotline.CallCenter.Calls;
+using System.Collections;
+using Hotline.CallCenter.Calls;
 using Hotline.Orders;
 using Hotline.Repository.SqlSugar.DataPermissions;
 using Hotline.Repository.SqlSugar.Extensions;
@@ -25,6 +26,11 @@ using XF.Domain.Dependency;
 using XF.Domain.Repository;
 using System.Collections.Generic;
 using Hotline.SeedData;
+using Hotline.Share.Notifications.NewRockCallCenter;
+using Hotline.Statistics;
+using System.Dynamic;
+using Hotline.Share.Dtos;
+using Org.BouncyCastle.Crypto.Fpe;
 
 namespace Hotline.Repository.SqlSugar.Orders
 {
@@ -370,7 +376,7 @@ namespace Hotline.Repository.SqlSugar.Orders
         /// <param name="dto"></param>
         /// <returns></returns>
         public async Task<DataTable> OrderHotspotTimeExport(TimeSharingPagedKeywordRequest dto)
-        {
+		{
             List<int> dts = new();
             for (int i = 0; i < 24; i++)
             {
@@ -423,7 +429,7 @@ namespace Hotline.Repository.SqlSugar.Orders
         /// <param name="dto"></param>
         /// <returns></returns>
         public async Task<object> OrderAcceptanceTime(TimeSharingPagedKeywordRequest dto)
-        {
+		{
             List<int> dts = new List<int>();
             for (int i = 0; i < 24; i++)
             {
@@ -444,7 +450,7 @@ namespace Hotline.Repository.SqlSugar.Orders
 
             var listOrg = Db.Queryable<SystemDicData>()
               .LeftJoin(listOrder, (s, p) => s.DicDataValue == p.AcceptTypeCode)
-              .Where((s, p) => s.DicTypeCode == "AcceptType")
+			  .Where((s, p) => s.DicTypeCode == "AcceptType")
               .GroupBy((s, p) => s.DicDataValue).GroupBy((s, p) => s.DicDataName)
               .GroupBy((s, p) => p.Hour)
               .OrderBy((s, p) => s.DicDataValue)
@@ -458,24 +464,103 @@ namespace Hotline.Repository.SqlSugar.Orders
               .MergeTable();
 
             var list = await listHour.LeftJoin(listOrg, (x, p) => x.ColumnName.ToString() == p.Hour)
-                .OrderBy(x => x.ColumnName)
+	            //.Where((x,p)=> !string.IsNullOrEmpty(p.DicDataValue))
+	            .OrderBy((x,p) =>  x.ColumnName )
                .Select((x, p) => new
                {
                    Hour = x.ColumnName.ToString() + ":00 - " + x.ColumnName.ToString() + ":59",
                    p.DicDataValue,
                    p.count
                })
-                .ToPivotListAsync(p => p.DicDataValue, p => p.Hour, p => p.Sum(x => x.count));
-            return list;
+	            .MergeTable()
+               .ToPivotTableAsync(p => p.DicDataValue, p => p.Hour, p =>  p.Sum(x => x.count));
 
-        }
+            var col = list.Columns.Contains("Column1");
+            if (col)
+            {
+				list.Columns.Remove("Column1");
+			}
+            var dtList = list.Clone();
 
-        /// <summary>
-        /// 受理类型分时统计---导出
-        /// </summary>
-        /// <param name="dto"></param>
-        /// <returns></returns>
-        public async Task<DataTable> OrderAcceptanceTimeExport(TimeSharingPagedKeywordRequest dto)
+			if (await Db.Queryable<StatisticsPurTypeSatisfied>().Where(x => x.Time >= dto.StartTime && x.Time <= dto.EndTime).AnyAsync())
+            {
+				// 老系统数据
+				var oldData = await Db.Queryable<StatisticsPurTypeSatisfied>()
+                    .Where(x => x.Time >= dto.StartTime && x.Time <= dto.EndTime)
+                    .GroupBy(x => x.Month)
+                    .Select(x => new
+                    {
+						Hour = x.Month.ToString() + ":00 - " + x.Month.ToString() + ":59",
+						_1 = SqlFunc.AggregateSum(x.Opinion),
+                        _2 = SqlFunc.AggregateSum(x.PeopleHelp),
+                        _3 = SqlFunc.AggregateSum(x.PollutionReporting),
+                        _10 = SqlFunc.AggregateSum(x.Consult),
+                        _15 = SqlFunc.AggregateSum(x.Suggest),
+                        _20 = SqlFunc.AggregateSum(x.SeekHelp),
+                        _25 = SqlFunc.AggregateSum(x.Praise),
+                        _30 = SqlFunc.AggregateSum(x.Report),
+                        _35 = SqlFunc.AggregateSum(x.Complaint),
+                        _40 = SqlFunc.AggregateSum(x.Rests) + SqlFunc.AggregateSum(x.Invalid),
+                        _50 = SqlFunc.AggregateSum(x.Epidemic),
+                        _SB = SqlFunc.AggregateSum(x.Declare),
+                    }).ToDataTableAsync();
+
+				#region  处理数据
+
+				foreach (DataColumn column in dtList.Columns)
+				{
+					if (column.ColumnName != "Hour") column.DataType = typeof(Int64);
+				}
+
+				for (int i = 0; i < list.Rows.Count; i++)
+				{
+					DataRow newRow = dtList.NewRow();
+					for (int j = 0; j < list.Columns.Count; j++)
+					{
+						if (oldData.Columns[j].ColumnName == "Hour")
+						{
+							newRow[j] = list.Rows[i][j];
+						}
+						else
+						{
+							var num = string.IsNullOrEmpty(list.Rows[i][j].ToString()) ? 0 : int.Parse(list.Rows[i][j].ToString());
+							var oldRow = oldData.Select("Hour ='" + list.Rows[i]["Hour"] + "'").FirstOrDefault();
+                            var oldColName = "_" + dtList.Columns[j].ColumnName;
+                            var allNum = oldRow == null ? num : oldRow.Field<Int64>(oldColName) + num;
+							newRow[j] = allNum;
+						}
+					}
+					dtList.Rows.Add(newRow);
+				}
+
+				#endregion
+			}
+			return ToDynamicList(dtList);
+        }
+		public static List<dynamic> ToDynamicList( DataTable dt)
+		{
+			List<dynamic> dynamicList = new List<dynamic>();
+
+			foreach (DataRow row in dt.Rows)
+			{
+				dynamic dynamicObj = new ExpandoObject();
+				var expandoDict = (IDictionary<string, object>)dynamicObj;
+				foreach (DataColumn column in dt.Columns)
+				{
+					expandoDict[column.ColumnName] = row[column];
+				}
+				dynamicList.Add(dynamicObj);
+			}
+
+			return dynamicList;
+		}
+
+		/// <summary>
+		/// 受理类型分时统计---导出
+		/// </summary>
+		/// <param name="dto"></param>
+		/// <returns></returns>
+		public async Task<DataTable> OrderAcceptanceTimeExport(TimeSharingPagedKeywordRequest dto, List<Kv> title)
         {
             List<int> dts = new();
             for (int i = 0; i < 24; i++)
@@ -510,7 +595,7 @@ namespace Hotline.Repository.SqlSugar.Orders
               })
               .MergeTable();
 
-            var dt = await listHour.LeftJoin(listOrg, (x, p) => x.ColumnName.ToString() == p.Hour)
+            var list = await listHour.LeftJoin(listOrg, (x, p) => x.ColumnName.ToString() == p.Hour)
                .OrderBy(x => x.ColumnName)
               .Select((x, p) => new
               {
@@ -519,8 +604,71 @@ namespace Hotline.Repository.SqlSugar.Orders
                   p.count
               })
                .ToPivotTableAsync(p => p.DicDataName, p => p.Hour, p => p.Sum(x => x.count));
-
-            return InitDatatTable(dt, dto.AddColumnName);
+			var dtList = list.Clone();
+
+			if (await Db.Queryable<StatisticsPurTypeSatisfied>().Where(x => x.Time >= dto.StartTime && x.Time <= dto.EndTime).AnyAsync())
+			{
+				// 老系统数据
+				var oldData = await Db.Queryable<StatisticsPurTypeSatisfied>()
+					.Where(x => x.Time >= dto.StartTime && x.Time <= dto.EndTime)
+					.GroupBy(x => x.Month)
+					.Select(x => new
+					{
+						Hour = x.Month.ToString() + ":00 - " + x.Month.ToString() + ":59",
+						_1 = SqlFunc.AggregateSum(x.Opinion),
+						_2 = SqlFunc.AggregateSum(x.PeopleHelp),
+						_3 = SqlFunc.AggregateSum(x.PollutionReporting),
+						_10 = SqlFunc.AggregateSum(x.Consult),
+						_15 = SqlFunc.AggregateSum(x.Suggest),
+						_20 = SqlFunc.AggregateSum(x.SeekHelp),
+						_25 = SqlFunc.AggregateSum(x.Praise),
+						_30 = SqlFunc.AggregateSum(x.Report),
+						_35 = SqlFunc.AggregateSum(x.Complaint),
+						_40 = SqlFunc.AggregateSum(x.Rests) + SqlFunc.AggregateSum(x.Invalid),
+						_50 = SqlFunc.AggregateSum(x.Epidemic),
+						_SB = SqlFunc.AggregateSum(x.Declare),
+					}).ToDataTableAsync();
+
+				#region  处理数据
+
+				foreach (var item in title)
+				{
+					var isColumn = oldData.Columns.Contains("_"+item.Key);
+					if (isColumn)
+					{
+						oldData.Columns["_" + item.Key].ColumnName = item.Value;
+					}
+				}
+
+				foreach (DataColumn col in dtList.Columns)
+				{
+					if (col.ColumnName != "Hour") col.DataType = typeof(Int64);
+				}
+
+				for (int i = 0; i < list.Rows.Count; i++)
+				{
+					DataRow newRow = dtList.NewRow();
+					for (int j = 0; j < list.Columns.Count; j++)
+					{
+						if (oldData.Columns[j].ColumnName == "Hour")
+						{
+							newRow[j] = list.Rows[i][j];
+						}
+						else
+						{
+							var num = string.IsNullOrEmpty(list.Rows[i][j].ToString()) ? 0 : int.Parse(list.Rows[i][j].ToString());
+							var oldRow = oldData.Select("Hour ='"+ list.Rows[i]["Hour"] + "'").FirstOrDefault();
+							//var oldColName = "_" + dtList.Columns[j].ColumnName;
+							var allNum = oldRow == null ? num : oldRow.Field<Int64>(dtList.Columns[j].ColumnName) + num;
+							newRow[j] = allNum;
+						}
+					}
+					dtList.Rows.Add(newRow);
+				}
+
+				#endregion
+			}
+			return InitDatatTable(dtList, dto.AddColumnName);
         }
 
         /// <summary>

+ 3 - 1
src/Hotline.Share/Dtos/Kv.cs

@@ -1,4 +1,6 @@
-namespace Hotline.Share.Dtos;
+using System.Security.Cryptography.X509Certificates;
+
+namespace Hotline.Share.Dtos;
 
 public class Kv
 {

+ 1 - 1
src/Hotline.Share/Dtos/Order/Detail/OrderFlowTraceDto.cs

@@ -97,7 +97,7 @@ public class OrderFlowTraceDto
     /// <summary>
     /// 附件
     /// </summary>
-    public List<FileDto>? Files { get; set; }
+    public List<FileJson>? FileJson { get; set; }
 
     /// <summary>
     /// 备注

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

@@ -2,6 +2,7 @@
 using Hotline.Share.Requests;
 using SqlSugar;
 using System.Data;
+using Hotline.Share.Dtos;
 using Hotline.Share.Dtos.Order;
 using XF.Domain.Repository;
 using Hotline.Share.Dtos.Bi;
@@ -68,7 +69,7 @@ namespace Hotline.Orders
         /// </summary>
         /// <param name="dto"></param>
         /// <returns></returns>
-        Task<DataTable> OrderAcceptanceTimeExport(TimeSharingPagedKeywordRequest dto);
+        Task<DataTable> OrderAcceptanceTimeExport(TimeSharingPagedKeywordRequest dto, List<Kv> title);
 
         /// <summary>
         /// 信件来源分时统计

+ 5 - 5
src/Hotline/Statistics/StatisticsDepart.cs

@@ -198,11 +198,11 @@ namespace Hotline.Statistics
 		[SugarColumn(Length = 10, DecimalDigits = 6, ColumnDescription = "总满意率")]
 		public decimal AllSatisfaction { get; set; }
 
-		///// <summary>
-		///// 统计日期
-		///// </summary>
-		//[SugarColumn(ColumnDescription = "统计日期")]
-		//public int DateTime { get; set; }
+		/// <summary>
+		/// 统计日期
+		/// </summary>
+		[SugarColumn(ColumnDescription = "统计日期")]
+		public DateTime Time { get; set; }
 
 		/// <summary>
 		/// 统计时限

+ 5 - 5
src/Hotline/Statistics/StatisticsDepartSatisfied.cs

@@ -132,11 +132,11 @@ namespace Hotline.Statistics
 		public int ScreenWaitNum { get; set; }
 
 
-		///// <summary>
-		///// 统计日期
-		///// </summary>
-		//[SugarColumn(ColumnDescription = "统计日期")]
-		//public int DateTime { get; set; }
+		/// <summary>
+		/// 统计日期
+		/// </summary>
+		[SugarColumn(ColumnDescription = "统计日期")]
+		public DateTime Time { get; set; }
 
 		/// <summary>
 		/// 统计时限

+ 5 - 5
src/Hotline/Statistics/StatisticsHotspotSatisfied.cs

@@ -101,11 +101,11 @@ namespace Hotline.Statistics
 		[SugarColumn(ColumnDescription = "(自贡)甄别为满意 自贡的视为满意名字是甄别为满意")]
 		public int ScreenSatisfaction { get; set; }
 
-		///// <summary>
-		///// 统计日期
-		///// </summary>
-		//[SugarColumn(ColumnDescription = "统计日期")]
-		//public int DateTime { get; set; }
+		/// <summary>
+		/// 统计日期
+		/// </summary>
+		[SugarColumn(ColumnDescription = "统计日期")]
+		public DateTime Time { get; set; }
 
 		/// <summary>
 		/// 统计时限

+ 5 - 5
src/Hotline/Statistics/StatisticsPurTypeSatisfied.cs

@@ -102,11 +102,11 @@ namespace Hotline.Statistics
 		[SugarColumn(ColumnDescription = "无效")]
 		public int Invalid { get; set; }
 
-		///// <summary>
-		///// 统计日期
-		///// </summary>
-		//[SugarColumn(ColumnDescription = "统计日期")]
-		//public int DateTime { get; set; }
+		/// <summary>
+		/// 统计日期
+		/// </summary>
+		[SugarColumn(ColumnDescription = "统计日期")]
+		public DateTime Time { get; set; }
 
 		/// <summary>
 		/// 统计时限