Commit b085dca5b93cad5457c76370ed6df02c384d3176

Authored by 张志伟
1 parent b5de742c

:sparkles: feature(*): 公共池报表准备

- 公共池报表准备
fw-valhalla-server/src/main/java/cn/fw/valhalla/controller/task/ReportPrepareTask.java
@@ -31,9 +31,8 @@ public class ReportPrepareTask { @@ -31,9 +31,8 @@ public class ReportPrepareTask {
31 /** 31 /**
32 * 保持率进站率报表数据准备 32 * 保持率进站率报表数据准备
33 */ 33 */
34 - @Scheduled(cron = "0 0 0 ? * * ") 34 + @Scheduled(cron = "30 0 0 ? * * ")
35 public void extractingData() { 35 public void extractingData() {
36 -// CompletableFuture.runAsync(() -> retentionRatioBizService.extracting(DateUtil.startDate(new Date())), ThreadPoolUtil.getInstance().getExecutor());  
37 retentionRatioBizService.extracting(DateUtil.startDate(new Date())); 36 retentionRatioBizService.extracting(DateUtil.startDate(new Date()));
38 } 37 }
39 38
fw-valhalla-service/src/main/java/cn/fw/valhalla/service/report/PublicReportBizService.java
1 package cn.fw.valhalla.service.report; 1 package cn.fw.valhalla.service.report;
2 2
  3 +import cn.fw.common.cache.locker.DistributedLocker;
  4 +import lombok.Getter;
3 import lombok.RequiredArgsConstructor; 5 import lombok.RequiredArgsConstructor;
4 import lombok.extern.slf4j.Slf4j; 6 import lombok.extern.slf4j.Slf4j;
  7 +import org.redisson.api.RLock;
  8 +import org.springframework.beans.factory.annotation.Value;
5 import org.springframework.stereotype.Service; 9 import org.springframework.stereotype.Service;
6 import org.springframework.transaction.annotation.Transactional; 10 import org.springframework.transaction.annotation.Transactional;
  11 +import org.springframework.util.Assert;
7 12
8 import java.time.LocalDate; 13 import java.time.LocalDate;
9 14
@@ -20,6 +25,11 @@ import java.time.LocalDate; @@ -20,6 +25,11 @@ import java.time.LocalDate;
20 @Slf4j 25 @Slf4j
21 @RequiredArgsConstructor 26 @RequiredArgsConstructor
22 public class PublicReportBizService { 27 public class PublicReportBizService {
  28 + private final DistributedLocker distributedLocker;
  29 +
  30 + @Value("${spring.cache.custom.global-prefix}:PublicReport:extracting")
  31 + @Getter
  32 + private String keyPrefix;
23 33
24 /** 34 /**
25 * 抽取集团公共池数据 35 * 抽取集团公共池数据
@@ -28,8 +38,24 @@ public class PublicReportBizService { @@ -28,8 +38,24 @@ public class PublicReportBizService {
28 * @param groupId 集团id 38 * @param groupId 集团id
29 */ 39 */
30 @Transactional(rollbackFor = Exception.class) 40 @Transactional(rollbackFor = Exception.class)
31 - public void extracting(LocalDate nowDate, Long groupId) { 41 + public void extracting(final LocalDate nowDate, final Long groupId) {
32 log.info("开始抽取公共池报表数据,日期:{} 集团:{}", nowDate, groupId); 42 log.info("开始抽取公共池报表数据,日期:{} 集团:{}", nowDate, groupId);
33 - // TODO: 2023/5/4 完成方法 43 + final String lockKey = generateKey(groupId);
  44 + RLock lock = (RLock) distributedLocker.lock(lockKey);
  45 + if (lock == null || !lock.isLocked()) {
  46 + return;
  47 + }
  48 + try {
  49 + // TODO: 2023/5/4 完成方法
  50 + } finally {
  51 + if (lock.isLocked()) {
  52 + lock.unlock();
  53 + }
  54 + }
  55 + }
  56 +
  57 + private String generateKey(final Long groupId) {
  58 + Assert.notNull(groupId, "groupId cannot be null");
  59 + return String.format("%s:%s", getKeyPrefix(), groupId);
34 } 60 }
35 } 61 }