فهرست منبع

新增加入项目;修复抄送钉钉等字段未返回;优化相关代码

fuyuchuan 7 ماه پیش
والد
کامیت
49d94b0b4b

+ 5 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/web/PmProjectController.java

@@ -143,5 +143,10 @@ public class PmProjectController {
         return ApiResult.success(pmProjectService.usersProjectWorkTime(projectId, startDate, endDate));
     }
 
+    @GetMapping("/joinProject")
+    public void projectIdName(@RequestParam(value = "projectId") Integer projectId) {
+        pmProjectService.joinProject(projectId);
+    }
+
 }
 

+ 8 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/PmProjectService.java

@@ -117,4 +117,12 @@ public interface PmProjectService extends CrudService<PmProject> {
      * @return
      */
     PmUsersProjectWorkTimeVO usersProjectWorkTime(Integer projectId, String startDate, String endDate);
+
+    /**
+     * 加入项目
+     *
+     * @param projectId
+     * @return
+     */
+    void joinProject(Integer projectId);
 }

+ 74 - 30
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/config/DingTalkAndMessage.java

@@ -86,7 +86,7 @@ public class DingTalkAndMessage {
         try {
             client = createClient();
         } catch (Exception e) {
-            log.error("获取钉钉token异常:" + e);
+            log.error("DingTalkAndMessage client = createClient() 获取钉钉token异常:" + e);
         }
         com.aliyun.dingtalkoauth2_1_0.models.GetAccessTokenRequest getAccessTokenRequest = new com.aliyun.dingtalkoauth2_1_0.models.GetAccessTokenRequest()
                 .setAppKey(dingTalkConstant.DING_TALK_CLIENT_ID)
@@ -100,16 +100,16 @@ public class DingTalkAndMessage {
         } catch (Exception _err) {
             TeaException err = new TeaException(_err.getMessage(), _err);
             if (!com.aliyun.teautil.Common.empty(err.code) && !com.aliyun.teautil.Common.empty(err.message)) {
-                log.error("获取钉钉token异常:" + err.code + err.message);
+                log.error("DingTalkAndMessage TeaException err = new TeaException(_err.getMessage(), _err) 获取钉钉token异常:" + err.code + err.message);
             }
         }
         return responseBody.getBody().accessToken;
     }
 
     /**
-     * 获取钉钉userId
+     * 获取钉钉userId,优先从数据库中找,没有则调用钉钉接口查
      *
-     * @param userId 平台userid
+     * @param userId userid
      * @return
      */
     public String getDingTalkUserId(Long userId) {
@@ -117,47 +117,91 @@ public class DingTalkAndMessage {
         if (userId == null) {
             return dingTalkId;
         }
-        LambdaQueryWrapper<MceMbuser> dingTalkQuery = Wrappers.lambdaQuery();
-        dingTalkQuery.select(MceMbuser::getDingTalkId, MceMbuser::getUserId)
-                .eq(MceMbuser::getUserId, userId);
-        MceMbuser mceMbuser = mceMbuserMapper.selectOne(dingTalkQuery);
+        SysUser user = userPhoneNumber(userId);
+        String mobile = user.getPhonenumber();
+        String userName = user.getUserName();
+        LocalDateTime now = LocalDateTime.now();
+
+        dingTalkId = getDingTalkId(userId, mobile, dingTalkId);
+        MceMbuser mceMbuser = getMceMbuser(userId);
+
         if (mceMbuser != null) {
             String dingId = mceMbuser.getDingTalkId();
             if (StringUtils.isNotBlank(dingId)) {
                 return dingId;
+            } else {
+                // 钉钉userid存入注册表
+                MceMbuser mbuser = new MceMbuser();
+                mbuser.setDingTalkId(dingTalkId);
+                mbuser.setPhone(mobile);
+                mbuser.setUserId(userId);
+                mbuser.setUpdateBy(userName);
+                mbuser.setUpdateTime(now);
+                mceMbuserMapper.updateById(mbuser);
             }
         } else {
-            LambdaQueryWrapper<SysUser> phoneQuery = Wrappers.lambdaQuery();
-            phoneQuery.select(SysUser::getPhonenumber, SysUser::getUserName)
-                    .eq(SysUser::getUserId, userId);
-            SysUser user = sysUserMapper.selectOne(phoneQuery);
-            String mobile = user.getPhonenumber();
-            try {
-                String accessToken = getDingTalkToken();
-                DingTalkClient client = new DefaultDingTalkClient(dingTalkConstant.DING_TALK_USERID_URL);
-                OapiV2UserGetbymobileRequest req = new OapiV2UserGetbymobileRequest();
-                req.setMobile(mobile);
-                OapiV2UserGetbymobileResponse rsp = client.execute(req, accessToken);
-                ObjectMapper objectMapper = new ObjectMapper();
-                JsonNode rootNode = objectMapper.readTree(rsp.getBody());
-                JsonNode resultNode = rootNode.get("result");
-                dingTalkId = resultNode.get("userid").asText();
-            } catch (Exception e) {
-                log.error("获取userid:" + userId + "的钉钉ID失败", e);
-            }
-
             // 钉钉userid存入注册表
             MceMbuser mbuser = new MceMbuser();
             mbuser.setDingTalkId(dingTalkId);
             mbuser.setPhone(mobile);
             mbuser.setUserId(userId);
-            mbuser.setCreateBy(user.getUserName());
-            mbuser.setCreateTime(LocalDateTime.now());
+            mbuser.setCreateBy(userName);
+            mbuser.setCreateTime(now);
             mceMbuserMapper.insert(mbuser);
         }
         return dingTalkId;
     }
 
+    /**
+     * 获取用户 消息中心_注册表信息
+     *
+     * @param userId
+     * @return
+     */
+    private MceMbuser getMceMbuser(Long userId) {
+        LambdaQueryWrapper<MceMbuser> dingTalkQuery = Wrappers.lambdaQuery();
+        dingTalkQuery.eq(MceMbuser::getUserId, userId);
+        return mceMbuserMapper.selectOne(dingTalkQuery);
+    }
+
+    /**
+     * 获取钉钉userId
+     *
+     * @param userId 平台userid
+     * @return
+     */
+    private String getDingTalkId(Long userId, String mobile, String dingTalkId) {
+        try {
+            String accessToken = getDingTalkToken();
+            DingTalkClient client = new DefaultDingTalkClient(dingTalkConstant.DING_TALK_USERID_URL);
+            OapiV2UserGetbymobileRequest req = new OapiV2UserGetbymobileRequest();
+            req.setMobile(mobile);
+            OapiV2UserGetbymobileResponse rsp = client.execute(req, accessToken);
+            ObjectMapper objectMapper = new ObjectMapper();
+            JsonNode rootNode = objectMapper.readTree(rsp.getBody());
+            JsonNode resultNode = rootNode.get("result");
+            dingTalkId = resultNode.get("userid").asText();
+        } catch (Exception e) {
+            log.error("获取userid:" + userId + "的钉钉ID失败", e);
+        }
+        return dingTalkId;
+    }
+
+    /**
+     * @description: 获取用户信息
+     * @author: fu
+     * @date: 2024/8/22 15:14
+     * @param: [userId]
+     * @return: java.lang.String
+     **/
+    private SysUser userPhoneNumber(Long userId) {
+        LambdaQueryWrapper<SysUser> phoneQuery = Wrappers.lambdaQuery();
+        phoneQuery.select(SysUser::getUserId, SysUser::getPhonenumber, SysUser::getUserName, SysUser::getNickName,
+                        SysUser::getAvatar, SysUser::getSex, SysUser::getDeptId, SysUser::getTenantId)
+                .eq(SysUser::getUserId, userId);
+        return sysUserMapper.selectOne(phoneQuery);
+    }
+
     @Async("asyncServiceExecutor")// 异步发送
     public void sendDingTalkDailyReport(PmWorkReport workReport, List<PmWorkContent> workContents) {
         String userName = workReport.getCreateBy();
@@ -172,7 +216,7 @@ public class DingTalkAndMessage {
                     long number = Long.parseLong(item.trim());
                     userIds.add(number);
                 }
-                for (Long userId : userIds) {
+                    for (Long userId : userIds) {
                     String dingTalkUserId = getDingTalkUserId(userId);
                     ccTo.add(dingTalkUserId);
                 }

+ 69 - 39
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/PmProjectServiceImpl.java

@@ -58,6 +58,8 @@ public class PmProjectServiceImpl extends AbstractCrudService<PmProjectMapper, P
     @Autowired
     private PmWorkContentService pmWorkContentService;
 
+    private static final String FIND_IN_SET_SQL = "FIND_IN_SET(?, project_member) > 0";
+
     @Override
     public void addProject(PmProject project) {
         Long deptId = SecurityUtils.getLoginUser().getSysUser().getDeptId();
@@ -162,16 +164,22 @@ public class PmProjectServiceImpl extends AbstractCrudService<PmProjectMapper, P
             page = this.page(page, lambdaQuery);
             return new CommonPage<>(page.getRecords(), page.getTotal(), pageSize, pageNum);
         }
-        if (projectAscription == 0) {
-            lambdaQuery.and(q -> q.eq(PmProject::getProjectHead, userId)
-                    .or().apply("FIND_IN_SET('" + userId + "', project_member) > 0")
-                    .or().eq(PmProject::getCreateBy, username));
-        } else if (projectAscription == 1) {
-            lambdaQuery.eq(PmProject::getProjectHead, userId);
-        } else if (projectAscription == 2) {
-            lambdaQuery.apply("FIND_IN_SET('" + userId + "', project_member) > 0");
+        switch (projectAscription) {
+            case 0:
+/*                lambdaQuery.and(q -> q.eq(PmProject::getProjectHead, userId)
+                        .or().apply(FIND_IN_SET_SQL, userId)
+                        .or().eq(PmProject::getCreateBy, username));*/
+                break;
+            case 1:
+                lambdaQuery.eq(PmProject::getProjectHead, userId);
+                break;
+            case 2:
+                lambdaQuery.apply(FIND_IN_SET_SQL, userId);
+                break;
+            default:
+                throw new BusinessException("查询项目列表参数错误");
         }
-        if (!projectName.isEmpty()) {
+        if (StringUtils.isNotBlank(projectName)) {
             lambdaQuery.like(PmProject::getProjectName, projectName);
         }
         if (projectType != 0) {
@@ -291,7 +299,7 @@ public class PmProjectServiceImpl extends AbstractCrudService<PmProjectMapper, P
             for (PmProject user : users) {
                 Long projectHead = user.getProjectHead();
                 userIds.add(projectHead);
-                if (user.getProjectMember() != null && StringUtils.isNotBlank(user.getProjectMember())){
+                if (user.getProjectMember() != null && StringUtils.isNotBlank(user.getProjectMember())) {
                     Set<Long> projectMembers = Arrays.stream(user.getProjectMember().split(","))
                             .map(Long::parseLong)
                             .collect(Collectors.toSet());
@@ -395,7 +403,7 @@ public class PmProjectServiceImpl extends AbstractCrudService<PmProjectMapper, P
         DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
         LocalDate startTime = null;
         LocalDate endTime = null;
-        if (StringUtils.isNotBlank(startDate) && StringUtils.isNotBlank(endDate)){
+        if (StringUtils.isNotBlank(startDate) && StringUtils.isNotBlank(endDate)) {
             try {
                 startTime = LocalDate.parse(startDate, formatter);
                 endTime = LocalDate.parse(endDate, formatter);
@@ -425,7 +433,7 @@ public class PmProjectServiceImpl extends AbstractCrudService<PmProjectMapper, P
                 .eq(PmWorkContent::getProjectId, projectId)
                 .in(PmWorkContent::getReportId, reportIds);
         List<PmWorkContent> pmWorkContents = pmWorkContentMapper.selectList(wrapper);
-        for (PmWorkReport report : pmWorkReports){
+        for (PmWorkReport report : pmWorkReports) {
             Integer id = report.getId();
             LocalDate reportDate = report.getReportDate();
             if (pmWorkContents.stream().anyMatch(content -> content.getReportId().equals(id))) {
@@ -472,7 +480,7 @@ public class PmProjectServiceImpl extends AbstractCrudService<PmProjectMapper, P
         DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
         LocalDate startTime = null;
         LocalDate endTime = null;
-        if (StringUtils.isNotBlank(startDate) && StringUtils.isNotBlank(endDate)){
+        if (StringUtils.isNotBlank(startDate) && StringUtils.isNotBlank(endDate)) {
             try {
                 startTime = LocalDate.parse(startDate, formatter);
                 endTime = LocalDate.parse(endDate, formatter);
@@ -485,32 +493,32 @@ public class PmProjectServiceImpl extends AbstractCrudService<PmProjectMapper, P
             endTime = LocalDate.now().minusDays(29);
         }
 
-            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);
-            Set<Long> userIds = pmWorkContents.stream().map(PmWorkContent::getSubmitterId).collect(Collectors.toSet());
-
-            LambdaQueryWrapper<PmProject> wrapper1 = Wrappers.lambdaQuery();
-            wrapper1.select(PmProject::getProjectMember)
-                    .eq(PmProject::getId, projectId);
-            if (StringUtils.isNotBlank(pmProjectMapper.selectOne(wrapper1).getProjectMember())){
-                List<Long> userIds1 = Arrays.stream(pmProjectMapper.selectOne(wrapper1).getProjectMember().split(",")).map(Long::parseLong).collect(Collectors.toList());
-                userIds.addAll(userIds1);
-            }
+        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());
 
-            List<Long> userIds1 = new ArrayList<>(userIds);
-            List<SysUser> sysUsers = pmWorkContentService.nickNames(userIds1);
+        // 项目成员与实际填写报告的人员可能会有差异
+        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);
+        Set<Long> userIds = pmWorkContents.stream().map(PmWorkContent::getSubmitterId).collect(Collectors.toSet());
+
+        LambdaQueryWrapper<PmProject> wrapper1 = Wrappers.lambdaQuery();
+        wrapper1.select(PmProject::getProjectMember)
+                .eq(PmProject::getId, projectId);
+        if (StringUtils.isNotBlank(pmProjectMapper.selectOne(wrapper1).getProjectMember())) {
+            List<Long> userIds1 = Arrays.stream(pmProjectMapper.selectOne(wrapper1).getProjectMember().split(",")).map(Long::parseLong).collect(Collectors.toList());
+            userIds.addAll(userIds1);
+        }
+
+        List<Long> userIds1 = new ArrayList<>(userIds);
+        List<SysUser> sysUsers = pmWorkContentService.nickNames(userIds1);
         BigDecimal totalWorkTime = BigDecimal.ZERO;
 
         List<String> users2 = new ArrayList<>();
@@ -526,7 +534,7 @@ public class PmProjectServiceImpl extends AbstractCrudService<PmProjectMapper, P
             totalWorkTime = totalWorkTime.add(userWorkTime);
         }
         workTimeCount.setUsers(users2);
-        if (reportIds.isEmpty()){
+        if (reportIds.isEmpty()) {
             List<BigDecimal> workTime = IntStream.range(0, users2.size())
                     .mapToObj(index -> BigDecimal.ZERO)
                     .collect(Collectors.toList());
@@ -538,4 +546,26 @@ public class PmProjectServiceImpl extends AbstractCrudService<PmProjectMapper, P
         return workTimeCount;
     }
 
+    /**
+     * @description: 项目成员加入项目
+     * @author: fu
+     * @date: 2024/8/12 15:44
+     * @param: [projectId]
+     * @return: void
+     **/
+    @Override
+    public void joinProject(Integer projectId) {
+        Long userId = SecurityUtils.getUserId();
+        PmProject pmProject = pmProjectMapper.selectById(projectId);
+        if (pmProject == null) {
+            throw new BusinessException("加入项目不存在!请刷新后重试");
+        }
+        pmProject.setProjectMember(pmProject.getProjectMember() + "," + userId);
+        try {
+            pmProjectMapper.updateById(pmProject);
+        } catch (Exception e) {
+            throw new BusinessException("加入项目失败!请联系管理员");
+        }
+    }
+
 }

+ 50 - 82
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/PmWorkContentServiceImpl.java

@@ -81,9 +81,7 @@ public class PmWorkContentServiceImpl extends AbstractCrudService<PmWorkContentM
         Long deptId = SecurityUtils.getLoginUser().getSysUser().getDeptId();
         Integer tenantId = SecurityUtils.getTenantId();
         LambdaQueryWrapper<PmWorkReport> reportQuery = Wrappers.lambdaQuery();
-        reportQuery.select(PmWorkReport::getId)
-                .eq(PmWorkReport::getTenantId, tenantId)
-                .eq(PmWorkReport::getDeptId, deptId);
+        reportQuery.select(PmWorkReport::getId).eq(PmWorkReport::getTenantId, tenantId).eq(PmWorkReport::getDeptId, deptId);
         if (StringUtils.isNotBlank(startDate) && StringUtils.isNotBlank(endDate)) {
             LocalDate start = null;
             LocalDate end = null;
@@ -115,10 +113,7 @@ public class PmWorkContentServiceImpl extends AbstractCrudService<PmWorkContentM
         Long userId = SecurityUtils.getUserId();
         Integer tenantId = SecurityUtils.getTenantId();
         LambdaQueryWrapper<PmWorkReport> reportQuery = Wrappers.lambdaQuery();
-        reportQuery.select(PmWorkReport::getId)
-                .eq(PmWorkReport::getTenantId, tenantId)
-                .apply("FIND_IN_SET(" + userId + ", cc_to) > 0")
-                .orderByDesc(PmWorkReport::getReportDate);
+        reportQuery.select(PmWorkReport::getId).eq(PmWorkReport::getTenantId, tenantId).apply("FIND_IN_SET(" + userId + ", cc_to) > 0").orderByDesc(PmWorkReport::getReportDate);
         return pmWorkReportMapper.selectList(reportQuery).stream().map(PmWorkReport::getId).collect(Collectors.toList());
     }
 
@@ -132,9 +127,7 @@ public class PmWorkContentServiceImpl extends AbstractCrudService<PmWorkContentM
     private List<Integer> sentOut() {
         Long userid = SecurityUtils.getUserId();
         LambdaQueryWrapper<PmWorkReport> reportQuery = Wrappers.lambdaQuery();
-        reportQuery.select(PmWorkReport::getId)
-                .eq(PmWorkReport::getSubmitterId, userid)
-                .orderByDesc(PmWorkReport::getSubmitDate);
+        reportQuery.select(PmWorkReport::getId).eq(PmWorkReport::getSubmitterId, userid).orderByDesc(PmWorkReport::getSubmitDate);
         return pmWorkReportMapper.selectList(reportQuery).stream().map(PmWorkReport::getId).collect(Collectors.toList());
     }
 
@@ -149,9 +142,7 @@ public class PmWorkContentServiceImpl extends AbstractCrudService<PmWorkContentM
         Long userId = SecurityUtils.getUserId();
         Integer tenantId = SecurityUtils.getTenantId();
         LambdaQueryWrapper<PmProject> projectQuery = Wrappers.lambdaQuery();
-        projectQuery.select(PmProject::getId)
-                .eq(PmProject::getTenantId, tenantId)
-                .eq(PmProject::getProjectHead, userId);
+        projectQuery.select(PmProject::getId).eq(PmProject::getTenantId, tenantId).eq(PmProject::getProjectHead, userId);
         return pmProjectMapper.selectList(projectQuery).stream().map(PmProject::getId).collect(Collectors.toList());
     }
 
@@ -165,9 +156,7 @@ public class PmWorkContentServiceImpl extends AbstractCrudService<PmWorkContentM
     private List<Integer> reportList(String projectName) {
         Integer tenantId = SecurityUtils.getTenantId();
         LambdaQueryWrapper<PmWorkContent> projectQuery = Wrappers.lambdaQuery();
-        projectQuery.select(PmWorkContent::getReportId)
-                .eq(PmWorkContent::getProjectName, projectName)
-                .eq(PmWorkContent::getTenantId, tenantId);
+        projectQuery.select(PmWorkContent::getReportId).eq(PmWorkContent::getProjectName, projectName).eq(PmWorkContent::getTenantId, tenantId);
         List<PmWorkContent> projectIds = pmWorkContentMapper.selectList(projectQuery);
         List<Integer> rIds = new ArrayList<>();
         for (PmWorkContent contenReportId : projectIds) {
@@ -202,15 +191,14 @@ public class PmWorkContentServiceImpl extends AbstractCrudService<PmWorkContentM
             // startDateTime = start.atStartOfDay();
             // endDateTime = end.atTime(23, 59, 59);
             LambdaQueryWrapper<PmWorkReport> reportQuery = Wrappers.lambdaQuery();
-            reportQuery.select(PmWorkReport::getId)
-                    .between(PmWorkReport::getReportDate, start, end);
+            reportQuery.select(PmWorkReport::getId).between(PmWorkReport::getReportDate, start, end);
             reportIds = pmWorkReportMapper.selectList(reportQuery).stream().map(PmWorkReport::getId).collect(Collectors.toList());
         }
 
         List<PmWorkContent> workContentList = new ArrayList<>();
 
         LambdaQueryWrapper<PmWorkContent> contentLambdaQuery = Wrappers.lambdaQuery();
-        contentLambdaQuery.select(PmWorkContent::getProjectId, PmWorkContent::getProjectName);
+        contentLambdaQuery.select(PmWorkContent::getProjectId);
         switch (projectAscription) {
             case 1:
                 List<Integer> headProjects = head();
@@ -242,10 +230,18 @@ public class PmWorkContentServiceImpl extends AbstractCrudService<PmWorkContentM
         if (!reportIds.isEmpty()) {
             contentLambdaQuery.in(PmWorkContent::getReportId, reportIds);
         }
-        contentLambdaQuery.groupBy(PmWorkContent::getProjectId)
-                .groupBy(PmWorkContent::getProjectName);
+        contentLambdaQuery.groupBy(PmWorkContent::getProjectId);
         workContentList = pmWorkContentMapper.selectList(contentLambdaQuery);
 
+        List<Integer> workContentIds = workContentList.stream().map(PmWorkContent::getProjectId).distinct().collect(Collectors.toList());
+        LambdaQueryWrapper<PmProject> projectQuery = Wrappers.lambdaQuery();
+        projectQuery.select(PmProject::getId, PmProject::getProjectName).in(PmProject::getId, workContentIds);
+        Map<Integer, String> projectNameMap = pmProjectMapper.selectList(projectQuery).stream().collect(Collectors.toMap(PmProject::getId, PmProject::getProjectName));
+
+        workContentList.forEach(workContent -> {
+            workContent.setProjectName(projectNameMap.get(workContent.getProjectId()));
+        });
+
         return workContentList;
     }
 
@@ -277,17 +273,14 @@ public class PmWorkContentServiceImpl extends AbstractCrudService<PmWorkContentM
         List<Long> userIds = new ArrayList<>();
         if (reportId != null && reportId > 0) {
             LambdaQueryWrapper<PmWorkReport> reportQuery = Wrappers.lambdaQuery();
-            reportQuery.select(PmWorkReport::getId, PmWorkReport::getCoordinateWork, PmWorkReport::getTomorrowPlan, PmWorkReport::getCcTo, PmWorkReport::getSubmitterId,
-                            PmWorkReport::getCreateTime, PmWorkReport::getReportDate)
-                    .eq(PmWorkReport::getId, reportId);
+            reportQuery.eq(PmWorkReport::getId, reportId);
             PmWorkReport report = pmWorkReportMapper.selectOne(reportQuery);
             if (report == null) {
                 throw new BusinessException("该报告已被删除!");
             }
 
             LambdaQueryWrapper<PmWorkContent> contentQuery = Wrappers.lambdaQuery();
-            contentQuery.select(PmWorkContent::getWorkContent, PmWorkContent::getWorkTime, PmWorkContent::getProjectName)
-                    .eq(PmWorkContent::getReportId, reportId);
+            contentQuery.select(PmWorkContent::getWorkContent, PmWorkContent::getWorkTime, PmWorkContent::getProjectName).eq(PmWorkContent::getReportId, reportId);
             pmWorkContentList = this.list(contentQuery);
             report.setWorkContents(pmWorkContentList);
             reportList.add(report);
@@ -336,16 +329,10 @@ public class PmWorkContentServiceImpl extends AbstractCrudService<PmWorkContentM
                 reportIds.add(a.getReportId());
             }
             LambdaQueryWrapper<PmWorkReport> reportQuery = Wrappers.lambdaQuery();
-            reportQuery.select(PmWorkReport::getId, PmWorkReport::getCoordinateWork, PmWorkReport::getTomorrowPlan, PmWorkReport::getCcTo, PmWorkReport::getSubmitterId,
-                            PmWorkReport::getCreateTime, PmWorkReport::getReportDate)
-                    .in(PmWorkReport::getId, reportIds)
-                    .orderByDesc(PmWorkReport::getCreateTime);
+            reportQuery.select(PmWorkReport::getId, PmWorkReport::getCoordinateWork, PmWorkReport::getTomorrowPlan, PmWorkReport::getCcTo, PmWorkReport::getSubmitterId, PmWorkReport::getCreateTime, PmWorkReport::getReportDate).in(PmWorkReport::getId, reportIds).orderByDesc(PmWorkReport::getCreateTime);
             reportList = pmWorkReportMapper.selectList(reportQuery);
             LambdaQueryWrapper<PmReceive> statusQuery = Wrappers.lambdaQuery();
-            statusQuery.select(PmReceive::getReportId, PmReceive::getReadFlag)
-                    .eq(PmReceive::getReceiverId, SecurityUtils.getUserId())
-                    .eq(PmReceive::getTenantId, SecurityUtils.getTenantId())
-                    .in(PmReceive::getReportId, reportIds);
+            statusQuery.select(PmReceive::getReportId, PmReceive::getReadFlag).eq(PmReceive::getReceiverId, SecurityUtils.getUserId()).eq(PmReceive::getTenantId, SecurityUtils.getTenantId()).in(PmReceive::getReportId, reportIds);
             List<PmReceive> receiveList = pmReceiveMapper.selectList(statusQuery);
             for (PmWorkReport c : reportList) {
                 List<PmWorkContent> contents = new ArrayList<>();
@@ -374,11 +361,7 @@ public class PmWorkContentServiceImpl extends AbstractCrudService<PmWorkContentM
             }
             List<Long> ids = null;
             if (!d.getCcTo().isEmpty()) {
-                ids = Optional.ofNullable(d.getCcTo())
-                        .map(ccTo -> Arrays.stream(ccTo.split(","))
-                                .map(Long::parseLong)
-                                .collect(Collectors.toList()))
-                        .orElse(Collections.emptyList());
+                ids = Optional.ofNullable(d.getCcTo()).map(ccTo -> Arrays.stream(ccTo.split(",")).map(Long::parseLong).collect(Collectors.toList())).orElse(Collections.emptyList());
             }
             List<SysUser> nickNameList = null;
             if (CollectionUtils.isNotEmpty(ids)) {
@@ -414,10 +397,7 @@ public class PmWorkContentServiceImpl extends AbstractCrudService<PmWorkContentM
     @Override
     public List<SysUser> nickNames(List<Long> userIds) {
         LambdaQueryWrapper<SysUser> usersQuery = Wrappers.lambdaQuery();
-        usersQuery.select(SysUser::getUserId, SysUser::getNickName, SysUser::getUserName, SysUser::getPhonenumber, SysUser::getAvatar,
-                        SysUser::getSex, SysUser::getDeptId)
-                .eq(SysUser::getTenantId, SecurityUtils.getTenantId())
-                .eq(SysUser::getDelFlag, 0);
+        usersQuery.select(SysUser::getUserId, SysUser::getNickName, SysUser::getUserName, SysUser::getPhonenumber, SysUser::getAvatar, SysUser::getSex, SysUser::getDeptId).eq(SysUser::getTenantId, SecurityUtils.getTenantId()).eq(SysUser::getDelFlag, 0);
         if (!userIds.isEmpty()) {
             usersQuery.in(SysUser::getUserId, userIds);
         }
@@ -427,9 +407,7 @@ public class PmWorkContentServiceImpl extends AbstractCrudService<PmWorkContentM
     @Override
     public List<SysUser> allNickName() {
         LambdaQueryWrapper<SysUser> usersQuery = Wrappers.lambdaQuery();
-        usersQuery.select(SysUser::getUserId, SysUser::getNickName, SysUser::getUserName)
-                .eq(SysUser::getTenantId, SecurityUtils.getTenantId())
-                .eq(SysUser::getDelFlag, 0);
+        usersQuery.select(SysUser::getUserId, SysUser::getNickName, SysUser::getUserName).eq(SysUser::getTenantId, SecurityUtils.getTenantId()).eq(SysUser::getDelFlag, 0);
         return sysUserMapper.selectList(usersQuery);
     }
 
@@ -444,6 +422,7 @@ public class PmWorkContentServiceImpl extends AbstractCrudService<PmWorkContentM
     public CommonPage<PmWorkReport> reportPage(Integer projectAscription, Integer pageNum, Integer pageSize, Integer reportId, String startDate, String endDate, Integer projectId) {
         // LocalDateTime startDateTime = null;
         // LocalDateTime endDateTime = null;
+        Integer tenantId = SecurityUtils.getTenantId();
         LocalDate start = null;
         LocalDate end = null;
         List<Integer> reportIds = new ArrayList<>();
@@ -459,16 +438,13 @@ public class PmWorkContentServiceImpl extends AbstractCrudService<PmWorkContentM
             // startDateTime = start.atStartOfDay();
             // endDateTime = end.atTime(23, 59, 59);
             LambdaQueryWrapper<PmWorkReport> reportQuery = Wrappers.lambdaQuery();
-            reportQuery.select(PmWorkReport::getId)
-                    .eq(PmWorkReport::getReportStatus, 1)
-                    .between(PmWorkReport::getReportDate, start, end);
+            reportQuery.select(PmWorkReport::getId).eq(PmWorkReport::getReportStatus, 1).between(PmWorkReport::getReportDate, start, end);
             reportIds = pmWorkReportMapper.selectList(reportQuery).stream().map(PmWorkReport::getId).collect(Collectors.toList());
         }
 
         if (projectId != null && projectId > 0) {
             LambdaQueryWrapper<PmWorkContent> contentLambdaQuery = Wrappers.lambdaQuery();
-            contentLambdaQuery.select(PmWorkContent::getReportId)
-                    .eq(PmWorkContent::getProjectId, projectId);
+            contentLambdaQuery.select(PmWorkContent::getReportId).eq(PmWorkContent::getProjectId, projectId);
             reportIds.addAll(pmWorkContentMapper.selectList(contentLambdaQuery).stream().map(PmWorkContent::getReportId).collect(Collectors.toList()));
         }
 
@@ -483,7 +459,7 @@ public class PmWorkContentServiceImpl extends AbstractCrudService<PmWorkContentM
         }
 
         LambdaQueryWrapper<PmWorkContent> contentLambdaQuery = Wrappers.lambdaQuery();
-        contentLambdaQuery.select(PmWorkContent::getReportId, PmWorkContent::getWorkContent, PmWorkContent::getWorkTime, PmWorkContent::getProjectName);
+        // contentLambdaQuery.select(PmWorkContent::getReportId, PmWorkContent::getWorkContent, PmWorkContent::getWorkTime, PmWorkContent::getProjectName);
         if (reportId != null && reportId >= 0) {
             contentLambdaQuery.eq(PmWorkContent::getReportId, reportId);
             pmWorkContentList = pmWorkContentMapper.selectList(contentLambdaQuery);
@@ -524,22 +500,18 @@ public class PmWorkContentServiceImpl extends AbstractCrudService<PmWorkContentM
         List<Integer> reportIds2 = pmWorkContentList.stream().distinct().map(PmWorkContent::getReportId).collect(Collectors.toList());
 
         LambdaQueryWrapper<PmWorkReport> reportQuery = Wrappers.lambdaQuery();
-        reportQuery.select(PmWorkReport::getId, PmWorkReport::getCoordinateWork, PmWorkReport::getTomorrowPlan, PmWorkReport::getCcTo, PmWorkReport::getSubmitterId,
-                        PmWorkReport::getSubmitDate, PmWorkReport::getReportDate, PmWorkReport::getCreateBy)
-                .eq(PmWorkReport::getReportStatus, 1);
+        reportQuery.eq(PmWorkReport::getTenantId, tenantId).eq(PmWorkReport::getReportStatus, 1);
         if (reportId != null && reportId != 0) {
             reportQuery.eq(PmWorkReport::getId, reportId);
         } else {
-            reportQuery.in(PmWorkReport::getId, reportIds2)
-                    .orderByDesc(PmWorkReport::getSubmitDate);
+            reportQuery.in(PmWorkReport::getId, reportIds2).orderByDesc(PmWorkReport::getSubmitDate);
         }
         IPage<PmWorkReport> reportPage = pmWorkReportMapper.selectPage(new Page<>(pageNum, pageSize), reportQuery);
         List<PmWorkReport> reportList = reportPage.getRecords();
 
         // 查询已读状态
         LambdaQueryWrapper<PmReceive> statusQuery = Wrappers.lambdaQuery();
-        statusQuery.select(PmReceive::getReportId, PmReceive::getReadFlag)
-                .eq(PmReceive::getReceiverId, userId);
+        statusQuery.select(PmReceive::getReportId, PmReceive::getReadFlag).eq(PmReceive::getReceiverId, userId);
         if (reportId != null && reportId != 0) {
             statusQuery.eq(PmReceive::getReportId, reportId);
         } else if (!receiveList.isEmpty()) {
@@ -554,9 +526,7 @@ public class PmWorkContentServiceImpl extends AbstractCrudService<PmWorkContentM
         }
 
         for (PmWorkReport report : reportList) {
-            List<PmWorkContent> contents = pmWorkContentList.stream()
-                    .filter(content -> content.getReportId().equals(report.getId()))
-                    .collect(Collectors.toList());
+            List<PmWorkContent> contents = pmWorkContentList.stream().filter(content -> content.getReportId().equals(report.getId())).collect(Collectors.toList());
             report.setWorkContents(contents);
             userIds.add(report.getSubmitterId());
 
@@ -566,8 +536,7 @@ public class PmWorkContentServiceImpl extends AbstractCrudService<PmWorkContentM
             // 创建人名字替换
             if (!userIds.isEmpty()) {
                 List<SysUser> nickNames = nickNames(userIds);
-                Map<Long, String> userNicknameMap = nickNames.stream()
-                        .collect(Collectors.toMap(SysUser::getUserId, SysUser::getNickName));
+                Map<Long, String> userNicknameMap = nickNames.stream().collect(Collectors.toMap(SysUser::getUserId, SysUser::getNickName));
                 report.setCreateBy(userNicknameMap.get(report.getSubmitterId()));
             }
         }
@@ -681,13 +650,12 @@ public class PmWorkContentServiceImpl extends AbstractCrudService<PmWorkContentM
      **/
     private List<PmReceive> receives(List<Integer> reports) {
         LambdaQueryWrapper<PmReceive> queryWrapper = Wrappers.lambdaQuery();
-        queryWrapper.select(PmReceive::getReportId, PmReceive::getReadFlag, PmReceive::getReceiverId)
-                .in(PmReceive::getReportId, reports);
+        queryWrapper.select(PmReceive::getReportId, PmReceive::getReadFlag, PmReceive::getReceiverId).in(PmReceive::getReportId, reports);
         return pmReceiveMapper.selectList(queryWrapper);
     }
 
     /**
-     * @description: 获取报告列表
+     * @description: 获取时间段内报告列表(按报告时间查询)
      * @author: fu
      * @date: 2024/8/8 19:22
      * @param: [startDate, endDate]
@@ -695,13 +663,9 @@ public class PmWorkContentServiceImpl extends AbstractCrudService<PmWorkContentM
      **/
     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);
+        reportsQuery.select(PmWorkReport::getId).between(PmWorkReport::getReportDate, startDate, endDate);
         List<PmWorkReport> pmWorkReportList = pmWorkReportMapper.selectList(reportsQuery);
-        return pmWorkReportList.stream()
-                .map(PmWorkReport::getId)
-                .collect(Collectors.toList());
+        return pmWorkReportList.stream().map(PmWorkReport::getId).collect(Collectors.toList());
     }
 
     private List<PmProject> projects(Integer projectId) {
@@ -721,26 +685,28 @@ public class PmWorkContentServiceImpl extends AbstractCrudService<PmWorkContentM
         Integer tenantId = SecurityUtils.getTenantId();
         Long deptId = SecurityUtils.getLoginUser().getSysUser().getDeptId();
         LambdaQueryWrapper<SysUser> userNameQuery = Wrappers.lambdaQuery();
-        userNameQuery.select(SysUser::getUserId, SysUser::getNickName, SysUser::getUserName, SysUser::getPhonenumber, SysUser::getAvatar,
-                        SysUser::getSex, SysUser::getDeptId)
-                .eq(SysUser::getDelFlag, 0)
-                .eq(SysUser::getStatus, 0);
+        userNameQuery.select(SysUser::getUserId, SysUser::getNickName, SysUser::getUserName, SysUser::getPhonenumber, SysUser::getAvatar, SysUser::getSex, SysUser::getDeptId).eq(SysUser::getDelFlag, 0).eq(SysUser::getStatus, 0);
         if (userId != null && userId != 0) {
             userNameQuery.eq(SysUser::getUserId, userId);
             return sysUserMapper.selectList(userNameQuery);
         }
-        userNameQuery.eq(SysUser::getTenantId, tenantId)
-                .eq(SysUser::getDeptId, deptId);
+        userNameQuery.eq(SysUser::getTenantId, tenantId).eq(SysUser::getDeptId, deptId);
         return sysUserMapper.selectList(userNameQuery);
     }
 
+    /**
+     * @description: 工时统计
+     * @author: fu
+     * @date: 2024/8/8 19:22
+     * @param: [startDate, endDate, projectName, projectAscription]
+     * @return: java.util.List<com.usky.iot.domain.PmWorkReport>
+     **/
     //@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::getReportId, PmWorkContent::getProjectId, PmWorkContent::getProjectName,
-                PmWorkContent::getWorkTime, PmWorkContent::getDeptId, PmWorkContent::getTenantId);
+        workTimeQuery.select(PmWorkContent::getSubmitterId, PmWorkContent::getReportId, PmWorkContent::getProjectId, PmWorkContent::getProjectName, PmWorkContent::getWorkTime, PmWorkContent::getDeptId, PmWorkContent::getTenantId);
         if (!users.isEmpty()) {
             workTimeQuery.in(PmWorkContent::getSubmitterId, users);
         }
@@ -751,7 +717,9 @@ public class PmWorkContentServiceImpl extends AbstractCrudService<PmWorkContentM
             LocalDate start = LocalDate.parse(startDate);
             LocalDate end = LocalDate.parse(endDate);
             List<Integer> reports = reports(start, end);
-            workTimeQuery.in(PmWorkContent::getReportId, reports);
+            if (!reports.isEmpty()) {
+                workTimeQuery.in(PmWorkContent::getReportId, reports);
+            }
         }
         workTimeQuery.eq(PmWorkContent::getTenantId, tenantId).eq(PmWorkContent::getDeptId, deptId);
         // workTimeQuery.apply(DataScopeContextHolder.getDataScopeSql());// 数据权限设置