1、任务列表接口,新增tagCode返回字段

2、operation接口,调整权限逻辑
3、modify接口优化修改仿真负责、执行、关注人的逻辑
This commit is contained in:
2026-01-28 19:02:57 +08:00
parent 80d38f17c7
commit 87597670c2
4 changed files with 209 additions and 91 deletions

View File

@@ -201,4 +201,16 @@ public class SpdmTaskVo extends BaseEntity {
private String pMembers;
// 2026-01-28新增需求前端需要tagCode进行页面展示
private String tag1Code;
private String tag2Code;
private String tag3Code;
private String tag4Code;
private String tag5Code;
private String tag6Code;
private String tag7Code;
private String tag8Code;
private String tag9Code;
private String tag10Code;
}

View File

@@ -246,5 +246,16 @@ public class SpdmNewTaskVo extends BaseEntity {
// 新增工位号的列
private String nodeCode;
// 2026-01-28新增需求前端需要tagCode进行页面展示
private String tag1Code;
private String tag2Code;
private String tag3Code;
private String tag4Code;
private String tag5Code;
private String tag6Code;
private String tag7Code;
private String tag8Code;
private String tag9Code;
private String tag10Code;
}

View File

@@ -274,88 +274,134 @@ public class ProjectServiceImpl extends BaseService implements IProjectService {
}
}
private void editTaskList(List<TaskEditNodeReq> taskEditNodeReqList) {
List<TaskExtraNode> taskExtraNodeList;
/**
* 处理任务扩展节点批量更新
* @param taskExtraNodeList 扩展节点列表
*/
private void handleTaskExtraNode(List<TaskExtraNode> taskExtraNodeList) {
if (CollectionUtils.isNotEmpty(taskExtraNodeList)) {
taskExtraNodeList.forEach(mapper::updateProjectNodeItemExtra);
}
}
/**
* 通用任务成员处理方法
* 统一处理:旧成员删除 → 新成员解析 → 新增成员消息通知 → 新成员保存 → 权限同步
* @param req 任务编辑请求
* @param memberType 成员类型(执行人/负责人/关注人)
* @param memberIdStr 前端传的成员ID拼接字符串逗号分隔
* @param needNotice 是否需要给新增成员发消息
* @param nodeName 节点名称消息通知用无需通知则传null
*/
private void handleTaskMember(TaskEditNodeReq req, MemberTypeEnum memberType,
String memberIdStr, boolean needNotice, String nodeName) {
String taskUuid = req.getUuid();
Integer typeCode = memberType.getCode();
// 1. 查询该任务下指定类型的旧成员
List<SimulationTaskMember> oldMemberList = simulationTaskMemberService.lambdaQuery()
.eq(SimulationTaskMember::getTaskId, taskUuid)
.eq(SimulationTaskMember::getType, typeCode)
.list();
// 提取旧成员的用户ID集合
List<Long> oldMemberIdList = Optional.ofNullable(oldMemberList)
.orElse(Collections.emptyList())
.stream()
.map(SimulationTaskMember::getUserId)
.toList();
// 2. 解析前端传的新成员ID集合空值/空字符串/空元素过滤)
List<Long> newMemberIdList = parseMemberIdStr(memberIdStr);
// 3. 删除旧成员(含权限同步,关注人无需权限)
if (CollectionUtils.isNotEmpty(oldMemberList)) {
// 批量删除数据库中的旧成员
simulationTaskMemberService.deleteTaskMemberList(taskUuid, typeCode);
// 批量删除旧成员权限(关注人无权限,跳过)
if (!MemberTypeEnum.ATTENTION.equals(memberType)) {
// TODO 优化:替换为批量权限删除方法 deleteBatchPermission(oldMemberIdList, taskUuid)
oldMemberIdList.forEach(userId -> deletePermission(userId, taskUuid));
}
}
// 4. 处理新成员(无新成员则直接返回)
if (CollectionUtils.isEmpty(newMemberIdList)) {
return;
}
// 5. 新增成员消息通知(仅执行人需要)
if (needNotice) {
log.info("newMemberIdList为{}",newMemberIdList);
log.info("oldMemberIdList为{}",oldMemberIdList);
// 过滤出【新增的执行人】(旧成员中没有的才发通知)
List<Long> noticeUserIdList = newMemberIdList.stream()
.filter(userId -> !oldMemberIdList.contains(userId))
.collect(Collectors.toList());
log.info("noticeUserIdList为{}",noticeUserIdList);
// 批量发消息
if (CollectionUtils.isNotEmpty(noticeUserIdList)) {
log.info("给用户:{},发送消息",noticeUserIdList);
noticeUserIdList.forEach(userId ->
sendMessage(MessageTemplateEnum.TASK_ISSUE, nodeName, String.valueOf(userId), taskUuid)
);
}
}
// 6. 批量保存新成员到数据库
simulationTaskMemberService.saveTaskMemberList(taskUuid, typeCode, newMemberIdList);
// 7. 批量同步新成员权限(关注人无权限)
if (!MemberTypeEnum.ATTENTION.equals(memberType)) {
// TODO 优化:替换为批量权限更新方法 updateBatchPermission(newMemberIdList, taskUuid)
newMemberIdList.forEach(userId -> updatePermission(userId, taskUuid));
}
}
/**
* 通用解析方法将逗号分隔的用户ID字符串解析为Long集合
* 处理场景空字符串、null、分割后空元素、非数字此处假设前端传合法数字如需容错可加try-catch
* @param memberIdStr 逗号分隔的用户ID如 "1,2,3"
* @return 解析后的Long类型用户ID集合无有效数据则返回空集合
*/
private List<Long> parseMemberIdStr(String memberIdStr) {
if (StringUtils.isBlank(memberIdStr)) {
return Collections.emptyList();
}
return Arrays.stream(memberIdStr.split(","))
.map(String::trim) // 处理前后空格,如 "1 , 2"
.filter(StringUtils::isNotBlank) // 过滤分割后的空元素,如 "1,,2"
.map(Long::valueOf)
.collect(Collectors.toList());
}
/**
* 批量编辑任务节点
*/
@Transactional(rollbackFor = Exception.class)
public void editTaskList(List<TaskEditNodeReq> taskEditNodeReqList) {
// 判空入口,避免空指针
if (CollectionUtils.isEmpty(taskEditNodeReqList)) {
return;
}
for (TaskEditNodeReq taskEditNodeReq : taskEditNodeReqList) {
String taskUuid = taskEditNodeReq.getUuid();
String nodeName = taskEditNodeReq.getNodeName();
// 1. 更新主节点信息 + 重命名目录
mapper.updateProjectNodeItem(taskEditNodeReq);
renameDirNew(taskEditNodeReq.getUuid(),taskEditNodeReq.getNodeName());
taskExtraNodeList = taskEditNodeReq.getTaskExtraNodeList();
if (CollectionUtils.isNotEmpty(taskExtraNodeList)) {
for (TaskExtraNode taskExtraNode : taskExtraNodeList) {
mapper.updateProjectNodeItemExtra(taskExtraNode);
}
}
// 查询当前任务关联的成员
List<SimulationTaskMember> oldMemberList = simulationTaskMemberService.lambdaQuery()
.eq(SimulationTaskMember::getTaskId, taskEditNodeReq.getUuid()).list();
// 当前任务的仿真执行人
List<SimulationTaskMember> oldEMemberList = List.of();
// 当前任务的仿真负责人
List<SimulationTaskMember> oldPMemberList = List.of();
if (CollectionUtils.isNotEmpty(oldMemberList)) {
oldEMemberList = oldMemberList.stream().filter(member -> MemberTypeEnum.EXECUTOR.getCode().equals(member.getType())).toList();
oldPMemberList = oldMemberList.stream().filter(member -> MemberTypeEnum.PRINCIPAL.getCode().equals(member.getType())).toList();
}
// 删除原来修改仿真执行人的所有权限信息
if (CollectionUtils.isNotEmpty(oldEMemberList)) {
for (SimulationTaskMember simulationTaskMember : oldEMemberList) {
// TODO 待优化成批量处理权限
deletePermission(simulationTaskMember.getUserId(), simulationTaskMember.getTaskId());
}
}
// 修改仿真执行人
if (StringUtils.isNotBlank(taskEditNodeReq.getEMemberList())) {
String[] userIdArr = taskEditNodeReq.getEMemberList().split(",");
List<Long> longUserIdList = Arrays.stream(userIdArr).filter(s -> !s.isEmpty()).map(Long::valueOf).collect(Collectors.toList());
if (CollectionUtils.isNotEmpty(oldEMemberList)) {
List<Long> oldEMemberIdList = oldEMemberList.stream().map(SimulationTaskMember::getUserId).collect(Collectors.toList());
// 发送消息通知
longUserIdList.forEach(i -> {
if (!oldEMemberIdList.contains(i)) {
sendMessage(MessageTemplateEnum.TASK_ISSUE, taskEditNodeReq.getNodeName(), String.valueOf(i), taskEditNodeReq.getUuid());
}
});
} else {
// 发送消息通知
longUserIdList.forEach(i -> {
sendMessage(MessageTemplateEnum.TASK_ISSUE, taskEditNodeReq.getNodeName(), String.valueOf(i), taskEditNodeReq.getUuid());
});
}
simulationTaskMemberService.deleteTaskMemberList(taskEditNodeReq.getUuid(), MemberTypeEnum.EXECUTOR.getCode());
simulationTaskMemberService.saveTaskMemberList(taskEditNodeReq.getUuid(), MemberTypeEnum.EXECUTOR.getCode(), longUserIdList);
// 保存当前仿真执行人的所有权限信息
for (Long userId : longUserIdList) {
updatePermission(userId, taskEditNodeReq.getUuid());
}
}
renameDirNew(taskUuid, nodeName);
// 删除原来修改仿真负责人的所有权限信息
if (CollectionUtils.isNotEmpty(oldPMemberList)) {
for (SimulationTaskMember simulationTaskMember : oldPMemberList) {
// TODO 待优化成批量处理权限
deletePermission(simulationTaskMember.getUserId(), simulationTaskMember.getTaskId());
}
}
// 修改仿真负责人
if (StringUtils.isNotBlank(taskEditNodeReq.getPMemberList())) {
String[] userIdArr = taskEditNodeReq.getPMemberList().split(",");
List<Long> longUserIdList = Arrays.stream(userIdArr).filter(s -> !s.isEmpty()).map(Long::valueOf).collect(Collectors.toList());
simulationTaskMemberService.deleteTaskMemberList(taskEditNodeReq.getUuid(), MemberTypeEnum.PRINCIPAL.getCode());
simulationTaskMemberService.saveTaskMemberList(taskEditNodeReq.getUuid(), MemberTypeEnum.PRINCIPAL.getCode(), longUserIdList);
// 保存当前仿真负责人的所有权限信息
for (Long userId : longUserIdList) {
updatePermission(userId, taskEditNodeReq.getUuid());
}
}
// 修改仿真关注人
if(StringUtils.isNotBlank(taskEditNodeReq.getPayAttentionMemberList())){
String[] userIdArr = taskEditNodeReq.getPayAttentionMemberList().split(",");
List<Long> longUserIdList = Arrays.stream(userIdArr).filter(s -> !s.isEmpty()).map(Long::valueOf).collect(Collectors.toList());
simulationTaskMemberService.deleteTaskMemberList(taskEditNodeReq.getUuid(), MemberTypeEnum.ATTENTION.getCode());
simulationTaskMemberService.saveTaskMemberList(taskEditNodeReq.getUuid(), MemberTypeEnum.ATTENTION.getCode(), longUserIdList);
}
// 2. 批量更新节点扩展信息
handleTaskExtraNode(taskEditNodeReq.getTaskExtraNodeList());
// 3. 处理执行人(需消息通知+权限同步)
handleTaskMember(taskEditNodeReq, MemberTypeEnum.EXECUTOR,
taskEditNodeReq.getEMemberList(), true, nodeName);
// 4. 处理负责人(仅权限同步,无消息通知)
handleTaskMember(taskEditNodeReq, MemberTypeEnum.PRINCIPAL,
taskEditNodeReq.getPMemberList(), false, null);
// 5. 处理关注人(无权限同步,无消息通知)
handleTaskMember(taskEditNodeReq, MemberTypeEnum.ATTENTION,
taskEditNodeReq.getPayAttentionMemberList(), false, null);
}
}
@@ -1785,7 +1831,7 @@ public class ProjectServiceImpl extends BaseService implements IProjectService {
}
/**
* 添加权限
* 更新权限
* @param userId
* @param uuid
*/

View File

@@ -331,10 +331,12 @@ public class TaskServiceImpl implements ITaskService {
}
}
// yangyang
String tagCode;
for (String tag : tagList) {
newTag = "new" + tag.replace("t", "T");
tag = tag.replace("T", "t");
// 2026-01-28新增需求前端需要tagCode进行页面展示
tagCode = tag.replace("T", "t") + "Code";
try {
eachNodeId = getTagProperty(task, tag);
} catch (Exception e) {
@@ -354,6 +356,7 @@ public class TaskServiceImpl implements ITaskService {
try {
setTagProperty(task, newTag, getTagProperty(task,tag));
setTagProperty(task, tag, eachNodeList.stream().map(SpdmNodeVo::getNodeName).collect(Collectors.joining(",")));
setTagProperty(task, tagCode, eachNodeList.stream().map(SpdmNodeVo::getNodeCode).collect(Collectors.joining(",")));
} catch (Exception e) {
throw new RuntimeException(e);
}
@@ -633,11 +636,13 @@ public class TaskServiceImpl implements ITaskService {
}
List<SpdmTaskMemberVo> eachTaskMemberList;
String newTag;
String tagCode;
for (SpdmTaskVo task : taskList) {
for (String tag : tagList) {
newTag = "new" + tag.replace("t", "T");
tag = tag.replace("T", "t");
// 2026-01-28新增需求前端需要tagCode进行页面展示
tagCode = tag.replace("T", "t") + "Code";
try {
eachNodeId = getTagProperty(task, tag);
} catch (Exception e) {
@@ -657,6 +662,7 @@ public class TaskServiceImpl implements ITaskService {
try {
setTagProperty(task, newTag, getTagProperty(task,tag));
setTagProperty(task, tag, eachNodeList.stream().map(SpdmNodeVo::getNodeName).collect(Collectors.joining(",")));
setTagProperty(task, tagCode, eachNodeList.stream().map(SpdmNodeVo::getNodeCode).collect(Collectors.joining(",")));
} catch (Exception e) {
throw new RuntimeException(e);
}
@@ -928,6 +934,42 @@ public class TaskServiceImpl implements ITaskService {
taskCountResp.setTodayTmrTasks(todayTmrTaskList.size());
}
/**
* 删除权限
* @param userId
* @param uuid
*/
private void deletePermission(Long userId,String uuid) {
// 删除文件权限
UpdatePermissionReq updatePermissionReq = new UpdatePermissionReq();
updatePermissionReq.setUserId(userId);
updatePermissionReq.setUuid(uuid);
Map<Long, Byte> userPermissions = new HashMap<>();
userPermissions.put(userId, FilePermissionEnum.ZERO.getValue());
updatePermissionReq.setUserPermissions(userPermissions);
log.info("编辑任务时,删除用户权限的参数为:{}",updatePermissionReq);
SdmResponse updatePermissionResponse = dataClientFeignClient.updatePermission(updatePermissionReq);
log.info("编辑时,删除用户权限的返回值为:{}",updatePermissionResponse);
}
/**
* 更新权限
* @param userId
* @param uuid
*/
private void updatePermission(Long userId,String uuid) {
// 更新文件权限
UpdatePermissionReq updatePermissionReq = new UpdatePermissionReq();
updatePermissionReq.setUserId(userId);
updatePermissionReq.setUuid(uuid);
Map<Long, Byte> userPermissions = new HashMap<>();
userPermissions.put(userId, FilePermissionEnum.ALL.getValue());
updatePermissionReq.setUserPermissions(userPermissions);
log.info("编辑任务时,更新用户权限的参数为:{}",updatePermissionReq);
SdmResponse updatePermissionResponse = dataClientFeignClient.updatePermission(updatePermissionReq);
log.info("编辑任务时,更新用户权限的返回值为:{}",updatePermissionResponse);
}
@Override
@Transactional(rollbackFor = Exception.class)
@@ -956,6 +998,12 @@ public class TaskServiceImpl implements ITaskService {
List<Long> oldEMemberIdList = new ArrayList<>();
if (CollectionUtils.isNotEmpty(oldEMemberList)) {
oldEMemberIdList = oldEMemberList.stream().map(SimulationTaskMember::getUserId).toList();
// 删除原来的仿真执行人信息
simulationTaskMemberService.deleteTaskMemberList(taskId, MemberTypeEnum.EXECUTOR.getCode());
// 删除原来的仿真执行人权限
for (SimulationTaskMember simulationTaskMember : oldEMemberList) {
deletePermission(simulationTaskMember.getUserId(),simulationTaskMember.getTaskId());
}
}
// 找出新的仿真执行人
List<Long> currentUserIdList = new ArrayList<>();
@@ -977,17 +1025,18 @@ public class TaskServiceImpl implements ITaskService {
}
log.info("老用户id为{}",oldEMemberIdList);
log.info("新用户id为{}",newUserIdList);
if (CollectionUtils.isNotEmpty(newUserIdList)) {
simulationTaskMemberService.deleteTaskMemberList(taskId, MemberTypeEnum.EXECUTOR.getCode());
if (CollectionUtils.isNotEmpty(currentUserIdList)) {
if (!simulationTaskMemberService.saveTaskMemberList(taskId, MemberTypeEnum.EXECUTOR.getCode(), currentUserIdList)) {
return SdmResponse.failed("编辑仿真执行人失败");
}
if (CollectionUtils.isNotEmpty(currentUserIdList)) {
if (!simulationTaskMemberService.saveTaskMemberList(taskId, MemberTypeEnum.EXECUTOR.getCode(), currentUserIdList)) {
return SdmResponse.failed("编辑仿真执行人失败");
}
// 发送消息通知
newUserIdList.forEach(i -> {
sendMessage(MessageTemplateEnum.TASK_ISSUE, req.getNodeName(), String.valueOf(i), taskId);
});
}
// 发送消息通知
newUserIdList.forEach(i -> {
sendMessage(MessageTemplateEnum.TASK_ISSUE, req.getNodeName(), String.valueOf(i), taskId);
});
// 保存当前的仿真执行人权限
for (Long currentUserId : currentUserIdList) {
updatePermission(currentUserId,taskId);
}