Forráskód Böngészése

Merge branch 'dev' of http://git.12345lm.cn/Fengwo/hotline into dev

Dun.Jason 10 hónapja
szülő
commit
aa2f48413c

+ 17 - 191
src/Hotline.Api/Controllers/Bi/BiOrderController.cs

@@ -2623,28 +2623,31 @@ namespace Hotline.Api.Controllers.Bi
         /// <param name="dto"></param>
         /// <returns></returns>
         [HttpGet("order_source_report_list")]
-        public async Task<List<OrderSourceHeaderVo>> QueryOrderSourceReportList([FromQuery] QueryOrderSourceRequest dto)
+        public async Task<Object> QueryOrderSourceReportList([FromQuery] QueryOrderSourceRequest dto)
         {
-            var data = await _orderApplication.QueryOrderSourceList(dto);
-            return data;
-            ;
+            var item = await _orderRepository.OrderSource(dto);
+
+            var titleData = await _systemDicDataRepository.Queryable()
+                .Where(p => p.DicTypeCode == "SourceChannel")
+                .Select(p => new
+                {
+                    Key = p.DicDataValue,
+                    Value = p.DicDataName
+                }).ToListAsync();
+
+            return new { Item = item, TitleData = titleData };
         }
         /// <summary>
         /// 信件来源统计导出
         /// </summary>
         /// <returns></returns>
         [HttpPost("order_source_list/_export")]
-        public async Task<FileStreamResult> QueryOrderSourceReportList([FromBody] ExportExcelDto<QueryOrderSourceRequest> dto)
+        public async Task<FileStreamResult> QueryOrderSourceListExport([FromBody] QueryOrderSourceRequest dto)
         {
-            var data = await _orderApplication.QueryOrderSourceList(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 dataTable = await _orderRepository.OrderSourceExport(dto);
+            var stream = ExcelHelper.CreateStream(dataTable);
+            return ExcelStreamResult(stream, "信件来源统计数据");
+		}
 
         /// <summary>
         /// 信件来源统计明细
@@ -2685,183 +2688,6 @@ namespace Hotline.Api.Controllers.Bi
             return ExcelStreamResult(stream, "信件来源统计明细数据");
         }
 
