/// <summary> /// 异常处理 /// </summary> /// <param name="entity"></param> /// <param name="prop"></param> /// <param name="headDto"></param> /// <param name="ex"></param> private void EntityPropertyErrorSet(TEntity entity, PropertyInfo prop, ExcelHeadDTO headDto, Exception ex) { #region 异常处理 //获取属性转换异常信息 string convertErrorMsg = ConvertErrorAttributeHelper <TEntity> .GetPropertyConvertErrorInfo(prop.Name); if (string.IsNullOrEmpty(convertErrorMsg) == true) { convertErrorMsg = ex.Message; } //设置异常信息 ColumnErrorMessage errorMsg = new ColumnErrorMessage { PropertyName = prop.Name, ErrorMessage = convertErrorMsg, ColumnName = headDto.HeadName }; entity.ColumnErrorMessage.Add(errorMsg); #endregion }
/// <summary> /// 动态列验证 /// </summary> /// <param name="excelGlobalDTO"></param> /// <param name="validationModelEnum"></param> public static void ValidationValue(ExcelGlobalDTO <TEntity> excelGlobalDTO, ValidationModelEnum validationModelEnum = ValidationModelEnum.ConfigColumn) { //为空判断 if (excelGlobalDTO == null || excelGlobalDTO.Sheets == null) { return; } //遍历Sheet实体集合 foreach (var sheet in excelGlobalDTO.Sheets) { //获取Sheet头部实体集合 var headDtoList = sheet.SheetHeadList; foreach (var item in sheet.SheetEntityList) { //获取列的设置信息 List <ColumnModel> columnList = null; if (validationModelEnum == ValidationModelEnum.ConfigColumn) { columnList = sheet.ColumnConfig; } else { columnList = System.Activator.CreateInstance <TEntity>().GetDynamicColumns(); } //当为空的时候跳出,场景: if (columnList == null) { continue; } foreach (var config in columnList) { //Excel获取的动态列 ColumnModel columnModel = item.OtherColumns.Where(n => n.ColumnName == config.ColumnName).FirstOrDefault(); #region 类型校验 try { switch (config.ColumnType) { case ColumnTypeEnum.Decimal: Convert.ToDecimal(columnModel.ColumnValue); break; case ColumnTypeEnum.Date: Convert.ToDateTime(columnModel.ColumnValue); break; case ColumnTypeEnum.DateTime: Convert.ToDateTime(columnModel.ColumnValue); break; } } catch (Exception ex) { //异常信息 ColumnErrorMessage errorMsg = new ColumnErrorMessage() { ColumnName = config.ColumnName }; if (config.ColumnConvertError != null) { errorMsg.ErrorMessage = config.ColumnConvertError.ErrorMessage; } else { errorMsg.ErrorMessage = ex.Message; } //添加至集合 item.ColumnErrorMessage.Add(errorMsg); } #endregion if (config.ColumnValidations == null) { continue; } //遍历列校验 foreach (ColumnValidationModel validation in config.ColumnValidations) { //是否有错误 bool isError = true; string errorMessage = null; switch (validation.ValidationTypeEnum) { //必填校验 case ValidationTypeEnum.Required: isError = string.IsNullOrEmpty(columnModel.ColumnValue) ? true : false; errorMessage = validation.RequiredAttribute.ErrorMessage; break; //长度校验 case ValidationTypeEnum.Length: isError = columnModel.ColumnValue?.Length > validation.LengthAttribute?.Length ? true : false; errorMessage = validation.LengthAttribute.ErrorMessage; break; //范围校验 case ValidationTypeEnum.Range: errorMessage = validation.RangeAttribute.ErrorMessage; RangeAttributeValidation <TEntity> rangeAttributeValidation = new RangeAttributeValidation <TEntity>(); isError = rangeAttributeValidation.CheckIsError(validation.RangeAttribute, columnModel.ColumnValue); break; //格式校验 case ValidationTypeEnum.Format: #region 格式校验 errorMessage = validation.FormatAttribute.ErrorMessage; FormatAttributeValidation <TEntity> formatAttributeValidation = new FormatAttributeValidation <TEntity>(); isError = formatAttributeValidation.CheckIsError(validation.FormatAttribute, columnModel.ColumnValue); #endregion break; } //是否有异常 if (isError == true) { //异常信息 ColumnErrorMessage errorMsg = new ColumnErrorMessage() { ColumnName = columnModel.ColumnName, ErrorMessage = errorMessage }; //添加至集合 item.ColumnErrorMessage.Add(errorMsg); } } } } } }
/// <summary> /// 验证内容 /// </summary> public virtual void ValidationValue() { //遍历Sheet实体集合 foreach (var sheet in ExcelGlobalDTO.Sheets) { //获取Sheet头部实体集合 var headDtoList = sheet.SheetHeadList; //为空判断 if (sheet.SheetEntityList == null) { continue; } var pairs = new ConcurrentDictionary <int, List <ValidationResult> >(); var parallelOptions = MultiThreadingHelper.GetParallelOptions(); Parallel.ForEach(sheet.SheetEntityList, parallelOptions, entity => { pairs.TryAdd(entity.RowNumber, ValidationHelper.Exec <TEntity>(entity)); }); foreach (var item in sheet.SheetEntityList) { #region 项值校验 //校验文本框的值是否在下拉框选项中 foreach (var headDto in headDtoList) { #region 基础判断 //判断是否为选项列 if (headDto.ColumnType != Attribute.Enum.ColumnTypeEnum.Option) { continue; } //判断选项是否存在 if (sheet.ColumnOptions == null) { continue; } //判断属性是否存在 if (string.IsNullOrEmpty(headDto.PropertyName)) { continue; } #endregion //其他列的键值 string key = null; #region 获其他列的键值 if (sheet.ColumnOptions.Keys.Contains(headDto.HeadName)) { key = headDto.HeadName; } if (sheet.ColumnOptions.Keys.Contains(headDto.PropertyName)) { key = headDto.PropertyName; } //判断键是否为空 if (key == null) { continue; } #endregion //变量设置 PropertyInfo propertyInfo = item.GetType().GetProperty(headDto.PropertyName); string value = propertyInfo.GetValue(item).ToString(); #region 校验 //类型判断decimal if (propertyInfo.PropertyType == typeof(decimal) || propertyInfo.PropertyType == typeof(decimal?)) { List <decimal> options = sheet.ColumnOptions[key].Select(n => Convert.ToDecimal(n)).ToList(); if (options.Contains(Convert.ToDecimal(value)) == true) { continue; } } //类型判断double if (propertyInfo.PropertyType == typeof(double) || propertyInfo.PropertyType == typeof(double?)) { List <double> options = sheet.ColumnOptions[key].Select(n => Convert.ToDouble(n)).ToList(); if (options.Contains(Convert.ToDouble(value)) == true) { continue; } } //判断输入的值是否在选项值中 if (sheet.ColumnOptions[key].Contains(value) == true) { continue; } #endregion #region 通过则提示异常 //异常信息 ColumnErrorMessage errorMsg = new ColumnErrorMessage { PropertyName = headDto.PropertyName, ColumnName = headDto.HeadName, ErrorMessage = ExcelGlobalDTO.ExcelValidationMessage.Clgyl_Common_Import_NotExistOptions }; item.ColumnErrorMessage.Add(errorMsg); #endregion } #endregion #region 实体特性验证 List <ValidationResult> result = pairs[item.RowNumber]; if (result == null) { continue; } foreach (var msg in result) { //异常信息 ColumnErrorMessage errorMsg = new ColumnErrorMessage { PropertyName = msg.PropertyName, ErrorMessage = msg.ErrorMessage }; //设置列信息 var headDto = headDtoList.Where(w => w.PropertyName == msg.PropertyName).FirstOrDefault(); if (headDto != null) { errorMsg.ColumnName = headDto.HeadName; } //添加至集合 item.ColumnErrorMessage.Add(errorMsg); } #endregion } } //动态列验证 DynamicColumn <TEntity> .ValidationValue(ExcelGlobalDTO, ValidationModelEnum.DynamicColumn); //验证值后 this.ValidationValueAfter(); }