Browse Source

基础数据-组织下五项基础数据汇总

master
sunyuchao 5 years ago
parent
commit
3b36db48a3
  1. 29
      epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/datastats/form/AgenctBasicDataFormDTO.java
  2. 96
      epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/datastats/result/AgencyBasicDataResultDTO.java
  3. 21
      epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/controller/DataStatsController.java
  4. 40
      epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/dao/datastats/DataStatsDao.java
  5. 10
      epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/datastats/DataStatsService.java
  6. 94
      epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/datastats/impl/DataStatsServiceImpl.java
  7. 89
      epmet-module/data-aggregator/data-aggregator-server/src/main/resources/mapper/datastats/DatsStatsDao.xml

29
epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/datastats/form/AgenctBasicDataFormDTO.java

@ -0,0 +1,29 @@
package com.epmet.dataaggre.dto.datastats.form;
import com.epmet.commons.tools.validator.group.CustomerClientShowGroup;
import com.epmet.dataaggre.dto.resigroup.form.CandidateListFormDTO;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
/**
* @Description 基础数据-组织各种数据汇总-接口入参
* @Auth sun
*/
@Data
public class AgenctBasicDataFormDTO implements Serializable {
private static final long serialVersionUID = -3381286960911634231L;
/**
* 组织Id
*/
@NotBlank(message = "组织ID不能为空",groups = AgenctBasicDataFormDTO.Agency.class)
private String agencyId;
/**
* 客户Id
*/
private String customerId;
public interface Agency extends CustomerClientShowGroup{}
}

96
epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/datastats/result/AgencyBasicDataResultDTO.java

@ -0,0 +1,96 @@
package com.epmet.dataaggre.dto.datastats.result;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
/**
* @Description 基础数据-组织各种数据汇总-接口返参
* @Auth sun
*/
@Data
public class AgencyBasicDataResultDTO implements Serializable {
private static final long serialVersionUID = 466974582608407121L;
BigDecimal bi = new BigDecimal(0);
/**
* 客户Id
*/
private String customerId;
/**
* 组织Id
*/
private String agencyId;
//用户总数
private Integer userTotal = 0;
//党员总数
private Integer partyMemberTotal = 0;
//党员总数占比
private BigDecimal partyMemberRatio = bi;
//居民总数
private Integer resiTotal = 0;
//居民总数占比
private BigDecimal resiRatio = bi;
//党群小组总数
private Integer groupTotal = 0;
//楼院小组总数
private Integer ordinaryTotal = 0;
//楼院小组总数占比
private BigDecimal ordinaryRatio = bi;
//支部小组总数
private Integer branchTotal = 0;
//支部小组总数占比
private BigDecimal branchRatio = bi;
//话题总数
private Integer topicTotal = 0;
//热议中总数
private Integer discussingTotal = 0;
//热议中总数占比
private BigDecimal discussingRatio = bi;
//已处理总数
private Integer closedTopicTotal = 0;
//已处理总数占比
private BigDecimal closedTopicRatio = bi;
//转议题总数
private Integer shiftIssueTotal = 0;
//转议题总数占比
private BigDecimal shiftIssueRatio = bi;
//议题总数
private Integer issueTotal = 0;
//表决中总数
private Integer votingTotal = 0;
//表决中总数占比
private BigDecimal votingRatio = bi;
//已处理总数
private Integer closedIssueTotal = 0;
//已处理总数占比
private BigDecimal closedIssueRatio = bi;
//已转项目总数
private Integer shiftProjectTotal = 0;
//已转项目总数占比
private BigDecimal shiftProjectRatio = bi;
//项目总数
private Integer projectTotal = 0;
//处理中总数
private Integer pendingTotal = 0;
//处理中总数占比
private BigDecimal pendingRatio = bi;
//已结案总数
private Integer closedProjectTotal = 0;
//已结案总数占比
private BigDecimal closedProjectRatio = bi;
@Data
public static class Topic implements Serializable {
//话题数量
private Integer topicCount;
//话题状态 已关闭:closed、已屏蔽:hidden、 讨论中:discussing
private String topicStatus;
//话题已转议题数量
private Integer shiftedIssueTotal;
//数据更新至 时间
private String deadline;
}
}

