项目人员模块crud方法联调
This commit is contained in:
parent
36958212f0
commit
15086236ea
|
@ -32,6 +32,15 @@ public class ProjectKanbanDataResp {
|
||||||
@ApiModelProperty("已验收项目列表")
|
@ApiModelProperty("已验收项目列表")
|
||||||
private List<ProjectKanbanItem> acceptedProjects;
|
private List<ProjectKanbanItem> acceptedProjects;
|
||||||
|
|
||||||
|
@ApiModelProperty("验收中项目列表")
|
||||||
|
private List<ProjectKanbanItem> acceptanceProjects;
|
||||||
|
|
||||||
|
@ApiModelProperty("回款中项目列表")
|
||||||
|
private List<ProjectKanbanItem> collectionProjects;
|
||||||
|
|
||||||
|
@ApiModelProperty("已结算项目列表")
|
||||||
|
private List<ProjectKanbanItem> settledProjects;
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
@ApiModel(value="ProjectKanbanItem对象", description="项目看板项目项")
|
@ApiModel(value="ProjectKanbanItem对象", description="项目看板项目项")
|
||||||
public static class ProjectKanbanItem {
|
public static class ProjectKanbanItem {
|
||||||
|
|
|
@ -31,6 +31,15 @@ public class ProjectKanbanStatsResp {
|
||||||
@ApiModelProperty("已验收项目数")
|
@ApiModelProperty("已验收项目数")
|
||||||
private Long acceptedProjectCount;
|
private Long acceptedProjectCount;
|
||||||
|
|
||||||
|
@ApiModelProperty("验收中项目数")
|
||||||
|
private Long acceptanceProjectCount;
|
||||||
|
|
||||||
|
@ApiModelProperty("回款中项目数")
|
||||||
|
private Long collectionProjectCount;
|
||||||
|
|
||||||
|
@ApiModelProperty("已结算项目数")
|
||||||
|
private Long settledProjectCount;
|
||||||
|
|
||||||
@ApiModelProperty("总机组数")
|
@ApiModelProperty("总机组数")
|
||||||
private Long totalTurbineCount;
|
private Long totalTurbineCount;
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
|
}
|
|
@ -15,11 +15,14 @@ import java.util.List;
|
||||||
@Getter
|
@Getter
|
||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
public enum ProjectStatusEnum {
|
public enum ProjectStatusEnum {
|
||||||
PENDING(0, "待施工"),
|
PENDING(0, "未开工"),
|
||||||
IN_PROGRESS(1, "施工中"),
|
IN_PREPARATION(1, "筹备中"),
|
||||||
COMPLETED(2, "已完工"),
|
IN_PROGRESS(2, "开工中"),
|
||||||
AUDITED(3, "已审核"),
|
AUDITED(3, "已审核"),
|
||||||
ACCEPTED(4, "已验收");
|
COMPLETED(4, "已完工"),
|
||||||
|
ACCEPTED(5, "已验收"),
|
||||||
|
IN_COLLECTION(6, "回款中"),
|
||||||
|
SETTLED(7, "已结算");
|
||||||
|
|
||||||
private final int code;
|
private final int code;
|
||||||
private final String desc;
|
private final String desc;
|
||||||
|
|
|
@ -27,6 +27,11 @@ public interface ProjectMemberService extends IService<ProjectMemberEntity> {
|
||||||
*/
|
*/
|
||||||
ProjectMemberResp updateTeamMember(String memberId, TeamMemberReq req);
|
ProjectMemberResp updateTeamMember(String memberId, TeamMemberReq req);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 更新团队成员信息(使用更新专用请求类)
|
||||||
|
*/
|
||||||
|
ProjectMemberResp updateTeamMember(String memberId, TeamMemberUpdateReq req);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 删除团队成员(支持单个或批量删除)
|
* 删除团队成员(支持单个或批量删除)
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
package com.dite.znpt.service.impl;
|
package com.dite.znpt.service.impl;
|
||||||
|
|
||||||
|
import cn.dev33.satoken.stp.StpUtil;
|
||||||
import cn.hutool.core.bean.BeanUtil;
|
import cn.hutool.core.bean.BeanUtil;
|
||||||
import cn.hutool.core.collection.CollUtil;
|
import cn.hutool.core.collection.CollUtil;
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
|
@ -18,6 +19,7 @@ import lombok.RequiredArgsConstructor;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
@ -188,6 +190,14 @@ public class ProjectMemberServiceImpl extends ServiceImpl<ProjectMemberMapper, P
|
||||||
ProjectMemberEntity entity = new ProjectMemberEntity();
|
ProjectMemberEntity entity = new ProjectMemberEntity();
|
||||||
BeanUtil.copyProperties(req, entity);
|
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);
|
this.save(entity);
|
||||||
|
|
||||||
|
@ -208,6 +218,85 @@ public class ProjectMemberServiceImpl extends ServiceImpl<ProjectMemberMapper, P
|
||||||
|
|
||||||
// 更新成员信息
|
// 更新成员信息
|
||||||
BeanUtil.copyProperties(req, existingMember);
|
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);
|
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获取成员信息
|
* 根据成员ID获取成员信息
|
||||||
*/
|
*/
|
||||||
|
@ -286,10 +433,17 @@ public class ProjectMemberServiceImpl extends ServiceImpl<ProjectMemberMapper, P
|
||||||
|
|
||||||
// 查询并返回单个成员信息
|
// 查询并返回单个成员信息
|
||||||
List<ProjectMemberResp> list = this.baseMapper.queryTeamMembers(query);
|
List<ProjectMemberResp> list = this.baseMapper.queryTeamMembers(query);
|
||||||
return list.stream()
|
ProjectMemberResp member = list.stream()
|
||||||
.filter(member -> member.getMemberId().equals(memberId))
|
.filter(m -> m.getMemberId().equals(memberId))
|
||||||
.findFirst()
|
.findFirst()
|
||||||
.orElse(null);
|
.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.setTotalProjectsCount(projectService.count());
|
||||||
resp.setPendingProjectCount(projectService.lambdaQuery().eq(ProjectEntity::getStatus, 0).count());
|
resp.setPendingProjectCount(projectService.lambdaQuery().eq(ProjectEntity::getStatus, 0).count()); // 未开工
|
||||||
resp.setInProgressProjectCount(projectService.lambdaQuery().eq(ProjectEntity::getStatus, 1).count());
|
resp.setInProgressProjectCount(projectService.lambdaQuery().eq(ProjectEntity::getStatus, 1).count()); // 筹备中
|
||||||
resp.setCompletedProjectCount(projectService.lambdaQuery().eq(ProjectEntity::getStatus, 2).count());
|
resp.setCompletedProjectCount(projectService.lambdaQuery().eq(ProjectEntity::getStatus, 2).count()); // 开工中
|
||||||
resp.setAuditedProjectCount(projectService.lambdaQuery().eq(ProjectEntity::getStatus, 3).count());
|
resp.setAuditedProjectCount(projectService.lambdaQuery().eq(ProjectEntity::getStatus, 3).count()); // 已审核
|
||||||
resp.setAcceptedProjectCount(projectService.lambdaQuery().eq(ProjectEntity::getStatus, 4).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());
|
resp.setTotalTurbineCount(turbineService.count());
|
||||||
|
@ -336,11 +494,15 @@ public class ProjectMemberServiceImpl extends ServiceImpl<ProjectMemberMapper, P
|
||||||
ProjectKanbanDataResp resp = new ProjectKanbanDataResp();
|
ProjectKanbanDataResp resp = new ProjectKanbanDataResp();
|
||||||
|
|
||||||
// 获取各状态的项目列表
|
// 获取各状态的项目列表
|
||||||
resp.setPendingProjects(getProjectKanbanItems(0));
|
resp.setPendingProjects(getProjectKanbanItems(0)); // 未开工
|
||||||
resp.setInProgressProjects(getProjectKanbanItems(1));
|
resp.setInProgressProjects(getProjectKanbanItems(1)); // 筹备中
|
||||||
resp.setCompletedProjects(getProjectKanbanItems(2));
|
resp.setCompletedProjects(getProjectKanbanItems(2)); // 开工中
|
||||||
resp.setAuditedProjects(getProjectKanbanItems(3));
|
resp.setAuditedProjects(getProjectKanbanItems(3)); // 已审核
|
||||||
resp.setAcceptedProjects(getProjectKanbanItems(4));
|
resp.setAcceptedProjects(getProjectKanbanItems(4)); // 已完工
|
||||||
|
// 新增状态项目列表
|
||||||
|
resp.setAcceptanceProjects(getProjectKanbanItems(5)); // 已验收
|
||||||
|
resp.setCollectionProjects(getProjectKanbanItems(6)); // 回款中
|
||||||
|
resp.setSettledProjects(getProjectKanbanItems(7)); // 已结算
|
||||||
|
|
||||||
return resp;
|
return resp;
|
||||||
}
|
}
|
||||||
|
|
|
@ -45,7 +45,7 @@ public class ProjectMemberController {
|
||||||
@PutMapping("/team-member/{memberId}")
|
@PutMapping("/team-member/{memberId}")
|
||||||
public Result<ProjectMemberResp> updateTeamMember(
|
public Result<ProjectMemberResp> updateTeamMember(
|
||||||
@PathVariable String memberId,
|
@PathVariable String memberId,
|
||||||
@Valid @RequestBody TeamMemberReq req) {
|
@RequestBody TeamMemberUpdateReq req) {
|
||||||
return Result.ok(projectMemberService.updateTeamMember(memberId, req));
|
return Result.ok(projectMemberService.updateTeamMember(memberId, req));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue