diff --git a/pms-admin/src/main/java/tech/unissense/pms/web/controller/business/project/ProjectController.java b/pms-admin/src/main/java/tech/unissense/pms/web/controller/business/project/ProjectController.java
index b9d8de1..2f970d3 100644
--- a/pms-admin/src/main/java/tech/unissense/pms/web/controller/business/project/ProjectController.java
+++ b/pms-admin/src/main/java/tech/unissense/pms/web/controller/business/project/ProjectController.java
@@ -2,6 +2,7 @@ package tech.unissense.pms.web.controller.business.project;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
+import tech.unissense.pms.business.project.dto.ProjectQueryDto;
import tech.unissense.pms.business.projectteam.domain.ProjectTeam;
import tech.unissense.pms.business.projectteam.service.IProjectTeamService;
import tech.unissense.pms.business.work.logger.domain.WorkLogger;
@@ -111,4 +112,13 @@ public class ProjectController extends BaseController
{
return success(service.executionInfo(workLogger));
}
+ /**
+ * 项目人员表
+ */
+ // @PreAuthorize("@ss.hasPermi('system:dept:remove')")
+ @PostMapping("/workInfo")
+ public AjaxResult workInfo(@RequestBody ProjectQueryDto dto)
+ {
+ return success(service.workInfo(dto));
+ }
}
diff --git a/pms-business/src/main/java/tech/unissense/pms/business/project/dto/ProjectQueryDto.java b/pms-business/src/main/java/tech/unissense/pms/business/project/dto/ProjectQueryDto.java
new file mode 100644
index 0000000..1d12345
--- /dev/null
+++ b/pms-business/src/main/java/tech/unissense/pms/business/project/dto/ProjectQueryDto.java
@@ -0,0 +1,25 @@
+package tech.unissense.pms.business.project.dto;
+
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @author : ch
+ * @version : 1.0
+ * @ClassName : ProjectQueryDto
+ * @Description : TODO(用一句话描述该类做什么)
+ * @DATE : Created in 14:51 2024/10/10
+ *
Copyright: Copyright(c)2024
+ * Company : 紫光汇智信息技术有限公司
+ * Modification History:
+ * Date Author Version Discription
+ * --------------------------------------------------------------------------
+ * 2024/10/10 ch 1.0 Why & What is modified: <修改原因描述> *
+ */
+@Data
+public class ProjectQueryDto {
+ private Integer projectId;
+ private Date startDate;
+ private Date endDate;
+}
diff --git a/pms-business/src/main/java/tech/unissense/pms/business/project/service/IProjectService.java b/pms-business/src/main/java/tech/unissense/pms/business/project/service/IProjectService.java
index b43f52f..ac788e1 100644
--- a/pms-business/src/main/java/tech/unissense/pms/business/project/service/IProjectService.java
+++ b/pms-business/src/main/java/tech/unissense/pms/business/project/service/IProjectService.java
@@ -1,13 +1,13 @@
package tech.unissense.pms.business.project.service;
import tech.unissense.pms.business.project.domain.Project;
+import tech.unissense.pms.business.project.dto.ProjectQueryDto;
import tech.unissense.pms.business.project.vo.ProjectExecutionVo;
+import tech.unissense.pms.business.project.vo.ProjectWorkInfoVo;
import tech.unissense.pms.business.projectteam.vo.TeamStaticsVo;
import tech.unissense.pms.business.work.logger.domain.WorkLogger;
-import java.math.BigDecimal;
import java.util.List;
-import java.util.Map;
/**
* (Project)表服务接口
@@ -65,4 +65,5 @@ public interface IProjectService {
List executionInfo(WorkLogger workLogger);
+ ProjectWorkInfoVo workInfo(ProjectQueryDto project);
}
diff --git a/pms-business/src/main/java/tech/unissense/pms/business/project/service/impl/ProjectServiceImpl.java b/pms-business/src/main/java/tech/unissense/pms/business/project/service/impl/ProjectServiceImpl.java
index 40e7fd5..d92f3e5 100644
--- a/pms-business/src/main/java/tech/unissense/pms/business/project/service/impl/ProjectServiceImpl.java
+++ b/pms-business/src/main/java/tech/unissense/pms/business/project/service/impl/ProjectServiceImpl.java
@@ -4,9 +4,11 @@ import cn.hutool.core.collection.CollUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import tech.unissense.pms.business.project.domain.Project;
+import tech.unissense.pms.business.project.dto.ProjectQueryDto;
import tech.unissense.pms.business.project.mapper.ProjectMapper;
import tech.unissense.pms.business.project.service.IProjectService;
import tech.unissense.pms.business.project.vo.ProjectExecutionVo;
+import tech.unissense.pms.business.project.vo.ProjectWorkInfoVo;
import tech.unissense.pms.business.projectteam.domain.ProjectTeam;
import tech.unissense.pms.business.projectteam.service.IProjectTeamService;
import tech.unissense.pms.business.projectteam.vo.TeamStaticsVo;
@@ -23,12 +25,12 @@ import javax.annotation.Resource;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.ZoneId;
+import java.time.temporal.ChronoUnit;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
-
-import java.time.temporal.ChronoUnit;
import java.util.stream.Stream;
/**
@@ -160,7 +162,12 @@ public class ProjectServiceImpl implements IProjectService {
@Override
public List executionInfo(WorkLogger workLogger) {
- List projects = this.permissisonList(new Project());
+
+ Project projectQueryDto = new Project();
+ if (workLogger.getUserId() != null) {
+ projectQueryDto.setQueryUserId(Long.valueOf(workLogger.getUserId()));
+ }
+ List projects = this.permissisonList(projectQueryDto);
workLogger.setProjectIdList(projects.stream()
.map(Project::getProjectId)
.collect(Collectors.toList()));
@@ -188,4 +195,43 @@ public class ProjectServiceImpl implements IProjectService {
return vo;
}).collect(Collectors.toList());
}
+
+ @Override
+ public ProjectWorkInfoVo workInfo(ProjectQueryDto projectQueryDto) {
+ Project project = projectMapper.queryById(projectQueryDto.getProjectId());
+
+ WorkLogger workLogger = new WorkLogger();
+ workLogger.setProjectId(projectQueryDto.getProjectId());
+ workLogger.setStartDate(projectQueryDto.getStartDate());
+ workLogger.setEndDate(projectQueryDto.getEndDate());
+ List workLoggerList = workLoggerService.listUser(workLogger);
+
+ // 使用流按日期分组,并对每个日期的工人按用户ID去重,保留最后一次记录
+ Map> workersByDateMap = workLoggerList.stream()
+ .collect(Collectors.groupingBy(
+ logger -> DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD, logger.getLoggerDate()),
+ Collectors.collectingAndThen(
+ Collectors.toMap(
+ WorkLogger::getUserId,
+ logger -> logger,
+ (existing, replacement) -> existing.getCreateTime().after(replacement.getCreateTime()) ? existing : replacement
+ ),
+ map -> new ArrayList<>(map.values())
+ )
+ ));
+
+ LocalDate startDate = workLogger.getStartDate().toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
+ LocalDate endDate = workLogger.getEndDate().toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
+
+ // 生成从开始日期到结束日期的工人列表
+ List> detailList = Stream.iterate(startDate, date -> date.plusDays(1))
+ .limit(ChronoUnit.DAYS.between(startDate, endDate) + 1)
+ .map(localDate -> workersByDateMap.getOrDefault(localDate.toString(), Collections.emptyList()))
+ .collect(Collectors.toList());
+
+ ProjectWorkInfoVo vo = new ProjectWorkInfoVo();
+ BeanUtils.copyBeanProp(vo, project);
+ vo.setDetailList(detailList);
+ return vo;
+ }
}
diff --git a/pms-business/src/main/java/tech/unissense/pms/business/project/vo/ProjectWorkInfoVo.java b/pms-business/src/main/java/tech/unissense/pms/business/project/vo/ProjectWorkInfoVo.java
new file mode 100644
index 0000000..154d115
--- /dev/null
+++ b/pms-business/src/main/java/tech/unissense/pms/business/project/vo/ProjectWorkInfoVo.java
@@ -0,0 +1,31 @@
+package tech.unissense.pms.business.project.vo;
+
+import lombok.Data;
+import tech.unissense.pms.business.work.logger.domain.WorkLogger;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @author : ch
+ * @version : 1.0
+ * @ClassName : ProjectExecutionVo
+ * @Description : TODO(用一句话描述该类做什么)
+ * @DATE : Created in 11:20 2024/10/10
+ * Copyright: Copyright(c)2024
+ * Company : 紫光汇智信息技术有限公司
+ * Modification History:
+ * Date Author Version Discription
+ * --------------------------------------------------------------------------
+ * 2024/10/10 ch 1.0 Why & What is modified: <修改原因描述> *
+ */
+@Data
+public class ProjectWorkInfoVo {
+ private Integer projectId;
+ private String projectName;
+ private Integer budgetDate;
+ private Date startDate;
+ private Date endDate;
+ private List> detailList;
+}
diff --git a/pms-business/src/main/java/tech/unissense/pms/business/work/logger/domain/WorkLogger.java b/pms-business/src/main/java/tech/unissense/pms/business/work/logger/domain/WorkLogger.java
index b44bd16..ca9f511 100644
--- a/pms-business/src/main/java/tech/unissense/pms/business/work/logger/domain/WorkLogger.java
+++ b/pms-business/src/main/java/tech/unissense/pms/business/work/logger/domain/WorkLogger.java
@@ -33,6 +33,7 @@ public class WorkLogger extends BaseEntity {
* 用户id
*/
private Integer userId;
+ private String userName;
/**
* 工作时长
*/
diff --git a/pms-business/src/main/java/tech/unissense/pms/business/work/logger/mapper/WorkLoggerMapper.java b/pms-business/src/main/java/tech/unissense/pms/business/work/logger/mapper/WorkLoggerMapper.java
index 32a97c9..0e68b37 100644
--- a/pms-business/src/main/java/tech/unissense/pms/business/work/logger/mapper/WorkLoggerMapper.java
+++ b/pms-business/src/main/java/tech/unissense/pms/business/work/logger/mapper/WorkLoggerMapper.java
@@ -80,5 +80,7 @@ public interface WorkLoggerMapper {
int deleteById(Integer id);
List calendar(WorkLogger workLogger);
+
+ List listUser(WorkLogger workLogger);
}
diff --git a/pms-business/src/main/java/tech/unissense/pms/business/work/logger/service/IWorkLoggerService.java b/pms-business/src/main/java/tech/unissense/pms/business/work/logger/service/IWorkLoggerService.java
index ba6c4a7..d36de9e 100644
--- a/pms-business/src/main/java/tech/unissense/pms/business/work/logger/service/IWorkLoggerService.java
+++ b/pms-business/src/main/java/tech/unissense/pms/business/work/logger/service/IWorkLoggerService.java
@@ -62,4 +62,6 @@ public interface IWorkLoggerService {
List projectStatics(List projects, String workHour);
List personStatics(Integer projectId);
+
+ List listUser(WorkLogger workLogger);
}
diff --git a/pms-business/src/main/java/tech/unissense/pms/business/work/logger/service/impl/WorkLoggerServiceImpl.java b/pms-business/src/main/java/tech/unissense/pms/business/work/logger/service/impl/WorkLoggerServiceImpl.java
index 4efe639..e8e0be1 100644
--- a/pms-business/src/main/java/tech/unissense/pms/business/work/logger/service/impl/WorkLoggerServiceImpl.java
+++ b/pms-business/src/main/java/tech/unissense/pms/business/work/logger/service/impl/WorkLoggerServiceImpl.java
@@ -15,6 +15,7 @@ import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.ZoneId;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
@@ -167,6 +168,11 @@ public class WorkLoggerServiceImpl implements IWorkLoggerService {
return generateStaticsHourVoList(personWorkHourMap);
}
+ @Override
+ public List listUser(WorkLogger workLogger) {
+ return workLoggerMapper.listUser(workLogger);
+ }
+
// 泛型方法,用于生成统计工时的列表,适用于项目统计
private List generateStaticsHourVoList(List items, Map workDayMap,
Function idExtractor, Function nameExtractor) {
diff --git a/pms-business/src/main/resources/mapper/business/WorkLogger/WorkLoggerMapper.xml b/pms-business/src/main/resources/mapper/business/WorkLogger/WorkLoggerMapper.xml
index c0fbd6f..8f503f4 100644
--- a/pms-business/src/main/resources/mapper/business/WorkLogger/WorkLoggerMapper.xml
+++ b/pms-business/src/main/resources/mapper/business/WorkLogger/WorkLoggerMapper.xml
@@ -7,6 +7,7 @@
+
@@ -49,61 +50,61 @@
@@ -193,6 +194,66 @@
and report_date between #{startDate} and #{endDate}
and user_id=#{userId}
+
update pms_work_logger