Browse Source

Merge remote-tracking branch 'origin/dev_project_branch' into dev_temp

master
zxc 5 years ago
parent
commit
bf4bd826f7
  1. 2
      epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/govproject/form/AllProjectFormDTO.java
  2. 18
      epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/govproject/result/AllProjectResultDTO.java
  3. 9
      epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/govproject/result/ProjectInfoDTO.java
  4. 6
      epmet-module/data-aggregator/data-aggregator-server/pom.xml
  5. 4
      epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/controller/GovIssueController.java
  6. 28
      epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/controller/GovProjectController.java
  7. 5
      epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/dao/govproject/ProjectDao.java
  8. 15
      epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/govproject/GovProjectService.java
  9. 125
      epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/govproject/impl/GovProjectServiceImpl.java
  10. 34
      epmet-module/data-aggregator/data-aggregator-server/src/main/resources/mapper/govproject/ProjectDao.xml

2
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<String> gridIdList;
private String agencyId;
}

18
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<ProjectInfoDTO> projectList;
}

9
epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/govproject/form/ProjectInfoDTO.java → 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<String> currentDisposeDept;
@JsonIgnore
private Date startTime;
@JsonIgnore
private Date endTime;
}

6
epmet-module/data-aggregator/data-aggregator-server/pom.xml

@ -59,6 +59,12 @@
<artifactId>epmet-commons-dynamic-datasource</artifactId>
<version>2.0.0</version>
</dependency>
<dependency>
<groupId>com.epmet</groupId>
<artifactId>common-service-client</artifactId>
<version>2.0.0</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.epmet</groupId>
<artifactId>gov-project-client</artifactId>

4
epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/controller/GovIssueController.java

@ -1,8 +1,6 @@
package com.epmet.dataaggre.controller;
import com.epmet.commons.tools.annotation.LoginUser;
import com.epmet.commons.tools.annotation.RequirePermission;
import com.epmet.commons.tools.enums.RequirePermissionEnum;
import com.epmet.commons.tools.security.dto.TokenDto;
import com.epmet.commons.tools.utils.Result;
import com.epmet.commons.tools.validator.ValidatorUtils;
@ -42,7 +40,7 @@ public class GovIssueController {
* @date 2020/12/25 下午2:37
*/
@PostMapping("allissuelist")
@RequirePermission(requirePermission = RequirePermissionEnum.WORK_HOT_ISSUE_ALL)
// @RequirePermission(requirePermission = RequirePermissionEnum.WORK_HOT_ISSUE_ALL)
public Result<AllIssueResultDTO> allIssueList(@RequestBody AllIssueFormDTO formDTO, @LoginUser TokenDto tokenDto){
ValidatorUtils.validateEntity(formDTO, AllIssueFormDTO.AllIssueForm.class);
return new Result<AllIssueResultDTO>().ok(govIssueService.allIssueList(formDTO,tokenDto));

28
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<java.util.List<com.epmet.dataaggre.dto.govproject.result.AllProjectResultDTO>>
*/
@PostMapping("allprojectlist")
public Result<AllProjectResultDTO> allProjectList(@LoginUser TokenDto tokenDto, @RequestBody AllProjectFormDTO formDTO) {
AllProjectResultDTO result = govProjectService.allProjectList(tokenDto, formDTO);
return new Result<AllProjectResultDTO>().ok(result);
}
}

5
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<ProjectEntity> {
List<ProjectInfoDTO> getAllProject(AllProjectFormDTO formDTO);
/**
* @Description 查询项目信息已关闭

15
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<com.epmet.dataaggre.dto.govproject.result.AllProjectResultDTO>
*/
AllProjectResultDTO allProjectList(TokenDto tokenDto, AllProjectFormDTO formDTO);
/**
* @Description 查询项目信息

125
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<IssueListResultDTO> 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<com.epmet.dataaggre.dto.govproject.result.AllProjectResultDTO>
* @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<ProjectInfoDTO> 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<String> 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<TimestampIntervalFormDTO> intervalList = new LinkedList<>();
intervalList.add(interval);
timeParam.setTimeList(intervalList);
Result<Map<String, Integer>> 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("计算首次响应时间失败");
}
}
}

34
epmet-module/data-aggregator/data-aggregator-server/src/main/resources/mapper/govproject/ProjectDao.xml

@ -3,6 +3,40 @@
<mapper namespace="com.epmet.dataaggre.dao.govproject.ProjectDao">
<select id="getAllProject" resultType="com.epmet.dataaggre.dto.govproject.result.ProjectInfoDTO">
SELECT
p.ID AS projectId,
p.TITLE AS projectTitle,
p.`STATUS` AS projectStatus,
unix_timestamp(
date_format( p.CREATED_TIME, '%Y%m%d' )) AS projectTime,
unix_timestamp(
date_format( updateTime, '%Y%m%d' )) AS updateTime,
p.CREATED_TIME AS startTime,
updateTime AS endTime,
departmentCount,
IFNULL( processCount, 0 ) AS processCount,
IFNULL( pp.PUBLIC_REPLY, '' ) AS publicReply
FROM
project p
INNER JOIN ( SELECT PROJECT_ID, GRID_ID FROM project_related_personnel WHERE DEL_FLAG = '0' AND SOURCE_TYPE = 'issue' ) prp ON p.ID = prp.PROJECT_ID
INNER JOIN ( SELECT PROJECT_ID, MAX( CREATED_TIME ) AS updateTime FROM project_process ppro GROUP BY PROJECT_ID ) ppro ON p.ID = ppro.PROJECT_ID
INNER JOIN ( SELECT PROJECT_ID, COUNT( DISTINCT DEPARTMENT_NAME ) AS departmentCount FROM project_staff GROUP BY PROJECT_ID ) ps ON ps.PROJECT_ID = p.ID
LEFT JOIN ( SELECT PROJECT_ID, COUNT( ID ) AS processCount FROM project_process WHERE DEL_FLAG = '0' AND OPERATION != 'created' GROUP BY PROJECT_ID ) ppc ON ppc.PROJECT_ID = p.ID
LEFT JOIN project_process pp ON p.ID = pp.PROJECT_ID
AND pp.OPERATION = 'close'
WHERE
p.DEL_FLAG = '0'
AND p.ORG_ID_PATH LIKE concat('%', #{agencyId}, '%')
<if test="gridIdList != null and gridIdList.size() > 0">
<foreach collection="gridIdList" item="gridId" open="AND (" close=" )" separator=" OR ">
prp.GRID_ID = #{gridId}
</foreach>
</if>
<if test="projectStatus != null and projectStatus != ''">
AND p.`STATUS` = #{projectStatus}
</if>
</select>
<!-- 查询项目信息 -->
<select id="selectProjectInfoClosed" resultType="com.epmet.dataaggre.dto.govissue.result.IssueListResultDTO">
SELECT

Loading…
Cancel
Save