using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Linq.Expressions;
using EMIS.Entities;
using EMIS.ViewModel.EnrollManage.SpecialtyManage;
using EMIS.ViewModel.Students;
using EMIS.DataLogic.Common.Students;
using EMIS.ViewModel;
using EMIS.ViewModel.UniversityManage.SpecialtyClassManage;
using EMIS.ViewModel.EducationManagement;
using EMIS.ViewModel.CultureplanManage.PlanManagement;
using EMIS.DataLogic.Repositories;
using EMIS.ViewModel.GraduationManage.GraduationSetting;
namespace EMIS.DataLogic.GraduationManage.GraduationSetting
{
public class GraduationStandardDAL
{
public GraduationStandardRepository GraduationStandardRepository { get; set; }
public GrademajorRepository GrademajorRepository { get; set; }
public FacultymajorRepository FacultymajorRepository { get; set; }
public DepartmentRepository DepartmentRepository { get; set; }
public CollegeRepository CollegeRepository { get; set; }
public CampusRepository CampusRepository { get; set; }
public SchoolyearRepository SchoolyearRepository { get; set; }
public ClassmajorRepository ClassmajorRepository { get; set; }
public StudentRepository StudentRepository { get; set; }
public SpecialtyPlanRepository SpecialtyPlanRepository { get; set; }
public SpecialtyPlanTeachingSettingRepository SpecialtyPlanTeachingSettingRepository { get; set; }
public ExecutablePlanRepository ExecutablePlanRepository { get; set; }
public ExecutablePlanTeachingSettingRepository ExecutablePlanTeachingSettingRepository { get; set; }
public CoursematerialRepository CoursematerialRepository { get; set; }
public CourseTypeSelectCourseTypeRepository CourseTypeSelectCourseTypeRepository { get; set; }
public UserRepository UserRepository { get; set; }
///
/// 查询对应的毕业标准信息View
///
///
///
public IQueryable GetGraduationStandardViewQueryable(Expression> exp)
{
var query = from gs in GraduationStandardRepository.GetList(exp)
join gr in GrademajorRepository.Entities
on gs.GrademajorID equals gr.GrademajorID
join fa in FacultymajorRepository.Entities
on gr.FacultymajorID equals fa.FacultymajorID
join col in CollegeRepository.Entities
on fa.CollegeID equals col.CollegeID
join cam in CampusRepository.Entities
on col.CampusID equals cam.CampusID
join sye in SchoolyearRepository.Entities
on
new { SchoolyearID = gr.GradeID.Value, SchoolcodeID = gr.SemesterID.Value }
equals
new { SchoolyearID = sye.Years, SchoolcodeID = sye.SchoolcodeID }
into tempsyenter
from syenter in tempsyenter.DefaultIfEmpty()
select new GraduationStandardView
{
GraduationStandardID = gs.GraduationStandardID,
GrademajorID = gs.GrademajorID,
GrademajorCode = gr.Code,
GrademajorName = gr.Name,
FacultymajorID = fa.FacultymajorID,
FacultymajorNo = fa.Code,
FacultymajorName = fa.Name,
CollegeID = fa.CollegeID,
CollegeNo = col.No,
CollegeName = col.Name,
CampusID = col.CampusID,
CampusNo = cam.No,
CampusName = cam.Name,
SchoolyearID = gr.GradeID,
SchoolcodeID = gr.SemesterID,
EnteringSchoolYearID = syenter.SchoolyearID,
EnteringSchoolYearCode = syenter.Code,
GraduatingSemesterID = gr.CF_Schoolyear.SchoolyearID,
GraduatingSemesterCode = gr.CF_Schoolyear.Code,
StandardID = fa.StandardID,
EducationID = fa.EducationID,
LearningformID = fa.LearningformID,
LearnSystem = fa.LearnSystem,
RequireCourseCount = gs.RequireCourseCount,
GraduationCredit = gs.GraduationCredit,
RecordStatus = gs.RecordStatus,
CreateUserID = gs.CreateUserID,
CreateTime = gs.CreateTime,
ModifyUserID = gs.ModifyUserID,
ModifyTime = gs.ModifyTime
};
return query;
}
///
/// 查询对应的毕业标准信息View(门数、各类型学分统计:专业计划、执行计划)
/// 注:由于学分制实行的程度不同,目前只对专业计划进行统计
/// 默认为普教版本
///
///
///
///
///
public virtual IQueryable GetGraduationStandardViewQueryable(Expression> expGraduationStandard,
Expression> expExecutablePlan, Expression> expStudent)
{
var query = from gs in GraduationStandardRepository.GetList(expGraduationStandard)
join gr in GrademajorRepository.Entities
on gs.GrademajorID equals gr.GrademajorID
join fa in FacultymajorRepository.Entities
on gr.FacultymajorID equals fa.FacultymajorID
join col in CollegeRepository.Entities
on fa.CollegeID equals col.CollegeID
join cam in CampusRepository.Entities
on col.CampusID equals cam.CampusID
join sye in SchoolyearRepository.Entities
on new { SchoolyearID = gr.GradeID.Value, SchoolcodeID = gr.SemesterID.Value }
equals new { SchoolyearID = sye.Years, SchoolcodeID = sye.SchoolcodeID } into tempsyenter
from syenter in tempsyenter.DefaultIfEmpty()
join stugr in
(
//年级专业对应的学生人数(区分在校、非在校)
from stu in StudentRepository.GetList(expStudent)
join cl in ClassmajorRepository.Entities
on stu.ClassmajorID equals cl.ClassmajorID
group cl by cl.GrademajorID into g
select new
{
GrademajorID = g.Key,
StudentCount = g.Count()
}
)
on gr.GrademajorID equals stugr.GrademajorID into tempstugr
from gsstugr in tempstugr.DefaultIfEmpty()
join spgr in
(
//专业计划(计划门数、计划学分、必修、限选、任选学分统计)
from spct in
(
from sp in SpecialtyPlanRepository.Entities
join ct in CourseTypeSelectCourseTypeRepository.Entities
on sp.CourseTypeID equals ct.CourseTypeID into tempct
from spct in tempct.DefaultIfEmpty()
select new
{
GrademajorID = sp.GrademajorID,
CourseTypeID = sp.CourseTypeID,
Credit = sp.EM_SpecialtyPlanTeachingSetting.Credit ?? 0,
IsRequired = spct.IsRequired ?? true,
IsOptionalCourse = spct.IsOptionalCourse ?? false,
IsFreeSelectionCourse = spct.IsFreeSelectionCourse ?? false,
}
)
group spct by spct.GrademajorID into g
select new
{
GrademajorID = g.Key,
PlanCourseCount = g.Count(),
SpecialtyRequireCreditTotal = g.Sum(x => x.IsRequired ? x.Credit : 0),
OptionalCreditTotal = g.Sum(x => x.IsOptionalCourse ? x.Credit : 0),
FreeSelectionCreditTotal = g.Sum(x => x.IsFreeSelectionCourse ? x.Credit : 0),
SpecialtyCreditTotal = g.Sum(x => x.Credit)
}
)
on gr.GrademajorID equals spgr.GrademajorID into tempspgr
from gsspgr in tempspgr.DefaultIfEmpty()
join epgr in
(
//执行计划(执行门数、执行学分)
from ep in ExecutablePlanRepository.GetList(expExecutablePlan)
join ct in CourseTypeSelectCourseTypeRepository.Entities
on ep.CourseTypeID equals ct.CourseTypeID into tempct
from epct in tempct.DefaultIfEmpty()
group ep by ep.GrademajorID into g
select new
{
GrademajorID = g.Key,
ExecCourseCount = g.Count(),
ExecutableCreditTotal = g.Sum(x => x.EM_ExecutablePlanTeachingSetting.Credit ?? 0)
}
)
on gr.GrademajorID equals epgr.GrademajorID into tempepgr
from gsepgr in tempepgr.DefaultIfEmpty()
select new GraduationStandardView
{
GraduationStandardID = gs.GraduationStandardID,
GrademajorID = gs.GrademajorID,
GrademajorCode = gr.Code,
GrademajorName = gr.Name,
FacultymajorID = fa.FacultymajorID,
FacultymajorNo = fa.Code,
FacultymajorName = fa.Name,
CollegeID = fa.CollegeID,
CollegeNo = col.No,
CollegeName = col.Name,
CampusID = col.CampusID,
CampusNo = cam.No,
CampusName = cam.Name,
SchoolyearID = gr.GradeID,
SchoolcodeID = gr.SemesterID,
EnteringSchoolYearID = syenter.SchoolyearID,
EnteringSchoolYearCode = syenter.Code,
GraduatingSemesterID = gr.CF_Schoolyear.SchoolyearID,
GraduatingSemesterCode = gr.CF_Schoolyear.Code,
StandardID = fa.StandardID,
EducationID = fa.EducationID,
LearningformID = fa.LearningformID,
LearnSystem = fa.LearnSystem,
StudentCount = gsstugr.StudentCount == null ? 0 : gsstugr.StudentCount,
PlanCourseCount = gsspgr.PlanCourseCount == null ? 0 : gsspgr.PlanCourseCount,
SpecialtyRequireCreditTotal = gsspgr.SpecialtyRequireCreditTotal == null ? 0 : gsspgr.SpecialtyRequireCreditTotal,
OptionalCreditTotal = gsspgr.OptionalCreditTotal == null ? 0 : gsspgr.OptionalCreditTotal,
FreeSelectionCreditTotal = gsspgr.FreeSelectionCreditTotal == null ? 0 : gsspgr.FreeSelectionCreditTotal,
SpecialtyCreditTotal = gsspgr.SpecialtyCreditTotal == null ? 0 : gsspgr.SpecialtyCreditTotal,
ExecCourseCount = gsepgr.ExecCourseCount == null ? 0 : gsepgr.ExecCourseCount,
ExecutableCreditTotal = gsepgr.ExecutableCreditTotal == null ? 0 : gsepgr.ExecutableCreditTotal,
RequireCourseCount = gs.RequireCourseCount,
GraduationCredit = gs.GraduationCredit,
RecordStatus = gs.RecordStatus,
CreateUserID = gs.CreateUserID,
CreateTime = gs.CreateTime,
ModifyUserID = gs.ModifyUserID,
ModifyTime = gs.ModifyTime
};
return query;
}
///
/// 查询对应的年级专业信息View
///
///
///
///
public IQueryable GetGrademajorViewQueryable(Expression> expGrademajor, Expression> expStudent)
{
var query = from gr in GrademajorRepository.GetList(expGrademajor)
join fa in FacultymajorRepository.Entities
on gr.FacultymajorID equals fa.FacultymajorID
join col in CollegeRepository.Entities
on fa.CollegeID equals col.CollegeID
join cam in CampusRepository.Entities
on col.CampusID equals cam.CampusID
join grsy in SchoolyearRepository.Entities
on gr.GraduateSchoolyearID equals grsy.SchoolyearID
join stugr in
(
//年级专业对应的学生人数
from stu in StudentRepository.GetList(expStudent)
join cl in ClassmajorRepository.Entities
on stu.ClassmajorID equals cl.ClassmajorID
group cl by cl.GrademajorID into g
select new
{
GrademajorID = g.Key,
StudentCount = g.Count()
}
)
on gr.GrademajorID equals stugr.GrademajorID into tempstugr
from gsstugr in tempstugr.DefaultIfEmpty()
select new GrademajorView
{
GrademajorID = gr.GrademajorID,
Code = gr.Code,
Name = gr.Name,
Abbreviation = gr.Abbreviation,
GradeID = gr.GradeID,
SemesterID = gr.SemesterID,
GraduateSchoolyearID = gr.GraduateSchoolyearID,
GraduateSchoolyearCode = grsy.Code,
GraduateValue = grsy.Value,
FacultymajorID = gr.FacultymajorID,
FacultymajorCode = fa.Code,
FacultymajorName = fa.Name,
EducationID = fa.EducationID,
LearningformID = fa.LearningformID,
LearnSystem = fa.LearnSystem,
StudentCount = gsstugr.StudentCount == null ? 0 : gsstugr.StudentCount,
StandardID = fa.StandardID,
CollegeID = fa.CollegeID,
CollegeCode = col.No,
CollegeName = col.Name,
CampusID = col.CampusID,
CampusNo = cam.No,
CampusName = cam.Name
};
return query;
}
///
/// 查询未新增的毕业标准对应的年级专业信息View
///
///
///
///
public IQueryable GetGraduationStandardViewNoAddQueryable(Expression> expGrademajor, Expression> expStudent)
{
var query = from gr in this.GetGrademajorViewQueryable(expGrademajor, expStudent)
join gs in GraduationStandardRepository.Entities
on gr.GrademajorID equals gs.GrademajorID into tempgs
from grgs in tempgs.DefaultIfEmpty()
where grgs.GraduationStandardID == null
select gr;
return query;
}
///
/// 查询毕业标准对应的专业计划信息
/// 注:默认为普教版本
///
///
///
public virtual IQueryable GetSpecialtyPlanViewQueryable(Expression> exp)
{
var query = from gs in GraduationStandardRepository.GetList(exp)
join gr in GrademajorRepository.Entities
on gs.GrademajorID equals gr.GrademajorID
join fa in FacultymajorRepository.Entities
on gr.FacultymajorID equals fa.FacultymajorID
join col in CollegeRepository.Entities
on fa.CollegeID equals col.CollegeID
join sp in SpecialtyPlanRepository.Entities
on gr.GrademajorID equals sp.GrademajorID
join sy in SchoolyearRepository.Entities
on sp.SchoolyearID equals sy.SchoolyearID
join cou in CoursematerialRepository.Entities
on sp.CoursematerialID equals cou.CoursematerialID
join depcou in DepartmentRepository.Entities
on sp.DepartmentID equals depcou.DepartmentID into tempdepcou
from spdepcou in tempdepcou.DefaultIfEmpty()
select new SpecialtyPlanView
{
SpecialtyPlanID = sp.SpecialtyPlanID,
SchoolyearID = sp.SchoolyearID,
SchoolyearCode = sy.Code,
GrademajorID = sp.GrademajorID,
GrademajorCode = gr.Code,
GrademajorName = gr.Name,
CollegeID = fa.CollegeID,
CollegeCode = col.No,
CollegeName = col.Name,
CoursematerialID = sp.CoursematerialID,
CourseCode = cou.CourseCode,
CourseName = cou.CourseName,
CourseStructureID = sp.CourseStructureID,
CourseCategoryID = sp.CourseCategoryID,
CourseTypeID = sp.CourseTypeID,
CourseQualityID = sp.CourseQualityID,
ResultTypeID = sp.ResultTypeID,
PracticeTypeID = sp.PracticeTypeID,
ExaminationModeID = sp.ExaminationModeID,
TeachinglanguageID = sp.TeachinglanguageID,
CourseFineID = sp.CourseFineID,
IsSpecialtycore = sp.IsSpecialtycore ?? false,
IsCooperation = sp.IsCooperation ?? false,
IsRequired = sp.IsRequired ?? false,
IsElective = sp.IsElective ?? false,
IsNetworkCourse = sp.IsNetworkCourse ?? false,
IsMainCourse = sp.IsMainCourse ?? false,
Credit = sp.EM_SpecialtyPlanTeachingSetting.Credit ?? 0,
TheoryCourse = sp.EM_SpecialtyPlanTeachingSetting.TheoryCourse ?? 0,
Practicehours = sp.EM_SpecialtyPlanTeachingSetting.Practicehours ?? 0,
Trialhours = sp.EM_SpecialtyPlanTeachingSetting.Trialhours ?? 0,
Totalhours = (sp.EM_SpecialtyPlanTeachingSetting.TheoryCourse ?? 0) + (sp.EM_SpecialtyPlanTeachingSetting.Practicehours ?? 0),
SchoolyearNumID = (sy.Value - ((gr.GradeID * 2 - 1) + gr.SemesterID - 1)) / 2 + 1,
SchoolcodeID = sy.SchoolcodeID,
StarttermID = sy.Value - ((gr.GradeID * 2 - 1) + gr.SemesterID - 1) + 1,
DepartmentID = sp.DepartmentID,
DepartmentCode = spdepcou.No,
DepartmentName = spdepcou.Name,
HandleModeID = sp.HandleModeID,
Remark = sp.Remark,
RecordStatus = sp.RecordStatus,
CreateUserID = sp.CreateUserID,
CreateTime = sp.CreateTime,
ModifyUserID = sp.ModifyUserID,
ModifyTime = sp.ModifyTime
};
return query;
}
///
/// 查询毕业标准对应的执行计划信息
///
///
///
public IQueryable GetExecutablePlanViewQueryable(Expression> exp)
{
var query = from gs in GraduationStandardRepository.GetList(exp)
join gr in GrademajorRepository.Entities
on gs.GrademajorID equals gr.GrademajorID
join fa in FacultymajorRepository.Entities
on gr.FacultymajorID equals fa.FacultymajorID
join col in CollegeRepository.Entities
on fa.CollegeID equals col.CollegeID
join ep in ExecutablePlanRepository.Entities
on gr.GrademajorID equals ep.GrademajorID
join sy in SchoolyearRepository.Entities
on ep.SchoolyearID equals sy.SchoolyearID
join cou in CoursematerialRepository.Entities
on ep.CoursematerialID equals cou.CoursematerialID
join depcou in DepartmentRepository.Entities
on ep.DepartmentID equals depcou.DepartmentID into tempdepcou
from epdepcou in tempdepcou.DefaultIfEmpty()
select new ExecutablePlanView
{
ExecutablePlanID = ep.ExecutablePlanID,
SpecialtyPlanID = ep.SpecialtyPlanID,
SchoolyearID = ep.SchoolyearID,
SchoolyearCode = sy.Code,
GrademajorID = ep.GrademajorID,
GrademajorCode = gr.Code,
GrademajorName = gr.Name,
CollegeID = fa.CollegeID,
CollegeCode = col.No,
CollegeName = col.Name,
CoursematerialID = ep.CoursematerialID,
CourseCode = cou.CourseCode,
CourseName = cou.CourseName,
CourseStructureID = ep.CourseStructureID,
CourseCategoryID = ep.CourseCategoryID,
CourseTypeID = ep.CourseTypeID,
CourseQualityID = ep.CourseQualityID,
ResultTypeID = ep.ResultTypeID,
PracticeTypeID = ep.EM_ExecutablePlanProfile.PracticeTypeID,
ExaminationModeID = ep.EM_ExecutablePlanProfile.ExaminationModeID,
TeachinglanguageID = ep.EM_ExecutablePlanProfile.TeachinglanguageID,
CourseFineID = ep.EM_ExecutablePlanProfile.CourseFineID,
IsSpecialtycore = ep.EM_ExecutablePlanProfile.IsSpecialtycore ?? false,
IsCooperation = ep.EM_ExecutablePlanProfile.IsCooperation ?? false,
IsRequired = ep.EM_ExecutablePlanProfile.IsRequired ?? false,
IsElective = ep.EM_ExecutablePlanProfile.IsElective ?? false,
IsNetworkCourse = ep.EM_ExecutablePlanProfile.IsNetworkCourse ?? false,
IsMainCourse = ep.EM_ExecutablePlanProfile.IsMainCourse ?? false,
Credit = ep.EM_ExecutablePlanTeachingSetting.Credit ?? 0,
TheoryCourse = ep.EM_ExecutablePlanTeachingSetting.TheoryCourse ?? 0,
Practicehours = ep.EM_ExecutablePlanTeachingSetting.Practicehours ?? 0,
Trialhours = ep.EM_ExecutablePlanTeachingSetting.Trialhours ?? 0,
Totalhours = (ep.EM_ExecutablePlanTeachingSetting.TheoryCourse ?? 0) + (ep.EM_ExecutablePlanTeachingSetting.Practicehours ?? 0),
SchoolyearNumID = (sy.Value - ((gr.GradeID * 2 - 1) + gr.SemesterID - 1)) / 2 + 1,
SchoolcodeID = sy.SchoolcodeID,
StarttermID = sy.Value - ((gr.GradeID * 2 - 1) + gr.SemesterID - 1) + 1,
DepartmentID = ep.DepartmentID,
DepartmentCode = epdepcou.No,
DepartmentName = epdepcou.Name,
HandleModeID = ep.HandleModeID,
ExecuteStatus = ep.RecordStatus,
Remark = ep.Remark,
RecordStatus = ep.RecordStatus,
CreateUserID = ep.CreateUserID,
CreateTime = ep.CreateTime,
ModifyUserID = ep.ModifyUserID,
ModifyTime = ep.ModifyTime
};
return query;
}
///
/// 查询年级专业对应的各在校状态学生信息
///
///
///
///
public IQueryable GetGradeMajorStudentViewQueryAble(Expression> expGrademajor, Expression> expStudent)
{
var query = from gr in GrademajorRepository.GetList(expGrademajor)
join cl in ClassmajorRepository.Entities
on gr.GrademajorID equals cl.GrademajorID
join stu in StudentRepository.GetList(expStudent)
on cl.ClassmajorID equals stu.ClassmajorID
join us in UserRepository.Entities
on stu.UserID equals us.UserID
select new BaseStudentView
{
UserID = stu.UserID,
LoginID = us.LoginID,
UserName = us.Name,
SexID = stu.SexID,
IDNumber = stu.IDNumber,
InSchoolStatusID = stu.InSchoolStatusID,
StudentStatus = stu.StudentStatus,
SchoolyearID = gr.GradeID,
GrademajorID = cl.GrademajorID,
GrademajorCode = gr.Code,
GrademajorName = gr.Name,
ClassmajorID = stu.ClassmajorID,
ClassmajorCode = cl.No,
ClassmajorName = cl.Name
};
return query;
}
}
}