Não pode escolher mais do que 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.
 
 
 
 
 
 

726 linhas
31 KiB

  1. using Nancy;
  2. using Learun.Util;
  3. using System.Collections.Generic;
  4. using Learun.Application.TwoDevelopment.EducationalAdministration;
  5. using static Learun.Application.WebApi.Modules.StuInfoFreshApi;
  6. using System;
  7. using System.IO;
  8. using System.Linq;
  9. using Learun.Application.Base.SystemModule;
  10. using Learun.Application.OA;
  11. using Learun.Application.OA.File.FileInfo;
  12. using Learun.Application.TwoDevelopment.LogisticsManagement;
  13. using Learun.Application.TwoDevelopment.LR_Desktop;
  14. using Learun.Application.WorkFlow;
  15. using Microsoft.Ajax.Utilities;
  16. namespace Learun.Application.WebApi
  17. {
  18. /// <summary>
  19. /// 版 本 Learun-ADMS-Ultimate V7.0.0 力软敏捷开发框架
  20. /// Copyright (c) 2013-2018 上海力软信息技术有限公司
  21. /// 创 建:超级管理员
  22. /// 日 期:2019-08-19 17:50
  23. /// 描 述:教师注册
  24. /// </summary>
  25. public class StatisticsApi : BaseNoLoginApi
  26. {
  27. private EmpInfoIBLL empInfoIBLL = new EmpInfoBLL();
  28. private StuInfoBasicIBLL stuInfoBasicIBLL = new StuInfoBasicBLL();
  29. private ClassInfoIBLL classInfoIBLL = new ClassInfoBLL();
  30. private ClassroomInfoIBLL classroomInfoIBLL = new ClassroomInfoBLL();
  31. private AnnexesFileIBLL annexesFileIBLL = new AnnexesFileBLL();
  32. private TeachSwitchIBLL teachSwitchIBLL = new TeachSwitchBLL();
  33. private OpenLessonPlanOfElectiveIBLL openLessonPlanOfElectiveIBLL = new OpenLessonPlanOfElectiveBLL();
  34. private StuScoreIBLL stuScoreIBLL = new StuScoreBLL();
  35. private ArrangeLessonTermIBLL arrangeLessonTermIBLL = new ArrangeLessonTermBLL();
  36. private StuScoreNotPassIBLL stuScoreNotPassIBLL = new StuScoreNotPassBLL();
  37. private StuScoreNotPassTwoIBLL stuScoreNotPassTwoIBLL = new StuScoreNotPassTwoBLL();
  38. private EADateArrangeIBLL eADateArrangeIBLL = new EADateArrangeBLL();
  39. private NewsIBLL newsIbll = new NewsBLL();
  40. private NoticeIBLL noticeIBLL = new NoticeBLL();
  41. private SYS_SendMessageIBLL sendMessageIBLL = new SYS_SendMessageBLL();
  42. private Sys_SendFileIBLL sys_SendFileIBLL = new Sys_SendFileBLL();
  43. private FileInfoIBLL fileInfoIBLL = new FileInfoBLL();
  44. private Sys_UpdateRecordIBLL sys_UpdateRecordIBLL = new Sys_UpdateRecordBLL();
  45. private LessonInfoIBLL lessonInfoIBLL = new LessonInfoBLL();
  46. private CdLessonSortDetailIBLL cdLessonSortDetailIBLL = new CdLessonSortDetailBLL();
  47. private NWFSchemeIBLL nWFSchemeIBLL = new NWFSchemeBLL();
  48. private NWFProcessIBLL processIbll = new NWFProcessBLL();
  49. private DataItemIBLL dataItemIbll = new DataItemBLL();
  50. private StuPunishmentIBLL stuPunishmentIBLL = new StuPunishmentBLL();
  51. private StuEncourgementIBLL stuEncourgementIBLL = new StuEncourgementBLL();
  52. private AccommodationIBLL accommodationIBLL = new AccommodationBLL();
  53. private StuAttendanceIBLL stuAttendanceIBLL = new StuAttendanceBLL();
  54. StuInfoBasicTwoIBLL stuInfoBasicTwoIbll = new StuInfoBasicTwoBLL();
  55. /// <summary>
  56. /// 注册接口
  57. /// <summary>
  58. public StatisticsApi()
  59. : base("/Statistics")
  60. {
  61. Get["/electiveCcourse"] = ElectiveCourse;//选修课
  62. Get["/semesterAndYear"] = SemesterAndYear;//当前学年学期
  63. Get["/scoreEntry"] = ScoreEntry;//成绩录入
  64. Post["/classHour"] = ClassHour;//课时
  65. Post["/teacherWorkload"] = TeacherWorkload;//教师工作量
  66. Get["/makeUpExam"] = MakeUpExam;//补考
  67. Post["/eaDateArrange"] = EADateArrange;//教学工作安排
  68. Get["/oaNews"] = OaNews;//新闻公告
  69. Get["/oaEmails"] = OaEmails;//邮件
  70. Get["/sendFiles"] = SendFiles;//公文
  71. Get["/cloudFiles"] = CloudFiles;//云盘
  72. Get["/operationLog"] = OperationLog;//操作日志
  73. Get["/schoolInfo"] = SchoolInfo;//学校信息
  74. Get["/nwfInfo"] = NwfInfo;//流程信息
  75. Get["/stuPunishment"] = StuPunishmentInfo;//学生班级处分
  76. Get["/stuEncourgement"] = StuEncourgementInfo;//学生班级奖励
  77. Get["/dormitoryInfo"] = DormitoryInfo;//宿舍信息
  78. Get["/stuAttendance"] = StuAttendance;//全校考勤
  79. Post["/getStuInfo"] = GetStuNoByAccount;
  80. Post["/getEmpInfo"] = GetEmpNoByAccount;
  81. Post["/getEmpInfo2"] = GetEmpNoByAccount2;
  82. }
  83. private Response SemesterAndYear(dynamic _)
  84. {
  85. var b = Common.GetSemesterAndYear();
  86. object result = new { b.Semester, b.AcademicYearLong, b.AcademicYearShort };
  87. return Success(result);
  88. }
  89. private Response ElectiveCourse(dynamic _)
  90. {
  91. string pagination =
  92. "{\"rows\":1000,\"page\":1,\"sidx\":\"AcademicYearNo,Semester\",\"sord\":\"desc\",\"records\":0,\"total\":0}";
  93. string queryJson = "{}";
  94. Pagination paginationobj = pagination.ToObject<Pagination>();
  95. var data = openLessonPlanOfElectiveIBLL.GetPageListOfMerge(paginationobj, queryJson).OrderByDescending(x => x.AcademicYearNo).ThenByDescending(x => x.Semester).ThenBy(x => x.LessonNo);
  96. //选修课数量
  97. var lessonNum = data.Count();
  98. //选修课报名人数
  99. var peopleNum = data.Sum(a => a.StuNumOfApply);
  100. //课程名称
  101. List<string> nameList = data.Select(a => a.LessonName).ToList();
  102. //各个课程的报名人数上限
  103. List<int?> maxNumList = data.Select(a => a.StuNumMax).ToList();
  104. //各个课程的报名人数
  105. List<int?> numList = data.Select(a => a.StuNumOfApply).ToList();
  106. object result = new { lessonNum, peopleNum, nameList, maxNumList, numList };
  107. return Success(result);
  108. }
  109. public Response GetEmpNoByAccount(dynamic _)
  110. {
  111. string account = this.Request.Form.account.ToString();
  112. var stuEntity = empInfoIBLL.GetEmpInfoEntityByEmpNo(account);
  113. return Success(stuEntity);
  114. }
  115. public Response GetEmpNoByAccount2(dynamic _)
  116. {
  117. string account = this.Request.Form.account.ToString();
  118. var stuEntity = empInfoIBLL.GetEmpInfoEntityByIdCardNo(account);
  119. return Success(stuEntity);
  120. }
  121. public Response GetStuNoByAccount(dynamic _)
  122. {
  123. string account = this.Request.Form.account.ToString();
  124. var stuEntity = stuInfoBasicIBLL.GetStuNoByAccount(account);
  125. return Success(stuEntity);
  126. }
  127. private Response ScoreEntry(dynamic _)
  128. {
  129. var data = stuScoreIBLL.GetList("{}");
  130. //已完成录入
  131. var finishNum = data.Count(a => a.CheckMark == "1");
  132. //未完成录入
  133. var unFinishNum = data.Count(a => a.CheckMark == "0");
  134. //录入率
  135. var finishRate = (Convert.ToDouble(finishNum) / Convert.ToDouble(data.Count())).ToString("0.00%");
  136. var unFinishRate = (Convert.ToDouble(unFinishNum) / Convert.ToDouble(data.Count())).ToString("0.00%");
  137. object result = new { finishNum, unFinishNum, finishRate, unFinishRate };
  138. return Success(result);
  139. }
  140. private Response ClassHour(dynamic _)
  141. {
  142. string semester = this.Request.Form.semester.ToString();
  143. string year = this.Request.Form.year.ToString();
  144. var data = arrangeLessonTermIBLL.GetList("{}").ToList()
  145. .Where(a => a.AcademicYearNo == year && a.Semester == semester);
  146. var data1 = data.GroupBy(a => a.LessonDate.ToDate().Month)
  147. .Select(a => new { a.Key, num = a.Count() })
  148. .OrderBy(a => a.Key);
  149. //总课时数
  150. var allNum = data.Count();
  151. var month = data1.Select(a => a.Key).ToList();
  152. var num = data1.Select(a => a.num);
  153. object result = new { allNum, month, num };
  154. return Success(result);
  155. }
  156. private Response TeacherWorkload(dynamic _)
  157. {
  158. string semester = this.Request.Form.semester.ToString();
  159. string year = this.Request.Form.year.ToString();
  160. var data = arrangeLessonTermIBLL.GetList("{}").ToList()
  161. .Where(a => a.AcademicYearNo == year && a.Semester == semester)
  162. .GroupBy(a => a.EmpNo).Select(a => new { a.Key, num = a.Count() }).OrderByDescending(a => a.num).Take(10);
  163. List<object> result = new List<object>();
  164. foreach (var item in data)
  165. {
  166. var empEntity = empInfoIBLL.GetEmpInfoEntityByEmpNo(item.Key);
  167. var photoPath = string.Empty;
  168. if (empEntity != null)
  169. {
  170. var annexEntity = annexesFileIBLL.GetEntityByFolderId(empEntity.Photo);
  171. photoPath = annexEntity?.F_FilePath;
  172. if (!string.IsNullOrEmpty(photoPath))
  173. {
  174. photoPath = "/" + photoPath.Substring(photoPath.IndexOf("Resource"));
  175. }
  176. }
  177. result.Add(new { empName = empEntity?.EmpName, photoUrl = photoPath, item.num });
  178. }
  179. return Success(result);
  180. }
  181. private Response MakeUpExam(dynamic _)
  182. {
  183. var currentYearAndSe = Common.GetSemesterAndYear();
  184. var currentYear = currentYearAndSe.AcademicYearShort.Substring(0, 2).ToInt() - 2;
  185. var currentSemester = currentYearAndSe.Semester;
  186. List<object> list = new List<object>();
  187. for (int i = 1; i < 4; i++)
  188. {
  189. if (currentSemester == "2")
  190. {
  191. currentYear = currentYear + 1;
  192. currentSemester = "1";
  193. }
  194. else
  195. {
  196. currentSemester = "2";
  197. }
  198. var yearTwo = $"{currentYear.ToString()}-{(currentYear + 1).ToString()}";
  199. list.Add(new { year = yearTwo, semester = currentSemester });
  200. }
  201. list.Add(new { year = currentYearAndSe.AcademicYearShort, semester = currentYearAndSe.Semester });
  202. List<string> yearAndSemesterList = new List<string>();
  203. List<string> rateList = new List<string>();
  204. var currentPassNum = 0;
  205. var currentRate = string.Empty;
  206. foreach (dynamic item in list)
  207. {
  208. var paramYear = item.year.ToString();
  209. var paramSemester = item.semester.ToString();
  210. var all = stuScoreIBLL.GetList("{}").Where(a => a.AcademicYearNo == paramYear && a.Semester == paramSemester).ToList()
  211. .GroupBy(a => a.StuNo).Count();
  212. var pass1 = stuScoreNotPassIBLL.GetList("{}")
  213. .Where(a => a.AcademicYearNo == paramYear && a.Semester == paramSemester)
  214. .Select(a => a.StuNo)
  215. .ToList();
  216. var pass2 = stuScoreNotPassTwoIBLL.GetList("{}")
  217. .Where(a => a.AcademicYearNo == paramYear && a.Semester == paramSemester)
  218. .Select(a => a.StuNo).ToList();
  219. pass1.AddRange(pass2);
  220. pass1 = pass1.Distinct().ToList();
  221. var rate = (Convert.ToDouble(pass1.Count()) / Convert.ToDouble(all) * 100).ToString("0.00");
  222. yearAndSemesterList.Add($"{paramYear}学年 第{paramSemester}学期");
  223. double doubleRate;
  224. if (!double.TryParse(rate, out doubleRate))
  225. {
  226. rate = "0";
  227. }
  228. rateList.Add(rate);
  229. //记录本学期
  230. if (paramYear == currentYearAndSe.AcademicYearShort && paramSemester == currentYearAndSe.Semester)
  231. {
  232. currentPassNum = pass1.Count();
  233. currentRate = rate;
  234. }
  235. }
  236. return Success(new { currentPassNum, currentRate, yearAndSemesterList, rateList });
  237. }
  238. private Response EADateArrange(dynamic _)
  239. {
  240. string year = this.Request.Form.year.Value;
  241. string semester = this.Request.Form.semester.Value;
  242. string queryJson = "{}";
  243. if (!string.IsNullOrEmpty(year))
  244. {
  245. queryJson = $"{{\"AcademicYearNo\":\"{year}\",\"Semester\":\"{semester}\"}}";
  246. if (string.IsNullOrEmpty(semester))
  247. {
  248. queryJson = $"{{\"AcademicYearNo\":\"{year}\"}}";
  249. }
  250. }
  251. string pagination =
  252. "{\"rows\":30,\"page\":1,\"sidx\":\"AcademicYearNo,Semester\",\"sord\":\"desc\",\"records\":0,\"total\":0}";
  253. Pagination paginationobj = pagination.ToObject<Pagination>();
  254. var data = eADateArrangeIBLL.GetPageList(paginationobj, queryJson);
  255. return Success(data);
  256. }
  257. private Response OaNews(dynamic _)
  258. {
  259. var beginTime = DateTime.Now.AddMonths(-12);
  260. var data = newsIbll.GetNews();
  261. var news = data.Where(a => a.F_ReleaseTime >= beginTime && a.F_ReleaseTime <= DateTime.Now);
  262. var monthNews = news.GroupBy(a => a.F_ReleaseTime.ToDate().Month).Select(a => new { a.Key, num = a.Count() }).OrderBy(a => a.Key);
  263. var monthList = monthNews.Select(a => a.Key).ToList();
  264. var numList = monthNews.Select(a => a.num).ToList();
  265. return Success(new { allNum = data.Count(), monthList, numList });
  266. }
  267. private Response OaEmails(dynamic _)
  268. {
  269. var beginTime = DateTime.Now.AddMonths(-12);
  270. var data = sendMessageIBLL.GetList();
  271. var emails = data.Where(a => a.SENDTIME >= beginTime && a.SENDTIME <= DateTime.Now);
  272. var monthEmails = emails.GroupBy(a => a.SENDTIME.ToDate().Month).Select(a => new { a.Key, num = a.Count() })
  273. .OrderBy(a => a.Key);
  274. var monthList = monthEmails.Select(a => a.Key).ToList();
  275. var numList = monthEmails.Select(a => a.num).ToList();
  276. return Success(new { allNum = data.Count(), monthList, numList });
  277. }
  278. private Response SendFiles(dynamic _)
  279. {
  280. var beginTime = DateTime.Now.AddMonths(-12);
  281. var data = sys_SendFileIBLL.GetList().Where(a => a.STypeId == 1);
  282. var emails = data.Where(a => a.SendTime >= beginTime && a.SendTime <= DateTime.Now);
  283. var monthEmails = emails.GroupBy(a => a.SendTime.ToDate().Month).Select(a => new { a.Key, num = a.Count() })
  284. .OrderBy(a => a.Key);
  285. var monthList = monthEmails.Select(a => a.Key).ToList();
  286. var numList = monthEmails.Select(a => a.num).ToList();
  287. return Success(new { allNum = data.Count(), monthList, numList });
  288. }
  289. private Response CloudFiles(dynamic _)
  290. {
  291. var beginTime = DateTime.Now.AddMonths(-12);
  292. var data = fileInfoIBLL.GetList();
  293. var emails = data.Where(a => a.F_CreateDate >= beginTime && a.F_CreateDate <= DateTime.Now);
  294. var monthEmails = emails.GroupBy(a => a.F_CreateDate.ToDate().Month).Select(a => new { a.Key, num = a.Count() })
  295. .OrderBy(a => a.Key);
  296. var monthList = monthEmails.Select(a => a.Key).ToList();
  297. var numList = monthEmails.Select(a => a.num).ToList();
  298. return Success(new { allNum = data.Count(), monthList, numList });
  299. }
  300. private Response OperationLog(dynamic _)
  301. {
  302. var onLineNum = sys_UpdateRecordIBLL.GetOnlineUserNum().OnlineUserNum;
  303. var data = sys_UpdateRecordIBLL.GetLogList();
  304. var loginNum = data.Count(a => a.F_OperateType == "登录");
  305. var operationNum = data.Count();
  306. string[] aaa = { "null", "敏捷开发框架", "数字化智慧校园", "Learun.敏捷开发框架", "登录" };
  307. var ranking = data.GroupBy(a => a.F_Module)
  308. .Where(a => !aaa.Contains(a.Key))
  309. .Where(a => a.Key != null)
  310. .Select(a => new { a.Key, num = a.Count() }).OrderByDescending(a => a.num).Take(10);
  311. var name = ranking.Select(a => a.Key);
  312. var num = ranking.Select(a => a.num);
  313. return Success(new { onLineNum, loginNum, operationNum, name, num });
  314. }
  315. private Response SchoolInfo(dynamic _)
  316. {
  317. var empInfo = empInfoIBLL.GetAllList();
  318. var empNum = empInfo.Count(x => x.CheckMark == true);
  319. var wEmpNum = empInfo.Count(a => a.GenderNo == true);
  320. var mEmpNum = empInfo.Count(a => a.GenderNo == false);
  321. var stuInfo = stuInfoBasicIBLL.GetAllList();
  322. var stuNum = stuInfo.Count();
  323. var wStuNum = stuInfo.Count(a => a.GenderNo == true);
  324. var mStuNum = stuInfo.Count(a => a.GenderNo == false);
  325. //教育云平台
  326. //var stuInfo = stuInfoBasicTwoIbll.GetList("");
  327. //var stuNum = stuInfo.Count();
  328. //var wStuNum = stuInfo.Count(a => a.Sex == "1");
  329. //var mStuNum = stuInfo.Count(a => a.Sex == "0");
  330. var lessonData = lessonInfoIBLL.GetAllLesson();
  331. var lessonSortDetailData = cdLessonSortDetailIBLL.GetAllList();
  332. var lessonInfoData = lessonData.GroupJoin(lessonSortDetailData, a => a.LessonSortDetailNo,
  333. b => b.LessonSortDetailNo, (a, b) => new { a, b });
  334. var lessonInfoNum = lessonInfoData.Count();
  335. var lessonInfoSort = lessonInfoData.GroupBy(m => m.a.LessonSortDetailNo)
  336. .Select(m => new { name = string.IsNullOrEmpty(m.Key) ? "其他" : m.Key, num = m.Count() });
  337. List<object> lessonInfoSortNum = new List<object>();
  338. foreach (var item in lessonInfoSort)
  339. {
  340. var sortName = lessonSortDetailData.FirstOrDefault(a => a.LessonSortDetailNo == item.name)?.LessonSortDetailName;
  341. if (string.IsNullOrEmpty(sortName))
  342. {
  343. sortName = "其他";
  344. }
  345. lessonInfoSortNum.Add(new { sortName, item.num });
  346. }
  347. var classinfoNum = classInfoIBLL.GetAllClass().Count();
  348. var classRoomNum = classroomInfoIBLL.GetAllList().Count();
  349. return Success(new { empNum, wEmpNum, mEmpNum, stuNum, wStuNum, mStuNum, lessonInfoNum, lessonInfoSortNum, classinfoNum, classRoomNum });
  350. }
  351. private Response NwfInfo(dynamic _)
  352. {
  353. var data = nWFSchemeIBLL.GetInfoList();
  354. var processData = processIbll.GetAllList();
  355. var dataItemDetails = dataItemIbll.GetDetailList("FlowSort");
  356. var joinData = data.Join(processData, a => a.F_SchemeId, b => b.F_SchemeId, (a, b) => new { a.F_Category, b.F_IsFinished });
  357. List<(string name, int num)> processList = new List<(string, int)>();
  358. List<string> processNum1 = new List<string>();
  359. foreach (var item in dataItemDetails)
  360. {
  361. processList.Add((item.F_ItemName, joinData.Count(a => a.F_Category == item.F_ItemName)));
  362. processNum1.Add(data.Count(a => a.F_Category == item.F_ItemName).ToString());
  363. }
  364. var processNum = data.Count();
  365. var runNum = joinData.Count(a => a.F_IsFinished == 0);
  366. var allNum = joinData.Count();
  367. processList = processList.OrderByDescending(a => Convert.ToInt32(a.num)).ToList();
  368. var processName = processList.Select(a => a.name).ToList();
  369. var processValue = processList.Select(a => a.num).ToList();
  370. return Success(new { processNum, runNum, allNum, processName, processValue, processNum1 });
  371. }
  372. private Response StuPunishmentInfo(dynamic _)
  373. {
  374. var data = stuPunishmentIBLL.GetAllList();
  375. var stuData = stuInfoBasicIBLL.GetAllList();
  376. var classData = classInfoIBLL.GetAllClass();
  377. var punishData = data.Join(stuData, a => a.StuNo, b => b.StuNo, (a, b) => new { a, b });
  378. var puClassData = classData.Join(punishData, a => a.ClassNo, b => b.b.ClassNo, (a, b) => new { a, b });
  379. var AllNum = punishData.Count();
  380. var TNum = punishData.Count(a => a.b.GenderNo == true);
  381. var MNum = punishData.Count(a => a.b.GenderNo == false);
  382. var classGroup = puClassData.GroupBy(a => a.a.Grade).Select(a => new { a.Key }).OrderBy(a => a.Key);
  383. var gradeName = new List<string>();
  384. var gradeNum = new List<string>();
  385. foreach (var gradeItem in classGroup)
  386. {
  387. gradeName.Add(gradeItem.Key);
  388. gradeNum.Add(puClassData.Where(a => a.a.Grade == gradeItem.Key).GroupBy(a => a.a.ClassNo).Count().ToString());
  389. }
  390. var gradeAllCount = puClassData.GroupBy(a => a.a.ClassNo).Count().ToString();
  391. return Success(new { AllNum, TNum, MNum, gradeAllCount, gradeName, gradeNum });
  392. }
  393. private Response StuEncourgementInfo(dynamic _)
  394. {
  395. var data = stuEncourgementIBLL.GetAllList();
  396. var stuData = stuInfoBasicIBLL.GetAllList();
  397. var classData = classInfoIBLL.GetAllClass();
  398. var punishData = data.Join(stuData, a => a.StuNo, b => b.StuNo, (a, b) => new { a, b });
  399. var puClassData = classData.Join(punishData, a => a.ClassNo, b => b.b.ClassNo, (a, b) => new { a, b });
  400. var AllNum = punishData.Count();
  401. var TNum = punishData.Count(a => a.b.GenderNo == true);
  402. var MNum = punishData.Count(a => a.b.GenderNo == false);
  403. var classGroup = puClassData.GroupBy(a => a.a.Grade).Select(a => new { a.Key, num = a.Count() }).OrderBy(a => a.Key);
  404. var gradeName = new List<string>();
  405. var gradeNum = new List<string>();
  406. foreach (var gradeItem in classGroup)
  407. {
  408. gradeName.Add(gradeItem.Key);
  409. gradeNum.Add(puClassData.Where(a => a.a.Grade == gradeItem.Key).GroupBy(a => a.a.ClassNo).Count().ToString());
  410. }
  411. var gradeAllCount = puClassData.GroupBy(a => a.a.ClassNo).Count();
  412. return Success(new { AllNum, TNum, MNum, gradeAllCount, gradeName, gradeNum });
  413. }
  414. private Response DormitoryInfo(dynamic _)
  415. {
  416. var dormitryInfoList = accommodationIBLL.GetDormitoryList();
  417. var data = accommodationIBLL.GetAllList();
  418. var dormitoryNum = data.Count(a => a.BuildType == "1");
  419. var roomNum = data.Count(a => a.BuildType == "4");
  420. var mRoomNum = data.Count(a => a.BuildType == "4" && a.Sex == "1");
  421. var wRoomNum = roomNum - mRoomNum;
  422. return Success(new { dormitryInfoList, dormitoryNum, roomNum, mRoomNum, wRoomNum });
  423. }
  424. private Response StuAttendance(dynamic _)
  425. {
  426. var beginTime = DateTime.Now.AddMonths(-12);
  427. var monthList = new List<DateTime>();
  428. for (int i = 0; i < 12; i++)
  429. {
  430. monthList.Add(beginTime.AddMonths(i));
  431. }
  432. //总数
  433. var totaldata = stuAttendanceIBLL.GetStuAttendanceTotal(beginTime.ToDateString(), DateTime.Now.ToDateString());
  434. var totalNum = totaldata.Count();
  435. //总出勤数
  436. var data = stuAttendanceIBLL.GetAllList().Where(a => a.LessonDate >= beginTime && a.LessonDate <= DateTime.Now && a.AttendOrNo == "是");
  437. var yesNum = data.Count();
  438. //总出勤率、总缺勤率
  439. decimal allAttendanceYesRate = 0;
  440. decimal allAttendanceNoRate = 0;
  441. if (totalNum > 0)
  442. {
  443. allAttendanceYesRate = (yesNum / totalNum).ToDecimal(2);
  444. allAttendanceNoRate = 1 - allAttendanceYesRate;
  445. }
  446. //各月份总数、出勤数、出勤率
  447. var totalMonth = totaldata.GroupBy(x => new { x.LessonDate.Value.Year, x.LessonDate.Value.Month }).Select(x => new
  448. {
  449. year = x.Key.Year,
  450. month = x.Key.Month,
  451. num = x.Count()
  452. });
  453. var yesMonth = data.GroupBy(x => new { x.LessonDate.Value.Year, x.LessonDate.Value.Month }).Select(x => new
  454. {
  455. year = x.Key.Year,
  456. month = x.Key.Month,
  457. num = x.Count()
  458. });
  459. var monthInfo = new List<string>();//月统计值
  460. var currentYesValue = new List<decimal>();//月出勤率
  461. var currentNoValue = new List<decimal>();//月缺勤率
  462. foreach (var item in monthList)
  463. {
  464. monthInfo.Add(item.ToString("yy-MM"));
  465. decimal yesrate = 0;
  466. decimal norate = 0;
  467. var total = totalMonth.FirstOrDefault(x => x.year == item.Year && x.month == item.Month);
  468. if (total != null && total.num > 0)
  469. {
  470. var yes = yesMonth.FirstOrDefault(x => x.year == item.Year && x.month == item.Month);
  471. if (yes != null)
  472. {
  473. yesrate = (yes.num) / (total.num).ToDecimal(2);
  474. norate = 1 - yesrate;
  475. }
  476. }
  477. currentYesValue.Add(yesrate);
  478. currentNoValue.Add(norate);
  479. }
  480. //各专业总数、出勤数、出勤率
  481. var totalMajor = totaldata.GroupBy(x => x.MajorNo).Select(x => new
  482. {
  483. majorNo = x.Key,
  484. num = x.Count()
  485. });
  486. var yesMajor = data.GroupBy(x => x.MajorNo).Select(x => new
  487. {
  488. majorNo = x.Key,
  489. majorName = x.FirstOrDefault().MajorName,
  490. num = x.Count()
  491. });
  492. var majorNameList = new List<string>();//专业名称值
  493. var majorValue = new List<decimal>();//专业出勤率
  494. foreach (var item in yesMajor)
  495. {
  496. majorNameList.Add(item.majorName);
  497. decimal yesRate = 0;
  498. var total = totalMajor.FirstOrDefault(x => x.majorNo == item.majorNo);
  499. if (total != null && total.num > 0)
  500. {
  501. yesRate = (item.num) / (total.num).ToDecimal(2);
  502. }
  503. majorValue.Add(yesRate);
  504. }
  505. return Success(new { allAttendanceYesRate, allAttendanceNoRate, monthInfo, currentYesValue, currentNoValue, majorNameList, majorValue });
  506. }
  507. #region 获取数据
  508. /// <summary>
  509. /// 获取页面显示列表分页数据
  510. /// <summary>
  511. /// <param name="_"></param>
  512. /// <returns></returns>
  513. public Response GetPageList(dynamic _)
  514. {
  515. ReqPageParam parameter = this.GetReqData<ReqPageParam>();
  516. var data = empInfoIBLL.GetPageList(parameter.pagination, parameter.queryJson);
  517. var jsonData = new
  518. {
  519. rows = data,
  520. total = parameter.pagination.total,
  521. page = parameter.pagination.page,
  522. records = parameter.pagination.records
  523. };
  524. return Success(jsonData);
  525. }
  526. /// <summary>
  527. /// 获取页面显示列表数据
  528. /// <summary>
  529. /// <param name="_"></param>
  530. /// <returns></returns>
  531. public Response GetList(dynamic _)
  532. {
  533. string queryJson = this.GetReqData();
  534. var data = empInfoIBLL.GetList(queryJson);
  535. return Success(data);
  536. }
  537. public Response RegisterButton(dynamic _)
  538. {
  539. var result = teachSwitchIBLL.FindFirst("js").ToString();
  540. return Success(result);
  541. }
  542. /// <summary>
  543. /// 获取表单数据
  544. /// <summary>
  545. /// <param name="_"></param>
  546. /// <returns></returns>
  547. public Response GetForm(dynamic _)
  548. {
  549. string keyValue = this.GetReqData();
  550. var EmpInfoData = empInfoIBLL.GetEmpInfoEntity(keyValue);
  551. var jsonData = new
  552. {
  553. EmpInfo = EmpInfoData,
  554. };
  555. return Success(jsonData);
  556. }
  557. #endregion
  558. #region 提交数据
  559. /// <summary>
  560. /// 头像
  561. /// </summary>
  562. /// <param name="_"></param>
  563. /// <returns></returns>
  564. private Response GetSavePhoto(dynamic _)
  565. {
  566. var model = this.GetReqData<PhotoModel>();
  567. var folderId = Guid.NewGuid().ToString();
  568. string filePath = Config.GetValue("AnnexesFile");
  569. string uploadDate = DateTime.Now.ToString("yyyyMMdd");
  570. string FileEextension = ".png";
  571. string fileGuid = Guid.NewGuid().ToString();
  572. string virtualPath = string.Format("{0}/{1}/{2}/{3}{4}", filePath, model.account, uploadDate, fileGuid, FileEextension);
  573. //创建文件夹
  574. string path = Path.GetDirectoryName(virtualPath);
  575. Directory.CreateDirectory(path);
  576. AnnexesFileEntity fileAnnexesEntity = new AnnexesFileEntity();
  577. if (!System.IO.File.Exists(virtualPath))
  578. {
  579. //byte[] bytes = Convert.FromBase64String(model.Base64Url.Replace("data:image/jpeg;base64,", ""));
  580. byte[] bytes = Convert.FromBase64String(model.Base64Url.Substring(model.Base64Url.IndexOf("base64,") + 7));
  581. FileInfo file = new FileInfo(virtualPath);
  582. FileStream fs = file.Create();
  583. fs.Write(bytes, 0, bytes.Length);
  584. fs.Close();
  585. //文件信息写入数据库
  586. fileAnnexesEntity.F_Id = fileGuid;
  587. fileAnnexesEntity.F_FileName = "userphoto.png";
  588. fileAnnexesEntity.F_FilePath = virtualPath;
  589. fileAnnexesEntity.F_FileSize = bytes.Length.ToString();
  590. fileAnnexesEntity.F_FileExtensions = FileEextension;
  591. fileAnnexesEntity.F_FileType = FileEextension.Replace(".", "");
  592. annexesFileIBLL.SaveEntity(folderId, fileAnnexesEntity);
  593. }
  594. var data = new
  595. {
  596. Url = virtualPath.Substring(virtualPath.IndexOf("Resource")),
  597. AnnexesFileId = fileGuid
  598. };
  599. return Success(data);
  600. }
  601. /// <summary>
  602. /// 删除实体数据
  603. /// <param name="_"></param>
  604. /// <summary>
  605. /// <returns></returns>
  606. public Response DeleteForm(dynamic _)
  607. {
  608. string keyValue = this.GetReqData();
  609. empInfoIBLL.DeleteEntity(keyValue);
  610. return Success("删除成功!");
  611. }
  612. /// <summary>
  613. /// 保存实体数据(新增、修改)
  614. /// <param name="_"></param>
  615. /// <summary>
  616. /// <returns></returns>
  617. public Response SaveForm(dynamic _)
  618. {
  619. ReqFormEntity parameter = this.GetReqData<ReqFormEntity>();
  620. EmpInfoEntity entity = parameter.strEntity.ToObject<EmpInfoEntity>();
  621. empInfoIBLL.SaveEntity(this.userInfo, parameter.keyValue, entity);
  622. return Success("保存成功!");
  623. }
  624. #endregion
  625. #region 私有类
  626. /// <summary>
  627. /// 表单实体类
  628. /// <summary>
  629. private class ReqFormEntity
  630. {
  631. public string keyValue { get; set; }
  632. public string strEntity { get; set; }
  633. }
  634. #endregion
  635. }
  636. }