-        /// <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);
-            var totalVo = new OrderSourceHeaderVo()
-            {
-                Time = "合计",
-                Phone = data.Sum(x => x.Phone),
-                Web = data.Sum(x => x.Web),
-                Rests = data.Sum(x => x.Rests),
-                Created = data.Sum(x => x.Created),
-                WeChat = data.Sum(x => x.WeChat),
-                App = data.Sum(x => x.App),
-                WisdomYB = data.Sum(x => x.WisdomYB),
-                Platform = data.Sum(x => x.Platform),
-                Platform12328 = data.Sum(x => x.Platform12328),
-                MayorAndNetizens = data.Sum(x => x.MayorAndNetizens),
-                MediaYB = data.Sum(x => x.MediaYB),
-                Platform12345 = data.Sum(x => x.Platform12345),
-                Interaction = data.Sum(x => x.Interaction),
-                ServiceYB = data.Sum(x => x.ServiceYB),
-                CityTransfer = data.Sum(x => x.CityTransfer),
-                Platform110 = data.Sum(x => x.Platform110),
-                NoService = data.Sum(x => x.NoService),
-                Iyb = data.Sum(x => x.Iyb)
-            };
-            data.Add(totalVo);
-            return data;
-        }
-
-        /// <summary>
-        /// 信件来源分时统计柱状列表
-        /// </summary>
-        /// <param name="dto"></param>
-        /// <returns></returns>
-        [HttpGet("order_source_hours_report_columnar_list")]
-        public async Task<Object> QueryOrderSourceHoursReportColumnarList([FromQuery] QueryOrderSourceRequest dto)
-        {
-            var data = await _orderApplication.QueryOrderSourceHoursList(dto);
-            List<string> tiems = new List<string>();
-            for (int i = 0; i < 24; i++)
-            {
-                var item = i.ToString("D2") + ":00 - " + i.ToString("D2") + ":59";
-                tiems.Add(item);
-            }
-            var dataList = (from t1 in tiems
-                            join t2 in data on t1 equals t2.Time into t1_t2
-                            from item in t1_t2.DefaultIfEmpty()
-                            select new
-                            {
-                                Time = t1,
-                                Phone = t1_t2.Select(x => x.Phone).FirstOrDefault() == null ? 0 : t1_t2.Select(x => x.Phone).FirstOrDefault(),
-                                Web = t1_t2.Select(x => x.Web).FirstOrDefault() == null ? 0 : t1_t2.Select(x => x.Web).FirstOrDefault(),
-                                Rests = t1_t2.Select(x => x.Rests).FirstOrDefault() == null ? 0 : t1_t2.Select(x => x.Rests).FirstOrDefault(),
-                                Created = t1_t2.Select(x => x.Created).FirstOrDefault() == null ? 0 : t1_t2.Select(x => x.Created).FirstOrDefault(),
-                                WeChat = t1_t2.Select(x => x.WeChat).FirstOrDefault() == null ? 0 : t1_t2.Select(x => x.WeChat).FirstOrDefault(),
-                                App = t1_t2.Select(x => x.App).FirstOrDefault() == null ? 0 : t1_t2.Select(x => x.App).FirstOrDefault(),
-                                WisdomYB = t1_t2.Select(x => x.WisdomYB).FirstOrDefault() == null ? 0 : t1_t2.Select(x => x.WisdomYB).FirstOrDefault(),
-                                Platform = t1_t2.Select(x => x.Platform).FirstOrDefault() == null ? 0 : t1_t2.Select(x => x.Platform).FirstOrDefault(),
-                                Platform12328 = t1_t2.Select(x => x.Platform12328).FirstOrDefault() == null ? 0 : t1_t2.Select(x => x.Platform12328).FirstOrDefault(),
-                                MayorAndNetizens = t1_t2.Select(x => x.MayorAndNetizens).FirstOrDefault() == null ? 0 : t1_t2.Select(x => x.MayorAndNetizens).FirstOrDefault(),
-                                MediaYB = t1_t2.Select(x => x.MediaYB).FirstOrDefault() == null ? 0 : t1_t2.Select(x => x.MediaYB).FirstOrDefault(),
-                                Platform12345 = t1_t2.Select(x => x.Platform12345).FirstOrDefault() == null ? 0 : t1_t2.Select(x => x.Platform12345).FirstOrDefault(),
-                                Interaction = t1_t2.Select(x => x.Interaction).FirstOrDefault() == null ? 0 : t1_t2.Select(x => x.Interaction).FirstOrDefault(),
-                                ServiceYB = t1_t2.Select(x => x.ServiceYB).FirstOrDefault() == null ? 0 : t1_t2.Select(x => x.ServiceYB).FirstOrDefault(),
-                                CityTransfer = t1_t2.Select(x => x.CityTransfer).FirstOrDefault() == null ? 0 : t1_t2.Select(x => x.CityTransfer).FirstOrDefault(),
-                                Platform110 = t1_t2.Select(x => x.Platform110).FirstOrDefault() == null ? 0 : t1_t2.Select(x => x.Platform110).FirstOrDefault(),
-                                NoService = t1_t2.Select(x => x.NoService).FirstOrDefault() == null ? 0 : t1_t2.Select(x => x.NoService).FirstOrDefault(),
-                                Iyb = t1_t2.Select(x => x.Iyb).FirstOrDefault() == null ? 0 : t1_t2.Select(x => x.Iyb).FirstOrDefault(),
-                            }).ToList();
-            var res = new
-            {
-                Phone = new { Key = "电话", data = dataList.Select(x => x.Phone) },
-                Web = new { Key = "因特网", data = dataList.Select(x => x.Web) },
-                Rests = new { Key = "其他", data = dataList.Select(x => x.Rests) },
-                Created = new { Key = "自建", data = dataList.Select(x => x.Created) },
-                WeChat = new { Key = "微信", data = dataList.Select(x => x.WeChat) },
-                App = new { Key = "APP", data = dataList.Select(x => x.App) },
-                WisdomYB = new { Key = "智慧宜宾", data = dataList.Select(x => x.WisdomYB) },
-                Platform = new { Key = "综治平台", data = dataList.Select(x => x.Platform) },
-                Platform12328 = new { Key = "省12328平台", data = dataList.Select(x => x.Platform12328) },
-                MayorAndNetizens = new { Key = "市州与网民", data = dataList.Select(x => x.MayorAndNetizens) },
-                MediaYB = new { Key = "宜宾融媒体", data = dataList.Select(x => x.MediaYB) },
-                Platform12345 = new { Key = "省12345平台", data = dataList.Select(x => x.Platform12345) },
-                Interaction = new { Key = "省政民互动", data = dataList.Select(x => x.Interaction) },
-                ServiceYB = new { Key = "宜办事", data = dataList.Select(x => x.ServiceYB) },
-                CityTransfer = new { Key = "市州互转", data = dataList.Select(x => x.CityTransfer) },
-                Platform110 = new { Key = "宜宾110平台", data = dataList.Select(x => x.Platform110) },
-                NoService = new { Key = "办不成事反映窗口", data = dataList.Select(x => x.NoService) },
-                Iyb = new { Key = "I宜宾", data = dataList.Select(x => x.Iyb) }
-            };
-            return res;
-        }
-
-        /// <summary>
-        /// 信件来源分时统计表头
-        /// </summary>
-        /// <param name="dto"></param>
-        /// <returns></returns>
-        [HttpGet("order_source_hours_report_header")]
-        public async Task<Object> QueryOrderSourceHoursReportHeader()
-        {
-            List<Kv> header = new List<Kv>
-            {
-                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 = "宜宾110平台", Value = "Platform110" },
-                new Kv { Key = "办不成事反映窗口", Value = "NoService" },
-                new Kv { Key = "I宜宾", Value = "Iyb" }
-            };
-            List<string> tiems = new List<string>();
-            for (int i = 0; i < 24; i++)
-            {
-                var item = i.ToString("D2") + ":00 - " + i.ToString("D2") + ":59";
-                tiems.Add(item);
-            }
-            return new { Header = header, Tiems = tiems };
-        }
-
-        /// <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);
-            var totalVo = new OrderSourceHeaderVo()
-            {
-                Time = "合计",
-                Phone = data.Sum(x => x.Phone),
-                Web = data.Sum(x => x.Web),
-                Rests = data.Sum(x => x.Rests),
-                Created = data.Sum(x => x.Created),
-                WeChat = data.Sum(x => x.WeChat),
-                App = data.Sum(x => x.App),
-                WisdomYB = data.Sum(x => x.WisdomYB),
-                Platform = data.Sum(x => x.Platform),
-                Platform12328 = data.Sum(x => x.Platform12328),
-                MayorAndNetizens = data.Sum(x => x.MayorAndNetizens),
-                MediaYB = data.Sum(x => x.MediaYB),
-                Platform12345 = data.Sum(x => x.Platform12345),
-                Interaction = data.Sum(x => x.Interaction),
-                ServiceYB = data.Sum(x => x.ServiceYB),
-                CityTransfer = data.Sum(x => x.CityTransfer),
-                Platform110 = data.Sum(x => x.Platform110),
-                NoService = data.Sum(x => x.NoService),
-                Iyb = data.Sum(x => x.Iyb)
-            };
-            data.Add(totalVo);
-            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>

