Browse Source

迁移一期报表

dev
zhuibobo 2 months ago
parent
commit
8731e861fb
  1. 18
      script/sql/zfjd-refactoring-v1/014-初始化角色.sql
  2. 97
      zdxt-modules/zdxt-enforcement-code-common/src/main/java/com/zdxt/enforcementcode/common/util/DataFilterUtil.java
  3. 9
      zdxt-modules/zdxt-enforcement-code/src/main/resources/mapper/enforcementcode/report/EnforcementRegistrationEINOFTReportMapper.xml
  4. 391
      zdxt-web-server/zdxt-admin-web-server/src/test/java/com/zdxt/service/test/InitVirtualUnitV2Test.java
  5. 6987
      zdxt-web-server/zdxt-admin-web-server/src/test/java/com/zdxt/service/test/sysV1Data.json

18
script/sql/zfjd-refactoring-v1/014-初始化角色.sql

@ -1,13 +1,13 @@
-- 清空一期没有无效的角色 -- 清空一期没有无效的角色
delete sys_role where role_id not in (177 delete from sys_role where role_id in (177,
194 194,
206 206,
209 209,
211 211,
212 212,
213 213,
214 214,
215); 215);
INSERT INTO sys_role (role_id, tenant_id, role_name, role_key, role_sort, data_scope, menu_check_strictly, dept_check_strictly, status, del_flag, create_dept, create_by, create_time, update_by, update_time, remark, tenant_code, user_id, dept_id, sass_id, role_code, is_role_sys) INSERT INTO sys_role (role_id, tenant_id, role_name, role_key, role_sort, data_scope, menu_check_strictly, dept_check_strictly, status, del_flag, create_dept, create_by, create_time, update_by, update_time, remark, tenant_code, user_id, dept_id, sass_id, role_code, is_role_sys)
VALUES (1000, '000000', '查看全部业务数据角色', 'ViewAllDataRole', 1, '1', 1, 1, '0', '0', null, 0, '2025-01-10 15:08:12', 0, '2025-01-10 15:10:18', 'roleKey不可修改', null, '1', null, null, null, '1'); VALUES (1000, '000000', '查看全部业务数据角色', 'ViewAllDataRole', 1, '1', 1, 1, '0', '0', null, 0, '2025-01-10 15:08:12', 0, '2025-01-10 15:10:18', 'roleKey不可修改', null, '1', null, null, null, '1');

97
zdxt-modules/zdxt-enforcement-code-common/src/main/java/com/zdxt/enforcementcode/common/util/DataFilterUtil.java

