|
@@ -17,6 +17,7 @@ import com.usky.iot.mapper.SysUserMapper;
|
|
|
import com.usky.iot.service.PmProjectService;
|
|
|
import com.usky.common.mybatis.core.AbstractCrudService;
|
|
|
import com.usky.iot.service.PmWorkContentService;
|
|
|
+import com.usky.iot.service.vo.PmProjectWorkTimeTwoVo;
|
|
|
import com.usky.iot.service.vo.PmUsersProjectWorkTimeVO;
|
|
|
import com.usky.system.domain.SysUser;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
@@ -26,6 +27,7 @@ import org.springframework.stereotype.Service;
|
|
|
import java.math.BigDecimal;
|
|
|
import java.time.LocalDate;
|
|
|
import java.time.LocalDateTime;
|
|
|
+import java.time.format.DateTimeFormatter;
|
|
|
import java.util.*;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
@@ -282,14 +284,17 @@ public class PmProjectServiceImpl extends AbstractCrudService<PmProjectMapper, P
|
|
|
.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);
|
|
|
+ if (user.getProjectMember() != null && StringUtils.isNotBlank(user.getProjectMember())){
|
|
|
+ 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();
|
|
@@ -367,7 +372,7 @@ public class PmProjectServiceImpl extends AbstractCrudService<PmProjectMapper, P
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 查询项目工时统计
|
|
|
+ * 查询项目工时统计-时间
|
|
|
*
|
|
|
* @param projectId
|
|
|
* @param startDate
|
|
@@ -375,26 +380,37 @@ public class PmProjectServiceImpl extends AbstractCrudService<PmProjectMapper, P
|
|
|
* @return
|
|
|
*/
|
|
|
@Override
|
|
|
- public List<Map<LocalDate, BigDecimal>> projectWorkTime(Integer projectId, String startDate, String endDate) {
|
|
|
+ public PmProjectWorkTimeTwoVo projectWorkTime(Integer projectId, String startDate, String endDate) {
|
|
|
|
|
|
- if (projectId == null || projectId == 0) {
|
|
|
+ if (projectId == null || projectId <= 0) {
|
|
|
throw new BusinessException("查询项目工时项目id有误!");
|
|
|
}
|
|
|
|
|
|
- List<Map<LocalDate, BigDecimal>> workTimeCount = new ArrayList<>();
|
|
|
-
|
|
|
- LocalDate now = LocalDate.now();
|
|
|
- if (StringUtils.isBlank(endDate)) {
|
|
|
- endDate = now.toString();
|
|
|
- }
|
|
|
- if (StringUtils.isBlank(startDate)) {
|
|
|
- startDate = now.minusDays(29).toString();
|
|
|
+ PmProjectWorkTimeTwoVo workTimeCount = new PmProjectWorkTimeTwoVo();
|
|
|
+ List<LocalDate> dateList = new ArrayList<>();
|
|
|
+ List<BigDecimal> workTimeList = new ArrayList<>();
|
|
|
+
|
|
|
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
|
|
|
+ LocalDate startTime = null;
|
|
|
+ LocalDate endTime = null;
|
|
|
+ if (StringUtils.isNotBlank(startDate) && StringUtils.isNotBlank(endDate)){
|
|
|
+ try {
|
|
|
+ startTime = LocalDate.parse(startDate, formatter);
|
|
|
+ endTime = LocalDate.parse(endDate, formatter);
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("查询项目工时时间统计时间格式有误!" + e);
|
|
|
+ throw new BusinessException("传入时间参数有误!");
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ endTime = LocalDate.now();
|
|
|
+ startTime = LocalDate.now().minusDays(29);
|
|
|
}
|
|
|
|
|
|
LambdaQueryWrapper<PmWorkReport> wrapper2 = Wrappers.lambdaQuery();
|
|
|
wrapper2.select(PmWorkReport::getId, PmWorkReport::getReportDate)
|
|
|
.eq(PmWorkReport::getTenantId, SecurityUtils.getTenantId())
|
|
|
- .between(PmWorkReport::getReportDate, startDate, endDate);
|
|
|
+ .between(PmWorkReport::getReportDate, startTime, endTime)
|
|
|
+ .orderByAsc(PmWorkReport::getReportDate);
|
|
|
List<PmWorkReport> pmWorkReports = pmWorkReportMapper.selectList(wrapper2);
|
|
|
|
|
|
List<Integer> reportIds = pmWorkReports.stream().map(PmWorkReport::getId).collect(Collectors.toList());
|
|
@@ -405,22 +421,33 @@ public class PmProjectServiceImpl extends AbstractCrudService<PmProjectMapper, P
|
|
|
LambdaQueryWrapper<PmWorkContent> wrapper = Wrappers.lambdaQuery();
|
|
|
wrapper.select(PmWorkContent::getReportId, PmWorkContent::getSubmitterId, PmWorkContent::getWorkTime)
|
|
|
.eq(PmWorkContent::getProjectId, projectId)
|
|
|
- .eq(PmWorkContent::getTenantId, SecurityUtils.getTenantId())
|
|
|
.in(PmWorkContent::getReportId, reportIds);
|
|
|
List<PmWorkContent> pmWorkContents = pmWorkContentMapper.selectList(wrapper);
|
|
|
-
|
|
|
- for (PmWorkContent pmWorkContent : pmWorkContents) {
|
|
|
- Integer reportId = pmWorkContent.getReportId();
|
|
|
- for (PmWorkReport pmWorkReport : pmWorkReports) {
|
|
|
- if (reportId.equals(pmWorkReport.getId())) {
|
|
|
- LocalDate reportDate = pmWorkReport.getReportDate();
|
|
|
- BigDecimal workTime = pmWorkContent.getWorkTime();
|
|
|
- Map<LocalDate, BigDecimal> map = new HashMap<>();
|
|
|
- map.put(reportDate, workTime);
|
|
|
- workTimeCount.add(map);
|
|
|
- }
|
|
|
+ for (PmWorkReport report : pmWorkReports){
|
|
|
+ Integer id = report.getId();
|
|
|
+ LocalDate reportDate = report.getReportDate();
|
|
|
+ if (pmWorkContents.stream().anyMatch(content -> content.getReportId().equals(id))) {
|
|
|
+ BigDecimal totalWorkTime = pmWorkContents.stream()
|
|
|
+ .filter(content -> content.getReportId().equals(id))
|
|
|
+ .map(PmWorkContent::getWorkTime)
|
|
|
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ dateList.add(reportDate);
|
|
|
+ workTimeList.add(totalWorkTime);
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ Map<LocalDate, BigDecimal> accumulatedWorkTimeMap = new LinkedHashMap<>();
|
|
|
+ for (int i = 0; i < dateList.size(); i++) {
|
|
|
+ LocalDate date = dateList.get(i);
|
|
|
+ BigDecimal workTime = workTimeList.get(i);
|
|
|
+ accumulatedWorkTimeMap.merge(date, workTime, BigDecimal::add);
|
|
|
+ }
|
|
|
+ List<LocalDate> newDateList = new ArrayList<>(accumulatedWorkTimeMap.keySet());
|
|
|
+ List<BigDecimal> newWorkTimeList = new ArrayList<>(accumulatedWorkTimeMap.values());
|
|
|
+
|
|
|
+ workTimeCount.setDateList(newDateList);
|
|
|
+ workTimeCount.setWorkTimeList(newWorkTimeList);
|
|
|
+
|
|
|
return workTimeCount;
|
|
|
}
|
|
|
|
|
@@ -432,16 +459,41 @@ public class PmProjectServiceImpl extends AbstractCrudService<PmProjectMapper, P
|
|
|
* @return: java.util.List<java.util.Map < java.lang.String, java.math.BigDecimal>>
|
|
|
**/
|
|
|
@Override
|
|
|
- public PmUsersProjectWorkTimeVO usersProjectWorkTime(Integer projectId) {
|
|
|
+ public PmUsersProjectWorkTimeVO usersProjectWorkTime(Integer projectId, String startDate, String endDate) {
|
|
|
PmUsersProjectWorkTimeVO workTimeCount = new PmUsersProjectWorkTimeVO();
|
|
|
+
|
|
|
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
|
|
|
+ LocalDate startTime = null;
|
|
|
+ LocalDate endTime = null;
|
|
|
+ if (StringUtils.isNotBlank(startDate) && StringUtils.isNotBlank(endDate)){
|
|
|
+ try {
|
|
|
+ startTime = LocalDate.parse(startDate, formatter);
|
|
|
+ endTime = LocalDate.parse(endDate, formatter);
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("查询人员项目工时统计时间格式有误!" + e);
|
|
|
+ throw new BusinessException("传入时间参数有误!");
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ startTime = LocalDate.now();
|
|
|
+ endTime = LocalDate.now().minusDays(29);
|
|
|
+ }
|
|
|
+
|
|
|
if (projectId != null) {
|
|
|
List<String> users = new ArrayList<>();
|
|
|
List<BigDecimal> workTime = new ArrayList<>();
|
|
|
|
|
|
+ LambdaQueryWrapper<PmWorkReport> wrapper2 = Wrappers.lambdaQuery();
|
|
|
+ wrapper2.select(PmWorkReport::getId);
|
|
|
+ wrapper2.between(PmWorkReport::getReportDate, startTime, endTime);
|
|
|
+ List<Integer> reportIds = pmWorkReportMapper.selectList(wrapper2).stream().map(PmWorkReport::getId).collect(Collectors.toList());
|
|
|
+
|
|
|
LambdaQueryWrapper<PmWorkContent> wrapper = Wrappers.lambdaQuery();
|
|
|
wrapper.select(PmWorkContent::getSubmitterId, PmWorkContent::getWorkTime)
|
|
|
.eq(PmWorkContent::getProjectId, projectId)
|
|
|
.eq(PmWorkContent::getTenantId, SecurityUtils.getTenantId());
|
|
|
+ if (!reportIds.isEmpty()){
|
|
|
+ wrapper.in(PmWorkContent::getReportId, reportIds);
|
|
|
+ }
|
|
|
List<PmWorkContent> pmWorkContents = pmWorkContentMapper.selectList(wrapper);
|
|
|
List<Long> userIds = pmWorkContents.stream().map(PmWorkContent::getSubmitterId).distinct().collect(Collectors.toList());
|
|
|
List<SysUser> sysUsers = pmWorkContentService.nickNames(userIds);
|