feat:优化问题

main^2
chenhao 2024-10-22 14:44:24 +08:00
parent d14740474c
commit ecc2b56c6f
5 changed files with 44 additions and 21 deletions

View File

@ -1,10 +1,7 @@
package tech.unissense.pms.business.project.domain;
import lombok.AccessLevel;
import lombok.Data;
import lombok.Getter;
import tech.unissense.pms.common.core.domain.BaseEntity;
import tech.unissense.pms.common.utils.DateUtils;
import java.util.Date;
@ -57,6 +54,10 @@ public class Project extends BaseEntity {
* 0 -; 1-
*/
private String state;
/**
* 0- 1- 2-
*/
private String dataState;
/**
* 0- 1- 2-
*/

View File

@ -84,11 +84,11 @@ public class ProjectServiceImpl implements IProjectService {
return;
}
if (nowDate.before(item.getStartDate())) {
item.setProjectState("0");
item.setDataState("0");
} else if (nowDate.after(item.getStartDate()) && nowDate.before(item.getEndDate())) {
item.setProjectState("1");
item.setDataState("1");
} else if (nowDate.after(item.getEndDate())) {
item.setProjectState("2");
item.setDataState("2");
}
});

View File

@ -1,6 +1,7 @@
package tech.unissense.pms.business.work.logger.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.ListUtil;
import org.springframework.stereotype.Service;
import tech.unissense.pms.business.project.domain.Project;
import tech.unissense.pms.business.work.logger.domain.WorkLogger;
@ -10,6 +11,7 @@ import tech.unissense.pms.business.work.logger.vo.CalendarVo;
import tech.unissense.pms.business.work.logger.vo.StaticsHourVo;
import tech.unissense.pms.common.utils.DateUtils;
import tech.unissense.pms.common.utils.SecurityUtils;
import java.util.Objects;
import javax.annotation.Resource;
import java.math.BigDecimal;
@ -122,12 +124,20 @@ public class WorkLoggerServiceImpl implements IWorkLoggerService {
@Override
public List<StaticsHourVo> projectStatics(List<Project> projects, String userId) {
if (CollUtil.isEmpty(projects) || userId == null) {
return ListUtil.empty();
}
// 提取项目ID列表
List<Integer> projectIds = projects.stream()
.map(Project::getProjectId)
.filter(Objects::nonNull) // 检查ProjectId是否为null
.collect(Collectors.toList());
if (projectIds.isEmpty()) {
return ListUtil.empty();
}
// 创建一个Map用于快速查找项目的开始和结束日期
Map<Integer, Project> projectMap = projects.stream()
.filter(project -> project.getProjectId() != null) // 确保ProjectId不为null
.collect(Collectors.toMap(Project::getProjectId, project -> project));
// 创建WorkHour对象并设置查询条件
WorkLogger workLogger = new WorkLogger();
@ -136,21 +146,27 @@ public class WorkLoggerServiceImpl implements IWorkLoggerService {
// 查询与项目ID和用户ID相关的工时记录
List<WorkLogger> list = workLoggerMapper.list(workLogger);
if (list == null) {
return ListUtil.empty();
}
// 按项目ID汇总工时
Map<Integer, BigDecimal> workHourMap = list.stream().filter(item -> {
if (item == null || item.getProjectId() == null || item.getLoggerDate() == null) {
return false;
}
Project project = projectMap.get(item.getProjectId());
if (project == null) {
if (project == null || project.getStartDate() == null || project.getEndDate() == null) {
return false;
}
return !item.getLoggerDate().before(project.getStartDate()) && !item.getLoggerDate().after(project.getEndDate());
})
.collect(Collectors.toMap(
WorkLogger::getProjectId,
item->new BigDecimal(item.getWorkTime()),
item -> new BigDecimal(item.getWorkTime()),
BigDecimal::add
));
return generateStaticsHourVoList(projects, workHourMap, Project::getProjectId, Project::getProjectName);
}

View File

@ -13,6 +13,7 @@
<result property="endDate" column="end_date" jdbcType="TIMESTAMP"/>
<result property="budgetDate" column="budget_date" jdbcType="INTEGER"/>
<result property="state" column="state" jdbcType="VARCHAR"/>
<result property="dataState" column="data_state" jdbcType="VARCHAR"/>
<result property="projectState" column="project_state" jdbcType="VARCHAR"/>
<result property="createBy" column="create_by" jdbcType="INTEGER"/>
<result property="updateBy" column="update_by" jdbcType="INTEGER"/>
@ -51,6 +52,7 @@
t1.budget_date,
t1.state,
t1.project_state,
t1.data_state,
t1.create_by,
t1.update_by,
t1.update_time,
@ -64,7 +66,7 @@
<select id="list" resultMap="ProjectMap">
select
t1.project_id, t1.tenant_id, t1.project_name, t1.project_code, t1.project_leader,t4.nick_name project_leader_name, t1.start_date, t1.end_date, t1.budget_date, t1.state,
t1.project_state, t1.create_by, t1.update_by, t1.update_time, t1.create_time,t2.team_num,t3.nick_name create_by_name
t1.project_state, t1.data_state, t1.create_by, t1.update_by, t1.update_time, t1.create_time,t2.team_num,t3.nick_name create_by_name
from pms_project t1 left join (select count(1) team_num,project_id from pms_project_team group by project_id) t2 on t1.project_id=t2.project_id
left join sys_user t3 on t1.create_by=t3.user_id
left join sys_user t4 on t1.project_leader=t4.user_id
@ -195,10 +197,10 @@
<!--新增所有列-->
<insert id="insert" keyProperty="projectId" useGeneratedKeys="true">
insert into pms_project(tenant_id, project_name, project_code, project_leader, start_date, end_date,
budget_date, state, project_state, create_by, update_by,
budget_date, state, project_state, data_state, create_by, update_by,
update_time, create_time)
values (#{tenantId}, #{projectName}, #{projectCode}, #{projectLeader}, #{startDate}, #{endDate}, #{budgetDate},
#{state}, #{projectState}, #{createBy}, #{updateBy}, #{updateTime},
#{state}, #{projectState},#{dataState}, #{createBy}, #{updateBy}, #{updateTime},
#{createTime})
</insert>
@ -271,6 +273,9 @@
<if test="state != null and state != ''">
state = #{state},
</if>
<if test="dataState != null and dataState != ''">
data_state = #{dataState},
</if>
<if test="projectState != null and projectState != ''">
project_state = #{projectState},
</if>

View File

@ -47,37 +47,38 @@
left join sys_user t2 on t1.user_id=t2.user_id
<where>
<if test="projectId != null">
and project_id = #{projectId}
and t1.project_id = #{projectId}
</if>
<if test="projectIdList != null and projectIdList.size>0">
and project_id in
and t1.project_id in
<foreach collection="projectIdList" item="item" open="(" close=")" separator=",">
#{item}
</foreach>
</if>
<if test="teamId != null">
and team_id = #{teamId}
and t1.team_id = #{teamId}
</if>
<if test="userId != null">
and user_id = #{userId}
and t1.user_id = #{userId}
</if>
<if test="postId != null and postId != ''">
and post_id = #{postId}
and t1.post_id = #{postId}
</if>
<if test="createBy != null and createBy != ''">
and create_by = #{createBy}
and t1.create_by = #{createBy}
</if>
<if test="updateBy != null and updateBy != ''">
and update_by = #{updateBy}
and t1.update_by = #{updateBy}
</if>
<if test="updateTime != null">
and update_time = #{updateTime}
and t1.update_time = #{updateTime}
</if>
<if test="createTime != null">
and create_time = #{createTime}
and t1.create_time = #{createTime}
</if>
</where>
order by t1.create_time desc
</select>
<!--统计总行数-->