From 28c57666d7ecb79dc78469cfa1110c687d1fd1c7 Mon Sep 17 00:00:00 2001 From: cst61 Date: Tue, 19 May 2026 19:12:13 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9E=84=E5=BB=BA=E9=93=BE=E6=9D=A1=E8=8A=82?= =?UTF-8?q?=E7=82=B9=EF=BC=8C=E4=B8=B0=E5=AF=8C=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/rj/entity/LbDepartmentUser.java | 2 +- .../impl/LbDepartmentUserServiceImpl.java | 50 ++++++++++++++++--- ...lb_department_user_alter_add_org_chain.sql | 2 +- 3 files changed, 44 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/rj/entity/LbDepartmentUser.java b/src/main/java/com/rj/entity/LbDepartmentUser.java index cbbb1f5..a8d2936 100644 --- a/src/main/java/com/rj/entity/LbDepartmentUser.java +++ b/src/main/java/com/rj/entity/LbDepartmentUser.java @@ -56,7 +56,7 @@ public class LbDepartmentUser implements Serializable { private String industry; @TableField("org_chain") - @Schema(description = "上级链条(从直接上级到根上级,逗号分隔的用户ID)") + @Schema(description = "上级链条(从直接上级到根上级,节点内 id,name,phone 逗号分隔,节点间 -> 连接)") private String orgChain; @TableField("join_date") diff --git a/src/main/java/com/rj/service/impl/LbDepartmentUserServiceImpl.java b/src/main/java/com/rj/service/impl/LbDepartmentUserServiceImpl.java index f1bab28..d8ab0f2 100644 --- a/src/main/java/com/rj/service/impl/LbDepartmentUserServiceImpl.java +++ b/src/main/java/com/rj/service/impl/LbDepartmentUserServiceImpl.java @@ -513,8 +513,11 @@ public class LbDepartmentUserServiceImpl extends ServiceImplid,name,phone->...(节点内逗号分隔,节点间箭头连接) */ private String buildOrgChain(Long userId, Map userById) { LbUser current = userById.get(userId); @@ -522,21 +525,52 @@ public class LbDepartmentUserServiceImpl extends ServiceImpl chain = new ArrayList<>(); + List nodes = new ArrayList<>(); Set visited = new HashSet<>(); Long pid = current.getPid(); while (pid != null && pid > 0) { if (!visited.add(pid)) { break; } - chain.add(String.valueOf(pid)); - LbUser parent = userById.get(pid); - if (parent == null) { - break; + Long currentPid = pid; + LbUser parent = userById.get(currentPid); + String name; + String phone; + if (parent != null) { + name = sanitizeOrgChainField(resolveDisplayName(parent)); + phone = sanitizeOrgChainField(parent.getMobile()); + pid = parent.getPid(); + } else { + name = ""; + phone = ""; + pid = null; } - pid = parent.getPid(); + nodes.add(formatOrgChainNode(currentPid, name, phone)); } - return chain.isEmpty() ? null : String.join(",", chain); + return nodes.isEmpty() ? null : String.join(ORG_CHAIN_NODE_SEPARATOR, nodes); + } + + /** + * 节点格式:id;有 name/phone 时才追加逗号,避免末尾出现多余的 , 或 ,, + */ + private static String formatOrgChainNode(Long currentPid, String name, String phone) { + StringBuilder sb = new StringBuilder(String.valueOf(currentPid)); + if (!name.isEmpty()) { + sb.append(',').append(name); + } + if (!phone.isEmpty()) { + sb.append(',').append(phone); + } + return sb.toString(); + } + + private static String sanitizeOrgChainField(String value) { + if (value == null) { + return ""; + } + return value.trim() + .replace(",", "") + .replace(ORG_CHAIN_NODE_SEPARATOR, ""); } private String resolveDisplayName(LbUser user) { diff --git a/src/main/sql/lb_department_user_alter_add_org_chain.sql b/src/main/sql/lb_department_user_alter_add_org_chain.sql index 1af5547..bae4d51 100644 --- a/src/main/sql/lb_department_user_alter_add_org_chain.sql +++ b/src/main/sql/lb_department_user_alter_add_org_chain.sql @@ -1,2 +1,2 @@ ALTER TABLE `lb_department_user` - ADD COLUMN `org_chain` VARCHAR(2000) DEFAULT NULL COMMENT '上级链条(从直接上级到根上级,逗号分隔的用户ID)' AFTER `industry`; + ADD COLUMN `org_chain` VARCHAR(2000) DEFAULT NULL COMMENT '上级链条(从直接上级到根上级,节点内 id,name,phone 逗号分隔,节点间 -> 连接)' AFTER `industry`;