+ 0 - 14
src/Hotline.Application/Orders/IOrderApplication.cs

@@ -84,13 +84,6 @@ namespace Hotline.Application.Orders
         /// <returns></returns>
         ISugarQueryable<Order> QueryOrderSource(QueryOrderSourceRequest dto);
 
-		/// <summary>
-		/// 信件来源统计列表
-        /// </summary>
-		/// <param name="dto"></param>
-		/// <returns></returns>
-		Task<List<OrderSourceHeaderVo>> QueryOrderSourceList(QueryOrderSourceRequest dto);
-
         /// <summary>
         /// 信件来源统计
         /// </summary>
@@ -98,13 +91,6 @@ namespace Hotline.Application.Orders
         /// <returns></returns>
         ISugarQueryable<Order> QueryOrderSourceDetail(QueryOrderSourceDetailRequest dto);
 
-		/// <summary>
-		/// 信件来源分时统计列表
-		/// </summary>
-		/// <param name="dto"></param>
-		/// <returns></returns>
-		Task<List<OrderSourceHeaderVo>> QueryOrderSourceHoursList(QueryOrderSourceRequest dto);
-
 		/// <summary>
 		/// 部门超期统计
 		/// </summary>

+ 0 - 106
src/Hotline.Application/Orders/OrderApplication.cs