21
epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/controller/DataStatsController.java

@ -1,13 +1,21 @@
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.commons.tools.validator.ValidatorUtils;
import com.epmet.dataaggre.dto.datastats.form.AgenctBasicDataFormDTO;
import com.epmet.dataaggre.dto.datastats.result.AgencyBasicDataResultDTO;
import com.epmet.dataaggre.service.datastats.DataStatsService;
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;
/**
* @Author sun
* @Description 数据统计服务
* @Description 数据统计服务
*/
@RestController
@RequestMapping("datastats")
@ -16,5 +24,16 @@ public class DataStatsController {
@Autowired
private DataStatsService dataStatsService;
/**
* @Param formDTO
* @Description 组织下五项基础数据汇总
* @author sun
*/
@PostMapping("agencybasicdata")
public Result<AgencyBasicDataResultDTO> agencyBasicData(@LoginUser TokenDto tokenDto, @RequestBody AgenctBasicDataFormDTO formDTO) {
ValidatorUtils.validateEntity(formDTO, AgenctBasicDataFormDTO.Agency.class);
formDTO.setCustomerId(tokenDto.getCustomerId());
return new Result<AgencyBasicDataResultDTO>().ok(dataStatsService.agencyBasicData(formDTO));
}
}

40
epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/dao/datastats/DataStatsDao.java

@ -17,7 +17,11 @@
package com.epmet.dataaggre.dao.datastats;
import com.epmet.dataaggre.dto.datastats.result.AgencyBasicDataResultDTO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* @Author sun
@ -26,4 +30,40 @@ import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface DataStatsDao {
/**
* @Description 查询组织下注册用户最新日统计数据
* @author sun
*/
AgencyBasicDataResultDTO getAgnecyRegUser(@Param("agencyId") String agencyId);
/**
* @Description 查询组织下最新群组日统计数据
* @author sun
*/
AgencyBasicDataResultDTO getAgnecyGroup(@Param("agencyId") String agencyId);
/**
* @Description 查询组织下最新状态话题-机关日统计数据表
* @author sun
*/
List<AgencyBasicDataResultDTO.Topic> getAgencyTopic(@Param("agencyId") String agencyId);
/**
* @Description 查询组织下最新转议题话题-机关日统计数据表
* @author sun
*/
AgencyBasicDataResultDTO.Topic getAgencyTopicShiftIssue(@Param("agencyId") String agencyId);
/**
* @Description 查询组织下最新议题日统计数据
* @author sun
*/
AgencyBasicDataResultDTO getAgencyIssue(@Param("agencyId") String agencyId);
/**
* @Description 查询组织下最新项目日统计数据
* @author sun
*/
AgencyBasicDataResultDTO getAgencyProject(@Param("agencyId") String agencyId);
}

10
epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/datastats/DataStatsService.java

@ -1,9 +1,19 @@
package com.epmet.dataaggre.service.datastats;
import com.epmet.dataaggre.dto.datastats.form.AgenctBasicDataFormDTO;
import com.epmet.dataaggre.dto.datastats.result.AgencyBasicDataResultDTO;
/**
* @Author sun
* @Description 数据统计服务
*/
public interface DataStatsService {
/**
* @Param formDTO
* @Description 组织下五项基础数据汇总
* @author sun
*/
AgencyBasicDataResultDTO agencyBasicData(AgenctBasicDataFormDTO formDTO);
}

94
epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/datastats/impl/DataStatsServiceImpl.java

