From 3b36db48a350237c17bf0118d8f784887f24456a Mon Sep 17 00:00:00 2001 From: sunyuchao Date: Thu, 13 May 2021 13:40:05 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9F=BA=E7=A1=80=E6=95=B0=E6=8D=AE-=E7=BB=84?= =?UTF-8?q?=E7=BB=87=E4=B8=8B=E4=BA=94=E9=A1=B9=E5=9F=BA=E7=A1=80=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E6=B1=87=E6=80=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../form/AgenctBasicDataFormDTO.java | 29 ++++++ .../result/AgencyBasicDataResultDTO.java | 96 +++++++++++++++++++ .../controller/DataStatsController.java | 21 +++- .../dataaggre/dao/datastats/DataStatsDao.java | 40 ++++++++ .../service/datastats/DataStatsService.java | 10 ++ .../datastats/impl/DataStatsServiceImpl.java | 94 +++++++++++++++++- .../mapper/datastats/DatsStatsDao.xml | 89 +++++++++++++++++ 7 files changed, 377 insertions(+), 2 deletions(-) create mode 100644 epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/datastats/form/AgenctBasicDataFormDTO.java create mode 100644 epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/datastats/result/AgencyBasicDataResultDTO.java diff --git a/epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/datastats/form/AgenctBasicDataFormDTO.java b/epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/datastats/form/AgenctBasicDataFormDTO.java new file mode 100644 index 0000000000..0b79c2da2c --- /dev/null +++ b/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{} + +} diff --git a/epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/datastats/result/AgencyBasicDataResultDTO.java b/epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/datastats/result/AgencyBasicDataResultDTO.java new file mode 100644 index 0000000000..25509719c4 --- /dev/null +++ b/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; + } + +} diff --git a/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/controller/DataStatsController.java b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/controller/DataStatsController.java index 2b2abc3b51..f5919caac5 100644 --- a/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/controller/DataStatsController.java +++ b/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 agencyBasicData(@LoginUser TokenDto tokenDto, @RequestBody AgenctBasicDataFormDTO formDTO) { + ValidatorUtils.validateEntity(formDTO, AgenctBasicDataFormDTO.Agency.class); + formDTO.setCustomerId(tokenDto.getCustomerId()); + return new Result().ok(dataStatsService.agencyBasicData(formDTO)); + } } diff --git a/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/dao/datastats/DataStatsDao.java b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/dao/datastats/DataStatsDao.java index 475f62cdea..7918222a52 100644 --- a/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/dao/datastats/DataStatsDao.java +++ b/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 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); + } \ No newline at end of file diff --git a/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/datastats/DataStatsService.java b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/datastats/DataStatsService.java index fca91d972e..566d849255 100644 --- a/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/datastats/DataStatsService.java +++ b/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); + } diff --git a/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/datastats/impl/DataStatsServiceImpl.java b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/datastats/impl/DataStatsServiceImpl.java index d83e73545e..688a2d6a91 100644 --- a/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/datastats/impl/DataStatsServiceImpl.java +++ b/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 topic = dataStatsDao.getAgencyTopic(formDTO.getAgencyId()); + //转议题话题-机关日统计数据表 + AgencyBasicDataResultDTO.Topic topicSHiftIssue = dataStatsDao.getAgencyTopicShiftIssue(formDTO.getAgencyId()); + AtomicReference closedTotal = new AtomicReference<>(0); + AtomicReference 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; + } + } diff --git a/epmet-module/data-aggregator/data-aggregator-server/src/main/resources/mapper/datastats/DatsStatsDao.xml b/epmet-module/data-aggregator/data-aggregator-server/src/main/resources/mapper/datastats/DatsStatsDao.xml index 8360ef814e..07f4f4b448 100644 --- a/epmet-module/data-aggregator/data-aggregator-server/src/main/resources/mapper/datastats/DatsStatsDao.xml +++ b/epmet-module/data-aggregator/data-aggregator-server/src/main/resources/mapper/datastats/DatsStatsDao.xml @@ -3,5 +3,94 @@ + + + + + + + + + + + \ No newline at end of file