فهرست منبع

Merge branch 'server-165' into usky-zyj
解决合并分支冲突

james 7 ماه پیش
والد
کامیت
95e9cd8138

+ 18 - 3
service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/web/PmProjectController.java

@@ -6,6 +6,8 @@ import com.usky.common.core.bean.CommonPage;
 import com.usky.common.security.utils.SecurityUtils;
 import com.usky.iot.domain.PmProject;
 import com.usky.iot.service.PmProjectService;
+import com.usky.iot.service.vo.PmProjectWorkTimeTwoVo;
+import com.usky.iot.service.vo.PmUsersProjectWorkTimeVO;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
@@ -122,11 +124,24 @@ public class PmProjectController {
      * @return
      */
     @GetMapping("/projectWorkTime")
-    public ApiResult<List<Map<LocalDate, BigDecimal>>> projectIdName(@RequestParam(value = "projectId") Integer projectId,
-                                                                      @RequestParam(value = "startDate", required = false) String startDate,
-                                                                      @RequestParam(value = "endDate", required = false) String endDate) {
+    public ApiResult<PmProjectWorkTimeTwoVo> projectIdName(@RequestParam(value = "projectId") Integer projectId,
+                                                               @RequestParam(value = "startDate", required = false) String startDate,
+                                                               @RequestParam(value = "endDate", required = false) String endDate) {
         return ApiResult.success(pmProjectService.projectWorkTime(projectId, startDate, endDate));
     }
 
+    /**
+     * 项目工时统计(人员)
+     *
+     * @param projectId
+     * @return
+     */
+    @GetMapping("/usersProjectWorkTime")
+    public ApiResult<PmUsersProjectWorkTimeVO> usersProjectWorkTime(@RequestParam(value = "projectId") Integer projectId,
+                                                                    @RequestParam(value = "startDate", required = false) String startDate,
+                                                                    @RequestParam(value = "endDate", required = false) String endDate) {
+        return ApiResult.success(pmProjectService.usersProjectWorkTime(projectId, startDate, endDate));
+    }
+
 }
 

+ 3 - 2
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/PmProjectService.java

@@ -3,6 +3,7 @@ package com.usky.iot.service;
 import com.usky.common.core.bean.CommonPage;
 import com.usky.iot.domain.PmProject;
 import com.usky.common.mybatis.core.CrudService;
+import com.usky.iot.service.vo.PmProjectWorkTimeTwoVo;
 import com.usky.iot.service.vo.PmUsersProjectWorkTimeVO;
 import com.usky.system.domain.SysUser;
 
@@ -107,7 +108,7 @@ public interface PmProjectService extends CrudService<PmProject> {
      * @param endDate
      * @return
      */
-    List<Map<LocalDate, BigDecimal>> projectWorkTime(Integer projectId, String startDate, String endDate);
+    PmProjectWorkTimeTwoVo projectWorkTime(Integer projectId, String startDate, String endDate);
 
     /**
      * 项目概览-人员项目工时统计
@@ -115,5 +116,5 @@ public interface PmProjectService extends CrudService<PmProject> {
      * @param projectId
      * @return
      */
-    PmUsersProjectWorkTimeVO usersProjectWorkTime(Integer projectId);
+    PmUsersProjectWorkTimeVO usersProjectWorkTime(Integer projectId, String startDate, String endDate);
 }

+ 81 - 29
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/PmProjectServiceImpl.java

@@ -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);

+ 4 - 2
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/PmWorkReportServiceImpl.java

@@ -603,8 +603,10 @@ public class PmWorkReportServiceImpl extends AbstractCrudService<PmWorkReportMap
         Long userId = SecurityUtils.getUserId();
         LambdaQueryWrapper<PmWorkReport> report = Wrappers.lambdaQuery();
         report.select(PmWorkReport::getId)
-                .eq(PmWorkReport::getSubmitterId, userId);
-        if (!report.getSqlSegment().contains(reportId.toString())) {
+                .eq(PmWorkReport::getSubmitterId, userId)
+                .eq(PmWorkReport::getId, reportId);
+        PmWorkReport pmWorkReport = pmWorkReportMapper.selectOne(report);
+        if (pmWorkReport == null) {
             throw new BusinessException("您没有删除该报告权限!");
         }
 

+ 19 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/vo/PmProjectWorkTimeTwoVo.java

@@ -0,0 +1,19 @@
+package com.usky.iot.service.vo;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.util.List;
+
+/**
+ * @author fu
+ * @date 2024/8/16
+ */
+@Data
+public class PmProjectWorkTimeTwoVo {
+    //日期
+    private List<LocalDate> dateList;
+    //工时
+    private List<BigDecimal> workTimeList;
+}

+ 5 - 17
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/vo/PmUsersProjectWorkTimeVO.java

@@ -1,5 +1,7 @@
 package com.usky.iot.service.vo;
 
+import lombok.Data;
+
 import java.math.BigDecimal;
 import java.util.List;
 
@@ -7,25 +9,11 @@ import java.util.List;
  * @author fu
  * @date 2024/8/12
  */
+@Data
 public class PmUsersProjectWorkTimeVO {
     // 用户
-    List<String> users;
+    private List<String> users;
     // 工时
-    List<BigDecimal> workTime;
-
-    public List<String> getUsers() {
-        return users;
-    }
-
-    public void setUsers(List<String> users) {
-        this.users = users;
-    }
-
-    public List<BigDecimal> getWorkTime() {
-        return workTime;
-    }
+    private List<BigDecimal> workTime;
 
-    public void setWorkTime(List<BigDecimal> workTime) {
-        this.workTime = workTime;
-    }
 }