| @@ -5,11 +5,13 @@ EasyPoi Excel和 Word简易工具类 | |||
| 就可以方便的写出Excel导出,Excel模板导出,Excel导入,Word模板导出,通过简单的注解和模板 | |||
| 语言(熟悉的表达式语法),完成以前复杂的写法 | |||
| 作者博客:http://blog.csdn.net/qjueyue | |||
| 作者博客:http://blog.afterturn.cn/ | |||
| 作者邮箱: qrb.jueyue@gmail.com | |||
| QQ群: 364192721 | |||
| [测试项目](http://git.oschina.net/jueyue/easypoi-test): http://git.oschina.net/jueyue/easypoi-test | |||
| !!!2.1.6-SNAPSHOT 版本开始和之前的版本校验不兼用,使用hibernate的校验,删除了之前的注解,请注意 | |||
| --------------------------- | |||
| EasyPoi的主要特点 | |||
| @@ -1,94 +0,0 @@ | |||
| /** | |||
| * Copyright 2013-2015 JueYue (qrb.jueyue@gmail.com) | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| */ | |||
| package org.jeecgframework.poi.excel.annotation; | |||
| import java.lang.annotation.ElementType; | |||
| import java.lang.annotation.Retention; | |||
| import java.lang.annotation.RetentionPolicy; | |||
| import java.lang.annotation.Target; | |||
| /** | |||
| * Excel 导入校验 | |||
| * | |||
| * @author JueYue | |||
| * @date 2014年6月23日 下午10:46:26 | |||
| */ | |||
| @Retention(RetentionPolicy.RUNTIME) | |||
| @Target(ElementType.FIELD) | |||
| public @interface ExcelVerify { | |||
| /** | |||
| * 接口校验 | |||
| * @return | |||
| */ | |||
| public boolean interHandler() default false; | |||
| /** | |||
| * 是电子邮件 | |||
| * | |||
| * @return | |||
| */ | |||
| public boolean isEmail() default false; | |||
| /** | |||
| * 是13位移动电话 | |||
| * | |||
| * @return | |||
| */ | |||
| public boolean isMobile() default false; | |||
| /** | |||
| * 是座机号码 | |||
| * | |||
| * @return | |||
| */ | |||
| public boolean isTel() default false; | |||
| /** | |||
| * 最大长度 | |||
| * | |||
| * @return | |||
| */ | |||
| public int maxLength() default -1; | |||
| /** | |||
| * 最小长度 | |||
| * | |||
| * @return | |||
| */ | |||
| public int minLength() default -1; | |||
| /** | |||
| * 不允许空 | |||
| * | |||
| * @return | |||
| */ | |||
| public boolean notNull() default false; | |||
| /** | |||
| * 正在表达式 | |||
| * | |||
| * @return | |||
| */ | |||
| public String regex() default ""; | |||
| /** | |||
| * 正在表达式,错误提示信息 | |||
| * | |||
| * @return | |||
| */ | |||
| public String regexTip() default "数据不符合规范"; | |||
| } | |||
| @@ -70,6 +70,11 @@ | |||
| <artifactId>slf4j-api</artifactId> | |||
| </dependency> | |||
| <dependency> | |||
| <groupId>org.hibernate</groupId> | |||
| <artifactId>hibernate-validator</artifactId> | |||
| </dependency> | |||
| <dependency> | |||
| <groupId>org.jeecg</groupId> | |||
| <artifactId>easypoi-annotation</artifactId> | |||
| @@ -20,6 +20,7 @@ import java.io.FileInputStream; | |||
| import java.io.FileNotFoundException; | |||
| import java.io.IOException; | |||
| import org.apache.poi.util.IOUtils; | |||
| import org.jeecgframework.poi.util.PoiPublicUtil; | |||
| import org.slf4j.Logger; | |||
| import org.slf4j.LoggerFactory; | |||
| @@ -58,14 +59,8 @@ public class FileLoadeImpl implements IFileLoader { | |||
| } catch (IOException e) { | |||
| LOGGER.error(e.getMessage(), e); | |||
| } finally { | |||
| try { | |||
| if (fileis != null) | |||
| fileis.close(); | |||
| if (fileis != null) | |||
| baos.close(); | |||
| } catch (IOException e) { | |||
| LOGGER.error(e.getMessage(), e); | |||
| } | |||
| IOUtils.closeQuietly(fileis); | |||
| IOUtils.closeQuietly(baos); | |||
| } | |||
| LOGGER.error(fileis + "这个路径文件没有找到,请查询"); | |||
| return null; | |||
| @@ -33,7 +33,8 @@ import com.google.common.cache.LoadingCache; | |||
| * | |||
| * @author JueYue | |||
| * @date 2014年2月10日 | |||
| * @version 1.0 | |||
| * @date 2015年10月17日 | |||
| * @version 1.1 | |||
| */ | |||
| public final class POICacheManager { | |||
| @@ -24,6 +24,7 @@ import org.jeecgframework.poi.handler.inter.IExcelVerifyHandler; | |||
| * @date 2013-9-24 | |||
| * @version 1.0 | |||
| */ | |||
| @SuppressWarnings("rawtypes") | |||
| public class ImportParams extends ExcelBaseParams { | |||
| /** | |||
| * 表格标题行数,默认0 | |||
| @@ -53,6 +54,10 @@ public class ImportParams extends ExcelBaseParams { | |||
| * 是否需要保存上传的Excel,默认为false | |||
| */ | |||
| private boolean needSave = false; | |||
| /** | |||
| * 是否需要校验上传的Excel,默认为false | |||
| */ | |||
| private boolean needVerfiy = false; | |||
| /** | |||
| * 保存上传的Excel目录,默认是 如 TestEntity这个类保存路径就是 | |||
| * upload/excelUpload/Test/yyyyMMddHHmss_***** 保存名称上传时间_五位随机数 | |||
| @@ -147,4 +152,12 @@ public class ImportParams extends ExcelBaseParams { | |||
| this.startSheetIndex = startSheetIndex; | |||
| } | |||
| public boolean isNeedVerfiy() { | |||
| return needVerfiy; | |||
| } | |||
| public void setNeedVerfiy(boolean needVerfiy) { | |||
| this.needVerfiy = needVerfiy; | |||
| } | |||
| } | |||
| @@ -39,10 +39,6 @@ public class ExcelImportEntity extends ExcelBaseEntity { | |||
| * 对应exportType | |||
| */ | |||
| private String classType; | |||
| /** | |||
| * 校驗參數 | |||
| */ | |||
| private ExcelVerifyEntity verify; | |||
| /** | |||
| * 后缀 | |||
| */ | |||
| @@ -70,10 +66,6 @@ public class ExcelImportEntity extends ExcelBaseEntity { | |||
| return saveUrl; | |||
| } | |||
| public ExcelVerifyEntity getVerify() { | |||
| return verify; | |||
| } | |||
| public void setClassType(String classType) { | |||
| this.classType = classType; | |||
| } | |||
| @@ -94,10 +86,6 @@ public class ExcelImportEntity extends ExcelBaseEntity { | |||
| this.saveUrl = saveUrl; | |||
| } | |||
| public void setVerify(ExcelVerifyEntity verify) { | |||
| this.verify = verify; | |||
| } | |||
| public String getSuffix() { | |||
| return suffix; | |||
| } | |||
| @@ -1,159 +0,0 @@ | |||
| /** | |||
| * Copyright 2013-2015 JueYue (qrb.jueyue@gmail.com) | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| */ | |||
| package org.jeecgframework.poi.excel.entity.params; | |||
| /** | |||
| * Excel 校验对象 | |||
| * | |||
| * @author JueYue | |||
| * @date 2014年6月29日 下午4:24:59 | |||
| */ | |||
| public class ExcelVerifyEntity { | |||
| /** | |||
| * 接口校验 | |||
| * | |||
| * @return | |||
| */ | |||
| private boolean interHandler; | |||
| /** | |||
| * 不允许空 | |||
| * | |||
| * @return | |||
| */ | |||
| private boolean notNull; | |||
| /** | |||
| * 是13位移动电话 | |||
| * | |||
| * @return | |||
| */ | |||
| private boolean isMobile; | |||
| /** | |||
| * 是座机号码 | |||
| * | |||
| * @return | |||
| */ | |||
| private boolean isTel; | |||
| /** | |||
| * 是电子邮件 | |||
| * | |||
| * @return | |||
| */ | |||
| private boolean isEmail; | |||
| /** | |||
| * 最小长度 | |||
| * | |||
| * @return | |||
| */ | |||
| private int minLength; | |||
| /** | |||
| * 最大长度 | |||
| * | |||
| * @return | |||
| */ | |||
| private int maxLength; | |||
| /** | |||
| * 正在表达式 | |||
| * | |||
| * @return | |||
| */ | |||
| private String regex; | |||
| /** | |||
| * 正在表达式,错误提示信息 | |||
| * | |||
| * @return | |||
| */ | |||
| private String regexTip; | |||
| public int getMaxLength() { | |||
| return maxLength; | |||
| } | |||
| public int getMinLength() { | |||
| return minLength; | |||
| } | |||
| public String getRegex() { | |||
| return regex; | |||
| } | |||
| public String getRegexTip() { | |||
| return regexTip; | |||
| } | |||
| public boolean isEmail() { | |||
| return isEmail; | |||
| } | |||
| public boolean isInterHandler() { | |||
| return interHandler; | |||
| } | |||
| public boolean isMobile() { | |||
| return isMobile; | |||
| } | |||
| public boolean isNotNull() { | |||
| return notNull; | |||
| } | |||
| public boolean isTel() { | |||
| return isTel; | |||
| } | |||
| public void setEmail(boolean isEmail) { | |||
| this.isEmail = isEmail; | |||
| } | |||
| public void setInterHandler(boolean interHandler) { | |||
| this.interHandler = interHandler; | |||
| } | |||
| public void setMaxLength(int maxLength) { | |||
| this.maxLength = maxLength; | |||
| } | |||
| public void setMinLength(int minLength) { | |||
| this.minLength = minLength; | |||
| } | |||
| public void setMobile(boolean isMobile) { | |||
| this.isMobile = isMobile; | |||
| } | |||
| public void setNotNull(boolean notNull) { | |||
| this.notNull = notNull; | |||
| } | |||
| public void setRegex(String regex) { | |||
| this.regex = regex; | |||
| } | |||
| public void setRegexTip(String regexTip) { | |||
| this.regexTip = regexTip; | |||
| } | |||
| public void setTel(boolean isTel) { | |||
| this.isTel = isTel; | |||
| } | |||
| } | |||
| @@ -27,6 +27,12 @@ import java.util.HashMap; | |||
| import java.util.Iterator; | |||
| import java.util.List; | |||
| import java.util.Map; | |||
| import java.util.Set; | |||
| import javax.validation.ConstraintViolation; | |||
| import javax.validation.Validation; | |||
| import javax.validation.Validator; | |||
| import javax.validation.ValidatorFactory; | |||
| import org.apache.commons.lang3.StringUtils; | |||
| import org.apache.poi.POIXMLDocument; | |||
| @@ -51,9 +57,9 @@ import org.jeecgframework.poi.excel.entity.params.ExcelImportEntity; | |||
| import org.jeecgframework.poi.excel.entity.result.ExcelImportResult; | |||
| import org.jeecgframework.poi.excel.entity.result.ExcelVerifyHanlderResult; | |||
| import org.jeecgframework.poi.excel.imports.base.ImportBaseService; | |||
| import org.jeecgframework.poi.excel.imports.verifys.VerifyHandlerServer; | |||
| import org.jeecgframework.poi.exception.excel.ExcelImportException; | |||
| import org.jeecgframework.poi.exception.excel.enums.ExcelImportEnum; | |||
| import org.jeecgframework.poi.handler.inter.IExcelModel; | |||
| import org.jeecgframework.poi.util.PoiPublicUtil; | |||
| import org.jeecgframework.poi.util.PoiReflectorUtil; | |||
| import org.slf4j.Logger; | |||
| @@ -70,9 +76,14 @@ public class ExcelImportServer extends ImportBaseService { | |||
| private final static Logger LOGGER = LoggerFactory.getLogger(ExcelImportServer.class); | |||
| private CellValueServer cellValueServer; | |||
| private final static Validator validator; | |||
| static { | |||
| ValidatorFactory factory = Validation.buildDefaultValidatorFactory(); | |||
| validator = factory.getValidator(); | |||
| } | |||
| private VerifyHandlerServer verifyHandlerServer; | |||
| private CellValueServer cellValueServer; | |||
| private boolean verfiyFail = false; | |||
| /** | |||
| @@ -82,7 +93,6 @@ public class ExcelImportServer extends ImportBaseService { | |||
| public ExcelImportServer() { | |||
| this.cellValueServer = new CellValueServer(); | |||
| this.verifyHandlerServer = new VerifyHandlerServer(); | |||
| } | |||
| /*** | |||
| @@ -147,6 +157,9 @@ public class ExcelImportServer extends ImportBaseService { | |||
| case Cell.CELL_TYPE_FORMULA: | |||
| obj = cell.getCellFormula(); | |||
| break; | |||
| default: | |||
| cell.setCellType(Cell.CELL_TYPE_STRING); | |||
| obj = cell.getStringCellValue(); | |||
| } | |||
| return obj == null ? null : obj.toString().trim(); | |||
| } | |||
| @@ -231,7 +244,9 @@ public class ExcelImportServer extends ImportBaseService { | |||
| for (ExcelCollectionParams param : excelCollection) { | |||
| addListContinue(object, param, row, titlemap, targetId, pictures, params); | |||
| } | |||
| collection.add(object); | |||
| if (verifyingDataValidity(object, row, params, pojoClass)) { | |||
| collection.add(object); | |||
| } | |||
| } catch (ExcelImportException e) { | |||
| if (!e.getType().equals(ExcelImportEnum.VERIFY_ERROR)) { | |||
| throw new ExcelImportException(e.getType(), e); | |||
| @@ -242,6 +257,61 @@ public class ExcelImportServer extends ImportBaseService { | |||
| return collection; | |||
| } | |||
| /** | |||
| * 校验数据合法性 | |||
| * @param object | |||
| * @param row | |||
| * @param params | |||
| * @param pojoClass | |||
| * @return | |||
| */ | |||
| private boolean verifyingDataValidity(Object object, Row row, ImportParams params, | |||
| Class<?> pojoClass) { | |||
| boolean isAdd = true; | |||
| Cell cell = null; | |||
| if (params.isNeedVerfiy()) { | |||
| Set<ConstraintViolation<Object>> set = validator.validate(object); | |||
| if (set.size() > 0) { | |||
| cell = row.createCell(row.getLastCellNum()); | |||
| String errMsg = getValidateErrMsg(set); | |||
| cell.setCellValue(errMsg); | |||
| if (object instanceof IExcelModel) { | |||
| IExcelModel model = (IExcelModel) object; | |||
| model.setErrorMsg(errMsg); | |||
| } else { | |||
| isAdd = false; | |||
| } | |||
| } | |||
| } | |||
| if (params.getVerifyHanlder() != null) { | |||
| ExcelVerifyHanlderResult result = params.getVerifyHanlder().verifyHandler(object); | |||
| if (!result.isSuccess()) { | |||
| if (cell == null) | |||
| cell = row.createCell(row.getLastCellNum()); | |||
| cell.setCellValue((StringUtils.isNoneBlank(cell.getStringCellValue()) | |||
| ? cell.getStringCellValue() + "," : "") + result.getMsg()); | |||
| if (object instanceof IExcelModel) { | |||
| IExcelModel model = (IExcelModel) object; | |||
| model.setErrorMsg((StringUtils.isNoneBlank(model.getErrorMsg()) | |||
| ? model.getErrorMsg() + "," : "") + result.getMsg()); | |||
| } else { | |||
| isAdd = false; | |||
| } | |||
| } | |||
| } | |||
| if (cell != null) | |||
| cell.setCellStyle(errorCellStyle); | |||
| return isAdd; | |||
| } | |||
| private String getValidateErrMsg(Set<ConstraintViolation<Object>> set) { | |||
| StringBuilder builder = new StringBuilder(); | |||
| for (ConstraintViolation<Object> constraintViolation : set) { | |||
| builder.append(constraintViolation.getMessage()).append(","); | |||
| } | |||
| return builder.substring(0, builder.length() - 1).toString(); | |||
| } | |||
| /** | |||
| * 获取表格字段列名对应信息 | |||
| * @param rows | |||
| @@ -381,17 +451,7 @@ public class ExcelImportServer extends ImportBaseService { | |||
| ((Map) object).put(titleString, value); | |||
| } | |||
| } else { | |||
| ExcelVerifyHanlderResult verifyResult = verifyHandlerServer.verifyData(object, value, | |||
| titleString, excelParams.get(titleString).getVerify(), params.getVerifyHanlder()); | |||
| if (verifyResult.isSuccess()) { | |||
| setValues(excelParams.get(titleString), object, value); | |||
| } else { | |||
| Cell errorCell = row.createCell(row.getLastCellNum()); | |||
| errorCell.setCellValue(verifyResult.getMsg()); | |||
| errorCell.setCellStyle(errorCellStyle); | |||
| verfiyFail = true; | |||
| throw new ExcelImportException(ExcelImportEnum.VERIFY_ERROR); | |||
| } | |||
| setValues(excelParams.get(titleString), object, value); | |||
| } | |||
| } | |||
| @@ -31,13 +31,12 @@ import java.util.Set; | |||
| import org.apache.commons.lang3.StringUtils; | |||
| import org.apache.poi.ss.usermodel.Workbook; | |||
| import org.apache.poi.util.IOUtils; | |||
| import org.jeecgframework.poi.excel.annotation.Excel; | |||
| import org.jeecgframework.poi.excel.annotation.ExcelCollection; | |||
| import org.jeecgframework.poi.excel.annotation.ExcelVerify; | |||
| import org.jeecgframework.poi.excel.entity.ImportParams; | |||
| import org.jeecgframework.poi.excel.entity.params.ExcelCollectionParams; | |||
| import org.jeecgframework.poi.excel.entity.params.ExcelImportEntity; | |||
| import org.jeecgframework.poi.excel.entity.params.ExcelVerifyEntity; | |||
| import org.jeecgframework.poi.util.PoiPublicUtil; | |||
| import org.jeecgframework.poi.util.PoiReflectorUtil; | |||
| @@ -69,7 +68,6 @@ public class ImportBaseService { | |||
| excelEntity.setSaveType(excel.imageType()); | |||
| excelEntity.setReplace(excel.replace()); | |||
| excelEntity.setDatabaseFormat(excel.databaseFormat()); | |||
| excelEntity.setVerify(getImportVerify(field)); | |||
| excelEntity.setSuffix(excel.suffix()); | |||
| getExcelField(targetId, field, excelEntity, excel, pojoClass); | |||
| if (getMethods != null) { | |||
| @@ -82,30 +80,6 @@ public class ImportBaseService { | |||
| } | |||
| /** | |||
| * 获取导入校验参数 | |||
| * | |||
| * @param field | |||
| * @return | |||
| */ | |||
| public ExcelVerifyEntity getImportVerify(Field field) { | |||
| ExcelVerify verify = field.getAnnotation(ExcelVerify.class); | |||
| if (verify != null) { | |||
| ExcelVerifyEntity entity = new ExcelVerifyEntity(); | |||
| entity.setEmail(verify.isEmail()); | |||
| entity.setInterHandler(verify.interHandler()); | |||
| entity.setMaxLength(verify.maxLength()); | |||
| entity.setMinLength(verify.minLength()); | |||
| entity.setMobile(verify.isMobile()); | |||
| entity.setNotNull(verify.notNull()); | |||
| entity.setRegex(verify.regex()); | |||
| entity.setRegexTip(verify.regexTip()); | |||
| entity.setTel(verify.isTel()); | |||
| return entity; | |||
| } | |||
| return null; | |||
| } | |||
| /** | |||
| * 获取需要导出的全部字段 | |||
| * | |||
| @@ -245,7 +219,7 @@ public class ImportBaseService { | |||
| + Math.round(Math.random() * 100000) | |||
| + (isXSSFWorkbook == true ? ".xlsx" : ".xls")); | |||
| book.write(fos); | |||
| fos.close(); | |||
| IOUtils.closeQuietly(fos); | |||
| } | |||
| /** | |||
| @@ -1,146 +0,0 @@ | |||
| /** | |||
| * Copyright 2013-2015 JueYue (qrb.jueyue@gmail.com) | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| */ | |||
| package org.jeecgframework.poi.excel.imports.verifys; | |||
| import java.util.regex.Pattern; | |||
| import org.jeecgframework.poi.excel.entity.result.ExcelVerifyHanlderResult; | |||
| /** | |||
| * 基础校验工具类 | |||
| * | |||
| * @author JueYue | |||
| * @date 2014年6月23日 下午11:10:12 | |||
| */ | |||
| public class BaseVerifyHandler { | |||
| private static String NOT_NULL = "不允许为空"; | |||
| private static String IS_MOBILE = "不是手机号"; | |||
| private static String IS_TEL = "不是电话号码"; | |||
| private static String IS_EMAIL = "不是邮箱地址"; | |||
| private static String MIN_LENGHT = "小于规定长度"; | |||
| private static String MAX_LENGHT = "超过规定长度"; | |||
| private static Pattern mobilePattern = Pattern.compile("^[1][3,4,5,8,7][0-9]{9}$"); | |||
| private static Pattern telPattern = Pattern.compile("^([0][1-9]{2,3}-)?[0-9]{5,10}$"); | |||
| private static Pattern emailPattern = Pattern | |||
| .compile("^([a-zA-Z0-9]+[_|\\_|\\.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|\\_|\\.]?)*[a-zA-Z0-9]+\\.[a-zA-Z]{2,3}$"); | |||
| /** | |||
| * email校验 | |||
| * | |||
| * @param name | |||
| * @param val | |||
| * @return | |||
| */ | |||
| public static ExcelVerifyHanlderResult isEmail(String name, Object val) { | |||
| if (!emailPattern.matcher(String.valueOf(val)).matches()) { | |||
| return new ExcelVerifyHanlderResult(false, name + IS_EMAIL); | |||
| } | |||
| return new ExcelVerifyHanlderResult(true); | |||
| } | |||
| /** | |||
| * 手机校验 | |||
| * | |||
| * @param name | |||
| * @param val | |||
| * @return | |||
| */ | |||
| public static ExcelVerifyHanlderResult isMobile(String name, Object val) { | |||
| if (!mobilePattern.matcher(String.valueOf(val)).matches()) { | |||
| return new ExcelVerifyHanlderResult(false, name + IS_MOBILE); | |||
| } | |||
| return new ExcelVerifyHanlderResult(true); | |||
| } | |||
| /** | |||
| * 电话校验 | |||
| * | |||
| * @param name | |||
| * @param val | |||
| * @return | |||
| */ | |||
| public static ExcelVerifyHanlderResult isTel(String name, Object val) { | |||
| if (!telPattern.matcher(String.valueOf(val)).matches()) { | |||
| return new ExcelVerifyHanlderResult(false, name + IS_TEL); | |||
| } | |||
| return new ExcelVerifyHanlderResult(true); | |||
| } | |||
| /** | |||
| * 最大长度校验 | |||
| * | |||
| * @param name | |||
| * @param val | |||
| * @return | |||
| */ | |||
| public static ExcelVerifyHanlderResult maxLength(String name, Object val, int maxLength) { | |||
| if (notNull(name, val).isSuccess() && String.valueOf(val).length() > maxLength) { | |||
| return new ExcelVerifyHanlderResult(false, name + MAX_LENGHT); | |||
| } | |||
| return new ExcelVerifyHanlderResult(true); | |||
| } | |||
| /** | |||
| * 最小长度校验 | |||
| * | |||
| * @param name | |||
| * @param val | |||
| * @param minLength | |||
| * @return | |||
| */ | |||
| public static ExcelVerifyHanlderResult minLength(String name, Object val, int minLength) { | |||
| if (notNull(name, val).isSuccess() && String.valueOf(val).length() < minLength) { | |||
| return new ExcelVerifyHanlderResult(false, name + MIN_LENGHT); | |||
| } | |||
| return new ExcelVerifyHanlderResult(true); | |||
| } | |||
| /** | |||
| * 非空校验 | |||
| * | |||
| * @param name | |||
| * @param val | |||
| * @return | |||
| */ | |||
| public static ExcelVerifyHanlderResult notNull(String name, Object val) { | |||
| if (val == null || val.toString().equals("")) { | |||
| return new ExcelVerifyHanlderResult(false, name + NOT_NULL); | |||
| } | |||
| return new ExcelVerifyHanlderResult(true); | |||
| } | |||
| /** | |||
| * 正则表达式校验 | |||
| * @param name | |||
| * @param val | |||
| * @param regex | |||
| * @param regexTip | |||
| * @return | |||
| */ | |||
| public static ExcelVerifyHanlderResult regex(String name, Object val, String regex, | |||
| String regexTip) { | |||
| Pattern pattern = Pattern.compile(regex); | |||
| if (!pattern.matcher(String.valueOf(val)).matches()) { | |||
| return new ExcelVerifyHanlderResult(false, name + regexTip); | |||
| } | |||
| return new ExcelVerifyHanlderResult(true); | |||
| } | |||
| } | |||
| @@ -1,88 +0,0 @@ | |||
| /** | |||
| * Copyright 2013-2015 JueYue (qrb.jueyue@gmail.com) | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| */ | |||
| package org.jeecgframework.poi.excel.imports.verifys; | |||
| import org.apache.commons.lang3.StringUtils; | |||
| import org.jeecgframework.poi.excel.entity.params.ExcelVerifyEntity; | |||
| import org.jeecgframework.poi.excel.entity.result.ExcelVerifyHanlderResult; | |||
| import org.jeecgframework.poi.handler.inter.IExcelVerifyHandler; | |||
| /** | |||
| * 校验服务 | |||
| * | |||
| * @author JueYue | |||
| * @date 2014年6月29日 下午4:37:56 | |||
| */ | |||
| public class VerifyHandlerServer { | |||
| private final static ExcelVerifyHanlderResult DEFAULT_RESULT = new ExcelVerifyHanlderResult( | |||
| true); | |||
| private void addVerifyResult(ExcelVerifyHanlderResult hanlderResult, | |||
| ExcelVerifyHanlderResult result) { | |||
| if (!hanlderResult.isSuccess()) { | |||
| result.setSuccess(false); | |||
| result.setMsg((StringUtils.isEmpty(result.getMsg()) ? "" : result.getMsg() + " , ") | |||
| + hanlderResult.getMsg()); | |||
| } | |||
| } | |||
| /** | |||
| * 校驗數據 | |||
| * | |||
| * @param object | |||
| * @param value | |||
| * @param titleString | |||
| * @param verify | |||
| * @param excelVerifyHandler | |||
| */ | |||
| public ExcelVerifyHanlderResult verifyData(Object object, Object value, String name, | |||
| ExcelVerifyEntity verify, | |||
| IExcelVerifyHandler excelVerifyHandler) { | |||
| if (verify == null) { | |||
| return DEFAULT_RESULT; | |||
| } | |||
| ExcelVerifyHanlderResult result = new ExcelVerifyHanlderResult(true, ""); | |||
| if (verify.isNotNull()) { | |||
| addVerifyResult(BaseVerifyHandler.notNull(name, value), result); | |||
| } | |||
| if (verify.isEmail()) { | |||
| addVerifyResult(BaseVerifyHandler.isEmail(name, value), result); | |||
| } | |||
| if (verify.isMobile()) { | |||
| addVerifyResult(BaseVerifyHandler.isMobile(name, value), result); | |||
| } | |||
| if (verify.isTel()) { | |||
| addVerifyResult(BaseVerifyHandler.isTel(name, value), result); | |||
| } | |||
| if (verify.getMaxLength() != -1) { | |||
| addVerifyResult(BaseVerifyHandler.maxLength(name, value, verify.getMaxLength()), result); | |||
| } | |||
| if (verify.getMinLength() != -1) { | |||
| addVerifyResult(BaseVerifyHandler.minLength(name, value, verify.getMinLength()), result); | |||
| } | |||
| if (StringUtils.isNotEmpty(verify.getRegex())) { | |||
| addVerifyResult( | |||
| BaseVerifyHandler.regex(name, value, verify.getRegex(), verify.getRegexTip()), | |||
| result); | |||
| } | |||
| if (verify.isInterHandler()) { | |||
| addVerifyResult(excelVerifyHandler.verifyHandler(object, name, value), result); | |||
| } | |||
| return result; | |||
| } | |||
| } | |||
| @@ -27,14 +27,14 @@ import org.jeecgframework.poi.handler.inter.IExcelDataHandler; | |||
| * @author JueYue | |||
| * @date 2014年6月20日 上午12:11:52 | |||
| */ | |||
| public abstract class ExcelDataHandlerDefaultImpl implements IExcelDataHandler { | |||
| public abstract class ExcelDataHandlerDefaultImpl<T> implements IExcelDataHandler<T> { | |||
| /** | |||
| * 需要处理的字段 | |||
| */ | |||
| private String[] needHandlerFields; | |||
| @Override | |||
| public Object exportHandler(Object obj, String name, Object value) { | |||
| public Object exportHandler(T obj, String name, Object value) { | |||
| return value; | |||
| } | |||
| @@ -44,7 +44,7 @@ public abstract class ExcelDataHandlerDefaultImpl implements IExcelDataHandler { | |||
| } | |||
| @Override | |||
| public Object importHandler(Object obj, String name, Object value) { | |||
| public Object importHandler(T obj, String name, Object value) { | |||
| return value; | |||
| } | |||
| @@ -59,7 +59,7 @@ public abstract class ExcelDataHandlerDefaultImpl implements IExcelDataHandler { | |||
| } | |||
| @Override | |||
| public Hyperlink getHyperlink(CreationHelper creationHelper, Object obj, String name, Object value) { | |||
| public Hyperlink getHyperlink(CreationHelper creationHelper, T obj, String name, Object value) { | |||
| return null; | |||
| } | |||
| @@ -26,7 +26,7 @@ import org.apache.poi.ss.usermodel.Hyperlink; | |||
| * @author JueYue | |||
| * @date 2014年6月19日 下午11:59:45 | |||
| */ | |||
| public interface IExcelDataHandler { | |||
| public interface IExcelDataHandler<T> { | |||
| /** | |||
| * 导出处理方法 | |||
| @@ -39,7 +39,7 @@ public interface IExcelDataHandler { | |||
| * 当前值 | |||
| * @return | |||
| */ | |||
| public Object exportHandler(Object obj, String name, Object value); | |||
| public Object exportHandler(T obj, String name, Object value); | |||
| /** | |||
| * 获取需要处理的字段,导入和导出统一处理了, 减少书写的字段 | |||
| @@ -59,7 +59,7 @@ public interface IExcelDataHandler { | |||
| * 当前值 | |||
| * @return | |||
| */ | |||
| public Object importHandler(Object obj, String name, Object value); | |||
| public Object importHandler(T obj, String name, Object value); | |||
| /** | |||
| * 设置需要处理的属性列表 | |||
| @@ -83,6 +83,6 @@ public interface IExcelDataHandler { | |||
| * @param value | |||
| * @return | |||
| */ | |||
| public Hyperlink getHyperlink(CreationHelper creationHelper, Object obj, String name, Object value); | |||
| public Hyperlink getHyperlink(CreationHelper creationHelper, T obj, String name, Object value); | |||
| } | |||
| @@ -0,0 +1,35 @@ | |||
| /** | |||
| * Copyright 2013-2015 JueYue (qrb.jueyue@gmail.com) | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| */ | |||
| package org.jeecgframework.poi.handler.inter; | |||
| /** | |||
| * Excel标记类 | |||
| * @author JueYue | |||
| * @date 2015年10月31日 下午9:31:47 | |||
| */ | |||
| public interface IExcelModel { | |||
| /** | |||
| * 获取错误数据 | |||
| * @return | |||
| */ | |||
| public String getErrorMsg(); | |||
| /** | |||
| * 设置错误信息 | |||
| * @param errorMsg | |||
| */ | |||
| public void setErrorMsg(String errorMsg); | |||
| } | |||
| @@ -23,33 +23,15 @@ import org.jeecgframework.poi.excel.entity.result.ExcelVerifyHanlderResult; | |||
| * @author JueYue | |||
| * @date 2014年6月23日 下午11:08:21 | |||
| */ | |||
| public interface IExcelVerifyHandler { | |||
| /** | |||
| * 获取需要处理的字段,导入和导出统一处理了, 减少书写的字段 | |||
| * | |||
| * @return | |||
| */ | |||
| public String[] getNeedVerifyFields(); | |||
| /** | |||
| * 获取需要处理的字段,导入和导出统一处理了, 减少书写的字段 | |||
| * | |||
| * @return | |||
| */ | |||
| public void setNeedVerifyFields(String[] arr); | |||
| public interface IExcelVerifyHandler<T> { | |||
| /** | |||
| * 导出处理方法 | |||
| * | |||
| * @param obj | |||
| * 当前对象 | |||
| * @param name | |||
| * 当前字段名称 | |||
| * @param value | |||
| * 当前值 | |||
| * @return | |||
| */ | |||
| public ExcelVerifyHanlderResult verifyHandler(Object obj, String name, Object value); | |||
| public ExcelVerifyHanlderResult verifyHandler(T obj); | |||
| } | |||
| @@ -152,6 +152,13 @@ | |||
| <version>5.2.0</version> | |||
| </dependency> | |||
| <dependency> | |||
| <groupId>org.hibernate</groupId> | |||
| <artifactId>hibernate-validator</artifactId> | |||
| <version>5.1.3.Final</version> | |||
| <optional>true</optional> | |||
| </dependency> | |||
| <!-- 模块版本 --> | |||
| <dependency> | |||
| <groupId>org.jeecg</groupId> | |||