25개 이상의 토픽을 선택하실 수 없습니다. Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

574 lines
24 KiB

  1. using Learun.Util;
  2. using System.Data;
  3. using Learun.Application.TwoDevelopment.PersonnelManagement;
  4. using System.Web.Mvc;
  5. using System.Collections.Generic;
  6. using Learun.Application.TwoDevelopment.EducationalAdministration;
  7. using System;
  8. using System.Linq;
  9. using System.Threading.Tasks;
  10. using Newtonsoft.Json;
  11. namespace Learun.Application.Web.Areas.PersonnelManagement.Controllers
  12. {
  13. /// <summary>
  14. /// 版 本 Learun-ADMS-Ultimate V7.0.0 数字化智慧校园
  15. /// Copyright (c) 2013-2018 北京泉江科技有限公司
  16. /// 创 建:超级管理员
  17. /// 日 期:2019-03-25 11:16
  18. /// 描 述:课程表
  19. /// </summary>
  20. public class TimeTableController : MvcControllerBase
  21. {
  22. private ArrangeLessonTermIBLL arrangeLessonTermIBLL = new ArrangeLessonTermBLL();
  23. private StuAttendanceIBLL stuAttendanceIBLL = new StuAttendanceBLL();
  24. private ArrangeLessonTermOfElectiveIBLL arrangeLessonTermOfElectiveIBLL = new ArrangeLessonTermOfElectiveBLL();
  25. private StuAttendanceLeaveIBLL stuAttendanceLeaveIBLL = new StuAttendanceLeaveBLL();
  26. private StuSelectLessonListOfElectiveIBLL stuSelectLessonList = new StuSelectLessonListOfElectiveBLL();
  27. private StuInfoBasicIBLL stuInfoBasicIBLL = new StuInfoBasicBLL();
  28. private LessonInfoIBLL lessonInfoIBLL = new LessonInfoBLL();
  29. private Edu_ChangeTeacherLessonIBLL edu_ChangeTeacherLessonIBLL = new Edu_ChangeTeacherLessonBLL();
  30. #region 视图功能
  31. /// <summary>
  32. /// 主页面
  33. /// <summary>
  34. /// <returns></returns>
  35. [HttpGet]
  36. public ActionResult Index()
  37. {
  38. return View();
  39. }
  40. /// <summary>
  41. /// 考勤
  42. /// <summary>
  43. /// <returns></returns>
  44. [HttpGet]
  45. public ActionResult Attendance()
  46. {
  47. return View();
  48. }
  49. [HttpGet]
  50. public ActionResult AttendanceDetail()
  51. {
  52. return View();
  53. }
  54. [HttpGet]
  55. public ActionResult AttendanceStatistic()
  56. {
  57. return View();
  58. }
  59. [HttpGet]
  60. public ActionResult AttendanceList()
  61. {
  62. return View();
  63. }
  64. [HttpGet]
  65. public ActionResult Leave()
  66. {
  67. return View();
  68. }
  69. /// <summary>
  70. /// 课程表【教务】
  71. /// <summary>
  72. /// <returns></returns>
  73. [HttpGet]
  74. public ActionResult IndexInEducation()
  75. {
  76. return View();
  77. }
  78. /// <summary>
  79. /// 课程表【教学调度】
  80. /// <summary>
  81. /// <returns></returns>
  82. [HttpGet]
  83. public ActionResult IndexInEducationSelect()
  84. {
  85. return View();
  86. }
  87. /// <summary>
  88. /// 课程表--修改教师所带的课程【教务】
  89. /// <summary>
  90. /// <returns></returns>
  91. [HttpGet]
  92. public ActionResult IndexInEducationModify()
  93. {
  94. return View();
  95. }
  96. /// <summary>
  97. /// 表单--修改教师所带的课程【教务】
  98. /// <summary>
  99. /// <returns></returns>
  100. [HttpGet]
  101. public ActionResult ModifyLessonForm()
  102. {
  103. return View();
  104. }
  105. /// <summary>
  106. /// 获取表单数据
  107. /// <summary>
  108. /// <returns></returns>
  109. [HttpGet]
  110. [AjaxOnly]
  111. public ActionResult GetFormData()
  112. {
  113. var userInfo = LoginUserInfo.Get();
  114. var stuInfo = stuInfoBasicIBLL.GetStuInfoBasicEntityByStuNo(userInfo.account);
  115. StuAttendanceLeaveEntity entity = new StuAttendanceLeaveEntity();
  116. entity.ClassNo = stuInfo.ClassNo;
  117. entity.DeptNo = stuInfo.DeptNo;
  118. entity.Grade = stuInfo.Grade;
  119. entity.MajorNo = stuInfo.MajorNo;
  120. entity.StuNo = userInfo.account;
  121. entity.StuName = userInfo.realName;
  122. var jsonData = new
  123. {
  124. StuAttendanceLeave = entity,
  125. };
  126. return Success(jsonData);
  127. }
  128. /// <summary>
  129. /// 获取相关课程考勤的学生信息
  130. /// </summary>
  131. /// <returns></returns>
  132. [HttpGet]
  133. [AjaxOnly]
  134. public ActionResult AttendanceStudents(string pagination, string queryJson, string lessonSortNo)
  135. {
  136. Pagination paginationobj = pagination.ToObject<Pagination>();
  137. var data = new List<StuSelectLessonListEntity>();
  138. if (lessonSortNo == "1")//必修课
  139. {
  140. data = arrangeLessonTermIBLL.AttendanceStudents(paginationobj, queryJson).ToList();
  141. }
  142. else if (lessonSortNo == "2")//选修课
  143. {
  144. data = arrangeLessonTermOfElectiveIBLL.AttendanceStudents(paginationobj, queryJson).ToList();
  145. }
  146. var jsonData = new
  147. {
  148. rows = data,
  149. total = paginationobj.total,
  150. page = paginationobj.page,
  151. records = paginationobj.records
  152. };
  153. return Success(jsonData);
  154. }
  155. /// <summary>
  156. /// 提交课程考勤
  157. /// </summary>
  158. /// <returns></returns>
  159. [HttpPost]
  160. [AjaxOnly]
  161. public async Task<ActionResult> AttendanceApply(string kqType, string lessonTime, string lessonDate, string classRoomNo, string dataJson, decimal? attenScore, string attenCondition)
  162. {
  163. var data = await stuAttendanceIBLL.AttendanceApply(kqType, lessonTime, lessonDate, classRoomNo, dataJson, attenScore, attenCondition);
  164. return Success(data);
  165. }
  166. /// <summary>
  167. /// 教师/学生课程表
  168. /// </summary>
  169. /// <returns></returns>
  170. [HttpGet]
  171. [AjaxOnly]
  172. public ActionResult GetData(string startTime, string endTime)
  173. {
  174. var userInfo = LoginUserInfo.Get();
  175. //var startDate = startTime ?? Common.CalculateFirstDateOfWeek(DateTime.Today).ToString("yyyy-MM-dd");
  176. //var endDate = endTime ?? Common.CalculateLastDateOfWeek(DateTime.Today).ToString("yyyy-MM-dd");
  177. //开始时间
  178. var startdate = string.IsNullOrEmpty(startTime) ? DateTime.Today : Convert.ToDateTime(startTime);
  179. var startDate = Common.CalculateFirstDateOfWeek(startdate).ToString("yyyy-MM-dd");
  180. var endDate = Common.CalculateLastDateOfWeek(startdate).ToString("yyyy-MM-dd");
  181. var semesterAndYear = Common.GetSemesterAndYear(startDate);
  182. var strAcademicYear = semesterAndYear.AcademicYearLong;
  183. var strSemester = semesterAndYear.Semester;
  184. var timeTableList = new List<TimeTable>();
  185. //课程表
  186. var data = arrangeLessonTermIBLL.GetTimeTable(userInfo.account, userInfo.Description, startDate, endDate);
  187. timeTableList.AddRange(data);
  188. //选修课课程表
  189. var dataOfElective = arrangeLessonTermOfElectiveIBLL.GetTimeTable(userInfo.account, userInfo.Description, startDate, endDate);
  190. timeTableList.AddRange(dataOfElective);
  191. //var timeTables = data.ToList();
  192. var timeTables = timeTableList.ToList();
  193. var noDataResult = new
  194. { schoolName = "课程表", semester = $"{strAcademicYear}学年度 第{strSemester}学期", weekList = "", teacherName = userInfo.realName };
  195. if (!timeTables.Any())
  196. {
  197. return JsonResult(noDataResult);
  198. }
  199. var formatDataa = from d in timeTables
  200. let tt = d.LessonTime.Substring(1)
  201. group d by tt into g
  202. orderby g.Key
  203. select new
  204. {
  205. time = g.Key,
  206. list = from e in timeTables
  207. let ee = e.LessonTime.Substring(1)
  208. where ee == g.Key
  209. select new
  210. {
  211. day = e.LessonTime.ToCharArray()[0],
  212. curriculum = string.IsNullOrEmpty(e.EnName) ? (e.LessonSortNo == "2" ? e.LessonName + "[选修]" : e.LessonName) : (e.LessonSortNo == "2" ? e.EnName + "[选修]" : e.EnName),
  213. lessonName = e.LessonName,
  214. teacher = e.EmpName,
  215. classRoom = e.ClassroomName.Trim(),
  216. academicyear = semesterAndYear.AcademicYearShort,
  217. semester = strSemester,
  218. lessonNo = e?.LessonNo,
  219. teachClassNo = e?.TeachClassNo,
  220. empno = e?.EmpNo,
  221. lessonTime = e.LessonTime,
  222. lessonDate = e.LessonDate.ToString("yyyy-MM-dd"),
  223. classRoomNo = e?.ClassRoomNo.Trim(),
  224. lessonSortNo = e.LessonSortNo,
  225. e.OLPEId,
  226. className = string.IsNullOrEmpty(e.ClassName) ? "" : e.ClassName
  227. }
  228. }
  229. ;
  230. var leaveList = stuAttendanceLeaveIBLL.GetList();
  231. var formatData = timeTables.OrderBy(a => a.LessonTime.Substring(1))
  232. .Select(a => new
  233. {
  234. time = a.LessonTime.Substring(1),
  235. list = timeTables.Where(b => b.LessonTime.Substring(1) == a.LessonTime.Substring(1))
  236. .Select(b => new
  237. {
  238. day = b.LessonTime.ToCharArray()[0],
  239. curriculum = string.IsNullOrEmpty(b.EnName) ? (b.LessonSortNo == "2" ? b.LessonName + "[选修]" : b.LessonName) : (b.LessonSortNo == "2" ? b.EnName + "[选修]" : b.EnName),
  240. lessonName = b.LessonName,
  241. teacher = b.EmpName,
  242. classRoom = b.ClassroomName.Trim(),
  243. academicyear = semesterAndYear.AcademicYearShort,
  244. semester = strSemester,
  245. lessonNo = b?.LessonNo,
  246. teachClassNo = b?.TeachClassNo,
  247. empno = b?.EmpNo,
  248. lessonTime = b.LessonTime,
  249. lessonDate = b.LessonDate.ToString("yyyy-MM-dd"),
  250. classRoomNo = b?.ClassRoomNo.Trim(),
  251. lessonSortNo = b.LessonSortNo,
  252. b.OLPEId,
  253. className = string.IsNullOrEmpty(b.ClassName) ? "" : b.ClassName,
  254. leaveType = leaveList.Any(c => c.LessonNo == b.LessonNo && c.StuNo == userInfo.account && c.LessonDate == b.LessonDate && c.LessonTime == b.LessonTime) ? 1 : 0,
  255. checkType = leaveList.FirstOrDefault(c => c.LessonNo == b.LessonNo && c.StuNo == userInfo.account && c.LessonDate == b.LessonDate && c.LessonTime == b.LessonTime)?.IsCheck,
  256. })
  257. });
  258. //foreach (var item in formatData.list)
  259. //{
  260. // if(leaveList.Any(a=>a.LessonNo==item.))
  261. //}
  262. var result = new
  263. { schoolName = "课程表", semester = $"{strAcademicYear}学年度 第{strSemester}学期", teacherName = userInfo.realName, weekList = formatData };
  264. return JsonResult(result);
  265. }
  266. /// <summary>
  267. /// 课程表【教务】
  268. /// </summary>
  269. /// <returns></returns>
  270. [HttpGet]
  271. [AjaxOnly]
  272. public ActionResult GetDataInEducation(string startTime, string endTime, string classNo, string empNo, string schoolId)
  273. {
  274. var userInfo = LoginUserInfo.Get();
  275. //开始时间
  276. var startdate = string.IsNullOrEmpty(startTime) ? DateTime.Today : Convert.ToDateTime(startTime);
  277. var startDate = Common.CalculateFirstDateOfWeek(startdate).ToString("yyyy-MM-dd");
  278. var endDate = Common.CalculateLastDateOfWeek(startdate).ToString("yyyy-MM-dd");
  279. var semesterAndYear = Common.GetSemesterAndYear(startDate);
  280. var strAcademicYear = semesterAndYear.AcademicYearLong;
  281. var strSemester = semesterAndYear.Semester;
  282. var timeTableList = new List<TimeTable>();
  283. //课程表
  284. var data = arrangeLessonTermIBLL.GetTimeTableInEducation(startDate, endDate, classNo, empNo, schoolId);
  285. timeTableList.AddRange(data);
  286. //选修课课程表
  287. var dataOfElective = arrangeLessonTermOfElectiveIBLL.GetTimeTableInEducation(startDate, endDate, classNo, empNo, schoolId);
  288. timeTableList.AddRange(dataOfElective);
  289. var timeTables = timeTableList.ToList();
  290. var noDataResult = new
  291. { schoolName = "课程表", semester = $"{strAcademicYear}学年度 第{strSemester}学期", weekList = "" };
  292. if (!timeTables.Any())
  293. {
  294. return JsonResult(noDataResult);
  295. }
  296. var formatData = from d in timeTables
  297. let tt = d.LessonTime.Substring(1)
  298. group d by tt into g
  299. orderby g.Key
  300. select new
  301. {
  302. time = g.Key,
  303. list = from e in timeTables
  304. let ee = e.LessonTime.Substring(1)
  305. where ee == g.Key
  306. select new
  307. {
  308. day = e.LessonTime.ToCharArray()[0],
  309. curriculum = e.LessonSortNo == "2" ? e.LessonName + "[选修]" : e.LessonName,
  310. teacher = e?.EmpName,
  311. classRoom = string.IsNullOrEmpty(e.ClassroomName) ? "" : e.ClassroomName.Trim(),
  312. academicyear = semesterAndYear.AcademicYearShort,
  313. semester = strSemester,
  314. lessonNo = e?.LessonNo,
  315. teachClassNo = e?.TeachClassNo,
  316. empno = e?.EmpNo,
  317. lessonTime = e.LessonTime,
  318. lessonDate = e.LessonDate.ToString("yyyy-MM-dd"),
  319. classRoomNo = string.IsNullOrEmpty(e.ClassRoomNo) ? "" : e.ClassRoomNo.Trim(),
  320. lessonSortNo = e.LessonSortNo,
  321. e?.OLPEId,
  322. className = string.IsNullOrEmpty(e.ClassName) ? "" : e.ClassName
  323. }
  324. }
  325. ;
  326. var result = new
  327. { schoolName = "课程表", semester = $"{strAcademicYear}学年度 第{strSemester}学期", weekList = formatData };
  328. return JsonResult(result);
  329. }
  330. /// <summary>
  331. /// 课程表【教务】
  332. /// </summary>
  333. /// <returns></returns>
  334. [HttpGet]
  335. [AjaxOnly]
  336. public ActionResult GetDataInEducationSelect(string startTime, string endTime, string classNo, string empNo, string schoolId)
  337. {
  338. var userInfo = LoginUserInfo.Get();
  339. //开始时间
  340. var startdate = string.IsNullOrEmpty(startTime) ? DateTime.Today : Convert.ToDateTime(startTime);
  341. var startDate = Common.CalculateFirstDateOfWeek(startdate).ToString("yyyy-MM-dd");
  342. var endDate = Common.CalculateLastDateOfWeek(startdate).ToString("yyyy-MM-dd");
  343. var semesterAndYear = Common.GetSemesterAndYear(startDate);
  344. var strAcademicYear = semesterAndYear.AcademicYearLong;
  345. var strSemester = semesterAndYear.Semester;
  346. var timeTableList = new List<TimeTable>();
  347. //课程表
  348. var data = arrangeLessonTermIBLL.GetTimeTableInEducation(startDate, endDate, classNo, empNo, schoolId);
  349. timeTableList.AddRange(data);
  350. //选修课课程表
  351. //var dataOfElective = arrangeLessonTermOfElectiveIBLL.GetTimeTableInEducation(startDate, endDate, classNo, empNo, schoolId);
  352. //timeTableList.AddRange(dataOfElective);
  353. var timeTables = timeTableList.ToList();
  354. var noDataResult = new
  355. { schoolName = "课程表", semester = $"{strAcademicYear}学年度 第{strSemester}学期", weekList = "" };
  356. if (!timeTables.Any())
  357. {
  358. return JsonResult(noDataResult);
  359. }
  360. var formatData = from d in timeTables
  361. let tt = d.LessonTime.Substring(1)
  362. group d by tt into g
  363. orderby g.Key
  364. select new
  365. {
  366. time = g.Key,
  367. list = from e in timeTables
  368. let ee = e.LessonTime.Substring(1)
  369. where ee == g.Key
  370. select new
  371. {
  372. day = e.LessonTime.ToCharArray()[0],
  373. lessonTime = e.LessonTime,
  374. lessonDate = e.LessonDate.ToString("yyyy-MM-dd"),
  375. schooldId = e?.F_SchoolId,
  376. academicyear = semesterAndYear.AcademicYearShort,
  377. semester = strSemester,
  378. deptNo = e?.DeptNo,
  379. majorNo = e?.MajorNo,
  380. lessonNo = e?.LessonNo,
  381. curriculum = e.LessonSortNo == "2" ? e.LessonName + "[选修]" : e.LessonName,
  382. teachClassNo = e?.TeachClassNo,
  383. className = string.IsNullOrEmpty(e.ClassName) ? "" : e.ClassName,
  384. empno = e?.EmpNo,
  385. teacher = e?.EmpName,
  386. classRoomNo = string.IsNullOrEmpty(e.ClassRoomNo) ? "" : e.ClassRoomNo.Trim(),
  387. classRoom = string.IsNullOrEmpty(e.ClassroomName) ? "" : e.ClassroomName.Trim(),
  388. lessonSortNo = e.LessonSortNo
  389. }
  390. }
  391. ;
  392. var result = new
  393. { schoolName = "课程表", semester = $"{strAcademicYear}学年度 第{strSemester}学期", weekList = formatData };
  394. return JsonResult(result);
  395. }
  396. /// <summary>
  397. /// 课程表【教务】--班级下拉框信息
  398. /// </summary>
  399. /// <returns></returns>
  400. [HttpGet]
  401. [AjaxOnly]
  402. public ActionResult GetClassData(string schoolId = "")
  403. {
  404. var data = arrangeLessonTermIBLL.GetClassData(schoolId);
  405. return Success(data);
  406. }
  407. /// <summary>
  408. /// 课程表【教务】--教师下拉框信息
  409. /// </summary>
  410. /// <returns></returns>
  411. [HttpGet]
  412. [AjaxOnly]
  413. public ActionResult GetTeacherData(string schoolId = "")
  414. {
  415. var data = arrangeLessonTermIBLL.GetTeacherData(schoolId);
  416. return Success(data);
  417. }
  418. /// <summary>
  419. /// 表单--修改教师所带的课程【教务】--课程下拉框信息
  420. /// </summary>
  421. /// <returns></returns>
  422. [HttpGet]
  423. [AjaxOnly]
  424. public ActionResult GetLessonData()
  425. {
  426. var lessonList = lessonInfoIBLL.GetAllLesson().OrderBy(x => x.LessonNo);
  427. var data = lessonList.Select(x => new { value = x.LessonId, text = x.LessonName + "(" + x.LessonNo + ")" });
  428. return Success(data);
  429. }
  430. #endregion
  431. #region 保存数据
  432. [HttpPost]
  433. [ValidateAntiForgeryToken]
  434. [AjaxOnly]
  435. public ActionResult SaveForm(string keyValue, string strEntity)
  436. {
  437. StuAttendanceLeaveEntity entity = strEntity.ToObject<StuAttendanceLeaveEntity>();
  438. entity.TeachClassNo = entity.ClassNo;
  439. stuAttendanceLeaveIBLL.SaveEntity(keyValue, entity);
  440. return Success("保存成功!");
  441. }
  442. /// <summary>
  443. /// 修改教师课程--保存
  444. /// </summary>
  445. /// <param name="keyValue"></param>
  446. /// <param name="strEntity"></param>
  447. /// <returns></returns>
  448. [HttpPost]
  449. [ValidateAntiForgeryToken]
  450. [AjaxOnly]
  451. public ActionResult SaveChangeTeacherLesson(string strEntity)
  452. {
  453. Edu_ChangeTeacherLessonEntity entity = strEntity.ToObject<Edu_ChangeTeacherLessonEntity>();
  454. entity.CToTeacherId = entity.CFromTeacherId;
  455. entity.CToTeacherName = entity.CFromTeacherName;
  456. //获取目标课程
  457. var lessonInfoEntity = lessonInfoIBLL.GetLessonInfoEntity(entity.CToLessonId);
  458. if (lessonInfoEntity == null)
  459. {
  460. return Fail("目标课程不存在!");
  461. }
  462. entity.CToLessonId = lessonInfoEntity.LessonNo;
  463. entity.CToLessonName = lessonInfoEntity.LessonName;
  464. entity.CreateTime = DateTime.Now;
  465. if (entity.CFromLessonId == entity.CToLessonId)
  466. {
  467. return Fail("目标课程与原目标一致!");
  468. }
  469. //修改排课、成绩录入相关表
  470. edu_ChangeTeacherLessonIBLL.ModifyTableAboutTeacherLesson(entity);
  471. //新增Edu_ChangeTeacherLesson记录
  472. edu_ChangeTeacherLessonIBLL.SaveEntity("", entity);
  473. return Success("保存成功!");
  474. }
  475. /// <summary>
  476. /// 考勤统计
  477. /// <summary>
  478. /// <param name="pagination">分页参数</param>
  479. /// <param name="queryJson">查询参数</param>
  480. /// <returns></returns>
  481. [HttpGet]
  482. [AjaxOnly]
  483. public ActionResult GetAttendanceStatisticPageList(string pagination, string queryJson)
  484. {
  485. Pagination paginationobj = pagination.ToObject<Pagination>();
  486. var data = stuAttendanceIBLL.GetAttendanceStatisticPageList(paginationobj, queryJson);
  487. var jsonData = new
  488. {
  489. rows = data,
  490. total = paginationobj.total,
  491. page = paginationobj.page,
  492. records = paginationobj.records
  493. };
  494. return Success(jsonData);
  495. }
  496. /// <summary>
  497. /// 全校学生课程考勤
  498. /// <summary>
  499. /// <param name="pagination">分页参数</param>
  500. /// <param name="queryJson">查询参数</param>
  501. /// <returns></returns>
  502. [HttpGet]
  503. [AjaxOnly]
  504. public ActionResult GetAttendancePageList(string pagination, string queryJson)
  505. {
  506. Pagination paginationobj = pagination.ToObject<Pagination>();
  507. var data = stuAttendanceIBLL.GetAttendancePageList(paginationobj, queryJson);
  508. var jsonData = new
  509. {
  510. rows = data,
  511. total = paginationobj.total,
  512. page = paginationobj.page,
  513. records = paginationobj.records
  514. };
  515. return Success(jsonData);
  516. }
  517. #endregion
  518. }
  519. }