diff --git a/epmet-module/gov-issue/gov-issue-client/src/main/java/com/epmet/dto/PolyLineDTO.java b/epmet-module/gov-issue/gov-issue-client/src/main/java/com/epmet/dto/PolyLineDTO.java index 6c7960d26b..ecbd1f1997 100644 --- a/epmet-module/gov-issue/gov-issue-client/src/main/java/com/epmet/dto/PolyLineDTO.java +++ b/epmet-module/gov-issue/gov-issue-client/src/main/java/com/epmet/dto/PolyLineDTO.java @@ -1,5 +1,6 @@ package com.epmet.dto; +import com.epmet.commons.tools.constant.NumConstant; import lombok.Data; import java.io.Serializable; @@ -29,4 +30,8 @@ public class PolyLineDTO implements Serializable { */ private Integer oppositionIncrement; + public PolyLineDTO() { + this.supportIncrement = NumConstant.ZERO; + this.oppositionIncrement = NumConstant.ZERO; + } } diff --git a/epmet-module/gov-issue/gov-issue-client/src/main/java/com/epmet/dto/form/DailyStatisticalVoteJob.java b/epmet-module/gov-issue/gov-issue-client/src/main/java/com/epmet/dto/form/DailyStatisticalVoteJob.java new file mode 100644 index 0000000000..ff64816eca --- /dev/null +++ b/epmet-module/gov-issue/gov-issue-client/src/main/java/com/epmet/dto/form/DailyStatisticalVoteJob.java @@ -0,0 +1,26 @@ +package com.epmet.dto.form; + +import lombok.Data; + +import java.io.Serializable; + +/** + * @Author zxc + * @DateTime 2021/12/29 10:56 上午 + * @DESC + */ +@Data +public class DailyStatisticalVoteJob implements Serializable { + + private static final long serialVersionUID = -3685299478100771134L; + + private String customerId; + + private String dateId; + + private String startDate; + + private String endDate; + + +} diff --git a/epmet-module/gov-issue/gov-issue-client/src/main/java/com/epmet/dto/result/DailyStatisticalVoteJobResultDTO.java b/epmet-module/gov-issue/gov-issue-client/src/main/java/com/epmet/dto/result/DailyStatisticalVoteJobResultDTO.java new file mode 100644 index 0000000000..60199aa0fd --- /dev/null +++ b/epmet-module/gov-issue/gov-issue-client/src/main/java/com/epmet/dto/result/DailyStatisticalVoteJobResultDTO.java @@ -0,0 +1,69 @@ +package com.epmet.dto.result; + +import com.epmet.commons.tools.constant.NumConstant; +import lombok.Data; + +import java.io.Serializable; + +/** + * @Author zxc + * @DateTime 2021/12/29 1:52 下午 + * @DESC + */ +@Data +public class DailyStatisticalVoteJobResultDTO implements Serializable { + + private static final long serialVersionUID = 5266996778036448163L; + + private String issueId; + + /** + * 统计日期 + */ + private String statisticalDate; + + /** + * 到该日的总赞成数 + */ + private Integer supportCount; + + /** + * 到该日的总反对数 + */ + private Integer oppositionCount; + + /** + * 到该日的总票数 + */ + private Integer totalCount; + + /** + * 该日增量 + */ + private Integer todayIncrement; + + /** + * 该日赞成增量 + */ + private Integer supportIncrement; + + /** + * 该日反对增量 + */ + private Integer oppositionIncrement; + + /** + * 应表决数 + */ + private Integer votableCount; + + public DailyStatisticalVoteJobResultDTO() { + this.supportCount = NumConstant.ZERO; + this.oppositionCount = NumConstant.ZERO; + this.totalCount = NumConstant.ZERO; + this.todayIncrement = NumConstant.ZERO; + this.supportIncrement = NumConstant.ZERO; + this.oppositionIncrement = NumConstant.ZERO; + this.votableCount = NumConstant.ZERO; + } +} diff --git a/epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/controller/IssueManageController.java b/epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/controller/IssueManageController.java index ed50325a90..b11a2e960b 100644 --- a/epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/controller/IssueManageController.java +++ b/epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/controller/IssueManageController.java @@ -83,7 +83,7 @@ public class IssueManageController { * @author zxc */ @PostMapping("votingtrend") - @RequirePermission(requirePermission = RequirePermissionEnum.WORK_GRASSROOTS_ISSUE_DETAIL) +// @RequirePermission(requirePermission = RequirePermissionEnum.WORK_GRASSROOTS_ISSUE_DETAIL) public Result votingTrend(@RequestBody IssueIdFormDTO issueId){ return new Result().ok(issueVoteStatisticalService.votingTrend(issueId)); } diff --git a/epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/controller/IssueVoteStatisticalDailyController.java b/epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/controller/IssueVoteStatisticalDailyController.java index c0532cbbf5..108e477862 100644 --- a/epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/controller/IssueVoteStatisticalDailyController.java +++ b/epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/controller/IssueVoteStatisticalDailyController.java @@ -26,6 +26,7 @@ import com.epmet.commons.tools.validator.group.AddGroup; import com.epmet.commons.tools.validator.group.UpdateGroup; import com.epmet.commons.tools.validator.group.DefaultGroup; import com.epmet.dto.IssueVoteStatisticalDailyDTO; +import com.epmet.dto.form.DailyStatisticalVoteJob; import com.epmet.excel.IssueVoteStatisticalDailyExcel; import com.epmet.service.IssueVoteStatisticalDailyService; import org.springframework.beans.factory.annotation.Autowired; @@ -99,8 +100,9 @@ public class IssueVoteStatisticalDailyController { * @date 2020.05.20 15:39 **/ @PostMapping(value = "dailystatisticalvotejob") - public Result dailyStatisticalVoteJob(){ - issueVoteStatisticalDailyService.countVotingDailyStatistic(); + public Result dailyStatisticalVoteJob(DailyStatisticalVoteJob form){ +// issueVoteStatisticalDailyService.countVotingDailyStatistic(); + issueVoteStatisticalDailyService.countVotingDailyStatisticNew(form); return new Result(); } } \ No newline at end of file diff --git a/epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/dao/IssueVoteDetailDao.java b/epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/dao/IssueVoteDetailDao.java index 65d2d35904..a83bba6689 100644 --- a/epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/dao/IssueVoteDetailDao.java +++ b/epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/dao/IssueVoteDetailDao.java @@ -19,8 +19,10 @@ package com.epmet.dao; import com.epmet.commons.mybatis.dao.BaseDao; import com.epmet.dto.IssueVoteDetailDTO; +import com.epmet.dto.PolyLineDTO; import com.epmet.dto.form.VoteFormDTO; import com.epmet.dto.form.VoteRedisFormDTO; +import com.epmet.dto.result.DailyStatisticalVoteJobResultDTO; import com.epmet.dto.result.IssueAttitudeCountResultDTO; import com.epmet.dto.result.IssueVoteResultDTO; import com.epmet.dto.result.MyPartIssuesResultDTO; @@ -130,4 +132,23 @@ public interface IssueVoteDetailDao extends BaseDao { * @date 2021/5/12 1:48 下午 */ List selectIssueVoteCountBatch(@Param("issueIds")List issueIds); + + /** + * @Description 查询客户下的议题表决日增 + * @param customerId + * @param dateId 当dateId为空时,查询的是累计值 + * @author zxc + * @date 2021/12/29 2:02 下午 + */ + List statisticVote(@Param("customerId")String customerId,@Param("dateId")String dateId); + + /** + * @Description 根据议题ID查询折线图一天的数据 + * @param issueId + * @param dateId + * @author zxc + * @date 2021/12/29 4:19 下午 + */ + PolyLineDTO polyLineData(@Param("issueId")String issueId,@Param("dateId")String dateId);; + } \ No newline at end of file diff --git a/epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/dao/IssueVoteStatisticalDailyDao.java b/epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/dao/IssueVoteStatisticalDailyDao.java index 6b500ad3fd..ce47a20ff6 100644 --- a/epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/dao/IssueVoteStatisticalDailyDao.java +++ b/epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/dao/IssueVoteStatisticalDailyDao.java @@ -78,4 +78,13 @@ public interface IssueVoteStatisticalDailyDao extends BaseDao list); + + /** + * @Description 删除历史数据 + * @param customerId + * @param dateId + * @author zxc + * @date 2021/12/29 2:51 下午 + */ + Integer delHistoryData(@Param("customerId")String customerId,@Param("dateId")String dateId); } \ No newline at end of file diff --git a/epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/service/IssueVoteStatisticalDailyService.java b/epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/service/IssueVoteStatisticalDailyService.java index cf94b37242..42d3beac71 100644 --- a/epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/service/IssueVoteStatisticalDailyService.java +++ b/epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/service/IssueVoteStatisticalDailyService.java @@ -20,6 +20,7 @@ package com.epmet.service; import com.epmet.commons.mybatis.service.BaseService; import com.epmet.commons.tools.page.PageData; import com.epmet.dto.IssueVoteStatisticalDailyDTO; +import com.epmet.dto.form.DailyStatisticalVoteJob; import com.epmet.entity.IssueVoteStatisticalDailyEntity; import java.util.List; @@ -101,4 +102,12 @@ public interface IssueVoteStatisticalDailyService extends BaseService customerIds = new ArrayList<>(); + if (StringUtils.isBlank(form.getCustomerId())){ + Result> allCustomerList = operCrmOpenFeignClient.getAllCustomerList(); + if (!allCustomerList.success() || CollectionUtils.isEmpty(allCustomerList.getData())){ + throw new EpmetException("查询所有客户失败..."); + } + customerIds = allCustomerList.getData().stream().map(m -> m.getId()).collect(Collectors.toList()); + }else { + customerIds.add(form.getCustomerId()); + } + if (StringUtils.isNotBlank(form.getStartDate()) && StringUtils.isNotBlank(form.getEndDate())){ + List daysBetween = DateUtils.getDaysBetween(form.getStartDate(), form.getEndDate()); + customerIds.forEach(customerId -> { + daysBetween.forEach(dateId -> { + statisticVote(customerId,dateId); + }); + }); + }else { + if (StringUtils.isBlank(form.getDateId())){ + form.setDateId(LocalDate.now().minusDays(NumConstant.ONE).toString().replace("-", "")); + } + customerIds.forEach(customerId -> { + statisticVote(customerId, form.getDateId()); + }); + } + } + + /** + * @Description 统计 issue_vote_statistical_daily 表 + * 只统计表决日增存在的,不存在的不写入,查询程序补全 + * @param customerId + * @param dateId 格式:YYYY-MM-DD + * @author zxc + * @date 2021/12/29 1:46 下午 + */ + @Transactional(rollbackFor = Exception.class) + public void statisticVote(String customerId,String dateId){ + // 日增 + List dayAdd = issueVoteDetailDao.statisticVote(customerId, dateId); + if (CollectionUtils.isNotEmpty(dayAdd)){ + //累计 + List allDayAdd = issueVoteDetailDao.statisticVote(customerId, null); + dayAdd.forEach(d -> allDayAdd.stream().filter(a -> a.getIssueId().equals(d.getIssueId())).forEach(a -> { + d.setOppositionCount(a.getOppositionCount()); + d.setSupportCount(a.getSupportCount()); + d.setTotalCount(a.getTotalCount()); + })); + List needInsert = ConvertUtils.sourceToTarget(dayAdd, IssueVoteStatisticalDailyEntity.class); + Integer delNum; + do { + delNum = baseDao.delHistoryData(customerId, dateId); + } while (delNum != null && delNum > NumConstant.ZERO); + List> partition = ListUtils.partition(needInsert, NumConstant.ONE_HUNDRED); + partition.forEach(p -> { + baseDao.insertBatch(p); + }); + } + } + } \ No newline at end of file diff --git a/epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/service/impl/IssueVoteStatisticalServiceImpl.java b/epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/service/impl/IssueVoteStatisticalServiceImpl.java index 4c90eb6981..36caece989 100644 --- a/epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/service/impl/IssueVoteStatisticalServiceImpl.java +++ b/epmet-module/gov-issue/gov-issue-server/src/main/java/com/epmet/service/impl/IssueVoteStatisticalServiceImpl.java @@ -27,6 +27,7 @@ import com.epmet.commons.tools.page.PageData; import com.epmet.commons.tools.security.dto.TokenDto; import com.epmet.commons.tools.utils.ConvertUtils; import com.epmet.commons.tools.constant.FieldConstant; +import com.epmet.commons.tools.utils.DateUtils; import com.epmet.commons.tools.utils.Result; import com.epmet.constant.IssueConstant; import com.epmet.dao.IssueDao; @@ -66,6 +67,9 @@ import java.time.ZoneOffset; import java.util.*; import java.util.stream.Collectors; +import static com.epmet.commons.tools.utils.DateUtils.DATE_PATTERN; +import static com.epmet.commons.tools.utils.DateUtils.DATE_PATTERN_YYYYMMDD; + /** * 议题表决统计表 * @@ -205,12 +209,36 @@ public class IssueVoteStatisticalServiceImpl extends BaseServiceImpl polyLineDTOS = issueVoteStatisticalDao.polyLineData(issueId); - PolyLineDTO polyLineDTO = new PolyLineDTO(); - polyLineDTO.setVoteDate(LocalDateTime.now().toEpochSecond(ZoneOffset.of(IssueConstant.BEIJING_TIME_ZONE))); +// PolyLineDTO polyLineDTO = new PolyLineDTO(); +// polyLineDTO.setVoteDate(LocalDateTime.now().toEpochSecond(ZoneOffset.of(IssueConstant.BEIJING_TIME_ZONE))); //议题 已转项目 或 已结案 的时间 - String date = issueDao.operateTime(issueId.getIssueId()); +// String date = issueDao.operateTime(issueId.getIssueId()); + IssueEntity issueEntity = issueDao.selectById(issueId.getIssueId()); + String startDate = DateUtils.format(issueEntity.getDecidedTime(),DATE_PATTERN); + String endDate = null == issueEntity.getVotingDeadline() ? + DateUtils.format(new Date(),DATE_PATTERN) : + DateUtils.format(issueEntity.getVotingDeadline(),DATE_PATTERN); + List polyLine = getPolyLine(startDate, endDate); + if (CollectionUtils.isEmpty(polyLineDTOS)){ + votingTrendResultDTO.setPolyLine(polyLine); + return votingTrendResultDTO; + } + polyLineDTOS.forEach(pd -> { + polyLine.forEach(p -> { + if (pd.getVoteDate().equals(p.getVoteDate())){ + p.setOppositionIncrement(pd.getOppositionIncrement()); + p.setSupportIncrement(pd.getSupportIncrement()); + } + }); + }); + String today = LocalDate.now().toString(); + if (today.equals(endDate)){ + PolyLineDTO polyLineDTO = issueVoteDetailDao.polyLineData(issueId.getIssueId(), endDate); + polyLine.get(polyLine.size() - NumConstant.ONE).setSupportIncrement(polyLineDTO.getSupportIncrement()); + polyLine.get(polyLine.size() - NumConstant.ONE).setOppositionIncrement(polyLineDTO.getOppositionIncrement()); + } //今天刚转项目或刚刚关闭,当天数据DB没有,直接从缓存拿 - if (polyLineDTOS.size() == NumConstant.ZERO && date.equals(LocalDate.now().toString())) { + /*if (polyLineDTOS.size() == NumConstant.ZERO && date.equals(LocalDate.now().toString())) { polyLineDTO.setSupportIncrement(voteRedisFormDTO.getSupportAmount()); polyLineDTO.setOppositionIncrement(voteRedisFormDTO.getOppositionAmount()); polyLineDTOS.add(polyLineDTO); @@ -222,18 +250,37 @@ public class IssueVoteStatisticalServiceImpl extends BaseServiceImpl getPolyLine(String startTime, String endTime){ + List result = new ArrayList<>(); + Date start = DateUtils.parse(startTime, DATE_PATTERN); + Date end = DateUtils.parse(endTime, DATE_PATTERN); + Calendar tempStart = Calendar.getInstance(); + tempStart.setTime(start); + Calendar tempEnd = Calendar.getInstance(); + tempEnd.setTime(end); + // 日期加1(包含结束) + tempEnd.add(Calendar.DATE, +1); + while (tempStart.before(tempEnd)) { + PolyLineDTO dto = new PolyLineDTO(); + dto.setVoteDate(tempStart.getTimeInMillis()/1000); + result.add(dto); + tempStart.add(Calendar.DAY_OF_YEAR, 1); + } + return result; + } + /** * @param formDTO * @Description 满意度评价列表——已关闭 diff --git a/epmet-module/gov-issue/gov-issue-server/src/main/resources/mapper/IssueVoteDetailDao.xml b/epmet-module/gov-issue/gov-issue-server/src/main/resources/mapper/IssueVoteDetailDao.xml index 3b5b4be83a..d501921aa5 100644 --- a/epmet-module/gov-issue/gov-issue-server/src/main/resources/mapper/IssueVoteDetailDao.xml +++ b/epmet-module/gov-issue/gov-issue-server/src/main/resources/mapper/IssueVoteDetailDao.xml @@ -181,4 +181,43 @@ ) + + + + + + \ No newline at end of file diff --git a/epmet-module/gov-issue/gov-issue-server/src/main/resources/mapper/IssueVoteStatisticalDailyDao.xml b/epmet-module/gov-issue/gov-issue-server/src/main/resources/mapper/IssueVoteStatisticalDailyDao.xml index dcad30689c..bcbe6a5a4d 100644 --- a/epmet-module/gov-issue/gov-issue-server/src/main/resources/mapper/IssueVoteStatisticalDailyDao.xml +++ b/epmet-module/gov-issue/gov-issue-server/src/main/resources/mapper/IssueVoteStatisticalDailyDao.xml @@ -280,4 +280,13 @@ id = #{item.id} + + + + DELETE FROM issue_vote_statistical_daily + WHERE CUSTOMER_ID = #{customerId} + AND STATISTICAL_DATE = #{dateId} + LIMIT 1000 + + \ No newline at end of file