浏览代码

Merge branch 'server-165' of uskycloud/usky-modules into master

gez 9 月之前
父节点
当前提交
9cb3bf021c

+ 1 - 0
service-fire/service-fire-biz/src/main/java/com/usky/fire/service/impl/PatrolInspectionEventServiceImpl.java

@@ -136,6 +136,7 @@ public class PatrolInspectionEventServiceImpl extends AbstractCrudService<Patrol
         jsonObject.addProperty("infoType",2);
         jsonObject.addProperty("id",patrolInspectionEvent.getId());
         remoteMceService.addMce(jsonObject.toString());
+
     }
 
     @Override

+ 10 - 5
service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/web/PmWorkContentController.java

@@ -48,7 +48,6 @@ public class PmWorkContentController {
     }
 
 
-
     @GetMapping("/reportRecord")
     public ApiResult<List<PmWorkReport>> reportRecord(@RequestParam(value = "startDate", required = false) String startDate,
                                                       @RequestParam(value = "endDate", required = false) String endDate,
@@ -64,21 +63,26 @@ public class PmWorkContentController {
 
     /**
      * APP报告详情分页列表
+     *
      * @param projectAscription 1:我负责;2:我收到;3:我发出
-     * @param pageNum 页数
-     * @param pageSize 页大小
+     * @param pageNum           页数
+     * @param pageSize          页大小
      * @return
      */
     @GetMapping("/page")
     public ApiResult<CommonPage<PmWorkReport>> page(@RequestParam(value = "projectAscription", required = false, defaultValue = "2") Integer projectAscription,
                                                     @RequestParam(value = "pageNum") Integer pageNum,
                                                     @RequestParam(value = "pageSize") Integer pageSize,
-                                                    @RequestParam(value = "reportId", required = false) Integer reportId){
-        return ApiResult.success(pmWorkContentService.reportPage(projectAscription, pageNum, pageSize, reportId));
+                                                    @RequestParam(value = "reportId", required = false) Integer reportId,
+                                                    @RequestParam(value = "startDate", required = false) String startDate,
+                                                    @RequestParam(value = "endDate", required = false) String endDate,
+                                                    @RequestParam(value = "projectId", required = false) Integer projectId) {
+        return ApiResult.success(pmWorkContentService.reportPage(projectAscription, pageNum, pageSize, reportId, startDate, endDate, projectId));
     }
 
     /**
      * 工时统计
+     *
      * @param userId
      * @param projectId
      * @param filter
@@ -103,6 +107,7 @@ public class PmWorkContentController {
 
     /**
      * 工时明细导出
+     *
      * @param response
      * @param userId
      * @param projectId

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

@@ -60,14 +60,14 @@ public interface PmWorkContentService extends CrudService<PmWorkContent> {
      * @param pageSize 页大小
      * @return
      */
-    CommonPage<PmWorkReport> reportPage(Integer projectAscription, Integer pageNum, Integer pageSize, Integer report);
+    CommonPage<PmWorkReport> reportPage(Integer projectAscription, Integer pageNum, Integer pageSize, Integer report, String startDate, String endDate, Integer projectId);
 
     /** 工时统计页面
      * @param userId          用户id
      * @param filter          是否过滤0工时(默认1:不过滤;2:过滤)
      * @param startDate       开始时间
      * @param endDate         结束时间
-     * @param workerOrProject 打工仔还是项目(默认1:项目;2:打工仔)
+     * @param workerOrProject 打工仔还是项目(默认1:打工仔;2:项目
      * @return 返回项目名(或牛马名)以及项目工时
      */
     List<Object> workHourStatistic(Long userId, Integer projectId, Integer filter, String startDate, String endDate, Integer workerOrProject);

+ 55 - 97
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/PmWorkContentServiceImpl.java

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