示例#1
0
        /// <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
        }
示例#2
0
        /// <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);
                            }
                        }
                    }
                }
            }
        }
示例#3
0
        /// <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();
        }