@ -1,16 +1,25 @@
package com.epmet.dataaggre.service.datastats.impl;
import com.epmet.commons.dynamic.datasource.annotation.DataSource;
import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.dataaggre.constant.DataSourceConstant;
import com.epmet.dataaggre.dao.datastats.DataStatsDao;
import com.epmet.dataaggre.dto.datastats.form.AgenctBasicDataFormDTO;
import com.epmet.dataaggre.dto.datastats.result.AgencyBasicDataResultDTO;
import com.epmet.dataaggre.service.datastats.DataStatsService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.text.NumberFormat;
import java.util.List;
import java.util.concurrent.atomic.AtomicReference;
import java.util.stream.Collectors;
/**
* @Author sun
* @Description 数据统计服务
* @Description 数据统计服务
*/
@Service
@DataSource(DataSourceConstant.DATA_STATISTICAL)
@ -19,4 +28,87 @@ public class DataStatsServiceImpl implements DataStatsService {
@Autowired
private DataStatsDao dataStatsDao;
/**
* @Param formDTO
* @Description 组织下五项基础数据汇总
* @author sun
*/
@Override
public AgencyBasicDataResultDTO agencyBasicData(AgenctBasicDataFormDTO formDTO) {
AgencyBasicDataResultDTO resultDTO = new AgencyBasicDataResultDTO();
resultDTO.setCustomerId(formDTO.getCustomerId());
resultDTO.setAgencyId(formDTO.getAgencyId());
NumberFormat numberFormat = NumberFormat.getInstance();
numberFormat.setMaximumFractionDigits(NumConstant.SIX);
//1.查询组织下注册用户最新日统计数据【只查询注册用户的统计数据,不涉及参与用户的】
AgencyBasicDataResultDTO user = dataStatsDao.getAgnecyRegUser(formDTO.getAgencyId());
if (null != user) {
resultDTO.setUserTotal(user.getUserTotal());
resultDTO.setResiTotal(user.getResiTotal());
resultDTO.setResiRatio(user.getResiTotal() == 0 || user.getUserTotal() == 0 ? BigDecimal.ZERO : new BigDecimal(numberFormat.format((float) user.getResiTotal() / (float) user.getUserTotal())));
resultDTO.setPartyMemberTotal(user.getPartyMemberTotal());
resultDTO.setPartyMemberRatio(user.getPartyMemberTotal() == 0 || user.getUserTotal() == 0 ? BigDecimal.ZERO : new BigDecimal(numberFormat.format((float) user.getPartyMemberTotal() / (float) user.getUserTotal())));
}
//2.查询组织下最新群组日统计数据
AgencyBasicDataResultDTO group = dataStatsDao.getAgnecyGroup(formDTO.getAgencyId());
if (null != user) {
resultDTO.setGroupTotal(group.getGroupTotal());
resultDTO.setOrdinaryTotal(group.getOrdinaryTotal());
resultDTO.setOrdinaryRatio(group.getOrdinaryTotal() == 0 || group.getGroupTotal() == 0 ? BigDecimal.ZERO : new BigDecimal(numberFormat.format((float) group.getOrdinaryTotal() / (float) group.getGroupTotal())));
resultDTO.setBranchTotal(group.getBranchTotal());
resultDTO.setBranchRatio(group.getBranchTotal() == 0 || group.getGroupTotal() == 0 ? BigDecimal.ZERO : new BigDecimal(numberFormat.format((float) group.getBranchTotal() / (float) group.getGroupTotal())));
}
//3.查询组织下最新话题日统计数据
//状态话题-机关日统计数据表最新日期三种状态数据
//机关日表里三种类型数据之和就是话题总量,讨论中数量与热议中不是一个概念,热议中=总量-关闭数-屏蔽数-转议题数
List<AgencyBasicDataResultDTO.Topic> topic = dataStatsDao.getAgencyTopic(formDTO.getAgencyId());
//转议题话题-机关日统计数据表
AgencyBasicDataResultDTO.Topic topicSHiftIssue = dataStatsDao.getAgencyTopicShiftIssue(formDTO.getAgencyId());
AtomicReference<Integer> closedTotal = new AtomicReference<>(0);
AtomicReference<Integer> hiddenTotal = new AtomicReference<>(0);
if (topic.size()>NumConstant.ZERO) {
resultDTO.setTopicTotal(topic.stream().collect(Collectors.summingInt(AgencyBasicDataResultDTO.Topic::getTopicCount)));
topic.forEach(t -> {
if (t.getTopicStatus().equals("closed")){ closedTotal.set(t.getTopicCount()); }
if (t.getTopicStatus().equals("hidden")){ hiddenTotal.set(t.getTopicCount()); }
});
}
if (null != topicSHiftIssue) {
resultDTO.setShiftIssueTotal(topicSHiftIssue.getShiftedIssueTotal());
resultDTO.setShiftIssueRatio(resultDTO.getShiftIssueTotal() == 0 || resultDTO.getTopicTotal() == 0 ? BigDecimal.ZERO : new BigDecimal(numberFormat.format((float) resultDTO.getShiftIssueTotal() / (float) resultDTO.getTopicTotal())));
}
resultDTO.setDiscussingTotal(resultDTO.getTopicTotal()-closedTotal.get()-hiddenTotal.get()-resultDTO.getShiftIssueTotal());
resultDTO.setDiscussingRatio(resultDTO.getDiscussingTotal() == 0 || resultDTO.getTopicTotal() == 0 ? BigDecimal.ZERO : new BigDecimal(numberFormat.format((float) resultDTO.getDiscussingTotal() / (float) resultDTO.getTopicTotal())));
resultDTO.setClosedTopicTotal(closedTotal.get());
resultDTO.setClosedTopicRatio(resultDTO.getClosedTopicTotal() == 0 || resultDTO.getTopicTotal() == 0 ? BigDecimal.ZERO : new BigDecimal(numberFormat.format((float) resultDTO.getClosedTopicTotal() / (float) resultDTO.getTopicTotal())));
//4.查询组织下最新议题日统计数据
AgencyBasicDataResultDTO issue = dataStatsDao.getAgencyIssue(formDTO.getAgencyId());
if (null != issue) {
resultDTO.setIssueTotal(issue.getIssueTotal());
resultDTO.setVotingTotal(issue.getVotingTotal());
resultDTO.setVotingRatio(resultDTO.getVotingTotal() == 0 || resultDTO.getIssueTotal() == 0 ? BigDecimal.ZERO : new BigDecimal(numberFormat.format((float) resultDTO.getVotingTotal() / (float) resultDTO.getIssueTotal())));
resultDTO.setClosedIssueTotal(issue.getClosedIssueTotal());
resultDTO.setClosedIssueRatio(resultDTO.getClosedIssueTotal() == 0 || resultDTO.getIssueTotal() == 0 ? BigDecimal.ZERO : new BigDecimal(numberFormat.format((float) resultDTO.getClosedIssueTotal() / (float) resultDTO.getIssueTotal())));
resultDTO.setShiftProjectTotal(issue.getShiftProjectTotal());
resultDTO.setShiftProjectRatio(resultDTO.getShiftProjectTotal() == 0 || resultDTO.getIssueTotal() == 0 ? BigDecimal.ZERO : new BigDecimal(numberFormat.format((float) resultDTO.getShiftProjectTotal() / (float) resultDTO.getIssueTotal())));
}
//5.查询组织下最新项目日统计数据
AgencyBasicDataResultDTO project = dataStatsDao.getAgencyProject(formDTO.getAgencyId());
if (null != project) {
resultDTO.setProjectTotal(project.getProjectTotal());
resultDTO.setPendingTotal(project.getPendingTotal());
resultDTO.setPendingRatio(resultDTO.getPendingTotal() == 0 || resultDTO.getProjectTotal() == 0 ? BigDecimal.ZERO : new BigDecimal(numberFormat.format((float) resultDTO.getPendingTotal() / (float) resultDTO.getProjectTotal())));
resultDTO.setClosedProjectTotal(project.getClosedProjectTotal());
resultDTO.setClosedProjectRatio(resultDTO.getClosedProjectTotal() == 0 || resultDTO.getProjectTotal() == 0 ? BigDecimal.ZERO : new BigDecimal(numberFormat.format((float) resultDTO.getClosedProjectTotal() / (float) resultDTO.getProjectTotal())));
}
return resultDTO;
}
}

