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
}
}