diff --git a/src/main/java/neatlogic/framework/matrix/core/IMatrixAttrType.java b/src/main/java/neatlogic/framework/matrix/core/IMatrixAttrType.java index 3460e75e30e29f377655648f9044f071012bd098..044ecb0a2437354a7702de96f5a4475fad3222ab 100644 --- a/src/main/java/neatlogic/framework/matrix/core/IMatrixAttrType.java +++ b/src/main/java/neatlogic/framework/matrix/core/IMatrixAttrType.java @@ -40,7 +40,7 @@ public interface IMatrixAttrType { * * @param value 值 */ - String getValueWhenExport(String value); + String getValueWhenExport(Object value, MatrixAttributeVo attributeVo); /** * 根据导入的值转换成系统的值 diff --git a/src/main/java/neatlogic/framework/matrix/core/MatrixAttrTypeBase.java b/src/main/java/neatlogic/framework/matrix/core/MatrixAttrTypeBase.java index 0a45c55d2b5bcb53a81244bbf1284bc35a4b92b1..d64a9cbfd8cb41e027485aefccea2d307261c40c 100644 --- a/src/main/java/neatlogic/framework/matrix/core/MatrixAttrTypeBase.java +++ b/src/main/java/neatlogic/framework/matrix/core/MatrixAttrTypeBase.java @@ -17,10 +17,12 @@ package neatlogic.framework.matrix.core; +import neatlogic.framework.matrix.dto.MatrixAttributeVo; + public abstract class MatrixAttrTypeBase implements IMatrixAttrType{ @Override - public String getValueWhenExport(String value) { - return value; + public String getValueWhenExport(Object value, MatrixAttributeVo attributeVo) { + return value.toString(); } } diff --git a/src/main/java/neatlogic/framework/matrix/dao/mapper/MatrixDataMapper.java b/src/main/java/neatlogic/framework/matrix/dao/mapper/MatrixDataMapper.java index ab62f3cba4f85235a9c5d4031080403f1026f8ed..f03fa0f531774f74adb227d4e025b84528cd3d22 100644 --- a/src/main/java/neatlogic/framework/matrix/dao/mapper/MatrixDataMapper.java +++ b/src/main/java/neatlogic/framework/matrix/dao/mapper/MatrixDataMapper.java @@ -17,7 +17,7 @@ public interface MatrixDataMapper { int getDynamicTableDataCount(MatrixDataVo dataVo); - List> searchDynamicTableData(MatrixDataVo dataVo); + List> searchDynamicTableData(MatrixDataVo dataVo); int getDynamicTableDataCountForTable(MatrixDataVo dataVo); diff --git a/src/main/java/neatlogic/module/framework/matrix/attrtype/handler/MatrixDateAttrTypeHandler.java b/src/main/java/neatlogic/module/framework/matrix/attrtype/handler/MatrixDateAttrTypeHandler.java index c61c16c9f6ea8a9f2c0eabf6ed7a049728db0e86..fb3329e6e36d07f2c920a633ee142c0993e388a1 100644 --- a/src/main/java/neatlogic/module/framework/matrix/attrtype/handler/MatrixDateAttrTypeHandler.java +++ b/src/main/java/neatlogic/module/framework/matrix/attrtype/handler/MatrixDateAttrTypeHandler.java @@ -26,6 +26,7 @@ import org.apache.commons.collections4.MapUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; +import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; @@ -36,6 +37,30 @@ public class MatrixDateAttrTypeHandler extends MatrixAttrTypeBase { return MatrixAttributeType.DATE.getValue(); } + @Override + public String getValueWhenExport(Object value, MatrixAttributeVo attributeVo) { + String pattern = TimeUtil.YYYY_MM_DD_HH_MM_SS; + JSONObject config = attributeVo.getConfig(); + if (MapUtils.isNotEmpty(config)) { + String format = config.getString("format"); + if (StringUtils.isNotBlank(format)) { + String styleType = config.getString("styleType"); + if (StringUtils.isNotBlank(styleType) && !Objects.equals(styleType, "-")) { + if ("|".equals(styleType)) { + styleType = ""; + } + format = format.replace("-", styleType); + } + pattern = format; + } + } + SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern); + if (value instanceof Date date) { + value = simpleDateFormat.format(date); + } + return value.toString(); + } + @Override public void getTextByValue(MatrixAttributeVo matrixAttribute, Object valueObj, JSONObject resultObj) { if (valueObj != null) { @@ -66,7 +91,33 @@ public class MatrixDateAttrTypeHandler extends MatrixAttrTypeBase { @Override public Set getRealValueBatch(MatrixAttributeVo matrixAttributeVo, Map valueMap) { - valueMap.replaceAll((k, v) -> k); +// valueMap.replaceAll((k, v) -> k); + SimpleDateFormat simpleDateFormat = new SimpleDateFormat(TimeUtil.YYYY_MM_DD_HH_MM_SS); + String pattern = TimeUtil.YYYY_MM_DD_HH_MM_SS; + JSONObject config = matrixAttributeVo.getConfig(); + if (MapUtils.isNotEmpty(config)) { + String format = config.getString("format"); + if (StringUtils.isNotBlank(format)) { + String styleType = config.getString("styleType"); + if (StringUtils.isNotBlank(styleType) && !Objects.equals(styleType, "-")) { + if ("|".equals(styleType)) { + styleType = ""; + } + format = format.replace("-", styleType); + } + pattern = format; + } + } + System.out.println("pattern = " + pattern); + SimpleDateFormat patternSdf = new SimpleDateFormat(pattern); + for (Map.Entry entry : valueMap.entrySet()) { + try { + Date date = patternSdf.parse(entry.getKey()); + valueMap.put(entry.getKey(), simpleDateFormat.format(date)); + } catch (ParseException e) { + // ignore + } + } return Collections.emptySet(); } } diff --git a/src/main/java/neatlogic/module/framework/matrix/attrtype/handler/MatrixRegionAttrTypeHandler.java b/src/main/java/neatlogic/module/framework/matrix/attrtype/handler/MatrixRegionAttrTypeHandler.java index edfaad93120ab3973d922f32e48c4c2870f8e3f4..1b92c9a502adf61cf7f4130b22da1734914de60c 100644 --- a/src/main/java/neatlogic/module/framework/matrix/attrtype/handler/MatrixRegionAttrTypeHandler.java +++ b/src/main/java/neatlogic/module/framework/matrix/attrtype/handler/MatrixRegionAttrTypeHandler.java @@ -50,12 +50,12 @@ public class MatrixRegionAttrTypeHandler extends MatrixAttrTypeBase { } @Override - public String getValueWhenExport(String value) { - RegionVo regionVo = regionMapper.getRegionById(Long.valueOf(value)); + public String getValueWhenExport(Object value, MatrixAttributeVo attributeVo) { + RegionVo regionVo = regionMapper.getRegionById(Long.parseLong(value.toString()) ); if (regionVo != null) { return regionVo.getUpwardNamePath(); } else { - return value; + return value.toString(); } } diff --git a/src/main/java/neatlogic/module/framework/matrix/attrtype/handler/MatrixRoleAttrTypeHandler.java b/src/main/java/neatlogic/module/framework/matrix/attrtype/handler/MatrixRoleAttrTypeHandler.java index d3f324945ac1d25f919599d46e46e01b136114db..67a42dc21b6044e64f0de56fc3583f1e88a427bf 100644 --- a/src/main/java/neatlogic/module/framework/matrix/attrtype/handler/MatrixRoleAttrTypeHandler.java +++ b/src/main/java/neatlogic/module/framework/matrix/attrtype/handler/MatrixRoleAttrTypeHandler.java @@ -50,12 +50,12 @@ public class MatrixRoleAttrTypeHandler extends MatrixAttrTypeBase { } @Override - public String getValueWhenExport(String value) { - RoleVo role = roleMapper.getRoleByUuid(value); + public String getValueWhenExport(Object value, MatrixAttributeVo attributeVo) { + RoleVo role = roleMapper.getRoleByUuid(value.toString()); if (role != null) { return role.getName(); } else { - return value; + return value.toString(); } } diff --git a/src/main/java/neatlogic/module/framework/matrix/attrtype/handler/MatrixTeamAttrTypeHandler.java b/src/main/java/neatlogic/module/framework/matrix/attrtype/handler/MatrixTeamAttrTypeHandler.java index fc1b23c937cdc76f0de3563b1d2548ffdb6f01cf..cf3fe38f9377f17bc6fbbcf3bfe1b3a3d150eb97 100644 --- a/src/main/java/neatlogic/module/framework/matrix/attrtype/handler/MatrixTeamAttrTypeHandler.java +++ b/src/main/java/neatlogic/module/framework/matrix/attrtype/handler/MatrixTeamAttrTypeHandler.java @@ -50,12 +50,12 @@ public class MatrixTeamAttrTypeHandler extends MatrixAttrTypeBase { } @Override - public String getValueWhenExport(String value) { - TeamVo team = teamMapper.getTeamByUuid(value); + public String getValueWhenExport(Object value, MatrixAttributeVo attributeVo) { + TeamVo team = teamMapper.getTeamByUuid(value.toString()); if (team != null) { return team.getName(); } else { - return value; + return value.toString(); } } diff --git a/src/main/java/neatlogic/module/framework/matrix/attrtype/handler/MatrixUserAttrTypeHandler.java b/src/main/java/neatlogic/module/framework/matrix/attrtype/handler/MatrixUserAttrTypeHandler.java index 46db1c00cd1660f86e86e80b382cab4aff76f01c..59751de1c16e8720b5e963d30fa57c1691a3a147 100644 --- a/src/main/java/neatlogic/module/framework/matrix/attrtype/handler/MatrixUserAttrTypeHandler.java +++ b/src/main/java/neatlogic/module/framework/matrix/attrtype/handler/MatrixUserAttrTypeHandler.java @@ -53,12 +53,12 @@ public class MatrixUserAttrTypeHandler extends MatrixAttrTypeBase { } @Override - public String getValueWhenExport(String value) { - UserVo user = userMapper.getUserBaseInfoByUuid(value); + public String getValueWhenExport(Object value, MatrixAttributeVo attributeVo) { + UserVo user = userMapper.getUserBaseInfoByUuid(value.toString()); if (user != null) { return user.getUserName(); } else { - return value; + return value.toString(); } } @@ -94,6 +94,24 @@ public class MatrixUserAttrTypeHandler extends MatrixAttrTypeBase { } } } + //通过userName搜 + if (CollectionUtils.isNotEmpty(needSearchValue)) { + List userVos = userMapper.getUserByUserNameList(needSearchValue); + if (CollectionUtils.isNotEmpty(userVos)) { + Map userName2UuidMap = new HashMap<>(); + for (UserVo userVo : userVos) { + if (!userName2UuidMap.containsKey(userVo.getUserName())) { + userName2UuidMap.put(userVo.getUserName(), userVo.getUuid()); + } + } + for (Map.Entry entry : valueMap.entrySet()) { + if (userName2UuidMap.containsKey(entry.getKey())) { + valueMap.put(entry.getKey(), userName2UuidMap.get(entry.getKey())); + needSearchValue.remove(entry.getKey()); + } + } + } + } return Collections.emptySet(); } } diff --git a/src/main/java/neatlogic/module/framework/matrix/handler/CustomDataSourceHandler.java b/src/main/java/neatlogic/module/framework/matrix/handler/CustomDataSourceHandler.java index c511b681f2211398eadc4b79c3cb037dde8a48ba..60ac9e10cf7f7cdafe68397327f3fc49090bffa5 100644 --- a/src/main/java/neatlogic/module/framework/matrix/handler/CustomDataSourceHandler.java +++ b/src/main/java/neatlogic/module/framework/matrix/handler/CustomDataSourceHandler.java @@ -303,21 +303,26 @@ public class CustomDataSourceHandler extends MatrixDataSourceHandlerBase { while (currentPage <= pageCount) { dataVo.setCurrentPage(currentPage); dataVo.setStartNum(null); - List> dataMapList = matrixDataMapper.searchDynamicTableData(dataVo); + List> dataMapList = new ArrayList<>(); + List> dataList = matrixDataMapper.searchDynamicTableData(dataVo); /* 转换用户、分组、角色字段值为用户名、分组名、角色名 **/ - if (CollectionUtils.isNotEmpty(dataMapList)) { - for (Map map : dataMapList) { + if (CollectionUtils.isNotEmpty(dataList)) { + for (Map dataMap : dataList) { + Map map = new HashMap<>(); + map.put("uuid", dataMap.get("uuid").toString()); + map.put("sort", dataMap.get("sort").toString()); for (MatrixAttributeVo attributeVo : attributeVoList) { - String value = map.get(attributeVo.getUuid()); - if (StringUtils.isNotBlank(value)) { + Object value = dataMap.get(attributeVo.getUuid()); + if (value != null) { IMatrixAttrType matrixAttrType = MatrixAttrTypeHandlerFactory.getHandler(attributeVo.getType()); if (matrixAttrType != null) { - map.put(attributeVo.getUuid(), matrixAttrType.getValueWhenExport(value)); + map.put(attributeVo.getUuid(), matrixAttrType.getValueWhenExport(value, attributeVo)); } else { throw new MatrixAttributeTypeNotFoundException(matrixVo.getName(), attributeVo.getUuid(), attributeVo.getType()); } } } + dataMapList.add(map); } } workbook = ExcelUtil.createExcel(workbook, headerList, columnList, columnSelectValueList, dataMapList); @@ -338,13 +343,13 @@ public class CustomDataSourceHandler extends MatrixDataSourceHandlerBase { matrixDataVo.setColumnList(columnList); int rowNum = matrixDataMapper.getDynamicTableDataCount(matrixDataVo); if (rowNum > 0) { - List> allDataList = new ArrayList<>(rowNum); + List> allDataList = new ArrayList<>(rowNum); matrixDataVo.setRowNum(rowNum); matrixDataVo.setPageSize(100); int pageCount = matrixDataVo.getPageCount(); for (int currentPage = 1; currentPage <= pageCount; currentPage++) { matrixDataVo.setCurrentPage(currentPage); - List> dataList = matrixDataMapper.searchDynamicTableData(matrixDataVo); + List> dataList = matrixDataMapper.searchDynamicTableData(matrixDataVo); allDataList.addAll(dataList); } config.put("dataList", allDataList); @@ -372,7 +377,9 @@ public class CustomDataSourceHandler extends MatrixDataSourceHandlerBase { // 删除动态表及数据 attributeMapper.dropMatrixDynamicTable(matrixUuid); } + Map attributeMap = new HashMap<>(); for (MatrixAttributeVo attributeVo : attributeList) { + attributeMap.put(attributeVo.getUuid(), attributeVo); attributeVo.setMatrixUuid(matrixUuid); attributeMapper.insertMatrixAttribute(attributeVo); } @@ -381,11 +388,39 @@ public class CustomDataSourceHandler extends MatrixDataSourceHandlerBase { JSONArray dataArray = config.getJSONArray("dataList"); if (CollectionUtils.isNotEmpty(dataArray)) { for (int i = 0; i < dataArray.size(); i++) { - Map map = dataArray.getObject(i, Map.class); + JSONObject map = dataArray.getJSONObject(i); if (MapUtils.isNotEmpty(map)) { List columnlist = new ArrayList<>(); for (Map.Entry entry : map.entrySet()) { - String value = entry.getValue() == null ? null : entry.getValue().toString(); + String value = null; + Object valueObj = entry.getValue(); + if (valueObj != null) { + MatrixAttributeVo attributeVo = attributeMap.get(entry.getKey()); + if (attributeVo != null && Objects.equals(attributeVo.getType(), MatrixAttributeType.DATE.getValue())) { + SimpleDateFormat simpleDateFormat = new SimpleDateFormat(TimeUtil.YYYY_MM_DD_HH_MM_SS); + if (valueObj instanceof Date valueDate) { + value = simpleDateFormat.format(valueDate); + } else if (valueObj instanceof Long valueLong) { + value = simpleDateFormat.format(new Date(valueLong)); + } else if (valueObj instanceof String valueStr) { + if (StringUtils.isNotBlank(valueStr)) { + try { + long valueLong = Long.parseLong(valueObj.toString()); + value = simpleDateFormat.format(new Date(valueLong)); + } catch (NumberFormatException e) { + try { + simpleDateFormat.parse(valueStr); + value = valueStr; + } catch (ParseException ex) { + // ignore + } + } + } + } + } else { + value = valueObj.toString(); + } + } columnlist.add(new MatrixColumnVo(entry.getKey(), value)); } matrixDataMapper.insertDynamicTableData(columnlist, matrixUuid);