@ -3,10 +3,13 @@ package com.zdxt.enforcementcode.common.util;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.zdxt.enforcementcode.domain.bo.EfcodeVirtualUnitBo; import com.zdxt.enforcementcode.domain.bo.EfcodeVirtualUnitBo;
import com.zdxt.enforcementcode.domain.bo.EfcodeVirtualUnitUserBo;
import com.zdxt.enforcementcode.domain.vo.EfcodeVirtualUnitUserVo;
import com.zdxt.enforcementcode.domain.vo.EfcodeVirtualUnitVo; import com.zdxt.enforcementcode.domain.vo.EfcodeVirtualUnitVo;
import com.zdxt.enforcementcode.domain.vo.SrzDeptVo; import com.zdxt.enforcementcode.domain.vo.SrzDeptVo;
import com.zdxt.enforcementcode.mapper.SrzDeptMapper; import com.zdxt.enforcementcode.mapper.SrzDeptMapper;
import com.zdxt.enforcementcode.service.IEfcodeVirtualUnitService; import com.zdxt.enforcementcode.service.IEfcodeVirtualUnitService;
import com.zdxt.enforcementcode.service.IEfcodeVirtualUnitUserService;
import lombok.AccessLevel; import lombok.AccessLevel;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import org.dromara.common.core.domain.dto.UserDTO; import org.dromara.common.core.domain.dto.UserDTO;
@ -240,7 +243,7 @@ public class DataFilterUtil {
public static String buildFilterSql(String tableAlias, String column, public static String buildFilterSql(String tableAlias, String column,
boolean includeSearch, boolean includeStatistics) { boolean includeSearch, boolean includeStatistics) {
return buildFilterSqlV3(tableAlias, column, includeSearch, includeStatistics); return buildFilterSqlV4(tableAlias, column, includeSearch, includeStatistics);
} }
// ======================== 角色前缀常量 ======================== // ======================== 角色前缀常量 ========================
@ -515,6 +518,94 @@ public class DataFilterUtil {
return "1 = 0"; return "1 = 0";
} }
/**
* 根据当前用户权限构建数据过滤 SQL 片段V4 版本
* <p>
* V3 的区别不通过角色获取虚拟单位改为通过 efcode_virtual_unit_user 的关联关系
* <ul>
* <li>超管或 ViewAllDataRole 返回 null全部放行</li>
* <li>ViewFilterDataRole 通过当前用户ID查询 efcode_virtual_unit_user
* 获取该用户被引用的所有虚拟单位vir_unit_id再以每个 vir_unit_id 为起点
* 通过 FIND_IN_SET 获取该节点本级及所有子级的 sys_dept_id形成过滤条件</li>
* <li>无权访问 返回 "1 = 0"</li>
* </ul>
*
* @param tableAlias 业务表别名 "t""e" 为空则不使用别名
* @param column 业务表中用于匹配 sys_dept_id 的列名默认 "bureau_dept_id"
* @param includeSearch 是否包含查询节点
* @param includeStatistics 是否包含统计节点
* @return SQL 片段null 表示全部放行 null 则为过滤条件
*/
public static String buildFilterSqlV4(String tableAlias, String column,
boolean includeSearch, boolean includeStatistics) {
// 超管或 ViewAllDataRole → 不过滤
if (isFullAccess()) {
return null;
}
// ViewFilterDataRole → 构建子查询条件
if (needFilter()) {
// 获取当前用户ID
Long userId = LoginHelper.getUserId();
if (userId == null) {
return "1 = 0";
}
// 通过 efcode_virtual_unit_user 获取当前用户关联的所有虚拟单位ID
IEfcodeVirtualUnitUserService unitUserService = SpringUtils.getBean(IEfcodeVirtualUnitUserService.class);
EfcodeVirtualUnitUserBo queryBo = new EfcodeVirtualUnitUserBo();
queryBo.setSysUserId(String.valueOf(userId));
List<EfcodeVirtualUnitUserVo> refList = unitUserService.queryList(queryBo);
// 提取所有 vir_unit_id(去重、排除空值)
List<String> virIds = refList.stream()
.map(EfcodeVirtualUnitUserVo::getVirUnitId)
.filter(StrUtil::isNotBlank)
.distinct()
.collect(Collectors.toList());
if (CollUtil.isEmpty(virIds)) {
return "1 = 0";
}
String columnRef = buildColumnRef(tableAlias, column);
// 构建过滤 SQL:每个 virId 通过 FIND_IN_SET 获取本级及所有子级的 sys_dept_id
StringBuilder sb = new StringBuilder();
sb.append("(");
for (int i = 0; i < virIds.size(); i++) {
if (i > 0) {
sb.append(" OR ");
}
String escapedVirId = escapeSql(virIds.get(i));
// 子查询:通过 vir_ancestors 中包含该 virId 的所有节点(含自身)的 sys_dept_id
sb.append(columnRef).append(" IN (");
sb.append("SELECT eu.sys_dept_id FROM efcode_virtual_unit eu");
sb.append(" WHERE FIND_IN_SET('").append(escapedVirId).append("', eu.vir_ancestors)");
sb.append(" AND eu.sys_dept_id IS NOT NULL AND eu.sys_dept_id != ''");
// includeSearch / includeStatistics 过滤条件
if (includeSearch || includeStatistics) {
sb.append(" AND (1=0");
if (includeSearch) {
sb.append(" OR eu.vir_include_search = '是'");
}
if (includeStatistics) {
sb.append(" OR eu.vir_include_statistics = '是'");
}
sb.append(")");
}
sb.append(")");
}
sb.append(")");
return sb.toString();
}
// 无权访问
return "1 = 0";
}
/** /**
* 使用默认列名 "bureau_dept_id" 构建数据过滤 SQL 片段 * 使用默认列名 "bureau_dept_id" 构建数据过滤 SQL 片段
* *
@ -524,7 +615,7 @@ public class DataFilterUtil {
* @return SQL 片段null 表示全部放行 null 则为过滤条件 * @return SQL 片段null 表示全部放行 null 则为过滤条件
*/ */
public static String buildFilterSql(String tableAlias, boolean includeSearch, boolean includeStatistics) { public static String buildFilterSql(String tableAlias, boolean includeSearch, boolean includeStatistics) {
return buildFilterSqlV3(tableAlias, "bureau_dept_id", includeSearch, includeStatistics); return buildFilterSqlV4(tableAlias, "bureau_dept_id", includeSearch, includeStatistics);
} }
/** /**
@ -535,7 +626,7 @@ public class DataFilterUtil {
* @return SQL 片段null 表示全部放行 null 则为过滤条件 * @return SQL 片段null 表示全部放行 null 则为过滤条件
*/ */
public static String buildFilterSql(boolean includeSearch, boolean includeStatistics) { public static String buildFilterSql(boolean includeSearch, boolean includeStatistics) {
return buildFilterSqlV3("", "bureau_dept_id", includeSearch, includeStatistics); return buildFilterSqlV4("", "bureau_dept_id", includeSearch, includeStatistics);
} }
/** /**

9
zdxt-modules/zdxt-enforcement-code/src/main/resources/mapper/enforcementcode/report/EnforcementRegistrationEINOFTReportMapper.xml

@ -8,15 +8,6 @@
<sql id="einoftWhereCondition"> <sql id="einoftWhereCondition">
AND er.is_submit = 1 AND er.is_submit = 1
AND er.is_delete = 0 AND er.is_delete = 0
AND er.bureau_dept_name IS NOT NULL
AND er.law_enforcement_id IS NOT NULL
AND er.enterprise_name IS NOT NULL
AND er.enterprise_number IS NOT NULL AND er.enterprise_number != ''
AND er.law_enforcer IS NOT NULL
AND er.law_enforcer_two IS NOT NULL
AND er.is_complaint IS NOT NULL
AND er.check_category IS NOT NULL
AND er.bureau_dept_id IS NOT NULL
AND (er.status = 0 OR er.status IS NULL) AND (er.status = 0 OR er.status IS NULL)
<if test="bo.enterpriseName != null and bo.enterpriseName != ''"> <if test="bo.enterpriseName != null and bo.enterpriseName != ''">
AND er.enterprise_name LIKE CONCAT('%', #{bo.enterpriseName}, '%') AND er.enterprise_name LIKE CONCAT('%', #{bo.enterpriseName}, '%')

391
zdxt-web-server/zdxt-admin-web-server/src/test/java/com/zdxt/service/test/InitVirtualUnitV2Test.java

@ -0,0 +1,391 @@
package com.zdxt.service.test;
import cn.dev33.satoken.context.mock.SaTokenContextMockUtil;
import cn.dev33.satoken.stp.StpUtil;
import cn.dev33.satoken.stp.parameter.SaLoginParameter;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.zdxt.enforcementcode.domain.EfcodeVirtualUnit;
import com.zdxt.enforcementcode.mapper.EfcodeVirtualUnitMapper;
import org.dromara.ZdxtAdminApplication;
import org.dromara.common.core.constant.SystemConstants;
import org.dromara.common.core.domain.model.LoginUser;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.json.utils.JsonUtils;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.system.domain.SysDept;
import org.dromara.system.domain.vo.SysDeptVo;
import org.dromara.system.mapper.SysDeptMapper;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.mock.web.MockHttpServletRequest;
import org.springframework.test.context.ActiveProfiles;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.*;
import java.util.stream.Collectors;
/**
* 初始化虚拟单位树V2 - 基于 V1 JSON 树层级
* <p>
* {@link InitVirtualUnitTest} 不同V2 的树层级结构直接来源于 sysV1Data.jsonid/pId
* JSON 已包含 V1 系统完整的父子关系本测试按 JSON 层级生成 efcode_virtual_unit 数据
* <ul>
* <li>保留 FIXED_VIR_ID_MAP id 转换各区固定 virId</li>
* <li>虚拟根节点深圳市/市直/使用固定 virId</li>
* <li>"区直" 虚拟节点名称 = 父节点名称 + "区直"virId = Area_XXX_QuZhi</li>
* <li>真实部门节点的其他字段名称/zone/机构/排序 sys_dept 表中获取</li>
* </ul>
* </p>
*/
@SpringBootTest(classes = ZdxtAdminApplication.class)
@ActiveProfiles({"dev", "dev-cust-zrb"})
@AutoConfigureMockMvc
@DisplayName("初始化虚拟单位树V2")
public class InitVirtualUnitV2Test {
@Autowired
private SysDeptMapper sysDeptMapper;
@Autowired
private EfcodeVirtualUnitMapper efcodeVirtualUnitMapper;
private static final String TEST_CLIENT_ID = "e5cd7e4891bf95d1d19206ce24a7b32e";
private static final String TENANT_ID = "000000";
/**
* JSON 数据文件相对模块或仓库根目录
*/
private static final String JSON_RELATIVE_PATH =
"src/test/java/com/zdxt/service/test/sysV1Data.json";
private static final String JSON_REPO_PATH =
"zdxt-web-server/zdxt-admin-web-server/" + JSON_RELATIVE_PATH;
/**
* 区级部门 deptId -> 固定 virId 映射
*/
private static final Map<String, String> FIXED_VIR_ID_MAP = new LinkedHashMap<>() {{
put("20210922211852148-9BC0-86CB268FF", "Area_LuoHuQu");
put("20210922211856415-B320-A08200FC3", "Area_FuTianQu");
put("20210922211901413-5636-0EE262A06", "Area_NanShanQu");
put("20210922211905159-EE09-09D606CFB", "Area_BaoAnQu");
put("20210922211909285-8169-1B6610932", "Area_LongGangQu");
put("20210922211913750-D059-984DC1A1A", "Area_YanTianQu");
put("20210922211918204-7059-2B73EBA45", "Area_GuangMingQu");
put("20210922211922409-1207-44E38EB4F", "Area_PingsHanQu");
put("20210922211924206-457B-09712EC36", "Area_LongHuaQu");
put("20210922211925882-0251-C23C3AA2E", "Area_DapengXinQu");
put("20210922211927734-9A30-921277192", "Area_ShenShanTeBieHeZuoQu");
}};
@BeforeEach
public void setUp() {
SaTokenContextMockUtil.setMockContext();
MockHttpServletRequest mockRequest = new MockHttpServletRequest();
mockRequest.addHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36");
RequestContextHolder.setRequestAttributes(new ServletRequestAttributes(mockRequest));
LoginUser loginUser = new LoginUser();
loginUser.setUserId(1L);
loginUser.setUserType("sys_user");
loginUser.setTenantId(TENANT_ID);
loginUser.setUsername("test_admin");
loginUser.setNickname("测试管理员");
loginUser.setDeptId("103");
loginUser.setDeptName("测试部门");
loginUser.setRolePermission(new HashSet<>());
loginUser.setMenuPermission(new HashSet<>());
SaLoginParameter param = new SaLoginParameter();
param.setExtra(LoginHelper.CLIENT_KEY, TEST_CLIENT_ID);
LoginHelper.login(loginUser, param);
}
@AfterEach
public void tearDown() {
try {
StpUtil.logout();
} catch (Exception ignored) {
}
RequestContextHolder.resetRequestAttributes();
SaTokenContextMockUtil.clearContext();
}
@DisplayName("基于V1 JSON树初始化虚拟单位树数据到 efcode_virtual_unit 表")
@Test
public void initVirtualUnitTreeV2() throws Exception {
// 1. 读取 JSON 树数据(V1 系统导出的层级结构)
List<V1Node> nodes = loadV1Nodes();
if (CollUtil.isEmpty(nodes)) {
System.out.println("未读取到任何 JSON 节点数据,退出");
return;
}
System.out.println("JSON 节点总数: " + nodes.size());
// 2. 查询 sys_dept 表,构建 deptId -> SysDeptVo 映射(其他字段来源)
List<Integer> zones = Arrays.asList(1, 2, 3, 4, 5, 6, 16, 15);
LambdaQueryWrapper<SysDept> lqw = Wrappers.lambdaQuery();
lqw.eq(SysDept::getDelFlag, SystemConstants.NORMAL);
lqw.in(SysDept::getZone, zones);
Map<String, SysDeptVo> deptMap = sysDeptMapper.selectVoList(lqw).stream()
.collect(Collectors.toMap(SysDeptVo::getDeptId, d -> d, (a, b) -> a));
System.out.println("查询到部门总数: " + deptMap.size());
// JSON id -> 节点,用于回溯父节点名称
Map<String, V1Node> nodeMap = nodes.stream()
.collect(Collectors.toMap(V1Node::getId, n -> n, (a, b) -> a));
// 3. 第一遍:构建 jsonId -> virId 映射(保留 FIXED_VIR_ID_MAP 转换)
Map<String, String> jsonIdToVirId = new LinkedHashMap<>();
for (V1Node node : nodes) {
jsonIdToVirId.put(node.getId(), resolveVirId(node));
}
// 4. 第二遍:按 JSON 层级构建 EfcodeVirtualUnit
List<EfcodeVirtualUnit> allUnits = new ArrayList<>();
// virId -> name,用于构建 displayPath
Map<String, String> idNameMap = new LinkedHashMap<>();
// 排序号:按 JSON 数据顺序升序递增
long orderSeq = 1L;
for (V1Node node : nodes) {
String virId = jsonIdToVirId.get(node.getId());
boolean virtual = node.getZone() == null;
EfcodeVirtualUnit unit = new EfcodeVirtualUnit();
unit.setVirId(virId);
// 4.1 父节点:JSON pId 映射为 virId;根节点(id==pId)置为 _root_
String virParentId;
if (Objects.equals(node.getId(), node.getPId())) {
virParentId = "_root_";
} else {
virParentId = jsonIdToVirId.getOrDefault(node.getPId(), "_root_");
}
unit.setVirParentId(virParentId);
// 4.2 名称/zone/其他字段
String name;
Long zoneVal;
if (virtual) {
unit.setVirIsVirtual("是");
if (isQuZhi(node)) {
// 区直:父节点(区)名称 + "区直",名称从 sys_dept 获取
String parentName = resolveDeptName(node.getPId(), deptMap, nodeMap);
name = parentName + "区直";
zoneVal = null;
} else {
// 深圳市/市直/区
name = node.getName();
if ("市直".equals(name)) {
zoneVal = 1L;
} else if ("区".equals(name)) {
zoneVal = 2L;
} else {
zoneVal = null;
}
}
unit.setSysDeptId(null);
unit.setSrzOrganizationId(null);
} else {
unit.setVirIsVirtual("否");
SysDeptVo dept = deptMap.get(node.getId());
if (dept != null) {
// 其他字段从 sys_dept 表中获取
name = dept.getDeptName();
zoneVal = dept.getZone() != null ? Long.valueOf(dept.getZone()) : null;
unit.setSysDeptId(dept.getDeptId());
unit.setSrzOrganizationId(dept.getOrganizationId() != null ? dept.getOrganizationId() : "");
} else {
// sys_dept 未匹配到,名称使用 JSON 回退;zone 直接取 sys_dept(无则 null)
name = node.getName();
zoneVal = null;
unit.setSysDeptId(node.getId());
unit.setSrzOrganizationId("");
System.out.println("警告: sys_dept 未找到部门 " + node.getId() + " [" + node.getName() + "]");
}
}
unit.setVirName(name);
unit.setVirZone(zoneVal);
unit.setVirStatus("启用");
unit.setVirIncludeStatistics("是");
unit.setVirIncludeSearch("是");
unit.setVirShowAtBusiness("是");
// 排序号按 JSON 数据顺序升序递增
unit.setOrderNum(orderSeq++);
allUnits.add(unit);
idNameMap.put(virId, name);
}
// 5. 构建 vir_ancestors 和 vir_display_path
Map<String, EfcodeVirtualUnit> unitMap = allUnits.stream()
.collect(Collectors.toMap(EfcodeVirtualUnit::getVirId, u -> u, (a, b) -> a));
for (EfcodeVirtualUnit unit : allUnits) {
// 5.1 向上追溯所有祖级 virId + 自身 virId
List<String> ancestorIds = new ArrayList<>();
String parentId = unit.getVirParentId();
while (parentId != null && !"_root_".equals(parentId)) {
EfcodeVirtualUnit parentUnit = unitMap.get(parentId);
if (parentUnit != null) {
ancestorIds.add(0, parentId);
parentId = parentUnit.getVirParentId();
} else {
break;
}
}
ancestorIds.add(unit.getVirId());
unit.setVirAncestors(String.join(",", ancestorIds));
// 5.2 基于 ancestors 中每个 virId 查找名称构建 displayPath
String displayPath = ancestorIds.stream()
.map(id -> idNameMap.getOrDefault(id, ""))
.collect(Collectors.joining("/"));
unit.setVirDisplayPath(displayPath);
}
// 6. 清空旧数据后批量插入
long existCount = efcodeVirtualUnitMapper.selectCount(Wrappers.lambdaQuery());
if (existCount > 0) {
System.out.println("清空旧数据,共 " + existCount + " 条");
efcodeVirtualUnitMapper.delete(Wrappers.lambdaQuery());
}
int batchSize = 500;
int total = allUnits.size();
int inserted = 0;
for (int i = 0; i < total; i += batchSize) {
List<EfcodeVirtualUnit> batch = allUnits.subList(i, Math.min(i + batchSize, total));
efcodeVirtualUnitMapper.insertBatch(batch);
inserted += batch.size();
}
System.out.println("========== 初始化完成(V2) ==========");
System.out.println("虚拟节点数: " + allUnits.stream().filter(u -> "是".equals(u.getVirIsVirtual())).count());
System.out.println("实际部门节点数: " + allUnits.stream().filter(u -> "否".equals(u.getVirIsVirtual())).count());
System.out.println("总插入数: " + inserted);
}
/**
* 解析 JSON 节点对应的 virId保留 FIXED_VIR_ID_MAP 及固定虚拟节点转换
*/
private String resolveVirId(V1Node node) {
String id = node.getId();
// 固定虚拟根节点
if ("0".equals(id)) {
return "ShenZhen_City";
}
if ("1".equals(id)) {
return "ShenZhen_ShiZhi";
}
if ("2".equals(id)) {
return "ShenZhen_Areas";
}
// 区级固定 virId
if (FIXED_VIR_ID_MAP.containsKey(id)) {
return FIXED_VIR_ID_MAP.get(id);
}
// 区直虚拟节点:virId = 父区 virId 去除 Area_ 前缀 + _QuZhi
if (isQuZhi(node)) {
String parentVir = FIXED_VIR_ID_MAP.get(node.getPId());
if (parentVir != null && parentVir.startsWith("Area_")) {
return parentVir.replace("Area_", "") + "_QuZhi";
}
}
// 其他真实部门:UUID
return UUID.randomUUID().toString().replace("-", "");
}
/**
* 是否为 "区直" 虚拟节点zone 为空且名称为"区直"
*/
private boolean isQuZhi(V1Node node) {
return node.getZone() == null && "区直".equals(node.getName());
}
/**
* 获取部门名称优先从 sys_dept 表获取回退 JSON name
*/
private String resolveDeptName(String deptId, Map<String, SysDeptVo> deptMap, Map<String, V1Node> nodeMap) {
SysDeptVo dept = deptMap.get(deptId);
if (dept != null && StringUtils.isNotEmpty(dept.getDeptName())) {
return dept.getDeptName();
}
V1Node node = nodeMap.get(deptId);
return node != null && node.getName() != null ? node.getName() : "";
}
/**
* 读取 sysV1Data.json兼容从模块目录或仓库根目录运行
*/
private List<V1Node> loadV1Nodes() throws Exception {
Path jsonPath = Paths.get(JSON_RELATIVE_PATH);
if (!Files.exists(jsonPath)) {
jsonPath = Paths.get(JSON_REPO_PATH);
}
String content = new String(Files.readAllBytes(jsonPath), StandardCharsets.UTF_8);
return JsonUtils.parseArray(content, V1Node.class);
}
/**
* V1 JSON 节点结构
*/
@JsonIgnoreProperties(ignoreUnknown = true)
public static class V1Node {
@JsonProperty("id")
private String id;
@JsonProperty("pId")
private String pId;
@JsonProperty("name")
private String name;
@JsonProperty("zone")
private Integer zone;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getPId() {
return pId;
}
public void setPId(String pId) {
this.pId = pId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getZone() {
return zone;
}
public void setZone(Integer zone) {
this.zone = zone;
}
}
}

6987
zdxt-web-server/zdxt-admin-web-server/src/test/java/com/zdxt/service/test/sysV1Data.json

File diff suppressed because it is too large
Loading…
Cancel
Save