项目人员模块crud方法联调

This commit is contained in:
wangna0328 2025-08-11 15:23:39 +08:00
parent 36958212f0
commit 15086236ea
7 changed files with 265 additions and 17 deletions

View File

@ -32,6 +32,15 @@ public class ProjectKanbanDataResp {
@ApiModelProperty("已验收项目列表")
private List<ProjectKanbanItem> acceptedProjects;
@ApiModelProperty("验收中项目列表")
private List<ProjectKanbanItem> acceptanceProjects;
@ApiModelProperty("回款中项目列表")
private List<ProjectKanbanItem> collectionProjects;
@ApiModelProperty("已结算项目列表")
private List<ProjectKanbanItem> settledProjects;
@Data
@ApiModel(value="ProjectKanbanItem对象", description="项目看板项目项")
public static class ProjectKanbanItem {

View File

@ -31,6 +31,15 @@ public class ProjectKanbanStatsResp {
@ApiModelProperty("已验收项目数")
private Long acceptedProjectCount;
@ApiModelProperty("验收中项目数")
private Long acceptanceProjectCount;
@ApiModelProperty("回款中项目数")
private Long collectionProjectCount;
@ApiModelProperty("已结算项目数")
private Long settledProjectCount;
@ApiModelProperty("总机组数")
private Long totalTurbineCount;

View File

@ -0,0 +1,60 @@
package com.dite.znpt.domain.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDate;
/**
* @author wangna
* @date 2025/08/05
* @Description: 团队成员更新请求类用于更新操作移除必填验证
*/
@Data
@ApiModel(value="TeamMemberUpdateReq对象", description="团队成员更新请求类")
public class TeamMemberUpdateReq implements Serializable {
@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("项目角色类型PROJECT_MANAGER-项目经理SAFETY_OFFICER-安全员QUALITY_OFFICER-质量员CONSTRUCTOR-施工人员TEAM_LEADER-施工组长")
private String roleType;
@ApiModelProperty("具体岗位代码GROUND_SERVICE-地勤DRIVER-司机ASCENDING-登高等)")
private String jobCode;
@ApiModelProperty("岗位描述")
private String jobDesc;
@ApiModelProperty("加入时间")
private LocalDate joinDate;
@ApiModelProperty("离开时间")
private LocalDate leaveDate;
@ApiModelProperty("状态ACTIVE-在职INACTIVE-离职PENDING-待入职")
private String status = "ACTIVE";
@ApiModelProperty("备注")
private String remark;
@ApiModelProperty("用户电话")
private String phone;
@ApiModelProperty("用户邮箱")
private String email;
}

View File

@ -15,11 +15,14 @@ import java.util.List;
@Getter
@AllArgsConstructor
public enum ProjectStatusEnum {
PENDING(0, "待施"),
IN_PROGRESS(1, "施工"),
COMPLETED(2, "已完工"),
PENDING(0, "未开"),
IN_PREPARATION(1, "筹备"),
IN_PROGRESS(2, "开工中"),
AUDITED(3, "已审核"),
ACCEPTED(4, "已验收");
COMPLETED(4, "已完工"),
ACCEPTED(5, "已验收"),
IN_COLLECTION(6, "回款中"),
SETTLED(7, "已结算");
private final int code;
private final String desc;

View File

@ -27,6 +27,11 @@ public interface ProjectMemberService extends IService<ProjectMemberEntity> {
*/
ProjectMemberResp updateTeamMember(String memberId, TeamMemberReq req);
/**
* 更新团队成员信息使用更新专用请求类
*/
ProjectMemberResp updateTeamMember(String memberId, TeamMemberUpdateReq req);
/**
* 删除团队成员支持单个或批量删除
*/

View File

@ -1,5 +1,6 @@
package com.dite.znpt.service.impl;
import cn.dev33.satoken.stp.StpUtil;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
@ -18,6 +19,7 @@ import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@ -188,6 +190,14 @@ public class ProjectMemberServiceImpl extends ServiceImpl<ProjectMemberMapper, P
ProjectMemberEntity entity = new ProjectMemberEntity();
BeanUtil.copyProperties(req, entity);
// 设置创建和更新信息
String currentUserId = StpUtil.getLoginIdAsString();
LocalDateTime now = LocalDateTime.now();
entity.setCreateBy(currentUserId);
entity.setCreateTime(now);
entity.setUpdateBy(currentUserId);
entity.setUpdateTime(now);
// 保存到数据库
this.save(entity);
@ -208,6 +218,85 @@ public class ProjectMemberServiceImpl extends ServiceImpl<ProjectMemberMapper, P
// 更新成员信息
BeanUtil.copyProperties(req, existingMember);
// 设置更新信息
existingMember.setUpdateBy(StpUtil.getLoginIdAsString());
existingMember.setUpdateTime(LocalDateTime.now());
this.updateById(existingMember);
// 返回更新后的成员信息
return getTeamMemberById(memberId);
}
@Override
public ProjectMemberResp updateTeamMember(String memberId, TeamMemberUpdateReq req) {
// 验证成员是否存在
ProjectMemberEntity existingMember = this.getById(memberId);
if (existingMember == null) {
throw new ServiceException("项目成员不存在");
}
// 更新成员信息 - 只更新非空字段保留原有值
if (StrUtil.isNotBlank(req.getTurbineId())) {
existingMember.setTurbineId(req.getTurbineId());
}
if (StrUtil.isNotBlank(req.getTaskGroupId())) {
existingMember.setTaskGroupId(req.getTaskGroupId());
}
if (StrUtil.isNotBlank(req.getTaskId())) {
existingMember.setTaskId(req.getTaskId());
}
if (StrUtil.isNotBlank(req.getRoleType())) {
existingMember.setRoleType(req.getRoleType());
}
if (StrUtil.isNotBlank(req.getJobCode())) {
existingMember.setJobCode(req.getJobCode());
}
if (StrUtil.isNotBlank(req.getJobDesc())) {
existingMember.setJobDesc(req.getJobDesc());
}
if (req.getJoinDate() != null) {
existingMember.setJoinDate(req.getJoinDate());
}
if (req.getLeaveDate() != null) {
existingMember.setLeaveDate(req.getLeaveDate());
}
if (StrUtil.isNotBlank(req.getStatus())) {
existingMember.setStatus(req.getStatus());
}
if (StrUtil.isNotBlank(req.getRemark())) {
existingMember.setRemark(req.getRemark());
}
// 验证关联数据是否存在只验证非空字段
validateUpdateTeamMemberRequest(req, existingMember);
// 如果更新了用户信息电话或邮箱同时更新用户表
if (StrUtil.isNotBlank(req.getPhone()) || StrUtil.isNotBlank(req.getEmail())) {
UserEntity user = userService.getById(existingMember.getUserId());
if (user != null) {
boolean needUpdateUser = false;
if (StrUtil.isNotBlank(req.getPhone())) {
user.setMobile(req.getPhone());
needUpdateUser = true;
}
if (StrUtil.isNotBlank(req.getEmail())) {
user.setEmail(req.getEmail());
needUpdateUser = true;
}
if (needUpdateUser) {
user.setUpdateBy(StpUtil.getLoginIdAsString());
user.setUpdateTime(LocalDateTime.now());
userService.updateById(user);
}
}
}
// 设置更新信息
existingMember.setUpdateBy(StpUtil.getLoginIdAsString());
existingMember.setUpdateTime(LocalDateTime.now());
this.updateById(existingMember);
// 返回更新后的成员信息
@ -271,6 +360,64 @@ public class ProjectMemberServiceImpl extends ServiceImpl<ProjectMemberMapper, P
}
}
/**
* 验证更新团队成员请求参数只验证非空字段
*/
private void validateUpdateTeamMemberRequest(TeamMemberReq req, ProjectMemberEntity existingMember) {
// 验证机组是否存在如果指定了机组
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("任务不存在");
}
}
}
/**
* 验证更新团队成员请求参数只验证非空字段
*/
private void validateUpdateTeamMemberRequest(TeamMemberUpdateReq req, ProjectMemberEntity existingMember) {
// 验证机组是否存在如果指定了机组
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获取成员信息
*/
@ -286,10 +433,17 @@ public class ProjectMemberServiceImpl extends ServiceImpl<ProjectMemberMapper, P
// 查询并返回单个成员信息
List<ProjectMemberResp> list = this.baseMapper.queryTeamMembers(query);
return list.stream()
.filter(member -> member.getMemberId().equals(memberId))
ProjectMemberResp member = list.stream()
.filter(m -> m.getMemberId().equals(memberId))
.findFirst()
.orElse(null);
if (member != null) {
// 丰富成员信息
enrichMemberInfo(CollUtil.toList(member));
}
return member;
}
// ========================== 项目看板相关方法实现 ==========================
@ -300,11 +454,15 @@ public class ProjectMemberServiceImpl extends ServiceImpl<ProjectMemberMapper, P
// 统计项目数量
resp.setTotalProjectsCount(projectService.count());
resp.setPendingProjectCount(projectService.lambdaQuery().eq(ProjectEntity::getStatus, 0).count());
resp.setInProgressProjectCount(projectService.lambdaQuery().eq(ProjectEntity::getStatus, 1).count());
resp.setCompletedProjectCount(projectService.lambdaQuery().eq(ProjectEntity::getStatus, 2).count());
resp.setAuditedProjectCount(projectService.lambdaQuery().eq(ProjectEntity::getStatus, 3).count());
resp.setAcceptedProjectCount(projectService.lambdaQuery().eq(ProjectEntity::getStatus, 4).count());
resp.setPendingProjectCount(projectService.lambdaQuery().eq(ProjectEntity::getStatus, 0).count()); // 未开工
resp.setInProgressProjectCount(projectService.lambdaQuery().eq(ProjectEntity::getStatus, 1).count()); // 筹备中
resp.setCompletedProjectCount(projectService.lambdaQuery().eq(ProjectEntity::getStatus, 2).count()); // 开工中
resp.setAuditedProjectCount(projectService.lambdaQuery().eq(ProjectEntity::getStatus, 3).count()); // 已审核
resp.setAcceptedProjectCount(projectService.lambdaQuery().eq(ProjectEntity::getStatus, 4).count()); // 已完工
// 新增状态统计
resp.setAcceptanceProjectCount(projectService.lambdaQuery().eq(ProjectEntity::getStatus, 5).count()); // 已验收
resp.setCollectionProjectCount(projectService.lambdaQuery().eq(ProjectEntity::getStatus, 6).count()); // 回款中
resp.setSettledProjectCount(projectService.lambdaQuery().eq(ProjectEntity::getStatus, 7).count()); // 已结算
// 统计机组数量
resp.setTotalTurbineCount(turbineService.count());
@ -336,11 +494,15 @@ public class ProjectMemberServiceImpl extends ServiceImpl<ProjectMemberMapper, P
ProjectKanbanDataResp resp = new ProjectKanbanDataResp();
// 获取各状态的项目列表
resp.setPendingProjects(getProjectKanbanItems(0));
resp.setInProgressProjects(getProjectKanbanItems(1));
resp.setCompletedProjects(getProjectKanbanItems(2));
resp.setAuditedProjects(getProjectKanbanItems(3));
resp.setAcceptedProjects(getProjectKanbanItems(4));
resp.setPendingProjects(getProjectKanbanItems(0)); // 未开工
resp.setInProgressProjects(getProjectKanbanItems(1)); // 筹备中
resp.setCompletedProjects(getProjectKanbanItems(2)); // 开工中
resp.setAuditedProjects(getProjectKanbanItems(3)); // 已审核
resp.setAcceptedProjects(getProjectKanbanItems(4)); // 已完工
// 新增状态项目列表
resp.setAcceptanceProjects(getProjectKanbanItems(5)); // 已验收
resp.setCollectionProjects(getProjectKanbanItems(6)); // 回款中
resp.setSettledProjects(getProjectKanbanItems(7)); // 已结算
return resp;
}

View File

@ -45,7 +45,7 @@ public class ProjectMemberController {
@PutMapping("/team-member/{memberId}")
public Result<ProjectMemberResp> updateTeamMember(
@PathVariable String memberId,
@Valid @RequestBody TeamMemberReq req) {
@RequestBody TeamMemberUpdateReq req) {
return Result.ok(projectMemberService.updateTeamMember(memberId, req));
}