Compare commits

...

2 Commits

Author SHA1 Message Date
f96c256367 1、调整同步的需求权限 2026-02-05 21:55:28 +08:00
19bcad83ee 1、调整同步的需求权限 2026-02-05 21:25:02 +08:00
4 changed files with 102 additions and 53 deletions

View File

@@ -244,9 +244,9 @@ public class LyricVTodoEmulationInfoDM implements Serializable {
@TableField(value = "work_hour_plan")
private String workHourPlan;
// @Schema(description = "提出人姓名")
// @TableField(value = "introduce_by_name")
// private String introduceByName;
@Schema(description = "提出人")
@TableField(value = "introduce_by")
private String introduceBy;
@Schema(description = "驳回原因")
@TableField(value = "turn_down_reason")

View File

@@ -5,6 +5,7 @@ import lombok.Getter;
@Getter
public enum MemberTypeEnum {
CREATOR("创建人", -1),
PRINCIPAL("仿真负责人", 0),
EXECUTOR("仿真执行人", 1),
THREED("3D负责人", 2),

View File

@@ -355,6 +355,18 @@ public class LyricInternalServiceImpl implements ILyricInternalService {
BatchCreateDirItem projectCreateItem = buildProjectDirItem(projectNode);
List<DirNodeInfo> demandDirNodeList = new ArrayList<>();
// 将利元亨的用户工号与userId映射
Map<String, Long> usernameToUserIdMap = new HashMap<>();
UserListReq userListReq = new UserListReq();
userListReq.setTenantId(tenantId);
userListReq.setCurrent(1);
userListReq.setSize(9999);
SdmResponse<PageDataResp<List<CIDUserResp>>> pageDataRespSdmResponse = sysUserFeignClient.listUser(userListReq);
if (pageDataRespSdmResponse.isSuccess() && pageDataRespSdmResponse.getData().getData() != null) {
List<CIDUserResp> userList = pageDataRespSdmResponse.getData().getData();
usernameToUserIdMap = userList.stream().collect(Collectors.toMap(CIDUserResp::getUsername, CIDUserResp::getUserId));
}
// 处理当前项目下的所有待办
for (LyricVTodoEmulationInfoDM todo : projectTodoList) {
try {
@@ -363,7 +375,7 @@ public class LyricInternalServiceImpl implements ILyricInternalService {
SpdmAddDemandReq demandReq = buildDemandReq(todo, demandUuid, curDateStr);
List<SpdmDemandRelateMemberReq> memberList = buildDemandMemberList(todo, demandUuid, jobNumber, curDateStr);
// 2. 构建权限更新参数
buildPermissionReqList(demandUuid, jobNumber, todo, updatePermissionList);
buildPermissionReqList(demandUuid, jobNumber, todo, updatePermissionList,usernameToUserIdMap);
// 3. 构建需求文件夹节点
demandDirNodeList.add(buildDemandDirNode(demandUuid, projectNode, demandReq.getDemandName()));
// 4. 异步保存需求数据
@@ -541,14 +553,15 @@ public class LyricInternalServiceImpl implements ILyricInternalService {
private void buildPermissionReqList(String demandUuid,
Long currentUserId,
LyricVTodoEmulationInfoDM todo,
List<UpdatePermissionReq> permissionList) {
List<UpdatePermissionReq> permissionList,
Map<String, Long> usernameToUserIdMap) {
// 当前用户权限
permissionList.add(buildUpdatePermissionReq(demandUuid, currentUserId, null));
// permissionList.add(buildUpdatePermissionReq(demandUuid, currentUserId, null));
// 仿真负责人权限
addPermissionReq(todo.getEmulationPerformer(), demandUuid, permissionList, MemberTypeEnum.PRINCIPAL.getCode());
// 仿真执行人权限
addPermissionReq(todo.getEmulationExecutor(), demandUuid, permissionList, MemberTypeEnum.EXECUTOR.getCode());
addPermissionReq(usernameToUserIdMap.get(todo.getVerifier()), demandUuid, permissionList, MemberTypeEnum.PRINCIPAL.getCode());
// 需求创建人权限
addPermissionReq(usernameToUserIdMap.get(todo.getIntroduceBy()), demandUuid, permissionList, MemberTypeEnum.CREATOR.getCode());
}
/**
@@ -571,14 +584,11 @@ public class LyricInternalServiceImpl implements ILyricInternalService {
/**
* 添加成员权限请求
*/
private void addPermissionReq(String memberStr, String demandUuid, List<UpdatePermissionReq> permissionList, Integer type) {
if (StringUtils.isBlank(memberStr)) {
private void addPermissionReq(Long userId, String demandUuid, List<UpdatePermissionReq> permissionList, Integer type) {
if (ObjectUtils.isEmpty(userId) || userId == 0L) {
return;
}
String userIdStr = memberStr.split("-")[0];
if (isConvertibleToLong(userIdStr)) {
permissionList.add(buildUpdatePermissionReq(demandUuid, Long.valueOf(userIdStr), type));
}
permissionList.add(buildUpdatePermissionReq(demandUuid, userId, type));
}
/**

View File

@@ -573,7 +573,7 @@ public class NodeServiceImpl extends ServiceImpl<SimulationNodeMapper, Simulatio
// 4. 设置当前阶段
dmProjectNodeList.forEach(spdmNodeVo -> {
String nodeCode = spdmNodeVo.getNodeCode();
if (org.apache.commons.lang3.StringUtils.isNotBlank(nodeCode)) {
if (StringUtils.isNotBlank(nodeCode)) {
spdmNodeVo.setCurrentPhase(projectStageMap.get(nodeCode));
}
});
@@ -3197,6 +3197,18 @@ public class NodeServiceImpl extends ServiceImpl<SimulationNodeMapper, Simulatio
Map<String, String> workspaceNodeMap) {
List<DirNodeInfo> demandDirNodeList = new ArrayList<>();
List<UpdatePermissionReq> permissionReqList = new ArrayList<>();
// 将利元亨的用户工号与userId映射
Map<String, Long> usernameToUserIdMap = new HashMap<>();
UserListReq userListReq = new UserListReq();
userListReq.setTenantId(tenantId);
userListReq.setCurrent(1);
userListReq.setSize(9999);
SdmResponse<PageDataResp<List<CIDUserResp>>> pageDataRespSdmResponse = sysUserFeignClient.listUser(userListReq);
if (pageDataRespSdmResponse.isSuccess() && pageDataRespSdmResponse.getData().getData() != null) {
List<CIDUserResp> userList = pageDataRespSdmResponse.getData().getData();
usernameToUserIdMap = userList.stream().collect(Collectors.toMap(CIDUserResp::getUsername, CIDUserResp::getUserId));
}
// 筛选出所有工位节点
for (LyricVTodoEmulationInfoDM todoItem : todoInfoList) {
try {
@@ -3207,7 +3219,7 @@ public class NodeServiceImpl extends ServiceImpl<SimulationNodeMapper, Simulatio
// 2. 构建成员信息和权限信息
List<SpdmDemandRelateMemberReq> memberList = buildDemandMemberList(
todoItem, demandUuid, currentUserId, currentTimeStr, permissionReqList);
todoItem, demandUuid, currentUserId, currentTimeStr, permissionReqList,usernameToUserIdMap);
// 3. 构建文件夹节点信息
DirNodeInfo demandDirNode = buildDemandDirNode(demandUuid, todoItem.getSubject(), projectNodeMap.get(NodeTypeEnum.PROJECT.getValue() + "_" + todoItem.getProject()).getUuid());
@@ -3276,20 +3288,27 @@ public class NodeServiceImpl extends ServiceImpl<SimulationNodeMapper, Simulatio
String demandUuid,
Long currentUserId,
String currentTimeStr,
List<UpdatePermissionReq> permissionReqList) {
List<UpdatePermissionReq> permissionReqList,
Map<String, Long> usernameToUserIdMap) {
List<SpdmDemandRelateMemberReq> memberList = new ArrayList<>();
// 添加当前用户权限
addUserPermission(permissionReqList, demandUuid, currentUserId,FilePermissionEnum.READ.getValue());
// addUserPermission(permissionReqList, demandUuid, currentUserId,FilePermissionEnum.READ.getValue());
// 仿真负责人在EP里是确认人verifier
// 需求创建人在EP里是提出人introduceBy
addDemandMember(todoItem.getVerifierNo(),todoItem.getIntroduceBy(), MemberTypeEnum.PRINCIPAL.getCode(), demandUuid, currentUserId, currentTimeStr, memberList, permissionReqList,usernameToUserIdMap);
// 仿真负责人
addDemandMember(todoItem.getEmulationPerformer(), 0, demandUuid, currentUserId, currentTimeStr, memberList, permissionReqList);
// 仿真执行人
addDemandMember(todoItem.getEmulationExecutor(), 1, demandUuid, currentUserId, currentTimeStr, memberList, permissionReqList);
// addDemandMember(todoItem.getEmulationExecutor(), 1, demandUuid, currentUserId, currentTimeStr, memberList, permissionReqList);
// 3D负责人
addDemandMember(todoItem.getThreeDimensionalPerformer(), 2, demandUuid, currentUserId, currentTimeStr, memberList, permissionReqList);
// addDemandMember(todoItem.getThreeDimensionalPerformer(), 2, demandUuid, currentUserId, currentTimeStr, memberList, permissionReqList);
// 确认人
// addDemandMember(todoItem.getThreeDimensionalPerformer(), 2, demandUuid, currentUserId, currentTimeStr, memberList, permissionReqList);
return memberList;
}
@@ -3297,37 +3316,40 @@ public class NodeServiceImpl extends ServiceImpl<SimulationNodeMapper, Simulatio
/**
* 添加需求成员
*/
private void addDemandMember(String userInfo, int memberType, String demandUuid,
private void addDemandMember(String verifierNo,String introduceBy, int memberType, String demandUuid,
Long currentUserId, String currentTimeStr,
List<SpdmDemandRelateMemberReq> memberList,
List<UpdatePermissionReq> permissionReqList) {
if (StringUtils.isBlank(userInfo)) {
List<UpdatePermissionReq> permissionReqList,
Map<String, Long> usernameToUserIdMap) {
log.info("verifierNo为{}introduceBy为{}",verifierNo,introduceBy);
if (StringUtils.isBlank(verifierNo) && StringUtils.isBlank(introduceBy)) {
log.error("确认人和提出人都为空");
return;
}
try {
String userIdStr = userInfo.split("-")[0];
if (!isConvertibleToLong(userIdStr)) {
log.warn("用户ID转换失败原始数据{}", userInfo);
return;
// TODO
Long verifierUserId = 0L;;
if (StringUtils.isNotBlank(verifierNo)) {
verifierUserId = usernameToUserIdMap.get(verifierNo);
// 构建仿真负责人信息
SpdmDemandRelateMemberReq memberReq = new SpdmDemandRelateMemberReq();
memberReq.setDemandId(demandUuid);
memberReq.setType(memberType);
memberReq.setUserId(verifierUserId);
memberReq.setCreateTime(currentTimeStr);
memberReq.setCreator(currentUserId);
memberList.add(memberReq);
}
Long introduceByUserId = 0L;
if (StringUtils.isNotBlank(introduceBy)) {
introduceByUserId = usernameToUserIdMap.get(introduceBy);
}
Long userId = Long.valueOf(userIdStr);
// 构建成员信息
SpdmDemandRelateMemberReq memberReq = new SpdmDemandRelateMemberReq();
memberReq.setDemandId(demandUuid);
memberReq.setType(memberType);
memberReq.setUserId(userId);
memberReq.setCreateTime(currentTimeStr);
memberReq.setCreator(currentUserId);
memberList.add(memberReq);
// 添加权限
addUserPermission(permissionReqList, demandUuid, userId,FilePermissionEnum.BASE.getValue());
addUserPermission(permissionReqList, demandUuid, verifierUserId,introduceByUserId,FilePermissionEnum.BASE.getValue());
} catch (Exception e) {
log.error("添加需求成员失败,用户信息:{},成员类型{}", userInfo, memberType, e);
log.error("添加需求成员失败,确认人:{},提出人{}", verifierNo,introduceBy , e);
}
}
@@ -3336,16 +3358,32 @@ public class NodeServiceImpl extends ServiceImpl<SimulationNodeMapper, Simulatio
*/
private void addUserPermission(List<UpdatePermissionReq> permissionReqList,
String demandUuid,
Long userId,byte filePermissionEnumValue) {
UpdatePermissionReq permissionReq = new UpdatePermissionReq();
permissionReq.setUserId(userId);
permissionReq.setUuid(demandUuid);
Long verifierUserId,Long introduceByUserId,byte filePermissionEnumValue) {
if (verifierUserId != 0L) {
UpdatePermissionReq permissionReq = new UpdatePermissionReq();
permissionReq.setUserId(verifierUserId);
permissionReq.setUuid(demandUuid);
Map<Long, Byte> userPermissions = new HashMap<>();
userPermissions.put(verifierUserId, filePermissionEnumValue);
permissionReq.setUserPermissions(userPermissions);
permissionReq.setPermission(filePermissionEnumValue);
permissionReqList.add(permissionReq);
}
if (introduceByUserId != 0L) {
UpdatePermissionReq introduceByPermissionReq = new UpdatePermissionReq();
introduceByPermissionReq.setUserId(introduceByUserId);
introduceByPermissionReq.setUuid(demandUuid);
Map<Long, Byte> introduceByUserPermissions = new HashMap<>();
introduceByUserPermissions.put(introduceByUserId, FilePermissionEnum.ALL.getValue());
introduceByPermissionReq.setUserPermissions(introduceByUserPermissions);
introduceByPermissionReq.setPermission(FilePermissionEnum.ALL.getValue());
permissionReqList.add(introduceByPermissionReq);
}
Map<Long, Byte> userPermissions = new HashMap<>();
userPermissions.put(userId, filePermissionEnumValue);
permissionReq.setUserPermissions(userPermissions);
permissionReq.setPermission(filePermissionEnumValue);
permissionReqList.add(permissionReq);
}
/**