Compare commits
No commits in common. "7665cdd2e0392ee4580f51e5b8327305d9fd2fa5" and "7034fecc0b44b56207d85f99475ad34728929837" have entirely different histories.
7665cdd2e0
...
7034fecc0b
|
@ -43,6 +43,11 @@ 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,6 +26,9 @@ public class ProjectBudgetInfoReq implements Serializable {
|
|||
@ApiModelProperty("预算名称")
|
||||
private String budgetName;
|
||||
|
||||
@ApiModelProperty("预算类型")
|
||||
private String budgetType;
|
||||
|
||||
@ApiModelProperty("预算金额(万元)")
|
||||
private Double budgetAmount;
|
||||
|
||||
|
|
|
@ -16,5 +16,7 @@ import lombok.EqualsAndHashCode;
|
|||
@ApiModel("项目预算信息响应实体")
|
||||
public class ProjectBudgetInfoResp extends ProjectBudgetInfoEntity {
|
||||
|
||||
@ApiModelProperty("预算类型描述")
|
||||
private String budgetTypeDesc;
|
||||
}
|
||||
|
||||
|
|
|
@ -4,7 +4,6 @@ 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,31 +70,12 @@ 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;
|
||||
|
@ -172,6 +152,9 @@ public class ProjectDetailResp {
|
|||
@ApiModelProperty("预算名称")
|
||||
private String budgetName;
|
||||
|
||||
@ApiModelProperty("预算类型")
|
||||
private String budgetType;
|
||||
|
||||
@ApiModelProperty("预算金额(万元)")
|
||||
private Double budgetAmount;
|
||||
|
||||
|
|
|
@ -4,7 +4,6 @@ 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;
|
||||
|
||||
|
@ -72,9 +71,6 @@ public class ProjectKanbanDataResp {
|
|||
@ApiModelProperty("结束时间")
|
||||
private LocalDate endDate;
|
||||
|
||||
@ApiModelProperty("计划开始时间")
|
||||
private LocalDate plannedStartDate;
|
||||
|
||||
@ApiModelProperty("项目经理")
|
||||
private String projectManagerName;
|
||||
|
||||
|
@ -107,67 +103,5 @@ 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,6 +62,9 @@ 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,7 +19,6 @@ 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;
|
||||
|
@ -294,51 +293,7 @@ public class ProjectMemberServiceImpl extends ServiceImpl<ProjectMemberMapper, P
|
|||
resp.setStatusLabel(ProjectStatusEnum.getDescByCode(resp.getStatus()));
|
||||
|
||||
// 获取项目人员信息
|
||||
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);
|
||||
}
|
||||
resp.setProjectMembers(selectByProjectId(projectId));
|
||||
|
||||
// 获取项目机组信息
|
||||
List<TurbineEntity> turbines = turbineService.lambdaQuery()
|
||||
|
@ -352,6 +307,9 @@ 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);
|
||||
|
@ -360,6 +318,9 @@ 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);
|
||||
|
@ -420,22 +381,6 @@ 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())
|
||||
|
@ -458,32 +403,10 @@ 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_id, a.project_id, a.budget_name, a.budget_type,
|
||||
a.budget_amount, a.budget_desc, a.update_by, a.create_time,
|
||||
a.create_by, a.update_time
|
||||
</sql>
|
||||
|
@ -23,6 +23,9 @@
|
|||
<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>
|
||||
|
|
|
@ -24,7 +24,6 @@ import java.util.List;
|
|||
* @date 2025/08/05
|
||||
* @Description: 项目人员管理Controller
|
||||
*/
|
||||
|
||||
@Api(tags = "项目人员管理")
|
||||
@RestController
|
||||
@RequestMapping("/project-member")
|
||||
|
|
Loading…
Reference in New Issue