fuyuhchuan 10 ماه پیش
والد
کامیت
464212442e

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

@@ -7,10 +7,7 @@ import com.usky.common.security.utils.SecurityUtils;
 import com.usky.iot.domain.PmProject;
 import com.usky.iot.service.PmProjectService;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 import java.util.List;
 import java.util.Map;
@@ -39,7 +36,16 @@ public class PmProjectController {
         return ApiResult.success(pmProjectService.queryProject());
     }
 
-
+    /**
+     * 分页
+     * @param projectName
+     * @param projectType
+     * @param projectStatus
+     * @param projectAscription
+     * @param pageNum
+     * @param pageSize
+     * @return
+     */
     @GetMapping("/page")
     public ApiResult<CommonPage<PmProject>> pageList(@RequestParam(value = "projectName", required = false, defaultValue = "") String projectName,
                                                      @RequestParam(value = "projectType", required = false, defaultValue = "0") Integer projectType,
@@ -50,5 +56,33 @@ public class PmProjectController {
         return ApiResult.success(pmProjectService.projectList(projectName, projectType, projectStatus, projectAscription, pageNum, pageSize));
     }
 
+    /**
+     * 统计
+     * @return
+     */
+    @GetMapping("/counting")
+    public ApiResult<Map<String, Integer>> count() {
+        return ApiResult.success(pmProjectService.sum());
+    }
+
+    /**
+     * 新增项目
+     * @param pmProject
+     */
+    @PostMapping("/add")
+    public void add(@RequestBody PmProject pmProject){
+        pmProjectService.addProject(pmProject);
+    }
+
+    /**
+     * 删除
+     * @param projectId 项目id
+     */
+    @GetMapping("/del")
+    public void add(@RequestParam Integer projectId){
+        pmProjectService.delProject(projectId);
+    }
+
+
 }
 

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

@@ -4,6 +4,7 @@ package com.usky.iot.controller.web;
 import com.usky.common.core.bean.ApiResult;
 import com.usky.iot.domain.PmWorkReport;
 import com.usky.iot.service.PmWorkReportService;
+import com.usky.iot.service.vo.PmProjectWorkTimeVo;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
@@ -11,6 +12,7 @@ import java.time.DayOfWeek;
 import java.time.LocalDate;
 import java.time.temporal.TemporalAdjusters;
 import java.util.List;
+import java.util.Map;
 
 /**
  * <p>
@@ -50,5 +52,13 @@ public class PmWorkReportController {
     public void add(@RequestBody PmWorkReport pmWorkReport) {
         pmWorkReportService.addReport(pmWorkReport);
     }
-}
 
+    /**
+     * 统计工时
+     * @return
+     */
+    @GetMapping("/workTimeTotal")
+    public ApiResult<List<Map<String, Object>>> weekWork(){
+        return ApiResult.success(pmWorkReportService.countTime());
+    }
+}

+ 1 - 1
service-iot/service-iot-biz/src/main/java/com/usky/iot/domain/PmProject.java

