@@ -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> | |||