using Learun.Application.Base.SystemModule;
using Learun.Application.TwoDevelopment.EducationalAdministration;
using Learun.Util;
using Nancy;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
namespace Learun.Application.WebApi.Modules.Echarts
{
public class StudentEchartsApi : BaseNoAuthentication
{
private StuInfoBasicIBLL stuInfoBasicIBLL = new StuInfoBasicBLL();
private DataItemIBLL dataItemIBLL = new DataItemBLL();
private ClassInfoIBLL classInfoIBLL = new ClassInfoBLL();
private DIC_PROVINCEIBLL dIC_PROVINCEIBLL = new DIC_PROVINCEBLL();
private DIC_CITYIBLL dIC_CITYIBLL = new DIC_CITYBLL();
private StuEncourgementIBLL stuEncourgementIBLL = new StuEncourgementBLL();
private StuTransferInfoIBLL stuTransferInfoIBLL = new StuTransferInfoBLL();
private StuGraduateStatisticIBLL stuGraduateStatisticIBLL = new StuGraduateStatisticBLL();
private CdMajorIBLL cdMajorIBLL = new CdMajorBLL();
private EmpInfoIBLL empInfoIBLL = new EmpInfoBLL();
public StudentEchartsApi() : base("/api/studentEcharts/")
{
Get["/stuTotalNum"] = stuTotalNum;
Get["/stuManNum"] = stuManNum;
Get["/stuWomanNum"] = stuWomanNum;
Get["/stuSexEchart"] = stuSexEchart;
Get["/stuAgeEchart"] = stuAgeEchart;
Get["/stuNationalityEchart"] = stuNationalityEchart;
Get["/stuPartyFaceEchart"] = stuPartyFaceEchart;
Get["/stuClassPartyFaceEchart"] = stuClassPartyFaceEchart;
Get["/stuProvinceEchart"] = stuProvinceEchart;
Get["/stuEncourgementNum"] = stuEncourgementNum;
Get["/stuEncourgementEchart"] = stuEncourgementEchart;
Get["/stuTransferNum"] = stuTransferNum;
Get["/stuGraduateEchart"] = stuGraduateEchart;
Get["/stuMapEchart"] = stuMapEchart;
Get["/stuGradeSelect"] = stuGradeSelect;
Get["/stuClassSelect"] = stuClassSelect;
Get["/majorSelect"] = majorSelect;
Get["/stuClassEchart"] = stuClassEchart;
Get["/teacherNumOfZZMM"] = teacherNumOfZZMM;
Get["/teacherNumOfBZQK"] = teacherNumOfBZQK;
Get["/teacherAgeEchart"] = teacherAgeEchart;
Get["/teacherSexEchart"] = teacherSexEchart;
Get["/teacherCollegeEchart"] = teacherCollegeEchart;
Get["/teacherNationalEchart"] = teacherNationalEchart;
}
#region 学生信息分析
///
/// 在校学生人数
///
///
///
public Response stuTotalNum(dynamic _)
{
var sum = stuInfoBasicIBLL.GetAllList().Count();
var res = new { value = sum };
return Res(res);
}
///
/// 在校学生人数-男
///
///
///
public Response stuManNum(dynamic _)
{
var sum = stuInfoBasicIBLL.GetAllList().Where(x => x.GenderNo == true).Count();
var res = new { value = sum };
return Res(res);
}
///
/// 在校学生人数-女
///
///
///
public Response stuWomanNum(dynamic _)
{
var sum = stuInfoBasicIBLL.GetAllList().Where(x => x.GenderNo == false).Count();
var res = new { value = sum };
return Res(res);
}
///
/// 在校学生人数-性别图表
///
///
///
public Response stuSexEchart(dynamic _)
{
var stuList = stuInfoBasicIBLL.GetAllList();
var stuManNum = stuList.Where(x => x.GenderNo == true).Count();
var stuWomanNum = stuList.Where(x => x.GenderNo == false).Count();
var res = new BarModel()
{
categories = new List(),
series = new List()
};
res.categories.Add("性别");
var s1data = new List();
s1data.Add(stuManNum);
res.series.Add(new seriesModel { name = "男", data = s1data });
var s2data = new List();
s2data.Add(stuWomanNum);
res.series.Add(new seriesModel { name = "女", data = s2data });
return Res(res);
}
///
/// 学生年龄分布
///
///
///
public Response stuAgeEchart(dynamic _)
{
var param = this.GetReqData();
var res = new List();
var stuList = stuInfoBasicIBLL.GetAllList().Where(x => x.Birthday.HasValue);
if (!string.IsNullOrEmpty(param))
{
stuList = stuList.Where(x => x.Grade == param);
}
var num1820 = stuList.Where(x => Math.Abs(x.Birthday.Value.Year - DateTime.Now.Year) >= 18 && Math.Abs(x.Birthday.Value.Year - DateTime.Now.Year) <= 20).Count();
res.Add(new PieModel() { name = "18-20", value = num1820 });
var num2123 = stuList.Where(x => Math.Abs(x.Birthday.Value.Year - DateTime.Now.Year) >= 21 && Math.Abs(x.Birthday.Value.Year - DateTime.Now.Year) <= 23).Count();
res.Add(new PieModel() { name = "21-23", value = num2123 });
var num2426 = stuList.Where(x => Math.Abs(x.Birthday.Value.Year - DateTime.Now.Year) >= 24 && Math.Abs(x.Birthday.Value.Year - DateTime.Now.Year) <= 26).Count();
res.Add(new PieModel() { name = "24-26", value = num2426 });
return Res(res);
}
///
/// 学生民族分布
///
///
///
public Response stuNationalityEchart(dynamic _)
{
var param = this.GetReqData();
var stuList = stuInfoBasicIBLL.GetAllList().Where(x => x.NationalityNo != null && x.NationalityNo.Length > 0);
if (!string.IsNullOrEmpty(param))
{
stuList = stuList.Where(x => x.Grade == param);
}
var stuListGroup = stuList.GroupBy(x => x.NationalityNo).Select(x => new
{
NationalityNo = x.Key,
manNum = x.Where(y => y.GenderNo == true).Count(),
womanNum = x.Where(y => y.GenderNo == false).Count()
}).OrderBy(x => x.NationalityNo);
var nationalityList = dataItemIBLL.GetDetailList2("National", null);
var res = new BarModel()
{
categories = new List(),
series = new List()
};
var s1data = new List();
var s2data = new List();
foreach (var item in stuListGroup)
{
res.categories.Add(nationalityList.FirstOrDefault(x => x.F_ItemValue == item.NationalityNo)?.F_ItemName);
s1data.Add(item.manNum);
s2data.Add(item.womanNum);
}
res.series.Add(new seriesModel { name = "男", data = s1data });
res.series.Add(new seriesModel { name = "女", data = s2data });
return Res(res);
}
///
/// 学生政治面貌
///
///
///
public Response stuPartyFaceEchart(dynamic _)
{
var param = this.GetReqData();
var res = new List();
var stuList = stuInfoBasicIBLL.GetAllList();
if (!string.IsNullOrEmpty(param))
{
stuList = stuList.Where(x => x.Grade == param);
}
//中共党员03 共青团员01 群众02 不限
var num1 = stuList.Where(x => x.PartyFaceNo == "03").Count();
res.Add(new PieModel() { name = "中共党员", value = num1 });
var num2 = stuList.Where(x => x.PartyFaceNo == "01").Count();
res.Add(new PieModel() { name = "共青团员", value = num2 });
var num3 = stuList.Where(x => x.PartyFaceNo == "02").Count();
res.Add(new PieModel() { name = "群众", value = num3 });
var num4 = stuList.Where(x => x.PartyFaceNo != "03" && x.PartyFaceNo != "01" && x.PartyFaceNo != "02").Count();
res.Add(new PieModel() { name = "不限", value = num4 });
return Res(res);
}
///
/// 学生政治面貌-按班级统计
///
///
///
public Response stuClassPartyFaceEchart(dynamic _)
{
var res = new List();
//按班级统计
var stuList = stuInfoBasicIBLL.GetAllList().Where(x => x.ClassNo != null && x.ClassNo.Length > 0).GroupBy(x => x.ClassNo).Select(x => new
{
classNo = x.Key,
stuList = x
}).OrderBy(x => x.classNo);
//中共党员03 共青团员01 群众02 不限
foreach (var item in stuList)
{
var model = new TableModel()
{
type1 = classInfoIBLL.GetClassInfoEntityByClassNo(item.classNo)?.ClassName,
type2 = item.stuList.Where(x => x.PartyFaceNo == "03").Count().ToString(),
type3 = item.stuList.Where(x => x.PartyFaceNo == "01").Count().ToString(),
type4 = item.stuList.Where(x => x.PartyFaceNo == "02").Count().ToString(),
type5 = item.stuList.Where(x => x.PartyFaceNo != "03" && x.PartyFaceNo != "01" && x.PartyFaceNo != "02").Count().ToString(),
};
res.Add(model);
}
return Res(res);
}
///
/// 学生籍贯地区
///
///
///
public Response stuProvinceEchart(dynamic _)
{
var param = this.GetReqData();
var res = new List();
var stuList = stuInfoBasicIBLL.GetAllList().Where(x => x.F_ProvinceId != null && x.F_ProvinceId.Length > 0);
if (!string.IsNullOrEmpty(param))
{
stuList = stuList.Where(x => x.Grade == param);
}
var stuListGroup = stuList.GroupBy(x => x.F_ProvinceId).Select(x => new
{
provinceCode = x.Key,
num = x.Count()
}).OrderBy(x => x.provinceCode);
foreach (var item in stuListGroup)
{
var model = new PieModel()
{
name = dIC_PROVINCEIBLL.GetDIC_PROVINCEEntityByCode(item.provinceCode)?.PNAME,
value = item.num
};
res.Add(model);
}
return Res(res);
}
///
/// 学生奖励人数
///
///
///
public Response stuEncourgementNum(dynamic _)
{
var sum = stuEncourgementIBLL.GetAllList().Count();
var res = new { value = sum };
return Res(res);
}
///
/// 学生奖励
///
///
///
public Response stuEncourgementEchart(dynamic _)
{
var res = stuEncourgementIBLL.GetPageList(null).GroupBy(x => x.GenderNo).Select(x => new PieModel()
{
name = x.Key.Value ? "男" : "女",
value = x.Count()
});
return Res(res);
}
///
/// 异动人数
///
///
///
public Response stuTransferNum(dynamic _)
{
var param = this.GetReq();
var res = new RingModel();
var list = stuTransferInfoIBLL.GetList(null).Where(x => x.F_EnabledMark == 1);
if (!string.IsNullOrEmpty(param.ClassNo))
{
list = list.Where(x => x.ClassNo == param.ClassNo);
}
if (!string.IsNullOrEmpty(param.AnomalousType))
{
res.value = list.Where(x => x.AnomalousType == param.AnomalousType).Count();
if (list.Count() > 0)
{
res.data = ((res.value.ToDecimal() / list.Count().ToDecimal()) * 100).ToDecimal(2);
}
}
return Res(res);
}
///
/// 学生毕业统计
///
///
///
public Response stuGraduateEchart(dynamic _)
{
var stuList = stuGraduateStatisticIBLL.GetList().Where(x => x.UniversityLevel != null && x.UniversityLevel.Length > 0).GroupBy(x => x.UniversityLevel).Select(x => new
{
UniversityLevel = x.Key,
Num = x.Count()
});
var GraduateLevelList = dataItemIBLL.GetDetailList2("GraduateLevel", null);
var res = new List();
foreach (var item in stuList)
{
var model = new PieModel()
{
name = GraduateLevelList.FirstOrDefault(x => x.F_ItemValue == item.UniversityLevel)?.F_ItemName + "毕业",
value = item.Num
};
res.Add(model);
}
return Res(res);
}
///
/// 招生情况
///
///
///
public Response stuMapEchart(dynamic _)
{
var res = new List();
var stuList = stuInfoBasicIBLL.GetAllList().Where(x => x.F_ProvinceId != null && x.F_ProvinceId.Length > 0 && x.F_ProvinceId == "420000").GroupBy(x => x.F_CityId).Select(x => new
{
F_CityId = x.Key,
num = x.Count()
}).OrderBy(x => x.F_CityId);
foreach (var item in stuList)
{
var model = new MapModel()
{
code = item.F_CityId,
area = dIC_CITYIBLL.GetDIC_CITYEntityByCode(item.F_CityId)?.CNAME,
number = item.num
};
res.Add(model);
}
return Res(res);
}
///
/// 年级下拉框
///
///
///
public Response stuGradeSelect(dynamic _)
{
var res = new List();
var stuList = stuInfoBasicIBLL.GetAllList().Where(x => x.Grade != null && x.Grade.Length > 0).GroupBy(x => x.Grade).Select(x => new SelectModel()
{
value = x.Key,
label = x.Key + "级"
}).OrderBy(x => x.value);
res.Add(new SelectModel() { value = "", label = "全年级" });
res.AddRange(stuList);
return Res(res.OrderBy(x => x.value));
}
///
/// 异动-班级下拉框
///
///
///
public Response stuClassSelect(dynamic _)
{
var res = new List();
var stuList = stuTransferInfoIBLL.GetList(null).Where(x => x.F_EnabledMark == 1 && x.ClassNo != null && x.ClassNo.Length > 0).GroupBy(x => x.ClassNo).Select(x => new SelectModel()
{
value = x.Key,
label = classInfoIBLL.GetClassInfoEntityByClassNo(x.Key)?.ClassName
}).OrderBy(x => x.value);
res.Add(new SelectModel() { value = "", label = "全校" });
res.AddRange(stuList);
return Res(res.OrderBy(x => x.value));
}
#endregion
///
/// 专业下拉框
///
///
///
public Response majorSelect(dynamic _)
{
var res = new List();
var stuList = cdMajorIBLL.GetAllList().Where(x => x.MajorNo != null && x.MajorNo.Length > 0).GroupBy(x => x.MajorNo).Select(x => new SelectModel()
{
value = x.Key,
label = x.FirstOrDefault().MajorName
}).OrderBy(x => x.value);
res.Add(new SelectModel() { value = "", label = "全校" });
res.AddRange(stuList);
return Res(res.OrderBy(x => x.value));
}
///
/// 学生班级信息统计
///
///
///
public Response stuClassEchart(dynamic _)
{
var param = this.GetReq();
var res = new List();
var stuList = classInfoIBLL.GetAllClass().Where(x => x.ClassNo != null && x.ClassNo.Length > 0);
if (!string.IsNullOrEmpty(param.MajorNo))
{
stuList = stuList.Where(x => x.MajorNo == param.MajorNo);
}
var groupList = stuList.GroupBy(x => x.ClassNo).Select(x => new TableModelOfClass()
{
classno = x.Key,
classname = x.FirstOrDefault().ClassName,
man = stuInfoBasicIBLL.GetStuInfoByClassNo(x.Key).Where(y => y.GenderNo == true).Count(),
woman = stuInfoBasicIBLL.GetStuInfoByClassNo(x.Key).Where(y => y.GenderNo == false).Count(),
total = stuInfoBasicIBLL.GetStuInfoByClassNo(x.Key).Count()
}).OrderBy(x => x.classno);
res.AddRange(groupList);
return Res(res);
}
#region 教师信息分析
///
/// 教师人数-政治面貌
///
///
///
public Response teacherNumOfZZMM(dynamic _)
{
var param = this.GetReqData();
var list = empInfoIBLL.GetAllList().Where(x => x.CheckMark == true);
if (!string.IsNullOrEmpty(param))
{
list = list.Where(x => x.PartyFaceNo == param);
}
return Res(new { value = list.Count() });
}
///
/// 教师人数-编制情况
///
///
///
public Response teacherNumOfBZQK(dynamic _)
{
var param = this.GetReqData();
var list = empInfoIBLL.GetAllList().Where(x => x.CheckMark == true);
if (!string.IsNullOrEmpty(param))
{
list = list.Where(x => x.CompilationCategory == param);
}
return Res(new { value = list.Count() });
}
///
/// 教师年龄分布
///
///
///
public Response teacherAgeEchart(dynamic _)
{
var res = new BarModel()
{
categories = new List(),
series = new List()
};
res.categories.Add("20-30");
res.categories.Add("31-35");
res.categories.Add("36-40");
res.categories.Add("41-45");
res.categories.Add("46-50");
res.categories.Add("51-55");
res.categories.Add("56-70");
var list = empInfoIBLL.GetAllList().Where(x => x.CheckMark == true);
var seriesModel = new seriesModel()
{
name = "年龄段",
data = new List()
};
seriesModel.data.Add(list.Where(x => Math.Abs(x.Birthday.Value.Year - DateTime.Now.Year) >= 20 && Math.Abs(x.Birthday.Value.Year - DateTime.Now.Year) <= 30).Count());
seriesModel.data.Add(list.Where(x => Math.Abs(x.Birthday.Value.Year - DateTime.Now.Year) >= 31 && Math.Abs(x.Birthday.Value.Year - DateTime.Now.Year) <= 35).Count());
seriesModel.data.Add(list.Where(x => Math.Abs(x.Birthday.Value.Year - DateTime.Now.Year) >= 36 && Math.Abs(x.Birthday.Value.Year - DateTime.Now.Year) <= 40).Count());
seriesModel.data.Add(list.Where(x => Math.Abs(x.Birthday.Value.Year - DateTime.Now.Year) >= 41 && Math.Abs(x.Birthday.Value.Year - DateTime.Now.Year) <= 45).Count());
seriesModel.data.Add(list.Where(x => Math.Abs(x.Birthday.Value.Year - DateTime.Now.Year) >= 46 && Math.Abs(x.Birthday.Value.Year - DateTime.Now.Year) <= 50).Count());
seriesModel.data.Add(list.Where(x => Math.Abs(x.Birthday.Value.Year - DateTime.Now.Year) >= 51 && Math.Abs(x.Birthday.Value.Year - DateTime.Now.Year) <= 55).Count());
seriesModel.data.Add(list.Where(x => Math.Abs(x.Birthday.Value.Year - DateTime.Now.Year) >= 56 && Math.Abs(x.Birthday.Value.Year - DateTime.Now.Year) <= 70).Count());
res.series.Add(seriesModel);
return Res(res);
}
///
/// 教师性别比例
///
///
///
public Response teacherSexEchart(dynamic _)
{
var res = new List();
var list = empInfoIBLL.GetAllList().Where(x => x.CheckMark == true);
var man = new PieModel()
{
name = "男",
value = list.Where(x => x.GenderNo == true).Count(),
};
man.rate = list.Count() > 0 ? (man.value.ToDecimal() / list.Count().ToDecimal() * 100).ToDecimal(2) : 0;
res.Add(man);
var woman = new PieModel()
{
name = "女",
value = list.Where(x => x.GenderNo == false).Count(),
};
woman.rate = list.Count() > 0 ? (woman.value.ToDecimal() / list.Count().ToDecimal() * 100).ToDecimal(2) : 0;
res.Add(woman);
return Res(res);
}
///
/// 教师学历比例
///
///
///
public Response teacherCollegeEchart(dynamic _)
{
var res = new List();
var list = empInfoIBLL.GetAllList().Where(x => x.CheckMark == true);
var college1 = new PieModel()
{
name = "本科",
value = list.Where(x => x.HighestRecord == "1" || x.HighestRecord == "20" || x.HighestRecord == "21" || x.HighestRecord == "7").Count(),
};
college1.rate = list.Count() > 0 ? (college1.value.ToDecimal() / list.Count().ToDecimal() * 100).ToDecimal(2) : 0;
res.Add(college1);
var college2 = new PieModel()
{
name = "研究生",
value = list.Where(x => x.HighestRecord == "13" || x.HighestRecord == "18" || x.HighestRecord == "19" || x.HighestRecord == "4").Count(),
};
college2.rate = list.Count() > 0 ? (college2.value.ToDecimal() / list.Count().ToDecimal() * 100).ToDecimal(2) : 0;
res.Add(college2);
var college3 = new PieModel()
{
name = "硕士",
value = list.Where(x => x.HighestRecord == "17" || x.HighestRecord == "3" || x.HighestRecord == "5").Count(),
};
college3.rate = list.Count() > 0 ? (college3.value.ToDecimal() / list.Count().ToDecimal() * 100).ToDecimal(2) : 0;
res.Add(college3);
var college4 = new PieModel()
{
name = "博士",
value = list.Where(x => x.HighestRecord == "14" || x.HighestRecord == "15" || x.HighestRecord == "16").Count(),
};
college4.rate = list.Count() > 0 ? (college4.value.ToDecimal() / list.Count().ToDecimal() * 100).ToDecimal(2) : 0;
res.Add(college4);
return Res(res);
}
///
/// 教师民族分布
///
///
///
public Response teacherNationalEchart(dynamic _)
{
var res = new BarModel()
{
categories = new List(),
series = new List()
};
var seriesModel = new seriesModel()
{
name = "教师人数",
data = new List()
};
var list = empInfoIBLL.GetAllList().Where(x => x.CheckMark == true && x.NationalityNo != null && x.NationalityNo.Length > 0).GroupBy(x => x.NationalityNo).Select(x => new
{
nationalityNo = x.Key,
num = x.Select(y => y.EmpId).Count()
});
var nationalityData = dataItemIBLL.GetDetailList2("National", null);
foreach (var item in list)
{
res.categories.Add(nationalityData.First(x => x.F_ItemValue == item.nationalityNo)?.F_ItemName);
seriesModel.data.Add(item.num);
}
res.series.Add(seriesModel);
return Res(res);
}
#endregion
///
/// 柱状图数据
///
public class BarModel
{
public List categories { get; set; }
public List series { get; set; }
}
public class seriesModel
{
public string name { get; set; }
public List data { get; set; }
}
///
/// 饼图数据
///
public class PieModel
{
public string name { get; set; }
public int value { get; set; }
///
/// 百分比
///
public decimal rate { get; set; }
}
///
/// 表格数据
///
public class TableModel
{
public string type1 { get; set; }
public string type2 { get; set; }
public string type3 { get; set; }
public string type4 { get; set; }
public string type5 { get; set; }
}
///
/// 环形图数据
///
public class RingModel
{
///
/// 环文字名称
///
public string label { get; set; }
public int value { get; set; }
///
/// 百分比
///
public decimal data { get; set; }
}
///
/// 地图数据
///
public class MapModel
{
public string code { get; set; }
public string area { get; set; }
public int number { get; set; }
}
///
/// 下拉框数据
///
public class SelectModel
{
public string label { get; set; }
public string value { get; set; }
}
///
/// 异动人数的传参
///
public class TransferParam
{
public string AnomalousType { get; set; }
public string ClassNo { get; set; }
}
///
/// 班级信息统计数据
///
public class TableModelOfClass
{
public string classno { get; set; }
public string classname { get; set; }
public int man { get; set; }
public int woman { get; set; }
public int total { get; set; }
}
///
/// 班级信息统计的传参
///
public class ClassParam
{
public string MajorNo { get; set; }
}
}
}