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-Ultimate V7.0.0 数字化智慧校园
/// Copyright (c) 2013-2018 北京泉江科技有限公司
/// 创 建:超级管理员
/// 日 期:2019-09-26 10:47
/// 描 述:教学调度
///
public class ArrangeLessonTermAttemperService : RepositoryFactory
{
#region 获取数据
///
/// 获取页面显示列表数据
///
/// 查询参数
///
public IEnumerable GetPageList(Pagination pagination, string queryJson)
{
try
{
var strSql = new StringBuilder();
strSql.Append("SELECT t.* ");
//strSql.Append(" b.NewLessonDate,b.NewLessonTime,c.AcademicYearNo as D_AcademicYearNo,c.Semester as D_Semester,c.DeptNo as D_DeptNo,c.majorno as D_majorno,c.lessonno as D_lessonno,c.lessonname as D_lessonname,replace(c.teachclassno ,c.lessonname,'') as D_teachclassno,c.empno as D_empno,c.EmpName as D_EmpName, c.classroomno as D_classroomno,c.lessondate as D_lessondate,c.lessontime as D_lessontime ");
strSql.Append(" FROM ArrangeLessonTermAttemper t ");
//strSql.Append(" left join ArrangeLessonTermAttrmperChild b on b.AttemperId=t.id ");
//strSql.Append(" left join ArrangeLessonTerm c on c.altid=b.lessonid ");
strSql.Append(" WHERE 1=1 ");
var queryParam = queryJson.ToJObject();
// 虚拟参数
var dp = new DynamicParameters(new { });
if (!queryParam["AttemperType"].IsEmpty())
{
dp.Add("AttemperType", queryParam["AttemperType"].ToString(), DbType.String);
strSql.Append(" AND t.AttemperType = @AttemperType ");
}
if (!queryParam["AttemperTimeType"].IsEmpty())
{
dp.Add("AttemperTimeType", queryParam["AttemperTimeType"].ToString(), DbType.String);
strSql.Append(" AND t.AttemperTimeType = @AttemperTimeType ");
}
if (!queryParam["F_SchoolId"].IsEmpty())
{
dp.Add("F_SchoolId", queryParam["F_SchoolId"].ToString(), DbType.String);
strSql.Append(" AND t.F_SchoolId = @F_SchoolId ");
}
if (!queryParam["AcademicYearNo"].IsEmpty())
{
dp.Add("AcademicYearNo", queryParam["AcademicYearNo"].ToString(), DbType.String);
strSql.Append(" AND t.AcademicYearNo = @AcademicYearNo ");
}
if (!queryParam["Semester"].IsEmpty())
{
dp.Add("Semester", queryParam["Semester"].ToString(), DbType.String);
strSql.Append(" AND t.Semester = @Semester ");
}
if (!queryParam["DeptNo"].IsEmpty())
{
dp.Add("DeptNo", queryParam["DeptNo"].ToString(), DbType.String);
strSql.Append(" AND t.DeptNo = @DeptNo ");
}
if (!queryParam["MajorNo"].IsEmpty())
{
dp.Add("MajorNo", queryParam["MajorNo"].ToString(), DbType.String);
strSql.Append(" AND t.MajorNo = @MajorNo ");
}
if (!queryParam["LessonNo"].IsEmpty())
{
dp.Add("LessonNo", queryParam["LessonNo"].ToString(), DbType.String);
strSql.Append(" AND t.LessonNo = @LessonNo ");
}
if (!queryParam["TeachClassNo"].IsEmpty())
{
dp.Add("TeachClassNo", queryParam["TeachClassNo"].ToString(), DbType.String);
strSql.Append(" AND t.TeachClassNo = @TeachClassNo ");
}
if (!queryParam["EmpNo"].IsEmpty())
{
dp.Add("EmpNo", queryParam["EmpNo"].ToString(), DbType.String);
strSql.Append(" AND (t.EmpNo = @EmpNo or t.NewEmpNo=@EmpNo) ");
}
if (!queryParam["CreateUserId"].IsEmpty())
{
dp.Add("CreateUserId", queryParam["CreateUserId"].ToString(), DbType.String);
strSql.Append(" AND t.CreateUserId = @CreateUserId ");
}
var result = this.BaseRepository("CollegeMIS").FindList(strSql.ToString(), dp, pagination);
return result;
}
catch (Exception ex)
{
if (ex is ExceptionEx)
{
throw;
}
else
{
throw ExceptionEx.ThrowServiceException(ex);
}
}
}
///
/// 获取ArrangeLessonTermAttemper表实体数据
/// 主键
///
///
public ArrangeLessonTermAttemperEntity GetArrangeLessonTermAttemperEntity(string keyValue)
{
try
{
var db = this.BaseRepository("CollegeMIS").BeginTrans();
var result = db.FindEntity(c => c.Id == keyValue);
if (result != null)
{
result.query = db.FindList($@"select a.*,b.lessonname,b.EmpName,b.empno,c.classname,d.classroomname from ArrangeLessonTermAttrmperChild a
left join arrangelessonterm b on a.LessonId=b.ALTId
left join classinfo c on c.classno=replace(b.teachclassno,b.lessonname,'')
left join classroominfo d on d.classroomno=b.ClassroomNo
where 1=1 and a.AttemperId='{result.Id}' ").ToList();
}
return result;
}
catch (Exception ex)
{
if (ex is ExceptionEx)
{
throw;
}
else
{
throw ExceptionEx.ThrowServiceException(ex);
}
}
}
///
/// 获取主表实体数据
/// 流程实例ID
///
///
public ArrangeLessonTermAttemperEntity GetEntityByProcessId(string processId)
{
try
{
var db = this.BaseRepository("CollegeMIS").BeginTrans();
var result = db.FindEntity(t => t.ProcessId == processId);
if (result != null)
{
result.query = db.FindList($@"select a.*,b.lessonname,b.EmpName,b.empno,c.classname,d.classroomname from ArrangeLessonTermAttrmperChild a
left join arrangelessonterm b on a.LessonId=b.ALTId
left join classinfo c on c.classno=replace(b.teachclassno,b.lessonname,'')
left join classroominfo d on d.classroomno=b.ClassroomNo
where 1=1 and a.AttemperId='{result.Id}' ").ToList();
}
return result;
}
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);
this.BaseRepository("CollegeMIS").Delete(t => t.AttemperId == keyValue);
}
catch (Exception ex)
{
if (ex is ExceptionEx)
{
throw;
}
else
{
throw ExceptionEx.ThrowServiceException(ex);
}
}
}
///
/// 保存实体数据(新增、修改)
/// 主键
///
///
public void SaveEntity(string keyValue, ArrangeLessonTermAttemperEntity entity)
{
try
{
if (!string.IsNullOrEmpty(keyValue))
{
entity.Modify(keyValue);
this.BaseRepository("CollegeMIS").Update(entity);
if (entity.AttemperType == "04")
{
this.BaseRepository("CollegeMIS").Delete(c => c.AttemperId == keyValue);
foreach (ArrangeLessonTermAttrmperChildEntity item in entity.query)
{
item.AttemperId = entity.Id;
item.Create();
this.BaseRepository("CollegeMIS").Insert(item);
}
}
}
else
{
entity.Create();
this.BaseRepository("CollegeMIS").Insert(entity);
if (entity.AttemperType == "04")
{
foreach (ArrangeLessonTermAttrmperChildEntity item in entity.query)
{
item.AttemperId = entity.Id;
item.Create();
this.BaseRepository("CollegeMIS").Insert(item);
}
}
}
}
catch (Exception ex)
{
if (ex is ExceptionEx)
{
throw;
}
else
{
throw ExceptionEx.ThrowServiceException(ex);
}
}
}
#endregion
#region 扩展数据
///
/// 提交课程异动记录
///
/// 课程异动表主键
/// 审核状态
/// 流程Id
public void ModifyStatus(string keyValue, int status, string processId)
{
try
{
var now = DateTime.Now;
var entity = this.BaseRepository("CollegeMIS").FindEntity(x => x.Id == keyValue);
if (entity != null)
{
entity.Status = status;
entity.ProcessId = processId;
entity.SubmitTime = now;
entity.CheckStatus = 1;
this.BaseRepository("CollegeMIS").Update(entity);
}
}
catch (Exception ex)
{
if (ex is ExceptionEx)
{
throw;
}
else
{
throw ExceptionEx.ThrowServiceException(ex);
}
}
}
///
/// 修改课程异动表的审核状态
///
/// 审核状态
/// 流程Id
public void ModifyStatusByProcessId(int status, string processId)
{
var db = this.BaseRepository("CollegeMIS").BeginTrans();
var now = DateTime.Now;
var loginUserInfo = LoginUserInfo.Get();
try
{
var entity = db.FindEntity(x => x.ProcessId == processId);
if (entity != null)
{
//审核通过
if (status == 2)
{
if (entity.AttemperType == "01") //换课
{
//ArrangeLessonTerm
//var ArrangeLessonTermList = db.FindList(x => x.F_SchoolId == entity.F_SchoolId && x.AcademicYearNo == entity.AcademicYearNo && x.Semester == entity.Semester && x.DeptNo == entity.DeptNo && x.MajorNo == entity.MajorNo && x.LessonNo == entity.LessonNo && x.TeachClassNo.Contains(entity.TeachClassNo) && x.EmpNo == entity.EmpNo && x.ClassroomNo == entity.ClassroomNo && x.LessonDate >= entity.AttemperStartTime && x.LessonDate <= entity.AttemperEndTime);
var ArrangeLessonTermList = db.FindList(x => x.AcademicYearNo == entity.AcademicYearNo && x.Semester == entity.Semester && x.DeptNo == entity.DeptNo && x.MajorNo == entity.MajorNo && x.LessonNo == entity.LessonNo && x.TeachClassNo.Contains(entity.TeachClassNo) && x.EmpNo == entity.EmpNo && x.ClassroomNo == entity.ClassroomNo && x.LessonDate >= entity.AttemperStartTime && x.LessonDate <= entity.AttemperEndTime);
if (ArrangeLessonTermList.Any())
{
foreach (var item in ArrangeLessonTermList)
{
if (!string.IsNullOrEmpty(entity.NewEmpNo))
{
item.EmpNo = entity.NewEmpNo;
item.EmpName = db.FindEntity(x => x.EmpNo == entity.NewEmpNo)?.EmpName;
}
if (!string.IsNullOrEmpty(entity.NewClassroomNo))
{
item.ClassroomNo = entity.NewClassroomNo;
}
db.Update(item);
}
}
if (entity.AttemperTimeType == "01") //永久
{
if (!string.IsNullOrEmpty(entity.NewEmpNo))
{
//TeachClass
//db.ExecuteBySql($"update TeachClass set EmpNo='{entity.NewEmpNo}' where F_SchoolId='{entity.F_SchoolId}' and AcademicYearNo='{entity.AcademicYearNo}' and Semester='{entity.Semester}' and DeptNo='{entity.DeptNo}' and MajorNo='{entity.MajorNo}' and LessonNo='{entity.LessonNo}' and TeachClassNo='{entity.TeachClassNo}' and EmpNo='{entity.EmpNo}' ");
db.ExecuteBySql($"update TeachClass set EmpNo='{entity.NewEmpNo}' where AcademicYearNo='{entity.AcademicYearNo}' and Semester='{entity.Semester}' and DeptNo='{entity.DeptNo}' and MajorNo='{entity.MajorNo}' and LessonNo='{entity.LessonNo}' and TeachClassNo='{entity.TeachClassNo}' and EmpNo='{entity.EmpNo}' ");
//StuSelectLessonList
//db.ExecuteBySql($"update StuSelectLessonList set EmpNo='{entity.NewEmpNo}' where F_SchoolId='{entity.F_SchoolId}' and AcademicYearNo='{entity.AcademicYearNo}' and Semester='{entity.Semester}' and DeptNo='{entity.DeptNo}' and MajorNo='{entity.MajorNo}' and LessonNo='{entity.LessonNo}' and TeachClassNo='{entity.TeachClassNo}' and EmpNo='{entity.EmpNo}' ");
db.ExecuteBySql($"update StuSelectLessonList set EmpNo='{entity.NewEmpNo}' where AcademicYearNo='{entity.AcademicYearNo}' and Semester='{entity.Semester}' and DeptNo='{entity.DeptNo}' and MajorNo='{entity.MajorNo}' and LessonNo='{entity.LessonNo}' and TeachClassNo='{entity.TeachClassNo}' and EmpNo='{entity.EmpNo}' ");
//StuScore
//db.ExecuteBySql($"update StuScore set EmpNo='{entity.NewEmpNo}' where F_SchoolId='{entity.F_SchoolId}' and AcademicYearNo='{entity.AcademicYearNo}' and Semester='{entity.Semester}' and DeptNo='{entity.DeptNo}' and MajorNo='{entity.MajorNo}' and LessonNo='{entity.LessonNo}' and TeachClassNo='{entity.TeachClassNo}' and EmpNo='{entity.EmpNo}' and LessonSortNo='1' ");
db.ExecuteBySql($"update StuScore set EmpNo='{entity.NewEmpNo}' where AcademicYearNo='{entity.AcademicYearNo}' and Semester='{entity.Semester}' and DeptNo='{entity.DeptNo}' and MajorNo='{entity.MajorNo}' and LessonNo='{entity.LessonNo}' and TeachClassNo='{entity.TeachClassNo}' and EmpNo='{entity.EmpNo}' and LessonSortNo='1' ");
//EmpReportCard
//todo:分校区版初始化成绩时,初始化学生成绩未赋值F_SchoolId,初始化教师成绩单未赋值F_SchoolId
//db.ExecuteBySql($"update EmpReportCard set EmpNo='{entity.NewEmpNo}',EmpName='{db.FindEntity(x => x.EmpNo == entity.NewEmpNo)?.EmpName}' where F_SchoolId='{entity.F_SchoolId}' and AcademicYearNo='{entity.AcademicYearNo}' and Semester='{entity.Semester}' and LessonNo='{entity.LessonNo}' and ClassNo='{entity.TeachClassNo}' and EmpNo='{entity.EmpNo}' and LessonSortNo='1' ");
db.ExecuteBySql($"update EmpReportCard set EmpNo='{entity.NewEmpNo}',EmpName='{db.FindEntity(x => x.EmpNo == entity.NewEmpNo)?.EmpName}' where AcademicYearNo='{entity.AcademicYearNo}' and Semester='{entity.Semester}' and LessonNo='{entity.LessonNo}' and ClassNo='{entity.TeachClassNo}' and EmpNo='{entity.EmpNo}' and LessonSortNo='1' ");
}
}
}
else if (entity.AttemperType == "02") //停课
{
//ArrangeLessonTerm
//db.ExecuteBySql($"update ArrangeLessonTerm set CheckMark='0' where F_SchoolId='{entity.F_SchoolId}' and AcademicYearNo='{entity.AcademicYearNo}' and Semester='{entity.Semester}' and DeptNo='{entity.DeptNo}' and MajorNo='{entity.MajorNo}' and LessonNo='{entity.LessonNo}' and TeachClassNo like '%{entity.TeachClassNo}%' and EmpNo='{entity.EmpNo}' and ClassroomNo='{entity.ClassroomNo}' ");
db.ExecuteBySql($"update ArrangeLessonTerm set CheckMark='0' where AcademicYearNo='{entity.AcademicYearNo}' and Semester='{entity.Semester}' and DeptNo='{entity.DeptNo}' and MajorNo='{entity.MajorNo}' and LessonNo='{entity.LessonNo}' and TeachClassNo like '%{entity.TeachClassNo}%' and EmpNo='{entity.EmpNo}' and ClassroomNo='{entity.ClassroomNo}' ");
//StuSelectLessonList
//db.ExecuteBySql($"update StuSelectLessonList set CheckMark='0' where F_SchoolId='{entity.F_SchoolId}' and AcademicYearNo='{entity.AcademicYearNo}' and Semester='{entity.Semester}' and DeptNo='{entity.DeptNo}' and MajorNo='{entity.MajorNo}' and LessonNo='{entity.LessonNo}' and TeachClassNo='{entity.TeachClassNo}' and EmpNo='{entity.EmpNo}' ");
db.ExecuteBySql($"update StuSelectLessonList set CheckMark='0' where AcademicYearNo='{entity.AcademicYearNo}' and Semester='{entity.Semester}' and DeptNo='{entity.DeptNo}' and MajorNo='{entity.MajorNo}' and LessonNo='{entity.LessonNo}' and TeachClassNo='{entity.TeachClassNo}' and EmpNo='{entity.EmpNo}' ");
}
else if (entity.AttemperType == "03") //对调
{
//ArrangeLessonTerm
//var ArrangeLessonTermList = this.BaseRepository("CollegeMIS").FindList(x => x.F_SchoolId == entity.F_SchoolId && x.AcademicYearNo == entity.AcademicYearNo && x.Semester == entity.Semester && x.DeptNo == entity.DeptNo && x.MajorNo == entity.MajorNo && x.LessonNo == entity.LessonNo && x.TeachClassNo.Contains(entity.TeachClassNo) && x.EmpNo == entity.EmpNo && x.ClassroomNo == entity.ClassroomNo);
var ArrangeLessonTermList = this.BaseRepository("CollegeMIS").FindList(x => x.AcademicYearNo == entity.AcademicYearNo && x.Semester == entity.Semester && x.DeptNo == entity.DeptNo && x.MajorNo == entity.MajorNo && x.LessonNo == entity.LessonNo && x.TeachClassNo.Contains(entity.TeachClassNo) && x.EmpNo == entity.EmpNo && x.ClassroomNo == entity.ClassroomNo);
//var NewArrangeLessonTermList = this.BaseRepository("CollegeMIS").FindList(x => x.F_SchoolId == entity.F_SchoolId && x.AcademicYearNo == entity.AcademicYearNo && x.Semester == entity.Semester && x.DeptNo == entity.NewDeptNo && x.MajorNo == entity.NewMajorNo && x.LessonNo == entity.NewLessonNo && x.TeachClassNo.Contains(entity.NewTeachClassNo) && x.EmpNo == entity.NewEmpNo && x.ClassroomNo == entity.NewClassroomNo);
var NewArrangeLessonTermList = this.BaseRepository("CollegeMIS").FindList(x => x.AcademicYearNo == entity.AcademicYearNo && x.Semester == entity.Semester && x.DeptNo == entity.NewDeptNo && x.MajorNo == entity.NewMajorNo && x.LessonNo == entity.NewLessonNo && x.TeachClassNo.Contains(entity.NewTeachClassNo) && x.EmpNo == entity.NewEmpNo && x.ClassroomNo == entity.NewClassroomNo);
if (ArrangeLessonTermList.Any() && NewArrangeLessonTermList.Any())
{
var oldEntity = ArrangeLessonTermList.FirstOrDefault();
var newEntity = NewArrangeLessonTermList.FirstOrDefault();
var oldEntityTemp = new ArrangeLessonTermEntity()
{
DeptNo = oldEntity.DeptNo,
MajorNo = oldEntity.MajorNo,
LessonNo = oldEntity.LessonNo,
LessonName = oldEntity.LessonName,
TeachClassNo = oldEntity.TeachClassNo,
TeachClassSn = oldEntity.TeachClassSn,
EmpNo = oldEntity.EmpNo,
EmpName = oldEntity.EmpName,
LessonSortNo = oldEntity.LessonSortNo,
StuSortNo = oldEntity.StuSortNo,
JoinLessonNum = oldEntity.JoinLessonNum,
RelatedClassNo = oldEntity.RelatedClassNo,
ClassroomNo = oldEntity.ClassroomNo,
Remark = oldEntity.Remark,
CheckMark = oldEntity.CheckMark,
RecordMark = oldEntity.RecordMark,
};
foreach (var item in ArrangeLessonTermList)
{
item.DeptNo = newEntity.DeptNo;
item.MajorNo = newEntity.MajorNo;
item.LessonNo = newEntity.LessonNo;
item.LessonName = newEntity.LessonName;
item.TeachClassNo = newEntity.TeachClassNo;
item.TeachClassSn = newEntity.TeachClassSn;
item.EmpNo = newEntity.EmpNo;
item.EmpName = newEntity.EmpName;
item.LessonSortNo = newEntity.LessonSortNo;
item.StuSortNo = newEntity.StuSortNo;
item.JoinLessonNum = newEntity.JoinLessonNum;
item.RelatedClassNo = newEntity.RelatedClassNo;
item.ClassroomNo = newEntity.ClassroomNo;
item.Remark = newEntity.Remark;
item.CheckMark = newEntity.CheckMark;
item.RecordMark = newEntity.RecordMark;
db.Update(item);
}
foreach (var newitem in NewArrangeLessonTermList)
{
newitem.DeptNo = oldEntityTemp.DeptNo;
newitem.MajorNo = oldEntityTemp.MajorNo;
newitem.LessonNo = oldEntityTemp.LessonNo;
newitem.LessonName = oldEntityTemp.LessonName;
newitem.TeachClassNo = oldEntityTemp.TeachClassNo;
newitem.TeachClassSn = oldEntityTemp.TeachClassSn;
newitem.EmpNo = oldEntityTemp.EmpNo;
newitem.EmpName = oldEntityTemp.EmpName;
newitem.LessonSortNo = oldEntityTemp.LessonSortNo;
newitem.StuSortNo = oldEntityTemp.StuSortNo;
newitem.JoinLessonNum = oldEntityTemp.JoinLessonNum;
newitem.RelatedClassNo = oldEntityTemp.RelatedClassNo;
newitem.ClassroomNo = oldEntityTemp.ClassroomNo;
newitem.Remark = oldEntityTemp.Remark;
newitem.CheckMark = oldEntityTemp.CheckMark;
newitem.RecordMark = oldEntityTemp.RecordMark;
db.Update(newitem);
}
}
}
else if (entity.AttemperType == "04")//调课
{
entity.query = db.FindList($@"select a.*,b.lessonname,b.EmpName,b.empno,c.classname,d.classroomname from ArrangeLessonTermAttrmperChild a
left join arrangelessonterm b on a.LessonId=b.ALTId
left join classinfo c on c.classno=replace(b.teachclassno,b.lessonname,'')
left join classroominfo d on d.classroomno=b.ClassroomNo
where 1=1 and a.AttemperId='{entity.Id}' ").ToList();
foreach (var item in entity.query)
{
string updatesql = "update ArrangeLessonTerm set LessonDate='" + item.NewLessonDate + "',LessonTime='" + item.NewLessonTime + "' where ALTId='" + item.LessonId + "'";
db.ExecuteBySql(updatesql);
}
}
}
//更新课程异动表的审核状态
entity.Status = 1;
entity.CheckStatus = status;
entity.CheckUserId = loginUserInfo.userId;
entity.CheckUserName = loginUserInfo.realName;
entity.CheckTime = now;
db.Update(entity);
}
db.Commit();
}
catch (Exception ex)
{
db.Rollback();
if (ex is ExceptionEx)
{
throw;
}
else
{
throw ExceptionEx.ThrowServiceException(ex);
}
}
}
#endregion
}
}