feat(project): 增加项目执行信息查询功能
- 新增 ProjectQueryDto 类用于项目执行信息查询参数 - 修改 IProjectService 接口,增加 executionInfo 方法 - 实现 ProjectServiceImpl 中的 executionInfo 方法,支持按用户和日期筛选 - 更新 ProjectMapper.xml,移除项目状态的复杂查询逻辑 - 在 WorkLoggerServiceImpl 中为 CalendarVo 添加工作时间字段dev_1.0.0
parent
f9b4b3d49d
commit
dc09c7f5e0
|
@ -137,8 +137,8 @@ public class ProjectController extends BaseController {
|
||||||
*/
|
*/
|
||||||
// @PreAuthorize("@ss.hasPermi('system:dept:remove')")
|
// @PreAuthorize("@ss.hasPermi('system:dept:remove')")
|
||||||
@PostMapping("/executionInfo")
|
@PostMapping("/executionInfo")
|
||||||
public AjaxResult executionInfo(@RequestBody WorkLogger workLogger) {
|
public AjaxResult executionInfo(@RequestBody ProjectQueryDto queryDto) {
|
||||||
return success(service.executionInfo(workLogger));
|
return success(service.executionInfo(queryDto));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -56,7 +56,9 @@ public class Project extends BaseEntity {
|
||||||
private String state;
|
private String state;
|
||||||
/**
|
/**
|
||||||
* 数据状态 0-待启动 1-进行中 2-已完成
|
* 数据状态 0-待启动 1-进行中 2-已完成
|
||||||
|
* 暂不展示
|
||||||
*/
|
*/
|
||||||
|
@Deprecated
|
||||||
private String dataState;
|
private String dataState;
|
||||||
/**
|
/**
|
||||||
* 项目状态 0-待启动 1-进行中 2-已完成
|
* 项目状态 0-待启动 1-进行中 2-已完成
|
||||||
|
|
|
@ -22,4 +22,6 @@ public class ProjectQueryDto {
|
||||||
private Integer projectId;
|
private Integer projectId;
|
||||||
private Date startDate;
|
private Date startDate;
|
||||||
private Date endDate;
|
private Date endDate;
|
||||||
|
private Integer userId;
|
||||||
|
private String projectState;
|
||||||
}
|
}
|
||||||
|
|
|
@ -60,10 +60,9 @@ public interface IProjectService {
|
||||||
|
|
||||||
List<Project> listProjectByUser(String createBy);
|
List<Project> listProjectByUser(String createBy);
|
||||||
|
|
||||||
List<TeamStaticsVo> getTeamInfo(Integer projectId);
|
List<TeamStaticsVo> getTeamInfo(Integer projectId);
|
||||||
|
|
||||||
List<ProjectExecutionVo> executionInfo(WorkLogger workLogger);
|
|
||||||
|
|
||||||
|
List<ProjectExecutionVo> executionInfo(ProjectQueryDto ProjectQueryDto);
|
||||||
|
|
||||||
ProjectWorkInfoVo workInfo(ProjectQueryDto project);
|
ProjectWorkInfoVo workInfo(ProjectQueryDto project);
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
package tech.unissense.pms.business.project.service.impl;
|
package tech.unissense.pms.business.project.service.impl;
|
||||||
|
|
||||||
import cn.hutool.core.collection.CollUtil;
|
import cn.hutool.core.collection.CollUtil;
|
||||||
|
import cn.hutool.core.util.StrUtil;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
@ -73,6 +74,7 @@ public class ProjectServiceImpl implements IProjectService {
|
||||||
* @param project 筛选条件
|
* @param project 筛选条件
|
||||||
* @return 查询结果
|
* @return 查询结果
|
||||||
*/
|
*/
|
||||||
|
@Override
|
||||||
public List<Project> permissisonList(Project project) {
|
public List<Project> permissisonList(Project project) {
|
||||||
dataPermissions(project);
|
dataPermissions(project);
|
||||||
List<Project> list = this.projectMapper.list(project);
|
List<Project> list = this.projectMapper.list(project);
|
||||||
|
@ -243,11 +245,14 @@ public class ProjectServiceImpl implements IProjectService {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<ProjectExecutionVo> executionInfo(WorkLogger workLogger) {
|
public List<ProjectExecutionVo> executionInfo(ProjectQueryDto queryDto) {
|
||||||
|
|
||||||
Project projectQueryDto = new Project();
|
Project projectQueryDto = new Project();
|
||||||
if (workLogger.getUserId() != null) {
|
if (queryDto.getUserId() != null) {
|
||||||
projectQueryDto.setQueryUserId(Long.valueOf(workLogger.getUserId()));
|
projectQueryDto.setQueryUserId(Long.valueOf(queryDto.getUserId()));
|
||||||
|
}
|
||||||
|
if (queryDto.getProjectState() != null) {
|
||||||
|
projectQueryDto.setProjectState(queryDto.getProjectState());
|
||||||
}
|
}
|
||||||
List<Project> projects = this.permissisonList(projectQueryDto);
|
List<Project> projects = this.permissisonList(projectQueryDto);
|
||||||
List<Integer> projectIdList = projects.stream()
|
List<Integer> projectIdList = projects.stream()
|
||||||
|
@ -259,9 +264,23 @@ public class ProjectServiceImpl implements IProjectService {
|
||||||
.map(item -> item.getProjectId() + "_" + item.getUserId())
|
.map(item -> item.getProjectId() + "_" + item.getUserId())
|
||||||
.collect(Collectors.toSet());
|
.collect(Collectors.toSet());
|
||||||
|
|
||||||
|
WorkLogger workLogger = new WorkLogger();
|
||||||
workLogger.setProjectIdList(projectIdList);
|
workLogger.setProjectIdList(projectIdList);
|
||||||
|
List<WorkLogger> allWorkLoggerList = workLoggerService.list(workLogger);
|
||||||
|
Map<Integer, BigDecimal> workTimeAllMap = allWorkLoggerList.stream().filter(item-> StrUtil.isNotEmpty(item.getWorkTime())).collect(Collectors.groupingBy(WorkLogger::getProjectId, Collectors.reducing(BigDecimal.ZERO
|
||||||
|
, item -> new BigDecimal(item.getWorkTime()), BigDecimal::add)));
|
||||||
|
// BeanUtils.copyBeanProp(workLogger,queryDto);
|
||||||
|
|
||||||
Map<String, BigDecimal> workTimeMap = workLoggerService.list(workLogger).stream()
|
List<WorkLogger> workLoggerList = allWorkLoggerList.stream()
|
||||||
|
.filter(item -> {
|
||||||
|
Date date = item.getLoggerDate();
|
||||||
|
Integer userId = item.getUserId();
|
||||||
|
return (date != null && !date.before(queryDto.getStartDate()) && !date.after(queryDto.getEndDate())) &&
|
||||||
|
(queryDto.getUserId() != null && queryDto.getUserId().equals(userId));
|
||||||
|
})
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
|
Map<String, BigDecimal> workTimeMap = workLoggerList.stream()
|
||||||
.filter(item -> teamSet.contains(item.getProjectId() + "_" + item.getUserId()))
|
.filter(item -> teamSet.contains(item.getProjectId() + "_" + item.getUserId()))
|
||||||
.collect(Collectors.toMap(
|
.collect(Collectors.toMap(
|
||||||
item -> item.getProjectId() + "_"
|
item -> item.getProjectId() + "_"
|
||||||
|
@ -269,8 +288,8 @@ public class ProjectServiceImpl implements IProjectService {
|
||||||
item -> new BigDecimal(item.getWorkTime()),
|
item -> new BigDecimal(item.getWorkTime()),
|
||||||
BigDecimal::add));
|
BigDecimal::add));
|
||||||
|
|
||||||
LocalDate startDate = workLogger.getStartDate().toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
|
LocalDate startDate = queryDto.getStartDate().toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
|
||||||
LocalDate endDate = workLogger.getEndDate().toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
|
LocalDate endDate = queryDto.getEndDate().toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
|
||||||
|
|
||||||
return projects.stream().map(project -> {
|
return projects.stream().map(project -> {
|
||||||
List<BigDecimal> tempList = Stream.iterate(startDate, date -> date.plusDays(1))
|
List<BigDecimal> tempList = Stream.iterate(startDate, date -> date.plusDays(1))
|
||||||
|
@ -290,6 +309,7 @@ public class ProjectServiceImpl implements IProjectService {
|
||||||
BeanUtils.copyBeanProp(vo, project);
|
BeanUtils.copyBeanProp(vo, project);
|
||||||
vo.setDetailList(tempList);
|
vo.setDetailList(tempList);
|
||||||
vo.setAllWorkTime(tempList.stream().reduce(BigDecimal.ZERO, BigDecimal::add));
|
vo.setAllWorkTime(tempList.stream().reduce(BigDecimal.ZERO, BigDecimal::add));
|
||||||
|
vo.setAllDateWorkTime(workTimeAllMap.getOrDefault(project.getProjectId(), BigDecimal.ZERO));
|
||||||
return vo;
|
return vo;
|
||||||
}).collect(Collectors.toList());
|
}).collect(Collectors.toList());
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,5 +25,6 @@ public class ProjectExecutionVo {
|
||||||
private String projectState;
|
private String projectState;
|
||||||
private Integer budgetDate;
|
private Integer budgetDate;
|
||||||
private BigDecimal allWorkTime;
|
private BigDecimal allWorkTime;
|
||||||
|
private BigDecimal allDateWorkTime;
|
||||||
private List<BigDecimal> detailList;
|
private List<BigDecimal> detailList;
|
||||||
}
|
}
|
||||||
|
|
|
@ -116,6 +116,7 @@ public class WorkLoggerServiceImpl implements IWorkLoggerService {
|
||||||
WorkLogger temp = calendarMap.get(key);
|
WorkLogger temp = calendarMap.get(key);
|
||||||
calendarVo.setDate(DateUtils.toDate(localDate));
|
calendarVo.setDate(DateUtils.toDate(localDate));
|
||||||
calendarVo.setState(temp != null ? temp.getState() : "-1");
|
calendarVo.setState(temp != null ? temp.getState() : "-1");
|
||||||
|
calendarVo.setWorkTime(temp != null ? temp.getWorkTime() : "0");
|
||||||
result.add(calendarVo);
|
result.add(calendarVo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,7 @@ package tech.unissense.pms.business.work.logger.vo;
|
||||||
|
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -22,4 +23,5 @@ public class CalendarVo {
|
||||||
private Date date;
|
private Date date;
|
||||||
|
|
||||||
private String state;
|
private String state;
|
||||||
|
private String workTime;
|
||||||
}
|
}
|
||||||
|
|
|
@ -99,18 +99,18 @@
|
||||||
and t1.state = #{state}
|
and t1.state = #{state}
|
||||||
</if>
|
</if>
|
||||||
<if test="projectState != null and projectState != ''">
|
<if test="projectState != null and projectState != ''">
|
||||||
<!-- and t1.project_state = #{projectState} -->
|
and t1.project_state = #{projectState}
|
||||||
<choose>
|
<!-- <choose>-->
|
||||||
<when test="projectState=='0'.toString()">
|
<!-- <when test="projectState=='0'.toString()">-->
|
||||||
and t1.start_date <![CDATA[ > ]]> sysdate()
|
<!-- and t1.start_date <![CDATA[ > ]]> sysdate()-->
|
||||||
</when>
|
<!-- </when>-->
|
||||||
<when test="projectState=='1'.toString()">
|
<!-- <when test="projectState=='1'.toString()">-->
|
||||||
and sysdate() between t1.start_date and t1.end_date
|
<!-- and sysdate() between t1.start_date and t1.end_date-->
|
||||||
</when>
|
<!-- </when>-->
|
||||||
<when test="projectState=='2'.toString()">
|
<!-- <when test="projectState=='2'.toString()">-->
|
||||||
and t1.end_date <![CDATA[ < ]]> sysdate()
|
<!-- and t1.end_date <![CDATA[ < ]]> sysdate()-->
|
||||||
</when>
|
<!-- </when>-->
|
||||||
</choose>
|
<!-- </choose>-->
|
||||||
</if>
|
</if>
|
||||||
<if test="createBy != null">
|
<if test="createBy != null">
|
||||||
and t1.create_by = #{createBy}
|
and t1.create_by = #{createBy}
|
||||||
|
|
Loading…
Reference in New Issue