using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using EMIS.DataLogic.Repositories;
using EMIS.ViewModel.TeachingMaterial;
using System.Linq.Expressions;
using EMIS.Entities;
using EMIS.ViewModel;
using EMIS.DataLogic.CultureplanManage.PlanManagement;
using Bowin.Common.Linq;
using EMIS.DataLogic.SystemDAL;
using EMIS.Utility;
using EMIS.DataLogic.StudentManage.StudentStatistics;
namespace EMIS.DataLogic.Common.TeachingMaterial
{
public class StudentsOrderDAL
{
public StudentsOrderRepository StudentsOrderRepository { get; set; }
public TeachingMaterialPoolRepository TeachingMaterialPoolRepository { get; set; }
public SchoolyearRepository SchoolyearRepository { get; set; }
public UserRepository UserRepository { get; set; }
public CoursematerialRepository CoursematerialRepository { get; set; }
public SpecialtyPlanRepository SpecialtyPlanRepository { get; set; }
public CollegeRepository CollegeRepository { get; set; }
public DictionaryItemRepository DictionaryItemRepository { get; set; }
public GrademajorRepository GrademajorRepository { get; set; }
public FacultymajorRepository FacultymajorRepository { get; set; }
public SpecialtyCourseRepository SpecialtyCourseRepository { get; set; }
public ClassmajorRepository ClassmajorRepository { get; set; }
public PublishRepository PublishRepository { get; set; }
public StaffRepository StaffRepository { get; set; }
public DataRangeDAL DataRangeDAL { get; set; }
public InSchoolSettingDAL InSchoolSettingDAL { get; set; }
///
/// 获取学生征订信息列表
///
///
///
public IQueryable GetStudentsOrderGridView(Expression> exporder)
{
var inSchoolStatusIDList = InSchoolSettingDAL.InSchoolSettingRepository.GetList(x => x.IsSelected == true).Select(w => w.InSchoolStatusID).ToList();//获取选中的在校设定状态、
var view = (from sp in SpecialtyPlanRepository.GetList(x => true, (x => x.ET_StudentsOrder.Select(w => w.CF_TeachingMaterialPool)))
join so in StudentsOrderRepository.GetList(exporder) on sp.SpecialtyPlanID equals so.SpecialtyPlanID
join u in UserRepository.Entities on so.CreateUserID equals u.UserID
join fdi in DictionaryItemRepository.Entities on new { sp.CF_Grademajor.CF_Facultymajor.StandardID, DictionaryCode = DictionaryItem.CF_Standard.ToString() }
equals new { StandardID = fdi.Value, fdi.DictionaryCode } into tfdi
from cfdi in tfdi.DefaultIfEmpty()
join sct in DictionaryItemRepository.Entities on new { sp.CourseCategoryID, DictionaryCode = DictionaryItem.CF_CourseCategory.ToString() }
equals new { CourseCategoryID = sct.Value, sct.DictionaryCode } into tsct
from csct in tsct.DefaultIfEmpty()
join sctt in DictionaryItemRepository.Entities on new { sp.CourseTypeID, DictionaryCode = DictionaryItem.CF_CourseType.ToString() }
equals new { CourseTypeID = sctt.Value, sctt.DictionaryCode } into tsctt
from csctt in tsctt.DefaultIfEmpty()
join scq in DictionaryItemRepository.Entities on new { sp.CourseQualityID, DictionaryCode = DictionaryItem.CF_CourseQuality.ToString() }
equals new { CourseQualityID = scq.Value, scq.DictionaryCode } into tscq
from cscq in tscq.DefaultIfEmpty()
select new StudentsOrderView
{
// StudentsOrderID = so.StudentsOrderID,
SpecialtyPlanID = so.SpecialtyPlanID,
SchoolyearID = sp.CF_Schoolyear.SchoolyearID,
SchoolyearCode = sp.CF_Schoolyear.Code,
CollegeID = sp.CF_Grademajor.CF_Facultymajor.CF_College.CollegeID,
CollegeName = sp.CF_Grademajor.CF_Facultymajor.CF_College.Name,
CollegeNo = sp.CF_Grademajor.CF_Facultymajor.CF_College.No,
Years = sp.CF_Grademajor.GradeID,
GradeID = sp.CF_Grademajor.GradeID,
GrademajorCode = sp.CF_Grademajor.Code,
GrademajorName = sp.CF_Grademajor.Name,
GrademajorID = sp.GrademajorID,
StandardID = sp.CF_Grademajor.CF_Facultymajor.StandardID,
StandardName = cfdi.Name,
//ClassNum = so.OrderQty,
ClassNum = sp.CF_Grademajor.CF_Classmajor.Sum(x => x.CF_Student.Where(e => inSchoolStatusIDList.Contains(e.InSchoolStatusID)).Count()),//修改学生人数查询
OrderQty = so.OrderQty,
CourseCode = sp.EM_Coursematerial.CourseCode,
CourseName = sp.EM_Coursematerial.CourseName,
CourseCategoryID = sp.CourseCategoryID,
CourseCategoryName = csct.Name,
CourseTypeID = sp.CourseTypeID,
CourseTypeName = csctt.Name,
CourseQualityID = sp.CourseQualityID,
CourseQualityName = cscq.Name,
PreIncreaseQty = so.PreIncreaseQty == null ? 0 : so.PreIncreaseQty,
CampusID = sp.CF_Grademajor.CF_Facultymajor.CF_College.CampusID,
IsOrdered = so.IsOrdered,
IsOrderedName = so.IsOrdered == true ? "是" : "否",
TeachingMaterialPoolID = so.TeachingMaterialPoolID,
CoursematerialID = sp.CoursematerialID,
CF_TeachingMaterialPool = so.CF_TeachingMaterialPool,
CreateTime = so.CreateTime,
CreateUserNo = u.LoginID,
CreateUserName = u.Name,
Count = so.OrderQty + (so.PreIncreaseQty == null ? 0 : so.PreIncreaseQty)
});
return view.GroupBy(x => x.SpecialtyPlanID).Select(x => x.FirstOrDefault());
}
///
/// 教材信息
///
///
///
public IQueryable GetSpecialtyPlanTeachingMaterPoolView(Expression> exp, Expression> expSp)
{
var view = (from so in StudentsOrderRepository.GetList(exp)
join sp in SpecialtyPlanRepository.GetList(expSp)
on so.SpecialtyPlanID equals sp.SpecialtyPlanID
select new SpecialtyPlanTeachingMaterPoolView
{
TeachingMaterialCode = so.CF_TeachingMaterialPool.TeachingMaterialCode,
TeachingMaterialName = so.CF_TeachingMaterialPool.TeachingMaterialName,
SpecialtyPlanID = so.SpecialtyPlanID
});
return view;
}
public IList GetStudentsOrderIDsBySpecialtyPlan(Guid schoolyearID)
{
var planList = (from sd in StudentsOrderRepository.Entities.Where(x => x.IsOrdered == false && x.TeachingMaterialPoolID == null)
join sy in SchoolyearRepository.Entities.Where(x => x.SchoolyearID == schoolyearID) on sd.EM_SpecialtyPlan.SchoolyearID equals sy.SchoolyearID
select new StudentOrderPrePlanView
{
SpecialtyPlanID = sd.SpecialtyPlanID
});
return planList.ToList();
}
public IList GetSpecialtyPlanBySchool(Guid schoolyearID)
{
var planList = from s in SpecialtyPlanRepository.Entities.Where(x => x.SchoolyearID == schoolyearID)
select new StudentOrderPrePlanView
{
SpecialtyPlanID = s.SpecialtyPlanID
};
return planList.ToList();
}
///
/// 获取专业计划对应的需要征订的信息
///
///
///
public IQueryable GetStudentsOrderBySpecialtyPlan(Guid schoolyearID)
{
var inSchoolStatusIDList = InSchoolSettingDAL.InSchoolSettingRepository.GetList(x => x.IsSelected == true).Select(w => w.InSchoolStatusID).ToList();//获取选中的在校设定状态、
#region 0.0 废弃
//var planList = (from sp in SpecialtyPlanRepository.Entities.Where(x => x.IsNeedMaterial == true)
// join sy in SchoolyearRepository.Entities.Where(x => x.SchoolyearID == schoolyearID) on sp.SchoolyearID equals sy.SchoolyearID
// join gj in GrademajorRepository.Entities on sp.GrademajorID equals gj.GrademajorID
// join sc in SpecialtyCourseRepository.Entities on sp.SpecialtyCourseID equals sc.SpecialtyCourseID
// join cj in ClassmajorRepository.Entities on gj.GrademajorID equals cj.GrademajorID into tcj
// from ccj in tcj.DefaultIfEmpty()
// join tlpv in
// (
// from tlp in
// (
// from gtlp in TeachingMaterialPoolRepository.Entities.Where(x => x.IsLate != true)
// group gtlp by gtlp.CoursematerialID into g
// select new { CoursematerialID = g.Key, MaxDate = g.Max(x => x.CreateTime) }
// )
// join tlpo in TeachingMaterialPoolRepository.Entities.Where(x => x.IsLate != true)
// on new { tlp.CoursematerialID, tlp.MaxDate } equals new { tlpo.CoursematerialID, MaxDate = tlpo.CreateTime }
// select tlpo
// ) on sc.CoursematerialID equals tlpv.CoursematerialID into ttlpv
// from ctlpv in ttlpv.DefaultIfEmpty()
// join so in StudentsOrderRepository.Entities on sp.SpecialtyPlanID equals so.SpecialtyPlanID into tso
// from cso in tso.DefaultIfEmpty()
// where cso == null // || cso.IsOrdered==true //如果已经提交征订、那么可以再次征订
// group new { sp, sd = ccj.CF_Student, ctlpv }
// by new { sp.SpecialtyPlanID, ctlpv.TeachingMaterialPoolID } into g
// select new StudentOrderPrePlanView
// {
// SpecialtyPlanID = g.Key.SpecialtyPlanID,
// OrderQty = g.Sum(x => x.sd.Count),
// TeachingMaterialPoolID = g.Key.TeachingMaterialPoolID
// });
//var planListinfo = planList;
//return planList.ToList(); ;
#endregion
// var curUser = EMIS.Utility.FormValidate.CustomPrincipal.Current;
Expression> exp = x => x.IsNeedMaterial == true;
var planList = (from sp in SpecialtyPlanRepository.GetList(exp)
join sy in SchoolyearRepository.Entities.Where(x => x.SchoolyearID == schoolyearID) on sp.SchoolyearID equals sy.SchoolyearID
join gj in GrademajorRepository.Entities on sp.GrademajorID equals gj.GrademajorID
join cj in ClassmajorRepository.Entities on sp.GrademajorID equals cj.GrademajorID into tcj
from ccj in tcj.DefaultIfEmpty()
from ctlpv in sp.EM_Coursematerial.CF_TeachingMaterialPool.Where(x => x.IsLate == false).DefaultIfEmpty()//只获取没过期的教材
join so in StudentsOrderRepository.Entities on sp.SpecialtyPlanID equals so.SpecialtyPlanID into tso
from cso in tso.DefaultIfEmpty()
where cso == null
group new { sp, ccj, ctlpv }
by new { sp.SpecialtyPlanID, ctlpv.TeachingMaterialPoolID, sp.CF_Grademajor.CF_Facultymajor.CollegeID } into g
select new StudentOrderPrePlanView
{
CollegeID = g.Key.CollegeID,
SpecialtyPlanID = g.Key.SpecialtyPlanID,
OrderQty = g.Sum(x => x.ccj.CF_Student.Where(e => inSchoolStatusIDList.Contains(e.InSchoolStatusID)).Count()),//只获取在校学生
TeachingMaterialPoolID = g.Key.TeachingMaterialPoolID
});
return planList;
}
///
/// 根据征订ID获取征订数据
///
///
///
public IList GetStudentsOrderListByStudentsOrderIDs(List studentsOrderIDs)
{
return StudentsOrderRepository.GetList(x => studentsOrderIDs.Contains(x.StudentsOrderID)).ToList();
}
///
/// 学生征订统计
///
///
///
public IQueryable GetStudentsOrderStatisticalView(Expression> exporder)
{
var view = (from so in StudentsOrderRepository.GetList(exporder)
join sp in SpecialtyPlanRepository.Entities on so.SpecialtyPlanID equals sp.SpecialtyPlanID
join sy in SchoolyearRepository.Entities on sp.SchoolyearID equals sy.SchoolyearID
join gj in GrademajorRepository.Entities on sp.GrademajorID equals gj.GrademajorID
join fj in FacultymajorRepository.Entities on gj.FacultymajorID equals fj.FacultymajorID
join co in CollegeRepository.Entities on fj.CollegeID equals co.CollegeID
join cos in CoursematerialRepository.Entities on sp.CoursematerialID equals cos.CoursematerialID
join u in UserRepository.Entities on so.CreateUserID equals u.UserID
join tmp in TeachingMaterialPoolRepository.Entities on so.TeachingMaterialPoolID equals tmp.TeachingMaterialPoolID
into teps
from Tep in teps.DefaultIfEmpty()
join p in PublishRepository.Entities on Tep.PublishID equals p.PublishID
into TepPublish
from pb in TepPublish.DefaultIfEmpty()
join cj in ClassmajorRepository.Entities on gj.GrademajorID equals cj.GrademajorID into tcj
from ccj in tcj.DefaultIfEmpty()
select new StudentsOrderDataReportView
{
SchoolyearID = sy.SchoolyearID,
SchoolyearCode = sy.Code,
CollegeID = co.CollegeID,
CollegeName = co.Name,
GrademajorCode = gj.Code,
GrademajorName = gj.Name,
GrademajorID = gj.GrademajorID,
GradeID = gj.GradeID,
SpecialtyValue = gj.CF_Facultymajor.StandardID,
ClassNum = so.OrderQty,
OrderQty = so.OrderQty,
PreIncreaseQty = so.PreIncreaseQty,
CourseCode = cos.CourseCode,
CourseName = cos.CourseName,
CampusID = co.CampusID,
CoursematerialID = cos.CoursematerialID,
TeachingMaterialCode = Tep.TeachingMaterialCode,
TeachingMaterialName = Tep.TeachingMaterialName,
Author = Tep.Author,
ISBN = Tep.ISBN,
TeachingMaterialPoolID = Tep.TeachingMaterialPoolID,
PublishName = pb.UnitName,
PublishTime = Tep.PublishTime,
PublishID = Tep.PublishID,
CreateTime = so.CreateTime,
CreateUserName = u.Name,
IsOrdered = so.IsOrdered,
Price = Tep.Price ?? 0,
Years = sp.CF_Grademajor.GradeID,
TeachingMaterialTypeID = Tep.TeachingMaterialTypeID ?? 0,
CourseCategory = sp.CourseCategoryID,
Count = so.OrderQty + (so.PreIncreaseQty == null ? 0 : so.PreIncreaseQty)
});
return view.Distinct();
}
}
}