Browse Source

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

gez 10 months ago
parent
commit
e2bd226d01

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

@@ -66,7 +66,7 @@ public class PmProjectController {
     }
 
     /**
-     * 新增项目
+     * 新增、编辑项目
      * @param pmProject
      */
     @PostMapping("/add")

+ 6 - 4
service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/web/PmWorkReportController.java

@@ -30,13 +30,14 @@ public class PmWorkReportController {
 
     /**
      * 周工作报告查询
+     *
      * @param startDate 开始时间
-     * @param endDate 结束时间
-     * @param id 报告id
+     * @param endDate   结束时间
+     * @param id        报告id
      * @return
      */
     @GetMapping("/week")
-    public ApiResult<List<PmWorkReport>> weekWork(@RequestParam(required = false) String startDate,
+    public ApiResult<List<Map<String, List<PmWorkReport>>>> weekWork(@RequestParam(required = false) String startDate,
                                                   @RequestParam(required = false) String endDate,
                                                   @RequestParam(required = false, defaultValue = "0") Integer id) {
 
@@ -55,10 +56,11 @@ public class PmWorkReportController {
 
     /**
      * 统计工时
+     *
      * @return
      */
     @GetMapping("/workTimeTotal")
-    public ApiResult<List<Map<String, Object>>> weekWork(){
+    public ApiResult<List<Map<String, Object>>> weekWork() {
         return ApiResult.success(pmWorkReportService.countTime());
     }
 }

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

@@ -3,13 +3,13 @@ package com.usky.iot.domain;
 import java.math.BigDecimal;
 
 import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.io.Serializable;
 import java.util.List;
-import java.util.Map;
 
 import lombok.*;
 import org.springframework.data.annotation.Transient;
@@ -102,7 +102,7 @@ public class PmWorkReport implements Serializable {
     /**
      * 工作报告对应内容
      */
-    @Transient
+    @TableField(exist = false)
     private List<PmWorkContent> workContents;
 
 

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

@@ -2,8 +2,15 @@ package com.usky.iot.mapper;
 
 import com.usky.iot.domain.PmWorkContent;
 import com.usky.common.mybatis.core.CrudMapper;
+import com.usky.iot.service.vo.PmProjectTotalWorkTimeVo;
+import com.usky.iot.service.vo.PmProjectWorkTimeVo;
+import org.apache.ibatis.annotations.Param;
 import org.springframework.stereotype.Repository;
 
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.util.List;
+
 /**
  * <p>
  * 工作内容表 Mapper 接口
@@ -15,4 +22,11 @@ import org.springframework.stereotype.Repository;
 @Repository
 public interface PmWorkContentMapper extends CrudMapper<PmWorkContent> {
 
+    List<PmProjectWorkTimeVo> workTimeCount(@Param("startTime") LocalDateTime startTime,
+                                            @Param("endTime") LocalDateTime endTime,
+                                            @Param("userId") Long userId);
+
+/*    List<PmProjectTotalWorkTimeVo> timeCount(@Param("startTime") LocalDateTime startTime,
+                                             @Param("endTime") LocalDateTime endTime,
+                                             @Param("userId") Long userId);*/
 }

+ 1 - 5
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/PmWorkReportService.java

@@ -1,12 +1,8 @@
 package com.usky.iot.service;
 
-import com.usky.iot.domain.PmWorkContent;
 import com.usky.iot.domain.PmWorkReport;
 import com.usky.common.mybatis.core.CrudService;
-import com.usky.iot.service.vo.PmProjectWorkTimeVo;
 
-import java.time.LocalDate;
-import java.time.LocalDateTime;
 import java.util.List;
 import java.util.Map;
 
@@ -27,7 +23,7 @@ public interface PmWorkReportService extends CrudService<PmWorkReport> {
      * @param reportId 报告id
      * @return
      */
-    List<PmWorkReport> weekWork(String startDate, String endDate, Integer reportId);
+    List<Map<String, List<PmWorkReport>>> weekWork(String startDate, String endDate, Integer reportId);
 
     /**
      * 新增、编辑工作报告

+ 26 - 12
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/PmProjectServiceImpl.java

@@ -18,10 +18,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.time.LocalDateTime;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 /**
  * <p>
@@ -39,8 +36,8 @@ public class PmProjectServiceImpl extends AbstractCrudService<PmProjectMapper, P
 
     @Override
     public void addProject(PmProject project) {
-        if (project.getProjectWorkload() == null){
-            if (project.getId() == null) {
+        if (Objects.isNull(project.getProjectWorkload())) {
+            if (Objects.isNull(project.getId())) {
                 project.setCreateBy(SecurityUtils.getUsername());
                 project.setCreateTime(LocalDateTime.now());
                 project.setTenantId(SecurityUtils.getTenantId());
@@ -51,11 +48,23 @@ public class PmProjectServiceImpl extends AbstractCrudService<PmProjectMapper, P
                 project.setUpdateTime(LocalDateTime.now());
                 this.updateById(project);
             }
-        }else {
+        } else {
             if (project.getProjectWorkload().scale() > 2) {
                 throw new BusinessException("计划人/天小数位超出长度请重新输入");
             } else if (project.getProjectWorkload().precision() - project.getProjectWorkload().scale() > 4) {
                 throw new BusinessException("计划人/天整数位超出长度请重新输入");
+            } else {
+                if (Objects.isNull(project.getId())) {
+                    project.setCreateBy(SecurityUtils.getUsername());
+                    project.setCreateTime(LocalDateTime.now());
+                    project.setTenantId(SecurityUtils.getTenantId());
+                    project.setDeptId(SecurityUtils.getLoginUser().getSysUser().getDeptId());
+                    this.save(project);
+                } else {
+                    project.setUpdateBy(SecurityUtils.getUsername());
+                    project.setUpdateTime(LocalDateTime.now());
+                    this.updateById(project);
+                }
             }
         }
     }
@@ -92,8 +101,7 @@ public class PmProjectServiceImpl extends AbstractCrudService<PmProjectMapper, P
                 .eq(PmProject::getDelFlag, 0)
                 .and(qw -> qw
                         .eq(PmProject::getProjectHead, SecurityUtils.getUserId())
-                        .or()
-                        .apply("FIND_IN_SET('" + SecurityUtils.getUserId() + "', project_member) > 0")
+                        .or().apply("FIND_IN_SET('" + SecurityUtils.getUserId() + "', project_member) > 0")
                 )
                 .in(PmProject::getProjectStatus, 1, 2, 3);
         List<PmProject> list = this.list(wrapper);
@@ -118,10 +126,13 @@ public class PmProjectServiceImpl extends AbstractCrudService<PmProjectMapper, P
         lambdaQuery.eq(PmProject::getTenantId, SecurityUtils.getTenantId())
                 .eq(PmProject::getDelFlag, 0)
                 .orderByDesc(PmProject::getCreateTime);
-        if (projectAscription == 1) {
+        if (projectAscription == 0) {
+            lambdaQuery.and(q -> q.eq(PmProject::getProjectHead, SecurityUtils.getUserId())
+                            .or().apply("FIND_IN_SET('" + SecurityUtils.getUserId() + "', project_member) > 0")
+                            .or().eq(PmProject::getCreateBy, SecurityUtils.getUsername()));
+        } else if (projectAscription == 1) {
             lambdaQuery.eq(PmProject::getProjectHead, SecurityUtils.getUserId());
-        }
-        if (projectAscription == 2) {
+        } else if (projectAscription == 2) {
             lambdaQuery.apply("FIND_IN_SET('" + SecurityUtils.getUserId() + "', project_member) > 0");
         }
         if (!projectName.isEmpty()) {
@@ -163,6 +174,9 @@ public class PmProjectServiceImpl extends AbstractCrudService<PmProjectMapper, P
     public Map<String, Integer> sum() {
         LambdaQueryWrapper<PmProject> lambdaQuery = Wrappers.lambdaQuery();
         lambdaQuery.eq(PmProject::getTenantId, SecurityUtils.getTenantId())
+                .and(q -> q.eq(PmProject::getProjectHead, SecurityUtils.getUserId())
+                        .or().apply("FIND_IN_SET('" + SecurityUtils.getUserId() + "', project_member) > 0")
+                .or().eq(PmProject::getCreateBy, SecurityUtils.getUsername()))
                 .eq(PmProject::getDelFlag, 0);
         Integer all = this.count(lambdaQuery);
 

+ 115 - 38
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/PmWorkReportServiceImpl.java

@@ -7,7 +7,6 @@ import com.usky.common.security.utils.SecurityUtils;
 import com.usky.iot.domain.PmProject;
 import com.usky.iot.domain.PmWorkContent;
 import com.usky.iot.domain.PmWorkReport;
-import com.usky.iot.mapper.PmProjectMapper;
 import com.usky.iot.mapper.PmWorkContentMapper;
 import com.usky.iot.mapper.PmWorkReportMapper;
 import com.usky.iot.service.PmProjectService;
@@ -59,7 +58,11 @@ public class PmWorkReportServiceImpl extends AbstractCrudService<PmWorkReportMap
      * @return
      */
     @Override
-    public List<PmWorkReport> weekWork(String startDate, String endDate, Integer reportId) {
+    public List<Map<String, List<PmWorkReport>>> weekWork(String startDate, String endDate, Integer reportId) {
+        List<Map<String, List<PmWorkReport>>> returnList = new ArrayList<>();
+        List<PmWorkReport> report = new ArrayList<>();
+        Map<String, List<PmWorkReport>> weekData = new HashMap<>();
+        Map<String, List<PmWorkReport>> newData = new HashMap<>();
         LocalDate startDate1 = null;
         LocalDate endDate1 = null;
         if (startDate == null && endDate == null) {
@@ -69,19 +72,20 @@ public class PmWorkReportServiceImpl extends AbstractCrudService<PmWorkReportMap
             startDate1 = LocalDate.parse(startDate);
             endDate1 = LocalDate.parse(endDate);
         }
-        //固定返回七条数据,没有内容也要设置时间给前端渲染
         List<LocalDate> dates = new ArrayList<>();
-        while (!startDate1.isAfter(endDate1)) {
-            dates.add(startDate1);
-            startDate1 = startDate1.plusDays(1);
+        LocalDate tempDate = startDate1;
+        while (!tempDate.isAfter(endDate1)) {
+            dates.add(tempDate);
+            tempDate = tempDate.plusDays(1);
         }
+        //固定返回七条数据,没有内容也要设置时间给前端渲染
         LambdaQueryWrapper<PmWorkReport> queryWrapperR = Wrappers.lambdaQuery();
-        queryWrapperR.select(PmWorkReport::getId, PmWorkReport::getReportDate, PmWorkReport::getSubmitDate, PmWorkReport::getTomorrowPlan, PmWorkReport::getCoordinateWork, PmWorkReport::getCcTo)
+        queryWrapperR.select(PmWorkReport::getId, PmWorkReport::getReportDate, PmWorkReport::getSubmitDate, PmWorkReport::getUpdateTime, PmWorkReport::getTomorrowPlan, PmWorkReport::getCoordinateWork, PmWorkReport::getCcTo)
                 .eq(PmWorkReport::getSubmitterId, SecurityUtils.getUserId())
-                .between(PmWorkReport::getReportDate, startDate, endDate)
+                .between(PmWorkReport::getReportDate, startDate1, endDate1)
                 .orderByAsc(PmWorkReport::getReportDate)
                 .apply(reportId != 0, "id = " + reportId);
-        List<PmWorkReport> reports = this.list(queryWrapperR);
+        List<PmWorkReport> reports = baseMapper.selectList(queryWrapperR);
         if (reports.isEmpty()) {
             List<PmWorkReport> reports1 = new ArrayList<>();
             for (int f = 0; f < dates.size(); f++) {
@@ -91,14 +95,19 @@ public class PmWorkReportServiceImpl extends AbstractCrudService<PmWorkReportMap
                 report1.setWorkContents(content);
                 reports1.add(report1);
             }
-            return reports1;
+            weekData.put("weekData", reports1);
+            newData.put("newData", report);
+            returnList.add(0, newData);
+            returnList.add(1, weekData);
+            return returnList;
         }
         List<Integer> ids = new ArrayList<>();
         for (PmWorkReport pwr : reports) {
             ids.add(pwr.getId());
         }
         LambdaQueryWrapper<PmWorkContent> queryWrapperC = Wrappers.lambdaQuery();
-        queryWrapperC.select(PmWorkContent::getId, PmWorkContent::getWorkContent, PmWorkContent::getWorkTime, PmWorkContent::getProjectId, PmWorkContent::getProjectName, PmWorkContent::getReportId)
+        queryWrapperC.select(PmWorkContent::getId, PmWorkContent::getWorkContent, PmWorkContent::getWorkTime, PmWorkContent::getProjectId,
+                PmWorkContent::getProjectName, PmWorkContent::getReportId, PmWorkContent::getCreateTime, PmWorkContent::getUpdateTime)
                 .in(PmWorkContent::getReportId, ids)
                 .orderByDesc(PmWorkContent::getWorkTime);
         List<PmWorkContent> contents = pmWorkContentMapper.selectList(queryWrapperC);
@@ -115,7 +124,21 @@ public class PmWorkReportServiceImpl extends AbstractCrudService<PmWorkReportMap
             reports.get(i).setWorkContents(contentList);
         }
         if (reports.size() == 7 || reportId != 0) {
-            return reports;
+            weekData.put("weekData", reports);
+            LambdaQueryWrapper<PmWorkReport> wrapper1 = Wrappers.lambdaQuery();
+            wrapper1.eq(PmWorkReport::getSubmitterId, SecurityUtils.getUserId())
+                    .orderByDesc(PmWorkReport::getReportDate)
+                    .last("LIMIT 1");
+            report = this.list(wrapper1);
+            Integer rId = report.get(0).getId();
+            LambdaQueryWrapper<PmWorkContent> wrapperC = Wrappers.lambdaQuery();
+            wrapperC.eq(PmWorkContent::getProjectId, rId);
+            List<PmWorkContent> pmWorkContents = pmWorkContentMapper.selectList(wrapperC);
+            report.get(0).setWorkContents(pmWorkContents);
+            newData.put("newData", report);
+            returnList.add(0, newData);
+            returnList.add(1, weekData);
+            return returnList;
         }
         List<PmWorkReport> reportList = new ArrayList<>();
         for (int d = 0; d < dates.size(); d++) {
@@ -135,7 +158,41 @@ public class PmWorkReportServiceImpl extends AbstractCrudService<PmWorkReportMap
                 reportList.add(newReport);
             }
         }
-        return reportList;
+        //返回最新的一条数据给前端填充
+        LambdaQueryWrapper<PmWorkReport> wrapper2 = Wrappers.lambdaQuery();
+        wrapper2.eq(PmWorkReport::getSubmitterId, SecurityUtils.getUserId())
+                .orderByDesc(PmWorkReport::getSubmitDate)
+                .last("LIMIT 1");
+        List<PmWorkReport> report2 = baseMapper.selectList(wrapper2);
+        LambdaQueryWrapper<PmWorkReport> wrapper3 = Wrappers.lambdaQuery();
+        wrapper2.eq(PmWorkReport::getSubmitterId, SecurityUtils.getUserId())
+                .orderByDesc(PmWorkReport::getUpdateTime)
+                .last("LIMIT 1");
+        List<PmWorkReport> report3 = baseMapper.selectList(wrapper3);
+        LocalDateTime sbTime = report2.get(0).getSubmitDate();
+        LocalDateTime upTime = report3.get(0).getSubmitDate();
+        int comparisonResult = sbTime.compareTo(upTime);
+        if (comparisonResult < 0) {
+            report = report3;
+        } else if (comparisonResult == 0) {
+            report = report2;
+        } else {
+            report = report2;
+        }
+        Integer pId = report.get(0).getId();
+        List<PmWorkContent> pmWorkContentList = new ArrayList<>();
+        for (PmWorkContent pmWorkContent : contents) {
+            Integer pId2 = pmWorkContent.getReportId();
+            if (pId2 == pId){
+                pmWorkContentList.add(pmWorkContent);
+            }
+        }
+        report.get(0).setWorkContents(pmWorkContentList);
+        weekData.put("weekData", reportList);
+        newData.put("newData", report);
+        returnList.add(0, newData);
+        returnList.add(1, weekData);
+        return returnList;
     }
 
     /**
@@ -211,7 +268,7 @@ public class PmWorkReportServiceImpl extends AbstractCrudService<PmWorkReportMap
             rp.setId(pmWorkReport.getId());
             rp.setReportDate(pmWorkReport.getReportDate());
             rp.setSubmitterId(pmWorkReport.getSubmitterId());
-            rp.setSubmitDate(LocalDateTime.now());
+            rp.setSubmitDate(pmWorkReport.getSubmitDate());
             rp.setCcTo(pmWorkReport.getCcTo());
             rp.setCoordinateWork(pmWorkReport.getCoordinateWork());
             rp.setTomorrowPlan(pmWorkReport.getTomorrowPlan());
@@ -223,6 +280,7 @@ public class PmWorkReportServiceImpl extends AbstractCrudService<PmWorkReportMap
             rp.setTenantId(pmWorkReport.getTenantId());
             rp.setUpdateBy(SecurityUtils.getUsername());
             rp.setUpdateTime(LocalDateTime.now());
+            rp.setTotalHours(totalWorkTime);
             pmWorkReportMapper.updateById(rp);
 
             LambdaQueryWrapper<PmWorkContent> queryWrapper = Wrappers.lambdaQuery();
@@ -260,50 +318,69 @@ public class PmWorkReportServiceImpl extends AbstractCrudService<PmWorkReportMap
         LocalDate today = LocalDate.now();
         LocalDate startOfWeek = today.with(TemporalAdjusters.previousOrSame(java.time.DayOfWeek.MONDAY));
         LocalDate endOfWeek = today.with(TemporalAdjusters.nextOrSame(java.time.DayOfWeek.SUNDAY));
+        LocalDateTime startOfWeekDateTime = startOfWeek.atStartOfDay();
+        LocalDateTime endOfWeekDateTime = endOfWeek.atTime(23, 59, 59);
         LocalDate startOfMonth = today.withDayOfMonth(1);
         LocalDate endOfMonth = today.withDayOfMonth(today.lengthOfMonth());
+        LocalDateTime startOfMonthDateTime = startOfMonth.atStartOfDay();
+        LocalDateTime endOfMonthDateTime = endOfMonth.atTime(23, 59, 59);
+
         BigDecimal weekTotal = BigDecimal.ZERO;
-        LambdaQueryWrapper<PmWorkContent> wrapperW = Wrappers.lambdaQuery();
-        wrapperW.eq(PmWorkContent::getSubmitterId,SecurityUtils.getUserId())
-                .between(PmWorkContent::getCreateTime,startOfWeek,endOfWeek);
-        List<PmWorkContent> week = pmWorkContentMapper.selectList(wrapperW);
-        if (week.isEmpty()){
-            weekTotalMap.put("WeekWorkTimeTotal",0);
-            weekMap.put("WeeklyData",week);
+        List<PmProjectWorkTimeVo> week = pmWorkContentMapper.workTimeCount(startOfWeekDateTime, endOfWeekDateTime, SecurityUtils.getUserId());
+        if (week.isEmpty()) {
+            weekTotalMap.put("WeekWorkTimeTotal", 0);
+            weekMap.put("WeeklyData", week);
         }
         for (int i = 0; i < week.size(); i++) {
             weekTotal = weekTotal.add(week.get(i).getWorkTime());
         }
-        BigDecimal monthTotal = BigDecimal.ZERO;
-        LambdaQueryWrapper<PmWorkContent> wrapperM = Wrappers.lambdaQuery();
-        wrapperM.eq(PmWorkContent::getSubmitterId,SecurityUtils.getUserId())
-                .between(PmWorkContent::getCreateTime,startOfMonth,endOfMonth);
-        List<PmWorkContent> month = pmWorkContentMapper.selectList(wrapperW);
-        if (month.isEmpty()){
-            monthTotalMap.put("MonthWorkTimeTotal",0);
-            monthMap.put("MonthlyData",month);
-        }
-        for (int j = 0; j < month.size(); j++) {
-            monthTotal = monthTotal.add(month.get(j).getWorkTime());
-        }
+        BigDecimal totalPercentageW = BigDecimal.ZERO;
         for (int a = 0; a < week.size(); a++) {
             PmProjectWorkTimeVo workTimeVo = new PmProjectWorkTimeVo();
             workTimeVo.setProjectName(week.get(a).getProjectName());
             workTimeVo.setWorkTime(week.get(a).getWorkTime());
+            if (a != week.size() - 1) {
+                BigDecimal percentage = week.get(a).getWorkTime().divide(weekTotal, scale, roundingMode);
+                workTimeVo.setPercentage(percentage);
+                totalPercentageW = totalPercentageW.add(percentage);
+            } else {
+                BigDecimal lastPercentage = BigDecimal.ONE.subtract(totalPercentageW);
+                workTimeVo.setPercentage(lastPercentage);
+            }
             workTimeVo.setPercentage(week.get(a).getWorkTime().divide(weekTotal, scale, roundingMode));
             returnListW.add(workTimeVo);
         }
+
+        BigDecimal monthTotal = BigDecimal.ZERO;
+        List<PmProjectWorkTimeVo> month = pmWorkContentMapper.workTimeCount(startOfMonthDateTime, endOfMonthDateTime, SecurityUtils.getUserId());
+        if (month.isEmpty()) {
+            weekTotalMap.put("MonthWorkTimeTotal", 0);
+            weekMap.put("MonthlyData", month);
+        }
+        for (int i = 0; i < month.size(); i++) {
+            monthTotal = monthTotal.add(month.get(i).getWorkTime());
+        }
+        BigDecimal totalPercentageM = BigDecimal.ZERO;
         for (int b = 0; b < month.size(); b++) {
             PmProjectWorkTimeVo workTimeVo = new PmProjectWorkTimeVo();
             workTimeVo.setProjectName(month.get(b).getProjectName());
             workTimeVo.setWorkTime(month.get(b).getWorkTime());
-            workTimeVo.setPercentage(month.get(b).getWorkTime().divide(weekTotal, scale, roundingMode));
+            if (b != month.size() - 1) {
+                BigDecimal percentage = month.get(b).getWorkTime().divide(monthTotal, scale, roundingMode);
+                workTimeVo.setPercentage(percentage);
+                totalPercentageM = totalPercentageM.add(percentage);
+            } else {
+                BigDecimal lastPercentage = BigDecimal.ONE.subtract(totalPercentageM);
+                workTimeVo.setPercentage(lastPercentage);
+            }
+
             returnListM.add(workTimeVo);
         }
-        weekTotalMap.put("WeekWorkTimeTotal",weekTotal);
-        monthTotalMap.put("MonthWorkTimeTotal",monthTotal);
-        weekMap.put("WeeklyData",returnListW);
-        monthMap.put("MonthlyData",returnListM);
+
+        weekTotalMap.put("WeekWorkTimeTotal", weekTotal);
+        monthTotalMap.put("MonthWorkTimeTotal", monthTotal);
+        weekMap.put("WeeklyData", returnListW);
+        monthMap.put("MonthlyData", returnListM);
         returnList.add(weekTotalMap);
         returnList.add(monthTotalMap);
         returnList.add(weekMap);

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

@@ -0,0 +1,19 @@
+package com.usky.iot.service.vo;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * @description:TODO
+ * @author: fu
+ * @create: 2024-06-04 16:32
+ */
+@Data
+public class PmProjectTotalWorkTimeVo {
+    /**
+     * 总工时
+     */
+    private BigDecimal totalWorkTime;
+}
+

+ 21 - 13
service-iot/service-iot-biz/src/main/resources/mapper/iot/PmWorkContentMapper.xml

@@ -4,19 +4,27 @@
 
     <!-- 通用查询映射结果 -->
     <resultMap id="BaseResultMap" type="com.usky.iot.domain.PmWorkContent">
-        <id column="id" property="id" />
-        <result column="report_id" property="reportId" />
-        <result column="project_id" property="projectId" />
-        <result column="project_name" property="projectName" />
-        <result column="submitter_id" property="submitterId" />
-        <result column="work_content" property="workContent" />
-        <result column="work_time" property="workTime" />
-        <result column="create_by" property="createBy" />
-        <result column="create_time" property="createTime" />
-        <result column="update_by" property="updateBy" />
-        <result column="update_time" property="updateTime" />
-        <result column="dept_id" property="deptId" />
-        <result column="tenant_id" property="tenantId" />
+        <id column="id" property="id"/>
+        <result column="report_id" property="reportId"/>
+        <result column="project_id" property="projectId"/>
+        <result column="project_name" property="projectName"/>
+        <result column="submitter_id" property="submitterId"/>
+        <result column="work_content" property="workContent"/>
+        <result column="work_time" property="workTime"/>
+        <result column="create_by" property="createBy"/>
+        <result column="create_time" property="createTime"/>
+        <result column="update_by" property="updateBy"/>
+        <result column="update_time" property="updateTime"/>
+        <result column="dept_id" property="deptId"/>
+        <result column="tenant_id" property="tenantId"/>
     </resultMap>
+    <select id="workTimeCount" resultType="com.usky.iot.service.vo.PmProjectWorkTimeVo">
+    SELECT pc.project_name, SUM(pc.work_time) as workTime
+    FROM pm_work_content pc
+    JOIN pm_work_report pr ON pc.report_id = pr.id
+    WHERE pr.submitter_id = #{userId}
+    AND pr.report_date BETWEEN #{startTime} AND #{endTime}
+    GROUP BY pc.project_name
+    </select>
 
 </mapper>