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["StuName"].IsEmpty()) { dp.Add("StuName", "%" + queryParam["StuName"].ToString() + "%", DbType.String); strSql.Append(" AND s.StuName like @StuName "); } //班级班主任/辅导员/系主任 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 "); } if (!queryParam["StuName"].IsEmpty()) { dp.Add("StuName", "%" + queryParam["StuName"].ToString() + "%", DbType.String); strSql.Append(" AND s.StuName like @StuName "); } //班级班主任/辅导员/系主任 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); } else { entity.Create(); db.Insert(entity); } db.Commit(); } catch (Exception ex) { db.Rollback(); if (ex is ExceptionEx) { throw; } else { throw ExceptionEx.ThrowServiceException(ex); } } } /// /// 提交 /// /// /// /// public void ModifyStatus(string keyValue, string CheckStatus, string processId) { var db = this.BaseRepository("CollegeMIS"); try { db.BeginTrans(); var entity = db.FindEntity(keyValue); entity.CheckStatus = CheckStatus; entity.ProcessId = processId; db.Update(entity); db.Commit(); } catch (Exception ex) { db.Rollback(); if (ex is ExceptionEx) { throw; } else { throw ExceptionEx.ThrowServiceException(ex); } } } /// /// 审核实体数据 /// /// 主键 public void ChangeStatusByProcessId(string status, string processId, string userId) { var db = this.BaseRepository("CollegeMIS"); try { db.BeginTrans(); db.ExecuteBySql("update StuLeaveManagement set CheckStatus='" + status + "',CheckUserId='" + userId + "',CheckTime='" + DateTime.Now + "' where ProcessId='" + processId + "' "); if (status.Trim() == "2") { //请假审核通过后,该学生的对应日期的课表改为请假 var model = db.FindList( $"select * from StuLeaveManagement where ProcessId='{processId}'").FirstOrDefault(); if (model != null) { var stuEntity = this.BaseRepository("CollegeMIS").FindEntity(x => x.StuNo == model.CreateUserNo); if (stuEntity != null) { //请假开始时间和结束时间 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 arrangeLessonList = new List(); //必修课排课数据 var arrangeLessonTermList = db.FindList($@"select a.*,b.StuName,b.Grade,b.GenderNo,b.ClassNo from [dbo].[ArrangeLessonTerm] a join stuinfobasic b on replace(a.TeachClassNo,a.LessonName,'')=b.classno where b.stuno='{model.CreateUserNo}' and a.lessondate between '{startTime}' and '{endTime}'"); arrangeLessonList.AddRange(arrangeLessonTermList); //选修课排课数据 var arrangeLessonTermElectiveList = db.FindList($@"select a.* from (select olpoeid from ElectiveMergeItem where emid in (select emid from ElectiveMergeItem aa left join StuSelectLessonListOfElective bb on aa.olpoeid = bb.olpeid where bb.StuNo = '{model.CreateUserNo}' and bb.Status = 2 ) ) as ccc left join ArrangeLessonTermOfElective a on ccc.olpoeid = a.PaiKeId where a.LessonDate between '{startTime}' and '{endTime}' and a.CheckMark = '1' "); arrangeLessonList.AddRange(arrangeLessonTermElectiveList); 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 arrangeLessonList) { //学生课表请假表 StuAttendanceLeaveEntity stuAttendanceLeave = new StuAttendanceLeaveEntity(); stuAttendanceLeave.AcademicYearNo = arrangeLessonTerm.AcademicYearNo; stuAttendanceLeave.Semester = arrangeLessonTerm.Semester; stuAttendanceLeave.StuNo = stuEntity.StuNo; stuAttendanceLeave.StuName = stuEntity.StuName; stuAttendanceLeave.Grade = stuEntity.Grade; stuAttendanceLeave.DeptNo = stuEntity.DeptNo; stuAttendanceLeave.DeptName = deptList.Where(x => x.DeptNo == stuEntity.DeptNo) .FirstOrDefault()?.DeptName; stuAttendanceLeave.MajorNo = stuEntity.MajorNo; stuAttendanceLeave.MajorName = majorList.Where(x => x.MajorNo == stuEntity.MajorNo) .FirstOrDefault()?.MajorName; stuAttendanceLeave.ClassNo = stuEntity.ClassNo; stuAttendanceLeave.ClassName = classInfoList .Where(x => x.ClassNo == stuEntity.ClassNo).FirstOrDefault()?.ClassName; stuAttendanceLeave.LessonNo = arrangeLessonTerm.LessonNo; stuAttendanceLeave.LessonName = arrangeLessonTerm.LessonName; stuAttendanceLeave.TeachClassNo = stuEntity.ClassNo; stuAttendanceLeave.LessonSortNo = arrangeLessonTerm.LessonSortNo; stuAttendanceLeave.LessonSortName = lessonSortList.Find(m => m.LessonSortNo == arrangeLessonTerm.LessonSortNo)?.LessonSortName; stuAttendanceLeave.LessonDate = arrangeLessonTerm.LessonDate; stuAttendanceLeave.LessonTime = arrangeLessonTerm.LessonSortNo == "2" ? arrangeLessonTerm.LessonSection : arrangeLessonTerm.LessonTime; stuAttendanceLeave.LeaveType = model.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 = stuEntity.StuNo; stuAttendanceEntity.StuName = stuEntity.StuName; stuAttendanceEntity.Gender = stuEntity.GenderNo == true ? "男" : "女"; stuAttendanceEntity.Grade = stuEntity.Grade; stuAttendanceEntity.DeptNo = stuEntity.DeptNo; stuAttendanceEntity.DeptName = deptList.Where(x => x.DeptNo == stuEntity.DeptNo) .FirstOrDefault()?.DeptName; stuAttendanceEntity.MajorNo = stuEntity.MajorNo; stuAttendanceEntity.MajorName = majorList.Where(x => x.MajorNo == stuEntity.MajorNo).FirstOrDefault()?.MajorName; stuAttendanceEntity.ClassNo = stuEntity.ClassNo; stuAttendanceEntity.ClassName = classInfoList .Where(x => x.ClassNo == stuEntity.ClassNo).FirstOrDefault()?.ClassName; stuAttendanceEntity.LessonNo = arrangeLessonTerm.LessonNo; stuAttendanceEntity.LessonName = arrangeLessonTerm.LessonName; stuAttendanceEntity.TeachClassNo = stuEntity.ClassNo; stuAttendanceEntity.LessonSortNo = arrangeLessonTerm.LessonSortNo; stuAttendanceEntity.LessonSortName = lessonSortList.Find(m => m.LessonSortNo == arrangeLessonTerm.LessonSortNo)?.LessonSortName; stuAttendanceEntity.LessonDate = arrangeLessonTerm.LessonDate; stuAttendanceEntity.PlanWeek = null; stuAttendanceEntity.LessonTime = arrangeLessonTerm.LessonSortNo == "2" ? arrangeLessonTerm.LessonSection : arrangeLessonTerm.LessonTime; stuAttendanceEntity.LessonTime2 = arrangeLessonTerm.LessonSortNo == "2" ? arrangeLessonTerm.LessonTime : null; stuAttendanceEntity.AttendOrNo = "否"; stuAttendanceEntity.Sort = "请假"; stuAttendanceEntity.EmpNo = arrangeLessonTerm.EmpNo; stuAttendanceEntity.Remark = "属于学生按天请假的流程审核"; stuAttendanceEntity.CheckMarkDept = "0"; stuAttendanceEntity.CheckMark = "0"; 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); } } } } } db.Commit(); } catch (Exception ex) { db.Rollback(); if (ex is ExceptionEx) { throw; } else { throw ExceptionEx.ThrowServiceException(ex); } } } /// /// /// /// /// /// public void ChangeStatusById(string keyValue, int CheckStatus, string processId) { try { this.BaseRepository("CollegeMIS").ExecuteBySql($"update stuleavemanagement set ProcessId='{processId}',CheckStatus='{CheckStatus}' where Id='{keyValue}'"); } catch (Exception ex) { if (ex is ExceptionEx) { throw; } else { throw ExceptionEx.ThrowServiceException(ex); } } } /// /// 获取主表实体数据 /// /// 流程实例ID /// public StuLeaveManagementEntity GetEntityByProcessId(string processId) { try { var data = this.BaseRepository("CollegeMIS").FindEntity(t => t.ProcessId == processId); 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 } }