using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Threading.Tasks; using wispro.sp.share; namespace wispro.sp.api.Controllers { [Route("api/[controller]/[action]")] [ApiController] //[Authorize] public class ReportController : ControllerBase { spDbContext Context; public ReportController(spDbContext context) { Context = context; } public ChartDatas AppealReport(int type,DateTime? start,DateTime? end,int? userId) { ChartDatas retDatas = new ChartDatas(); var results = Context.AppealRecords.Where(b=>(1==1)); if (start.HasValue) { results = results.Where(b => b.CreateTime >= start); } if (end.HasValue) { results = results.Where(b => b.CreateTime <= end); } if (userId.HasValue) { results = results.Where(b => b.CreaterId == userId); } switch (type) { case 0: var retData = results.GroupBy(c => c.Creater.Name) .Select(g => new { key = g.Key, Count = g.Count() }).OrderByDescending(g=>g.Count) .ToDictionary(g => g.key, g => g.Count); retDatas.ATitle = "申诉人"; retDatas.Title = "申诉人统计"; retDatas.Datas = new List(); foreach (var key in retData.Keys) { retDatas.Datas.Add(new ChartData() { type = key,value=retData[key]} ); } return retDatas; break; case 1: var retData1 = results.GroupBy(c => c.Type.Name) .Select(g => new { key = g.Key, Count = g.Count() }).OrderByDescending(g => g.Count) .ToDictionary(g => g.key, g => g.Count); retDatas.ATitle = "申诉类型"; retDatas.Title = "申诉类型统计"; retDatas.Datas = new List(); foreach (var key in retData1.Keys) { retDatas.Datas.Add(new ChartData() { type = key, value = retData1[key] }); } return retDatas; break; case 2: var retData2 = results.GroupBy(c => c.Creater.Department) .Select(g => new { key = g.Key, Count = g.Count() }).OrderByDescending(g => g.Count) .ToDictionary(g => g.key, g => g.Count); retDatas.ATitle = "部门"; retDatas.Title = "部门申诉统计"; retDatas.Datas = new List(); foreach (var key in retData2.Keys) { retDatas.Datas.Add(new ChartData() { type = key, value = retData2[key] }); } return retDatas; break; case 3: var retData3 = results.GroupBy(c => new { c.Creater.Name,c.CreateTime.Year, c.CreateTime.Month }) .Select(g => new { key = g.Key, Count = g.Count() }).OrderByDescending(g => g.Count) .ToDictionary(g => g.key, g => g.Count); retDatas.ATitle = "申诉人"; retDatas.BTitle = "绩效月份"; retDatas.Title = "申诉人每月申诉统计"; retDatas.Datas = new List(); foreach (var key in retData3.Keys) { retDatas.Datas.Add(new ChartData() { type = key.Name, year = $" {DateTime.Parse($"{key.Year}-{key.Month}-1").ToString("yyyy-MM")}", value = retData3[key] }); } return retDatas; break; case 4: var retData4 = results.GroupBy(c => new { c.Type.Name, c.CreateTime.Year, c.CreateTime.Month }) .Select(g => new { key = g.Key, Count = g.Count() }).OrderByDescending(g => g.Count) .ToDictionary(g => g.key, g => g.Count); retDatas.ATitle = "申诉类型"; retDatas.BTitle = "绩效月份"; retDatas.Title = "申诉类型每月申诉统计"; retDatas.Datas = new List(); foreach (var key in retData4.Keys) { retDatas.Datas.Add(new ChartData() { type = key.Name, year = $" {DateTime.Parse($"{key.Year}-{key.Month}-1").ToString("yyyy-MM")}", value = retData4[key] }); } return retDatas; break; default: return null; break; } } } }