diff --git a/core/src/main/java/com/dite/znpt/domain/vo/ProjectMemberListReq.java b/core/src/main/java/com/dite/znpt/domain/vo/ProjectMemberListReq.java deleted file mode 100644 index 92eda45..0000000 --- a/core/src/main/java/com/dite/znpt/domain/vo/ProjectMemberListReq.java +++ /dev/null @@ -1,45 +0,0 @@ -package com.dite.znpt.domain.vo; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -/** - * @author wangna - * @date 2025/08/05 - * @Description: 项目人员查询请求VO - */ -@Data -@ApiModel(value="ProjectMemberListReq对象", description="项目人员查询请求") -public class ProjectMemberListReq { - - @ApiModelProperty("项目ID") - private String projectId; - - @ApiModelProperty("机组ID") - private String turbineId; - - @ApiModelProperty("任务组ID") - private String taskGroupId; - - @ApiModelProperty("任务ID") - private String taskId; - - @ApiModelProperty("用户ID") - private String userId; - - @ApiModelProperty("角色类型") - private String roleType; - - @ApiModelProperty("岗位代码") - private String jobCode; - - @ApiModelProperty("状态") - private String status; - - @ApiModelProperty("用户姓名(模糊查询)") - private String userName; - - @ApiModelProperty("用户账号(模糊查询)") - private String userAccount; -} \ No newline at end of file diff --git a/core/src/main/java/com/dite/znpt/domain/vo/ProjectMemberReq.java b/core/src/main/java/com/dite/znpt/domain/vo/ProjectMemberReq.java deleted file mode 100644 index d2ffb17..0000000 --- a/core/src/main/java/com/dite/znpt/domain/vo/ProjectMemberReq.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.dite.znpt.domain.vo; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.NotNull; -import java.time.LocalDate; - -/** - * @author wangna - * @date 2025/08/05 - * @Description: 项目人员请求VO - */ -@Data -@ApiModel(value="ProjectMemberReq对象", description="项目人员请求") -public class ProjectMemberReq { - - @ApiModelProperty("关联ID(更新时必填)") - private String memberId; - - @NotBlank(message = "项目ID不能为空") - @ApiModelProperty("项目ID") - private String projectId; - - @ApiModelProperty("机组ID(可选)") - private String turbineId; - - @ApiModelProperty("任务组ID(可选)") - private String taskGroupId; - - @ApiModelProperty("任务ID(可选)") - private String taskId; - - @NotBlank(message = "用户ID不能为空") - @ApiModelProperty("用户ID") - private String userId; - - @NotBlank(message = "角色类型不能为空") - @ApiModelProperty("角色类型") - private String roleType; - - @ApiModelProperty("岗位代码") - private String jobCode; - - @ApiModelProperty("岗位描述") - private String jobDesc; - - @NotNull(message = "加入时间不能为空") - @ApiModelProperty("加入时间") - private LocalDate joinDate; - - @ApiModelProperty("离开时间") - private LocalDate leaveDate; - - @ApiModelProperty("状态") - private String status; - - @ApiModelProperty("备注") - private String remark; -} \ No newline at end of file diff --git a/core/src/main/java/com/dite/znpt/mapper/ProjectMemberMapper.java b/core/src/main/java/com/dite/znpt/mapper/ProjectMemberMapper.java index d514e90..a66a598 100644 --- a/core/src/main/java/com/dite/znpt/mapper/ProjectMemberMapper.java +++ b/core/src/main/java/com/dite/znpt/mapper/ProjectMemberMapper.java @@ -2,7 +2,6 @@ package com.dite.znpt.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.dite.znpt.domain.entity.ProjectMemberEntity; -import com.dite.znpt.domain.vo.ProjectMemberListReq; import com.dite.znpt.domain.vo.ProjectMemberResp; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; @@ -17,38 +16,8 @@ import java.util.List; @Mapper public interface ProjectMemberMapper extends BaseMapper { - /** - * 根据条件查询项目人员列表 - */ - List queryBySelective(ProjectMemberListReq req); - /** * 根据项目ID查询项目人员列表 */ List queryByProjectId(@Param("projectId") String projectId); - - /** - * 根据机组ID查询机组人员列表 - */ - List queryByTurbineId(@Param("turbineId") String turbineId); - - /** - * 根据任务组ID查询任务组人员列表 - */ - List queryByTaskGroupId(@Param("taskGroupId") String taskGroupId); - - /** - * 根据任务ID查询任务人员列表 - */ - List queryByTaskId(@Param("taskId") String taskId); - - /** - * 根据用户ID查询用户参与的项目列表 - */ - List queryByUserId(@Param("userId") String userId); - - /** - * 根据项目ID和角色类型查询人员列表 - */ - List queryByProjectIdAndRoleType(@Param("projectId") String projectId, @Param("roleType") String roleType); } \ No newline at end of file diff --git a/core/src/main/java/com/dite/znpt/service/ProjectMemberService.java b/core/src/main/java/com/dite/znpt/service/ProjectMemberService.java index 9004093..b743cd2 100644 --- a/core/src/main/java/com/dite/znpt/service/ProjectMemberService.java +++ b/core/src/main/java/com/dite/znpt/service/ProjectMemberService.java @@ -14,80 +14,10 @@ import java.util.List; public interface ProjectMemberService extends IService { /** - * 查询项目人员列表 - */ - List selectList(ProjectMemberListReq req); - - /** - * 根据项目ID查询项目人员列表 + * 根据项目ID查询项目人员列表(看板功能需要) */ List selectByProjectId(String projectId); - /** - * 根据机组ID查询机组人员列表 - */ - List selectByTurbineId(String turbineId); - - /** - * 根据任务组ID查询任务组人员列表 - */ - List selectByTaskGroupId(String taskGroupId); - - /** - * 根据任务ID查询任务人员列表 - */ - List selectByTaskId(String taskId); - - /** - * 根据用户ID查询用户参与的项目列表 - */ - List selectByUserId(String userId); - - /** - * 根据项目ID和角色类型查询人员列表 - */ - List selectByProjectIdAndRoleType(String projectId, String roleType); - - /** - * 新增项目人员 - */ - void saveData(ProjectMemberReq req); - - /** - * 更新项目人员 - */ - void updateData(ProjectMemberReq req); - - /** - * 删除项目人员 - */ - void deleteById(String memberId); - - /** - * 批量添加项目人员 - */ - void batchAddMembers(List reqList); - - /** - * 根据项目ID删除所有项目人员 - */ - void deleteByProjectId(String projectId); - - /** - * 根据机组ID删除所有机组人员 - */ - void deleteByTurbineId(String turbineId); - - /** - * 根据任务组ID删除所有任务组人员 - */ - void deleteByTaskGroupId(String taskGroupId); - - /** - * 根据任务ID删除所有任务人员 - */ - void deleteByTaskId(String taskId); - // ========================== 项目看板相关方法 ========================== /** diff --git a/core/src/main/java/com/dite/znpt/service/impl/ProjectMemberServiceImpl.java b/core/src/main/java/com/dite/znpt/service/impl/ProjectMemberServiceImpl.java index 9ee100e..68a9e1f 100644 --- a/core/src/main/java/com/dite/znpt/service/impl/ProjectMemberServiceImpl.java +++ b/core/src/main/java/com/dite/znpt/service/impl/ProjectMemberServiceImpl.java @@ -6,18 +6,17 @@ import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.dite.znpt.constant.Message; import com.dite.znpt.domain.entity.*; -import com.dite.znpt.domain.vo.*; -import com.dite.znpt.enums.ProjectJobCodeEnum; -import com.dite.znpt.enums.ProjectRoleTypeEnum; +import com.dite.znpt.domain.vo.ProjectDetailResp; +import com.dite.znpt.domain.vo.ProjectKanbanDataResp; +import com.dite.znpt.domain.vo.ProjectKanbanStatsResp; +import com.dite.znpt.domain.vo.ProjectMemberResp; import com.dite.znpt.enums.ProjectStatusEnum; import com.dite.znpt.enums.ProjectTaskStateEnum; import com.dite.znpt.exception.ServiceException; import com.dite.znpt.mapper.ProjectMemberMapper; import com.dite.znpt.service.*; -import com.dite.znpt.util.PageUtil; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; import java.util.List; @@ -43,14 +42,6 @@ public class ProjectMemberServiceImpl extends ServiceImpl selectList(ProjectMemberListReq req) { - PageUtil.startPage(); - List list = this.baseMapper.queryBySelective(req); - enrichMemberInfo(list); - return list; - } - @Override public List selectByProjectId(String projectId) { List list = this.baseMapper.queryByProjectId(projectId); @@ -58,139 +49,8 @@ public class ProjectMemberServiceImpl extends ServiceImpl selectByTurbineId(String turbineId) { - List list = this.baseMapper.queryByTurbineId(turbineId); - enrichMemberInfo(list); - return list; - } - - @Override - public List selectByTaskGroupId(String taskGroupId) { - List list = this.baseMapper.queryByTaskGroupId(taskGroupId); - enrichMemberInfo(list); - return list; - } - - @Override - public List selectByTaskId(String taskId) { - List list = this.baseMapper.queryByTaskId(taskId); - enrichMemberInfo(list); - return list; - } - - @Override - public List selectByUserId(String userId) { - List list = this.baseMapper.queryByUserId(userId); - enrichMemberInfo(list); - return list; - } - - @Override - public List selectByProjectIdAndRoleType(String projectId, String roleType) { - List list = this.baseMapper.queryByProjectIdAndRoleType(projectId, roleType); - enrichMemberInfo(list); - return list; - } - - @Override - @Transactional(rollbackFor = Exception.class) - public void saveData(ProjectMemberReq req) { - // 验证用户是否存在 - UserEntity user = userService.getById(req.getUserId()); - if (user == null) { - throw new ServiceException(Message.USER_ID_NOT_EXIST_OR_ILLEGAL); - } - - // 检查是否已存在相同的关联 - boolean exists = lambdaQuery() - .eq(ProjectMemberEntity::getProjectId, req.getProjectId()) - .eq(ProjectMemberEntity::getUserId, req.getUserId()) - .eq(StrUtil.isNotEmpty(req.getTurbineId()), ProjectMemberEntity::getTurbineId, req.getTurbineId()) - .eq(StrUtil.isNotEmpty(req.getTaskGroupId()), ProjectMemberEntity::getTaskGroupId, req.getTaskGroupId()) - .eq(StrUtil.isNotEmpty(req.getTaskId()), ProjectMemberEntity::getTaskId, req.getTaskId()) - .eq(ProjectMemberEntity::getRoleType, req.getRoleType()) - .exists(); - - if (exists) { - throw new ServiceException("该用户在此项目中已存在相同角色"); - } - - ProjectMemberEntity entity = BeanUtil.copyProperties(req, ProjectMemberEntity.class); - if (StrUtil.isEmpty(entity.getStatus())) { - entity.setStatus("ACTIVE"); - } - save(entity); - } - - @Override - @Transactional(rollbackFor = Exception.class) - public void updateData(ProjectMemberReq req) { - if (StrUtil.isEmpty(req.getMemberId())) { - throw new ServiceException("关联ID不能为空"); - } - - ProjectMemberEntity entity = getById(req.getMemberId()); - if (entity == null) { - throw new ServiceException(Message.PROJECT_ID_IS_NOT_EXIST); - } - - BeanUtil.copyProperties(req, entity); - updateById(entity); - } - - @Override - @Transactional(rollbackFor = Exception.class) - public void deleteById(String memberId) { - removeById(memberId); - } - - @Override - @Transactional(rollbackFor = Exception.class) - public void batchAddMembers(List reqList) { - if (CollUtil.isEmpty(reqList)) { - return; - } - - for (ProjectMemberReq req : reqList) { - saveData(req); - } - } - - @Override - @Transactional(rollbackFor = Exception.class) - public void deleteByProjectId(String projectId) { - lambdaUpdate() - .eq(ProjectMemberEntity::getProjectId, projectId) - .remove(); - } - - @Override - @Transactional(rollbackFor = Exception.class) - public void deleteByTurbineId(String turbineId) { - lambdaUpdate() - .eq(ProjectMemberEntity::getTurbineId, turbineId) - .remove(); - } - - @Override - @Transactional(rollbackFor = Exception.class) - public void deleteByTaskGroupId(String taskGroupId) { - lambdaUpdate() - .eq(ProjectMemberEntity::getTaskGroupId, taskGroupId) - .remove(); - } - - @Override - @Transactional(rollbackFor = Exception.class) - public void deleteByTaskId(String taskId) { - lambdaUpdate() - .eq(ProjectMemberEntity::getTaskId, taskId) - .remove(); - } - /** - * 丰富成员信息(用户信息、角色描述、岗位描述) + * 丰富成员信息 */ private void enrichMemberInfo(List list) { if (CollUtil.isEmpty(list)) { @@ -200,31 +60,26 @@ public class ProjectMemberServiceImpl extends ServiceImpl userIds = list.stream() .map(ProjectMemberResp::getUserId) + .filter(StrUtil::isNotBlank) .distinct() .collect(Collectors.toList()); - // 查询用户信息 - Map userMap = userService.listByIds(userIds) - .stream() + if (CollUtil.isEmpty(userIds)) { + return; + } + + // 批量查询用户信息 + List users = userService.listByIds(userIds); + Map userMap = users.stream() .collect(Collectors.toMap(UserEntity::getUserId, Function.identity())); - // 填充用户信息和描述 + // 填充用户信息 list.forEach(member -> { - // 填充用户信息 UserEntity user = userMap.get(member.getUserId()); if (user != null) { member.setUserName(user.getName()); - member.setUserAccount(user.getAccount()); member.setUserAvatar(user.getAvatar()); } - - // 填充角色类型描述 - member.setRoleTypeDesc(ProjectRoleTypeEnum.getDescByCode(member.getRoleType())); - - // 填充岗位代码描述 - if (StrUtil.isNotEmpty(member.getJobCode())) { - member.setJobCodeDesc(ProjectJobCodeEnum.getDescByCode(member.getJobCode())); - } }); } diff --git a/core/src/main/resources/mapper/ProjectMemberMapper.xml b/core/src/main/resources/mapper/ProjectMemberMapper.xml index f8925d6..bb1a416 100644 --- a/core/src/main/resources/mapper/ProjectMemberMapper.xml +++ b/core/src/main/resources/mapper/ProjectMemberMapper.xml @@ -28,72 +28,6 @@ - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/web/src/main/java/com/dite/znpt/web/controller/ProjectMemberController.java b/web/src/main/java/com/dite/znpt/web/controller/ProjectMemberController.java index 4a670f7..7b9c7bd 100644 --- a/web/src/main/java/com/dite/znpt/web/controller/ProjectMemberController.java +++ b/web/src/main/java/com/dite/znpt/web/controller/ProjectMemberController.java @@ -1,18 +1,16 @@ package com.dite.znpt.web.controller; -import com.dite.znpt.domain.PageResult; import com.dite.znpt.domain.Result; -import com.dite.znpt.domain.vo.*; +import com.dite.znpt.domain.Result; +import com.dite.znpt.domain.vo.ProjectKanbanStatsResp; +import com.dite.znpt.domain.vo.ProjectKanbanDataResp; +import com.dite.znpt.domain.vo.ProjectDetailResp; import com.dite.znpt.service.ProjectMemberService; -import com.dite.znpt.util.PageUtil; -import com.dite.znpt.util.ValidationGroup; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; -import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; -import java.util.List; /** * @author wangna @@ -28,105 +26,6 @@ public class ProjectMemberController { @Resource private ProjectMemberService projectMemberService; - @ApiOperation(value = "查询项目人员列表", httpMethod = "GET") - @GetMapping("/list") - public PageResult list(ProjectMemberListReq req) { - PageUtil.startPage(); - return PageResult.ok(projectMemberService.selectList(req)); - } - - @ApiOperation(value = "根据项目ID查询项目人员", httpMethod = "GET") - @GetMapping("/project/{projectId}") - public Result> getByProjectId(@PathVariable String projectId) { - return Result.ok(projectMemberService.selectByProjectId(projectId)); - } - - @ApiOperation(value = "根据机组ID查询机组人员", httpMethod = "GET") - @GetMapping("/turbine/{turbineId}") - public Result> getByTurbineId(@PathVariable String turbineId) { - return Result.ok(projectMemberService.selectByTurbineId(turbineId)); - } - - @ApiOperation(value = "根据任务组ID查询任务组人员", httpMethod = "GET") - @GetMapping("/task-group/{taskGroupId}") - public Result> getByTaskGroupId(@PathVariable String taskGroupId) { - return Result.ok(projectMemberService.selectByTaskGroupId(taskGroupId)); - } - - @ApiOperation(value = "根据任务ID查询任务人员", httpMethod = "GET") - @GetMapping("/task/{taskId}") - public Result> getByTaskId(@PathVariable String taskId) { - return Result.ok(projectMemberService.selectByTaskId(taskId)); - } - - @ApiOperation(value = "根据用户ID查询用户参与的项目", httpMethod = "GET") - @GetMapping("/user/{userId}") - public Result> getByUserId(@PathVariable String userId) { - return Result.ok(projectMemberService.selectByUserId(userId)); - } - - @ApiOperation(value = "根据项目ID和角色类型查询人员", httpMethod = "GET") - @GetMapping("/project/{projectId}/role/{roleType}") - public Result> getByProjectIdAndRoleType(@PathVariable String projectId, @PathVariable String roleType) { - return Result.ok(projectMemberService.selectByProjectIdAndRoleType(projectId, roleType)); - } - - @ApiOperation(value = "新增项目人员", httpMethod = "POST") - @PostMapping - public Result add(@Validated(ValidationGroup.Insert.class) @RequestBody ProjectMemberReq req) { - projectMemberService.saveData(req); - return Result.ok(); - } - - @ApiOperation(value = "修改项目人员", httpMethod = "PUT") - @PutMapping - public Result edit(@Validated(ValidationGroup.Update.class) @RequestBody ProjectMemberReq req) { - projectMemberService.updateData(req); - return Result.ok(); - } - - @ApiOperation(value = "删除项目人员", httpMethod = "DELETE") - @DeleteMapping("/{memberId}") - public Result remove(@PathVariable String memberId) { - projectMemberService.deleteById(memberId); - return Result.ok(); - } - - @ApiOperation(value = "批量添加项目人员", httpMethod = "POST") - @PostMapping("/batch") - public Result batchAdd(@RequestBody List reqList) { - projectMemberService.batchAddMembers(reqList); - return Result.ok(); - } - - @ApiOperation(value = "根据项目ID删除所有项目人员", httpMethod = "DELETE") - @DeleteMapping("/project/{projectId}") - public Result removeByProjectId(@PathVariable String projectId) { - projectMemberService.deleteByProjectId(projectId); - return Result.ok(); - } - - @ApiOperation(value = "根据机组ID删除所有机组人员", httpMethod = "DELETE") - @DeleteMapping("/turbine/{turbineId}") - public Result removeByTurbineId(@PathVariable String turbineId) { - projectMemberService.deleteByTurbineId(turbineId); - return Result.ok(); - } - - @ApiOperation(value = "根据任务组ID删除所有任务组人员", httpMethod = "DELETE") - @DeleteMapping("/task-group/{taskGroupId}") - public Result removeByTaskGroupId(@PathVariable String taskGroupId) { - projectMemberService.deleteByTaskGroupId(taskGroupId); - return Result.ok(); - } - - @ApiOperation(value = "根据任务ID删除所有任务人员", httpMethod = "DELETE") - @DeleteMapping("/task/{taskId}") - public Result removeByTaskId(@PathVariable String taskId) { - projectMemberService.deleteByTaskId(taskId); - return Result.ok(); - } - // ========================== 项目看板相关接口 ========================== @ApiOperation(value = "获取项目看板统计数据", httpMethod = "GET")