@@ -96,7 +96,7 @@ public class PmProject implements Serializable {
     /**
      * 部门ID
      */
-    private Integer deptId;
+    private Long deptId;
 
     /**
      * 租户ID

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

@@ -17,11 +17,18 @@ import java.util.Map;
  */
 public interface PmProjectService extends CrudService<PmProject> {
 
+     /**
+      * 新增、编辑项目
+      * @param project
+      */
      void addProject(PmProject project);
 
-     void delProject(PmProject project);
+     /**
+      * 删除
+      * @param projectId 项目id
+      */
+     void delProject(Integer projectId);
 
-     void updateProject(PmProject project);
 
      List<PmProject> queryProject();
 

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

@@ -3,10 +3,12 @@ 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;
 
 /**
  * <p>
@@ -32,4 +34,10 @@ public interface PmWorkReportService extends CrudService<PmWorkReport> {
      * @param pmWorkReport 工作报告
      */
     void addReport(PmWorkReport pmWorkReport);
+
+    /**
+     * 工时计算
+     * @return
+     */
+    List<Map<String, Object>> countTime();
 }

+ 40 - 14
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/PmProjectServiceImpl.java

@@ -5,14 +5,19 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.usky.common.core.bean.CommonPage;
+import com.usky.common.core.exception.BusinessException;
 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.service.PmProjectService;
 import com.usky.common.mybatis.core.AbstractCrudService;
 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;
@@ -30,21 +35,39 @@ import java.util.Map;
 public class PmProjectServiceImpl extends AbstractCrudService<PmProjectMapper, PmProject> implements PmProjectService {
 
     @Autowired
-    private PmProjectMapper pmProjectMapper;
+    private PmWorkContentMapper pmWorkContentMapper;
 
     @Override
     public void addProject(PmProject project) {
-
-    }
-
-    @Override
-    public void delProject(PmProject project) {
-
+        if (project.getId() == null) {
+            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);
+        }
     }
 
     @Override
-    public void updateProject(PmProject project) {
-
+    public void delProject(Integer projectId) {
+        LambdaQueryWrapper<PmWorkContent> queryWrapper = Wrappers.lambdaQuery();
+        queryWrapper.eq(PmWorkContent::getProjectId, projectId);
+        List<PmWorkContent> pmWorkContent = pmWorkContentMapper.selectList(queryWrapper);
+        if (pmWorkContent.size() != 0) {
+            throw new BusinessException("该项目下存在日报,无法删除!");
+        } else {
+            LambdaQueryWrapper<PmProject> query = Wrappers.lambdaQuery();
+            query.eq(PmProject::getId, projectId);
+            PmProject project = baseMapper.selectOne(query);
+            project.setDelFlag(1);
+            project.setUpdateBy(SecurityUtils.getUsername());
+            project.setUpdateTime(LocalDateTime.now());
+            baseMapper.updateById(project);
+        }
     }
 
     /**
@@ -84,9 +107,7 @@ public class PmProjectServiceImpl extends AbstractCrudService<PmProjectMapper, P
     public CommonPage<PmProject> projectList(String projectName, Integer projectType, Integer projectStatus, Integer projectAscription, Integer pageNum, Integer pageSize) {
         IPage<PmProject> page = new Page<>(pageNum, pageSize);
         LambdaQueryWrapper<PmProject> lambdaQuery = Wrappers.lambdaQuery();
-        lambdaQuery.select(PmProject::getId, PmProject::getProjectName, PmProject::getStartTime, PmProject::getEndTime, PmProject::getProjectStatus,
-                PmProject::getProjectType, PmProject::getProjectHead, PmProject::getProjectMember)
-                .eq(PmProject::getTenantId, SecurityUtils.getTenantId())
+        lambdaQuery.eq(PmProject::getTenantId, SecurityUtils.getTenantId())
                 .eq(PmProject::getDelFlag, 0)
                 .orderByDesc(PmProject::getCreateTime);
         if (projectAscription == 1) {
@@ -122,9 +143,14 @@ public class PmProjectServiceImpl extends AbstractCrudService<PmProjectMapper, P
         LambdaQueryWrapper<PmProject> wrapper = Wrappers.lambdaQuery();
         wrapper.select(PmProject::getId, PmProject::getProjectName)
                 .in(PmProject::getId, projectIds);
-        return pmProjectMapper.selectList(wrapper);
+        return this.list(wrapper);
     }
 
+    /**
+     * 统计
+     *
+     * @return
+     */
     @Override
     public Map<String, Integer> sum() {
         LambdaQueryWrapper<PmProject> lambdaQuery = Wrappers.lambdaQuery();
@@ -145,7 +171,7 @@ public class PmProjectServiceImpl extends AbstractCrudService<PmProjectMapper, P
         Integer join = this.count(lambdaQuery2);
 
         Map<String, Integer> sumMap = new HashMap<>();
-        sumMap.put("allProject",all);
+        sumMap.put("allProject", all);
         sumMap.put("headProject", head);
         sumMap.put("joinProject", join);
         return sumMap;

+ 81 - 10
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/PmWorkReportServiceImpl.java

@@ -14,16 +14,17 @@ import com.usky.iot.service.PmProjectService;
 import com.usky.iot.service.PmWorkContentService;
 import com.usky.iot.service.PmWorkReportService;
 import com.usky.common.mybatis.core.AbstractCrudService;
+import com.usky.iot.service.vo.PmProjectWorkTimeVo;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.time.DayOfWeek;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.temporal.TemporalAdjusters;
-import java.util.ArrayList;
-import java.util.List;
+import java.util.*;
 
 
 /**
@@ -43,9 +44,6 @@ public class PmWorkReportServiceImpl extends AbstractCrudService<PmWorkReportMap
     @Autowired
     private PmWorkReportMapper pmWorkReportMapper;
 
-    @Autowired
-    private PmProjectMapper pmProjectMapper;
-
     @Autowired
     private PmProjectService pmProjectService;
 
@@ -78,7 +76,7 @@ public class PmWorkReportServiceImpl extends AbstractCrudService<PmWorkReportMap
             startDate1 = startDate1.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::getTomorrowPlan, PmWorkReport::getCoordinateWork, PmWorkReport::getCcTo)
                 .eq(PmWorkReport::getSubmitterId, SecurityUtils.getUserId())
                 .between(PmWorkReport::getReportDate, startDate, endDate)
                 .orderByAsc(PmWorkReport::getReportDate)
@@ -145,8 +143,15 @@ public class PmWorkReportServiceImpl extends AbstractCrudService<PmWorkReportMap
      */
     @Override
     public void addReport(PmWorkReport pmWorkReport) {
-        //计算总工时
-        BigDecimal totalWorkTime = BigDecimal.ZERO;
+        BigDecimal totalWorkTime = BigDecimal.ZERO; //计算总工时
+        int size = pmWorkReport.getWorkContents().size();
+        for (int p = 0; p < size; p++) {
+            for (int q = p + 1; q < size; q++) {
+                if (pmWorkReport.getWorkContents().get(p).getProjectId() == pmWorkReport.getWorkContents().get(q).getProjectId()) {
+                    throw new BusinessException("存在重复项目,请检查!");
+                }
+            }
+        }
         for (PmWorkContent a : pmWorkReport.getWorkContents()) {
             totalWorkTime = totalWorkTime.add(a.getWorkTime());
         }
@@ -206,7 +211,7 @@ public class PmWorkReportServiceImpl extends AbstractCrudService<PmWorkReportMap
             rp.setId(pmWorkReport.getId());
             rp.setReportDate(pmWorkReport.getReportDate());
             rp.setSubmitterId(pmWorkReport.getSubmitterId());
-            rp.setSubmitDate(pmWorkReport.getSubmitDate());
+            rp.setSubmitDate(LocalDateTime.now());
             rp.setCcTo(pmWorkReport.getCcTo());
             rp.setCoordinateWork(pmWorkReport.getCoordinateWork());
             rp.setTomorrowPlan(pmWorkReport.getTomorrowPlan());
@@ -221,13 +226,14 @@ public class PmWorkReportServiceImpl extends AbstractCrudService<PmWorkReportMap
             pmWorkReportMapper.updateById(rp);
 
             LambdaQueryWrapper<PmWorkContent> queryWrapper = Wrappers.lambdaQuery();
-            queryWrapper.select(PmWorkContent::getSubmitterId, PmWorkContent::getCreateBy, PmWorkContent::getCreateTime, PmWorkContent::getDeptId, PmWorkContent::getTenantId)
+            queryWrapper.select(PmWorkContent::getReportId, PmWorkContent::getSubmitterId, PmWorkContent::getCreateBy, PmWorkContent::getCreateTime, PmWorkContent::getDeptId, PmWorkContent::getTenantId)
                     .eq(PmWorkContent::getReportId, pmWorkReport.getId())
                     .last("LIMIT 1");
             PmWorkContent f = pmWorkContentMapper.selectOne(queryWrapper);
             pmWorkContentService.deleteContent(pmWorkReport.getId());
             List<PmWorkContent> contents = pmWorkReport.getWorkContents();
             for (PmWorkContent e : contents) {
+                e.setReportId(f.getReportId());
                 e.setUpdateBy(SecurityUtils.getUsername());
                 e.setUpdateTime(LocalDateTime.now());
                 e.setSubmitterId(f.getSubmitterId());
@@ -239,4 +245,69 @@ public class PmWorkReportServiceImpl extends AbstractCrudService<PmWorkReportMap
             }
         }
     }
+
+    @Override
+    public List<Map<String, Object>> countTime() {
+        int scale = 2;
+        RoundingMode roundingMode = RoundingMode.HALF_UP;
+        List<Map<String, Object>> returnList = new ArrayList<>();
+        Map<String, Object> weekTotalMap = new HashMap<>();
+        Map<String, Object> monthTotalMap = new HashMap<>();
+        Map<String, Object> weekMap = new HashMap<>();
+        Map<String, Object> monthMap = new HashMap<>();
+        List<PmProjectWorkTimeVo> returnListW = new ArrayList<>();
+        List<PmProjectWorkTimeVo> returnListM = new ArrayList<>();
+        LocalDate today = LocalDate.now();
+        LocalDate startOfWeek = today.with(TemporalAdjusters.previousOrSame(java.time.DayOfWeek.MONDAY));
+        LocalDate endOfWeek = today.with(TemporalAdjusters.nextOrSame(java.time.DayOfWeek.SUNDAY));
+        LocalDate startOfMonth = today.withDayOfMonth(1);
+        LocalDate endOfMonth = today.withDayOfMonth(today.lengthOfMonth());
+        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);
+        }
+        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());
+        }
+        for (int a = 0; a < week.size(); a++) {
+            PmProjectWorkTimeVo workTimeVo = new PmProjectWorkTimeVo();
+            workTimeVo.setProjectName(week.get(a).getProjectName());
+            workTimeVo.setWorkTime(week.get(a).getWorkTime());
+            workTimeVo.setPercentage(week.get(a).getWorkTime().divide(weekTotal, scale, roundingMode));
+            returnListW.add(workTimeVo);
+        }
+        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));
+            returnListM.add(workTimeVo);
+        }
+        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);
+        returnList.add(monthMap);
+        return returnList;
+    }
 }

+ 29 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/vo/PmProjectWorkTimeVo.java

@@ -0,0 +1,29 @@
+package com.usky.iot.service.vo;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * @description:TODO
+ * @author: fu
+ * @create: 2024-05-30 16:40
+ */
+@Data
+public class PmProjectWorkTimeVo {
+    /**
+     * 项目名
+     */
+    private String projectName;
+
+    /**
+     * 项目工时
+     */
+    private BigDecimal workTime;
+
+    /**
+     * 项目工时占比
+     */
+    private BigDecimal percentage;
+}
+