@@ -534,70 +534,6 @@ public class OrderApplication : IOrderApplication, IScopeDependency
             .Where(d => d.SourceChannel != null && d.SourceChannel != "");
     }
 
-    /// <summary>
-    /// 信件来源统计列表
-    /// </summary>
-    /// <param name="dto"></param>
-    /// <returns></returns>
-    public async Task<List<OrderSourceHeaderVo>> QueryOrderSourceList(QueryOrderSourceRequest dto)
-    {
-        if (dto.EndTime.HasValue)
-            dto.EndTime = dto.EndTime.Value.AddDays(1).AddSeconds(-1);
-        var data = await _orderRepository.Queryable()
-            .WhereIF(dto.StartTime.HasValue, d => d.CreationTime >= dto.StartTime)
-            .WhereIF(dto.EndTime.HasValue, d => d.CreationTime <= dto.EndTime)
-            .WhereIF(dto.IdentityType.HasValue, d => d.IdentityType == dto.IdentityType)
-            .Where(d => d.SourceChannel != null && d.SourceChannel != "")
-            .GroupBy(d => new { Time = d.CreationTime.ToString("yyyy-MM-dd") })
-            .Select(d => new OrderSourceHeaderVo
-            {
-                Time = d.CreationTime.ToString("yyyy-MM-dd"),
-                Phone = SqlFunc.AggregateSum(SqlFunc.IIF(d.SourceChannelCode == "RGDH", 1, 0)),
-                Web = SqlFunc.AggregateSum(SqlFunc.IIF(d.SourceChannelCode == "YTW", 1, 0)),
-                Rests = SqlFunc.AggregateSum(SqlFunc.IIF(d.SourceChannelCode == "QT", 1, 0)),
-                Created = SqlFunc.AggregateSum(SqlFunc.IIF(d.SourceChannelCode == "ZJ", 1, 0)),
-                WeChat = SqlFunc.AggregateSum(SqlFunc.IIF(d.SourceChannelCode == "WX", 1, 0)),
-                App = SqlFunc.AggregateSum(SqlFunc.IIF(d.SourceChannelCode == "AP", 1, 0)),
-                WisdomYB = SqlFunc.AggregateSum(SqlFunc.IIF(d.SourceChannelCode == "ZHYB", 1, 0)),
-                Platform = SqlFunc.AggregateSum(SqlFunc.IIF(d.SourceChannelCode == "ZZPT", 1, 0)),
-                Platform12328 = SqlFunc.AggregateSum(SqlFunc.IIF(d.SourceChannelCode == "S12328", 1, 0)),
-                MayorAndNetizens = SqlFunc.AggregateSum(SqlFunc.IIF(d.SourceChannelCode == "SZYSM", 1, 0)),
-                MediaYB = SqlFunc.AggregateSum(SqlFunc.IIF(d.SourceChannelCode == "YBRMT", 1, 0)),
-                Platform12345 = SqlFunc.AggregateSum(SqlFunc.IIF(d.SourceChannelCode == "S12345", 1, 0)),
-                Interaction = SqlFunc.AggregateSum(SqlFunc.IIF(d.SourceChannelCode == "SZMHD", 1, 0)),
-                ServiceYB = SqlFunc.AggregateSum(SqlFunc.IIF(d.SourceChannelCode == "YBS", 1, 0)),
-                CityTransfer = SqlFunc.AggregateSum(SqlFunc.IIF(d.SourceChannelCode == "SZHZ", 1, 0)),
-                Platform110 = SqlFunc.AggregateSum(SqlFunc.IIF(d.SourceChannelCode == "YB110", 1, 0)),
-                NoService = SqlFunc.AggregateSum(SqlFunc.IIF(d.SourceChannelCode == "SMZXBNCS", 1, 0)),
-                Iyb = SqlFunc.AggregateSum(SqlFunc.IIF(d.SourceChannelCode == "IYB", 1, 0))
-            }).ToListAsync();
-        var totalVo = new OrderSourceHeaderVo()
-        {
-            Time = "合计",
-            Phone = data.Sum(x => x.Phone),
-            Web = data.Sum(x => x.Web),
-            Rests = data.Sum(x => x.Rests),
-            Created = data.Sum(x => x.Created),
-            WeChat = data.Sum(x => x.WeChat),
-            App = data.Sum(x => x.App),
-            WisdomYB = data.Sum(x => x.WisdomYB),
-            Platform = data.Sum(x => x.Platform),
-            Platform12328 = data.Sum(x => x.Platform12328),
-            MayorAndNetizens = data.Sum(x => x.MayorAndNetizens),
-            MediaYB = data.Sum(x => x.MediaYB),
-            Platform12345 = data.Sum(x => x.Platform12345),
-            Interaction = data.Sum(x => x.Interaction),
-            ServiceYB = data.Sum(x => x.ServiceYB),
-            CityTransfer = data.Sum(x => x.CityTransfer),
-            Platform110 = data.Sum(x => x.Platform110),
-            NoService = data.Sum(x => x.NoService),
-            Iyb = data.Sum(x => x.Iyb)
-        };
-        data.Add(totalVo);
-        return data;
-    }
-
-
 	/// <summary>
 	/// 信件来源统计明细
 	/// </summary>
