diff --git a/jeecg-module-supervision/src/main/java/org/jeecg/modules/tasklist/service/impl/TaskListDetialServiceImpl.java b/jeecg-module-supervision/src/main/java/org/jeecg/modules/tasklist/service/impl/TaskListDetialServiceImpl.java index 46a7149..7d5909d 100644 --- a/jeecg-module-supervision/src/main/java/org/jeecg/modules/tasklist/service/impl/TaskListDetialServiceImpl.java +++ b/jeecg-module-supervision/src/main/java/org/jeecg/modules/tasklist/service/impl/TaskListDetialServiceImpl.java @@ -20,12 +20,16 @@ import org.springframework.transaction.annotation.Transactional; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import java.util.Date; +import java.util.HashMap; import java.util.LinkedHashSet; import java.util.List; +import java.util.Map; import java.util.Objects; import lombok.extern.slf4j.Slf4j; import java.util.Set; +import com.alibaba.fastjson.JSONObject; + @Service public class TaskListDetialServiceImpl extends ServiceImpl implements ITaskListDetialService { @@ -204,19 +208,16 @@ public class TaskListDetialServiceImpl extends ServiceImpl uw = new UpdateWrapper<>(); - uw.eq("id", task.getId()); - if (clearStartTime) uw.set("start_time", null); - if (clearEndTime) uw.set("end_time", null); - taskListDetialMapper.update(null, uw); - } - taskListDetialMapper.appendAssigner(task.getId(), userId, loginUser.getRealname()); } @@ -544,43 +545,108 @@ public class TaskListDetialServiceImpl extends ServiceImpl allUsernames = new LinkedHashSet<>(); + Set allUserIds = new LinkedHashSet<>(); for (TaskListDetial task : list) { if (oConvertUtils.isNotEmpty(task.getCreateBy())) { - List users = sysBaseAPI.queryUsersByUsernames(task.getCreateBy()); - if (users != null && !users.isEmpty()) { - task.setCreateByName(users.get(0).getString("realname")); + allUsernames.add(task.getCreateBy()); + } + collectUserIds(task.getAssigneeId(), allUserIds); + collectUserIds(task.getParticipantId(), allUserIds); + collectUserIds(task.getFollowersId(), allUserIds); + } + + // 2. 批量查询,构建映射表 + Map usernameToRealname = new HashMap<>(); + if (!allUsernames.isEmpty()) { + List users = sysBaseAPI.queryUsersByUsernames(String.join(",", allUsernames)); + if (users != null) { + for (JSONObject u : users) { + usernameToRealname.put(u.getString("username"), u.getString("realname")); + } + } + } + + Map idToRealname = new HashMap<>(); + if (!allUserIds.isEmpty()) { + List users = sysBaseAPI.queryUsersByIds(String.join(",", allUserIds)); + if (users != null) { + for (JSONObject u : users) { + idToRealname.put(u.getString("id"), u.getString("realname")); + } + } + } + + // 3. 从映射表填充,无需再查数据库 + for (TaskListDetial task : list) { + if (oConvertUtils.isNotEmpty(task.getCreateBy())) { + String name = usernameToRealname.get(task.getCreateBy()); + if (name != null) { + task.setCreateByName(name); } } if (oConvertUtils.isNotEmpty(task.getAssigneeId()) && oConvertUtils.isEmpty(task.getAssigneeName())) { - task.setAssigneeName(translateUserIdsToNames(task.getAssigneeId())); + task.setAssigneeName(buildNamesFromMap(task.getAssigneeId(), idToRealname)); } if (oConvertUtils.isNotEmpty(task.getParticipantId()) && oConvertUtils.isEmpty(task.getParticipantName())) { - task.setParticipantName(translateUserIdsToNames(task.getParticipantId())); + task.setParticipantName(buildNamesFromMap(task.getParticipantId(), idToRealname)); } if (oConvertUtils.isNotEmpty(task.getFollowersId()) && oConvertUtils.isEmpty(task.getFollowersName())) { - task.setFollowersName(translateUserIdsToNames(task.getFollowersId())); + task.setFollowersName(buildNamesFromMap(task.getFollowersId(), idToRealname)); } } } + private void collectUserIds(String idsStr, Set idSet) { + if (oConvertUtils.isEmpty(idsStr)) { + return; + } + for (String id : idsStr.split(",")) { + String trimmed = id.trim(); + if (oConvertUtils.isNotEmpty(trimmed)) { + idSet.add(trimmed); + } + } + } + + private String buildNamesFromMap(String idsStr, Map idToRealname) { + if (oConvertUtils.isEmpty(idsStr) || idToRealname.isEmpty()) { + return null; + } + StringBuilder sb = new StringBuilder(); + for (String id : idsStr.split(",")) { + String trimmed = id.trim(); + if (oConvertUtils.isNotEmpty(trimmed)) { + String name = idToRealname.get(trimmed); + if (name != null) { + if (sb.length() > 0) { + sb.append(","); + } + sb.append(name); + } + } + } + return sb.length() > 0 ? sb.toString() : null; + } + private String translateUserIdsToNames(String ids) { if (oConvertUtils.isEmpty(ids)) { return null; } - String[] idArr = ids.split(","); - StringBuilder names = new StringBuilder(); - for (String id : idArr) { - if (oConvertUtils.isNotEmpty(id)) { - LoginUser user = sysBaseAPI.getUserById(id.trim()); - if (user != null) { - if (names.length() > 0) { - names.append(","); - } - names.append(user.getRealname()); - } - } + List users = sysBaseAPI.queryUsersByIds(ids); + if (users == null || users.isEmpty()) { + return null; } - return names.length() > 0 ? names.toString() : null; + StringBuilder names = new StringBuilder(); + for (JSONObject user : users) { + if (names.length() > 0) { + names.append(","); + } + names.append(user.getString("realname")); + } + return names.toString(); } private String mergeIds(String existingIds, String newIds) { diff --git a/jeecg-module-supervision/src/main/java/org/jeecg/modules/tasklist/service/impl/TaskListServiceImpl.java b/jeecg-module-supervision/src/main/java/org/jeecg/modules/tasklist/service/impl/TaskListServiceImpl.java index dd90ee2..a1b75e1 100644 --- a/jeecg-module-supervision/src/main/java/org/jeecg/modules/tasklist/service/impl/TaskListServiceImpl.java +++ b/jeecg-module-supervision/src/main/java/org/jeecg/modules/tasklist/service/impl/TaskListServiceImpl.java @@ -28,9 +28,15 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import java.io.Serializable; import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.Collection; import java.util.Objects; +import java.util.stream.Collectors; + +import com.alibaba.fastjson.JSONObject; /** * @Description: 任务清单表 @@ -549,42 +555,62 @@ public class TaskListServiceImpl extends ServiceImpl i } private List enrichListSummaries(List lists, String currentUserId) { + if (lists == null || lists.isEmpty()) { + return lists; + } + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); for (TaskList list : lists) { if (list.getCreateTime() != null) { list.setCreateTimeStr(sdf.format(list.getCreateTime())); } + } - LambdaQueryWrapper ownerQuery = new LambdaQueryWrapper<>(); - ownerQuery.eq(TaskListPermission::getMainId, list.getId()); - ownerQuery.eq(TaskListPermission::getPermission, "1"); - TaskListPermission owner = taskListPermissionMapper.selectOne(ownerQuery); - if (owner != null) { - LoginUser ownerUser = sysBaseAPI.getUserById(owner.getUserId()); - if (ownerUser != null) { - list.setOwnerName(ownerUser.getRealname()); - } - if (currentUserId != null && currentUserId.equals(owner.getUserId())) { - list.setMyPermission("1"); + // 1. 收集所有清单ID,批量查询权限表 + List mainIds = lists.stream().map(TaskList::getId).collect(Collectors.toList()); + List allPerms = taskListPermissionMapper.selectList( + new LambdaQueryWrapper().in(TaskListPermission::getMainId, mainIds) + ); + + // 2. 收集所有用户ID,批量查询用户 + java.util.Set allUserIds = new java.util.LinkedHashSet<>(); + for (TaskListPermission perm : allPerms) { + allUserIds.add(perm.getUserId()); + } + Map idToName = new HashMap<>(); + if (!allUserIds.isEmpty()) { + List users = sysBaseAPI.queryUsersByIds(String.join(",", allUserIds)); + if (users != null) { + for (JSONObject u : users) { + idToName.put(u.getString("id"), u.getString("realname")); } } + } - LambdaQueryWrapper collabQuery = new LambdaQueryWrapper<>(); - collabQuery.eq(TaskListPermission::getMainId, list.getId()); - collabQuery.ne(TaskListPermission::getPermission, "1"); - List collabs = taskListPermissionMapper.selectList(collabQuery); - if (!collabs.isEmpty()) { - List collabUserIds = collabs.stream().map(TaskListPermission::getUserId).collect(java.util.stream.Collectors.toList()); - List collabNames = new java.util.ArrayList<>(); - for (String collabUserId : collabUserIds) { - LoginUser collabUser = sysBaseAPI.getUserById(collabUserId); - if (collabUser != null && collabUser.getRealname() != null) { - collabNames.add(collabUser.getRealname()); + // 3. 按清单分组,从映射表填充 + Map> permByMainId = allPerms.stream() + .collect(Collectors.groupingBy(TaskListPermission::getMainId)); + + for (TaskList list : lists) { + List perms = permByMainId.getOrDefault(list.getId(), java.util.Collections.emptyList()); + List collabNames = new ArrayList<>(); + for (TaskListPermission perm : perms) { + String name = idToName.get(perm.getUserId()); + if (name == null) continue; + if ("1".equals(perm.getPermission())) { + list.setOwnerName(name); + if (currentUserId != null && currentUserId.equals(perm.getUserId())) { + list.setMyPermission("1"); } + } else { + collabNames.add(name); } + } + if (!collabNames.isEmpty()) { list.setCollaboratorNames(String.join(", ", collabNames)); } } + return lists; } @@ -595,16 +621,27 @@ public class TaskListServiceImpl extends ServiceImpl i query.orderByAsc(TaskListPermission::getCreateTime); List perms = taskListPermissionMapper.selectList(query); - List result = new java.util.ArrayList<>(); + if (perms.isEmpty()) { + return java.util.Collections.emptyList(); + } + + // 批量查询所有协作用户 + String userIds = perms.stream().map(TaskListPermission::getUserId).collect(Collectors.joining(",")); + Map idToName = new HashMap<>(); + List users = sysBaseAPI.queryUsersByIds(userIds); + if (users != null) { + for (JSONObject u : users) { + idToName.put(u.getString("id"), u.getString("realname")); + } + } + + List result = new ArrayList<>(); for (TaskListPermission perm : perms) { CollaboratorVO vo = new CollaboratorVO(); vo.setPermissionId(perm.getId()); vo.setUserId(perm.getUserId()); vo.setPermission(perm.getPermission()); - LoginUser user = sysBaseAPI.getUserById(perm.getUserId()); - if (user != null) { - vo.setUsername(user.getRealname()); - } + vo.setUsername(idToName.getOrDefault(perm.getUserId(), null)); result.add(vo); } return result;