合并development代码到master #1

Merged
cuizhibin merged 21 commits from development into master 2025-08-11 09:25:53 +08:00
2 changed files with 140 additions and 106 deletions
Showing only changes of commit d4b06d9c66 - Show all commits

View File

@ -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);

View File

@ -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,