Przeglądaj źródła

项目公开私有字段添加、报告附件上传、工时统计数据权以及部分代码优化

fuyuchuan 5 miesięcy temu
rodzic
commit
eed7a79ec6
15 zmienionych plików z 84 dodań i 38 usunięć
  1. 3 2
      service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/web/PmProjectController.java
  2. 4 3
      service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/web/PmWorkContentController.java
  3. 5 4
      service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/web/PmWorkReportController.java
  4. 5 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/domain/PmProject.java
  5. 10 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/domain/PmWorkReport.java
  6. 1 1
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/PmProjectService.java
  7. 1 1
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/PmWorkContentService.java
  8. 1 1
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/PmWorkReportService.java
  9. 2 2
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/config/DingTalkAndMessage.java
  10. 26 8
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/PmProjectServiceImpl.java
  11. 6 7
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/PmWorkContentServiceImpl.java
  12. 15 9
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/PmWorkReportServiceImpl.java
  13. 1 0
      service-iot/service-iot-biz/src/main/resources/mapper/iot/PmProjectMapper.xml
  14. 2 0
      service-iot/service-iot-biz/src/main/resources/mapper/iot/PmWorkContentMapper.xml
  15. 2 0
      service-iot/service-iot-biz/src/main/resources/mapper/iot/PmWorkReportMapper.xml

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

@@ -60,8 +60,9 @@ public class PmProjectController {
                                                      @RequestParam(value = "projectAscription", required = false, defaultValue = "0") Integer projectAscription,
                                                      @RequestParam(value = "pageNum", required = false, defaultValue = "1") Integer pageNum,
                                                      @RequestParam(value = "pageSize", required = false, defaultValue = "10") Integer pageSize,
-                                                     @RequestParam(value = "projectId", required = false) Integer projectId) {
-        return ApiResult.success(pmProjectService.projectList(projectName, projectType, projectStatus, projectAscription, pageNum, pageSize, projectId));
+                                                     @RequestParam(value = "projectId", required = false) Integer projectId,
+                                                     @RequestParam(value = "visibleRange", required = false) Byte visibleRange) {
+        return ApiResult.success(pmProjectService.projectList(projectName, projectType, projectStatus, projectAscription, pageNum, pageSize, projectId, visibleRange));
     }
 
     /**

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

@@ -88,8 +88,9 @@ public class PmWorkContentController {
                                                     @RequestParam(value = "reportId", required = false) Integer reportId,
                                                     @RequestParam(value = "startDate", required = false) String startDate,
                                                     @RequestParam(value = "endDate", required = false) String endDate,
-                                                    @RequestParam(value = "projectId", required = false) Integer projectId) {
-        return ApiResult.success(pmWorkContentService.reportPage(projectAscription, pageNum, pageSize, reportId, startDate, endDate, projectId));
+                                                    @RequestParam(value = "projectId", required = false) Integer projectId,
+                                                    @RequestParam(value = "userId", required = false) Long userId) {
+        return ApiResult.success(pmWorkContentService.reportPage(projectAscription, pageNum, pageSize, reportId, startDate, endDate, projectId, userId));
     }
 
     /**
@@ -127,7 +128,7 @@ public class PmWorkContentController {
      * @param endDate
      * @throws IOException
      */
