Browse Source

项目管理:工时统计、消息中心推送

fuyuhchuan 9 months ago
parent
commit
02fed09405

+ 7 - 0
service-iot/service-iot-biz/pom.xml

@@ -66,6 +66,13 @@
             <version>0.0.1</version>
             <scope>compile</scope>
         </dependency>
+
+        <dependency>
+            <groupId>com.usky</groupId>
+            <artifactId>service-system-api</artifactId>
+            <version>0.0.1</version>
+        </dependency>
+
         <dependency>
             <groupId>com.github.binarywang</groupId>
             <artifactId>weixin-java-mp</artifactId>

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

@@ -6,9 +6,12 @@ import com.usky.common.core.bean.CommonPage;
 import com.usky.common.security.utils.SecurityUtils;
 import com.usky.iot.domain.PmProject;
 import com.usky.iot.service.PmProjectService;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
+import java.time.LocalDate;
+import java.time.temporal.TemporalAdjusters;
 import java.util.List;
 import java.util.Map;
 
@@ -38,6 +41,7 @@ public class PmProjectController {
 
     /**
      * 分页
+     *
      * @param projectName
      * @param projectType
      * @param projectStatus
@@ -58,6 +62,7 @@ public class PmProjectController {
 
     /**
      * 统计
+     *
      * @return
      */
     @GetMapping("/counting")
@@ -67,22 +72,34 @@ public class PmProjectController {
 
     /**
      * 新增、编辑项目
+     *
      * @param pmProject
      */
     @PostMapping("/add")
-    public void add(@RequestBody PmProject pmProject){
+    public void add(@RequestBody PmProject pmProject) {
         pmProjectService.addProject(pmProject);
     }
 
     /**
      * 删除
+     *
      * @param projectId 项目id
      */
     @GetMapping("/del")
-    public void del(@RequestParam Integer projectId){
+    public void del(@RequestParam Integer projectId) {
         pmProjectService.delProject(projectId);
     }
 
+    /**
+     * 人员、项目下拉
+     *
+     * @param identifying
+     * @return
+     */
+    @GetMapping("/userOrProject")
+    public ApiResult<List<Map<String, Object>>> userOrProject(@RequestParam(value = "identifying", required = false) Integer identifying) {
+        return ApiResult.success(pmProjectService.userOrProject(identifying));
+    }
 
 }
 

+ 6 - 5
service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/web/PmWorkContentController.java

@@ -55,15 +55,16 @@ public class PmWorkContentController {
 
     @GetMapping("/workHourStatistic")
     public ApiResult<List<Object>> workHourStatistic(@RequestParam(value = "userId", required = false) Long userId,
-                                                           @RequestParam(value = "filter", required = false, defaultValue = "1") Integer filter,
-                                                           @RequestParam(value = "startDate", required = false) String startDate,
-                                                           @RequestParam(value = "endDate", required = false) String endDate,
-                                                           @RequestParam(value = "workerOrProject", required = false, defaultValue = "1") Integer workerOrProject) {
+                                                     @RequestParam(value = "projectId", required = false) Integer projectId,
+                                                     @RequestParam(value = "filter", required = false, defaultValue = "1") Integer filter,
+                                                     @RequestParam(value = "startDate", required = false) String startDate,
+                                                     @RequestParam(value = "endDate", required = false) String endDate,
+                                                     @RequestParam(value = "workerOrProject", required = false, defaultValue = "1") Integer workerOrProject) {
         if (StringUtils.isBlank(startDate) || StringUtils.isBlank(endDate)) {
             startDate = LocalDate.now().with(TemporalAdjusters.firstDayOfYear()).toString();
             endDate = LocalDate.now().with(TemporalAdjusters.lastDayOfYear()).toString();
         }
-        return ApiResult.success(pmWorkContentService.workHourStatistic(userId, filter, startDate, endDate, workerOrProject));
+        return ApiResult.success(pmWorkContentService.workHourStatistic(userId, projectId, filter, startDate, endDate, workerOrProject));
     }
 }
 

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

@@ -2,7 +2,9 @@ package com.usky.iot.controller.web;
 
 
 import com.usky.common.core.bean.ApiResult;
+import com.usky.iot.domain.PmProject;
 import com.usky.iot.domain.PmWorkReport;
+import com.usky.iot.service.PmProjectService;
 import com.usky.iot.service.PmWorkReportService;
 import com.usky.iot.service.vo.PmProjectWorkTimeVo;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -28,6 +30,9 @@ public class PmWorkReportController {
     @Autowired
     private PmWorkReportService pmWorkReportService;
 
+    @Autowired
+    private PmProjectService pmProjectService;
+
     /**
      * 周工作报告查询
      *

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

@@ -17,45 +17,70 @@ import java.util.Map;
  */
 public interface PmProjectService extends CrudService<PmProject> {
 
-     /**
-      * 新增、编辑项目
-      * @param project
-      */
-     void addProject(PmProject project);
-
-     /**
-      * 删除
-      * @param projectId 项目id
-      */
-     void delProject(Integer projectId);
-
-
-     List<PmProject> queryProject();
-
-     /**
-      * 分页
-      *
-      * @param projectName       项目名
-      * @param projectType       类型
-      * @param projectStatus     状态
-      * @param projectAscription 项目归属类型
-      * @param pageNum           页码
-      * @param pageSize          页大小
-      * @return
-      */
-     CommonPage<PmProject> projectList(String projectName, Integer projectType, Integer projectStatus, Integer projectAscription, Integer pageNum, Integer pageSize);
-
-     /**
-      * 查询项目名
-      *
-      * @param projectIds
-      * @return
-      */
-     List<PmProject> projectName(List<Integer> projectIds);
-
-     /**
-      * 所有、我负责、我参与项目数量统计
-      * @return
-      */
-     Map<String, Integer> sum();
+    /**
+     * 新增、编辑项目
+     *
+     * @param project
+     */
+    void addProject(PmProject project);
+
+    /**
+     * 删除
+     *
+     * @param projectId 项目id
+     */
+    void delProject(Integer projectId);
+
+
+    List<PmProject> queryProject();
+
+    /**
+     * 分页
+     *
+     * @param projectName       项目名
+     * @param projectType       类型
+     * @param projectStatus     状态
+     * @param projectAscription 项目归属类型
+     * @param pageNum           页码
+     * @param pageSize          页大小
+     * @return
+     */
+    CommonPage<PmProject> projectList(String projectName, Integer projectType, Integer projectStatus, Integer projectAscription, Integer pageNum, Integer pageSize);
+
+    /**
+     * 查询项目名
+     *
+     * @param projectIds
+     * @return
+     */
+    List<PmProject> projectName(List<Integer> projectIds);
+
+    /**
+     * 所有、我负责、我参与项目数量统计
+     *
+     * @return
+     */
+    Map<String, Integer> sum();
+
+    /**
+     * 人员查询(项目负责人、成员)
+     *
+     * @return
+     */
+    List<Map<String, Object>> projectUsers(Long userId);
+
+    /**
+     * 所有项目id和名称
+     *
+     * @return
+     */
+    List<Map<String, Object>> projectIdName(Integer projectId);
+
+    /**
+     * 人员或项目下拉
+     *
+     * @param identifying 标识:1,返回人员userId和nickName;2:返回ProjectId和ProjectName
+     * @return
+     */
+    List<Map<String, Object>> userOrProject(Integer identifying);
 }

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

@@ -44,14 +44,14 @@ public interface PmWorkContentService extends CrudService<PmWorkContent> {
      */
     List<PmWorkReport> workReportQuery(String startDate, String endDate, String projectName, Integer projectAscription);
 
-    /**
+    /** 工时统计页面
      * @param userId          用户id
      * @param filter          是否过滤0工时(默认1:不过滤;2:过滤)
      * @param startDate       开始时间
      * @param endDate         结束时间
-     * @param workerOrProject 打工仔还是项目(默认1:打工仔;2:项目
+     * @param workerOrProject 打工仔还是项目(默认1:项目;2:打工仔
      * @return 返回项目名(或牛马名)以及项目工时
      */
-    List<Object> workHourStatistic(Long userId, Integer filter, String startDate, String endDate, Integer workerOrProject);
+    List<Object> workHourStatistic(Long userId, Integer projectId, Integer filter, String startDate, String endDate, Integer workerOrProject);
 
 }

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

@@ -11,14 +11,19 @@ import com.usky.iot.domain.PmProject;
 import com.usky.iot.domain.PmWorkContent;
 import com.usky.iot.mapper.PmProjectMapper;
 import com.usky.iot.mapper.PmWorkContentMapper;
+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;
 
 /**
  * <p>
@@ -34,6 +39,12 @@ public class PmProjectServiceImpl extends AbstractCrudService<PmProjectMapper, P
     @Autowired
     private PmWorkContentMapper pmWorkContentMapper;
 
+    @Autowired
+    private SysUserMapper sysUserMapper;
+
+    @Autowired
+    private PmProjectMapper pmProjectMapper;
+
     @Override
     public void addProject(PmProject project) {
         if (Objects.isNull(project.getProjectWorkload())) {
@@ -199,4 +210,91 @@ public class PmProjectServiceImpl extends AbstractCrudService<PmProjectMapper, P
         return sumMap;
     }
 
+
+    /**
+     * 查询所有项目负责人、成员和userid(此处逻辑为查询所有项目中的负责人、团队成员然后进行去重)
+     *
+     * @return
+     */
+    @Override
+    public List<Map<String, Object>> projectUsers(Long userId) {
+        List<Map<String, Object>> returnList = new ArrayList<>();
+        List<SysUser> userList = new ArrayList<>();
+        if (userId != null) {
+            LambdaQueryWrapper<SysUser> queryNameId = Wrappers.lambdaQuery();
+            queryNameId.select(SysUser::getUserId,SysUser::getNickName)
+                    .eq(SysUser::getUserId, userId);
+            userList = sysUserMapper.selectList(queryNameId);
+        }else{
+            LambdaQueryWrapper<PmProject> wrapper = Wrappers.lambdaQuery();
+            wrapper.select(PmProject::getProjectHead, PmProject::getProjectMember)
+                    .eq(PmProject::getTenantId, SecurityUtils.getTenantId())
+                    .eq(PmProject::getDelFlag, 0);
+            List<PmProject> users = pmProjectMapper.selectList(wrapper);
+            List<Long> userIds = new ArrayList<>();
+            for (PmProject user : users) {
+                Long projectHead = user.getProjectHead();
+                userIds.add(projectHead);
+                Set<Long> projectMembers = Arrays.stream(user.getProjectMember().split(","))
+                        .map(Long::parseLong)
+                        .collect(Collectors.toSet());
+                userIds.addAll(projectMembers);
+            }
+            List<Long> finalList = userIds.stream().distinct().collect(Collectors.toList());
+            LambdaQueryWrapper<SysUser> wrapper2 = Wrappers.lambdaQuery();
+            wrapper2.select(SysUser::getUserId, SysUser::getNickName)
+                    .in(SysUser::getUserId, finalList);
+            userList = sysUserMapper.selectList(wrapper2);
+        }
+        for (SysUser user : userList) {
+            Map<String, Object> map = new HashMap<>();
+            map.put("id", user.getUserId());
+            map.put("name", user.getNickName());
+            returnList.add(map);
+        }
+        return returnList;
+    }
+
+    /**
+     * 查询所有项目和id
+     *
+     * @return
+     */
+    @Override
+    public List<Map<String, Object>> projectIdName(Integer projectId) {
+        List<Map<String, Object>> returnList = new ArrayList<>();
+        LambdaQueryWrapper<PmProject> wrapper = Wrappers.lambdaQuery();
+        wrapper.select(PmProject::getId, PmProject::getProjectName)
+                .eq(PmProject::getTenantId, SecurityUtils.getTenantId())
+                .eq(PmProject::getDelFlag, 0);
+        if (projectId != null) {
+            wrapper.eq(PmProject::getId, projectId);
+        }
+        List<PmProject> projects = pmProjectMapper.selectList(wrapper);
+        for (PmProject project : projects) {
+            Map<String, Object> returnMap = new HashMap<>();
+            returnMap.put("id", project.getId());
+            returnMap.put("name", project.getProjectName());
+            returnList.add(returnMap);
+        }
+        return returnList;
+    }
+
+    /**
+     * @param identifying 标识:1,返回人员userId和nickName;2:返回ProjectId和ProjectName
+     * @return
+     */
+    @Override
+    public List<Map<String, Object>> userOrProject(Integer identifying) {
+        Integer projectId = null;
+        Long userId = null;
+        List<Map<String, Object>> returnList = new ArrayList<>();
+        if (identifying == 1) {
+            returnList = projectUsers(userId);
+        } else if (identifying == 2) {
+            returnList = projectIdName(projectId);
+        }
+        return returnList;
+    }
+
 }

+ 18 - 17
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/PmWorkContentServiceImpl.java

@@ -11,6 +11,7 @@ import com.usky.iot.mapper.PmProjectMapper;
 import com.usky.iot.mapper.PmWorkContentMapper;
 import com.usky.iot.mapper.PmWorkReportMapper;
 import com.usky.iot.mapper.SysUserMapper;
+import com.usky.iot.service.PmProjectService;
 import com.usky.iot.service.PmWorkContentService;
 import com.usky.common.mybatis.core.AbstractCrudService;
 import com.usky.iot.service.vo.ProjectWorkTimeVO;
@@ -46,6 +47,9 @@ public class PmWorkContentServiceImpl extends AbstractCrudService<PmWorkContentM
     @Autowired
     private PmProjectMapper pmProjectMapper;
 
+    @Autowired
+    private PmProjectService pmProjectService;
+
     @Override
     public void deleteContent(Integer reportId) {
         LambdaQueryWrapper<PmWorkContent> deleteWrapper = Wrappers.lambdaQuery();
@@ -136,7 +140,7 @@ public class PmWorkContentServiceImpl extends AbstractCrudService<PmWorkContentM
     }
 
     @Override
-    public List<Object> workHourStatistic(Long userId, Integer filter, String startDate, String endDate, Integer workerOrProject) {
+    public List<Object> workHourStatistic(Long userId, Integer projectId, Integer filter, String startDate, String endDate, Integer workerOrProject) {
         List<ProjectWorkTimeVO> projectWorkTime = new ArrayList<>();
         List<UserWorkTimeVO> userWorkTimeVO = new ArrayList<>();
         Integer tenantId = SecurityUtils.getTenantId();
@@ -144,27 +148,24 @@ public class PmWorkContentServiceImpl extends AbstractCrudService<PmWorkContentM
         LocalDate start = LocalDate.parse(startDate);
         LocalDate end = LocalDate.parse(endDate);
         //找出租户下所有项目
-        LambdaQueryWrapper<PmProject> projectQuery = Wrappers.lambdaQuery();
-        projectQuery.select(PmProject::getProjectName)
-                .eq(PmProject::getTenantId, SecurityUtils.getTenantId())
-                .orderByAsc(PmProject::getProjectName);
-        List<PmProject> projects = pmProjectMapper.selectList(projectQuery);
-        List<String> pmProjectName = projects.stream()
-                .map(PmProject::getProjectName)
+        List<Map<String, Object>> projectIdName = pmProjectService.projectIdName(projectId);
+        List<String> pmProjectName = projectIdName.stream()
+                .map(map -> (String) map.get("name"))
                 .collect(Collectors.toList());
         //统计userId每个项目所需工时
         List<WorkHoursStatisticsVO> userAndProject = baseMapper.workHoursStatistics(start, end, userId, tenantId);
-        List<String> nickName = userAndProject.stream()
-                .map(WorkHoursStatisticsVO::getNickName)
-                .distinct()
-                .collect(Collectors.toList());
-        if (workerOrProject != 2) {
+        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);
+        }
+        if (workerOrProject != 1) {
             returnList.add(nickName);
             //重组返回数据结构
-            for (PmProject project : projects) {
-                String name = project.getProjectName();
+            for (String name : pmProjectName) {
                 ProjectWorkTimeVO projectWorkTimeVO = new ProjectWorkTimeVO();
-                projectWorkTimeVO.setProjectName(name);
+                projectWorkTimeVO.setProjectOrPerson(name);
                 List<BigDecimal> workTime = new ArrayList<>();
                 boolean hasNonZeroWorkTime = false;
                 for (String currentNickName : nickName) {
@@ -198,7 +199,7 @@ public class PmWorkContentServiceImpl extends AbstractCrudService<PmWorkContentM
             for (String uName : nickName) {
                 String name = uName;
                 UserWorkTimeVO userWorkTimeVO2 = new UserWorkTimeVO();
-                userWorkTimeVO2.setUserNickName(name);
+                userWorkTimeVO2.setProjectOrPerson(name);
                 List<BigDecimal> workTime = new ArrayList<>();
                 boolean hasNonZeroWorkTime = false;
                 for (String currentNickName : pmProjectName) {

+ 22 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/PmWorkReportServiceImpl.java

@@ -1,7 +1,9 @@
 package com.usky.iot.service.impl;
 
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.usky.common.core.bean.ApiResult;
 import com.usky.common.core.exception.BusinessException;
 import com.usky.common.security.utils.SecurityUtils;
 import com.usky.iot.domain.PmProject;
@@ -14,6 +16,7 @@ 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 com.usky.system.RemoteMceService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -24,6 +27,7 @@ import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.temporal.TemporalAdjusters;
 import java.util.*;
+import java.util.stream.Collectors;
 
 
 /**
@@ -49,6 +53,9 @@ public class PmWorkReportServiceImpl extends AbstractCrudService<PmWorkReportMap
     @Autowired
     private PmWorkContentService pmWorkContentService;
 
+    @Autowired
+    private RemoteMceService remoteMceService;
+
     /**
      * 获取时间内工作报告
      *
@@ -224,6 +231,7 @@ public class PmWorkReportServiceImpl extends AbstractCrudService<PmWorkReportMap
             newReport.setTenantId(SecurityUtils.getTenantId());
             newReport.setTotalHours(totalWorkTime);
             pmWorkReportMapper.insert(newReport);
+            Integer id =  newReport.getId();
             //获取报告中所有项目id
             List<Integer> projectIds = new ArrayList<>();
             for (PmWorkContent b1 : pmWorkReport.getWorkContents()) {
@@ -251,6 +259,20 @@ public class PmWorkReportServiceImpl extends AbstractCrudService<PmWorkReportMap
                 newContent.setDeptId(SecurityUtils.getLoginUser().getSysUser().getDeptId());
                 newContent.setTenantId(SecurityUtils.getTenantId());
                 pmWorkContentMapper.insert(newContent);
+                //推送消息中心
+                String infoContent = SecurityUtils.getLoginUser().getSysUser().getNickName() +"的工作报告";
+                String[] strArr = newReport.getCcTo().split(",");
+                List<Long> ids = Arrays.stream(strArr)
+                        .map(Long::parseLong)
+                        .collect(Collectors.toList());
+                JSONObject jsonObject = new JSONObject();
+                jsonObject.put("infoTitle", "工作报告");
+                jsonObject.put("infoContent", infoContent);
+                jsonObject.put("infoType", 5);
+                jsonObject.put("id", id);
+                jsonObject.put("userIds",ids);
+                String jsonStr = jsonObject.toJSONString();
+                remoteMceService.addMce(jsonStr);
             }
         } else {
             PmWorkReport rp = new PmWorkReport();

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

@@ -12,7 +12,7 @@ import java.util.List;
  */
 @Data
 public class ProjectWorkTimeVO {
-    private String projectName;
+    private String ProjectOrPerson;
     private List<BigDecimal> workTime;
 }
 

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

@@ -12,7 +12,7 @@ import java.util.List;
  */
 @Data
 public class UserWorkTimeVO {
-    private String userNickName;
+    private String ProjectOrPerson;
     private List<BigDecimal> workTime;
 }