项目人员调度模块前端卡片接口联调
This commit is contained in:
parent
f2d2800f79
commit
8bdbbdccd5
|
@ -43,11 +43,6 @@ public class ProjectBudgetInfoEntity extends AuditableEntity implements Serializ
|
|||
@TableField("budget_name")
|
||||
private String budgetName;
|
||||
|
||||
@ExcelProperty("预算类型")
|
||||
@ApiModelProperty("预算类型")
|
||||
@TableField("budget_type")
|
||||
private String budgetType;
|
||||
|
||||
@ExcelProperty("预算金额(万元)")
|
||||
@ApiModelProperty("预算金额(万元)")
|
||||
@TableField("budget_amount")
|
||||
|
|
|
@ -26,9 +26,6 @@ public class ProjectBudgetInfoReq implements Serializable {
|
|||
@ApiModelProperty("预算名称")
|
||||
private String budgetName;
|
||||
|
||||
@ApiModelProperty("预算类型")
|
||||
private String budgetType;
|
||||
|
||||
@ApiModelProperty("预算金额(万元)")
|
||||
private Double budgetAmount;
|
||||
|
||||
|
|
|
@ -16,7 +16,5 @@ import lombok.EqualsAndHashCode;
|
|||
@ApiModel("项目预算信息响应实体")
|
||||
public class ProjectBudgetInfoResp extends ProjectBudgetInfoEntity {
|
||||
|
||||
@ApiModelProperty("预算类型描述")
|
||||
private String budgetTypeDesc;
|
||||
}
|
||||
|
||||
|
|
|
@ -4,6 +4,7 @@ import io.swagger.annotations.ApiModel;
|
|||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDate;
|
||||
import java.util.List;
|
||||
|
||||
|
@ -70,12 +71,31 @@ public class ProjectDetailResp {
|
|||
@ApiModelProperty("结束时间")
|
||||
private LocalDate endDate;
|
||||
|
||||
@ApiModelProperty("计划开始时间")
|
||||
private LocalDate plannedStartDate;
|
||||
|
||||
@ApiModelProperty("创建时间")
|
||||
private String createTime;
|
||||
|
||||
@ApiModelProperty("更新时间")
|
||||
private String updateTime;
|
||||
|
||||
// 新增字段 - 对应前端ProjectCard接口
|
||||
@ApiModelProperty("项目预算(万元)")
|
||||
private BigDecimal budget;
|
||||
|
||||
@ApiModelProperty("项目经理")
|
||||
private String manager;
|
||||
|
||||
@ApiModelProperty("团队规模")
|
||||
private Integer teamSize;
|
||||
|
||||
@ApiModelProperty("准备进度百分比")
|
||||
private Integer preparationProgress;
|
||||
|
||||
@ApiModelProperty("项目进度百分比")
|
||||
private Integer progress;
|
||||
|
||||
// 项目人员信息(从新关联表获取)
|
||||
@ApiModelProperty("项目人员列表")
|
||||
private List<ProjectMemberResp> projectMembers;
|
||||
|
@ -152,9 +172,6 @@ public class ProjectDetailResp {
|
|||
@ApiModelProperty("预算名称")
|
||||
private String budgetName;
|
||||
|
||||
@ApiModelProperty("预算类型")
|
||||
private String budgetType;
|
||||
|
||||
@ApiModelProperty("预算金额(万元)")
|
||||
private Double budgetAmount;
|
||||
|
||||
|
|
|
@ -4,6 +4,7 @@ import io.swagger.annotations.ApiModel;
|
|||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDate;
|
||||
import java.util.List;
|
||||
|
||||
|
@ -71,6 +72,9 @@ public class ProjectKanbanDataResp {
|
|||
@ApiModelProperty("结束时间")
|
||||
private LocalDate endDate;
|
||||
|
||||
@ApiModelProperty("计划开始时间")
|
||||
private LocalDate plannedStartDate;
|
||||
|
||||
@ApiModelProperty("项目经理")
|
||||
private String projectManagerName;
|
||||
|
||||
|
@ -103,5 +107,67 @@ public class ProjectKanbanDataResp {
|
|||
|
||||
@ApiModelProperty("更新时间")
|
||||
private String updateTime;
|
||||
|
||||
// 新增字段 - 对应前端ProjectCard接口
|
||||
@ApiModelProperty("项目预算(万元)")
|
||||
private BigDecimal budget;
|
||||
|
||||
@ApiModelProperty("项目经理")
|
||||
private String manager;
|
||||
|
||||
@ApiModelProperty("团队规模")
|
||||
private Integer teamSize;
|
||||
|
||||
@ApiModelProperty("准备进度百分比")
|
||||
private Integer preparationProgress;
|
||||
|
||||
@ApiModelProperty("项目进度百分比")
|
||||
private Integer progress;
|
||||
|
||||
@ApiModelProperty("团队成员列表")
|
||||
private List<TeamMemberResp> teamMembers;
|
||||
|
||||
@Data
|
||||
@ApiModel(value="TeamMemberResp对象", description="团队成员响应")
|
||||
public static class TeamMemberResp {
|
||||
@ApiModelProperty("成员ID")
|
||||
private String memberId;
|
||||
|
||||
@ApiModelProperty("用户ID")
|
||||
private String userId;
|
||||
|
||||
@ApiModelProperty("用户姓名")
|
||||
private String userName;
|
||||
|
||||
@ApiModelProperty("用户账号")
|
||||
private String userAccount;
|
||||
|
||||
@ApiModelProperty("用户头像")
|
||||
private String userAvatar;
|
||||
|
||||
@ApiModelProperty("角色类型")
|
||||
private String roleType;
|
||||
|
||||
@ApiModelProperty("角色类型描述")
|
||||
private String roleTypeDesc;
|
||||
|
||||
@ApiModelProperty("岗位代码")
|
||||
private String jobCode;
|
||||
|
||||
@ApiModelProperty("岗位代码描述")
|
||||
private String jobCodeDesc;
|
||||
|
||||
@ApiModelProperty("岗位描述")
|
||||
private String jobDesc;
|
||||
|
||||
@ApiModelProperty("加入时间")
|
||||
private LocalDate joinDate;
|
||||
|
||||
@ApiModelProperty("离开时间")
|
||||
private LocalDate leaveDate;
|
||||
|
||||
@ApiModelProperty("状态")
|
||||
private String status;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -62,9 +62,6 @@ public class ProjectBudgetInfoServiceImpl extends ServiceImpl<ProjectBudgetInfoM
|
|||
@Override
|
||||
public List<ProjectBudgetInfoResp> detailByProjectId(String projectId) {
|
||||
List<ProjectBudgetInfoResp> projectBudgetInfoList= this.baseMapper.detailByProjectId(projectId);
|
||||
projectBudgetInfoList.forEach(resp -> {
|
||||
resp.setBudgetTypeDesc(BudgeTypeEnum.getDescByCode(resp.getBudgetType()));
|
||||
});
|
||||
return projectBudgetInfoList;
|
||||
}
|
||||
|
||||
|
|
|
@ -19,6 +19,7 @@ import lombok.RequiredArgsConstructor;
|
|||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.function.Function;
|
||||
|
@ -293,7 +294,51 @@ public class ProjectMemberServiceImpl extends ServiceImpl<ProjectMemberMapper, P
|
|||
resp.setStatusLabel(ProjectStatusEnum.getDescByCode(resp.getStatus()));
|
||||
|
||||
// 获取项目人员信息
|
||||
resp.setProjectMembers(selectByProjectId(projectId));
|
||||
List<ProjectMemberResp> projectMembers = selectByProjectId(projectId);
|
||||
resp.setProjectMembers(projectMembers);
|
||||
|
||||
// 计算团队规模
|
||||
resp.setTeamSize(projectMembers.size());
|
||||
|
||||
// 获取项目经理信息
|
||||
String managerName = projectMembers.stream()
|
||||
.filter(member -> "PROJECT_MANAGER".equals(member.getRoleType()))
|
||||
.map(ProjectMemberResp::getUserName)
|
||||
.findFirst()
|
||||
.orElse("");
|
||||
resp.setManager(managerName);
|
||||
|
||||
// 计算项目预算(从预算信息中汇总)
|
||||
List<ProjectBudgetInfoEntity> budgets = projectBudgetInfoService.lambdaQuery()
|
||||
.eq(ProjectBudgetInfoEntity::getProjectId, projectId)
|
||||
.list();
|
||||
BigDecimal totalBudget = budgets.stream()
|
||||
.map(budget -> BigDecimal.valueOf(budget.getBudgetAmount()))
|
||||
.reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||
resp.setBudget(totalBudget);
|
||||
|
||||
// 计算项目进度
|
||||
List<ProjectTaskEntity> tasks = projectTaskService.lambdaQuery()
|
||||
.eq(ProjectTaskEntity::getProjectId, projectId)
|
||||
.list();
|
||||
if (!tasks.isEmpty()) {
|
||||
long completedTasks = tasks.stream()
|
||||
.filter(task -> task.getStatus() != null && task.getStatus() == 2)
|
||||
.count();
|
||||
resp.setProgress((int) (completedTasks * 100 / tasks.size()));
|
||||
} else {
|
||||
resp.setProgress(0);
|
||||
}
|
||||
|
||||
// 计算准备进度(基于任务状态)
|
||||
if (!tasks.isEmpty()) {
|
||||
long preparedTasks = tasks.stream()
|
||||
.filter(task -> task.getStatus() != null && task.getStatus() >= 1)
|
||||
.count();
|
||||
resp.setPreparationProgress((int) (preparedTasks * 100 / tasks.size()));
|
||||
} else {
|
||||
resp.setPreparationProgress(0);
|
||||
}
|
||||
|
||||
// 获取项目机组信息
|
||||
List<TurbineEntity> turbines = turbineService.lambdaQuery()
|
||||
|
@ -307,9 +352,6 @@ public class ProjectMemberServiceImpl extends ServiceImpl<ProjectMemberMapper, P
|
|||
}).collect(Collectors.toList()));
|
||||
|
||||
// 获取项目任务信息
|
||||
List<ProjectTaskEntity> tasks = projectTaskService.lambdaQuery()
|
||||
.eq(ProjectTaskEntity::getProjectId, projectId)
|
||||
.list();
|
||||
resp.setTasks(tasks.stream().map(task -> {
|
||||
ProjectDetailResp.TaskInfo info = new ProjectDetailResp.TaskInfo();
|
||||
BeanUtil.copyProperties(task, info);
|
||||
|
@ -318,9 +360,6 @@ public class ProjectMemberServiceImpl extends ServiceImpl<ProjectMemberMapper, P
|
|||
}).collect(Collectors.toList()));
|
||||
|
||||
// 获取项目预算信息
|
||||
List<ProjectBudgetInfoEntity> budgets = projectBudgetInfoService.lambdaQuery()
|
||||
.eq(ProjectBudgetInfoEntity::getProjectId, projectId)
|
||||
.list();
|
||||
resp.setBudgets(budgets.stream().map(budget -> {
|
||||
ProjectDetailResp.BudgetInfo info = new ProjectDetailResp.BudgetInfo();
|
||||
BeanUtil.copyProperties(budget, info);
|
||||
|
@ -381,6 +420,22 @@ public class ProjectMemberServiceImpl extends ServiceImpl<ProjectMemberMapper, P
|
|||
item.setConstructionTeamLeaderName(memberNames.get("TEAM_LEADER"));
|
||||
item.setConstructorNames(memberNames.get("CONSTRUCTOR"));
|
||||
|
||||
// 设置项目经理
|
||||
item.setManager(memberNames.get("PROJECT_MANAGER"));
|
||||
|
||||
// 设置团队规模
|
||||
item.setTeamSize(members.size());
|
||||
|
||||
// 转换为团队成员列表
|
||||
List<ProjectKanbanDataResp.ProjectKanbanItem.TeamMemberResp> teamMembers = members.stream()
|
||||
.map(member -> {
|
||||
ProjectKanbanDataResp.ProjectKanbanItem.TeamMemberResp teamMember = new ProjectKanbanDataResp.ProjectKanbanItem.TeamMemberResp();
|
||||
BeanUtil.copyProperties(member, teamMember);
|
||||
return teamMember;
|
||||
})
|
||||
.collect(Collectors.toList());
|
||||
item.setTeamMembers(teamMembers);
|
||||
|
||||
// 统计机组数量
|
||||
Long turbineCount = turbineService.lambdaQuery()
|
||||
.eq(TurbineEntity::getProjectId, project.getProjectId())
|
||||
|
@ -403,10 +458,32 @@ public class ProjectMemberServiceImpl extends ServiceImpl<ProjectMemberMapper, P
|
|||
// 计算项目进度百分比
|
||||
if (taskCount > 0) {
|
||||
item.setProgressPercentage((int) (completedTaskCount * 100 / taskCount));
|
||||
item.setProgress((int) (completedTaskCount * 100 / taskCount));
|
||||
} else {
|
||||
item.setProgressPercentage(0);
|
||||
item.setProgress(0);
|
||||
}
|
||||
|
||||
// 计算准备进度(基于任务状态)
|
||||
if (taskCount > 0) {
|
||||
Long preparedTasks = projectTaskService.lambdaQuery()
|
||||
.eq(ProjectTaskEntity::getProjectId, project.getProjectId())
|
||||
.ge(ProjectTaskEntity::getStatus, 1)
|
||||
.count();
|
||||
item.setPreparationProgress((int) (preparedTasks * 100 / taskCount));
|
||||
} else {
|
||||
item.setPreparationProgress(0);
|
||||
}
|
||||
|
||||
// 计算项目预算(从预算信息中汇总)
|
||||
List<ProjectBudgetInfoEntity> budgets = projectBudgetInfoService.lambdaQuery()
|
||||
.eq(ProjectBudgetInfoEntity::getProjectId, project.getProjectId())
|
||||
.list();
|
||||
BigDecimal totalBudget = budgets.stream()
|
||||
.map(budget -> BigDecimal.valueOf(budget.getBudgetAmount()))
|
||||
.reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||
item.setBudget(totalBudget);
|
||||
|
||||
return item;
|
||||
}).collect(Collectors.toList());
|
||||
}
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
<mapper namespace="com.dite.znpt.mapper.ProjectBudgetInfoMapper">
|
||||
|
||||
<sql id="Base_Column_List">
|
||||
a.budget_id, a.project_id, a.budget_name, a.budget_type,
|
||||
a.budget_id, a.project_id, a.budget_name,
|
||||
a.budget_amount, a.budget_desc, a.update_by, a.create_time,
|
||||
a.create_by, a.update_time
|
||||
</sql>
|
||||
|
@ -23,9 +23,6 @@
|
|||
<if test="budgetName != null and budgetName != ''">
|
||||
and a.budget_name like concat ('%', #{budgetName}, '%')
|
||||
</if>
|
||||
<if test="budgetType != null and budgetType != ''">
|
||||
and a.budget_type like concat ('%', #{budgetType}, '%')
|
||||
</if>
|
||||
<if test="budgetAmount != null">
|
||||
and a.budget_amount = #{budgetAmount}
|
||||
</if>
|
||||
|
|
Loading…
Reference in New Issue