1、调整任务文件权限

This commit is contained in:
2026-01-22 19:00:01 +08:00
parent a4a4eed05a
commit 543858bf82
4 changed files with 196 additions and 54 deletions

View File

@@ -8,8 +8,7 @@ import com.sdm.common.common.ThreadLocalContext;
import com.sdm.common.entity.enums.DirTypeEnum;
import com.sdm.common.entity.enums.FilePermissionEnum;
import com.sdm.common.entity.enums.NodeTypeEnum;
import com.sdm.common.entity.req.data.CreateDirReq;
import com.sdm.common.entity.req.data.UpdatePermissionReq;
import com.sdm.common.entity.req.data.*;
import com.sdm.common.entity.req.system.UserQueryReq;
import com.sdm.common.entity.resp.system.CIDUserResp;
import com.sdm.common.feign.impl.data.DataClientFeignClientImpl;
@@ -238,6 +237,8 @@ public class LyricInternalServiceImpl implements ILyricInternalService {
Long jobNumber = ThreadLocalContext.getUserId();
String uuid;
String curDateStr = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
List<BatchCreateDirItem> createDirItemList = new ArrayList<>();
List<UpdatePermissionReq> currentUpdatePermissionList = new ArrayList<>();
for (LyricVTodoEmulationInfoDM emulation : todoInfoList) {
try {
List<SpdmDemandExtraReq> extras = new ArrayList<>();
@@ -439,6 +440,15 @@ public class LyricInternalServiceImpl implements ILyricInternalService {
// 需求的成员
// 仿真负责人
// 当前用户也授予权限
UpdatePermissionReq updatePermissionReq = new UpdatePermissionReq();
updatePermissionReq.setUserId(jobNumber);
updatePermissionReq.setUuid(uuid);
Map<Long, Byte> userPermissions = new HashMap<>();
userPermissions.put(jobNumber, FilePermissionEnum.ALL.getValue());
updatePermissionReq.setUserPermissions(userPermissions);
currentUpdatePermissionList.add(updatePermissionReq);
String emulationPerformer = emulation.getEmulationPerformer();
if (StringUtils.isNotBlank(emulationPerformer)) {
SpdmDemandRelateMemberReq pMemberReq = new SpdmDemandRelateMemberReq();
@@ -447,6 +457,13 @@ public class LyricInternalServiceImpl implements ILyricInternalService {
String pUserId = emulationPerformer.split("-")[0];
if (isConvertibleToLong(pUserId)) {
pMemberReq.setUserId(Long.valueOf(pUserId));
UpdatePermissionReq pUpdatePermissionReq = new UpdatePermissionReq();
pUpdatePermissionReq.setUserId(pMemberReq.getUserId());
pUpdatePermissionReq.setUuid(uuid);
Map<Long, Byte> pUserPermissions = new HashMap<>();
pUserPermissions.put(pMemberReq.getUserId(), FilePermissionEnum.ALL.getValue());
pUpdatePermissionReq.setUserPermissions(pUserPermissions);
currentUpdatePermissionList.add(pUpdatePermissionReq);
}
pMemberReq.setCreateTime(curDateStr);
pMemberReq.setCreator(jobNumber);
@@ -462,6 +479,13 @@ public class LyricInternalServiceImpl implements ILyricInternalService {
String eUserId = emulationExecutor.split("-")[0];
if (isConvertibleToLong(eUserId)) {
eMemberReq.setUserId(Long.valueOf(eUserId));
UpdatePermissionReq eUpdatePermissionReq = new UpdatePermissionReq();
eUpdatePermissionReq.setUserId(eMemberReq.getUserId());
eUpdatePermissionReq.setUuid(uuid);
Map<Long, Byte> eUserPermissions = new HashMap<>();
eUserPermissions.put(eMemberReq.getUserId(), FilePermissionEnum.ALL.getValue());
eUpdatePermissionReq.setUserPermissions(eUserPermissions);
currentUpdatePermissionList.add(eUpdatePermissionReq);
}
eMemberReq.setCreateTime(curDateStr);
eMemberReq.setCreator(jobNumber);
@@ -482,31 +506,20 @@ public class LyricInternalServiceImpl implements ILyricInternalService {
tMemberReq.setCreator(jobNumber);
allMemberList.add(tMemberReq);
}
// 更新文件权限
UpdatePermissionReq updatePermissionReq = new UpdatePermissionReq();
updatePermissionReq.setUserId(jobNumber);
updatePermissionReq.setUuid(uuid);
Map<Long, Byte> userPermissions = new HashMap<>();
userPermissions.put(jobNumber, FilePermissionEnum.ALL.getValue());
updatePermissionReq.setUserPermissions(userPermissions);
log.info("手动同步需求时,更新用户权限的参数为:{}", updatePermissionReq);
CreateDirReq createDirReq = new CreateDirReq();
createDirReq.setUuId(uuid);
createDirReq.setParentUuId(null);
createDirReq.setDirName(spdmAddDemandReq.getDemandName());
createDirReq.setDirType(DirTypeEnum.PROJECT_NODE_DIR.getValue());
log.info("手动同步待办创建需求时,调用创建文件夹的参数为:{}", createDirReq);
BatchCreateDirItem batchCreateDirItem = new BatchCreateDirItem();
DirNodeInfo dirNodeInfo = new DirNodeInfo();
dirNodeInfo.setUuId(uuid);
dirNodeInfo.setParentUuId(null);
dirNodeInfo.setUuIdOwnType(NodeTypeEnum.DEMAND.getValue());
dirNodeInfo.setDirName(spdmAddDemandReq.getDemandName());
batchCreateDirItem.setParentDirNodeInfo(dirNodeInfo);
createDirItemList.add(batchCreateDirItem);
CompletableFuture.runAsync(() -> {
demandMapper.addDemand(spdmAddDemandReq, tenantId, jobNumber);
demandMapper.addDemandMember(allMemberList);
try {
SdmResponse updatePermissionResponse = dataFeignClient.updatePermission(updatePermissionReq);
log.info("手动同步需求时,更新用户权限的返回值为:{}", updatePermissionResponse);
SdmResponse response = dataFeignClient.createDir(createDirReq);
log.info("手动同步代办创建需求时,调用创建文件夹的返回值为:{}", response);
}catch (Exception e) {
log.error(e.getMessage());
}
});
if (CollectionUtils.isNotEmpty(extras)) {
for (SpdmDemandExtraReq extra : extras) {
@@ -519,6 +532,27 @@ public class LyricInternalServiceImpl implements ILyricInternalService {
log.error("手动同步代办时有异常:{}", e.getMessage());
}
}
// 批量创建文件夹
BatchCreateDirReq batchCreateDirReq = new BatchCreateDirReq();
batchCreateDirReq.setItems(createDirItemList);
batchCreateDirReq.setDirType(DirTypeEnum.PROJECT_NODE_DIR.getValue());
log.info("手动同步待办创建需求时,调用批量创建文件夹的参数为:{}", batchCreateDirReq);
SdmResponse response = dataFeignClient.batchCreateDir(batchCreateDirReq);
log.info("手动同步代办创建需求时,调用批量创建文件夹的返回值为:{}", response);
if (CollectionUtils.isNotEmpty(currentUpdatePermissionList)) {
CompletableFuture.runAsync(() -> {
for (UpdatePermissionReq permissionReq : currentUpdatePermissionList) {
// 更新文件权限
try {
SdmResponse updatePermissionResponse = dataFeignClient.updatePermission(permissionReq);
log.info("手动同步代办时,更新用户权限的返回值为:{}", updatePermissionResponse);
}catch (Exception e) {
log.error(e.getMessage());
}
}
});
}
return SdmResponse.success();
}

View File

@@ -520,7 +520,6 @@ public class NodeServiceImpl extends ServiceImpl<SimulationNodeMapper, Simulatio
}
// 获取目标完成时间
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
List<SpdmProjectNodeEditReq> workspaceNodeList = addNodeList.stream().filter(node -> NodeTypeEnum.WORKSPACE.getValue().equals(node.getNodeType())).toList();
if (CollectionUtils.isNotEmpty(workspaceNodeList)) {
@@ -634,6 +633,75 @@ public class NodeServiceImpl extends ServiceImpl<SimulationNodeMapper, Simulatio
createDir(spdmProjectNodeEditReq.getUuid(), spdmProjectNodeEditReq.getNodeType(), spdmProjectNodeEditReq.getPid(), spdmProjectNodeEditReq.getNodeName());
}
}
SpdmProjectNodeEditReq projectNode = addNodeList.stream().filter(node -> NodeTypeEnum.PROJECT.getValue().equals(node.getNodeType())).findFirst().orElse(null);
List<SpdmProjectNodeEditReq> addPhaseNodeList = addNodeList.stream().filter(node -> NodeTypeEnum.PHASE.getValue().equals(node.getNodeType())).toList();
List<SpdmProjectNodeEditReq> addMachineNodeList = addNodeList.stream().filter(node -> NodeTypeEnum.MACHINE.getValue().equals(node.getNodeType())).toList();
List<SpdmProjectNodeEditReq> addWorkspaceNodeList = addNodeList.stream().filter(node -> NodeTypeEnum.WORKSPACE.getValue().equals(node.getNodeType())).toList();
if (ObjectUtils.isEmpty(projectNode)) {
// 只创建阶段
SpdmProjectNodeEditReq spdmProjectNodeEditReq = addPhaseNodeList.get(0);
createDir(spdmProjectNodeEditReq.getUuid(), spdmProjectNodeEditReq.getNodeType(), spdmProjectNodeEditReq.getPid(), spdmProjectNodeEditReq.getNodeName());
}else {
// 批量创建文件夹
BatchCreateDirReq batchCreateDirReq = new BatchCreateDirReq();
List<BatchCreateDirItem> createDirItemList = new ArrayList<>();
BatchCreateDirItem projectCreateDirItem = new BatchCreateDirItem();
DirNodeInfo projectDirNodeInfo = new DirNodeInfo();
projectDirNodeInfo.setUuId(projectNode.getUuid());
projectDirNodeInfo.setParentUuId(null);
projectDirNodeInfo.setUuIdOwnType(NodeTypeEnum.PROJECT.getValue());
projectDirNodeInfo.setDirName(projectNode.getNodeName());
projectCreateDirItem.setParentDirNodeInfo(projectDirNodeInfo);
List<DirNodeInfo> childDirNodeInfoList = new ArrayList<>();
if (CollectionUtils.isNotEmpty(addPhaseNodeList)) {
for (SpdmProjectNodeEditReq phaseNode : addPhaseNodeList) {
DirNodeInfo phaseDirNodeInfo = new DirNodeInfo();
phaseDirNodeInfo.setUuId(phaseNode.getUuid());
phaseDirNodeInfo.setParentUuId(projectNode.getUuid());
phaseDirNodeInfo.setUuIdOwnType(NodeTypeEnum.PHASE.getValue());
phaseDirNodeInfo.setDirName(phaseNode.getNodeName());
childDirNodeInfoList.add(phaseDirNodeInfo);
// 过滤当前阶段下的机台节点
if (CollectionUtils.isNotEmpty(addMachineNodeList)) {
List<SpdmProjectNodeEditReq> currentMachineNodeList = addMachineNodeList.stream().filter(machineNode -> phaseNode.getUuid().equals(machineNode.getPid())).toList();
if (CollectionUtils.isEmpty(currentMachineNodeList)) {
continue;
}
for (SpdmProjectNodeEditReq machineNode : currentMachineNodeList) {
DirNodeInfo machineDirNodeInfo = new DirNodeInfo();
machineDirNodeInfo.setUuId(machineNode.getUuid());
machineDirNodeInfo.setParentUuId(phaseNode.getUuid());
machineDirNodeInfo.setUuIdOwnType(NodeTypeEnum.MACHINE.getValue());
machineDirNodeInfo.setDirName(machineNode.getNodeName());
childDirNodeInfoList.add(machineDirNodeInfo);
// 过滤当前机台下的工位节点
if (CollectionUtils.isNotEmpty(addWorkspaceNodeList)) {
List<SpdmProjectNodeEditReq> currentWorkspaceNodeList = addWorkspaceNodeList.stream().filter(workspaceNode -> machineNode.getUuid().equals(workspaceNode.getPid())).toList();
if (CollectionUtils.isEmpty(currentWorkspaceNodeList)) {
continue;
}
for (SpdmProjectNodeEditReq workspaceNode : currentWorkspaceNodeList) {
DirNodeInfo workspaceDirNodeInfo = new DirNodeInfo();
workspaceDirNodeInfo.setUuId(workspaceNode.getUuid());
workspaceDirNodeInfo.setParentUuId(machineNode.getUuid());
workspaceDirNodeInfo.setUuIdOwnType(NodeTypeEnum.WORKSPACE.getValue());
workspaceDirNodeInfo.setDirName(workspaceNode.getNodeName());
childDirNodeInfoList.add(workspaceDirNodeInfo);
}
}
}
}
}
}
projectCreateDirItem.setChildDirNodeInfos(childDirNodeInfoList);
createDirItemList.add(projectCreateDirItem);
batchCreateDirReq.setItems(createDirItemList);
batchCreateDirReq.setDirType(DirTypeEnum.PROJECT_NODE_DIR.getValue());
log.info("创建节点时,调用批量创建文件夹的参数为:{}", batchCreateDirReq);
SdmResponse response = dataFeignClient.batchCreateDir(batchCreateDirReq);
log.info("创建节点时,调用批量创建文件夹的返回值为:{}", response);
}
for (SpdmProjectNodeEditReq node : addNodeList) {
updatePermission(currentUserId,node.getUuid());
}
@@ -2013,6 +2081,8 @@ public class NodeServiceImpl extends ServiceImpl<SimulationNodeMapper, Simulatio
Long jobNumber = ThreadLocalContext.getUserId();
String uuid;
String curDateStr = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
List<BatchCreateDirItem> createDirItemList = new ArrayList<>();
List<UpdatePermissionReq> currentUpdatePermissionList = new ArrayList<>();
for (LyricVTodoEmulationInfoDM emulation : todoInfoList) {
try {
List<SpdmDemandExtraReq> extras = new ArrayList<>();
@@ -2048,6 +2118,14 @@ public class NodeServiceImpl extends ServiceImpl<SimulationNodeMapper, Simulatio
spdmAddDemandReq.setCreateTime(curDateStr);
spdmAddDemandReq.setDemandSource(SYNC_PROJECT_SOURCE);
// 需求的成员
// 当前用户也授予权限
UpdatePermissionReq updatePermissionReq = new UpdatePermissionReq();
updatePermissionReq.setUserId(jobNumber);
updatePermissionReq.setUuid(uuid);
Map<Long, Byte> userPermissions = new HashMap<>();
userPermissions.put(jobNumber, FilePermissionEnum.ALL.getValue());
updatePermissionReq.setUserPermissions(userPermissions);
currentUpdatePermissionList.add(updatePermissionReq);
// 仿真负责人
String emulationPerformer = emulation.getEmulationPerformer();
if (StringUtils.isNotBlank(emulationPerformer)) {
@@ -2057,6 +2135,13 @@ public class NodeServiceImpl extends ServiceImpl<SimulationNodeMapper, Simulatio
String pUserId = emulationPerformer.split("-")[0];
if (isConvertibleToLong(pUserId)) {
pMemberReq.setUserId(Long.valueOf(pUserId));
UpdatePermissionReq pUpdatePermissionReq = new UpdatePermissionReq();
pUpdatePermissionReq.setUserId(pMemberReq.getUserId());
pUpdatePermissionReq.setUuid(uuid);
Map<Long, Byte> pUserPermissions = new HashMap<>();
pUserPermissions.put(pMemberReq.getUserId(), FilePermissionEnum.ALL.getValue());
pUpdatePermissionReq.setUserPermissions(pUserPermissions);
currentUpdatePermissionList.add(pUpdatePermissionReq);
}
pMemberReq.setCreateTime(curDateStr);
pMemberReq.setCreator(jobNumber);
@@ -2072,6 +2157,13 @@ public class NodeServiceImpl extends ServiceImpl<SimulationNodeMapper, Simulatio
String eUserId = emulationExecutor.split("-")[0];
if (isConvertibleToLong(eUserId)) {
eMemberReq.setUserId(Long.valueOf(eUserId));
UpdatePermissionReq eUpdatePermissionReq = new UpdatePermissionReq();
eUpdatePermissionReq.setUserId(eMemberReq.getUserId());
eUpdatePermissionReq.setUuid(uuid);
Map<Long, Byte> eUserPermissions = new HashMap<>();
eUserPermissions.put(eMemberReq.getUserId(), FilePermissionEnum.ALL.getValue());
eUpdatePermissionReq.setUserPermissions(eUserPermissions);
currentUpdatePermissionList.add(eUpdatePermissionReq);
}
eMemberReq.setCreateTime(curDateStr);
eMemberReq.setCreator(jobNumber);
@@ -2092,31 +2184,18 @@ public class NodeServiceImpl extends ServiceImpl<SimulationNodeMapper, Simulatio
tMemberReq.setCreator(jobNumber);
allMemberList.add(tMemberReq);
}
// 更新文件权限
UpdatePermissionReq updatePermissionReq = new UpdatePermissionReq();
updatePermissionReq.setUserId(jobNumber);
updatePermissionReq.setUuid(uuid);
Map<Long, Byte> userPermissions = new HashMap<>();
userPermissions.put(jobNumber, FilePermissionEnum.ALL.getValue());
updatePermissionReq.setUserPermissions(userPermissions);
log.info("同步需求时,更新用户权限的参数为:{}", updatePermissionReq);
CreateDirReq createDirReq = new CreateDirReq();
createDirReq.setUuId(uuid);
createDirReq.setParentUuId(null);
createDirReq.setDirName(spdmAddDemandReq.getDemandName());
createDirReq.setDirType(DirTypeEnum.PROJECT_NODE_DIR.getValue());
log.info("同步待办创建需求时,调用创建文件夹的参数为:{}", createDirReq);
BatchCreateDirItem batchCreateDirItem = new BatchCreateDirItem();
DirNodeInfo dirNodeInfo = new DirNodeInfo();
dirNodeInfo.setUuId(uuid);
dirNodeInfo.setParentUuId(null);
dirNodeInfo.setUuIdOwnType(NodeTypeEnum.DEMAND.getValue());
dirNodeInfo.setDirName(spdmAddDemandReq.getDemandName());
batchCreateDirItem.setParentDirNodeInfo(dirNodeInfo);
createDirItemList.add(batchCreateDirItem);
CompletableFuture.runAsync(() -> {
demandMapper.addDemand(spdmAddDemandReq, tenantId, jobNumber);
demandMapper.addDemandMember(allMemberList);
try {
SdmResponse updatePermissionResponse = dataFeignClient.updatePermission(updatePermissionReq);
log.info("同步需求时,更新用户权限的返回值为:{}", updatePermissionResponse);
SdmResponse response = dataFeignClient.createDir(createDirReq);
log.info("同步代办创建需求时,调用创建文件夹的返回值为:{}", response);
}catch (Exception e) {
log.error(e.getMessage());
}
});
if (CollectionUtils.isNotEmpty(extras)) {
for (SpdmDemandExtraReq extra : extras) {
@@ -2129,6 +2208,27 @@ public class NodeServiceImpl extends ServiceImpl<SimulationNodeMapper, Simulatio
log.error("同步代办时有异常:{}", e.getMessage());
}
}
// 批量创建文件夹
BatchCreateDirReq batchCreateDirReq = new BatchCreateDirReq();
batchCreateDirReq.setItems(createDirItemList);
batchCreateDirReq.setDirType(DirTypeEnum.PROJECT_NODE_DIR.getValue());
log.info("同步待办创建需求时,调用批量创建文件夹的参数为:{}", batchCreateDirReq);
SdmResponse response = dataFeignClient.batchCreateDir(batchCreateDirReq);
log.info("同步代办创建需求时,调用批量创建文件夹的返回值为:{}", response);
// TODO 更新用户权限也需要批量接口来优化
if (CollectionUtils.isNotEmpty(currentUpdatePermissionList)) {
CompletableFuture.runAsync(() -> {
for (UpdatePermissionReq permissionReq : currentUpdatePermissionList) {
// 更新文件权限
try {
SdmResponse updatePermissionResponse = dataFeignClient.updatePermission(permissionReq);
log.info("同步需求时,更新用户权限的返回值为:{}", updatePermissionResponse);
}catch (Exception e) {
log.error(e.getMessage());
}
}
});
}
return SdmResponse.success();
}

View File

@@ -1419,12 +1419,24 @@ public class ProjectServiceImpl extends BaseService implements IProjectService {
longUserIdList.forEach(userId -> {
sendMessage(MessageTemplateEnum.TASK_ISSUE, projectNode.getNodeName(), String.valueOf(userId), projectNode.getUuid());
});
for (Long userId : longUserIdList) {
TaskMemberNode taskMemberNode = new TaskMemberNode();
taskMemberNode.setUserId(String.valueOf(userId));
taskMemberNode.setTaskId(projectNode.getUuid());
projectNodeMemberList.add(taskMemberNode);
}
}
// 设置仿真负责人
if (StringUtils.isNotBlank(projectNode.getPMemberList())) {
String[] userIdArr = projectNode.getPMemberList().split(",");
List<Long> longUserIdList = Arrays.stream(userIdArr).filter(s -> !s.isEmpty()).map(Long::valueOf).collect(Collectors.toList());
simulationTaskMemberService.saveTaskMemberList(projectNode.getUuid(), MemberTypeEnum.PRINCIPAL.getCode(), longUserIdList);
for (Long userId : longUserIdList) {
TaskMemberNode taskMemberNode = new TaskMemberNode();
taskMemberNode.setUserId(String.valueOf(userId));
taskMemberNode.setTaskId(projectNode.getUuid());
projectNodeMemberList.add(taskMemberNode);
}
}
List<TaskExtraNode> extraList = projectNode.getExtras();
@@ -1930,14 +1942,9 @@ public class ProjectServiceImpl extends BaseService implements IProjectService {
response = SdmResponse.failed("新增任务附加属性失败");
}
}
log.info("taskNodeMemberList为{}",taskNodeMemberList);
if (CollectionUtils.isNotEmpty(taskNodeMemberList)) {
taskNodeMemberList.forEach(projectNode -> projectNode.setCreateTime(createTime));
if (mapper.batchAddSimulationTaskMember(taskNodeMemberList) <= 0) {
response = SdmResponse.failed("新增任务成员属性失败");
return response;
}
for (TaskMemberNode taskMemberNode : taskNodeMemberList) {
log.info("更新用户:{}的权限",taskMemberNode.getUserId());
updatePermission(Long.valueOf(taskMemberNode.getUserId()),taskMemberNode.getTaskId());
}
}