1、任务列表接口,新增tagCode返回字段
2、operation接口,调整权限逻辑 3、modify接口优化修改仿真负责、执行、关注人的逻辑
This commit is contained in:
@@ -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;
|
||||
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
}
|
||||
|
||||
@@ -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
|
||||
*/
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user