@@ -613,48 +549,6 @@ public class OrderApplication : IOrderApplication, IScopeDependency
             .Where(d => d.SourceChannel != null && d.SourceChannel != "");
     }
 
-	/// <summary>
-	/// 信件来源分时统计列表
-	/// </summary>
-	/// <param name="dto"></param>
-	/// <returns></returns>
-	public async Task<List<OrderSourceHeaderVo>> QueryOrderSourceHoursList(QueryOrderSourceRequest dto)
-	{
-		if (dto.EndTime.HasValue)
-			dto.EndTime = dto.EndTime.Value.AddDays(1).AddSeconds(-1);
-
-        var data =await _orderRepository.Queryable()
-			.WhereIF(dto.StartTime.HasValue, d => d.CreationTime >= dto.StartTime)
-			.WhereIF(dto.EndTime.HasValue, d => d.CreationTime <= dto.EndTime)
-			.WhereIF(dto.IdentityType.HasValue, d => d.IdentityType == dto.IdentityType)
-			.Where(d => d.SourceChannel != null && d.SourceChannel != "")
-			.GroupBy(d => new { Time = d.CreationTime.ToString("HH") })
-			.Select(d => new OrderSourceHeaderVo
-			{
-				Time = d.CreationTime.ToString("HH")+":00 - " + d.CreationTime.ToString("HH")+":59",
-                TimeSort = d.CreationTime.ToString("HH"),
-				Phone = SqlFunc.AggregateSum(SqlFunc.IIF(d.SourceChannelCode == "RGDH", 1, 0)),
-				Web = SqlFunc.AggregateSum(SqlFunc.IIF(d.SourceChannelCode == "YTW", 1, 0)),
-				Rests = SqlFunc.AggregateSum(SqlFunc.IIF(d.SourceChannelCode == "QT", 1, 0)),
-				Created = SqlFunc.AggregateSum(SqlFunc.IIF(d.SourceChannelCode == "ZJ", 1, 0)),
-				WeChat = SqlFunc.AggregateSum(SqlFunc.IIF(d.SourceChannelCode == "WX", 1, 0)),
-				App = SqlFunc.AggregateSum(SqlFunc.IIF(d.SourceChannelCode == "AP", 1, 0)),
-				WisdomYB = SqlFunc.AggregateSum(SqlFunc.IIF(d.SourceChannelCode == "ZHYB", 1, 0)),
-				Platform = SqlFunc.AggregateSum(SqlFunc.IIF(d.SourceChannelCode == "ZZPT", 1, 0)),
-				Platform12328 = SqlFunc.AggregateSum(SqlFunc.IIF(d.SourceChannelCode == "S12328", 1, 0)),
-				MayorAndNetizens = SqlFunc.AggregateSum(SqlFunc.IIF(d.SourceChannelCode == "SZYSM", 1, 0)),
-				MediaYB = SqlFunc.AggregateSum(SqlFunc.IIF(d.SourceChannelCode == "YBRMT", 1, 0)),
-				Platform12345 = SqlFunc.AggregateSum(SqlFunc.IIF(d.SourceChannelCode == "S12345", 1, 0)),
-				Interaction = SqlFunc.AggregateSum(SqlFunc.IIF(d.SourceChannelCode == "SZMHD", 1, 0)),
-				ServiceYB = SqlFunc.AggregateSum(SqlFunc.IIF(d.SourceChannelCode == "YBS", 1, 0)),
-				CityTransfer = SqlFunc.AggregateSum(SqlFunc.IIF(d.SourceChannelCode == "SZHZ", 1, 0)),
-				Platform110 = SqlFunc.AggregateSum(SqlFunc.IIF(d.SourceChannelCode == "YB110", 1, 0)),
-				NoService = SqlFunc.AggregateSum(SqlFunc.IIF(d.SourceChannelCode == "SMZXBNCS", 1, 0)),
-				Iyb = SqlFunc.AggregateSum(SqlFunc.IIF(d.SourceChannelCode == "IYB", 1, 0))
-			}).OrderBy(d=> d.TimeSort).ToListAsync();
-		return data;
-	}
-
 	/// <summary>
 	/// 部门超期统计
 	/// </summary>

