using System; using System.Collections.Generic; using System.Linq; using System.Text; using EMIS.DataLogic.Common.Specialtymanage; using EMIS.Entities; using Bowin.Common.Linq; using Bowin.Common.Linq.Entity; using EMIS.ViewModel.Specialtymanage; using EMIS.ViewModel; using System.Text.RegularExpressions; using Bowin.Common.Utility; using EMIS.ViewModel.Cache; using EMIS.Utility; using System.Linq.Expressions; namespace EMIS.CommonLogic.Specialtymanage { public class SpecialtyServices : BaseServices, ISpecialtyServices { public SpecialtyDAL SpecialtyDAL { get; set; } /// /// 查询对应的专业信息View /// /// /// /// /// /// /// /// /// /// /// /// public IGridResultSet GetSpecialtyViewGrid(ConfiguretView configuretView, int? standardID, int? educationID, int? learningformID, string learnSystem, int? scienceclassID, int? propertyID, int? recordStatus, int pageIndex, int pageSize) { //专业信息 Expression> expSpecialty = (x => true); if (standardID.HasValue) { //专业ID(Value) expSpecialty = expSpecialty.And(x => x.StandardID == standardID); } if (educationID.HasValue) { //培养层次 expSpecialty = expSpecialty.And(x => x.EducationID == educationID); } if (learningformID.HasValue) { //学习形式 expSpecialty = expSpecialty.And(x => x.LearningformID == learningformID); } if (!string.IsNullOrEmpty(learnSystem) && learnSystem != "-1") { //学制 var LearnSystems = Convert.ToDecimal(learnSystem); expSpecialty = expSpecialty.And(x => x.LearnSystem == LearnSystems); } if (scienceclassID.HasValue) { //专业科类 expSpecialty = expSpecialty.And(x => x.ScienceclassID == scienceclassID); } if (propertyID.HasValue) { //专业属性 expSpecialty = expSpecialty.And(x => x.PropertyID == propertyID); } if (recordStatus.HasValue) { //启用状态 if (recordStatus.Value == (int)SYS_STATUS.USABLE) { expSpecialty = expSpecialty.And(x => x.RecordStatus > (int)SYS_STATUS.UNUSABLE); } if (recordStatus.Value == (int)SYS_STATUS.UNUSABLE) { expSpecialty = expSpecialty.And(x => x.RecordStatus <= (int)SYS_STATUS.UNUSABLE); } } var query = SpecialtyDAL.GetSpecialtyViewQueryable(expSpecialty); //查询条件 if (!string.IsNullOrEmpty(configuretView.ConditionValue)) { //暂时不考虑 //string conditionValue = string.Empty; //Regex rg = new Regex(@"^[0-9]*$"); //if (rg.IsMatch(configuretView.ConditionValue)) //{ // conditionValue = Convert.ToInt32(configuretView.ConditionValue).ToString(); //} //else //{ // conditionValue = configuretView.ConditionValue; //} query = query.DynamicWhere(configuretView.Attribute, configuretView.Condition, configuretView.ConditionValue.Trim()); } return query.OrderBy(x => x.StandardName).ThenBy(x => x.EducationID) .ThenBy(x => x.LearningformID).ThenBy(x => x.LearnSystem) .ToGridResultSet(pageIndex, pageSize); } /// /// 查询对应的专业信息List /// /// /// /// /// /// /// /// /// /// public IList GetSpecialtyViewList(ConfiguretView configuretView, int? standardID, int? educationID, int? learningformID, string learnSystem, int? scienceclassID, int? propertyID, int? recordStatus) { //专业信息 Expression> expSpecialty = (x => true); if (standardID.HasValue) { //专业ID(Value) expSpecialty = expSpecialty.And(x => x.StandardID == standardID); } if (educationID.HasValue) { //培养层次 expSpecialty = expSpecialty.And(x => x.EducationID == educationID); } if (learningformID.HasValue) { //学习形式 expSpecialty = expSpecialty.And(x => x.LearningformID == learningformID); } if (!string.IsNullOrEmpty(learnSystem) && learnSystem != "-1") { //学制 var LearnSystems = Convert.ToDecimal(learnSystem); expSpecialty = expSpecialty.And(x => x.LearnSystem == LearnSystems); } if (scienceclassID.HasValue) { //专业科类 expSpecialty = expSpecialty.And(x => x.ScienceclassID == scienceclassID); } if (propertyID.HasValue) { //专业属性 expSpecialty = expSpecialty.And(x => x.PropertyID == propertyID); } if (recordStatus.HasValue) { //启用状态 if (recordStatus.Value == (int)SYS_STATUS.USABLE) { expSpecialty = expSpecialty.And(x => x.RecordStatus > (int)SYS_STATUS.UNUSABLE); } if (recordStatus.Value == (int)SYS_STATUS.UNUSABLE) { expSpecialty = expSpecialty.And(x => x.RecordStatus <= (int)SYS_STATUS.UNUSABLE); } } var query = SpecialtyDAL.GetSpecialtyViewQueryable(expSpecialty); //查询条件 if (!string.IsNullOrEmpty(configuretView.ConditionValue)) { //暂时不考虑 //string conditionValue = string.Empty; //Regex rg = new Regex(@"^[0-9]*$"); //if (rg.IsMatch(configuretView.ConditionValue)) //{ // conditionValue = Convert.ToInt32(configuretView.ConditionValue).ToString(); //} //else //{ // conditionValue = configuretView.ConditionValue; //} query = query.DynamicWhere(configuretView.Attribute, configuretView.Condition, configuretView.ConditionValue.Trim()); } return query.OrderBy(x => x.StandardName).ThenBy(x => x.EducationID) .ThenBy(x => x.LearningformID).ThenBy(x => x.LearnSystem) .ToList(); } /// /// 查询对应的专业信息(字典) /// /// /// /// /// /// public IGridResultSet GetStandardView(int? standardID, string standardName, int pageIndex, int pageSize) { var query = SpecialtyDAL.DictionaryItemRepository .GetList(x => x.DictionaryCode == EMIS.ViewModel.DictionaryItem.CF_Standard.ToString()); if (standardID.HasValue) { //专业ID(Value) query = query.Where(x => x.Value == standardID); } if (!string.IsNullOrEmpty(standardName) && standardName != "-1") { //专业名称 query = query.Where(x => x.Name == standardName); } return query.OrderBy(x => x.Name) .ToGridResultSet(pageIndex, pageSize); } /// /// 查询专业信息中学制信息SpecialtyView /// /// /// /// /// /// public IGridResultSet GetLearnSystemViewList(ConfiguretView configuretView, string learnSystem, int pageIndex, int pageSize) { var query = SpecialtyDAL.GetLearnSystemQueryable(x => true); if (!string.IsNullOrEmpty(learnSystem) && learnSystem != "") { var LearnSystems = Convert.ToDecimal(learnSystem); query = query.Where(x => x.LearnSystem == LearnSystems); } if (!string.IsNullOrEmpty(configuretView.ConditionValue)) { var learn = Convert.ToDecimal(configuretView.ConditionValue); query = query.Where(x => x.LearnSystem == learn); } return query.OrderBy(x => x.LearnSystem) .ToGridResultSet(pageIndex, pageSize); } /// /// 查询对应的专业信息(只查询启用状态的信息) /// /// /// /// /// public IGridResultSet GetSpecialtyIDViewList(ConfiguretView configuretView, int pageIndex, int pageSize) { var query = SpecialtyDAL.GetSpecialtyViewQueryable(x => x.RecordStatus > (int)SYS_STATUS.UNUSABLE); //查询条件 if (!string.IsNullOrEmpty(configuretView.ConditionValue)) { query = query.DynamicWhere(configuretView.Attribute, configuretView.Condition, configuretView.ConditionValue.Trim()); } return query.OrderBy(x => x.StandardName).ThenBy(x => x.EducationID) .ThenBy(x => x.LearningformID).ThenBy(x => x.LearnSystem) .ToGridResultSet(pageIndex, pageSize); } /// /// 根据专业信息ID查询对应的专业信息CF_Specialty /// /// /// public CF_Specialty GetSpecialtyInfo(Guid? specialtyID) { try { var query = SpecialtyDAL.SpecialtyRepository .GetList(x => x.SpecialtyID == specialtyID).SingleOrDefault(); return query; } catch (Exception ex) { throw new Exception(ex.Message); } } /// /// 根据专业信息ID查询对应的专业信息SpecialtyView /// /// /// public SpecialtyView GetSpecialtyView(Guid? specialtyID) { try { var query = SpecialtyDAL.GetSpecialtyViewQueryable(x => x.SpecialtyID == specialtyID) .SingleOrDefault(); return query; } catch (Exception ex) { throw new Exception(ex.Message); } } /// /// 编辑(新增、修改,业务主键:专业ID、培养层次、学习形式、学制) /// /// public void SpecialtyEdit(SpecialtyView specialtyView) { try { //查询数据库进行验证 var specialtyVerification = SpecialtyDAL.SpecialtyRepository .GetList(x => x.SpecialtyID != specialtyView.SpecialtyID && x.StandardID == specialtyView.StandardID && x.EducationID == specialtyView.EducationID && x.LearningformID == specialtyView.LearningformID && x.LearnSystem == specialtyView.LearnSystem ).SingleOrDefault(); if (specialtyVerification == null) { //数据有误验证 if (specialtyView.SpecialtyID != Guid.Empty) { var specialty = SpecialtyDAL.SpecialtyRepository .GetList(x => x.SpecialtyID == specialtyView.SpecialtyID) .SingleOrDefault(); if (specialty == null) { throw new Exception("数据有误,请核查"); } else { //表示修改 specialty.StandardID = specialtyView.StandardID; specialty.EducationID = specialtyView.EducationID; specialty.LearningformID = specialtyView.LearningformID; specialty.LearnSystem = specialtyView.LearnSystem; specialty.ScienceclassID = specialtyView.ScienceclassID; specialty.PropertyID = specialtyView.PropertyID; specialty.StandardTitle = specialtyView.StandardTitle; specialty.StandardLevel = specialtyView.StandardLevel; specialty.Remark = specialtyView.Remark; specialty.RecordStatus = specialtyView.RecordStatus; SetModifyStatus(specialty); } } else { //表示新增 CF_Specialty specialty = new CF_Specialty(); specialty.SpecialtyID = Guid.NewGuid(); specialty.StandardID = specialtyView.StandardID; specialty.EducationID = specialtyView.EducationID; specialty.LearningformID = specialtyView.LearningformID; specialty.LearnSystem = specialtyView.LearnSystem; specialty.ScienceclassID = specialtyView.ScienceclassID; specialty.PropertyID = specialtyView.PropertyID; specialty.StandardTitle = specialtyView.StandardTitle; specialty.StandardLevel = specialtyView.StandardLevel; specialty.Remark = specialtyView.Remark; SetNewStatus(specialty, specialtyView.RecordStatus.Value); UnitOfWork.Add(specialty); } } else { throw new Exception("已存在相同的专业信息(专业ID、" + RSL.Get("EducationID") + "、学习形式、学制唯一),请核查"); } //事务提交 UnitOfWork.Commit(); } catch (Exception ex) { throw new Exception(ex.Message); } } /// /// 删除 /// /// /// public bool SpecialtyDelete(List specialtyIDList) { try { UnitOfWork.Delete(x => specialtyIDList.Contains(x.SpecialtyID)); UnitOfWork.Commit(); return true; } catch (Exception) { throw; } } /// /// Excel导入 /// /// /// /// /// /// /// public void SpecialtyImport(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 = new Regex(@"^[0-9]+([.]{1}[0-9]+){0,1}$"); //学制字段正则表达式() inCount = 0; //导入个数 upCount = 0; //更新个数 errCount = 0; //失败个数 string errorMsgStr = ""; //错误信息 List specialtyInList = new List(); //专业信息insert实体List List specialtyUpList = new List(); //专业信息update实体List //循环检测数据列,对各数据列进行验证(必填、字典项验证、数据格式等) for (int i = 0; i < enlist.Count; i++) { SpecialtyView en = enlist[i]; //Excel表数据视图 CF_Specialty specialty = new CF_Specialty(); //专业信息实体 //专业代码 if (string.IsNullOrEmpty(en.StandardCode)) { errCount++; errorMsgStr = "专业代码不能为空"; en.ErrorMessage = errorMsgStr; errList.Add(en); errorMsg.AppendLine(errorMsgStr); continue; } else { if (!IdNameExt.GetDictionaryItem(DictionaryItem.CF_Standard.ToString()) .Any(x => x.Code == en.StandardCode.Trim())) { errCount++; errorMsgStr = "专业代码不存在,请检查"; en.ErrorMessage = errorMsgStr; errList.Add(en); errorMsg.AppendLine(errorMsgStr); continue; } else { //专业代码 } } //专业名称 if (string.IsNullOrEmpty(en.StandardName)) { errCount++; errorMsgStr = "专业名称不能为空"; en.ErrorMessage = errorMsgStr; errList.Add(en); errorMsg.AppendLine(errorMsgStr); continue; } else { if (!IdNameExt.GetDictionaryItem(DictionaryItem.CF_Standard.ToString()) .Any(x => x.Name == en.StandardName.Trim())) { errCount++; errorMsgStr = "专业名称不存在,请检查"; en.ErrorMessage = errorMsgStr; errList.Add(en); errorMsg.AppendLine(errorMsgStr); continue; } else { //专业名称 } } //专业代码与专业名称查询专业ID(Value) if (string.IsNullOrEmpty(en.StandardCode) || string.IsNullOrEmpty(en.StandardName)) { errCount++; errorMsgStr = "专业代码或专业名称不能为空"; en.ErrorMessage = errorMsgStr; errList.Add(en); errorMsg.AppendLine(errorMsgStr); continue; } else { var standard = IdNameExt.GetDictionaryItem(DictionaryItem.CF_Standard.ToString()) .Where(x => x.Code == en.StandardCode.Trim() && x.Name == en.StandardName.Trim()) .SingleOrDefault(); if (standard == null) { errCount++; errorMsgStr = "专业代码与专业名称对应的元素值不存在,请检查"; en.ErrorMessage = errorMsgStr; errList.Add(en); errorMsg.AppendLine(errorMsgStr); continue; } else { specialty.StandardID = standard.Value; } } //培养层次(所修学历) if (string.IsNullOrEmpty(en.EducationStr)) { errCount++; errorMsgStr = RSL.Get("EducationID") + "不能为空"; en.ErrorMessage = errorMsgStr; errList.Add(en); errorMsg.AppendLine(errorMsgStr); continue; } else { if (!IdNameExt.GetDictionaryItem(DictionaryItem.CF_Education.ToString()) .Any(x => x.Name == en.EducationStr.Trim())) { errCount++; errorMsgStr = RSL.Get("EducationID") + "不存在,请检查"; en.ErrorMessage = errorMsgStr; errList.Add(en); errorMsg.AppendLine(errorMsgStr); continue; } else { specialty.EducationID = IdNameExt.GetDictionaryItem(DictionaryItem.CF_Education.ToString()) .Where(x => x.Name == en.EducationStr.Trim()).FirstOrDefault().Value; } } //学习形式 if (string.IsNullOrEmpty(en.LearningformStr)) { errCount++; errorMsgStr = "学习形式不能为空"; en.ErrorMessage = errorMsgStr; errList.Add(en); errorMsg.AppendLine(errorMsgStr); continue; } else { if (!IdNameExt.GetDictionaryItem(DictionaryItem.CF_Learningform.ToString()) .Any(x => x.Name == en.LearningformStr.Trim())) { errCount++; errorMsgStr = "学习形式不存在,请检查"; en.ErrorMessage = errorMsgStr; errList.Add(en); errorMsg.AppendLine(errorMsgStr); continue; } else { specialty.LearningformID = IdNameExt.GetDictionaryItem(DictionaryItem.CF_Learningform.ToString()) .Where(x => x.Name == en.LearningformStr.Trim()).FirstOrDefault().Value; } } //学制 if (string.IsNullOrEmpty(en.LearnSystemStr)) { errCount++; errorMsgStr = "学制不能为空"; en.ErrorMessage = errorMsgStr; errList.Add(en); errorMsg.AppendLine(errorMsgStr); continue; } else { if (!reg.IsMatch(en.LearnSystemStr)) { errCount++; errorMsgStr = "学制格式不正确,请检查"; en.ErrorMessage = errorMsgStr; errList.Add(en); errorMsg.AppendLine(errorMsgStr); continue; } else { specialty.LearnSystem = Convert.ToDecimal(en.LearnSystemStr); } } //专业科类 if (!string.IsNullOrEmpty(en.ScienceclassStr)) { if (!IdNameExt.GetDictionaryItem(DictionaryItem.CF_Scienceclass.ToString()) .Any(x => x.Name == en.ScienceclassStr.Trim())) { errCount++; errorMsgStr = "专业科类不存在,请检查"; en.ErrorMessage = errorMsgStr; errList.Add(en); errorMsg.AppendLine(errorMsgStr); continue; } else { specialty.ScienceclassID = IdNameExt.GetDictionaryItem(DictionaryItem.CF_Scienceclass.ToString()) .Where(x => x.Name == en.ScienceclassStr.Trim()).FirstOrDefault().Value; } } //专业属性 if (!string.IsNullOrEmpty(en.PropertyStr)) { if (!IdNameExt.GetDictionaryItem(DictionaryItem.CF_Property.ToString()) .Any(x => x.Name == en.PropertyStr.Trim())) { errCount++; errorMsgStr = "专业属性不存在,请检查"; en.ErrorMessage = errorMsgStr; errList.Add(en); errorMsg.AppendLine(errorMsgStr); continue; } else { specialty.PropertyID = IdNameExt.GetDictionaryItem(DictionaryItem.CF_Property.ToString()) .Where(x => x.Name == en.PropertyStr.Trim()).FirstOrDefault().Value; } } //专业称号 if (!string.IsNullOrEmpty(en.StandardTitleStr)) { if (!IdNameExt.GetDictionaryItem(DictionaryItem.CF_StandardTitle.ToString()) .Any(x => x.Name == en.StandardTitleStr.Trim())) { errCount++; errorMsgStr = "专业称号不存在,请检查"; en.ErrorMessage = errorMsgStr; errList.Add(en); errorMsg.AppendLine(errorMsgStr); continue; } else { specialty.StandardTitle = IdNameExt.GetDictionaryItem(DictionaryItem.CF_StandardTitle.ToString()) .Where(x => x.Name == en.StandardTitleStr.Trim()).FirstOrDefault().Value; } } //称号级别 if (!string.IsNullOrEmpty(en.StandardLevelStr)) { if (!IdNameExt.GetDictionaryItem(DictionaryItem.CF_StandardLevel.ToString()) .Any(x => x.Name == en.StandardLevelStr.Trim())) { errCount++; errorMsgStr = "称号级别不存在,请检查"; en.ErrorMessage = errorMsgStr; errList.Add(en); errorMsg.AppendLine(errorMsgStr); continue; } else { specialty.StandardLevel = IdNameExt.GetDictionaryItem(DictionaryItem.CF_StandardLevel.ToString()) .Where(x => x.Name == en.StandardLevelStr.Trim()).FirstOrDefault().Value; } } //备注 specialty.Remark = en.Remark; ////Excel表重复性验证(注:当数据表中没有此记录,但是Excel中有重复数据时的去掉) //for (int j = i + 1; j < enlist.Count; j++) //{ // SpecialtyView enA = enlist[j]; // //根据Excel表中的业务主键进行去重(专业代码、专业名称、培养层次(所修学历)、学习形式、学制唯一) // if (en.InitStandardCode == enA.InitStandardCode && en.StandardName == enA.StandardName && en.LearnSystemStr == enA.LearnSystemStr // && en.EducationStr == enA.EducationStr && en.LearningformStr == enA.LearningformStr) // { // //用于标识Excel表中的重复记录(由于是批量进行插入数据表) // } //} //数据表重复性验证(专业ID(Value)、培养层次(所修学历)、学习形式、学制唯一) var specialtyEnetey = SpecialtyDAL.SpecialtyRepository .GetList(x => x.StandardID == specialty.StandardID && x.EducationID == specialty.EducationID && x.LearningformID == specialty.LearningformID && x.LearnSystem == specialty.LearnSystem) .SingleOrDefault(); if (specialtyEnetey == null) { //新增 if (!specialtyInList.Any(x => x.StandardID == specialty.StandardID && x.EducationID == specialty.EducationID && x.LearningformID == specialty.LearningformID && x.LearnSystem == specialty.LearnSystem)) { specialty.SpecialtyID = Guid.NewGuid(); SetNewStatus(specialty, (int)SYS_STATUS.USABLE); //默认启用状态 specialtyInList.Add(specialty); inCount++; } else { //Excel表重复性验证 //(注:当数据表中没有此记录,但是Excel中有重复数据,可在此处进行抛出到失败数据文件中,目前暂不考虑) inCount++; } } else { //更新(Excel有重复时,以最后一条记录的更新为准) specialtyEnetey.ScienceclassID = specialty.ScienceclassID; specialtyEnetey.PropertyID = specialty.PropertyID; specialtyEnetey.StandardTitle = specialty.StandardTitle; specialtyEnetey.StandardLevel = specialty.StandardLevel; specialtyEnetey.Remark = specialty.Remark; SetModifyStatus(specialtyEnetey); specialtyUpList.Add(specialtyEnetey); upCount++; } } UnitOfWork.BulkInsert(specialtyInList); //批量插入 //批量统一提交更新 if (specialtyUpList != null && specialtyUpList.Count() > 0) { UnitOfWork.BatchUpdate(specialtyUpList); //批量更新 } errdataList = errList.Distinct().ToList(); //错误列表List } catch (Exception ex) { //目前会出现,由于错误信息字符太长,无法抛出弹出框的问题 throw new Exception(ex.Message); } } } }