This commit is contained in:
2026-02-02 10:20:55 +08:00
5 changed files with 112 additions and 34 deletions

View File

@@ -203,6 +203,10 @@ public class ProcessController implements IFlowableFeignClient {
/**
* 流程节点继续执行(完成人工节点/或者等待用户输入后继续手动执行的节点)
*
* 完成 UserTask 并继续
* ServiceTask 前置人工节点 serviceTask _waitUser 在 ServiceTask 前插入的等待用户确认的 UserTaskManual 模式)
* 普通人工任务 userTask 原始 UserTask BPMN 中原本的 UserTask
*
* @param req
* @return
*/
@@ -214,6 +218,13 @@ public class ProcessController implements IFlowableFeignClient {
/**
* 异步任务回调接口,用于唤醒等待的流程实例
* 唤醒 ReceiveTask 并继续
* 触发的是 ReceiveTask_wait 节点),通过 runtimeService.trigger() 继续流转
*
* 适用场景 节点类型 说明
* HPC 异步计算 ReceiveTask _wait HPC 提交任务后,流程停在 _wait等待 HPC 回调
* 本地应用 ReceiveTask _wait 本地应用提交后,流程停在 _wait等待本地应用回调
* 其他异步任务 ReceiveTask _wait 流程停在 _wait由外部系统通过 asyncTaskId 回调
*
* @param request 包含异步任务ID和执行结果的请求对象
*/

View File

@@ -152,6 +152,6 @@ public class SpdmAddDemandReq extends BaseEntity {
/**
* 是否为绿元亨项目
*/
private boolean isLyric=false;
private Boolean isLyric=false;
}

View File

@@ -234,7 +234,7 @@ public class DemandServiceImpl extends BaseService implements IDemandService {
log.info("创建需求时,更新需求创建人和需求仿真负责人(确认人)权限的返回值为:{}",updatePermissionResponse);
// 只有绿元亨需要在创建需求的同时创建任务
if (req.isLyric()) {
if (req.getIsLyric()) {
SimulationDemand demand = new SimulationDemand();
BeanUtils.copyProperties(req, demand);
simulationTaskService.batchCreateTaskFromDemand(Collections.singletonList(demand));
@@ -660,6 +660,11 @@ public class DemandServiceImpl extends BaseService implements IDemandService {
String parentUuid = getLastNodeId(taskNodeList.get(0));
log.info("下发任务时parentId为{}", parentUuid);
String demandId = req.getDemandId();
// 关联的需求
SpdmDemandVo demand = mapper.getDemandListById(Collections.singletonList(demandId)).get(0);
Long demandCreator = demand.getCreator();
List<BatchUpdatePermissionReq.FilePermissionItem> filePermissions = new ArrayList<>();
List<TaskMemberNode> projectNodeMemberList = new ArrayList<>();
List<TaskExtraNode> projectNodeExtraList = new ArrayList<>();
List<TaskNode> allPerformanceList = new ArrayList<>();
@@ -683,14 +688,21 @@ public class DemandServiceImpl extends BaseService implements IDemandService {
taskMemberNode.setUserId(userId);
taskMemberNode.setType(MemberTypeEnum.PRINCIPAL.getCode());
projectNodeMemberList.add(taskMemberNode);
// 更新文件权限
UpdatePermissionReq updatePermissionReq = new UpdatePermissionReq();
updatePermissionReq.setUserId(Long.valueOf(userId));
updatePermissionReq.setUuid(task.getUuid());
// 更新需求负责人对需求文件权限
BatchUpdatePermissionReq.FilePermissionItem item = new BatchUpdatePermissionReq.FilePermissionItem();
item.setUuid(task.getUuid());
Map<Long, Byte> userPermissions = new HashMap<>();
userPermissions.put(jobNumber, FilePermissionEnum.ALL.getValue());
updatePermissionReq.setUserPermissions(userPermissions);
SdmResponse updatePermissionResponse = dataFeignClient.updatePermission(updatePermissionReq);
userPermissions.put(Long.valueOf(userId), FilePermissionEnum.ALL.getValue());
item.setUserPermissions(userPermissions);
filePermissions.add(item);
// 更新需求负责人对任务文件夹的权限
BatchUpdatePermissionReq.FilePermissionItem demandItem = new BatchUpdatePermissionReq.FilePermissionItem();
demandItem.setUuid(task.getUuid());
Map<Long, Byte> demandUserPermissions = new HashMap<>();
demandUserPermissions.put(demandCreator, FilePermissionEnum.BASE.getValue());
demandItem.setUserPermissions(demandUserPermissions);
filePermissions.add(demandItem);
}
}
if (StringUtils.isNotBlank(eUserIdStr)) {
@@ -704,16 +716,13 @@ public class DemandServiceImpl extends BaseService implements IDemandService {
projectNodeMemberList.add(taskMemberNode);
// 发送消息通知
sendMessage(MessageTemplateEnum.TASK_ISSUE, task.getNodeName(), userId, task.getUuid());
// 更新文件权限
UpdatePermissionReq updatePermissionReq = new UpdatePermissionReq();
updatePermissionReq.setUserId(Long.valueOf(userId));
updatePermissionReq.setUuid(task.getUuid());
// 更新需求执行人对需求文件权限
BatchUpdatePermissionReq.FilePermissionItem item = new BatchUpdatePermissionReq.FilePermissionItem();
item.setUuid(task.getUuid());
Map<Long, Byte> userPermissions = new HashMap<>();
userPermissions.put(jobNumber, FilePermissionEnum.ALL.getValue());
updatePermissionReq.setUserPermissions(userPermissions);
log.info("下发任务时,更新用户权限的参数为:{}",updatePermissionReq);
SdmResponse updatePermissionResponse = dataFeignClient.updatePermission(updatePermissionReq);
log.info("下发任务时,更新用户权限的返回值为:{}",updatePermissionResponse);
userPermissions.put(Long.valueOf(userId), FilePermissionEnum.ALL.getValue());
item.setUserPermissions(userPermissions);
filePermissions.add(item);
}
}
List<TaskExtraNode> extraList = task.getExtras();
@@ -785,16 +794,21 @@ public class DemandServiceImpl extends BaseService implements IDemandService {
createDir(taskNode.getUuid(), parentUuid, taskNode.getNodeName());
}
for (TaskNode taskNode : taskNodeList) {
// 更新文件权限
UpdatePermissionReq updatePermissionReq = new UpdatePermissionReq();
updatePermissionReq.setUserId(jobNumber);
updatePermissionReq.setUuid(taskNode.getUuid());
// 更新需求创建人对需求文件权限
BatchUpdatePermissionReq.FilePermissionItem item = new BatchUpdatePermissionReq.FilePermissionItem();
item.setUuid(taskNode.getUuid());
Map<Long, Byte> userPermissions = new HashMap<>();
userPermissions.put(jobNumber, FilePermissionEnum.ALL.getValue());
updatePermissionReq.setUserPermissions(userPermissions);
log.info("下发任务时,更新用户权限的参数为:{}",updatePermissionReq);
SdmResponse updatePermissionResponse = dataFeignClient.updatePermission(updatePermissionReq);
log.info("下发任务时,更新用户权限的返回值为:{}",updatePermissionResponse);
item.setUserPermissions(userPermissions);
filePermissions.add(item);
// 更新需求创建人对任务文件夹的权限
BatchUpdatePermissionReq.FilePermissionItem demandItem = new BatchUpdatePermissionReq.FilePermissionItem();
demandItem.setUuid(taskNode.getUuid());
Map<Long, Byte> demandUserPermissions = new HashMap<>();
demandUserPermissions.put(demandCreator, FilePermissionEnum.BASE.getValue());
demandItem.setUserPermissions(demandUserPermissions);
filePermissions.add(demandItem);
}
}
if (CollectionUtils.isNotEmpty(projectNodeExtraList)) {
@@ -819,15 +833,13 @@ public class DemandServiceImpl extends BaseService implements IDemandService {
return response;
}
for (TaskNode taskNode : allPerformanceList) {
UpdatePermissionReq updatePermissionReq = new UpdatePermissionReq();
updatePermissionReq.setUserId(jobNumber);
updatePermissionReq.setUuid(taskNode.getUuid());
// 更新文件权限
BatchUpdatePermissionReq.FilePermissionItem item = new BatchUpdatePermissionReq.FilePermissionItem();
item.setUuid(taskNode.getUuid());
Map<Long, Byte> userPermissions = new HashMap<>();
userPermissions.put(jobNumber, FilePermissionEnum.ALL.getValue());
updatePermissionReq.setUserPermissions(userPermissions);
log.info("下发任务时,更新用户权限的参数为:{}",updatePermissionReq);
SdmResponse updatePermissionResponse = dataFeignClient.updatePermission(updatePermissionReq);
log.info("下发任务时,更新用户权限的返回值为:{}",updatePermissionResponse);
userPermissions.put(Long.valueOf(jobNumber), FilePermissionEnum.ALL.getValue());
item.setUserPermissions(userPermissions);
filePermissions.add(item);
}
List<TaskNodePo> newTaskNodeList = projectMapper.getTaskListByNodeIdList(allPerformanceList.stream().map(TaskNode::getTaskId).toList());
@@ -863,6 +875,20 @@ public class DemandServiceImpl extends BaseService implements IDemandService {
return response;
}
}
// 执行批量更新权限
if (CollectionUtils.isNotEmpty(filePermissions)) {
BatchUpdatePermissionReq batchReq = new BatchUpdatePermissionReq();
batchReq.setFilePermissions(filePermissions);
log.info("从需求分发任务时,批量更新权限,任务数量:{}", filePermissions.size());
SdmResponse response1 = dataFeignClient.batchUpdatePermission(batchReq);
log.info("从需求分发任务时,批量更新权限结果:{}", response1);
if (!response1.isSuccess()) {
log.error("批量更新任务权限失败:{}", response1.getMessage());
}
}
}
}
return response;

View File

@@ -165,6 +165,7 @@ public class SimulationTaskServiceImpl extends ServiceImpl<SimulationTaskMapper,
List<Long> longUserIdList = Arrays.stream(userIdArr).filter(s -> !s.isEmpty()).map(Long::valueOf).collect(Collectors.toList());
simulationTaskMemberService.deleteTaskMemberList(req.getUuid(), MemberTypeEnum.EXECUTOR.getCode());
simulationTaskMemberService.saveTaskMemberList(req.getUuid(), MemberTypeEnum.EXECUTOR.getCode(), longUserIdList);
// 对关联的需求文件夹设置权限
}
// 设置仿真负责人
if (StringUtils.isNotBlank(req.getPMemberList())) {
@@ -189,13 +190,43 @@ public class SimulationTaskServiceImpl extends ServiceImpl<SimulationTaskMapper,
Map<String, String> tagMap = tagMapService.getTagMapName();
List<BatchUpdatePermissionReq.FilePermissionItem> filePermissionItemList = new ArrayList<>();
for (SimulationDemand demand : demandList) {
SimulationTask task = convertDemandToTask(demand, tagMap);
// 任务挂载在workspace工位节点下需要从task的tag中获取workspaceId
String workspaceId = getWorkspaceIdFromTask(task, tagMap);
task.setNodeId(workspaceId);
tasksToCreate.add(task);
taskExtrasToCreate.addAll(createTaskExtras(demand, task.getUuid()));
taskMembersToCreate.addAll(createTaskMembers(demand, task.getUuid()));
taskAttentionsToCreate.addAll(createTaskAttentions(demand, task.getUuid()));
// 任务对应需求
// 1.需求创建人对关联的任务文件夹有预览、下载权限
// 2.需求负责人(仿真负责人、确认人)对关联的任务文件夹有预览、下载权限
// 但是目前任务负责人就是从需求负责人继承的,权限也会继承
// 构建单个任务的权限配置
BatchUpdatePermissionReq.FilePermissionItem item = new BatchUpdatePermissionReq.FilePermissionItem();
item.setUuid(task.getUuid());
Map<Long, Byte> userPermissions = new HashMap<>();
userPermissions.put(demand.getCreator(), FilePermissionEnum.BASE.getValue());
item.setUserPermissions(userPermissions);
filePermissionItemList.add(item);
}
// 批量更新需求创建人对任务文件夹的权限
if (CollectionUtils.isNotEmpty(filePermissionItemList)) {
BatchUpdatePermissionReq batchReq = new BatchUpdatePermissionReq();
batchReq.setFilePermissions(filePermissionItemList);
log.info("从需求批量创建任务时,批量更新需求创建人对任务文件夹的权限,任务数量:{}", filePermissionItemList.size());
SdmResponse response = dataFeignClient.batchUpdatePermission(batchReq);
log.info("从需求批量创建任务时,批量更新需求创建人对任务文件夹的权限结果:{}", response);
if (!response.isSuccess()) {
log.error("批量更新任务权限失败:{}", response.getMessage());
}
}
// 批量保存任务主表、扩展表、成员表、关注表

View File

@@ -709,6 +709,15 @@ public class TaskServiceImpl implements ITaskService {
if (ObjectUtils.isNotEmpty(userResp) && ObjectUtils.isNotEmpty(userResp.getData())) {
newTaskVo.setSubmitterName(userResp.getData().getNickname());
}
} else {
// 提出人:需求的创建人没有就取任务的创建人
newTaskVo.setSubmitter(newTaskVo.getCreator());
SdmResponse<CIDUserResp> userResp = sysUserFeignClient.queryUserDetail(
UserQueryReq.builder().userId(newTaskVo.getCreator()).build()
);
if (ObjectUtils.isNotEmpty(userResp) && ObjectUtils.isNotEmpty(userResp.getData())) {
newTaskVo.setSubmitterName(userResp.getData().getNickname());
}
}
}
@@ -1352,6 +1361,7 @@ public class TaskServiceImpl implements ITaskService {
for (Long currentUserId : currentUserIdList) {
updatePermission(currentUserId,taskId);
}
// 对关联的需求文件夹设置权限
// if (StringUtils.isNotBlank(req.getEMemberList())) {