fix[project]: 同步待办时,如果任务有所属工位,则直接创建相应的文件夹

This commit is contained in:
2026-03-18 11:49:10 +08:00
parent 9a4ed22dbd
commit 1793765d8f
3 changed files with 54 additions and 5 deletions

View File

@@ -495,6 +495,7 @@ public class DemandServiceImpl extends BaseService implements IDemandService {
BeanUtils.copyProperties(task,tagReq);
if (NodeTypeEnum.TASK.getValue().equals(uuidOwnType)) {
tagReq.setTaskId(uuid);
tagReq.setTaskName(task.getTaskName());
}
createDirReq.setTagReq(tagReq);
log.info("修改需求同步修改任务时调用创建文件夹的参数为:{}", createDirReq);

View File

@@ -8,9 +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.BatchUpdatePermissionReq;
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.feign.inter.data.IDataFeignClient;
import com.sdm.common.utils.RandomUtil;
import com.sdm.project.common.MemberTypeEnum;
@@ -152,12 +150,43 @@ public class SimulationTaskServiceImpl extends ServiceImpl<SimulationTaskMapper,
List<BatchUpdatePermissionReq.FilePermissionItem> filePermissionItemList = new ArrayList<>();
for (SimulationDemand demand : demandList) {
SimulationTask task = convertDemandToTask(demand, tagMap);
String workspaceId = getWorkspaceIdFromTask(task, tagMap);
if (StringUtils.isNotBlank(workspaceId)) {
task.setNodeId(workspaceId);
// 任务对应需求
// 1.需求创建人对关联的任务文件夹有预览、下载权限
// 2.需求负责人(仿真负责人、确认人)对关联的任务文件夹有预览、下载权限
// 但是目前任务负责人就是从需求负责人继承的,权限也会继承
// 构建单个任务的权限配置(仅当需求创建人不为空时)
if (demand.getCreator() != null) {
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);
} else {
log.warn("需求创建人为空跳过任务权限配置需求ID: {}, 任务UUID: {}", demand.getUuid(), task.getUuid());
}
}
tasksToCreate.add(task);
taskExtrasToCreate.addAll(createTaskExtras(demand, task.getUuid()));
taskMembersToCreate.addAll(createTaskMembers(demand, task.getUuid()));
taskAttentionsToCreate.addAll(createTaskAttentions(demand, task.getUuid()));
}
// 批量更新需求创建人对任务文件夹的权限
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());
}
}
// 批量保存任务主表、扩展表、成员表、关注表
// this.saveBatch(tasksToCreate);
this.baseMapper.saveBatchTask(tasksToCreate);
@@ -176,6 +205,22 @@ public class SimulationTaskServiceImpl extends ServiceImpl<SimulationTaskMapper,
}
this.baseMapper.saveBatchTaskAttention(taskAttentionsToCreate);
}
// 批量创建任务目录和更新权限
for (SimulationTask task : tasksToCreate) {
// 任务挂载在workspace工位节点下需要从task的tag中获取workspaceId
String workspaceId = task.getNodeId();
if (StringUtils.isBlank(workspaceId)) {
continue;
}
TagReq tagReq = new TagReq();
BeanUtils.copyProperties(task,tagReq);
tagReq.setTaskId(task.getUuid());
tagReq.setTaskId(task.getTaskName() );
createTaskDir(task.getUuid(), workspaceId, task.getTaskName(),tagReq);
}
// 批量更新任务权限(使用批量接口)
batchUpdateTaskPermissions(tasksToCreate);
}
private SimulationTask convertDemandToTask(SimulationDemand demand, Map<String, String> tagMap) {
@@ -327,7 +372,7 @@ public class SimulationTaskServiceImpl extends ServiceImpl<SimulationTaskMapper,
/**
* 创建任务目录
*/
private void createTaskDir(String taskUuid, String parentNodeUuid, String taskName) {
private void createTaskDir(String taskUuid, String parentNodeUuid, String taskName,TagReq tagReq) {
try {
CreateDirReq createDirReq = new CreateDirReq();
createDirReq.setUuId(taskUuid);
@@ -335,7 +380,7 @@ public class SimulationTaskServiceImpl extends ServiceImpl<SimulationTaskMapper,
createDirReq.setUuIdOwnType(NodeTypeEnum.TASK.getValue());
createDirReq.setDirName(taskName);
createDirReq.setDirType(DirTypeEnum.PROJECT_NODE_DIR.getValue());
createDirReq.setTagReq(tagReq);
log.info("从需求创建任务时,调用创建文件夹的参数为:{}", createDirReq);
SdmResponse response = dataFeignClient.createDir(createDirReq);
log.info("从需求创建任务时,调用创建文件夹的返回值为:{}", response);

View File

@@ -3248,10 +3248,12 @@ public class TaskServiceImpl implements ITaskService {
createDirReq.setParentUuId(parentUuid);
createDirReq.setDirName(dirName);
createDirReq.setDirType(DirTypeEnum.PROJECT_NODE_DIR.getValue());
// 这里需要跳过权限校验
TagReq tagReq = new TagReq();
BeanUtils.copyProperties(task,tagReq);
if (NodeTypeEnum.TASK.getValue().equals(uuidOwnType)) {
tagReq.setTaskId(uuid);
tagReq.setTaskName(task.getTaskName());
}
createDirReq.setTagReq(tagReq);
log.info("批量修改任务时调用创建文件夹的参数为:{}", createDirReq);
@@ -4304,6 +4306,7 @@ public class TaskServiceImpl implements ITaskService {
public SdmResponse deleteDirById(String uuid) {
DelDirReq req = new DelDirReq();
req.setDelUuid(uuid);
req.setSkipPermissionCheck(true);
log.info("调用删除任务文件夹的参数为:{}", req);
SdmResponse response = dataClientFeignClient.delDir(req);
log.info("调用删除任务文件夹的返回值为:{}", response);