89
epmet-module/data-aggregator/data-aggregator-server/src/main/resources/mapper/datastats/DatsStatsDao.xml

@ -3,5 +3,94 @@
<mapper namespace="com.epmet.dataaggre.dao.datastats.DataStatsDao">
<select id="getAgnecyRegUser" resultType="com.epmet.dataaggre.dto.datastats.result.AgencyBasicDataResultDTO">
SELECT
reg_total AS userTotal,
partymember_total AS partyMemberTotal,
(reg_total - partymember_total) AS resiTotal
FROM
fact_reg_user_agency_daily
WHERE
del_flag = '0'
AND agency_id = #{agencyId}
ORDER BY
date_id DESC
LIMIT 1
</select>
<select id="getAgnecyGroup" resultType="com.epmet.dataaggre.dto.datastats.result.AgencyBasicDataResultDTO">
SELECT
group_total AS groupTotal,
ordinary_total AS ordinaryTotal,
branch_total AS branchTotal
FROM
fact_group_total_agency_daily
WHERE
del_flag = '0'
AND agency_id = #{agencyId}
ORDER BY
date_id DESC
LIMIT 1
</select>
<select id="getAgencyTopic" resultType="com.epmet.dataaggre.dto.datastats.result.AgencyBasicDataResultDTO$Topic">
SELECT
topic_count AS topicCount,
topic_status_id AS topicStatus
FROM
fact_topic_status_agency_daily
WHERE
del_flag = '0'
AND topic_status_id in('discussing','closed','hidden')<!-- 讨论中(热议中!=讨论中)、已处理、已屏蔽 -->
AND agency_id = #{agencyId}
ORDER BY
date_id DESC
LIMIT 3
</select>
<select id="getAgencyTopicShiftIssue" resultType="com.epmet.dataaggre.dto.datastats.result.AgencyBasicDataResultDTO$Topic">
SELECT
issue_total AS shiftedIssueTotal,
DATE_FORMAT(date_id, '%Y-%m-%d') AS deadline
FROM
fact_topic_issue_agency_daily
WHERE
del_flag = '0'
AND agency_id = #{agencyId}
ORDER BY
date_id DESC
LIMIT 1
</select>
<select id="getAgencyIssue" resultType="com.epmet.dataaggre.dto.datastats.result.AgencyBasicDataResultDTO">
SELECT
issue_total AS issueTotal,
voting_total AS votingTotal,
closed_total AS closedIssueTotal,
shift_project_total AS shiftProjectTotal
FROM
fact_issue_agency_daily fiad
WHERE
del_flag = '0'
AND agency_id = #{agencyId}
ORDER BY
date_id DESC
LIMIT 1
</select>
<select id="getAgencyProject" resultType="com.epmet.dataaggre.dto.datastats.result.AgencyBasicDataResultDTO">
SELECT
IFNULL(project_total, 0) AS "projectTotal",
IFNULL(pending_total, 0) AS "pendingTotal",
IFNULL(closed_total, 0) AS "closedProjectTotal"
FROM
fact_agency_project_daily
WHERE
del_flag = '0'
AND agency_id = '8631fa4b22e88fdc259b3f51b5de2be2'
ORDER BY
date_id DESC
LIMIT 1
</select>
</mapper>
Loading…
Cancel
Save