using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Bowin.Common.Linq.Entity;
using Bowin.Common.Linq;
using EMIS.DataLogic.DegreeManage.DegreeSetting;
using EMIS.ViewModel;
using EMIS.ViewModel.DegreeManage.DegreeSetting;
using System.Linq.Expressions;
using EMIS.Entities;
namespace EMIS.CommonLogic.DegreeManage.DegreeSetting
{
public class DegreeConditionPackageServices : BaseServices, IDegreeConditionPackageServices
{
public DegreeConditionPackageDAL DegreeConditionPackageDAL { get; set; }
///
/// 查询对应的学位公式信息View(只查询学位公式信息,不查询学位公式对应的学位条件)
///
///
///
///
///
///
public IGridResultSet GetDegreeConditionPackageViewGrid(ConfiguretView configuretView,
int? isDefault, int pageIndex, int pageSize)
{
//学位公式
Expression> exp = (x => true);
if (isDefault.HasValue)
{
if (isDefault == 1)
{
exp = exp.And(x => x.IsDefault.Value == true);
}
if (isDefault == 0)
{
exp = exp.And(x => x.IsDefault.Value != true);
}
}
var query = DegreeConditionPackageDAL.GetDegreeConditionPackageViewQueryable(exp);
//查询条件
if (!string.IsNullOrEmpty(configuretView.ConditionValue))
{
query = query.DynamicWhere(configuretView.Attribute, configuretView.Condition, configuretView.ConditionValue.Trim());
}
return query.OrderByDescending(x => x.Title).ThenBy(x => x.IsDefault)
.ToGridResultSet(pageIndex, pageSize);
}
///
/// 查询对应的学位公式信息List
///
///
///
///
public List GetDegreeConditionPackageViewList(ConfiguretView configuretView, int? isDefault)
{
//学位公式
Expression> exp = (x => true);
if (isDefault.HasValue)
{
if (isDefault == 1)
{
exp = exp.And(x => x.IsDefault.Value == true);
}
if (isDefault == 0)
{
exp = exp.And(x => x.IsDefault.Value != true);
}
}
var query = DegreeConditionPackageDAL.GetDegreeConditionPackageViewQueryable(exp);
//查询条件
if (!string.IsNullOrEmpty(configuretView.ConditionValue))
{
query = query.DynamicWhere(configuretView.Attribute, configuretView.Condition, configuretView.ConditionValue.Trim());
}
return query.OrderByDescending(x => x.Title).ThenBy(x => x.IsDefault).ToList();
}
///
/// 根据学位公式ID查询对应的学位公式信息DegreeConditionPackageView
///
///
///
public DegreeConditionPackageView GetDegreeConditionPackageView(Guid? DegreeConditionPackageID)
{
try
{
var query = DegreeConditionPackageDAL
.GetDegreeConditionPackageViewQueryable(x => x.DegreeConditionPackageID == DegreeConditionPackageID)
.SingleOrDefault();
return query;
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
///
/// 根据学位公式ID查询对应的学位条件信息List
///
///
///
public List GetDegreeConditionList(Guid? DegreeConditionPackageID)
{
var query = DegreeConditionPackageDAL
.GetDegreeConditionQueryable(x => x.DegreeConditionPackageID == DegreeConditionPackageID);
return query.OrderBy(x => x.OrderNo).ToList();
}
///
/// 查询学位公式中未存在的学位条件信息View
///
///
///
///
///
///
///
public IGridResultSet GetDegreeConditionNoViewGrid(ConfiguretView configuretView,
Guid? degreeConditionPackageID, int? isCurrent, int pageIndex, int pageSize)
{
//学位条件
Expression> expDegreeCondition = (x => true);
if (isCurrent.HasValue)
{
if (isCurrent == 1)
{
expDegreeCondition = expDegreeCondition.And(x => x.RecordStatus >= (int)SYS_STATUS.USABLE);
}
if (isCurrent == 0)
{
expDegreeCondition = expDegreeCondition.And(x => x.RecordStatus <= (int)SYS_STATUS.UNUSABLE);
}
}
var query = DegreeConditionPackageDAL.GetDegreeConditionNoQueryable(expDegreeCondition, degreeConditionPackageID);
//查询条件
if (!string.IsNullOrEmpty(configuretView.ConditionValue))
{
query = query.DynamicWhere(configuretView.Attribute, configuretView.Condition, configuretView.ConditionValue.Trim());
}
return query.OrderBy(x => x.OrderNo).ToGridResultSet(pageIndex, pageSize);
}
///
/// 查询学位公式中未存在的学位条件信息List
///
///
///
///
public IList GetDegreeConditionNoViewList(ConfiguretView configuretView,
Guid? degreeConditionPackageID, int? isCurrent)
{
//学位条件
Expression> expDegreeCondition = (x => true);
if (isCurrent.HasValue)
{
if (isCurrent == 1)
{
expDegreeCondition = expDegreeCondition.And(x => x.RecordStatus >= (int)SYS_STATUS.USABLE);
}
if (isCurrent == 0)
{
expDegreeCondition = expDegreeCondition.And(x => x.RecordStatus <= (int)SYS_STATUS.UNUSABLE);
}
}
var query = DegreeConditionPackageDAL.GetDegreeConditionNoQueryable(expDegreeCondition, degreeConditionPackageID);
//查询条件
if (!string.IsNullOrEmpty(configuretView.ConditionValue))
{
query = query.DynamicWhere(configuretView.Attribute, configuretView.Condition, configuretView.ConditionValue.Trim());
}
return query.OrderBy(x => x.OrderNo).ToList();
}
///
/// 编辑(新增、修改)
/// 注:判断是否默认状态(同一种学生类别,只有一种默认公式)
/// 暂时不考虑当公式被引用时,不可修改公式中条件的情况
///
///
///
public void DegreeConditionPackageEdit(DegreeConditionPackageView degreeConditionPackageView,
IList degreeConditionViewList)
{
try
{
//查询数据库进行验证
var degreeConditionPackageVerification = DegreeConditionPackageDAL.DegreeConditionPackageRepository
.GetList(x => x.DegreeConditionPackageID != degreeConditionPackageView.DegreeConditionPackageID
&& x.Title == degreeConditionPackageView.Title)
.SingleOrDefault();
//列表页面对应的学位条件IDList
var degreeConditionIDList = degreeConditionViewList.Select(x => x.DegreeConditionID).ToList();
//列表页面对应的学位条件信息List
var degreeConditionList = DegreeConditionPackageDAL.DegreeConditionRepository
.GetList(x => degreeConditionIDList.Contains(x.DegreeConditionID)).ToList();
if (degreeConditionPackageVerification == null)
{
//数据有误验证
if (degreeConditionPackageView.DegreeConditionPackageID != Guid.Empty)
{
var degreeConditionPackage = DegreeConditionPackageDAL.DegreeConditionPackageRepository
.GetList(x => x.DegreeConditionPackageID == degreeConditionPackageView.DegreeConditionPackageID)
.SingleOrDefault();
if (degreeConditionPackage == null)
{
throw new Exception("数据有误,请核查");
}
else
{
//表示修改
////注:当学位申请、学位审核、学位名单中有引用相关的学位公式时,不可对相应的学位公式进行修改--是否默认列除外
////根据学位公式查询对应的学位申请、学位审核、学位名单信息(外键引用)
//var degreeApplyList = DegreeConditionPackageDAL.DegreeApplyRepository
// .GetList(x => x.DegreeConditionPackageID == degreeConditionPackageView.DegreeConditionPackageID).ToList();
//判断是否默认状态(同一种学生类别,只能启用一种默认公式)
if (degreeConditionPackageView.IsDefault)
{
var degreeConditionPackageList = DegreeConditionPackageDAL
.DegreeConditionPackageRepository
.GetList(x => x.StudentType == degreeConditionPackageView.StudentTypeID && x.IsDefault.Value
&& x.DegreeConditionPackageID != degreeConditionPackageView.DegreeConditionPackageID)
.ToList();
degreeConditionPackageList.ForEach(x => x.IsDefault = false);
}
degreeConditionPackage.Title = degreeConditionPackageView.Title;
degreeConditionPackage.StudentType = degreeConditionPackageView.StudentTypeID;
degreeConditionPackage.IsDefault = degreeConditionPackageView.IsDefault;
SetModifyStatus(degreeConditionPackage);
////查询学位公式对应的学位条件信息
//var degreeConditionList = DegreeConditionPackageDAL
// .GetDegreeConditionQueryable(x => x.DegreeConditionPackageID == degreeConditionPackageView.DegreeConditionPackageID)
// .ToList();
////查询学位公式对应的学位条件IDList
//var degreeConditionIDList = degreeConditionList.Select(x => x.DegreeConditionID).ToList();
////先删除学位公式对应的全部学位条件信息,再对选择的学位条件进行新增
//degreeConditionPackage.ER_DegreeCondition
// .RemoveWhere(x => degreeConditionIDList.Contains(x.DegreeConditionID));
//物理删除(暂时将上述逻辑删除代码注释)
UnitOfWork.Delete(degreeConditionPackage, (x => x.ER_DegreeCondition));
//对应的学位条件
if (degreeConditionViewList != null && degreeConditionViewList.Count() > 0)
{
foreach (var degreeCondition in degreeConditionList)
{
degreeConditionPackage.ER_DegreeCondition.Add(degreeCondition);
}
}
}
}
else
{
//表示新增
//判断是否默认状态(同一种学生类别,只能启用一种默认公式)
if (degreeConditionPackageView.IsDefault)
{
var degreeConditionPackageList = DegreeConditionPackageDAL
.DegreeConditionPackageRepository
.GetList(x => x.StudentType == degreeConditionPackageView.StudentTypeID && x.IsDefault.Value)
.ToList();
degreeConditionPackageList.ForEach(x => x.IsDefault = false);
}
ER_DegreeConditionPackage degreeConditionPackage = new ER_DegreeConditionPackage();
degreeConditionPackage.DegreeConditionPackageID = Guid.NewGuid();
degreeConditionPackage.Title = degreeConditionPackageView.Title;
degreeConditionPackage.StudentType = degreeConditionPackageView.StudentTypeID;
degreeConditionPackage.IsDefault = degreeConditionPackageView.IsDefault;
SetNewStatus(degreeConditionPackage);
UnitOfWork.Add(degreeConditionPackage);
//对应的学位条件
if (degreeConditionViewList != null && degreeConditionViewList.Count() > 0)
{
foreach (var degreeCondition in degreeConditionList)
{
degreeConditionPackage.ER_DegreeCondition.Add(degreeCondition);
}
}
}
//事务提交
UnitOfWork.Commit();
}
else
{
throw new Exception("已存在相同的学位公式,请核查");
}
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
///
/// 删除(当对应的学位公式被引用时,不可删除--学位公式、对应的学位条件)
///
///
///
public bool DegreeConditionPackageDelete(List DegreeConditionPackageIDList)
{
try
{
//根据学位公式查询对应的学位申请、学位审核、学位名单信息(外键引用)
var degreeApplyList = DegreeConditionPackageDAL.DegreeApplyRepository
.GetList(x => DegreeConditionPackageIDList.Contains(x.DegreeConditionPackageID)).ToList();
if (degreeApplyList != null && degreeApplyList.Count() > 0)
{
throw new Exception("存在与其有关联的数据,如:学位申请、学位审核、学位名单等");
}
//查询相应的学位公式及对应的学位条件信息List
var degreeConditionPackageList = DegreeConditionPackageDAL.DegreeConditionPackageRepository
.GetList(x => DegreeConditionPackageIDList.Contains(x.DegreeConditionPackageID), x => x.ER_DegreeCondition)
.ToList();
foreach (var degreeConditionPackage in degreeConditionPackageList)
{
//物理删除
UnitOfWork.Delete(degreeConditionPackage, (x => x.ER_DegreeCondition));
UnitOfWork.Delete(x => x.DegreeConditionPackageID == degreeConditionPackage.DegreeConditionPackageID);
}
UnitOfWork.Commit();
return true;
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
///
/// 根据学生类别查询对应的默认学位公式信息View(DegreeConditionPackageView)
///
///
///
public DegreeConditionPackageView GetDegreeConditionPackageIsDefaultView(int? studentType)
{
try
{
//学位公式
Expression> exp = (x => true);
exp = exp.And(x => x.IsDefault.Value == true);
exp = exp.And(x => x.StudentType == studentType);
var degreeConditionPackageView = DegreeConditionPackageDAL
.GetDegreeConditionPackageViewQueryable(exp).SingleOrDefault();
return degreeConditionPackageView;
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
}
}