From 4e87ad8471a29cf582580dca9a0772c99bb4f3bc Mon Sep 17 00:00:00 2001 From: jueyue Date: Fri, 2 Feb 2018 14:59:02 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8A=A0=E5=85=A5=E4=BA=86dict=20=E8=BF=99?= =?UTF-8?q?=E4=B8=AA=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../easypoi/excel/annotation/Excel.java | 6 +++ .../easypoi/excel/entity/ExcelBaseParams.java | 23 +++++++++--- .../excel/entity/params/ExcelBaseEntity.java | 16 ++++++++ .../excel/export/ExcelBatchExportService.java | 6 +-- .../excel/export/ExcelExportService.java | 7 ++-- .../excel/export/base/BaseExportService.java | 8 ++-- .../export/base/ExportCommonService.java | 14 +++++-- .../template/ExcelExportOfTemplateUtil.java | 6 +-- .../excel/imports/CellValueService.java | 37 +++++++++++-------- .../excel/imports/ExcelImportService.java | 8 ++-- .../excel/imports/base/ImportBaseService.java | 1 + .../excel/imports/sax/parse/SaxRowRead.java | 2 +- .../handler/inter/IExcelDictHandler.java | 31 ++++++++++++++++ 13 files changed, 122 insertions(+), 43 deletions(-) create mode 100644 easypoi-base/src/main/java/cn/afterturn/easypoi/handler/inter/IExcelDictHandler.java diff --git a/easypoi-annotation/src/main/java/cn/afterturn/easypoi/excel/annotation/Excel.java b/easypoi-annotation/src/main/java/cn/afterturn/easypoi/excel/annotation/Excel.java index 9e465c4..04ece3f 100644 --- a/easypoi-annotation/src/main/java/cn/afterturn/easypoi/excel/annotation/Excel.java +++ b/easypoi-annotation/src/main/java/cn/afterturn/easypoi/excel/annotation/Excel.java @@ -112,6 +112,10 @@ public @interface Excel { * 值得替换 导出是{a_id,b_id} 导入反过来,所以只用写一个 */ public String[] replace() default {}; + /** + * 字典名称 + */ + public String dict() default ""; /** * 导入路径,如果是图片可以填写,默认是upload/className/ IconEntity这个类对应的就是upload/Icon/ @@ -162,4 +166,6 @@ public @interface Excel { * @return */ public boolean isColumnHidden() default false; + + } diff --git a/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/entity/ExcelBaseParams.java b/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/entity/ExcelBaseParams.java index e5b0c60..55797c4 100644 --- a/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/entity/ExcelBaseParams.java +++ b/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/entity/ExcelBaseParams.java @@ -16,6 +16,7 @@ package cn.afterturn.easypoi.excel.entity; import cn.afterturn.easypoi.handler.inter.IExcelDataHandler; +import cn.afterturn.easypoi.handler.inter.IExcelDictHandler; /** * 基础参数 @@ -28,14 +29,26 @@ public class ExcelBaseParams { /** * 数据处理接口,以此为主,replace,format都在这后面 */ - private IExcelDataHandler dataHanlder; + private IExcelDataHandler dataHandler; - public IExcelDataHandler getDataHanlder() { - return dataHanlder; + /** + * 字段处理类 + */ + private IExcelDictHandler dictHandler; + + public IExcelDataHandler getDataHandler() { + return dataHandler; } - public void setDataHanlder(IExcelDataHandler dataHanlder) { - this.dataHanlder = dataHanlder; + public void setDataHandler(IExcelDataHandler dataHandler) { + this.dataHandler = dataHandler; } + public IExcelDictHandler getDictHandler() { + return dictHandler; + } + + public void setDictHandler(IExcelDictHandler dictHandler) { + this.dictHandler = dictHandler; + } } diff --git a/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/entity/params/ExcelBaseEntity.java b/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/entity/params/ExcelBaseEntity.java index 90f8feb..9402a3f 100644 --- a/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/entity/params/ExcelBaseEntity.java +++ b/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/entity/params/ExcelBaseEntity.java @@ -50,6 +50,10 @@ public class ExcelBaseEntity { * 导出日期格式 */ private String[] replace; + /** + * 字典名称 + */ + private String dict; /** * set/get方法 */ @@ -145,4 +149,16 @@ public class ExcelBaseEntity { public void setFixedIndex(int fixedIndex) { this.fixedIndex = fixedIndex; } + + public String getDict() { + return dict; + } + + public void setDict(String dict) { + this.dict = dict; + } + + public void setFixedIndex(Integer fixedIndex) { + this.fixedIndex = fixedIndex; + } } diff --git a/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/export/ExcelBatchExportService.java b/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/export/ExcelBatchExportService.java index 48ef2b6..9f0d8ee 100644 --- a/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/export/ExcelBatchExportService.java +++ b/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/export/ExcelBatchExportService.java @@ -109,9 +109,9 @@ public class ExcelBatchExportService extends ExcelExportService { List entityList, Collection dataSet, Sheet sheet) { try { - dataHanlder = entity.getDataHanlder(); - if (dataHanlder != null && dataHanlder.getNeedHandlerFields() != null) { - needHanlderList = Arrays.asList(dataHanlder.getNeedHandlerFields()); + dataHandler = entity.getDataHandler(); + if (dataHandler != null && dataHandler.getNeedHandlerFields() != null) { + needHandlerList = Arrays.asList(dataHandler.getNeedHandlerFields()); } // 创建表格样式 setExcelExportStyler((IExcelExportStyler) entity.getStyle() diff --git a/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/export/ExcelExportService.java b/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/export/ExcelExportService.java index 5bfc1a2..b7c6a59 100644 --- a/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/export/ExcelExportService.java +++ b/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/export/ExcelExportService.java @@ -149,10 +149,11 @@ public class ExcelExportService extends BaseExportService { List entityList, Collection dataSet, Sheet sheet) { try { - dataHanlder = entity.getDataHanlder(); - if (dataHanlder != null && dataHanlder.getNeedHandlerFields() != null) { - needHanlderList = Arrays.asList(dataHanlder.getNeedHandlerFields()); + dataHandler = entity.getDataHandler(); + if (dataHandler != null && dataHandler.getNeedHandlerFields() != null) { + needHandlerList = Arrays.asList(dataHandler.getNeedHandlerFields()); } + dictHandler = entity.getDictHandler(); // 创建表格样式 setExcelExportStyler((IExcelExportStyler) entity.getStyle() .getConstructor(Workbook.class).newInstance(workbook)); diff --git a/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/export/base/BaseExportService.java b/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/export/base/BaseExportService.java index ac9089f..b0b0257 100644 --- a/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/export/base/BaseExportService.java +++ b/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/export/base/BaseExportService.java @@ -104,7 +104,7 @@ public abstract class BaseExportService extends ExportCommonService { entity); if (entity.isHyperlink()) { row.getCell(cellNum - 1) - .setHyperlink(dataHanlder.getHyperlink( + .setHyperlink(dataHandler.getHyperlink( row.getSheet().getWorkbook().getCreationHelper(), t, entity.getName(), value)); } @@ -113,7 +113,7 @@ public abstract class BaseExportService extends ExportCommonService { index % 2 == 0 ? getStyles(false, entity) : getStyles(true, entity), entity); if (entity.isHyperlink()) { - row.getCell(cellNum - 1).setHyperlink(dataHanlder.getHyperlink( + row.getCell(cellNum - 1).setHyperlink(dataHandler.getHyperlink( row.getSheet().getWorkbook().getCreationHelper(), t, entity.getName(), value)); } @@ -225,7 +225,7 @@ public abstract class BaseExportService extends ExportCommonService { entity); if (entity.isHyperlink()) { row.getCell(cellNum - 1) - .setHyperlink(dataHanlder.getHyperlink( + .setHyperlink(dataHandler.getHyperlink( row.getSheet().getWorkbook().getCreationHelper(), obj, entity.getName(), value)); } @@ -234,7 +234,7 @@ public abstract class BaseExportService extends ExportCommonService { index % 2 == 0 ? getStyles(false, entity) : getStyles(true, entity), entity); if (entity.isHyperlink()) { row.getCell(cellNum - 1) - .setHyperlink(dataHanlder.getHyperlink( + .setHyperlink(dataHandler.getHyperlink( row.getSheet().getWorkbook().getCreationHelper(), obj, entity.getName(), value)); } diff --git a/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/export/base/ExportCommonService.java b/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/export/base/ExportCommonService.java index 87ea4b0..638b15d 100644 --- a/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/export/base/ExportCommonService.java +++ b/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/export/base/ExportCommonService.java @@ -30,6 +30,7 @@ import java.util.Iterator; import java.util.List; import java.util.Map; +import cn.afterturn.easypoi.handler.inter.IExcelDictHandler; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.builder.ReflectionToStringBuilder; import org.apache.commons.lang3.math.NumberUtils; @@ -58,9 +59,10 @@ public class ExportCommonService { protected static final Logger LOGGER = LoggerFactory.getLogger(ExportCommonService.class); - protected IExcelDataHandler dataHanlder; + protected IExcelDataHandler dataHandler; + protected IExcelDictHandler dictHandler; - protected List needHanlderList; + protected List needHandlerList; /** * 创建导出实体对象 @@ -195,8 +197,11 @@ public class ExportCommonService { if (StringUtils.isNotEmpty(entity.getNumFormat())) { value = numFormatValue(value, entity); } - if (needHanlderList != null && needHanlderList.contains(entity.getName())) { - value = dataHanlder.exportHandler(obj, entity.getName(), value); + if (StringUtils.isNotEmpty(entity.getDict()) && dictHandler != null) { + value = dictHandler.toName(entity.getDict(), obj, entity.getName(), value); + } + if (needHandlerList != null && needHandlerList.contains(entity.getName())) { + value = dataHandler.exportHandler(obj, entity.getName(), value); } if (StringUtils.isNotEmpty(entity.getSuffix()) && value != null) { value = value + entity.getSuffix(); @@ -243,6 +248,7 @@ public class ExportCommonService { excelEntity.setMethod(PoiReflectorUtil.fromCache(pojoClass).getGetMethod(field.getName())); excelEntity.setNumFormat(excel.numFormat()); excelEntity.setColumnHidden(excel.isColumnHidden()); + excelEntity.setDict(excel.dict()); if (excelGroup != null) { excelEntity.setGroupName(PoiPublicUtil.getValueByTargetId(excelGroup.name(), targetId, null)); } else { diff --git a/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/export/template/ExcelExportOfTemplateUtil.java b/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/export/template/ExcelExportOfTemplateUtil.java index 98c10d3..b1c63b3 100644 --- a/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/export/template/ExcelExportOfTemplateUtil.java +++ b/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/export/template/ExcelExportOfTemplateUtil.java @@ -198,9 +198,9 @@ public final class ExcelExportOfTemplateUtil extends BaseExportService { } if (dataSet != null) { // step 4. 正常的数据填充 - dataHanlder = params.getDataHanlder(); - if (dataHanlder != null) { - needHanlderList = Arrays.asList(dataHanlder.getNeedHandlerFields()); + dataHandler = params.getDataHandler(); + if (dataHandler != null) { + needHandlerList = Arrays.asList(dataHandler.getNeedHandlerFields()); } addDataToSheet(pojoClass, dataSet, wb.getSheetAt(params.getDataSheetNum()), wb); } diff --git a/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/imports/CellValueService.java b/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/imports/CellValueService.java index ae27281..f66afce 100644 --- a/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/imports/CellValueService.java +++ b/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/imports/CellValueService.java @@ -27,6 +27,7 @@ import java.util.Date; import java.util.List; import java.util.Map; +import cn.afterturn.easypoi.handler.inter.IExcelDictHandler; import org.apache.commons.lang3.StringUtils; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellType; @@ -52,7 +53,7 @@ public class CellValueService { private static final Logger LOGGER = LoggerFactory.getLogger(CellValueService.class); - private List hanlderList = null; + private List handlerList = null; /** * 获取单元格内的值 @@ -179,15 +180,15 @@ public class CellValueService { /** * 获取cell的值 - * - * @param object - * @param excelParams + * @param object * @param cell + * @param excelParams * @param titleString + * @param dictHandler */ - public Object getValue(IExcelDataHandler dataHanlder, Object object, Cell cell, + public Object getValue(IExcelDataHandler dataHandler, Object object, Cell cell, Map excelParams, - String titleString) throws Exception { + String titleString, IExcelDictHandler dictHandler) throws Exception { ExcelImportEntity entity = excelParams.get(titleString); String xclass = "class java.lang.Object"; if (!(object instanceof Map)) { @@ -200,8 +201,12 @@ public class CellValueService { if (entity != null) { result = hanlderSuffix(entity.getSuffix(), result); result = replaceValue(entity.getReplace(), result); + result = replaceValue(entity.getReplace(), result); + if(dictHandler != null && StringUtils.isNoneBlank(entity.getDict())){ + dictHandler.toValue(entity.getDict(), object, entity.getName(), result); + } } - result = hanlderValue(dataHanlder, object, result, titleString); + result = handlerValue(dataHandler, object, result, titleString); return getValueByType(xclass, result, entity); } @@ -225,7 +230,7 @@ public class CellValueService { Object result = cellEntity.getValue(); result = hanlderSuffix(entity.getSuffix(), result); result = replaceValue(entity.getReplace(), result); - result = hanlderValue(dataHanlder, object, result, titleString); + result = handlerValue(dataHanlder, object, result, titleString); return getValueByType(xclass, result, entity); } @@ -310,24 +315,24 @@ public class CellValueService { /** * 调用处理接口处理值 * - * @param dataHanlder + * @param dataHandler * @param object * @param result * @param titleString * @return */ @SuppressWarnings({"unchecked", "rawtypes"}) - private Object hanlderValue(IExcelDataHandler dataHanlder, Object object, Object result, + private Object handlerValue(IExcelDataHandler dataHandler, Object object, Object result, String titleString) { - if (dataHanlder == null || dataHanlder.getNeedHandlerFields() == null - || dataHanlder.getNeedHandlerFields().length == 0) { + if (dataHandler == null || dataHandler.getNeedHandlerFields() == null + || dataHandler.getNeedHandlerFields().length == 0) { return result; } - if (hanlderList == null) { - hanlderList = Arrays.asList(dataHanlder.getNeedHandlerFields()); + if (handlerList == null) { + handlerList = Arrays.asList(dataHandler.getNeedHandlerFields()); } - if (hanlderList.contains(titleString)) { - return dataHanlder.importHandler(object, titleString, result); + if (handlerList.contains(titleString)) { + return dataHandler.importHandler(object, titleString, result); } return result; } diff --git a/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/imports/ExcelImportService.java b/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/imports/ExcelImportService.java index d95f899..ec9eaa9 100644 --- a/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/imports/ExcelImportService.java +++ b/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/imports/ExcelImportService.java @@ -542,11 +542,11 @@ public class ExcelImportService extends ImportBaseService { private void saveFieldValue(ImportParams params, Object object, Cell cell, Map excelParams, String titleString, Row row) throws Exception { - Object value = cellValueServer.getValue(params.getDataHanlder(), object, cell, excelParams, - titleString); + Object value = cellValueServer.getValue(params.getDataHandler(), object, cell, excelParams, + titleString, params.getDictHandler()); if (object instanceof Map) { - if (params.getDataHanlder() != null) { - params.getDataHanlder().setMapValue((Map) object, titleString, value); + if (params.getDataHandler() != null) { + params.getDataHandler().setMapValue((Map) object, titleString, value); } else { ((Map) object).put(titleString, value); } diff --git a/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/imports/base/ImportBaseService.java b/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/imports/base/ImportBaseService.java index 805947b..f1344fb 100644 --- a/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/imports/base/ImportBaseService.java +++ b/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/imports/base/ImportBaseService.java @@ -178,6 +178,7 @@ public class ImportBaseService { } else { excelEntity.setFormat(excel.format()); } + excelEntity.setDict(excel.dict()); } public void getExcelFieldList(String targetId, Field[] fields, Class pojoClass, diff --git a/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/imports/sax/parse/SaxRowRead.java b/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/imports/sax/parse/SaxRowRead.java index 0c1934b..38f81c5 100644 --- a/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/imports/sax/parse/SaxRowRead.java +++ b/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/imports/sax/parse/SaxRowRead.java @@ -199,7 +199,7 @@ public class SaxRowRead extends ImportBaseService implements ISaxRowRead { private void saveFieldValue(ImportParams params, Object object, SaxReadCellEntity entity, Map excelParams, String titleString) throws Exception { - Object value = cellValueServer.getValue(params.getDataHanlder(), object, entity, + Object value = cellValueServer.getValue(params.getDataHandler(), object, entity, excelParams, titleString); setValues(excelParams.get(titleString), object, value); } diff --git a/easypoi-base/src/main/java/cn/afterturn/easypoi/handler/inter/IExcelDictHandler.java b/easypoi-base/src/main/java/cn/afterturn/easypoi/handler/inter/IExcelDictHandler.java new file mode 100644 index 0000000..7872e92 --- /dev/null +++ b/easypoi-base/src/main/java/cn/afterturn/easypoi/handler/inter/IExcelDictHandler.java @@ -0,0 +1,31 @@ +package cn.afterturn.easypoi.handler.inter; + +/** + * @author jueyue on 18-2-2. + * @version 3.0.4 + */ +public interface IExcelDictHandler { + + /** + * 从值翻译到名称 + * + * @param dict 字典Key + * @param obj 对象 + * @param name 属性名称 + * @param value 属性值 + * @return + */ + public String toName(String dict, Object obj, String name, Object value); + + /** + * 从名称翻译到值 + * + * @param dict 字典Key + * @param obj 对象 + * @param name 属性名称 + * @param value 属性值 + * @return + */ + public String toValue(String dict, Object obj, String name, Object value); + +}