消除人员重复bug
This commit is contained in:
parent
b45766d377
commit
d4b06d9c66
|
@ -18,6 +18,7 @@ import lombok.RequiredArgsConstructor;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
|
@ -50,11 +51,22 @@ public class ProjectMemberServiceImpl extends ServiceImpl<ProjectMemberMapper, P
|
||||||
// 查询团队成员列表
|
// 查询团队成员列表
|
||||||
List<ProjectMemberResp> list = this.baseMapper.queryTeamMembers(query);
|
List<ProjectMemberResp> list = this.baseMapper.queryTeamMembers(query);
|
||||||
|
|
||||||
|
// 按用户ID去重,保留第一个记录
|
||||||
|
Map<String, ProjectMemberResp> uniqueMembers = list.stream()
|
||||||
|
.collect(Collectors.toMap(
|
||||||
|
ProjectMemberResp::getUserId,
|
||||||
|
member -> member,
|
||||||
|
(existing, replacement) -> existing // 如果有重复,保留第一个
|
||||||
|
));
|
||||||
|
|
||||||
|
// 转换为列表
|
||||||
|
List<ProjectMemberResp> uniqueList = new ArrayList<>(uniqueMembers.values());
|
||||||
|
|
||||||
// 丰富成员信息
|
// 丰富成员信息
|
||||||
enrichMemberInfo(list);
|
enrichMemberInfo(uniqueList);
|
||||||
|
|
||||||
// 返回分页结果
|
// 返回分页结果
|
||||||
return PageResult.ok(list);
|
return PageResult.ok(uniqueList);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -86,22 +98,53 @@ public class ProjectMemberServiceImpl extends ServiceImpl<ProjectMemberMapper, P
|
||||||
UserEntity user = userMap.get(member.getUserId());
|
UserEntity user = userMap.get(member.getUserId());
|
||||||
if (user != null) {
|
if (user != null) {
|
||||||
// 映射前端需要的字段
|
// 映射前端需要的字段
|
||||||
member.setName(user.getName());
|
member.setName(user.getName() != null ? user.getName() : "");
|
||||||
member.setPhone(user.getMobile());
|
member.setPhone(user.getMobile() != null ? user.getMobile() : "");
|
||||||
member.setEmail(user.getEmail());
|
member.setEmail(user.getEmail() != null ? user.getEmail() : "");
|
||||||
|
|
||||||
// 保留原有字段用于内部处理
|
// 保留原有字段用于内部处理
|
||||||
member.setUserAccount(user.getAccount());
|
member.setUserAccount(user.getAccount() != null ? user.getAccount() : "");
|
||||||
member.setUserAvatar(user.getAvatar());
|
member.setUserAvatar(user.getAvatar() != null ? user.getAvatar() : "");
|
||||||
|
} else {
|
||||||
|
// 如果用户信息不存在,设置默认值
|
||||||
|
member.setName("");
|
||||||
|
member.setPhone("");
|
||||||
|
member.setEmail("");
|
||||||
|
member.setUserAccount("");
|
||||||
|
member.setUserAvatar("");
|
||||||
}
|
}
|
||||||
|
|
||||||
// 映射岗位信息 - 使用角色类型描述作为岗位
|
// 映射岗位信息 - 使用角色类型描述作为岗位
|
||||||
member.setPosition(member.getRoleTypeDesc());
|
member.setPosition(member.getRoleTypeDesc() != null ? member.getRoleTypeDesc() : "");
|
||||||
|
|
||||||
// 映射技能标签 - 暂时设为空,因为数据库中没有这个字段
|
// 映射技能标签 - 暂时设为空,因为数据库中没有这个字段
|
||||||
member.setSkills("");
|
member.setSkills("");
|
||||||
|
|
||||||
|
// 处理其他可能为NULL的字段
|
||||||
|
if (member.getTurbineId() == null) {
|
||||||
|
member.setTurbineId("");
|
||||||
|
}
|
||||||
|
if (member.getTurbineName() == null) {
|
||||||
|
member.setTurbineName("");
|
||||||
|
}
|
||||||
|
if (member.getTaskGroupId() == null) {
|
||||||
|
member.setTaskGroupId("");
|
||||||
|
}
|
||||||
|
if (member.getTaskGroupName() == null) {
|
||||||
|
member.setTaskGroupName("");
|
||||||
|
}
|
||||||
|
if (member.getTaskId() == null) {
|
||||||
|
member.setTaskId("");
|
||||||
|
}
|
||||||
|
if (member.getTaskName() == null) {
|
||||||
|
member.setTaskName("");
|
||||||
|
}
|
||||||
|
if (member.getRemark() == null) {
|
||||||
|
member.setRemark("");
|
||||||
|
}
|
||||||
|
|
||||||
// 设置状态描述
|
// 设置状态描述
|
||||||
|
if (member.getStatus() != null) {
|
||||||
if ("ACTIVE".equals(member.getStatus())) {
|
if ("ACTIVE".equals(member.getStatus())) {
|
||||||
member.setStatusDesc("在职");
|
member.setStatusDesc("在职");
|
||||||
} else if ("INACTIVE".equals(member.getStatus())) {
|
} else if ("INACTIVE".equals(member.getStatus())) {
|
||||||
|
@ -111,8 +154,12 @@ public class ProjectMemberServiceImpl extends ServiceImpl<ProjectMemberMapper, P
|
||||||
} else {
|
} else {
|
||||||
member.setStatusDesc("未知");
|
member.setStatusDesc("未知");
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
member.setStatusDesc("未知");
|
||||||
|
}
|
||||||
|
|
||||||
// 设置角色类型描述
|
// 设置角色类型描述
|
||||||
|
if (member.getRoleType() != null) {
|
||||||
if ("PROJECT_MANAGER".equals(member.getRoleType())) {
|
if ("PROJECT_MANAGER".equals(member.getRoleType())) {
|
||||||
member.setRoleTypeDesc("项目经理");
|
member.setRoleTypeDesc("项目经理");
|
||||||
} else if ("SAFETY_OFFICER".equals(member.getRoleType())) {
|
} else if ("SAFETY_OFFICER".equals(member.getRoleType())) {
|
||||||
|
@ -126,46 +173,16 @@ public class ProjectMemberServiceImpl extends ServiceImpl<ProjectMemberMapper, P
|
||||||
} else {
|
} else {
|
||||||
member.setRoleTypeDesc("其他");
|
member.setRoleTypeDesc("其他");
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
member.setRoleTypeDesc("其他");
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ProjectMemberResp createTeamMember(TeamMemberReq req) {
|
public ProjectMemberResp createTeamMember(TeamMemberReq req) {
|
||||||
// 验证项目是否存在
|
// 验证请求参数
|
||||||
ProjectEntity project = projectService.getById(req.getProjectId());
|
validateTeamMemberRequest(req);
|
||||||
if (project == null) {
|
|
||||||
throw new ServiceException(Message.PROJECT_ID_IS_NOT_EXIST);
|
|
||||||
}
|
|
||||||
|
|
||||||
// 验证用户是否存在
|
|
||||||
UserEntity user = userService.getById(req.getUserId());
|
|
||||||
if (user == null) {
|
|
||||||
throw new ServiceException("用户不存在");
|
|
||||||
}
|
|
||||||
|
|
||||||
// 验证机组是否存在(如果指定了机组)
|
|
||||||
if (StrUtil.isNotBlank(req.getTurbineId())) {
|
|
||||||
TurbineEntity turbine = turbineService.getById(req.getTurbineId());
|
|
||||||
if (turbine == null) {
|
|
||||||
throw new ServiceException("机组不存在");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 验证任务组是否存在(如果指定了任务组)
|
|
||||||
if (StrUtil.isNotBlank(req.getTaskGroupId())) {
|
|
||||||
ProjectTaskGroupEntity taskGroup = projectTaskGroupService.getById(req.getTaskGroupId());
|
|
||||||
if (taskGroup == null) {
|
|
||||||
throw new ServiceException("任务组不存在");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 验证任务是否存在(如果指定了任务)
|
|
||||||
if (StrUtil.isNotBlank(req.getTaskId())) {
|
|
||||||
ProjectTaskEntity task = projectTaskService.getById(req.getTaskId());
|
|
||||||
if (task == null) {
|
|
||||||
throw new ServiceException("任务不存在");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 创建项目成员实体
|
// 创建项目成员实体
|
||||||
ProjectMemberEntity entity = new ProjectMemberEntity();
|
ProjectMemberEntity entity = new ProjectMemberEntity();
|
||||||
|
@ -186,41 +203,8 @@ public class ProjectMemberServiceImpl extends ServiceImpl<ProjectMemberMapper, P
|
||||||
throw new ServiceException("项目成员不存在");
|
throw new ServiceException("项目成员不存在");
|
||||||
}
|
}
|
||||||
|
|
||||||
// 验证项目是否存在
|
// 验证请求参数
|
||||||
ProjectEntity project = projectService.getById(req.getProjectId());
|
validateTeamMemberRequest(req);
|
||||||
if (project == null) {
|
|
||||||
throw new ServiceException(Message.PROJECT_ID_IS_NOT_EXIST);
|
|
||||||
}
|
|
||||||
|
|
||||||
// 验证用户是否存在
|
|
||||||
UserEntity user = userService.getById(req.getUserId());
|
|
||||||
if (user == null) {
|
|
||||||
throw new ServiceException("用户不存在");
|
|
||||||
}
|
|
||||||
|
|
||||||
// 验证机组是否存在(如果指定了机组)
|
|
||||||
if (StrUtil.isNotBlank(req.getTurbineId())) {
|
|
||||||
TurbineEntity turbine = turbineService.getById(req.getTurbineId());
|
|
||||||
if (turbine == null) {
|
|
||||||
throw new ServiceException("机组不存在");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 验证任务组是否存在(如果指定了任务组)
|
|
||||||
if (StrUtil.isNotBlank(req.getTaskGroupId())) {
|
|
||||||
ProjectTaskGroupEntity taskGroup = projectTaskGroupService.getById(req.getTaskGroupId());
|
|
||||||
if (taskGroup == null) {
|
|
||||||
throw new ServiceException("任务组不存在");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 验证任务是否存在(如果指定了任务)
|
|
||||||
if (StrUtil.isNotBlank(req.getTaskId())) {
|
|
||||||
ProjectTaskEntity task = projectTaskService.getById(req.getTaskId());
|
|
||||||
if (task == null) {
|
|
||||||
throw new ServiceException("任务不存在");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 更新成员信息
|
// 更新成员信息
|
||||||
BeanUtil.copyProperties(req, existingMember);
|
BeanUtil.copyProperties(req, existingMember);
|
||||||
|
@ -246,6 +230,47 @@ public class ProjectMemberServiceImpl extends ServiceImpl<ProjectMemberMapper, P
|
||||||
return this.removeByIds(CollUtil.toList(memberIds));
|
return this.removeByIds(CollUtil.toList(memberIds));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 验证团队成员请求参数
|
||||||
|
*/
|
||||||
|
private void validateTeamMemberRequest(TeamMemberReq req) {
|
||||||
|
// 验证项目是否存在
|
||||||
|
ProjectEntity project = projectService.getById(req.getProjectId());
|
||||||
|
if (project == null) {
|
||||||
|
throw new ServiceException(Message.PROJECT_ID_IS_NOT_EXIST);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 验证用户是否存在
|
||||||
|
UserEntity user = userService.getById(req.getUserId());
|
||||||
|
if (user == null) {
|
||||||
|
throw new ServiceException("用户不存在");
|
||||||
|
}
|
||||||
|
|
||||||
|
// 验证机组是否存在(如果指定了机组)
|
||||||
|
if (StrUtil.isNotBlank(req.getTurbineId())) {
|
||||||
|
TurbineEntity turbine = turbineService.getById(req.getTurbineId());
|
||||||
|
if (turbine == null) {
|
||||||
|
throw new ServiceException("机组不存在");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 验证任务组是否存在(如果指定了任务组)
|
||||||
|
if (StrUtil.isNotBlank(req.getTaskGroupId())) {
|
||||||
|
ProjectTaskGroupEntity taskGroup = projectTaskGroupService.getById(req.getTaskGroupId());
|
||||||
|
if (taskGroup == null) {
|
||||||
|
throw new ServiceException("任务组不存在");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 验证任务是否存在(如果指定了任务)
|
||||||
|
if (StrUtil.isNotBlank(req.getTaskId())) {
|
||||||
|
ProjectTaskEntity task = projectTaskService.getById(req.getTaskId());
|
||||||
|
if (task == null) {
|
||||||
|
throw new ServiceException("任务不存在");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 根据成员ID获取成员信息
|
* 根据成员ID获取成员信息
|
||||||
*/
|
*/
|
||||||
|
@ -468,19 +493,28 @@ public class ProjectMemberServiceImpl extends ServiceImpl<ProjectMemberMapper, P
|
||||||
// 设置项目经理
|
// 设置项目经理
|
||||||
item.setManager(memberNames.get("PROJECT_MANAGER"));
|
item.setManager(memberNames.get("PROJECT_MANAGER"));
|
||||||
|
|
||||||
// 设置团队规模
|
// 设置团队规模 - 使用去重后的数量
|
||||||
item.setTeamSize(members.size());
|
item.setTeamSize((int) members.stream()
|
||||||
|
.map(ProjectMemberResp::getUserId)
|
||||||
|
.distinct()
|
||||||
|
.count());
|
||||||
|
|
||||||
// 转换为团队成员列表
|
// 转换为团队成员列表 - 按用户ID去重
|
||||||
List<ProjectKanbanDataResp.ProjectKanbanItem.TeamMemberResp> teamMembers = members.stream()
|
List<ProjectKanbanDataResp.ProjectKanbanItem.TeamMemberResp> teamMembers = members.stream()
|
||||||
.map(member -> {
|
.collect(Collectors.toMap(
|
||||||
|
ProjectMemberResp::getUserId, // 按用户ID去重
|
||||||
|
member -> {
|
||||||
ProjectKanbanDataResp.ProjectKanbanItem.TeamMemberResp teamMember = new ProjectKanbanDataResp.ProjectKanbanItem.TeamMemberResp();
|
ProjectKanbanDataResp.ProjectKanbanItem.TeamMemberResp teamMember = new ProjectKanbanDataResp.ProjectKanbanItem.TeamMemberResp();
|
||||||
// 先复制所有同名字段
|
// 先复制所有同名字段
|
||||||
BeanUtil.copyProperties(member, teamMember);
|
BeanUtil.copyProperties(member, teamMember);
|
||||||
// 手动处理字段名不一致的字段
|
// 手动处理字段名不一致的字段
|
||||||
teamMember.setUserName(member.getName()); // name -> userName
|
teamMember.setUserName(member.getName()); // name -> userName
|
||||||
return teamMember;
|
return teamMember;
|
||||||
})
|
},
|
||||||
|
(existing, replacement) -> existing // 如果有重复,保留第一个
|
||||||
|
))
|
||||||
|
.values()
|
||||||
|
.stream()
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
item.setTeamMembers(teamMembers);
|
item.setTeamMembers(teamMembers);
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
|
|
||||||
<!-- 获取项目团队成员列表(支持筛选、分页、搜索) -->
|
<!-- 获取项目团队成员列表(支持筛选、分页、搜索) -->
|
||||||
<select id="queryTeamMembers" resultType="com.dite.znpt.domain.vo.ProjectMemberResp">
|
<select id="queryTeamMembers" resultType="com.dite.znpt.domain.vo.ProjectMemberResp">
|
||||||
SELECT DISTINCT
|
SELECT
|
||||||
pm.member_id,
|
pm.member_id,
|
||||||
pm.project_id,
|
pm.project_id,
|
||||||
p.project_name,
|
p.project_name,
|
||||||
|
|
Loading…
Reference in New Issue