using Dapper; using Learun.DataBase.Repository; using Learun.Util; using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Text; namespace Learun.Application.TwoDevelopment.EducationalAdministration { /// /// 版 本 Learun-ADMS V7.0.6 力软敏捷开发框架 /// Copyright (c) 2013-2020 力软信息技术(苏州)有限公司 /// 创 建:超级管理员 /// 日 期:2020-11-27 10:05 /// 描 述:学生请假管理 /// public class StuLeaveManagementService : RepositoryFactory { #region 获取数据 /// /// 获取页面显示列表数据 /// /// 查询参数 /// 查询参数 /// public IEnumerable GetPageList(Pagination pagination, string queryJson) { try { var strSql = new StringBuilder(); strSql.Append("SELECT t.*,s.StuName as CreateUserName,s.ClassNo,s.DeptNo,s.MajorNo,c.ClassDiredctorNo,c.ClassTutorNo "); strSql.Append(" FROM StuLeaveManagement t left join StuInfoBasic s on t.CreateUserNo=s.StuNo left join ClassInfo c on s.ClassNo=c.ClassNo "); strSql.Append(" WHERE 1=1 "); var queryParam = queryJson.ToJObject(); // 虚拟参数 var dp = new DynamicParameters(new { }); if (!queryParam["LeaveType"].IsEmpty()) { dp.Add("LeaveType", queryParam["LeaveType"].ToString(), DbType.String); strSql.Append(" AND t.LeaveType = @LeaveType "); } if (!queryParam["CheckStatus"].IsEmpty()) { dp.Add("CheckStatus", queryParam["CheckStatus"].ToString(), DbType.String); strSql.Append(" AND t.CheckStatus = @CheckStatus "); } if (!queryParam["StuNo"].IsEmpty()) { dp.Add("StuNo", queryParam["StuNo"].ToString(), DbType.String); strSql.Append(" AND t.CreateUserNo = @StuNo "); } //班级班主任/辅导员/系主任 if (!queryParam["ClassManagerNo"].IsEmpty()) { dp.Add("ClassManagerNo", queryParam["ClassManagerNo"].ToString(), DbType.String); strSql.Append(" AND (c.ClassDiredctorNo = @ClassManagerNo or c.ClassTutorNo = @ClassManagerNo "); //登录用户是否是系主任:若是,展示大于2天的请假记录; var deptDirectorRoleId = Config.GetValue("DeptDirectorRoleId"); if (deptDirectorRoleId != null) { var loginInfoRoleIds = LoginUserInfo.Get().roleIds; if (loginInfoRoleIds.IndexOf(',') == -1) { if (loginInfoRoleIds == deptDirectorRoleId) { strSql.Append(" or t.LeaveDay>2 )"); } else { strSql.Append(" ) "); } } else { if (loginInfoRoleIds.Split(',').Contains(deptDirectorRoleId)) { strSql.Append(" or t.LeaveDay>2 )"); } else { strSql.Append(" ) "); } } } else { strSql.Append(" ) "); } } return this.BaseRepository("CollegeMIS").FindList(strSql.ToString(), dp, pagination); } catch (Exception ex) { if (ex is ExceptionEx) { throw; } else { throw ExceptionEx.ThrowServiceException(ex); } } } public IEnumerable GetCheckPageList(Pagination pagination, string queryJson) { try { var strSql = new StringBuilder(); strSql.Append("SELECT t.*,s.StuName as CreateUserName,s.ClassNo,s.DeptNo,s.MajorNo,c.ClassDiredctorNo,c.ClassTutorNo "); strSql.Append(" FROM StuLeaveManagement t left join StuInfoBasic s on t.CreateUserNo=s.StuNo left join ClassInfo c on s.ClassNo=c.ClassNo "); strSql.Append(" WHERE 1=1 "); var queryParam = queryJson.ToJObject(); // 虚拟参数 var dp = new DynamicParameters(new { }); if (!queryParam["LeaveType"].IsEmpty()) { dp.Add("LeaveType", queryParam["LeaveType"].ToString(), DbType.String); strSql.Append(" AND t.LeaveType = @LeaveType "); } if (!queryParam["CheckStatus"].IsEmpty()) { dp.Add("CheckStatus", queryParam["CheckStatus"].ToString(), DbType.String); strSql.Append(" AND t.CheckStatus = @CheckStatus "); } if (!queryParam["StuNo"].IsEmpty()) { dp.Add("StuNo", queryParam["StuNo"].ToString(), DbType.String); strSql.Append(" AND t.CreateUserNo = @StuNo "); } //班级班主任/辅导员/系主任 var ClassManagerNo = LoginUserInfo.Get().account; if (!string.IsNullOrEmpty(ClassManagerNo)) { dp.Add("ClassManagerNo", ClassManagerNo, DbType.String); strSql.Append(" AND (c.ClassDiredctorNo = @ClassManagerNo or c.ClassTutorNo = @ClassManagerNo "); //登录用户是否是系主任:若是,展示大于2天的请假记录; var deptDirectorRoleId = Config.GetValue("DeptDirectorRoleId"); if (deptDirectorRoleId != null) { var loginInfoRoleIds = LoginUserInfo.Get().roleIds; if (loginInfoRoleIds.IndexOf(',') == -1) { if (loginInfoRoleIds == deptDirectorRoleId) { strSql.Append(" or t.LeaveDay>2 )"); } else { strSql.Append(" ) "); } } else { if (loginInfoRoleIds.Split(',').Contains(deptDirectorRoleId)) { strSql.Append(" or t.LeaveDay>2 )"); } else { strSql.Append(" ) "); } } } else { strSql.Append(" ) "); } } return this.BaseRepository("CollegeMIS").FindList(strSql.ToString(), dp, pagination); } catch (Exception ex) { if (ex is ExceptionEx) { throw; } else { throw ExceptionEx.ThrowServiceException(ex); } } } /// /// 获取StuLeaveManagement表实体数据 /// /// 主键 /// public StuLeaveManagementEntity GetStuLeaveManagementEntity(string keyValue) { try { var data = this.BaseRepository("CollegeMIS").FindEntity(keyValue); if (data != null) { var studentlist = this.BaseRepository("CollegeMIS").FindList(x => x.StuNo == data.CreateUserNo).FirstOrDefault(); if (studentlist != null) { data.DeptNo = studentlist.DeptNo; data.MajorNo = studentlist.MajorNo; data.ClassNo = studentlist.ClassNo; data.CreateUserName = studentlist.StuName; } var classlist = this.BaseRepository("CollegeMIS").FindList(x =>x.ClassNo == data.ClassNo).FirstOrDefault(); if (classlist!=null) { data.ClassDiredctorNo = classlist.ClassDiredctorNo; data.ClassTutorNo = classlist.ClassTutorNo; } } return data; } catch (Exception ex) { if (ex is ExceptionEx) { throw; } else { throw ExceptionEx.ThrowServiceException(ex); } } } #endregion #region 提交数据 /// /// 删除实体数据 /// /// 主键 public void DeleteEntity(string keyValue) { try { this.BaseRepository("CollegeMIS").Delete(t => t.Id == keyValue); } catch (Exception ex) { if (ex is ExceptionEx) { throw; } else { throw ExceptionEx.ThrowServiceException(ex); } } } /// /// 保存实体数据(新增、修改) /// /// 主键 /// 实体 public void SaveEntity(string keyValue, StuLeaveManagementEntity entity) { var db = this.BaseRepository("CollegeMIS"); try { db.BeginTrans(); if (!string.IsNullOrEmpty(keyValue)) { entity.Modify(keyValue); db.Update(entity); if (entity.CheckStatus.Trim() == "1" && entity.StartTime != null) { //请假审核通过后,该学生的对应日期的课表改为请假 var model = this.BaseRepository("CollegeMIS").FindList( $"select * from StuLeaveManagement where Id='{keyValue}'").FirstOrDefault(); //请假开始时间和结束时间 var startTime = Convert.ToDateTime(model.StartTime?.ToString("yyyy-MM-dd") + " 00:00:00"); var endTime = Convert.ToDateTime(model.EndTime?.ToString("yyyy-MM-dd") + " 23:59:59"); //排课数据 var arrangeLessonTermList = db.FindList($@"select a.*,b.StuName,b.Grade,b.GenderNo from [dbo].[ArrangeLessonTerm] a join stuinfobasic b on a.teachclassno=b.classno where b.stuno='{model.CreateUserNo}' and a.lessondate between '{startTime}' and '{endTime}'"); var deptList = this.BaseRepository("CollegeMIS").FindList(); var majorList = this.BaseRepository("CollegeMIS").FindList(); var classInfoList = this.BaseRepository("CollegeMIS").FindList(); var classRoomList = this.BaseRepository("CollegeMIS").FindList().ToList(); var lessonSortList = this.BaseRepository("CollegeMIS").FindList().ToList(); foreach (var arrangeLessonTerm in arrangeLessonTermList) { StuAttendanceLeaveEntity stuAttendanceLeave = new StuAttendanceLeaveEntity(); stuAttendanceLeave.AcademicYearNo = arrangeLessonTerm.AcademicYearNo; stuAttendanceLeave.Semester = arrangeLessonTerm.Semester; stuAttendanceLeave.StuNo = model.CreateUserNo; stuAttendanceLeave.StuName = arrangeLessonTerm.StuName; stuAttendanceLeave.Grade = arrangeLessonTerm.Grade; stuAttendanceLeave.DeptNo = arrangeLessonTerm.DeptNo; stuAttendanceLeave.DeptName = deptList.Where(x => x.DeptNo == arrangeLessonTerm.DeptNo) .FirstOrDefault()?.DeptName; stuAttendanceLeave.MajorNo = arrangeLessonTerm.MajorNo; stuAttendanceLeave.MajorName = majorList.Where(x => x.MajorNo == arrangeLessonTerm.MajorNo) .FirstOrDefault()?.MajorName; stuAttendanceLeave.ClassNo = arrangeLessonTerm.TeachClassNo; stuAttendanceLeave.ClassName = classInfoList .Where(x => x.ClassNo == arrangeLessonTerm.TeachClassNo).FirstOrDefault()?.ClassName; stuAttendanceLeave.LessonNo = arrangeLessonTerm.LessonNo; stuAttendanceLeave.LessonName = arrangeLessonTerm.LessonName; stuAttendanceLeave.TeachClassNo = arrangeLessonTerm.TeachClassNo; stuAttendanceLeave.LessonSortNo = arrangeLessonTerm.LessonSortNo; stuAttendanceLeave.LessonSortName = lessonSortList.Find(m => m.LessonSortNo == arrangeLessonTerm.LessonSortNo)?.LessonSortName; stuAttendanceLeave.LessonDate = arrangeLessonTerm.LessonDate; stuAttendanceLeave.LessonTime = arrangeLessonTerm.LessonTime; stuAttendanceLeave.LeaveType = entity.LeaveType; stuAttendanceLeave.EmpNo = arrangeLessonTerm.EmpNo; stuAttendanceLeave.TecRemark = "按天请假"; stuAttendanceLeave.UpdateDate = DateTime.Now; stuAttendanceLeave.IsCheck = "1"; stuAttendanceLeave.ClassRoomNo = arrangeLessonTerm.ClassroomNo; stuAttendanceLeave.ClassRoomName = classRoomList.FirstOrDefault(x => x.ClassroomNo == arrangeLessonTerm.ClassroomNo)?.ClassroomName; //去重 var isExistModel = this.BaseRepository("CollegeMIS").FindEntity(x => x.AcademicYearNo == stuAttendanceLeave.AcademicYearNo && x.Semester == stuAttendanceLeave.Semester && x.StuNo == stuAttendanceLeave.StuNo &&x.LessonNo == stuAttendanceLeave.LessonNo && x.TeachClassNo == stuAttendanceLeave.TeachClassNo && x.LessonSortNo == stuAttendanceLeave.LessonSortNo &&x.LessonDate == stuAttendanceLeave.LessonDate && x.LessonTime == stuAttendanceLeave.LessonTime && x.EmpNo == stuAttendanceLeave.EmpNo &&x.ClassRoomNo == stuAttendanceLeave.ClassRoomNo ); if (isExistModel!=null) { stuAttendanceLeave.Modify(isExistModel.ID); db.Update(stuAttendanceLeave); } else { stuAttendanceLeave.Create(); db.Insert(stuAttendanceLeave); } //学生考勤 StuAttendanceEntity stuAttendanceEntity = new StuAttendanceEntity(); stuAttendanceEntity.AcademicYearNo = arrangeLessonTerm.AcademicYearNo; stuAttendanceEntity.Semester = arrangeLessonTerm.Semester; stuAttendanceEntity.StuNo = model.CreateUserNo; stuAttendanceEntity.StuName = arrangeLessonTerm.StuName; stuAttendanceEntity.Gender = arrangeLessonTerm.GenderNo.ToLower()=="true"?"男":"女"; stuAttendanceEntity.Grade = arrangeLessonTerm.Grade; stuAttendanceEntity.DeptNo = arrangeLessonTerm.DeptNo; stuAttendanceEntity.DeptName = deptList.Where(x => x.DeptNo == arrangeLessonTerm.DeptNo) .FirstOrDefault()?.DeptName; stuAttendanceEntity.MajorNo = arrangeLessonTerm.MajorNo; stuAttendanceEntity.MajorName = majorList.Where(x => x.MajorNo == arrangeLessonTerm.MajorNo).FirstOrDefault()?.MajorName; stuAttendanceEntity.ClassNo = arrangeLessonTerm.TeachClassNo; stuAttendanceEntity.ClassName = classInfoList .Where(x => x.ClassNo == arrangeLessonTerm.TeachClassNo).FirstOrDefault()?.ClassName; stuAttendanceEntity.LessonNo = arrangeLessonTerm.LessonNo; stuAttendanceEntity.LessonName = arrangeLessonTerm.LessonName; stuAttendanceEntity.TeachClassNo = arrangeLessonTerm.TeachClassNo; stuAttendanceEntity.LessonSortNo = arrangeLessonTerm.LessonSortNo; stuAttendanceEntity.LessonSortName = lessonSortList.Find(m => m.LessonSortNo == arrangeLessonTerm.LessonSortNo)?.LessonSortName; stuAttendanceEntity.LessonDate = arrangeLessonTerm.LessonDate; stuAttendanceEntity.PlanWeek = null; stuAttendanceEntity.LessonTime = arrangeLessonTerm.LessonTime; stuAttendanceEntity.AttendOrNo = "否"; stuAttendanceEntity.Sort = Convert.ToInt32(entity.LeaveType) == 2 ? "病假" : "事假"; stuAttendanceEntity.EmpNo = arrangeLessonTerm.EmpNo; stuAttendanceEntity.Remark = "按天请假"; stuAttendanceEntity.CheckMarkDept = ""; stuAttendanceEntity.CheckMark = ""; stuAttendanceEntity.InertDate = DateTime.Now; stuAttendanceEntity.ClassRoomNo = arrangeLessonTerm.ClassroomNo; stuAttendanceEntity.ClassRoomName = classRoomList.FirstOrDefault(x => x.ClassroomNo == arrangeLessonTerm.ClassroomNo)?.ClassroomName; //去重 var isExistModel2 = this.BaseRepository("CollegeMIS").FindEntity(x => x.AcademicYearNo == stuAttendanceEntity.AcademicYearNo && x.Semester == stuAttendanceEntity.Semester && x.StuNo == stuAttendanceEntity.StuNo && x.LessonNo == stuAttendanceEntity.LessonNo && x.TeachClassNo == stuAttendanceEntity.TeachClassNo && x.LessonSortNo == stuAttendanceEntity.LessonSortNo && x.LessonDate == stuAttendanceEntity.LessonDate && x.LessonTime == stuAttendanceEntity.LessonTime && x.EmpNo == stuAttendanceEntity.EmpNo && x.ClassRoomNo == stuAttendanceEntity.ClassRoomNo); if (isExistModel2 != null) { stuAttendanceEntity.Modify(isExistModel2.ID); db.Update(stuAttendanceEntity); } else { stuAttendanceEntity.Create(); db.Insert(stuAttendanceEntity); } } } } else { entity.Create(); db.Insert(entity); } db.Commit(); } catch (Exception ex) { db.Rollback(); if (ex is ExceptionEx) { throw; } else { throw ExceptionEx.ThrowServiceException(ex); } } } #endregion } }