-    @Log(title = "工时统计", businessType = BusinessType.EXPORT)
+    @Log(title = "导出工时明细", businessType = BusinessType.EXPORT)
     @PostMapping("/workHourStatisticExport")
     public void export(HttpServletResponse response,
                        @RequestParam(value = "userId", required = false) Long userId,

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

@@ -3,6 +3,8 @@ package com.usky.iot.controller.web;
 
 import com.aliyuncs.exceptions.ClientException;
 import com.usky.common.core.bean.ApiResult;
+import com.usky.common.log.annotation.Log;
+import com.usky.common.log.enums.BusinessType;
 import com.usky.iot.domain.PmWorkReport;
 import com.usky.iot.service.PmWorkReportService;
 import com.usky.iot.service.config.DingTalkAndMessage;
@@ -29,9 +31,6 @@ public class PmWorkReportController {
     @Autowired
     private PmWorkReportService pmWorkReportService;
 
-    @Autowired
-    private DingTalkAndMessage dingTalkAndMessage;
-
     /**
      * 周工作报告查询
      *
@@ -52,8 +51,9 @@ public class PmWorkReportController {
      *
      * @param
      */
+    @Log(title = "添加工作报告", businessType = BusinessType.INSERT)
     @PostMapping("/add")
-    public void add(@RequestBody PmWorkReport pmWorkReport)  throws ClientException {
+    public void add(@RequestBody PmWorkReport pmWorkReport) {
         pmWorkReportService.addReport(pmWorkReport);
     }
 
@@ -91,6 +91,7 @@ public class PmWorkReportController {
      *
      * @param reportId 报告id
      */
+    @Log(title = "删除工作报告", businessType = BusinessType.DELETE)
     @DeleteMapping("/del/{reportId}")
     public void del(@PathVariable("reportId") Integer reportId) {
         pmWorkReportService.deleteContent(reportId);

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

@@ -114,4 +114,9 @@ public class PmProject implements Serializable {
      */
     @TableField(exist = false)
     private Long submissions;
+
+    /**
+     * 项目可见范围(1:公开;2:私有,指定人(创建人、负责人、项目成员)可见)
+     */
+    private Byte visibleRange;
 }

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

@@ -147,4 +147,14 @@ public class PmWorkReport implements Serializable {
     @TableField(exist = false)
     private String avatar;
 
+    /**
+     * 报告附件
+     */
+    private String reportFile;
+
+    /**
+     * 报告图片
+     */
+    private String reportImage;
+
 }

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

@@ -54,7 +54,7 @@ public interface PmProjectService extends CrudService<PmProject> {
      * @param pageSize          页大小
      * @return
      */
-    CommonPage<PmProject> projectList(String projectName, Integer projectType, Integer projectStatus, Integer projectAscription, Integer pageNum, Integer pageSize, Integer projectId);
+    CommonPage<PmProject> projectList(String projectName, Integer projectType, Integer projectStatus, Integer projectAscription, Integer pageNum, Integer pageSize, Integer projectId, Byte visibleRange);
 
     /**
      * 查询项目名

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

@@ -66,7 +66,7 @@ public interface PmWorkContentService extends CrudService<PmWorkContent> {
      * @param pageSize 页大小
      * @return
      */
-    CommonPage<PmWorkReport> reportPage(Integer projectAscription, Integer pageNum, Integer pageSize, Integer report, String startDate, String endDate, Integer projectId);
+    CommonPage<PmWorkReport> reportPage(Integer projectAscription, Integer pageNum, Integer pageSize, Integer report, String startDate, String endDate, Integer projectId, Long userId);
 
     /** 工时统计页面
      * @param userId          用户id

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

@@ -33,7 +33,7 @@ public interface PmWorkReportService extends CrudService<PmWorkReport> {
      * 新增、编辑工作报告
      * @param pmWorkReport 工作报告
      */
-    void addReport(PmWorkReport pmWorkReport)  throws ClientException;
+    void addReport(PmWorkReport pmWorkReport);
 
     /**
      * 工时计算

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

@@ -308,7 +308,7 @@ public class DingTalkAndMessage {
         log.info(username + "的工作报告开始发送消息中心-----------------------------------");
         List<Long> userId = new ArrayList<>();
         if (!newReport.getCcTo().isEmpty()) {
-            userId = Optional.ofNullable(newReport.getCcTo())
+            userId = Optional.of(newReport.getCcTo())
                     .map(ccTo -> Arrays.stream(ccTo.split(","))
                             .map(Long::parseLong)
                             .collect(Collectors.toList()))
@@ -325,7 +325,7 @@ public class DingTalkAndMessage {
         jsonObject.put("id", newReport.getId());
         jsonObject.put("infoTypeName", INFO_TITLE);
         jsonObject.put("userName", newReport.getCreateBy());
-        if (userId != null && !userId.isEmpty()) {
+        if (!userId.isEmpty()) {
             jsonObject.put("userIds", userId);
         }
         try {

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

@@ -66,6 +66,23 @@ public class PmProjectServiceImpl extends AbstractCrudService<PmProjectMapper, P
         String userName = SecurityUtils.getUsername();
         Integer tenantId = SecurityUtils.getTenantId();
         LocalDateTime now = LocalDateTime.now();
+
+        if (project.getVisibleRange() == null){
+            project.setVisibleRange((byte) 1);
+        }
+
+        if (Objects.isNull(project.getId())) {
+            String projectName = project.getProjectName();
+            LambdaQueryWrapper<PmProject> wrapper = Wrappers.lambdaQuery();
+            wrapper.eq(PmProject::getProjectName, projectName)
+                    .eq(PmProject::getTenantId, tenantId)
+                    .eq(PmProject::getDelFlag, 0);
+            PmProject pmProject = pmProjectMapper.selectOne(wrapper);
+            if (Objects.nonNull(pmProject)) {
+                throw new BusinessException("已存在同名项目!请检查后重试");
+            }
+        }
+
         if (Objects.isNull(project.getProjectWorkload())) {
             if (Objects.isNull(project.getId())) {
                 project.setCreateBy(userName);
@@ -79,10 +96,10 @@ public class PmProjectServiceImpl extends AbstractCrudService<PmProjectMapper, P
                 this.updateById(project);
             }
         } else {
-            if (project.getProjectWorkload().scale() > 2) {
-                throw new BusinessException("计划人/天小数位超出长度请重新输入");
+            if (project.getProjectWorkload().scale() > 1) {
+                throw new BusinessException("计划人/天小数位超出长度请重新输入");
             } else if (project.getProjectWorkload().precision() - project.getProjectWorkload().scale() > 4) {
-                throw new BusinessException("计划人/天整数位超出长度请重新输入");
+                throw new BusinessException("计划人/天整数位超出长度请重新输入");
             } else {
                 if (Objects.isNull(project.getId())) {
                     project.setCreateBy(userName);
@@ -187,14 +204,15 @@ public class PmProjectServiceImpl extends AbstractCrudService<PmProjectMapper, P
      * @return
      */
     @Override
-    public CommonPage<PmProject> projectList(String projectName, Integer projectType, Integer projectStatus, Integer projectAscription, Integer pageNum, Integer pageSize, Integer projectId) {
+    public CommonPage<PmProject> projectList(String projectName, Integer projectType, Integer projectStatus, Integer projectAscription, Integer pageNum, Integer pageSize, Integer projectId, Byte visibleRange) {
         IPage<PmProject> page = new Page<>(pageNum, pageSize);
         Long userId = SecurityUtils.getUserId();
         String username = SecurityUtils.getUsername();
         String nickName = SecurityUtils.getLoginUser().getSysUser().getNickName();
         Integer tenantId = SecurityUtils.getTenantId();
         LambdaQueryWrapper<PmProject> lambdaQuery = Wrappers.lambdaQuery();
-        lambdaQuery.eq(PmProject::getTenantId, SecurityUtils.getTenantId()).eq(PmProject::getDelFlag, 0);
+        lambdaQuery.eq(PmProject::getTenantId, SecurityUtils.getTenantId()).eq(PmProject::getDelFlag, 0)
+                .eq(visibleRange != null, PmProject::getVisibleRange, visibleRange);
         if (projectId != null && projectId != 0) {
             lambdaQuery.eq(PmProject::getId, projectId);
             page = this.page(page, lambdaQuery);
@@ -202,9 +220,9 @@ public class PmProjectServiceImpl extends AbstractCrudService<PmProjectMapper, P
         }
         switch (projectAscription) {
             case 0:
-/*                lambdaQuery.and(q -> q.eq(PmProject::getProjectHead, userId)
-                        .or().apply(FIND_IN_SET_SQL, userId)
-                        .or().eq(PmProject::getCreateBy, username));*/
+                lambdaQuery.and(q -> q.eq(PmProject::getProjectHead, userId)
+                        .or().apply("FIND_IN_SET('" + SecurityUtils.getUserId() + "', project_member) > 0")
+                        .or().eq(PmProject::getCreateBy, username));
                 break;
             case 1:
                 lambdaQuery.eq(PmProject::getProjectHead, userId);

+ 6 - 7
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/PmWorkContentServiceImpl.java

@@ -676,13 +676,11 @@ public class PmWorkContentServiceImpl extends AbstractCrudService<PmWorkContentM
         return pmProjectMapper.selectList(projectsQuery);
     }
 
-    @DataScope
+
     private List<SysUser> userNameList(Long userId) {
-        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)
+                        SysUser::getSex, SysUser::getDeptId, SysUser::getAddress)
                 .eq(SysUser::getDelFlag, 0)
                 .eq(SysUser::getStatus, 0);
         if (userId != null && userId != 0) {
@@ -702,7 +700,7 @@ public class PmWorkContentServiceImpl extends AbstractCrudService<PmWorkContentM
      * @param: [startDate, endDate, projectName, projectAscription]
      * @return: java.util.List<com.usky.iot.domain.PmWorkReport>
      **/
-    @DataScope//数据权限注解
+    //@DataScope//数据权限注解
     private List<PmWorkContent> workTimeCount(List<Long> users, List<Integer> project, String startDate, String endDate) {
         List<PmWorkContent> pmWorkContentList = new ArrayList<>();
         Integer tenantId = SecurityUtils.getTenantId();
@@ -727,7 +725,7 @@ public class PmWorkContentServiceImpl extends AbstractCrudService<PmWorkContentM
                 return pmWorkContentList;
             }
         }
-        workTimeQuery.apply(DataScopeContextHolder.getDataScopeSql());// 数据权限设置
+        //workTimeQuery.apply(DataScopeContextHolder.getDataScopeSql());// 数据权限设置
         pmWorkContentList = pmWorkContentMapper.selectList(workTimeQuery);
 
         Map<String, PmWorkContent> workTimeMap = new HashMap<>();
@@ -744,7 +742,7 @@ public class PmWorkContentServiceImpl extends AbstractCrudService<PmWorkContentM
         return new ArrayList<>(workTimeMap.values());
     }
 
-
+    @DataScope
     @Override
     public List<Object> workHourStatistic(Long userId, Integer projectId, Integer filter, String startDate, String endDate, Integer workerOrProject) {
         List<ProjectWorkTimeVO> projectWorkTime = new ArrayList<>();
@@ -884,6 +882,7 @@ public class PmWorkContentServiceImpl extends AbstractCrudService<PmWorkContentM
         return returnList;
 }
 
+@DataScope
 @Override
 public List<WorkTimeExportVO> workHourStatisticExport(Long userId, Integer projectId, String startDate, String endDate) {
     Integer tenantId = SecurityUtils.getTenantId();

+ 15 - 9
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/PmWorkReportServiceImpl.java

@@ -201,7 +201,7 @@ public class PmWorkReportServiceImpl extends AbstractCrudService<PmWorkReportMap
      */
     @Transactional
     @Override
-    public void addReport(PmWorkReport pmWorkReport) throws ClientException {
+    public void addReport(PmWorkReport pmWorkReport) {
         Long deptId = SecurityUtils.getLoginUser().getSysUser().getDeptId();
         String userName = SecurityUtils.getUsername();
         Long userId = SecurityUtils.getUserId();
@@ -222,9 +222,12 @@ public class PmWorkReportServiceImpl extends AbstractCrudService<PmWorkReportMap
                 // 单个工时大于零
                 if (workTime == null) {
                     throw new BusinessException("工时不能为空,请检查!");
-                }
-                if (workTime.compareTo(BigDecimal.ZERO) <= 0) {
+                } else if (workTime.compareTo(BigDecimal.ZERO) <= 0) {
                     throw new BusinessException("工时必须大于零!");
+                } else if (workTime.scale() > 1) {
+                    throw new BusinessException("工时小数位超出长度,请重新输入!");
+                } else if (workTime.precision() - workTime.scale() > 3) {
+                    throw new BusinessException("工时整数位超出长度,请重新输入!");
                 }
 
                 String workContent1 = workContent.getWorkContent();
@@ -248,9 +251,6 @@ public class PmWorkReportServiceImpl extends AbstractCrudService<PmWorkReportMap
         if (totalWorkTime.compareTo(maxWorkTimePerDay) >= 0) {
             throw new BusinessException("一天24小时都不够你用,请检查当日总工时!");
         }
-        if (totalWorkTime.compareTo(BigDecimal.ZERO) <= 0) {
-            throw new BusinessException("工时必须大于零!");
-        }
 
         // 判断是否携带reportId,不写带则为新增报告,携带则为编辑(更新)项目
         if (rid == null) {
@@ -267,6 +267,8 @@ public class PmWorkReportServiceImpl extends AbstractCrudService<PmWorkReportMap
             newReport.setTenantId(tenantId);
             newReport.setTotalHours(totalWorkTime);
             newReport.setSendDingTalk(pmWorkReport.getSendDingTalk());
+            newReport.setReportFile(pmWorkReport.getReportFile());
+            newReport.setReportImage(pmWorkReport.getReportImage());
             if (pmWorkReport.getIsRegularlySend() == 1 && timingTime != null) {
                 if (timingTime.isAfter(currentTimePlusMinutes)) {
                     newReport.setIsRegularlySend(pmWorkReport.getIsRegularlySend());
@@ -352,6 +354,8 @@ public class PmWorkReportServiceImpl extends AbstractCrudService<PmWorkReportMap
             rp.setUpdateTime(dateTime);
             rp.setTotalHours(totalWorkTime);
             rp.setIsRegularlySend(pmWorkReport.getIsRegularlySend());
+            rp.setReportFile(pmWorkReport.getReportFile());
+            rp.setReportImage(pmWorkReport.getReportImage());
             if (pmWorkReport.getReportStatus().equals(0) && pmWorkReport.getIsRegularlySend().equals(1)) {
                 if (timingTime != null && timingTime.isAfter(currentTimePlusMinutes)) {
                     rp.setTimingTime(timingTime);
@@ -382,12 +386,14 @@ public class PmWorkReportServiceImpl extends AbstractCrudService<PmWorkReportMap
                 pmWorkContentMapper.insert(e);
                 contentsList.add(e);
             }
-            if (pmWorkReport.getIsRegularlySend() == 0) {
-                receiveMessages(ccTo, rid);
+            if (pmWorkReport.getIsRegularlySend().equals(0)) {
                 rp.setTimingTime(null);
                 rp.setReportStatus(1);
                 pmWorkReportMapper.updateById(rp);
+                receiveMessages(ccTo, rid);
+                dingTalkAndMessage.sendAsyncMessage(rp);
             }
+
         }
     }
 
@@ -638,7 +644,7 @@ public class PmWorkReportServiceImpl extends AbstractCrudService<PmWorkReportMap
                 .orderByAsc(PmWorkReport::getReportDate);
         List<PmWorkReport> timedReports = pmWorkReportMapper.selectList(reports);
 
-        if (timedReports.isEmpty()){
+        if (timedReports.isEmpty()) {
             return timedReports;
         }
         List<Integer> reportIds = timedReports.stream().map(PmWorkReport::getId).collect(Collectors.toList());

+ 1 - 0
service-iot/service-iot-biz/src/main/resources/mapper/iot/PmProjectMapper.xml

@@ -21,6 +21,7 @@
         <result column="dept_id" property="deptId" />
         <result column="tenant_id" property="tenantId" />
         <result column="del_flag" property="delFlag" />
+        <result column="visible_range" property="visibleRange" />
     </resultMap>
 
 </mapper>

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

@@ -71,6 +71,8 @@
         <if test="startTime != null and startTime != '' and endTime != null and endTime != ''">
             AND pr.report_date BETWEEN #{startTime} AND #{endTime}
         </if>
+        <!-- 数据范围过滤 -->
+        <!-- ${params.dataScope} -->
         ORDER BY pr.report_date DESC
     </select>
 

+ 2 - 0
service-iot/service-iot-biz/src/main/resources/mapper/iot/PmWorkReportMapper.xml

@@ -22,6 +22,8 @@
         <result column="timing_time" property="timingTime" />
         <result column="report_status" property="reportStatus" />
         <result column="is_regularly_send" property="isRegularlySend" />
+        <result column="report_file" property="reportFile" />
+        <result column="report_image" property="reportImage" />
     </resultMap>
 
 </mapper>