using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using System.Text.RegularExpressions;
using System.Transactions;
using Bowin.Common.Utility;
using Bowin.Common.Linq;
using Bowin.Common.Linq.Entity;
using EMIS.Utility;
using EMIS.Entities;
using EMIS.ViewModel;
using EMIS.ViewModel.CacheManage;
using EMIS.ViewModel.EnrollManage.SpecialtyManage;
using EMIS.DataLogic.EnrollManage.SpecialtyManage;
namespace EMIS.CommonLogic.EnrollManage.SpecialtyManage
{
public class CustomStandardSettingServices : BaseServices, ICustomStandardSettingServices
{
public CustomStandardSettingDAL customStandardSettingDAL { get; set; }
///
/// 查询对应的省招专业信息View
///
///
///
///
///
///
///
///
///
///
///
///
///
public IGridResultSet GetCustomStandardSettingViewGrid(ConfiguretView configuretView, Guid? campusID, Guid? collegeID, int? yearID,
int? standardID, int? educationID, int? learningformID, string learnSystem, int? semesterID, int pageIndex, int pageSize)
{
Expression> exp = (x => x.RecordStatus > (int)SYS_STATUS.UNUSABLE);
if (collegeID.HasValue)
{
exp = exp.And(x => x.CollegeID == collegeID);
}
if (yearID.HasValue)
{
exp = exp.And(x => x.YearID == yearID);
}
if (semesterID.HasValue)
{
exp = exp.And(x => x.SemesterID == semesterID);
}
var query = customStandardSettingDAL.GetCustomStandardSettingViewQueryable(exp);
if (campusID.HasValue)
{
query = query.Where(x => x.CampusID == campusID);
}
if (standardID.HasValue)
{
query = query.Where(x => x.StandardID == standardID);
}
if (educationID.HasValue)
{
query = query.Where(x => x.EducationID == educationID);
}
if (learningformID.HasValue)
{
query = query.Where(x => x.LearningformID == learningformID);
}
if (!string.IsNullOrEmpty(learnSystem) && learnSystem != "-1")
{
var LearnSystems = Convert.ToDecimal(learnSystem);
query = query.Where(x => x.LearnSystem == LearnSystems);
}
//查询条件
if (!string.IsNullOrEmpty(configuretView.ConditionValue))
{
query = query.DynamicWhere(configuretView.Attribute, configuretView.Condition, configuretView.ConditionValue.Trim());
}
return this.GetQueryByDataRangeByCollege(query).OrderBy(x => x.CollegeCode.Length).ThenBy(x => x.CollegeCode).ThenByDescending(x => x.YearID)
.ThenBy(x => x.StandardName).ThenBy(x => x.EducationID).ThenBy(x => x.LearningformID).ThenBy(x => x.LearnSystem).ToGridResultSet(pageIndex, pageSize);
}
///
/// 查询对应的省招专业信息List
///
///
///
///
///
///
///
///
///
///
///
public IList GetCustomStandardSettingViewList(ConfiguretView configuretView, Guid? campusID, Guid? collegeID, int? yearID,
int? standardID, int? educationID, int? learningformID, string learnSystem, int? semesterID)
{
Expression> exp = (x => x.RecordStatus > (int)SYS_STATUS.UNUSABLE);
if (collegeID.HasValue)
{
exp = exp.And(x => x.CollegeID == collegeID);
}
if (yearID.HasValue)
{
exp = exp.And(x => x.YearID == yearID);
}
if (semesterID.HasValue)
{
exp = exp.And(x => x.SemesterID == semesterID);
}
var query = customStandardSettingDAL.GetCustomStandardSettingViewQueryable(exp);
if (campusID.HasValue)
{
query = query.Where(x => x.CampusID == campusID);
}
if (standardID.HasValue)
{
query = query.Where(x => x.StandardID == standardID);
}
if (educationID.HasValue)
{
query = query.Where(x => x.EducationID == educationID);
}
if (learningformID.HasValue)
{
query = query.Where(x => x.LearningformID == learningformID);
}
if (!string.IsNullOrEmpty(learnSystem) && learnSystem != "-1")
{
var LearnSystems = Convert.ToDecimal(learnSystem);
query = query.Where(x => x.LearnSystem == LearnSystems);
}
//查询条件
if (!string.IsNullOrEmpty(configuretView.ConditionValue))
{
query = query.DynamicWhere(configuretView.Attribute, configuretView.Condition, configuretView.ConditionValue.Trim());
}
return this.GetQueryByDataRangeByCollege(query).OrderBy(x => x.CollegeCode.Length).ThenBy(x => x.CollegeCode).ThenByDescending(x => x.YearID)
.ThenBy(x => x.StandardName).ThenBy(x => x.EducationID).ThenBy(x => x.LearningformID).ThenBy(x => x.LearnSystem).ToList();
}
///
/// 查询对应的省招专业信息CustomStandardSettingView
///
///
///
public CustomStandardSettingView GetCustomStandardSettingView(Guid? customStandardSettingID)
{
try
{
var query = customStandardSettingDAL.GetCustomStandardSettingViewQueryable(x => x.CustomStandardSettingID == customStandardSettingID).SingleOrDefault();
return query;
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
///
/// 编辑(新增、修改,业务主键:省招代码或学年、学期、院系所、专业信息ID唯一)
///
///
public void CustomStandardSettingEdit(CustomStandardSettingView customStandardSettingView)
{
try
{
var customStandardSettingVerification = customStandardSettingDAL.customStandardSettingRepository.GetList(x => x.CustomStandardSettingID != customStandardSettingView.CustomStandardSettingID
&& ((x.YearID == customStandardSettingView.YearID && x.SemesterID == customStandardSettingView.SemesterID
&& x.CollegeID == customStandardSettingView.CollegeID && x.SpecialtyID == customStandardSettingView.SpecialtyID)
|| (x.Code == customStandardSettingView.Code))).FirstOrDefault();
if (customStandardSettingVerification == null)
{
//数据有误验证
if (customStandardSettingView.CustomStandardSettingID != Guid.Empty)
{
var customStandardSetting = customStandardSettingDAL.customStandardSettingRepository
.GetList(x => x.CustomStandardSettingID == customStandardSettingView.CustomStandardSettingID).SingleOrDefault();
if (customStandardSetting == null)
{
throw new Exception("数据有误,请核查。");
}
else
{
//表示修改
customStandardSetting.Code = customStandardSettingView.Code;
customStandardSetting.SpecialtyID = customStandardSettingView.SpecialtyID;
customStandardSetting.CollegeID = customStandardSettingView.CollegeID;
customStandardSetting.YearID = customStandardSettingView.YearID;
customStandardSetting.SemesterID = customStandardSettingView.SemesterID;
customStandardSetting.Remark = customStandardSettingView.Remark;
SetModifyStatus(customStandardSetting);
}
}
else
{
//表示新增
CF_CustomStandardSetting customStandardSetting = new CF_CustomStandardSetting();
customStandardSetting.CustomStandardSettingID = Guid.NewGuid();
customStandardSetting.Code = customStandardSettingView.Code;
customStandardSetting.SpecialtyID = customStandardSettingView.SpecialtyID;
customStandardSetting.CollegeID = customStandardSettingView.CollegeID;
customStandardSetting.YearID = customStandardSettingView.YearID;
customStandardSetting.SemesterID = customStandardSettingView.SemesterID;
customStandardSetting.Remark = customStandardSettingView.Remark;
SetNewStatus(customStandardSetting);
UnitOfWork.Add(customStandardSetting);
}
}
else
{
throw new Exception("存在相同的省招专业信息(省招代码唯一或学年、学期、" + RSL.Get("CollegeName") + "专业信息唯一)。");
}
//事务提交
UnitOfWork.Commit();
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
///
/// 删除
///
///
///
public bool CustomStandardSettingDelete(List customStandardSettingIDList)
{
try
{
UnitOfWork.Delete(x => customStandardSettingIDList.Contains(x.CustomStandardSettingID));
return true;
}
catch (Exception)
{
throw;
}
}
///
/// Excel导入
///
///
///
///
///
///
///
public void CustomStandardSettingImport(Dictionary cellheader, out int? inCount, out int? upCount, out List errdataList, out int? errCount, string sourcePhysicalPath)
{
try
{
StringBuilder errorMsg = new StringBuilder(); // 错误信息
List errList = new List();
// 1.1解析文件,存放到一个List集合里
cellheader.Remove("ErrorMessage");//移除“未导入原因”列(ErrorMessage)
List enlist = NpoiExcelHelper.ExcelToEntityList(cellheader, sourcePhysicalPath, out errorMsg, out errList);
cellheader.Add("ErrorMessage", "未导入原因");
//对List集合进行有效性校验
if (enlist.Count() <= 0)
{
throw new Exception("Excel文件数据为空,请检查。");
}
Regex reg = null; //正则表达式
inCount = 0; //导入个数
upCount = 0; //更新个数
errCount = 0; //失败个数
string errorMsgStr = ""; //错误信息
//省招专业insert实体List
List customStandardSettingInList = new List();
//省招专业update实体List
List customStandardSettingUpList = new List();
//将循环中相关数据库查询统一查询出来进行匹配(尽量避免在循环中进行数据库查询)
//省招代码
var codeList = enlist.Where(x => !string.IsNullOrEmpty(x.Code)).Select(x => x.Code).ToList();
//省招专业(由于需要和Excel中数据进行比对,数据太多就会报异常,所以需要先查询出来)
var customStandardSettingAllList = customStandardSettingDAL.customStandardSettingRepository.GetList(x => true).ToList();
//省招代码对比后的List(省招代码唯一)
var newCodeList = customStandardSettingAllList.Where(x => codeList.Contains(x.Code)).ToList();
//学年
var yearList = IdNameExt.GetDictionaryItem(DictionaryItem.CF_Year).ToList();
//学期
var semesterList = IdNameExt.GetDictionaryItem(DictionaryItem.CF_Semester).ToList();
//院系所代码
var collegeCodeList = enlist.Where(x => !string.IsNullOrEmpty(x.CollegeCode)).Select(x => x.CollegeCode).ToList();
//对应的院系所信息
var collegeList = customStandardSettingDAL.collegeRepository.GetList(x => collegeCodeList.Contains(x.No), x => x.CF_CollegeProfile).ToList();
//专业代码、专业名称、专业ID(Value)
var standardList = IdNameExt.GetDictionaryItem(DictionaryItem.CF_Standard).ToList();
//培养层次(所修学历)
var educationList = IdNameExt.GetDictionaryItem(DictionaryItem.CF_Education).ToList();
//学习形式
var learningFormList = IdNameExt.GetDictionaryItem(DictionaryItem.CF_Learningform).ToList();
//专业信息
var specialtyList = customStandardSettingDAL.specialtyRepository.GetList(x => true).ToList();
//循环检测数据列,对各数据列进行验证(必填、字典项验证、数据格式等)
for (int i = 0; i < enlist.Count; i++)
{
CustomStandardSettingView en = enlist[i]; //Excel表数据视图
CF_CustomStandardSetting newCustomStandardSetting = new CF_CustomStandardSetting(); //省招专业实体
//省招代码(唯一)
if (string.IsNullOrEmpty(en.Code))
{
errCount++;
errorMsgStr = "省招代码不能为空";
en.ErrorMessage = errorMsgStr;
errList.Add(en);
errorMsg.AppendLine(errorMsgStr);
continue;
}
else
{
reg = new Regex(@"^[0-9a-zA-Z\s?]+$"); //正则表达式(请输入数字或英文字母)
if (!reg.IsMatch(en.Code.Trim()))
{
errCount++;
errorMsgStr = "省招代码格式不正确,请检查";
en.ErrorMessage = errorMsgStr;
errList.Add(en);
errorMsg.AppendLine(errorMsgStr);
continue;
}
else
{
//省招代码
newCustomStandardSetting.Code = en.Code.Trim();
}
}
//学年
if (string.IsNullOrEmpty(en.YearStr))
{
errCount++;
errorMsgStr = "学年不能为空";
en.ErrorMessage = errorMsgStr;
errList.Add(en);
errorMsg.AppendLine(errorMsgStr);
continue;
}
else
{
var year = yearList.Where(x => x.Name == en.YearStr.Trim()).SingleOrDefault();
if (year == null)
{
errCount++;
errorMsgStr = "学年不存在,请检查";
en.ErrorMessage = errorMsgStr;
errList.Add(en);
errorMsg.AppendLine(errorMsgStr);
continue;
}
else
{
//学年
newCustomStandardSetting.YearID = year.Value;
}
}
//学期
if (string.IsNullOrEmpty(en.SemesterStr))
{
errCount++;
errorMsgStr = "学期不能为空";
en.ErrorMessage = errorMsgStr;
errList.Add(en);
errorMsg.AppendLine(errorMsgStr);
continue;
}
else
{
var semester = semesterList.Where(x => x.Name == en.SemesterStr.Trim()).SingleOrDefault();
if (semester == null)
{
errCount++;
errorMsgStr = "学期不存在,请检查";
en.ErrorMessage = errorMsgStr;
errList.Add(en);
errorMsg.AppendLine(errorMsgStr);
continue;
}
else
{
//学期
newCustomStandardSetting.SemesterID = semester.Value;
}
}
//院系所代码
if (string.IsNullOrEmpty(en.CollegeCode))
{
errCount++;
errorMsgStr = RSL.Get("CollegeCode") + "不能为空";
en.ErrorMessage = errorMsgStr;
errList.Add(en);
errorMsg.AppendLine(errorMsgStr);
continue;
}
else
{
var college = collegeList.Where(x => x.No == en.CollegeCode.Trim()).SingleOrDefault();
if (college == null)
{
errCount++;
errorMsgStr = RSL.Get("CollegeCode") + "不存在,请检查";
en.ErrorMessage = errorMsgStr;
errList.Add(en);
errorMsg.AppendLine(errorMsgStr);
continue;
}
else
{
if (college.CF_CollegeProfile == null)
{
errCount++;
errorMsgStr = RSL.Get("CollegeCode") + "所属的单位类别有误,请检查";
en.ErrorMessage = errorMsgStr;
errList.Add(en);
errorMsg.AppendLine(errorMsgStr);
continue;
}
else if (college.CF_CollegeProfile.UnitCategoryID != (int)CF_UnitCategory.College)
{
errCount++;
errorMsgStr = RSL.Get("CollegeCode") + "所属的单位类别有误,请检查";
en.ErrorMessage = errorMsgStr;
errList.Add(en);
errorMsg.AppendLine(errorMsgStr);
continue;
}
//院系所ID
newCustomStandardSetting.CollegeID = college.CollegeID;
}
}
//专业代码
if (string.IsNullOrEmpty(en.StandardCodeStr))
{
errCount++;
errorMsgStr = "专业代码不能为空";
en.ErrorMessage = errorMsgStr;
errList.Add(en);
errorMsg.AppendLine(errorMsgStr);
continue;
}
else
{
var standardCode = standardList.Where(x => x.Code == en.StandardCodeStr.Trim()).FirstOrDefault();
if (standardCode == null)
{
errCount++;
errorMsgStr = "专业代码不存在,请检查";
en.ErrorMessage = errorMsgStr;
errList.Add(en);
errorMsg.AppendLine(errorMsgStr);
continue;
}
else
{
//专业代码
}
}
//专业名称
if (string.IsNullOrEmpty(en.StandardNameStr))
{
errCount++;
errorMsgStr = "专业名称不能为空";
en.ErrorMessage = errorMsgStr;
errList.Add(en);
errorMsg.AppendLine(errorMsgStr);
continue;
}
else
{
var standardName = standardList.Where(x => x.Name == en.StandardNameStr.Trim()).FirstOrDefault();
if (standardName == null)
{
errCount++;
errorMsgStr = "专业名称不存在,请检查";
en.ErrorMessage = errorMsgStr;
errList.Add(en);
errorMsg.AppendLine(errorMsgStr);
continue;
}
else
{
//专业名称
}
}
//专业代码与专业名称查询专业ID(Value)
if (string.IsNullOrEmpty(en.StandardCodeStr.Trim()) || string.IsNullOrEmpty(en.StandardNameStr.Trim()))
{
errCount++;
errorMsgStr = "专业代码或专业名称不能为空";
en.ErrorMessage = errorMsgStr;
errList.Add(en);
errorMsg.AppendLine(errorMsgStr);
continue;
}
else
{
var standardID = standardList.Where(x => x.Code == en.StandardCodeStr.Trim() && x.Name == en.StandardNameStr.Trim()).SingleOrDefault();
if (standardID == null)
{
errCount++;
errorMsgStr = "专业代码与专业名称对应的元素值不存在,请检查";
en.ErrorMessage = errorMsgStr;
errList.Add(en);
errorMsg.AppendLine(errorMsgStr);
continue;
}
else
{
//专业ID(Value)
en.StandardID = standardID.Value;
}
}
//培养层次(所修学历)
if (string.IsNullOrEmpty(en.EducationStr))
{
errCount++;
errorMsgStr = RSL.Get("EducationID") + "不能为空";
en.ErrorMessage = errorMsgStr;
errList.Add(en);
errorMsg.AppendLine(errorMsgStr);
continue;
}
else
{
var education = educationList.Where(x => x.Name == en.EducationStr.Trim()).SingleOrDefault();
if (education == null)
{
errCount++;
errorMsgStr = RSL.Get("EducationID") + "不存在,请检查";
en.ErrorMessage = errorMsgStr;
errList.Add(en);
errorMsg.AppendLine(errorMsgStr);
continue;
}
else
{
//培养层次
en.EducationID = education.Value;
}
}
//学习形式
if (string.IsNullOrEmpty(en.LearningformStr))
{
errCount++;
errorMsgStr = "学习形式不能为空";
en.ErrorMessage = errorMsgStr;
errList.Add(en);
errorMsg.AppendLine(errorMsgStr);
continue;
}
else
{
var learningForm = learningFormList.Where(x => x.Name == en.LearningformStr.Trim()).SingleOrDefault();
if (learningForm == null)
{
errCount++;
errorMsgStr = "学习形式不存在,请检查";
en.ErrorMessage = errorMsgStr;
errList.Add(en);
errorMsg.AppendLine(errorMsgStr);
continue;
}
else
{
//学习形式
en.LearningformID = learningForm.Value;
}
}
//学制
if (string.IsNullOrEmpty(en.LearnSystemStr))
{
errCount++;
errorMsgStr = "学制不能为空";
en.ErrorMessage = errorMsgStr;
errList.Add(en);
errorMsg.AppendLine(errorMsgStr);
continue;
}
else
{
reg = new Regex(@"^[0-9]+([.]{1}[0-9]+){0,1}$"); //学制字段正则表达式()
if (!reg.IsMatch(en.LearnSystemStr.Trim()))
{
errCount++;
errorMsgStr = "学制格式不正确,请检查";
en.ErrorMessage = errorMsgStr;
errList.Add(en);
errorMsg.AppendLine(errorMsgStr);
continue;
}
else
{
//学制
en.LearnSystem = Convert.ToDecimal(en.LearnSystemStr);
}
}
//专业信息查询
var specialty = specialtyList.Where(x => x.StandardID == en.StandardID && x.EducationID == en.EducationID && x.LearningformID == en.LearningformID && x.LearnSystem == en.LearnSystem).SingleOrDefault();
//专业信息ID
if (specialty == null)
{
errCount++;
errorMsgStr = "专业信息不存在,请检查";
en.ErrorMessage = errorMsgStr;
errList.Add(en);
errorMsg.AppendLine(errorMsgStr);
continue;
}
else
{
//查询专业信息(启用、禁用状态)
if (specialty.RecordStatus > (int)SYS_STATUS.UNUSABLE)
{
newCustomStandardSetting.SpecialtyID = specialty.SpecialtyID;
}
else
{
newCustomStandardSetting.SpecialtyID = specialty.SpecialtyID;
errCount++;
errorMsgStr = "专业信息为禁用状态,请检查";
en.ErrorMessage = errorMsgStr;
errList.Add(en);
errorMsg.AppendLine(errorMsgStr);
continue;
}
}
//备注
if (string.IsNullOrEmpty(en.Remark))
{
//不考虑
}
else
{
newCustomStandardSetting.Remark = en.Remark;
}
////Excel表重复性验证(注:当数据表中没有此记录,但是Excel中有重复数据时的去掉)
//for (int j = i + 1; j < enlist.Count; j++)
//{
// CustomStandardSettingView enA = enlist[j];
// //根据Excel表中的业务主键进行去重(省招代码唯一或学年、学期、院系所ID、专业信息唯一)
// if (en.Code == enA.Code ||
// (
// en.YearStr == enA.YearStr
// && en.SemesterID == enA.SemesterID
// && en.CollegeCode == enA.CollegeCode
// && en.SpecialtyID == enA.SpecialtyID
// )
// )
// {
// //用于标识Excel表中的重复记录(由于是批量进行插入数据表)
// }
//}
//数据表重复性验证(省招代码唯一)
var codeVerification = newCodeList.Where(x => x.Code == newCustomStandardSetting.Code).FirstOrDefault();
if (codeVerification == null)
{
//Excel表重复验证
if (!customStandardSettingInList.Any(x => x.Code == newCustomStandardSetting.Code))
{
//数据表重复性验证(学年、学期、院系所ID、专业信息唯一)
var cusVerification = customStandardSettingAllList.Where(x => x.SpecialtyID == newCustomStandardSetting.SpecialtyID
&& x.CollegeID == newCustomStandardSetting.CollegeID && x.YearID == newCustomStandardSetting.YearID
&& x.SemesterID == newCustomStandardSetting.SemesterID).FirstOrDefault();
//新增
if (cusVerification == null)
{
//Excel表重复验证
if (!customStandardSettingInList.Any(x => x.YearID == newCustomStandardSetting.YearID
&& x.SemesterID == newCustomStandardSetting.SemesterID
&& x.CollegeID == newCustomStandardSetting.CollegeID
&& x.SpecialtyID == newCustomStandardSetting.SpecialtyID))
{
newCustomStandardSetting.CustomStandardSettingID = Guid.NewGuid();
SetNewStatus(newCustomStandardSetting);
customStandardSettingInList.Add(newCustomStandardSetting);
inCount++;
}
else
{
//Excel表重复性验证
//(注:当数据表中没有此记录,但是Excel中有重复数据,可在此处进行抛出到失败数据文件中,目前暂不考虑)
inCount++;
}
}
else
{
//更新(Excel有重复时,以最后一条记录的更新为准)
//cusVerification.Remark = newCustomStandardSetting.Remark;
//SetModifyStatus(cusVerification);
//customStandardSettingUpList.Add(cusVerification);
//upCount++;
//(此处暂时以抛出失败数据文件中的方式进行处理)
errCount++;
errorMsgStr = "导入失败,已存在相同学年、学期、" + RSL.Get("CollegeCode") + "、专业信息的数据(数据重复)";
en.ErrorMessage = errorMsgStr;
errList.Add(en);
errorMsg.AppendLine(errorMsgStr);
continue;
}
}
else
{
//Excel表重复性验证
//(注:当数据表中没有此记录,但是Excel中有重复数据,可在此处进行抛出到失败数据文件中,目前暂不考虑)
inCount++;
}
}
else
{
//更新(Excel有重复时,以最后一条记录的更新为准)
//codeVerification.Remark = newCustomStandardSetting.Remark;
//SetModifyStatus(codeVerification);
//customStandardSettingUpList.Add(codeVerification);
//upCount++;
//(此处暂时以抛出失败数据文件中的方式进行处理)
errCount++;
errorMsgStr = "导入失败,已存在相同的省招代码(数据重复)";
en.ErrorMessage = errorMsgStr;
errList.Add(en);
errorMsg.AppendLine(errorMsgStr);
continue;
}
}
using (TransactionScope ts = new TransactionScope())
{
if (customStandardSettingInList != null && customStandardSettingInList.Count() > 0)
{
UnitOfWork.BulkInsert(customStandardSettingInList);
}
if (customStandardSettingUpList != null && customStandardSettingUpList.Count() > 0)
{
UnitOfWork.BatchUpdate(customStandardSettingUpList);
}
ts.Complete();
}
errdataList = errList.Distinct().ToList(); //错误列表List
}
catch (Exception)
{
throw;
}
}
}
}