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.
 
 
 
 
 
 

421 lines
21 KiB

  1. using Dapper;
  2. using Learun.DataBase.Repository;
  3. using Learun.Util;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Data;
  7. using System.Linq;
  8. using System.Text;
  9. namespace Learun.Application.TwoDevelopment.EducationalAdministration
  10. {
  11. /// <summary>
  12. /// 版 本 Learun-ADMS V7.0.6 力软敏捷开发框架
  13. /// Copyright (c) 2013-2020 力软信息技术(苏州)有限公司
  14. /// 创 建:超级管理员
  15. /// 日 期:2020-11-27 10:05
  16. /// 描 述:学生请假管理
  17. /// </summary>
  18. public class StuLeaveManagementService : RepositoryFactory
  19. {
  20. #region 获取数据
  21. /// <summary>
  22. /// 获取页面显示列表数据
  23. /// </summary>
  24. /// <param name="pagination">查询参数</param>
  25. /// <param name="queryJson">查询参数</param>
  26. /// <returns></returns>
  27. public IEnumerable<StuLeaveManagementEntity> GetPageList(Pagination pagination, string queryJson)
  28. {
  29. try
  30. {
  31. var strSql = new StringBuilder();
  32. strSql.Append("SELECT t.*,s.StuName as CreateUserName,s.ClassNo,s.DeptNo,s.MajorNo,c.ClassDiredctorNo,c.ClassTutorNo ");
  33. strSql.Append(" FROM StuLeaveManagement t left join StuInfoBasic s on t.CreateUserNo=s.StuNo left join ClassInfo c on s.ClassNo=c.ClassNo ");
  34. strSql.Append(" WHERE 1=1 ");
  35. var queryParam = queryJson.ToJObject();
  36. // 虚拟参数
  37. var dp = new DynamicParameters(new { });
  38. if (!queryParam["LeaveType"].IsEmpty())
  39. {
  40. dp.Add("LeaveType", queryParam["LeaveType"].ToString(), DbType.String);
  41. strSql.Append(" AND t.LeaveType = @LeaveType ");
  42. }
  43. if (!queryParam["CheckStatus"].IsEmpty())
  44. {
  45. dp.Add("CheckStatus", queryParam["CheckStatus"].ToString(), DbType.String);
  46. strSql.Append(" AND t.CheckStatus = @CheckStatus ");
  47. }
  48. if (!queryParam["StuNo"].IsEmpty())
  49. {
  50. dp.Add("StuNo", queryParam["StuNo"].ToString(), DbType.String);
  51. strSql.Append(" AND t.CreateUserNo = @StuNo ");
  52. }
  53. //班级班主任/辅导员/系主任
  54. if (!queryParam["ClassManagerNo"].IsEmpty())
  55. {
  56. dp.Add("ClassManagerNo", queryParam["ClassManagerNo"].ToString(), DbType.String);
  57. strSql.Append(" AND (c.ClassDiredctorNo = @ClassManagerNo or c.ClassTutorNo = @ClassManagerNo ");
  58. //登录用户是否是系主任:若是,展示大于2天的请假记录;
  59. var deptDirectorRoleId = Config.GetValue("DeptDirectorRoleId");
  60. if (deptDirectorRoleId != null)
  61. {
  62. var loginInfoRoleIds = LoginUserInfo.Get().roleIds;
  63. if (loginInfoRoleIds.IndexOf(',') == -1)
  64. {
  65. if (loginInfoRoleIds == deptDirectorRoleId)
  66. {
  67. strSql.Append(" or t.LeaveDay>2 )");
  68. }
  69. else
  70. {
  71. strSql.Append(" ) ");
  72. }
  73. }
  74. else
  75. {
  76. if (loginInfoRoleIds.Split(',').Contains(deptDirectorRoleId))
  77. {
  78. strSql.Append(" or t.LeaveDay>2 )");
  79. }
  80. else
  81. {
  82. strSql.Append(" ) ");
  83. }
  84. }
  85. }
  86. else
  87. {
  88. strSql.Append(" ) ");
  89. }
  90. }
  91. return this.BaseRepository("CollegeMIS").FindList<StuLeaveManagementEntity>(strSql.ToString(), dp, pagination);
  92. }
  93. catch (Exception ex)
  94. {
  95. if (ex is ExceptionEx)
  96. {
  97. throw;
  98. }
  99. else
  100. {
  101. throw ExceptionEx.ThrowServiceException(ex);
  102. }
  103. }
  104. }
  105. public IEnumerable<StuLeaveManagementEntity> GetCheckPageList(Pagination pagination, string queryJson)
  106. {
  107. try
  108. {
  109. var strSql = new StringBuilder();
  110. strSql.Append("SELECT t.*,s.StuName as CreateUserName,s.ClassNo,s.DeptNo,s.MajorNo,c.ClassDiredctorNo,c.ClassTutorNo ");
  111. strSql.Append(" FROM StuLeaveManagement t left join StuInfoBasic s on t.CreateUserNo=s.StuNo left join ClassInfo c on s.ClassNo=c.ClassNo ");
  112. strSql.Append(" WHERE 1=1 ");
  113. var queryParam = queryJson.ToJObject();
  114. // 虚拟参数
  115. var dp = new DynamicParameters(new { });
  116. if (!queryParam["LeaveType"].IsEmpty())
  117. {
  118. dp.Add("LeaveType", queryParam["LeaveType"].ToString(), DbType.String);
  119. strSql.Append(" AND t.LeaveType = @LeaveType ");
  120. }
  121. if (!queryParam["CheckStatus"].IsEmpty())
  122. {
  123. dp.Add("CheckStatus", queryParam["CheckStatus"].ToString(), DbType.String);
  124. strSql.Append(" AND t.CheckStatus = @CheckStatus ");
  125. }
  126. if (!queryParam["StuNo"].IsEmpty())
  127. {
  128. dp.Add("StuNo", queryParam["StuNo"].ToString(), DbType.String);
  129. strSql.Append(" AND t.CreateUserNo = @StuNo ");
  130. }
  131. //班级班主任/辅导员/系主任
  132. var ClassManagerNo = LoginUserInfo.Get().account;
  133. if (!string.IsNullOrEmpty(ClassManagerNo))
  134. {
  135. dp.Add("ClassManagerNo", ClassManagerNo, DbType.String);
  136. strSql.Append(" AND (c.ClassDiredctorNo = @ClassManagerNo or c.ClassTutorNo = @ClassManagerNo ");
  137. //登录用户是否是系主任:若是,展示大于2天的请假记录;
  138. var deptDirectorRoleId = Config.GetValue("DeptDirectorRoleId");
  139. if (deptDirectorRoleId != null)
  140. {
  141. var loginInfoRoleIds = LoginUserInfo.Get().roleIds;
  142. if (loginInfoRoleIds.IndexOf(',') == -1)
  143. {
  144. if (loginInfoRoleIds == deptDirectorRoleId)
  145. {
  146. strSql.Append(" or t.LeaveDay>2 )");
  147. }
  148. else
  149. {
  150. strSql.Append(" ) ");
  151. }
  152. }
  153. else
  154. {
  155. if (loginInfoRoleIds.Split(',').Contains(deptDirectorRoleId))
  156. {
  157. strSql.Append(" or t.LeaveDay>2 )");
  158. }
  159. else
  160. {
  161. strSql.Append(" ) ");
  162. }
  163. }
  164. }
  165. else
  166. {
  167. strSql.Append(" ) ");
  168. }
  169. }
  170. return this.BaseRepository("CollegeMIS").FindList<StuLeaveManagementEntity>(strSql.ToString(), dp, pagination);
  171. }
  172. catch (Exception ex)
  173. {
  174. if (ex is ExceptionEx)
  175. {
  176. throw;
  177. }
  178. else
  179. {
  180. throw ExceptionEx.ThrowServiceException(ex);
  181. }
  182. }
  183. }
  184. /// <summary>
  185. /// 获取StuLeaveManagement表实体数据
  186. /// </summary>
  187. /// <param name="keyValue">主键</param>
  188. /// <returns></returns>
  189. public StuLeaveManagementEntity GetStuLeaveManagementEntity(string keyValue)
  190. {
  191. try
  192. {
  193. var data = this.BaseRepository("CollegeMIS").FindEntity<StuLeaveManagementEntity>(keyValue);
  194. if (data != null)
  195. {
  196. var studentlist = this.BaseRepository("CollegeMIS").FindList<StuInfoBasicEntity>(x => x.StuNo == data.CreateUserNo).FirstOrDefault();
  197. if (studentlist != null)
  198. {
  199. data.DeptNo = studentlist.DeptNo;
  200. data.MajorNo = studentlist.MajorNo;
  201. data.ClassNo = studentlist.ClassNo;
  202. data.CreateUserName = studentlist.StuName;
  203. }
  204. var classlist = this.BaseRepository("CollegeMIS").FindList<ClassInfoEntity>(x =>x.ClassNo == data.ClassNo).FirstOrDefault();
  205. if (classlist!=null)
  206. {
  207. data.ClassDiredctorNo = classlist.ClassDiredctorNo;
  208. data.ClassTutorNo = classlist.ClassTutorNo;
  209. }
  210. }
  211. return data;
  212. }
  213. catch (Exception ex)
  214. {
  215. if (ex is ExceptionEx)
  216. {
  217. throw;
  218. }
  219. else
  220. {
  221. throw ExceptionEx.ThrowServiceException(ex);
  222. }
  223. }
  224. }
  225. #endregion
  226. #region 提交数据
  227. /// <summary>
  228. /// 删除实体数据
  229. /// </summary>
  230. /// <param name="keyValue">主键</param>
  231. public void DeleteEntity(string keyValue)
  232. {
  233. try
  234. {
  235. this.BaseRepository("CollegeMIS").Delete<StuLeaveManagementEntity>(t => t.Id == keyValue);
  236. }
  237. catch (Exception ex)
  238. {
  239. if (ex is ExceptionEx)
  240. {
  241. throw;
  242. }
  243. else
  244. {
  245. throw ExceptionEx.ThrowServiceException(ex);
  246. }
  247. }
  248. }
  249. /// <summary>
  250. /// 保存实体数据(新增、修改)
  251. /// </summary>
  252. /// <param name="keyValue">主键</param>
  253. /// <param name="entity">实体</param>
  254. public void SaveEntity(string keyValue, StuLeaveManagementEntity entity)
  255. {
  256. var db = this.BaseRepository("CollegeMIS");
  257. try
  258. {
  259. db.BeginTrans();
  260. if (!string.IsNullOrEmpty(keyValue))
  261. {
  262. entity.Modify(keyValue);
  263. db.Update(entity);
  264. if (entity.CheckStatus.Trim() == "1" && entity.StartTime != null)
  265. {
  266. //请假审核通过后,该学生的对应日期的课表改为请假
  267. var model = this.BaseRepository("CollegeMIS").FindList<StuLeaveManagementEntity>(
  268. $"select * from StuLeaveManagement where Id='{keyValue}'").FirstOrDefault();
  269. //请假开始时间和结束时间
  270. var startTime = Convert.ToDateTime(model.StartTime?.ToString("yyyy-MM-dd") + " 00:00:00");
  271. var endTime = Convert.ToDateTime(model.EndTime?.ToString("yyyy-MM-dd") + " 23:59:59");
  272. //排课数据
  273. var arrangeLessonTermList = db.FindList<ArrangeLessonTermEntity>($@"select a.*,b.StuName,b.Grade,b.GenderNo from [dbo].[ArrangeLessonTerm] a
  274. join stuinfobasic b on a.teachclassno=b.classno
  275. where b.stuno='{model.CreateUserNo}'
  276. and a.lessondate between '{startTime}' and '{endTime}'");
  277. var deptList = this.BaseRepository("CollegeMIS").FindList<CdDeptEntity>();
  278. var majorList = this.BaseRepository("CollegeMIS").FindList<CdMajorEntity>();
  279. var classInfoList = this.BaseRepository("CollegeMIS").FindList<ClassInfoEntity>();
  280. var classRoomList = this.BaseRepository("CollegeMIS").FindList<ClassroomInfoEntity>().ToList();
  281. var lessonSortList = this.BaseRepository("CollegeMIS").FindList<CdLessonSortEntity>().ToList();
  282. foreach (var arrangeLessonTerm in arrangeLessonTermList)
  283. {
  284. StuAttendanceLeaveEntity stuAttendanceLeave = new StuAttendanceLeaveEntity();
  285. stuAttendanceLeave.AcademicYearNo = arrangeLessonTerm.AcademicYearNo;
  286. stuAttendanceLeave.Semester = arrangeLessonTerm.Semester;
  287. stuAttendanceLeave.StuNo = model.CreateUserNo;
  288. stuAttendanceLeave.StuName = arrangeLessonTerm.StuName;
  289. stuAttendanceLeave.Grade = arrangeLessonTerm.Grade;
  290. stuAttendanceLeave.DeptNo = arrangeLessonTerm.DeptNo;
  291. stuAttendanceLeave.DeptName = deptList.Where(x => x.DeptNo == arrangeLessonTerm.DeptNo)
  292. .FirstOrDefault()?.DeptName;
  293. stuAttendanceLeave.MajorNo = arrangeLessonTerm.MajorNo;
  294. stuAttendanceLeave.MajorName = majorList.Where(x => x.MajorNo == arrangeLessonTerm.MajorNo)
  295. .FirstOrDefault()?.MajorName;
  296. stuAttendanceLeave.ClassNo = arrangeLessonTerm.TeachClassNo;
  297. stuAttendanceLeave.ClassName = classInfoList
  298. .Where(x => x.ClassNo == arrangeLessonTerm.TeachClassNo).FirstOrDefault()?.ClassName;
  299. stuAttendanceLeave.LessonNo = arrangeLessonTerm.LessonNo;
  300. stuAttendanceLeave.LessonName = arrangeLessonTerm.LessonName;
  301. stuAttendanceLeave.TeachClassNo = arrangeLessonTerm.TeachClassNo;
  302. stuAttendanceLeave.LessonSortNo = arrangeLessonTerm.LessonSortNo;
  303. stuAttendanceLeave.LessonSortName = lessonSortList.Find(m => m.LessonSortNo == arrangeLessonTerm.LessonSortNo)?.LessonSortName;
  304. stuAttendanceLeave.LessonDate = arrangeLessonTerm.LessonDate;
  305. stuAttendanceLeave.LessonTime = arrangeLessonTerm.LessonTime;
  306. stuAttendanceLeave.LeaveType = entity.LeaveType;
  307. stuAttendanceLeave.EmpNo = arrangeLessonTerm.EmpNo;
  308. stuAttendanceLeave.TecRemark = "按天请假";
  309. stuAttendanceLeave.UpdateDate = DateTime.Now;
  310. stuAttendanceLeave.IsCheck = "1";
  311. stuAttendanceLeave.ClassRoomNo = arrangeLessonTerm.ClassroomNo;
  312. stuAttendanceLeave.ClassRoomName = classRoomList.FirstOrDefault(x => x.ClassroomNo == arrangeLessonTerm.ClassroomNo)?.ClassroomName;
  313. //去重
  314. var isExistModel = this.BaseRepository("CollegeMIS").FindEntity<StuAttendanceLeaveEntity>(x =>
  315. x.AcademicYearNo == stuAttendanceLeave.AcademicYearNo && x.Semester == stuAttendanceLeave.Semester &&
  316. x.StuNo == stuAttendanceLeave.StuNo &&x.LessonNo == stuAttendanceLeave.LessonNo && x.TeachClassNo == stuAttendanceLeave.TeachClassNo &&
  317. x.LessonSortNo == stuAttendanceLeave.LessonSortNo &&x.LessonDate == stuAttendanceLeave.LessonDate && x.LessonTime == stuAttendanceLeave.LessonTime &&
  318. x.EmpNo == stuAttendanceLeave.EmpNo &&x.ClassRoomNo == stuAttendanceLeave.ClassRoomNo
  319. );
  320. if (isExistModel!=null)
  321. {
  322. stuAttendanceLeave.Modify(isExistModel.ID);
  323. db.Update(stuAttendanceLeave);
  324. }
  325. else
  326. {
  327. stuAttendanceLeave.Create();
  328. db.Insert(stuAttendanceLeave);
  329. }
  330. //学生考勤
  331. StuAttendanceEntity stuAttendanceEntity = new StuAttendanceEntity();
  332. stuAttendanceEntity.AcademicYearNo = arrangeLessonTerm.AcademicYearNo;
  333. stuAttendanceEntity.Semester = arrangeLessonTerm.Semester;
  334. stuAttendanceEntity.StuNo = model.CreateUserNo;
  335. stuAttendanceEntity.StuName = arrangeLessonTerm.StuName;
  336. stuAttendanceEntity.Gender = arrangeLessonTerm.GenderNo.ToLower()=="true"?"男":"女";
  337. stuAttendanceEntity.Grade = arrangeLessonTerm.Grade;
  338. stuAttendanceEntity.DeptNo = arrangeLessonTerm.DeptNo;
  339. stuAttendanceEntity.DeptName = deptList.Where(x => x.DeptNo == arrangeLessonTerm.DeptNo)
  340. .FirstOrDefault()?.DeptName;
  341. stuAttendanceEntity.MajorNo = arrangeLessonTerm.MajorNo;
  342. stuAttendanceEntity.MajorName = majorList.Where(x => x.MajorNo == arrangeLessonTerm.MajorNo).FirstOrDefault()?.MajorName;
  343. stuAttendanceEntity.ClassNo = arrangeLessonTerm.TeachClassNo;
  344. stuAttendanceEntity.ClassName = classInfoList
  345. .Where(x => x.ClassNo == arrangeLessonTerm.TeachClassNo).FirstOrDefault()?.ClassName;
  346. stuAttendanceEntity.LessonNo = arrangeLessonTerm.LessonNo;
  347. stuAttendanceEntity.LessonName = arrangeLessonTerm.LessonName;
  348. stuAttendanceEntity.TeachClassNo = arrangeLessonTerm.TeachClassNo;
  349. stuAttendanceEntity.LessonSortNo = arrangeLessonTerm.LessonSortNo;
  350. stuAttendanceEntity.LessonSortName = lessonSortList.Find(m => m.LessonSortNo == arrangeLessonTerm.LessonSortNo)?.LessonSortName;
  351. stuAttendanceEntity.LessonDate = arrangeLessonTerm.LessonDate;
  352. stuAttendanceEntity.PlanWeek = null;
  353. stuAttendanceEntity.LessonTime = arrangeLessonTerm.LessonTime;
  354. stuAttendanceEntity.AttendOrNo = "否";
  355. stuAttendanceEntity.Sort = Convert.ToInt32(entity.LeaveType) == 2 ? "病假" : "事假";
  356. stuAttendanceEntity.EmpNo = arrangeLessonTerm.EmpNo;
  357. stuAttendanceEntity.Remark = "按天请假";
  358. stuAttendanceEntity.CheckMarkDept = "";
  359. stuAttendanceEntity.CheckMark = "";
  360. stuAttendanceEntity.InertDate = DateTime.Now;
  361. stuAttendanceEntity.ClassRoomNo = arrangeLessonTerm.ClassroomNo;
  362. stuAttendanceEntity.ClassRoomName = classRoomList.FirstOrDefault(x => x.ClassroomNo == arrangeLessonTerm.ClassroomNo)?.ClassroomName;
  363. //去重
  364. var isExistModel2 = this.BaseRepository("CollegeMIS").FindEntity<StuAttendanceEntity>(x =>
  365. x.AcademicYearNo == stuAttendanceEntity.AcademicYearNo && x.Semester == stuAttendanceEntity.Semester && x.StuNo == stuAttendanceEntity.StuNo &&
  366. x.LessonNo == stuAttendanceEntity.LessonNo && x.TeachClassNo == stuAttendanceEntity.TeachClassNo && x.LessonSortNo == stuAttendanceEntity.LessonSortNo &&
  367. x.LessonDate == stuAttendanceEntity.LessonDate && x.LessonTime == stuAttendanceEntity.LessonTime && x.EmpNo == stuAttendanceEntity.EmpNo && x.ClassRoomNo == stuAttendanceEntity.ClassRoomNo);
  368. if (isExistModel2 != null)
  369. {
  370. stuAttendanceEntity.Modify(isExistModel2.ID);
  371. db.Update(stuAttendanceEntity);
  372. }
  373. else
  374. {
  375. stuAttendanceEntity.Create();
  376. db.Insert(stuAttendanceEntity);
  377. }
  378. }
  379. }
  380. }
  381. else
  382. {
  383. entity.Create();
  384. db.Insert(entity);
  385. }
  386. db.Commit();
  387. }
  388. catch (Exception ex)
  389. {
  390. db.Rollback();
  391. if (ex is ExceptionEx)
  392. {
  393. throw;
  394. }
  395. else
  396. {
  397. throw ExceptionEx.ThrowServiceException(ex);
  398. }
  399. }
  400. }
  401. #endregion
  402. }
  403. }