|
@@ -351,10 +351,11 @@ public class PmWorkContentServiceImpl extends AbstractCrudService<PmWorkContentM
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public CommonPage<PmWorkReport> reportPage(Integer projectAscription, Integer pageNum, Integer pageSize, Integer reportId) {
|
|
|
+ public CommonPage<PmWorkReport> reportPage(Integer projectAscription, Integer pageNum, Integer pageSize, Integer reportId, String startDate, String endDate, Integer projectId) {
|
|
|
Integer tenantId = SecurityUtils.getTenantId();
|
|
|
Long userId = SecurityUtils.getUserId();
|
|
|
String userName = SecurityUtils.getUsername();
|
|
|
+ Long deptId = SecurityUtils.getLoginUser().getSysUser().getDeptId();
|
|
|
List<Integer> headProjects = head();
|
|
|
List<Integer> receiveList2 = receive();
|
|
|
List<Long> userIds = new ArrayList<>();
|
|
@@ -363,7 +364,18 @@ public class PmWorkContentServiceImpl extends AbstractCrudService<PmWorkContentM
|
|
|
if (reportId != null && reportId != 0) {
|
|
|
contentLambdaQuery.eq(PmWorkContent::getReportId, reportId);
|
|
|
} else {
|
|
|
- contentLambdaQuery.eq(PmWorkContent::getTenantId, tenantId);
|
|
|
+ contentLambdaQuery.eq(PmWorkContent::getTenantId, tenantId).eq(PmWorkContent::getDeptId, deptId);
|
|
|
+ if (projectId != null && projectId != 0) {
|
|
|
+ contentLambdaQuery.eq(PmWorkContent::getProjectId, projectId);
|
|
|
+ }
|
|
|
+ if (StringUtils.isNotBlank(startDate) && StringUtils.isNotBlank(endDate)) {
|
|
|
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
|
|
|
+ LocalDate start = LocalDate.parse(startDate, formatter);
|
|
|
+ LocalDate end = LocalDate.parse(endDate, formatter);
|
|
|
+ LocalDateTime startDateTime = start.atStartOfDay();
|
|
|
+ LocalDateTime endDateTime = end.atTime(23, 59, 59);
|
|
|
+ contentLambdaQuery.between(PmWorkContent::getCreateTime, startDateTime, endDateTime);
|
|
|
+ }
|
|
|
switch (projectAscription) {
|
|
|
case 1:
|
|
|
contentLambdaQuery.in(PmWorkContent::getReportId, headProjects);
|
|
@@ -376,7 +388,7 @@ public class PmWorkContentServiceImpl extends AbstractCrudService<PmWorkContentM
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
- List<PmWorkContent> pmWorkContentList = this.list(contentLambdaQuery);
|
|
|
+ List<PmWorkContent> pmWorkContentList = pmWorkContentMapper.selectList(contentLambdaQuery);
|
|
|
Set<Integer> reportIds = pmWorkContentList.stream().map(PmWorkContent::getReportId).collect(Collectors.toSet());
|
|
|
if (reportIds.isEmpty()) {
|
|
|
return new CommonPage<>(new ArrayList<>(), 0, pageSize, pageNum);
|
|
@@ -427,62 +439,15 @@ public class PmWorkContentServiceImpl extends AbstractCrudService<PmWorkContentM
|
|
|
return new CommonPage<>(reportList, reportPage.getTotal(), pageSize, pageNum);
|
|
|
}
|
|
|
|
|
|
-
|
|
|
-/* private List<Map<String, Object>> projectIdName(Integer projectId) {
|
|
|
- List<Map<String, Object>> returnList = new ArrayList<>();
|
|
|
- LambdaQueryWrapper<PmProject> wrapper = Wrappers.lambdaQuery();
|
|
|
- wrapper.select(PmProject::getId, PmProject::getProjectName)
|
|
|
- .eq(PmProject::getTenantId, SecurityUtils.getTenantId())
|
|
|
- .eq(PmProject::getDelFlag, 0);
|
|
|
- if (projectId != null) {
|
|
|
- wrapper.eq(PmProject::getId, projectId);
|
|
|
- }
|
|
|
- List<PmProject> projects = pmProjectMapper.selectList(wrapper);
|
|
|
- for (PmProject project : projects) {
|
|
|
- Map<String, Object> returnMap = new HashMap<>();
|
|
|
- returnMap.put("id", project.getId());
|
|
|
- returnMap.put("name", project.getProjectName());
|
|
|
- returnList.add(returnMap);
|
|
|
- }
|
|
|
- return returnList;
|
|
|
- }*/
|
|
|
-
|
|
|
- private List<Map<String, Object>> projectUsers(Long userId) {
|
|
|
- List<Map<String, Object>> returnList = new ArrayList<>();
|
|
|
- List<SysUser> userList = new ArrayList<>();
|
|
|
- if (userId != null) {
|
|
|
- LambdaQueryWrapper<SysUser> queryNameId = Wrappers.lambdaQuery();
|
|
|
- queryNameId.select(SysUser::getUserId, SysUser::getNickName)
|
|
|
- .eq(SysUser::getUserId, userId);
|
|
|
- userList = sysUserMapper.selectList(queryNameId);
|
|
|
- } else {
|
|
|
- LambdaQueryWrapper<PmProject> wrapper = Wrappers.lambdaQuery();
|
|
|
- wrapper.select(PmProject::getProjectHead, PmProject::getProjectMember)
|
|
|
- .eq(PmProject::getTenantId, SecurityUtils.getTenantId())
|
|
|
- .eq(PmProject::getDelFlag, 0);
|
|
|
- List<PmProject> users = pmProjectMapper.selectList(wrapper);
|
|
|
- List<Long> userIds = new ArrayList<>();
|
|
|
- for (PmProject user : users) {
|
|
|
- Long projectHead = user.getProjectHead();
|
|
|
- userIds.add(projectHead);
|
|
|
- Set<Long> projectMembers = Arrays.stream(user.getProjectMember().split(","))
|
|
|
- .map(Long::parseLong)
|
|
|
- .collect(Collectors.toSet());
|
|
|
- userIds.addAll(projectMembers);
|
|
|
- }
|
|
|
- List<Long> finalList = userIds.stream().distinct().collect(Collectors.toList());
|
|
|
- LambdaQueryWrapper<SysUser> wrapper2 = Wrappers.lambdaQuery();
|
|
|
- wrapper2.select(SysUser::getUserId, SysUser::getNickName)
|
|
|
- .in(SysUser::getUserId, finalList);
|
|
|
- userList = sysUserMapper.selectList(wrapper2);
|
|
|
- }
|
|
|
- for (SysUser user : userList) {
|
|
|
- Map<String, Object> map = new HashMap<>();
|
|
|
- map.put("id", user.getUserId());
|
|
|
- map.put("name", user.getNickName());
|
|
|
- returnList.add(map);
|
|
|
- }
|
|
|
- return returnList;
|
|
|
+ private List<Integer> reports(LocalDate startDate, LocalDate endDate) {
|
|
|
+ LambdaQueryWrapper<PmWorkReport> reportsQuery = Wrappers.lambdaQuery();
|
|
|
+ reportsQuery.select(PmWorkReport::getId)
|
|
|
+ .between(PmWorkReport::getReportDate, startDate, endDate)
|
|
|
+ .groupBy(PmWorkReport::getId);
|
|
|
+ List<PmWorkReport> pmWorkReportList = pmWorkReportMapper.selectList(reportsQuery);
|
|
|
+ return pmWorkReportList.stream()
|
|
|
+ .map(PmWorkReport::getId)
|
|
|
+ .collect(Collectors.toList());
|
|
|
}
|
|
|
|
|
|
private List<PmProject> projects(Integer projectId) {
|
|
@@ -494,7 +459,7 @@ public class PmWorkContentServiceImpl extends AbstractCrudService<PmWorkContentM
|
|
|
projectsQuery.eq(PmProject::getId, projectId);
|
|
|
return pmProjectMapper.selectList(projectsQuery);
|
|
|
}
|
|
|
- projectsQuery.eq(PmProject::getTenantId, tenantId).eq(PmProject::getDeptId, deptId);
|
|
|
+ projectsQuery.eq(PmProject::getTenantId, tenantId).eq(PmProject::getDeptId, deptId).eq(PmProject::getDelFlag, 0);
|
|
|
return pmProjectMapper.selectList(projectsQuery);
|
|
|
}
|
|
|
|
|
@@ -513,44 +478,41 @@ public class PmWorkContentServiceImpl extends AbstractCrudService<PmWorkContentM
|
|
|
return sysUserMapper.selectList(userNameQuery);
|
|
|
}
|
|
|
|
|
|
- @DataScope//数据权限注解
|
|
|
- private List<PmWorkContent> workTimeCount(List<Long> users, List<Integer> reports) {
|
|
|
+ //@DataScope//数据权限注解
|
|
|
+ private List<PmWorkContent> workTimeCount(List<Long> users, List<Integer> project, String startDate, String endDate) {
|
|
|
+ Integer tenantId = SecurityUtils.getTenantId();
|
|
|
Long deptId = SecurityUtils.getLoginUser().getSysUser().getDeptId();
|
|
|
LambdaQueryWrapper<PmWorkContent> workTimeQuery = Wrappers.lambdaQuery();
|
|
|
- workTimeQuery.select(PmWorkContent::getSubmitterId, PmWorkContent::getProjectName, PmWorkContent::getWorkTime);
|
|
|
+ workTimeQuery.select(PmWorkContent::getSubmitterId, PmWorkContent::getReportId, PmWorkContent::getProjectId, PmWorkContent::getProjectName,
|
|
|
+ PmWorkContent::getWorkTime, PmWorkContent::getDeptId, PmWorkContent::getTenantId);
|
|
|
if (!users.isEmpty()) {
|
|
|
workTimeQuery.in(PmWorkContent::getSubmitterId, users);
|
|
|
}
|
|
|
- if (!reports.isEmpty()) {
|
|
|
- workTimeQuery.in(PmWorkContent::getProjectId, reports); // 注意这里应该是 projectId 而不是 deptId
|
|
|
+ if (!project.isEmpty()) {
|
|
|
+ workTimeQuery.in(PmWorkContent::getProjectId, project);
|
|
|
}
|
|
|
- workTimeQuery.eq(PmWorkContent::getDeptId, deptId);
|
|
|
+ if (StringUtils.isNotBlank(startDate) && StringUtils.isNotBlank(endDate)) {
|
|
|
+ LocalDate start = LocalDate.parse(startDate);
|
|
|
+ LocalDate end = LocalDate.parse(endDate);
|
|
|
+ List<Integer> reports = reports(start, end);
|
|
|
+ workTimeQuery.in(PmWorkContent::getReportId, reports);
|
|
|
+ }
|
|
|
+ workTimeQuery.eq(PmWorkContent::getTenantId, tenantId).eq(PmWorkContent::getDeptId, deptId);
|
|
|
// workTimeQuery.apply(DataScopeContextHolder.getDataScopeSql());// 数据权限设置
|
|
|
List<PmWorkContent> pmWorkContentList = pmWorkContentMapper.selectList(workTimeQuery);
|
|
|
|
|
|
- // 使用 TreeMap 来存储每个 (SubmitterId, ProjectName) 组合及其对应的工时总和
|
|
|
- Map<String, BigDecimal> workTimeSumMap = new TreeMap<>();
|
|
|
-
|
|
|
+ Map<String, PmWorkContent> workTimeMap = new HashMap<>();
|
|
|
for (PmWorkContent content : pmWorkContentList) {
|
|
|
- String key = content.getSubmitterId() + "_" + content.getProjectName();
|
|
|
- workTimeSumMap.put(key, workTimeSumMap.getOrDefault(key, BigDecimal.ZERO).add(content.getWorkTime()));
|
|
|
- }
|
|
|
-
|
|
|
- List<PmWorkContent> result = new ArrayList<>();
|
|
|
- for (Map.Entry<String, BigDecimal> entry : workTimeSumMap.entrySet()) {
|
|
|
- String[] parts = entry.getKey().split("_");
|
|
|
- Long submitterId = Long.parseLong(parts[0]);
|
|
|
- String projectName = parts[1];
|
|
|
- BigDecimal workTimeSum = entry.getValue();
|
|
|
-
|
|
|
- PmWorkContent aggregatedContent = new PmWorkContent();
|
|
|
- aggregatedContent.setSubmitterId(submitterId);
|
|
|
- aggregatedContent.setProjectName(projectName);
|
|
|
- aggregatedContent.setWorkTime(workTimeSum);
|
|
|
- result.add(aggregatedContent);
|
|
|
+ String key = content.getSubmitterId() + "_" + content.getProjectId();
|
|
|
+ PmWorkContent existingContent = workTimeMap.get(key);
|
|
|
+ if (existingContent == null) {
|
|
|
+ workTimeMap.put(key, content);
|
|
|
+ } else {
|
|
|
+ existingContent.setWorkTime(existingContent.getWorkTime().add(content.getWorkTime()));
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
- return result;
|
|
|
+ return new ArrayList<>(workTimeMap.values());
|
|
|
}
|
|
|
|
|
|
|
|
@@ -560,13 +522,8 @@ public class PmWorkContentServiceImpl extends AbstractCrudService<PmWorkContentM
|
|
|
List<UserWorkTimeVO> userWorkTimeVO = new ArrayList<>();
|
|
|
Integer tenantId = SecurityUtils.getTenantId();
|
|
|
List<Object> returnList = new ArrayList<>();
|
|
|
- LocalDate start = null;
|
|
|
- LocalDate end = null;
|
|
|
- if (StringUtils.isNotBlank(startDate) && StringUtils.isNotBlank(endDate)) {
|
|
|
- start = LocalDate.parse(startDate);
|
|
|
- end = LocalDate.parse(endDate);
|
|
|
- } else {
|
|
|
- throw new BusinessException("导出数据过多请输入正确时间进行筛选");
|
|
|
+ if (StringUtils.isBlank(startDate) && StringUtils.isBlank(endDate)) {
|
|
|
+ throw new BusinessException("请设置查询时间范围!");
|
|
|
}
|
|
|
|
|
|
List<PmProject> pmProjects = projects(projectId);
|
|
@@ -587,11 +544,11 @@ public class PmWorkContentServiceImpl extends AbstractCrudService<PmWorkContentM
|
|
|
|
|
|
//统计userId每个项目所需工时
|
|
|
List<WorkHoursStatisticsVO> userAndProject = new ArrayList<>();
|
|
|
- List<PmWorkContent> pmWorkContentList = workTimeCount(userIds, pmProjectId);
|
|
|
+ List<PmWorkContent> pmWorkContentList = workTimeCount(userIds, pmProjectId, startDate, endDate);
|
|
|
for (PmWorkContent content : pmWorkContentList) {
|
|
|
WorkHoursStatisticsVO workHoursStatisticsVO = new WorkHoursStatisticsVO();
|
|
|
Long submitterId = content.getSubmitterId();
|
|
|
- String projectName1 = content.getProjectName();
|
|
|
+ Integer projectId1 = content.getProjectId();
|
|
|
BigDecimal workTime = content.getWorkTime();
|
|
|
workHoursStatisticsVO.setWorkTime(workTime);
|
|
|
for (SysUser user : users) {
|
|
@@ -602,8 +559,9 @@ public class PmWorkContentServiceImpl extends AbstractCrudService<PmWorkContentM
|
|
|
}
|
|
|
}
|
|
|
for (PmProject project : pmProjects) {
|
|
|
+ Integer projectId2 = project.getId();
|
|
|
String projectName = project.getProjectName();
|
|
|
- if (projectName.equals(projectName1)) {
|
|
|
+ if (projectId2 == projectId1) {
|
|
|
workHoursStatisticsVO.setProjectName(projectName);
|
|
|
}
|
|
|
}
|
|
@@ -628,7 +586,7 @@ public class PmWorkContentServiceImpl extends AbstractCrudService<PmWorkContentM
|
|
|
String userNickName = workHoursStatisticsVO.getNickName();
|
|
|
String projectName = workHoursStatisticsVO.getProjectName();
|
|
|
BigDecimal userProjectWorkTime = workHoursStatisticsVO.getWorkTime();
|
|
|
- if (projectName.equals(name) && userNickName.equals(currentNickName)) {
|
|
|
+ if (projectName == name && userNickName == currentNickName) {
|
|
|
workTime.add(userProjectWorkTime);
|
|
|
if (userProjectWorkTime.compareTo(BigDecimal.ZERO) != 0) {
|
|
|
hasNonZeroWorkTime = true;
|