+ 70 - 7
src/Hotline.Repository.SqlSugar/Orders/OrderRepository.cs

@@ -574,13 +574,76 @@ namespace Hotline.Repository.SqlSugar.Orders
             return InitDatatTable(dt, dto.AddColumnName);
         }
 
-        /// <summary>
-        /// 处理导出数据
-        /// </summary>
-        /// <param name="dt"></param>
-        /// <param name="AddColumnName"></param>
-        /// <returns></returns>
-        public DataTable InitDatatTable(DataTable dt, List<string> AddColumnName)
+		/// <summary>
+		/// 信件来源统计
+		/// </summary>
+		/// <param name="dto"></param>
+		/// <returns></returns>
+		public async Task<object> OrderSource(QueryOrderSourceRequest dto)
+		{
+			var listOrder = Db.Queryable<Order>()
+				 .Where(p => p.CreationTime >= dto.StartTime && p.CreationTime <= dto.EndTime)
+				 .WhereIF(dto.IdentityType != null, p => p.IdentityType == dto.IdentityType)
+				 .Select(p => new
+				 {
+					 SourceChannelCode = p.SourceChannelCode
+				 })
+			   .MergeTable();
+
+			var listOrg = await Db.Queryable<SystemDicData>()
+			  .LeftJoin(listOrder, (s, p) => s.DicDataValue == p.SourceChannelCode)
+			  .Where((s, p) => s.DicTypeCode == "SourceChannel")
+			  .GroupBy((s, p) => s.DicDataValue).GroupBy((s, p) => s.DicDataName)
+			  .OrderBy((s, p) => s.DicDataValue)
+			  .Select((s, p) => new
+			  {
+				  count = SqlFunc.AggregateSum(SqlFunc.IIF(p.SourceChannelCode != null && p.SourceChannelCode != "", 1, 0)),
+				  DicDataValue = s.DicDataValue,
+				  DicDataName = s.DicDataName
+			  })
+			  .ToPivotListAsync(p => p.DicDataValue, p => p.DicDataName, p => p.Sum(x => x.count));
+			return listOrg;
+
+		}
+
+		/// <summary>
+		/// 信件来源统计---导出
+		/// </summary>
+		/// <param name="dto"></param>
+		/// <returns></returns>
+		public async Task<DataTable> OrderSourceExport(QueryOrderSourceRequest dto)
+		{
+			var listOrder = Db.Queryable<Order>()
+				 .Where(p => p.CreationTime >= dto.StartTime && p.CreationTime <= dto.EndTime)
+				 .WhereIF(dto.IdentityType != null, p => p.IdentityType == dto.IdentityType)
+				 .Select(p => new
+				 {
+					 SourceChannelCode = p.SourceChannelCode
+				 })
+			   .MergeTable();
+
+			var listOrg = await Db.Queryable<SystemDicData>()
+			  .LeftJoin(listOrder, (s, p) => s.DicDataValue == p.SourceChannelCode)
+			  .Where((s, p) => s.DicTypeCode == "SourceChannel")
+			  .GroupBy((s, p) => s.DicDataValue).GroupBy((s, p) => s.DicDataName)
+			  .OrderBy((s, p) => s.DicDataValue)
+			  .Select((s, p) => new
+			  {
+				  count = SqlFunc.AggregateSum(SqlFunc.IIF(p.SourceChannelCode != null && p.SourceChannelCode != "", 1, 0)),
+				  DicDataValue = s.DicDataValue,
+				  DicDataName = s.DicDataName
+			  })
+			  .ToPivotTableAsync(p => p.DicDataValue, p => p.DicDataName, p => p.Sum(x => x.count));
+			return InitDatatTable(listOrg, dto.AddColumnName);
+		}
+
+		/// <summary>
+		/// 处理导出数据
+		/// </summary>
+		/// <param name="dt"></param>
+		/// <param name="AddColumnName"></param>
+		/// <returns></returns>
+		public DataTable InitDatatTable(DataTable dt, List<string> AddColumnName)
         {
             //修改列名
             if (dt.Columns.Contains("Hour"))

+ 5 - 0
src/Hotline.Share/Requests/PagedKeywordRequest.cs

@@ -253,6 +253,11 @@ public record QueryOrderSourceRequest : ReportPagedRequest
     /// 来电/信人身份
     /// </summary>
     public EIdentityType? IdentityType { get; set; }
+
+    /// <summary>
+    /// 导出列名
+    /// </summary>
+    public List<string> AddColumnName { get; set; }
 }
 
 public record QueryOrderSourceDetailRequest : QueryOrderSourceRequest

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

@@ -89,7 +89,22 @@ namespace Hotline.Orders
         /// <returns></returns>
         ISugarQueryable<OrderVisitDetail> OrgVisitDetailList(OrgVisitDetailListReq dto);
 
-    }
+        /// <summary>
+        /// 信件来源统计
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        Task<object> OrderSource(QueryOrderSourceRequest dto);
+
+        /// <summary>
+        /// 信件来源统计 -- 导出
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+		Task<DataTable> OrderSourceExport(QueryOrderSourceRequest dto);
+
+
+	}
 
     public interface IOrderScreenRepository : IRepositoryWorkflow<OrderScreen>
     {