From 9153beee616a1028ce9e3036dc2c0e58d699a860 Mon Sep 17 00:00:00 2001 From: wsm <2746563060@侵权。> Date: Thu, 7 May 2026 10:36:05 +0800 Subject: [PATCH] =?UTF-8?q?wsm-=E6=B7=BB=E5=8A=A0=E9=80=82=E9=85=8D?= =?UTF-8?q?=E4=BC=9A=E7=AD=BE=E4=BB=BB=E5=8A=A1=E5=86=85=E5=86=8D=E6=AC=A1?= =?UTF-8?q?=E4=BC=9A=E7=AD=BE=E7=9A=84=E5=8F=98=E9=87=8F=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/org/jeecg/xispeak/XiSpeakConfig.java | 2 + .../java/org/jeecg/xispeak/XiSpeakFlow.java | 20 +++++++ .../src/main/resources/application-flow.yml | 1 + .../common/expression/FlowNodeExpression.java | 55 +++++++++++++++++++ .../jeecg/common/system/api/ISysBaseAPI.java | 4 +- .../modules/system/mapper/SysUserMapper.java | 7 +++ .../system/service/ISysUserService.java | 2 + .../system/service/impl/SysBaseApiImpl.java | 9 +++ .../service/impl/SysUserServiceImpl.java | 5 ++ 9 files changed, 104 insertions(+), 1 deletion(-) diff --git a/jeecg-boot-module/jeecg-module-flow/src/main/java/org/jeecg/xispeak/XiSpeakConfig.java b/jeecg-boot-module/jeecg-module-flow/src/main/java/org/jeecg/xispeak/XiSpeakConfig.java index d9369ef..d5f6ef8 100644 --- a/jeecg-boot-module/jeecg-module-flow/src/main/java/org/jeecg/xispeak/XiSpeakConfig.java +++ b/jeecg-boot-module/jeecg-module-flow/src/main/java/org/jeecg/xispeak/XiSpeakConfig.java @@ -29,5 +29,7 @@ public class XiSpeakConfig { private String implDeptKey; /** 对应impl-dept-collection-used*/ private String implDeptCollectionUsedKey; + /** 对应sdw-role-id*/ + private String sdwRoleId; } } diff --git a/jeecg-boot-module/jeecg-module-flow/src/main/java/org/jeecg/xispeak/XiSpeakFlow.java b/jeecg-boot-module/jeecg-module-flow/src/main/java/org/jeecg/xispeak/XiSpeakFlow.java index 761b6af..61576fd 100644 --- a/jeecg-boot-module/jeecg-module-flow/src/main/java/org/jeecg/xispeak/XiSpeakFlow.java +++ b/jeecg-boot-module/jeecg-module-flow/src/main/java/org/jeecg/xispeak/XiSpeakFlow.java @@ -40,6 +40,26 @@ public class XiSpeakFlow { return userList; } + public List getSDWLeader() { + // 1. 安全获取配置,防止 NPE + XiSpeakConfig.XiSpeakProperties props = xiSpeakConfig.getXiSpeak(); + if (props == null || !StringUtils.hasText(props.getSdwRoleId())) { + log.error("流程配置缺失: [flow-biz.xi-speak.sdw-role-id] 未在 YAML 中定义"); + return Collections.emptyList(); + } + + // 2. 调用接口获取数据 + log.info("正在查询sdw:{}角色下的用户列表",props.getSdwRoleId()); + List userList = iSysBaseAPI.getUserByRoleIdLocalApi(props.getSdwRoleId()); + log.info("查询到的用户为: {}", userList); + return userList; + } + + public int getSDWLeaderLength() { + return this.getSDWLeader().size(); + } + + public int getBgDeptLdUserIdListLength() { return getBgDeptLdUserIdList().size(); } diff --git a/jeecg-boot-module/jeecg-module-flow/src/main/resources/application-flow.yml b/jeecg-boot-module/jeecg-module-flow/src/main/resources/application-flow.yml index 0feb5e8..b4b7d1d 100644 --- a/jeecg-boot-module/jeecg-module-flow/src/main/resources/application-flow.yml +++ b/jeecg-boot-module/jeecg-module-flow/src/main/resources/application-flow.yml @@ -6,3 +6,4 @@ flow-biz: json-data-key: "json_data" impl-dept-key: "implDept" impl-dept-collection-used-key: "impl_dept_id" + sdw-role-id: "2044676455280570370" diff --git a/jeecg-boot-platform/jeecg-boot-module-bpm-flowable/src/main/java/org/jeecg/modules/extbpm/process/common/expression/FlowNodeExpression.java b/jeecg-boot-platform/jeecg-boot-module-bpm-flowable/src/main/java/org/jeecg/modules/extbpm/process/common/expression/FlowNodeExpression.java index bc1642f..d7917e2 100644 --- a/jeecg-boot-platform/jeecg-boot-module-bpm-flowable/src/main/java/org/jeecg/modules/extbpm/process/common/expression/FlowNodeExpression.java +++ b/jeecg-boot-platform/jeecg-boot-module-bpm-flowable/src/main/java/org/jeecg/modules/extbpm/process/common/expression/FlowNodeExpression.java @@ -304,6 +304,8 @@ public class FlowNodeExpression { return Collections.emptyList(); } + + // // /** // * 从当前流程实例的所有执行实例中获取指定的局部变量 @@ -376,6 +378,59 @@ public class FlowNodeExpression { return usernames.get(0); } + + /** + * Get subprocess variable. + * Example: ${flowNodeExpression.getSonProcessVariable(execution, 'subApproveUser')} + * + * @param execution current execution + * @param variableName subprocess variable name + * @return username list + */ + public List getSonProcessHqVariableList(DelegateExecution execution, String variableName) { + if (execution == null || StringUtils.isBlank(variableName)) { + return Collections.emptyList(); + } + try { + String parentExecutionId = execution.getParentId(); + if(StringUtils.isBlank(parentExecutionId)){ + return Collections.emptyList(); + } + if (execution.hasVariableLocal(variableName)) { + return splitUsernames(execution.getVariableLocal(variableName)); + } + + List executions = runtimeService.createExecutionQuery() + .processInstanceId(parentExecutionId) + .list(); + for (Execution childExecution : executions) { + if (execution.getId().equals(childExecution.getId())) { + continue; + } + Object localVariable = runtimeService.getVariableLocal(childExecution.getId(), variableName); + if (localVariable != null) { + return splitUsernames(localVariable); + } + } + Object variable = execution.getVariable(variableName); + if (variable != null) { + return splitUsernames(variable); + } + } catch (Exception e) { + log.warn("getSonProcessVariable failed, executionId={}, variableName={}", + execution.getId(), variableName, e); + } + return Collections.emptyList(); + } + + public int getSonProcessHqVariableListLength(DelegateExecution execution, String variableName) { + return this.getSonProcessHqVariableList(execution,variableName).size(); + } + + public String getSonProcessHqVariableString(DelegateExecution execution, String variableName) { + if(execution == null || StringUtils.isBlank(variableName) || getSonProcessHqVariableList(execution, variableName).isEmpty()) return StringUtils.EMPTY; + return getSonProcessHqVariableList(execution, variableName).get(0); + } /** * Save current task assignee as execution local variable. * Example: ${flowNodeExpression.saveCurrentTaskAssigneeLocal(task, 'subApproveUser')} diff --git a/jeecg-module-system/jeecg-system-api/jeecg-system-local-api/src/main/java/org/jeecg/common/system/api/ISysBaseAPI.java b/jeecg-module-system/jeecg-system-api/jeecg-system-local-api/src/main/java/org/jeecg/common/system/api/ISysBaseAPI.java index d56b809..1d725e4 100644 --- a/jeecg-module-system/jeecg-system-api/jeecg-system-local-api/src/main/java/org/jeecg/common/system/api/ISysBaseAPI.java +++ b/jeecg-module-system/jeecg-system-api/jeecg-system-local-api/src/main/java/org/jeecg/common/system/api/ISysBaseAPI.java @@ -566,4 +566,6 @@ public interface ISysBaseAPI extends CommonAPI { List getUsersListByJsonLocalAPI(Object jsonData, String deptKeyName, String roleId); List getUsersListByDeptIdAndRoleIdLocalApi(String deptId, String roleId); -} + + List getUserByRoleIdLocalApi(String roleId); + } diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysUserMapper.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysUserMapper.java index 5677ee6..4a359dc 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysUserMapper.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysUserMapper.java @@ -244,4 +244,11 @@ public interface SysUserMapper extends BaseMapper { * @return */ List queryUserByDeptAndROle( String deptId, String roleId, Integer secretLevel); + + /** + * 通过角色id获取用户 + * @param roleId + * @return + */ + List getUserByRoleId(String roleId); } diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/ISysUserService.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/ISysUserService.java index bdc0ca4..bcdeaa9 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/ISysUserService.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/ISysUserService.java @@ -496,4 +496,6 @@ public interface ISysUserService extends IService { void updatePasswordNotBindPhone(String oldPassword, String password, String username); List queryUserByDeptAndROle(@NotBlank(message = "deptId不为空") String deptId, @NotBlank(message = "角色id不为空") String roleId, @NotBlank(message = "secretLevel不为空") Integer secretLevel); + + List getUserByRoleId(String roleId); } diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysBaseApiImpl.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysBaseApiImpl.java index efe4b70..eca50b9 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysBaseApiImpl.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysBaseApiImpl.java @@ -2152,4 +2152,13 @@ public class SysBaseApiImpl implements ISysBaseAPI { .stream() .collect(Collectors.toList()); } + + @Override + public List getUserByRoleIdLocalApi(String roleId){ + List sysUserList = sysUserService.getUserByRoleId(roleId); + return Optional.ofNullable(sysUserList) + .orElse(Collections.emptyList()) + .stream() + .collect(Collectors.toList()); + } } \ No newline at end of file diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysUserServiceImpl.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysUserServiceImpl.java index 6fdd585..8bed5db 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysUserServiceImpl.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysUserServiceImpl.java @@ -2419,4 +2419,9 @@ public class SysUserServiceImpl extends ServiceImpl impl public List queryUserByDeptAndROle(@NotBlank(message = "deptId不为空") String deptId, @NotBlank(message = "角色id不为空") String roleId, @NotBlank(message = "secretLevel不为空") Integer secretLevel){ return sysUserMapper.queryUserByDeptAndROle(deptId,roleId,secretLevel).stream().map(SysUser::getUsername).collect(Collectors.toList()) ; } + + @Override + public List getUserByRoleId(String roleId){ + return sysUserMapper.getUserByRoleId(roleId).stream().map(SysUser::getUsername).collect(Collectors.toList()) ; + } }