You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

405 line
16 KiB

  1. using Learun.Util;
  2. using System.Data;
  3. using Learun.Application.TwoDevelopment.EducationalAdministration;
  4. using System.Web.Mvc;
  5. using System.Collections.Generic;
  6. using System.Threading.Tasks;
  7. using System;
  8. using System.Linq;
  9. namespace Learun.Application.Web.Areas.EducationalAdministration.Controllers
  10. {
  11. /// <summary>
  12. /// 版 本 Learun-ADMS-Ultimate V7.0.0 数字化智慧校园
  13. /// Copyright (c) 2013-2018 北京泉江科技有限公司
  14. /// 创 建:超级管理员
  15. /// 日 期:2019-05-24 10:27
  16. /// 描 述:排考数据同步
  17. /// </summary>
  18. public class ArrangeExamTermController : MvcControllerBase
  19. {
  20. private ArrangeExamTermIBLL arrangeExamTermIBLL = new ArrangeExamTermBLL();
  21. private ArrangeExamStructureIBLL arrangeExamStructureIBLL = new ArrangeExamStructureBLL();
  22. private StuInfoBasicIBLL stuInfoBasicIBLL = new StuInfoBasicBLL();
  23. private StuScoreIBLL stuScoreIBLL = new StuScoreBLL();
  24. #region 视图功能
  25. /// <summary>
  26. /// 主页面
  27. /// <summary>
  28. /// <returns></returns>
  29. [HttpGet]
  30. public ActionResult Index()
  31. {
  32. return View();
  33. }
  34. /// <summary>
  35. /// 表单页
  36. /// <summary>
  37. /// <returns></returns>
  38. [HttpGet]
  39. public ActionResult Form()
  40. {
  41. return View();
  42. }
  43. /// <summary>
  44. /// 考试表
  45. /// <summary>
  46. /// <returns></returns>
  47. [HttpGet]
  48. public ActionResult ExamIndex()
  49. {
  50. return View();
  51. }
  52. /// <summary>
  53. /// 考试安排表【教师工作管理】
  54. /// <summary>
  55. /// <returns></returns>
  56. [HttpGet]
  57. public ActionResult ExamIndexOfTeacher()
  58. {
  59. return View();
  60. }
  61. /// <summary>
  62. /// 考试安排表【学子在线】
  63. /// <summary>
  64. /// <returns></returns>
  65. [HttpGet]
  66. public ActionResult ExamIndexOfStudent()
  67. {
  68. return View();
  69. }
  70. #endregion
  71. #region 获取数据
  72. /// <summary>
  73. /// 获取页面显示列表数据
  74. /// <summary>
  75. /// <param name="queryJson">查询参数</param>
  76. /// <returns></returns>
  77. [HttpGet]
  78. [AjaxOnly]
  79. public ActionResult GetPageList(string pagination, string queryJson)
  80. {
  81. Pagination paginationobj = pagination.ToObject<Pagination>();
  82. var data = arrangeExamTermIBLL.GetPageList(paginationobj, queryJson);
  83. var jsonData = new
  84. {
  85. rows = data,
  86. total = paginationobj.total,
  87. page = paginationobj.page,
  88. records = paginationobj.records
  89. };
  90. return Success(jsonData);
  91. }
  92. /// <summary>
  93. /// 获取表单数据
  94. /// <summary>
  95. /// <returns></returns>
  96. [HttpGet]
  97. [AjaxOnly]
  98. public ActionResult GetFormData(string keyValue)
  99. {
  100. var ArrangeExamTermData = arrangeExamTermIBLL.GetArrangeExamTermEntity(keyValue);
  101. var jsonData = new
  102. {
  103. ArrangeExamTerm = ArrangeExamTermData,
  104. };
  105. return Success(jsonData);
  106. }
  107. #endregion
  108. #region 提交数据
  109. /// <summary>
  110. /// 删除实体数据
  111. /// <param name="keyValue">主键</param>
  112. /// <summary>
  113. /// <returns></returns>
  114. [HttpPost]
  115. [AjaxOnly]
  116. public ActionResult DeleteForm(string keyValue)
  117. {
  118. arrangeExamTermIBLL.DeleteEntity(keyValue);
  119. return Success("删除成功!");
  120. }
  121. /// <summary>
  122. /// 保存实体数据(新增、修改)
  123. /// <param name="keyValue">主键</param>
  124. /// <summary>
  125. /// <returns></returns>
  126. [HttpPost]
  127. [ValidateAntiForgeryToken]
  128. [AjaxOnly]
  129. public ActionResult SaveForm(string keyValue, string strEntity)
  130. {
  131. ArrangeExamTermEntity entity = strEntity.ToObject<ArrangeExamTermEntity>();
  132. arrangeExamTermIBLL.SaveEntity(keyValue, entity);
  133. return Success("保存成功!");
  134. }
  135. #endregion
  136. #region 扩展数据
  137. /// <summary>
  138. /// 排考数据同步
  139. /// </summary>
  140. /// <returns></returns>
  141. [HttpGet]
  142. [AjaxOnly]
  143. public async Task<ActionResult> AsyncArrangeExamData()
  144. {
  145. var data = await arrangeExamTermIBLL.AsyncArrangeExamData();
  146. return Success(data);
  147. }
  148. /// <summary>
  149. /// 考试表
  150. /// </summary>
  151. /// <returns></returns>
  152. [HttpGet]
  153. [AjaxOnly]
  154. public ActionResult GetData(string startTime, string endTime, string classNo, string empNo)
  155. {
  156. var userInfo = LoginUserInfo.Get();
  157. //var startDate = startTime ?? Common.CalculateFirstDateOfWeek(DateTime.Today).ToString("yyyy-MM-dd");
  158. //var endDate = endTime ?? Common.CalculateLastDateOfWeek(DateTime.Today).ToString("yyyy-MM-dd");
  159. //开始时间
  160. var startdate = string.IsNullOrEmpty(startTime) ? DateTime.Today : Convert.ToDateTime(startTime);
  161. var startDate = Common.CalculateFirstDateOfWeek(startdate).ToString("yyyy-MM-dd");
  162. var endDate = Common.CalculateLastDateOfWeek(startdate).ToString("yyyy-MM-dd");
  163. var semesterAndYear = Common.GetSemesterAndYear(startDate);
  164. var strAcademicYear = semesterAndYear.AcademicYearLong;
  165. var strSemester = semesterAndYear.Semester;
  166. //默认节次时间
  167. var sectionNum = 6;
  168. var sectionTimeArr = new string[6];
  169. //获取本学年本学期节次时间
  170. var arrangeExamTermEntity = arrangeExamTermIBLL.GetArrangeExamTermEntityByYear(semesterAndYear.AcademicYearShort, strSemester);
  171. if (arrangeExamTermEntity != null)
  172. {
  173. var structureId = arrangeExamTermEntity.StructureId;
  174. if (!string.IsNullOrEmpty(structureId))
  175. {
  176. var arrangeExamStructureEntity = arrangeExamStructureIBLL.GetArrangeExamStructureEntity(structureId);
  177. if (arrangeExamStructureEntity != null)
  178. {
  179. sectionNum = arrangeExamStructureEntity.MorningNum.Value + arrangeExamStructureEntity.AfternoonNum.Value + arrangeExamStructureEntity.NightNum.Value;
  180. if (!string.IsNullOrEmpty(arrangeExamStructureEntity.Time))
  181. {
  182. sectionTimeArr = arrangeExamStructureEntity.Time.Split(',');
  183. }
  184. }
  185. }
  186. }
  187. //获取考试数据
  188. var timeTables = arrangeExamTermIBLL.GetExamTable(startDate, endDate, classNo, empNo);
  189. var noDataResult = new
  190. { schoolName = "考试表", semester = $"{strAcademicYear}学年度 第{strSemester}学期", weekList = "", sectionNum = sectionNum, sectionTimeArr = sectionTimeArr };
  191. if (!timeTables.Any())
  192. {
  193. return JsonResult(noDataResult);
  194. }
  195. var formatData = from d in timeTables
  196. let tt = d.LessonTime.Substring(1)
  197. group d by tt into g
  198. orderby g.Key
  199. select new
  200. {
  201. time = g.Key,
  202. list = from e in timeTables
  203. let ee = e.LessonTime.Substring(1)
  204. where ee == g.Key
  205. select new
  206. {
  207. day = e.LessonTime.ToCharArray()[0],
  208. academicyear = semesterAndYear.AcademicYearShort,
  209. semester = strSemester,
  210. lessonNo = e?.LessonNo,
  211. curriculum = e.LessonName,
  212. lessonSortNo = e.LessonSortNo,
  213. lessonTime = e.LessonTime,
  214. lessonDate = e.LessonDate.ToString("yyyy-MM-dd"),
  215. empno = e?.EmpNo,
  216. teacher = e.EmpName,
  217. classNo = e?.TeachClassNo,
  218. className = e.ClassName,
  219. classRoomName = e.ClassroomName.Trim(),
  220. classRoomNo = e?.ClassRoomNo.Trim()
  221. }
  222. }
  223. ;
  224. var result = new
  225. { schoolName = "考试表", semester = $"{strAcademicYear}学年度 第{strSemester}学期", weekList = formatData, sectionNum = sectionNum, sectionTimeArr = sectionTimeArr };
  226. return JsonResult(result);
  227. }
  228. /// <summary>
  229. /// 考试表【学子在线】
  230. /// </summary>
  231. /// <returns></returns>
  232. [HttpGet]
  233. [AjaxOnly]
  234. public ActionResult GetDataInStudent(string startTime, string endTime, string classNo, string empNo)
  235. {
  236. var userInfo = LoginUserInfo.Get();
  237. //获取学生所在班级
  238. var stuInfoBasicEntity = stuInfoBasicIBLL.GetStuInfoBasicEntityByStuNo(userInfo.account);
  239. if (stuInfoBasicEntity == null)
  240. {
  241. return Fail("学生不存在!");
  242. }
  243. //开始时间
  244. var startdate = string.IsNullOrEmpty(startTime) ? DateTime.Today : Convert.ToDateTime(startTime);
  245. var startDate = Common.CalculateFirstDateOfWeek(startdate).ToString("yyyy-MM-dd");
  246. var endDate = Common.CalculateLastDateOfWeek(startdate).ToString("yyyy-MM-dd");
  247. var semesterAndYear = Common.GetSemesterAndYear(startDate);
  248. var strAcademicYear = semesterAndYear.AcademicYearLong;
  249. var strSemester = semesterAndYear.Semester;
  250. //默认节次时间
  251. var sectionNum = 6;
  252. var sectionTimeArr = new string[6];
  253. //获取本学年本学期节次时间
  254. var arrangeExamTermEntity = arrangeExamTermIBLL.GetArrangeExamTermEntityByYear(semesterAndYear.AcademicYearShort, strSemester);
  255. if (arrangeExamTermEntity != null)
  256. {
  257. var structureId = arrangeExamTermEntity.StructureId;
  258. if (!string.IsNullOrEmpty(structureId))
  259. {
  260. var arrangeExamStructureEntity = arrangeExamStructureIBLL.GetArrangeExamStructureEntity(structureId);
  261. if (arrangeExamStructureEntity != null)
  262. {
  263. sectionNum = arrangeExamStructureEntity.MorningNum.Value + arrangeExamStructureEntity.AfternoonNum.Value + arrangeExamStructureEntity.NightNum.Value;
  264. if (!string.IsNullOrEmpty(arrangeExamStructureEntity.Time))
  265. {
  266. sectionTimeArr = arrangeExamStructureEntity.Time.Split(',');
  267. }
  268. }
  269. }
  270. }
  271. var timeTables = new List<TimeTable>();
  272. //获取考试数据
  273. var timeTablesOfBixiu = arrangeExamTermIBLL.GetExamTable(startDate, endDate, stuInfoBasicEntity.ClassNo, "");
  274. timeTables.AddRange(timeTablesOfBixiu);
  275. //获取选修考试数据
  276. var timeTablesOfElective = arrangeExamTermIBLL.GetExamTableOfElectiveInStudent(startDate, endDate, userInfo.account);
  277. timeTables.AddRange(timeTablesOfElective);
  278. var noDataResult = new
  279. { schoolName = "考试表", semester = $"{strAcademicYear}学年度 第{strSemester}学期", weekList = "", sectionNum = sectionNum, sectionTimeArr = sectionTimeArr };
  280. if (!timeTables.Any())
  281. {
  282. return JsonResult(noDataResult);
  283. }
  284. var formatData = from d in timeTables
  285. let tt = d.LessonTime.Substring(1)
  286. group d by tt into g
  287. orderby g.Key
  288. select new
  289. {
  290. time = g.Key,
  291. list = from e in timeTables
  292. let ee = e.LessonTime.Substring(1)
  293. where ee == g.Key
  294. select new
  295. {
  296. day = e.LessonTime.ToCharArray()[0],
  297. academicyear = semesterAndYear.AcademicYearShort,
  298. semester = strSemester,
  299. lessonNo = e?.LessonNo,
  300. curriculum = e.LessonName,
  301. lessonSortNo = e.LessonSortNo,
  302. lessonTime = e.LessonTime,
  303. lessonDate = e.LessonDate.ToString("yyyy-MM-dd"),
  304. empno = e?.EmpNo,
  305. teacher = e.EmpName,
  306. classNo = e?.TeachClassNo,
  307. className = e.ClassName,
  308. classRoomName = e.ClassroomName.Trim(),
  309. classRoomNo = e?.ClassRoomNo.Trim()
  310. }
  311. }
  312. ;
  313. var result = new
  314. { schoolName = "考试表", semester = $"{strAcademicYear}学年度 第{strSemester}学期", weekList = formatData, sectionNum = sectionNum, sectionTimeArr = sectionTimeArr };
  315. return JsonResult(result);
  316. }
  317. /// <summary>
  318. /// 考试表--班级下拉框信息
  319. /// </summary>
  320. /// <returns></returns>
  321. [HttpGet]
  322. [AjaxOnly]
  323. public ActionResult GetClassData()
  324. {
  325. var data = arrangeExamTermIBLL.GetClassData();
  326. return Success(data);
  327. }
  328. /// <summary>
  329. /// 考试表--教师下拉框信息
  330. /// </summary>
  331. /// <returns></returns>
  332. [HttpGet]
  333. [AjaxOnly]
  334. public ActionResult GetTeacherData()
  335. {
  336. var data = arrangeExamTermIBLL.GetTeacherData();
  337. return Success(data);
  338. }
  339. /// <summary>
  340. /// 获取一周的日期
  341. /// </summary>
  342. /// <returns></returns>
  343. [HttpGet]
  344. [AjaxOnly]
  345. public ActionResult GetWeekDate(string startTime)
  346. {
  347. var data = new List<string>();
  348. var monday = Common.CalculateFirstDateOfWeek(Convert.ToDateTime(startTime));
  349. for (int i = 0; i < 7; i++)
  350. {
  351. data.Add(monday.AddDays(i).ToDateString());
  352. }
  353. return Success(data);
  354. }
  355. #endregion
  356. /// <summary>
  357. /// 测试【移动端-学生成绩查询】
  358. /// </summary>
  359. /// <returns></returns>
  360. [HttpGet]
  361. [AjaxOnly]
  362. public ActionResult test()
  363. {
  364. var data = stuScoreIBLL.GetScoreListByStuNo("18-19","2","2018010101", "20180101");
  365. return Success(data);
  366. }
  367. }
  368. }