From e7996dd5636cd144277944328792abce8e0d5fda Mon Sep 17 00:00:00 2001 From: zhaoqifeng Date: Tue, 29 Dec 2020 13:40:44 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E5=85=A8=E9=83=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../govproject/form/AllProjectFormDTO.java | 2 + .../result/AllProjectResultDTO.java | 18 +++ .../{form => result}/ProjectInfoDTO.java | 9 +- .../data-aggregator-server/pom.xml | 6 + .../controller/GovProjectController.java | 28 ++++ .../dataaggre/dao/govproject/ProjectDao.java | 5 + .../service/govproject/GovProjectService.java | 15 +++ .../impl/GovProjectServiceImpl.java | 125 +++++++++++++++++- .../mapper/govproject/ProjectDao.xml | 34 +++++ 9 files changed, 234 insertions(+), 8 deletions(-) create mode 100644 epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/govproject/result/AllProjectResultDTO.java rename epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/govproject/{form => result}/ProjectInfoDTO.java (82%) diff --git a/epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/govproject/form/AllProjectFormDTO.java b/epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/govproject/form/AllProjectFormDTO.java index adf0a48b62..7ddd901d11 100644 --- a/epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/govproject/form/AllProjectFormDTO.java +++ b/epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/govproject/form/AllProjectFormDTO.java @@ -36,4 +36,6 @@ public class AllProjectFormDTO implements Serializable { * 网格ID集合 */ private List gridIdList; + + private String agencyId; } diff --git a/epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/govproject/result/AllProjectResultDTO.java b/epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/govproject/result/AllProjectResultDTO.java new file mode 100644 index 0000000000..3df14e2e75 --- /dev/null +++ b/epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/govproject/result/AllProjectResultDTO.java @@ -0,0 +1,18 @@ +package com.epmet.dataaggre.dto.govproject.result; + +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + +/** + * @author zhaoqifeng + * @dscription + * @date 2020/12/25 15:38 + */ +@Data +public class AllProjectResultDTO implements Serializable { + private static final long serialVersionUID = 6188316867855643263L; + private Integer projectCount; + private List projectList; +} diff --git a/epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/govproject/form/ProjectInfoDTO.java b/epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/govproject/result/ProjectInfoDTO.java similarity index 82% rename from epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/govproject/form/ProjectInfoDTO.java rename to epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/govproject/result/ProjectInfoDTO.java index 80665dfeae..e38cbf7bb4 100644 --- a/epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/govproject/form/ProjectInfoDTO.java +++ b/epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/govproject/result/ProjectInfoDTO.java @@ -1,9 +1,11 @@ -package com.epmet.dataaggre.dto.govproject.form; +package com.epmet.dataaggre.dto.govproject.result; +import com.fasterxml.jackson.annotation.JsonIgnore; import lombok.Data; import lombok.NoArgsConstructor; import java.io.Serializable; +import java.util.Date; import java.util.List; /** @@ -56,4 +58,9 @@ public class ProjectInfoDTO implements Serializable { * 当前处理部门 */ private List currentDisposeDept; + + @JsonIgnore + private Date startTime; + @JsonIgnore + private Date endTime; } diff --git a/epmet-module/data-aggregator/data-aggregator-server/pom.xml b/epmet-module/data-aggregator/data-aggregator-server/pom.xml index fadf7e7479..d9ed31a02e 100644 --- a/epmet-module/data-aggregator/data-aggregator-server/pom.xml +++ b/epmet-module/data-aggregator/data-aggregator-server/pom.xml @@ -59,6 +59,12 @@ epmet-commons-dynamic-datasource 2.0.0 + + com.epmet + common-service-client + 2.0.0 + compile + com.epmet gov-project-client diff --git a/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/controller/GovProjectController.java b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/controller/GovProjectController.java index af8900860b..3491ccfdda 100644 --- a/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/controller/GovProjectController.java +++ b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/controller/GovProjectController.java @@ -1,8 +1,19 @@ package com.epmet.dataaggre.controller; +import com.epmet.commons.tools.annotation.LoginUser; +import com.epmet.commons.tools.security.dto.TokenDto; +import com.epmet.commons.tools.utils.Result; +import com.epmet.dataaggre.dto.govproject.form.AllProjectFormDTO; +import com.epmet.dataaggre.dto.govproject.result.AllProjectResultDTO; +import com.epmet.dataaggre.service.govproject.GovProjectService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.List; + /** * @Author zxc * @DateTime 2020/12/25 上午9:45 @@ -10,4 +21,21 @@ import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("project") public class GovProjectController { + + @Autowired + private GovProjectService govProjectService; + + /** + * 全部项目 + * @author zhaoqifeng + * @date 2020/12/25 16:00 + * @param tokenDto token + * @param formDTO 入参 + * @return com.epmet.commons.tools.utils.Result> + */ + @PostMapping("allprojectlist") + public Result allProjectList(@LoginUser TokenDto tokenDto, @RequestBody AllProjectFormDTO formDTO) { + AllProjectResultDTO result = govProjectService.allProjectList(tokenDto, formDTO); + return new Result().ok(result); + } } diff --git a/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/dao/govproject/ProjectDao.java b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/dao/govproject/ProjectDao.java index 516f1481c1..7b0ae9a6fe 100644 --- a/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/dao/govproject/ProjectDao.java +++ b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/dao/govproject/ProjectDao.java @@ -18,6 +18,8 @@ package com.epmet.dataaggre.dao.govproject; import com.epmet.commons.mybatis.dao.BaseDao; +import com.epmet.dataaggre.dto.govproject.form.AllProjectFormDTO; +import com.epmet.dataaggre.dto.govproject.result.ProjectInfoDTO; import com.epmet.dataaggre.dto.govissue.result.IssueListResultDTO; import com.epmet.dataaggre.dto.govproject.ProjectDTO; import com.epmet.dataaggre.entity.govproject.ProjectEntity; @@ -26,6 +28,8 @@ import org.apache.ibatis.annotations.Param; import java.util.List; +import java.util.List; + /** * 项目表 * @@ -34,6 +38,7 @@ import java.util.List; */ @Mapper public interface ProjectDao extends BaseDao { + List getAllProject(AllProjectFormDTO formDTO); /** * @Description 查询项目信息【已关闭】 diff --git a/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/govproject/GovProjectService.java b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/govproject/GovProjectService.java index f08e76d866..ecfdfed1cb 100644 --- a/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/govproject/GovProjectService.java +++ b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/govproject/GovProjectService.java @@ -1,5 +1,11 @@ package com.epmet.dataaggre.service.govproject; +import com.epmet.commons.tools.security.dto.TokenDto; +import com.epmet.dataaggre.dto.govproject.form.AllProjectFormDTO; +import com.epmet.dataaggre.dto.govproject.result.AllProjectResultDTO; + +import java.util.List; + import com.epmet.dataaggre.dto.govissue.result.IssueListResultDTO; import com.epmet.dataaggre.dto.govproject.result.ShiftProjectResultDTO; @@ -10,6 +16,15 @@ import java.util.List; * @DateTime 2020/12/24 下午5:50 */ public interface GovProjectService { + /** + * 全部项目 + * @author zhaoqifeng + * @date 2020/12/25 15:59 + * @param tokenDto token + * @param formDTO 入参 + * @return java.util.List + */ + AllProjectResultDTO allProjectList(TokenDto tokenDto, AllProjectFormDTO formDTO); /** * @Description 查询项目信息 diff --git a/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/govproject/impl/GovProjectServiceImpl.java b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/govproject/impl/GovProjectServiceImpl.java index 6d5810894a..8e93c87ca8 100644 --- a/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/govproject/impl/GovProjectServiceImpl.java +++ b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/govproject/impl/GovProjectServiceImpl.java @@ -2,33 +2,50 @@ package com.epmet.dataaggre.service.govproject.impl; import com.epmet.commons.dynamic.datasource.annotation.DataSource; import com.epmet.commons.tools.constant.NumConstant; +import com.epmet.commons.tools.exception.RenException; +import com.epmet.commons.tools.security.dto.TokenDto; import com.epmet.commons.tools.utils.ConvertUtils; +import com.epmet.commons.tools.utils.Result; import com.epmet.dataaggre.constant.DataSourceConstant; +import com.epmet.dataaggre.constant.ProjectConstant; +import com.epmet.dataaggre.dao.govorg.CustomerStaffAgencyDao; import com.epmet.dataaggre.dao.govproject.ProjectDao; import com.epmet.dataaggre.dto.govissue.result.IssueListResultDTO; +import com.epmet.dataaggre.dto.govorg.CustomerStaffAgencyDTO; import com.epmet.dataaggre.dto.govproject.ProjectDTO; +import com.epmet.dataaggre.dto.govproject.form.AllProjectFormDTO; +import com.epmet.dataaggre.dto.govproject.result.AllProjectResultDTO; +import com.epmet.dataaggre.dto.govproject.result.ProjectInfoDTO; import com.epmet.dataaggre.dto.govproject.result.ShiftProjectResultDTO; +import com.epmet.dataaggre.service.govorg.GovOrgService; import com.epmet.dataaggre.service.govproject.GovProjectService; +import com.epmet.dto.form.TimestampIntervalFormDTO; +import com.epmet.dto.form.WorkMinuteFormDTO; +import com.epmet.feign.EpmetCommonServiceOpenFeignClient; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import org.springframework.util.CollectionUtils; -import java.util.ArrayList; -import java.util.Comparator; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.stream.Collectors; /** * @Author zxc * @DateTime 2020/12/24 下午5:50 */ +@Slf4j @Service @DataSource(DataSourceConstant.GOV_PROJECT) public class GovProjectServiceImpl implements GovProjectService { @Autowired private ProjectDao projectDao; + @Autowired + private GovOrgService govOrgService; + @Autowired + private EpmetCommonServiceOpenFeignClient epmetCommonServiceOpenFeignClient; /** * @Description 查询项目信息 @@ -46,11 +63,15 @@ public class GovProjectServiceImpl implements GovProjectService { // 为关闭项目 List pendingResult = projectDao.selectProjectInfoPending(issueIds); if (CollectionUtils.isEmpty(closedResult)){ - if (CollectionUtils.isEmpty(pendingResult))return new ArrayList<>(); + if (CollectionUtils.isEmpty(pendingResult)) { + return new ArrayList<>(); + } return pendingResult; } if (CollectionUtils.isEmpty(pendingResult)){ - if (CollectionUtils.isEmpty(closedResult))return new ArrayList<>(); + if (CollectionUtils.isEmpty(closedResult)) { + return new ArrayList<>(); + } return closedResult; } closedResult.addAll(pendingResult); @@ -82,4 +103,94 @@ public class GovProjectServiceImpl implements GovProjectService { return resultList; } + + /** + * 全部项目 + * + * @param tokenDto token + * @param formDTO 入参 + * @return java.util.List + * @author zhaoqifeng + * @date 2020/12/25 15:59 + */ + @Override + public AllProjectResultDTO allProjectList(TokenDto tokenDto, AllProjectFormDTO formDTO) { + AllProjectResultDTO resultDTO = new AllProjectResultDTO(); + String agencyId = govOrgService.getAgencyIdByUserId(tokenDto.getUserId()); + int pageIndex = (formDTO.getPageNo() - NumConstant.ONE) * formDTO.getPageSize(); + if (StringUtils.isEmpty(agencyId)) { + throw new RenException(String.format("获取工作人员组织信息失败,staffId->%s", tokenDto.getUserId())); + } + formDTO.setAgencyId(agencyId); + List projectList = projectDao.getAllProject(formDTO); + if (CollectionUtils.isNotEmpty(projectList)) { + resultDTO.setProjectCount(projectList.size()); + projectList.forEach(project -> { + //计算项目耗时 + Integer timeSpent; + if (ProjectConstant.PROJECT_STATUS_CLOSED.equals(project.getProjectStatus())) { + timeSpent = getTimeSpent(project.getProjectId(), project.getStartTime(), project.getEndTime()); + } else { + timeSpent = getTimeSpent(project.getProjectId(), project.getStartTime(), new Date()); + } + project.setTimeSpent(timeSpent); + //获取当前处理部门 + ProjectDTO projectDTO = new ProjectDTO(); + projectDTO.setId(project.getProjectId()); + List departmentList = projectDao.selectDepartmentNameList(projectDTO); + project.setCurrentDisposeDept(departmentList); + + }); + //排序(创建:create 更新:update 部门:department 耗时:date 次数:count) + switch (formDTO.getSortType()) { + case "create": + projectList = projectList.stream().sorted(Comparator.comparing(ProjectInfoDTO::getProjectTime).reversed()) + .collect(Collectors.toList()).subList(pageIndex, pageIndex + formDTO.getPageSize()); + break; + case "update": + projectList = projectList.stream().sorted(Comparator.comparing(ProjectInfoDTO::getUpdateTime).reversed()) + .collect(Collectors.toList()).subList(pageIndex, pageIndex + formDTO.getPageSize()); + break; + case "department": + projectList = projectList.stream().sorted(Comparator.comparing(ProjectInfoDTO::getDepartmentCount).reversed()) + .collect(Collectors.toList()).subList(pageIndex, pageIndex + formDTO.getPageSize()); + break; + case "date": + projectList = projectList.stream().sorted(Comparator.comparing(ProjectInfoDTO::getTimeSpent).reversed()) + .collect(Collectors.toList()).subList(pageIndex, pageIndex + formDTO.getPageSize()); + break; + case "count": + projectList = projectList.stream().sorted(Comparator.comparing(ProjectInfoDTO::getProcessCount).reversed()) + .collect(Collectors.toList()).subList(pageIndex, pageIndex + formDTO.getPageSize()); + break; + default: + break; + } + resultDTO.setProjectList(projectList); + } else { + resultDTO.setProjectCount(NumConstant.ZERO); + resultDTO.setProjectList(Collections.emptyList()); + } + + return resultDTO; + } + + + private Integer getTimeSpent(String id, Date startTime, Date endTime) { + WorkMinuteFormDTO timeParam = new WorkMinuteFormDTO(); + timeParam.setIfPrecise("imprecise"); + timeParam.setIfCustom("default"); + TimestampIntervalFormDTO interval = new TimestampIntervalFormDTO(id, startTime, endTime); + List intervalList = new LinkedList<>(); + intervalList.add(interval); + timeParam.setTimeList(intervalList); + Result> timeResult = epmetCommonServiceOpenFeignClient.workMinutes(timeParam); + + if (timeResult.success() && !org.springframework.util.CollectionUtils.isEmpty(timeResult.getData()) && null != timeResult.getData().get(id)) { + return timeResult.getData().get(id) / 60; + } else { + log.error("计算首次响应时间失败"); + throw new RenException("计算首次响应时间失败"); + } + } } diff --git a/epmet-module/data-aggregator/data-aggregator-server/src/main/resources/mapper/govproject/ProjectDao.xml b/epmet-module/data-aggregator/data-aggregator-server/src/main/resources/mapper/govproject/ProjectDao.xml index 681ce3c429..7d3ccb3dd7 100644 --- a/epmet-module/data-aggregator/data-aggregator-server/src/main/resources/mapper/govproject/ProjectDao.xml +++ b/epmet-module/data-aggregator/data-aggregator-server/src/main/resources/mapper/govproject/ProjectDao.xml @@ -3,6 +3,40 @@ +