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')")
|
||||
@PostMapping("/executionInfo")
|
||||
public AjaxResult executionInfo(@RequestBody WorkLogger workLogger) {
|
||||
return success(service.executionInfo(workLogger));
|
||||
public AjaxResult executionInfo(@RequestBody ProjectQueryDto queryDto) {
|
||||
return success(service.executionInfo(queryDto));
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -56,7 +56,9 @@ public class Project extends BaseEntity {
|
|||
private String state;
|
||||
/**
|
||||
* 数据状态 0-待启动 1-进行中 2-已完成
|
||||
* 暂不展示
|
||||
*/
|
||||
@Deprecated
|
||||
private String dataState;
|
||||
/**
|
||||
* 项目状态 0-待启动 1-进行中 2-已完成
|
||||
|
|
|
@ -22,4 +22,6 @@ public class ProjectQueryDto {
|
|||
private Integer projectId;
|
||||
private Date startDate;
|
||||
private Date endDate;
|
||||
private Integer userId;
|
||||
private String projectState;
|
||||
}
|
||||
|
|
|
@ -60,10 +60,9 @@ public interface IProjectService {
|
|||
|
||||
List<Project> listProjectByUser(String createBy);
|
||||
|
||||
List<TeamStaticsVo> getTeamInfo(Integer projectId);
|
||||
|
||||
List<ProjectExecutionVo> executionInfo(WorkLogger workLogger);
|
||||
List<TeamStaticsVo> getTeamInfo(Integer projectId);
|
||||
|
||||
List<ProjectExecutionVo> executionInfo(ProjectQueryDto ProjectQueryDto);
|
||||
|
||||
ProjectWorkInfoVo workInfo(ProjectQueryDto project);
|
||||
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
package tech.unissense.pms.business.project.service.impl;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
@ -73,6 +74,7 @@ public class ProjectServiceImpl implements IProjectService {
|
|||
* @param project 筛选条件
|
||||
* @return 查询结果
|
||||
*/
|
||||
@Override
|
||||
public List<Project> permissisonList(Project project) {
|
||||
dataPermissions(project);
|
||||
List<Project> list = this.projectMapper.list(project);
|
||||
|
@ -243,11 +245,14 @@ public class ProjectServiceImpl implements IProjectService {
|
|||
}
|
||||
|
||||
@Override
|
||||
public List<ProjectExecutionVo> executionInfo(WorkLogger workLogger) {
|
||||
public List<ProjectExecutionVo> executionInfo(ProjectQueryDto queryDto) {
|
||||
|
||||
Project projectQueryDto = new Project();
|
||||
if (workLogger.getUserId() != null) {
|
||||
projectQueryDto.setQueryUserId(Long.valueOf(workLogger.getUserId()));
|
||||
if (queryDto.getUserId() != null) {
|
||||
projectQueryDto.setQueryUserId(Long.valueOf(queryDto.getUserId()));
|
||||
}
|
||||
if (queryDto.getProjectState() != null) {
|
||||
projectQueryDto.setProjectState(queryDto.getProjectState());
|
||||
}
|
||||
List<Project> projects = this.permissisonList(projectQueryDto);
|
||||
List<Integer> projectIdList = projects.stream()
|
||||
|
@ -259,9 +264,23 @@ public class ProjectServiceImpl implements IProjectService {
|
|||
.map(item -> item.getProjectId() + "_" + item.getUserId())
|
||||
.collect(Collectors.toSet());
|
||||
|
||||
WorkLogger workLogger = new WorkLogger();
|
||||
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()))
|
||||
.collect(Collectors.toMap(
|
||||
item -> item.getProjectId() + "_"
|
||||
|
@ -269,8 +288,8 @@ public class ProjectServiceImpl implements IProjectService {
|
|||
item -> new BigDecimal(item.getWorkTime()),
|
||||
BigDecimal::add));
|
||||
|
||||
LocalDate startDate = workLogger.getStartDate().toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
|
||||
LocalDate endDate = workLogger.getEndDate().toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
|
||||
LocalDate startDate = queryDto.getStartDate().toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
|
||||
LocalDate endDate = queryDto.getEndDate().toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
|
||||
|
||||
return projects.stream().map(project -> {
|
||||
List<BigDecimal> tempList = Stream.iterate(startDate, date -> date.plusDays(1))
|
||||
|
@ -290,6 +309,7 @@ public class ProjectServiceImpl implements IProjectService {
|
|||
BeanUtils.copyBeanProp(vo, project);
|
||||
vo.setDetailList(tempList);
|
||||
vo.setAllWorkTime(tempList.stream().reduce(BigDecimal.ZERO, BigDecimal::add));
|
||||
vo.setAllDateWorkTime(workTimeAllMap.getOrDefault(project.getProjectId(), BigDecimal.ZERO));
|
||||
return vo;
|
||||
}).collect(Collectors.toList());
|
||||
}
|
||||
|
|
|
@ -25,5 +25,6 @@ public class ProjectExecutionVo {
|
|||
private String projectState;
|
||||
private Integer budgetDate;
|
||||
private BigDecimal allWorkTime;
|
||||
private BigDecimal allDateWorkTime;
|
||||
private List<BigDecimal> detailList;
|
||||
}
|
||||
|
|
|
@ -116,6 +116,7 @@ public class WorkLoggerServiceImpl implements IWorkLoggerService {
|
|||
WorkLogger temp = calendarMap.get(key);
|
||||
calendarVo.setDate(DateUtils.toDate(localDate));
|
||||
calendarVo.setState(temp != null ? temp.getState() : "-1");
|
||||
calendarVo.setWorkTime(temp != null ? temp.getWorkTime() : "0");
|
||||
result.add(calendarVo);
|
||||
}
|
||||
|
||||
|
|
|
@ -2,6 +2,7 @@ package tech.unissense.pms.business.work.logger.vo;
|
|||
|
||||
import lombok.Data;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
|
@ -22,4 +23,5 @@ public class CalendarVo {
|
|||
private Date date;
|
||||
|
||||
private String state;
|
||||
private String workTime;
|
||||
}
|
||||
|
|
|
@ -99,18 +99,18 @@
|
|||
and t1.state = #{state}
|
||||
</if>
|
||||
<if test="projectState != null and projectState != ''">
|
||||
<!-- and t1.project_state = #{projectState} -->
|
||||
<choose>
|
||||
<when test="projectState=='0'.toString()">
|
||||
and t1.start_date <![CDATA[ > ]]> sysdate()
|
||||
</when>
|
||||
<when test="projectState=='1'.toString()">
|
||||
and sysdate() between t1.start_date and t1.end_date
|
||||
</when>
|
||||
<when test="projectState=='2'.toString()">
|
||||
and t1.end_date <![CDATA[ < ]]> sysdate()
|
||||
</when>
|
||||
</choose>
|
||||
and t1.project_state = #{projectState}
|
||||
<!-- <choose>-->
|
||||
<!-- <when test="projectState=='0'.toString()">-->
|
||||
<!-- and t1.start_date <![CDATA[ > ]]> sysdate()-->
|
||||
<!-- </when>-->
|
||||
<!-- <when test="projectState=='1'.toString()">-->
|
||||
<!-- and sysdate() between t1.start_date and t1.end_date-->
|
||||
<!-- </when>-->
|
||||
<!-- <when test="projectState=='2'.toString()">-->
|
||||
<!-- and t1.end_date <![CDATA[ < ]]> sysdate()-->
|
||||
<!-- </when>-->
|
||||
<!-- </choose>-->
|
||||
</if>
|
||||
<if test="createBy != null">
|
||||
and t1.create_by = #{createBy}
|
||||
|
|
Loading…
Reference in New Issue