feat(entry): 新增权限转移功能

- 实现了权限转移操作人员和离职员工权限数据的查询
- 新增角色明细数据的查询功能
This commit is contained in:
dxfeng 2025-08-05 10:57:35 +08:00
parent b5ae3b1780
commit 0ab804b400
3 changed files with 232 additions and 0 deletions

View File

@ -0,0 +1,176 @@
package com.weaver.seconddev.entry.action;
import cn.hutool.core.convert.Convert;
import cn.hutool.http.HttpRequest;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.weaver.common.base.entity.result.WeaResult;
import com.weaver.esb.api.rpc.EsbServerlessRpcRemoteInterface;
import com.weaver.seconddev.entry.entity.PermissionTransferModule;
import com.weaver.seconddev.entry.entity.RoleDetail;
import com.weaver.seconddev.portal.constant.ApplicationConfigConstant;
import com.weaver.seconddev.portal.util.PapiUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @author:dxfeng
* @createTime: 2025/08/04
* @version: 1.0
*/
@Slf4j
@Service("PermissionTransferAction")
public class PermissionTransferAction implements EsbServerlessRpcRemoteInterface {
@Override
public WeaResult<Map<String, Object>> execute(Map<String, Object> params) {
Map<String, Object> returnMap = new HashMap<>();
// 离职员工ID
String employeeId = Convert.toStr(params.get("employeeId"), null);
// 权限转移操作人员ID
String optUserId = Convert.toStr(params.get("optUserId"), null);
String papiCode = PapiUtil.getPapiCode(ApplicationConfigConstant.APP_URL, ApplicationConfigConstant.CORP_ID, "B2b");
String papiToken = PapiUtil.getPapiToken(ApplicationConfigConstant.APP_URL, ApplicationConfigConstant.ORGANIZATION_APP_KEY, ApplicationConfigConstant.ORGANIZATION_APP_SECRET, papiCode);
// 查询某个人员组织的可以转移的权限数据
JSONObject jsonObject = new JSONObject();
// {"type":"resource","opt":"1","targetId":"959466419596591105"}
jsonObject.put("type", "resource");
jsonObject.put("opt", "1");
jsonObject.put("targetId", employeeId);
jsonObject.put("access_token", papiToken);
log.error("jsonObject===" + jsonObject);
String response = HttpRequest.post(ApplicationConfigConstant.APP_URL + "/papi/openapi/api/architecture/permission/transfer/query/v1/module")
.header("Content-Type", "application/json")
.header("optUserId", optUserId)
.body(jsonObject.toJSONString())
.execute()
.body();
log.error("response===" + response);
JSONObject responseJson = JSONObject.parseObject(response);
if (responseJson.getIntValue("code") != 200) {
// 请求失败直接响应失败数据
return WeaResult.fail(response, true);
}
JSONObject data = responseJson.getJSONObject("data");
List<PermissionTransferModule> permissionTransferModuleList = new ArrayList<>();
PermissionTransferModule roleModule = null;
if (data != null) {
JSONArray permissionTransferModules = data.getJSONArray("permissionTransferModules");
for (Object permissionTransferModule : permissionTransferModules) {
JSONObject permissionTransferModuleJson = (JSONObject) permissionTransferModule;
PermissionTransferModule module = PermissionTransferModule.builder()
.deleteType(permissionTransferModuleJson.getInteger("deleteType"))
.opt(permissionTransferModuleJson.getInteger("opt"))
.module(permissionTransferModuleJson.getString("module"))
.moduleName(permissionTransferModuleJson.getString("moduleName"))
.subModule(permissionTransferModuleJson.getString("subModule"))
.subModuleName(permissionTransferModuleJson.getString("subModuleName"))
.type(permissionTransferModuleJson.getString("type"))
.content(permissionTransferModuleJson.getString("content"))
.count(permissionTransferModuleJson.getInteger("count"))
.build();
if ("hrm_role".equals(module.getSubModule())) {
roleModule = module;
} else {
permissionTransferModuleList.add(module);
}
}
}
// 查询角色明细数据
List<RoleDetail> roleDetailList = new ArrayList<>();
getRoleDetail(employeeId, optUserId, 1, roleDetailList);
returnMap.put("permissionTransferModuleList", permissionTransferModuleList);
returnMap.put("roleDetailList", roleDetailList);
log.error("returnMap==" + JSON.toJSONString(returnMap));
return WeaResult.success(returnMap);
}
/**
* 获取角色明细数据
*
* @param employeeId 员工ID
* @param optUserId 操作用户ID
* @param pageNum 当前页码
* @param roleDetailList 角色明细列表
* @param roleDetailList
*/
private void getRoleDetail(String employeeId, String optUserId, int pageNum, List<RoleDetail> roleDetailList) {
String papiCode = PapiUtil.getPapiCode(ApplicationConfigConstant.APP_URL, ApplicationConfigConstant.CORP_ID, "B3b");
String papiToken = PapiUtil.getPapiToken(ApplicationConfigConstant.APP_URL, ApplicationConfigConstant.ORGANIZATION_APP_KEY, ApplicationConfigConstant.ORGANIZATION_APP_SECRET, papiCode);
JSONObject jsonObject = new JSONObject();
jsonObject.put("access_token", papiToken);
jsonObject.put("pageNum", pageNum);
jsonObject.put("pageSize", 10);
jsonObject.put("targetId", employeeId);
jsonObject.put("param", new JSONObject());
jsonObject.put("opt", "1");
jsonObject.put("module", "hrm");
jsonObject.put("subModule", "hrm_role");
jsonObject.put("type", "resource");
log.error("getRoleDetail>>jsonObject===" + jsonObject);
String response = HttpRequest.post(ApplicationConfigConstant.APP_URL + "/papi/openapi/api/architecture/permission/transfer/query/v1/module/content")
.header("Content-Type", "application/json")
.header("optUserId", optUserId)
.body(jsonObject.toJSONString())
.execute()
.body();
log.error("getRoleDetail>>response===" + response);
JSONObject responseJson = JSONObject.parseObject(response);
if (responseJson.getIntValue("code") != 200) {
// 请求失败直接响应失败数据
log.error("response==" + response);
roleDetailList = new ArrayList<>();
return;
}
JSONObject data = responseJson.getJSONObject("data");
if (data != null) {
JSONObject page = data.getJSONObject("page");
JSONArray records = page.getJSONArray("records");
if (records.size() > 0) {
for (Object record : records) {
JSONObject recordJson = (JSONObject) record;
JSONArray columnValueList = recordJson.getJSONArray("columnValueList");
if (columnValueList.size() > 0) {
JSONObject columnValue = columnValueList.getJSONObject(0);
RoleDetail roleDetail = RoleDetail.builder()
.sourceId(columnValue.getString("sourceId"))
.roleName(columnValue.getString("dataIndex_0"))
.functionCount(columnValue.getInteger("dataIndex_1"))
.memberCount(columnValue.getInteger("dataIndex_2"))
.build();
roleDetailList.add(roleDetail);
}
}
}
int pages = page.getIntValue("pages");
if (pages > pageNum) {
getRoleDetail(employeeId, optUserId, pageNum + 1, roleDetailList);
}
}
}
public static void main(String[] args) {
Map<String, Object> params = new HashMap<>();
params.put("employeeId", "1147262704872284161");
params.put("optUserId", "1147262704872284161");
PermissionTransferAction permissionTransferAction = new PermissionTransferAction();
WeaResult<Map<String, Object>> execute = permissionTransferAction.execute(params);
System.out.println(JSON.toJSONString(execute));
}
}

View File

@ -0,0 +1,28 @@
package com.weaver.seconddev.entry.entity;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author:dxfeng
* @createTime: 2025/08/04
* @version: 1.0
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class PermissionTransferModule {
private Integer deleteType;
private Integer opt;
private String module;
private String moduleName;
private String subModule;
private String subModuleName;
private String type;
private String content;
private Integer count;
}

View File

@ -0,0 +1,28 @@
package com.weaver.seconddev.entry.entity;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author:dxfeng
* @createTime: 2025/08/04
* @version: 1.0
*/
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class RoleDetail {
private String sourceId;
private String roleName;
/**
* 功能权限数量
*/
private Integer functionCount;
/**
* 成员数量
*/
private Integer memberCount;
}