消除人员重复bug
This commit is contained in:
parent
b45766d377
commit
d4b06d9c66
|
@ -18,6 +18,7 @@ import lombok.RequiredArgsConstructor;
|
|||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.function.Function;
|
||||
|
@ -50,11 +51,22 @@ public class ProjectMemberServiceImpl extends ServiceImpl<ProjectMemberMapper, P
|
|||
// 查询团队成员列表
|
||||
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,43 +98,81 @@ public class ProjectMemberServiceImpl extends ServiceImpl<ProjectMemberMapper, P
|
|||
UserEntity user = userMap.get(member.getUserId());
|
||||
if (user != null) {
|
||||
// 映射前端需要的字段
|
||||
member.setName(user.getName());
|
||||
member.setPhone(user.getMobile());
|
||||
member.setEmail(user.getEmail());
|
||||
member.setName(user.getName() != null ? user.getName() : "");
|
||||
member.setPhone(user.getMobile() != null ? user.getMobile() : "");
|
||||
member.setEmail(user.getEmail() != null ? user.getEmail() : "");
|
||||
|
||||
// 保留原有字段用于内部处理
|
||||
member.setUserAccount(user.getAccount());
|
||||
member.setUserAvatar(user.getAvatar());
|
||||
member.setUserAccount(user.getAccount() != null ? user.getAccount() : "");
|
||||
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("");
|
||||
|
||||
// 处理其他可能为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 ("ACTIVE".equals(member.getStatus())) {
|
||||
member.setStatusDesc("在职");
|
||||
} else if ("INACTIVE".equals(member.getStatus())) {
|
||||
member.setStatusDesc("离职");
|
||||
} else if ("PENDING".equals(member.getStatus())) {
|
||||
member.setStatusDesc("待入职");
|
||||
if (member.getStatus() != null) {
|
||||
if ("ACTIVE".equals(member.getStatus())) {
|
||||
member.setStatusDesc("在职");
|
||||
} else if ("INACTIVE".equals(member.getStatus())) {
|
||||
member.setStatusDesc("离职");
|
||||
} else if ("PENDING".equals(member.getStatus())) {
|
||||
member.setStatusDesc("待入职");
|
||||
} else {
|
||||
member.setStatusDesc("未知");
|
||||
}
|
||||
} else {
|
||||
member.setStatusDesc("未知");
|
||||
}
|
||||
|
||||
// 设置角色类型描述
|
||||
if ("PROJECT_MANAGER".equals(member.getRoleType())) {
|
||||
member.setRoleTypeDesc("项目经理");
|
||||
} else if ("SAFETY_OFFICER".equals(member.getRoleType())) {
|
||||
member.setRoleTypeDesc("安全员");
|
||||
} else if ("QUALITY_OFFICER".equals(member.getRoleType())) {
|
||||
member.setRoleTypeDesc("质量员");
|
||||
} else if ("CONSTRUCTOR".equals(member.getRoleType())) {
|
||||
member.setRoleTypeDesc("施工员");
|
||||
} else if ("TEAM_LEADER".equals(member.getRoleType())) {
|
||||
member.setRoleTypeDesc("施工组长");
|
||||
if (member.getRoleType() != null) {
|
||||
if ("PROJECT_MANAGER".equals(member.getRoleType())) {
|
||||
member.setRoleTypeDesc("项目经理");
|
||||
} else if ("SAFETY_OFFICER".equals(member.getRoleType())) {
|
||||
member.setRoleTypeDesc("安全员");
|
||||
} else if ("QUALITY_OFFICER".equals(member.getRoleType())) {
|
||||
member.setRoleTypeDesc("质量员");
|
||||
} else if ("CONSTRUCTOR".equals(member.getRoleType())) {
|
||||
member.setRoleTypeDesc("施工员");
|
||||
} else if ("TEAM_LEADER".equals(member.getRoleType())) {
|
||||
member.setRoleTypeDesc("施工组长");
|
||||
} else {
|
||||
member.setRoleTypeDesc("其他");
|
||||
}
|
||||
} else {
|
||||
member.setRoleTypeDesc("其他");
|
||||
}
|
||||
|
@ -131,41 +181,8 @@ public class ProjectMemberServiceImpl extends ServiceImpl<ProjectMemberMapper, P
|
|||
|
||||
@Override
|
||||
public ProjectMemberResp createTeamMember(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("任务不存在");
|
||||
}
|
||||
}
|
||||
// 验证请求参数
|
||||
validateTeamMemberRequest(req);
|
||||
|
||||
// 创建项目成员实体
|
||||
ProjectMemberEntity entity = new ProjectMemberEntity();
|
||||
|
@ -186,41 +203,8 @@ public class ProjectMemberServiceImpl extends ServiceImpl<ProjectMemberMapper, P
|
|||
throw new ServiceException("项目成员不存在");
|
||||
}
|
||||
|
||||
// 验证项目是否存在
|
||||
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("任务不存在");
|
||||
}
|
||||
}
|
||||
// 验证请求参数
|
||||
validateTeamMemberRequest(req);
|
||||
|
||||
// 更新成员信息
|
||||
BeanUtil.copyProperties(req, existingMember);
|
||||
|
@ -246,6 +230,47 @@ public class ProjectMemberServiceImpl extends ServiceImpl<ProjectMemberMapper, P
|
|||
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获取成员信息
|
||||
*/
|
||||
|
@ -468,19 +493,28 @@ public class ProjectMemberServiceImpl extends ServiceImpl<ProjectMemberMapper, P
|
|||
// 设置项目经理
|
||||
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()
|
||||
.map(member -> {
|
||||
ProjectKanbanDataResp.ProjectKanbanItem.TeamMemberResp teamMember = new ProjectKanbanDataResp.ProjectKanbanItem.TeamMemberResp();
|
||||
// 先复制所有同名字段
|
||||
BeanUtil.copyProperties(member, teamMember);
|
||||
// 手动处理字段名不一致的字段
|
||||
teamMember.setUserName(member.getName()); // name -> userName
|
||||
return teamMember;
|
||||
})
|
||||
.collect(Collectors.toMap(
|
||||
ProjectMemberResp::getUserId, // 按用户ID去重
|
||||
member -> {
|
||||
ProjectKanbanDataResp.ProjectKanbanItem.TeamMemberResp teamMember = new ProjectKanbanDataResp.ProjectKanbanItem.TeamMemberResp();
|
||||
// 先复制所有同名字段
|
||||
BeanUtil.copyProperties(member, teamMember);
|
||||
// 手动处理字段名不一致的字段
|
||||
teamMember.setUserName(member.getName()); // name -> userName
|
||||
return teamMember;
|
||||
},
|
||||
(existing, replacement) -> existing // 如果有重复,保留第一个
|
||||
))
|
||||
.values()
|
||||
.stream()
|
||||
.collect(Collectors.toList());
|
||||
item.setTeamMembers(teamMembers);
|
||||
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
|
||||
<!-- 获取项目团队成员列表(支持筛选、分页、搜索) -->
|
||||
<select id="queryTeamMembers" resultType="com.dite.znpt.domain.vo.ProjectMemberResp">
|
||||
SELECT DISTINCT
|
||||
SELECT
|
||||
pm.member_id,
|
||||
pm.project_id,
|
||||
p.project_name,
|
||||
|
|
Loading…
Reference in New Issue