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;
}
///
///
///
///
/// 0:申诉人;1:申诉类型;2:部门申诉统计;
/// 3:申诉人每月申诉统计;4:申诉类型每月申诉统计
///
/// 开始时间
/// 结束时间
///
///
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;
}
}
///
/// 绩效统计报表
///
///
/// 0:按人统计
/// 1:按部门统计
/// 2:按人员专案统计
///
/// ///
/// 是否按年统计,默认为false按月统计
///
///
public ChartDatas StaticsReport(int type,bool isYear=false)
{
ChartDatas retDatas = new ChartDatas();
switch (type)
{
case 0:
if (isYear)
{
var retYearData = Context.StaffStatistics.GroupBy(s => new { s.Staff.Name, s.CalMonth.Year })
.Select(g => new { Name = g.Key.Name, Year = g.Key.Year , sum = g.Sum(s => s.FinianlPoint) })
.OrderByDescending(g => g.sum);
retDatas.ATitle = "代理人";
retDatas.BTitle = "绩效年份";
retDatas.Title = "代理人每年绩效统计";
retDatas.Datas = new List();
foreach (var key in retYearData)
{
retDatas.Datas.Add(new ChartData() { type = key.Name, year = $"{key.Year}", value = key.sum.HasValue ? key.sum.Value : 0 });
}
return retDatas;
}
else
{
var retData = Context.StaffStatistics.GroupBy(s => new { s.Staff.Name, s.CalMonth.Year,s.CalMonth.Month })
.Select(g => new { Name = g.Key.Name, Year=g.Key.Year,Month=g.Key.Month , sum = g.Sum(s => s.FinianlPoint) })
.OrderByDescending(g => g.sum);
retDatas.ATitle = "代理人";
retDatas.BTitle = "绩效月份";
retDatas.Title = "代理人每月绩效统计";
retDatas.Datas = new List();
foreach (var key in retData)
{
retDatas.Datas.Add(new ChartData() { type = key.Name, year = $" {DateTime.Parse($"{key.Year}-{key.Month}-1").ToString("yyyy-MM")}", value = key.sum.HasValue ? key.sum.Value : 0 });
}
return retDatas;
}
break;
case 1:
if (isYear)
{
var retData2 = Context.StaffStatistics.GroupBy(s => new { s.Staff.Department, s.CalMonth.Year })
.Select(g => new { Name = g.Key.Department, Year = g.Key.Year, sum = g.Sum(s => s.FinianlPoint) })
.OrderByDescending(g => g.sum);
retDatas.ATitle = "部门";
retDatas.BTitle = "绩效月份";
retDatas.Title = "部门每月绩效统计";
retDatas.Datas = new List();
foreach (var key in retData2)
{
retDatas.Datas.Add(new ChartData() { type = key.Name, year = $"{key.Year }", value = key.sum.HasValue ? key.sum.Value : 0 });
}
return retDatas;
}
else
{
var retData1 = Context.StaffStatistics.GroupBy(s => new { s.Staff.Department, s.CalMonth.Year,s.CalMonth.Month })
.Select(g => new { Name = g.Key.Department, Year = g.Key.Year, Month = g.Key.Month, sum = g.Sum(s => s.FinianlPoint) })
.OrderByDescending(g => g.sum);
retDatas.ATitle = "部门";
retDatas.BTitle = "绩效月份";
retDatas.Title = "部门每月绩效统计";
retDatas.Datas = new List();
foreach (var key in retData1)
{
retDatas.Datas.Add(new ChartData() { type = key.Name, year = $" {DateTime.Parse($"{key.Year}-{key.Month}-1").ToString("yyyy-MM")}", value = key.sum.HasValue ? key.sum.Value : 0 });
}
return retDatas;
}
break;
case 2:
var retData3 = Context.StaffStatistics.Where(s=>s.jxType.Contains("专案")).GroupBy(s => new { s.Staff.Name, s.CalMonth.Year, s.CalMonth.Month })
.Select(g => new { Name = g.Key.Name, Year = g.Key.Year, Month = g.Key.Month, sum = g.Sum(s => s.FinianlPoint) })
.OrderByDescending(g => g.sum);
retDatas.ATitle = "人员";
retDatas.BTitle = "绩效月份";
retDatas.Title = "人员每月专案绩效统计";
retDatas.Datas = new List();
foreach (var key in retData3)
{
retDatas.Datas.Add(new ChartData() { type = key.Name, year = $" {DateTime.Parse($"{key.Year}-{key.Month}-1").ToString("yyyy-MM")}", value = key.sum.HasValue ? key.sum.Value : 0 });
}
return retDatas;
break;
case 3:
break;
}
return retDatas;
}
}
}