From ffae00ec740880eea58b44f21d73b218f7cbc90f Mon Sep 17 00:00:00 2001 From: "1437892690@qq.com" <1437892690@qq.com> Date: Fri, 31 Oct 2025 15:50:38 +0800 Subject: [PATCH] =?UTF-8?q?[=E4=BF=AE=E5=A4=8D]=20=E8=87=AA=E5=AE=9A?= =?UTF-8?q?=E4=B9=89=E7=9F=A9=E9=98=B5=E5=AF=BC=E5=85=A5=E5=AF=BC=E5=87=BA?= =?UTF-8?q?=E5=A4=B1=E8=B4=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 关联 #[1544248732647424]自定义矩阵导入导出失败 http://192.168.0.96:8090/demo/rdm.html#/bug-detail/939050947543040/939050947543057/1544248732647424 --- .../matrix/core/IMatrixAttrType.java | 2 +- .../matrix/core/MatrixAttrTypeBase.java | 6 +- .../matrix/dao/mapper/MatrixDataMapper.java | 2 +- .../handler/MatrixDateAttrTypeHandler.java | 53 +++++++++++++++++- .../handler/MatrixRegionAttrTypeHandler.java | 6 +- .../handler/MatrixRoleAttrTypeHandler.java | 6 +- .../handler/MatrixTeamAttrTypeHandler.java | 6 +- .../handler/MatrixUserAttrTypeHandler.java | 24 +++++++- .../handler/CustomDataSourceHandler.java | 55 +++++++++++++++---- 9 files changed, 133 insertions(+), 27 deletions(-) diff --git a/src/main/java/neatlogic/framework/matrix/core/IMatrixAttrType.java b/src/main/java/neatlogic/framework/matrix/core/IMatrixAttrType.java index 3460e75e3..044ecb0a2 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 0a45c55d2..d64a9cbfd 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 ab62f3cba..f03fa0f53 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 c61c16c9f..fb3329e6e 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 edfaad931..1b92c9a50 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 d3f324945..67a42dc21 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 fc1b23c93..cf3fe38f9 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 46db1c00c..59751de1c 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 c511b681f..60ac9e10c 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); -- Gitee