Browse Source

对接消息中心和跳转详情

fuyuhchuan 9 months ago
parent
commit
fb7428ade2

+ 4 - 2
service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/web/PmWorkContentController.java

@@ -31,12 +31,13 @@ public class PmWorkContentController {
     public ApiResult<List<PmWorkContent>> pageList(@RequestParam(value = "startDate", required = false) String startDate,
                                                    @RequestParam(value = "endDate", required = false) String endDate,
                                                    @RequestParam(value = "projectName", required = false) String projectName,
+                                                   @RequestParam(value = "reportId", required = false) Integer reportId,
                                                    @RequestParam(value = "projectAscription", required = false, defaultValue = "1") Integer projectAscription) {
         if (StringUtils.isBlank(startDate) || StringUtils.isBlank(endDate)) {
             startDate = LocalDate.now().toString();
             endDate = LocalDate.now().toString();
         }
-        return ApiResult.success(pmWorkContentService.projectQuery(startDate, endDate, projectName, projectAscription));
+        return ApiResult.success(pmWorkContentService.projectQuery(startDate, endDate, projectName, projectAscription, reportId));
     }
 
 
@@ -45,12 +46,13 @@ public class PmWorkContentController {
     public ApiResult<List<PmWorkReport>> reportRecord(@RequestParam(value = "startDate", required = false) String startDate,
                                                       @RequestParam(value = "endDate", required = false) String endDate,
                                                       @RequestParam(value = "projectName", required = false) String projectName,
+                                                      @RequestParam(value = "reportId", required = false) Integer reportId,
                                                       @RequestParam(value = "projectAscription", required = false, defaultValue = "1") Integer projectAscription) {
         if (StringUtils.isBlank(startDate) || StringUtils.isBlank(endDate)) {
             startDate = LocalDate.now().toString();
             endDate = LocalDate.now().toString();
         }
-        return ApiResult.success(pmWorkContentService.workReportQuery(startDate, endDate, projectName, projectAscription));
+        return ApiResult.success(pmWorkContentService.workReportQuery(startDate, endDate, projectName, projectAscription, reportId));
     }
 
     @GetMapping("/workHourStatistic")

+ 16 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/mapper/PmWorkContentMapper.java

@@ -1,5 +1,6 @@
 package com.usky.iot.mapper;
 
+import com.usky.common.security.utils.SecurityUtils;
 import com.usky.iot.domain.PmWorkContent;
 import com.usky.common.mybatis.core.CrudMapper;
 import com.usky.iot.service.vo.PmProjectWorkTimeVo;
@@ -31,4 +32,19 @@ public interface PmWorkContentMapper extends CrudMapper<PmWorkContent> {
                                                     @Param("userId") Long userId,
                                                     @Param("tenantId") Integer tenantId);
 
+    /**
+     * 人员查询时增加部门隔离,项目维度不需要
+     *
+     * @param startTime
+     * @param endTime
+     * @param userId
+     * @param tenantId
+     * @return
+     */
+    List<WorkHoursStatisticsVO> statisticsDept(@Param("startTime") LocalDate startTime,
+                                               @Param("endTime") LocalDate endTime,
+                                               @Param("userId") Long userId,
+                                               @Param("tenantId") Integer tenantId,
+                                               @Param("deptId") Long deptId);
+
 }

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

@@ -31,7 +31,7 @@ public interface PmWorkContentService extends CrudService<PmWorkContent> {
      * @param projectAscription 查询标识(1:我负责的;2:抄送我的)
      * @return
      */
-    List<PmWorkContent> projectQuery(String startDate, String endDate, String projectName, Integer projectAscription);
+    List<PmWorkContent> projectQuery(String startDate, String endDate, String projectName, Integer projectAscription, Integer reportId);
 
     /**
      * 报告记录
@@ -42,7 +42,7 @@ public interface PmWorkContentService extends CrudService<PmWorkContent> {
      * @param projectAscription 查询标识(1:我负责的;2:抄送我的)
      * @return
      */
-    List<PmWorkReport> workReportQuery(String startDate, String endDate, String projectName, Integer projectAscription);
+    List<PmWorkReport> workReportQuery(String startDate, String endDate, String projectName, Integer projectAscription, Integer reportId);
 
     /** 工时统计页面
      * @param userId          用户id

+ 0 - 3
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/PmProjectServiceImpl.java

@@ -15,12 +15,9 @@ import com.usky.iot.mapper.SysUserMapper;
 import com.usky.iot.service.PmProjectService;
 import com.usky.common.mybatis.core.AbstractCrudService;
 import com.usky.system.domain.SysUser;
-import org.checkerframework.checker.units.qual.A;
-import org.omg.CORBA.StringHolder;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.util.*;
 import java.util.stream.Collectors;

+ 61 - 37
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/PmWorkContentServiceImpl.java

@@ -58,7 +58,15 @@ public class PmWorkContentServiceImpl extends AbstractCrudService<PmWorkContentM
     }
 
     @Override
-    public List<PmWorkContent> projectQuery(String startDate, String endDate, String projectName, Integer projectAscription) {
+    public List<PmWorkContent> projectQuery(String startDate, String endDate, String projectName, Integer projectAscription, Integer reportId) {
+        if (reportId != null && reportId != 0) {
+            LambdaQueryWrapper<PmWorkContent> contentLambdaQuery = Wrappers.lambdaQuery();
+            contentLambdaQuery.select(PmWorkContent::getProjectId, PmWorkContent::getProjectName)
+                    .eq(PmWorkContent::getReportId, reportId)
+                    .groupBy(PmWorkContent::getProjectId, PmWorkContent::getProjectName);
+            List<PmWorkContent> pmWorkContentList = this.list(contentLambdaQuery);
+            return pmWorkContentList;
+        }
         LocalDate start = LocalDate.parse(startDate);
         LocalDate end = LocalDate.parse(endDate);
         String subQueryReports = "SELECT id FROM pm_work_report WHERE report_date BETWEEN '" + start + "' AND '" + end + "' AND tenant_id = " + SecurityUtils.getTenantId();
@@ -81,39 +89,54 @@ public class PmWorkContentServiceImpl extends AbstractCrudService<PmWorkContentM
     }
 
     @Override
-    public List<PmWorkReport> workReportQuery(String startDate, String endDate, String projectName, Integer projectAscription) {
-        LocalDate start = LocalDate.parse(startDate);
-        LocalDate end = LocalDate.parse(endDate);
-        String subQueryReports = "SELECT id FROM pm_work_report WHERE report_date BETWEEN '" + start + "' AND '" + end + "' AND tenant_id = " + SecurityUtils.getTenantId();
-        String subQueryReport = "SELECT id FROM pm_work_report WHERE FIND_IN_SET('" + SecurityUtils.getUserId() + "', cc_to) > 0 AND tenant_id = " + SecurityUtils.getTenantId();
-        String subQueryProjects = "SELECT id FROM pm_project WHERE project_head = '" + SecurityUtils.getUserId() + "' AND tenant_id = " + SecurityUtils.getTenantId();
-        String reportIdList = "SELECT report_id FROM pm_work_content WHERE project_name = '" + projectName + "' AND tenant_id = " + SecurityUtils.getTenantId();
+    public List<PmWorkReport> workReportQuery(String startDate, String endDate, String projectName, Integer projectAscription, Integer reportId) {
         List<PmWorkReport> reportList = new ArrayList<>();
-        LambdaQueryWrapper<PmWorkContent> contentLambdaQuery = Wrappers.lambdaQuery();
-        contentLambdaQuery.select(PmWorkContent::getReportId, PmWorkContent::getWorkContent, PmWorkContent::getWorkTime, PmWorkContent::getProjectName)
-                .inSql(PmWorkContent::getReportId, subQueryReports);
-        if (projectAscription == 1) {
-            contentLambdaQuery.inSql(PmWorkContent::getProjectId, subQueryProjects);
-        } else if (projectAscription == 2) {
-            contentLambdaQuery.inSql(PmWorkContent::getReportId, subQueryReport);
-        }
-        if (StringUtils.isNotBlank(projectName)) {
-            contentLambdaQuery.inSql(PmWorkContent::getReportId, reportIdList);
-        }
-        List<PmWorkContent> pmWorkContentList = this.list(contentLambdaQuery);
-        if (pmWorkContentList == null || pmWorkContentList.size() == 0) {
-            return reportList;
-        }
-        List<Integer> reportIds = new ArrayList<>();
-        for (PmWorkContent a : pmWorkContentList) {
-            reportIds.add(a.getReportId());
+        List<PmWorkContent> pmWorkContentList = 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);
+            PmWorkReport report = pmWorkReportMapper.selectOne(reportQuery);
+            LambdaQueryWrapper<PmWorkContent> contentQuery = Wrappers.lambdaQuery();
+            contentQuery.select(PmWorkContent::getWorkContent, PmWorkContent::getWorkTime, PmWorkContent::getProjectName)
+                    .eq(PmWorkContent::getReportId, reportId);
+            pmWorkContentList = this.list(contentQuery);
+            report.setWorkContents(pmWorkContentList);
+            reportList.add(report);
+        }else{
+            LocalDate start = LocalDate.parse(startDate);
+            LocalDate end = LocalDate.parse(endDate);
+            String subQueryReports = "SELECT id FROM pm_work_report WHERE report_date BETWEEN '" + start + "' AND '" + end + "' AND tenant_id = " + SecurityUtils.getTenantId();
+            String subQueryReport = "SELECT id FROM pm_work_report WHERE FIND_IN_SET('" + SecurityUtils.getUserId() + "', cc_to) > 0 AND tenant_id = " + SecurityUtils.getTenantId();
+            String subQueryProjects = "SELECT id FROM pm_project WHERE project_head = '" + SecurityUtils.getUserId() + "' AND tenant_id = " + SecurityUtils.getTenantId();
+            String reportIdList = "SELECT report_id FROM pm_work_content WHERE project_name = '" + projectName + "' AND tenant_id = " + SecurityUtils.getTenantId();
+            LambdaQueryWrapper<PmWorkContent> contentLambdaQuery = Wrappers.lambdaQuery();
+            contentLambdaQuery.select(PmWorkContent::getReportId, PmWorkContent::getWorkContent, PmWorkContent::getWorkTime, PmWorkContent::getProjectName)
+                    .inSql(PmWorkContent::getReportId, subQueryReports);
+            if (projectAscription == 1) {
+                contentLambdaQuery.inSql(PmWorkContent::getProjectId, subQueryProjects);
+            } else if (projectAscription == 2) {
+                contentLambdaQuery.inSql(PmWorkContent::getReportId, subQueryReport);
+            }
+            if (StringUtils.isNotBlank(projectName)) {
+                contentLambdaQuery.inSql(PmWorkContent::getReportId, reportIdList);
+            }
+            pmWorkContentList = this.list(contentLambdaQuery);
+            if (pmWorkContentList == null || pmWorkContentList.size() == 0) {
+                return reportList;
+            }
+            List<Integer> reportIds = new ArrayList<>();
+            for (PmWorkContent a : pmWorkContentList) {
+                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);
+            reportList = pmWorkReportMapper.selectList(reportQuery);
         }
-        LambdaQueryWrapper<PmWorkReport> reportQuery = Wrappers.lambdaQuery();
-        reportQuery.select(PmWorkReport::getId, PmWorkReport::getCoordinateWork, PmWorkReport::getTomorrowPlan, PmWorkReport::getCcTo, PmWorkReport::getSubmitterId,
-                PmWorkReport::getCreateTime)
-                .in(PmWorkReport::getId, reportIds)
-                .orderByDesc(PmWorkReport::getCreateTime);
-        reportList = pmWorkReportMapper.selectList(reportQuery);
         List<Long> userIds = new ArrayList<>();
         for (PmWorkReport c : reportList) {
             List<PmWorkContent> contents = new ArrayList<>();
@@ -152,14 +175,17 @@ public class PmWorkContentServiceImpl extends AbstractCrudService<PmWorkContentM
         List<String> pmProjectName = projectIdName.stream()
                 .map(map -> (String) map.get("name"))
                 .collect(Collectors.toList());
-        //统计userId每个项目所需工时
-        List<WorkHoursStatisticsVO> userAndProject = baseMapper.workHoursStatistics(start, end, userId, tenantId);
+        //所有人员id和nickName
         List<Map<String, Object>> users = pmProjectService.projectUsers(userId);
         List<String> nickName = new ArrayList<>();
         for (Map<String, Object> map : users) {
             Object name = map.get("name");
             nickName.add((String) name);
         }
+        //统计userId每个项目所需工时
+        List<WorkHoursStatisticsVO> userAndProject = baseMapper.workHoursStatistics(start, end, userId, tenantId);
+        Long deptId = SecurityUtils.getLoginUser().getSysUser().getDeptId();
+        List<WorkHoursStatisticsVO> userAndProjectD = baseMapper.statisticsDept(start, end, userId, tenantId, deptId);
         if (workerOrProject != 1) {
             returnList.add(nickName);
             //重组返回数据结构
@@ -204,7 +230,7 @@ public class PmWorkContentServiceImpl extends AbstractCrudService<PmWorkContentM
                 boolean hasNonZeroWorkTime = false;
                 for (String currentNickName : pmProjectName) {
                     boolean foundWorkTime = false;
-                    for (WorkHoursStatisticsVO workHoursStatisticsVO : userAndProject) {
+                    for (WorkHoursStatisticsVO workHoursStatisticsVO : userAndProjectD) {
                         String userNickName = workHoursStatisticsVO.getNickName();
                         String projectName = workHoursStatisticsVO.getProjectName();
                         BigDecimal userProjectWorkTime = workHoursStatisticsVO.getWorkTime();
@@ -228,8 +254,6 @@ public class PmWorkContentServiceImpl extends AbstractCrudService<PmWorkContentM
             }
             returnList.add(userWorkTimeVO);
         }
-
-
         return returnList;
     }
 

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

@@ -231,7 +231,7 @@ public class PmWorkReportServiceImpl extends AbstractCrudService<PmWorkReportMap
             newReport.setTenantId(SecurityUtils.getTenantId());
             newReport.setTotalHours(totalWorkTime);
             pmWorkReportMapper.insert(newReport);
-            Integer id =  newReport.getId();
+            Integer id = newReport.getId();
             //获取报告中所有项目id
             List<Integer> projectIds = new ArrayList<>();
             for (PmWorkContent b1 : pmWorkReport.getWorkContents()) {
@@ -260,7 +260,7 @@ public class PmWorkReportServiceImpl extends AbstractCrudService<PmWorkReportMap
                 newContent.setTenantId(SecurityUtils.getTenantId());
                 pmWorkContentMapper.insert(newContent);
                 //推送消息中心
-                String infoContent = SecurityUtils.getLoginUser().getSysUser().getNickName() +"的工作报告";
+                String infoContent = SecurityUtils.getLoginUser().getSysUser().getNickName() + "的工作报告";
                 String[] strArr = newReport.getCcTo().split(",");
                 List<Long> ids = Arrays.stream(strArr)
                         .map(Long::parseLong)
@@ -270,9 +270,10 @@ public class PmWorkReportServiceImpl extends AbstractCrudService<PmWorkReportMap
                 jsonObject.put("infoContent", infoContent);
                 jsonObject.put("infoType", 5);
                 jsonObject.put("id", id);
-                jsonObject.put("userIds",ids);
-                String jsonStr = jsonObject.toJSONString();
+                jsonObject.put("userIds", ids);
+                String jsonStr = jsonObject.toString();
                 remoteMceService.addMce(jsonStr);
+                System.out.println("Serialized JSON: " + jsonStr);
             }
         } else {
             PmWorkReport rp = new PmWorkReport();

+ 14 - 0
service-iot/service-iot-biz/src/main/resources/mapper/iot/PmWorkContentMapper.xml

@@ -40,4 +40,18 @@
         GROUP BY u.nick_name, pc.project_name
     </select>
 
+    <select id="statisticsDept" resultType="com.usky.iot.service.vo.WorkHoursStatisticsVO">
+        SELECT u.nick_name as nickName, pc.project_name as projectName, SUM(pc.work_time) as workTime
+        FROM pm_work_content pc
+        JOIN pm_work_report pr ON pc.report_id = pr.id
+        JOIN sys_user u ON pc.submitter_id = u.user_id
+        <if test="userId != null and userId != '' and userId != 0 ">
+            AND pr.submitter_id = #{userId}
+        </if>
+        AND pc.tenant_id = #{tenantId}
+        AND pc.dept_id = #{deptId}
+        AND pr.report_date BETWEEN #{startTime} AND #{endTime}
+        GROUP BY u.nick_name, pc.project_name
+    </select>
+
 </mapper>