Parcourir la source

fix: 统计交易和地址数据,发送邮件

cjwen il y a 1 an
Parent
commit
c199c53d7b

+ 14 - 0
src/main/java/com/ichaoj/ams/controller/ExecuteController.java

@@ -1,10 +1,12 @@
 package com.ichaoj.ams.controller;
 
+import cn.hutool.extra.spring.SpringUtil;
 import com.ichaoj.ams.request.execute.CreateExecute;
 import com.ichaoj.ams.request.execute.PageExecuteRequest;
 import com.ichaoj.ams.request.execute.UpdateExecute;
 import com.ichaoj.ams.response.execute.ExecuteResponse;
 import com.ichaoj.ams.service.IAmsExecuteRecordService;
+import com.ichaoj.ams.task.NotifyTask;
 import com.ichaoj.common.annotation.AuthResource;
 import com.ichaoj.common.model.PublicPage;
 import com.ichaoj.common.model.PublicResult;
@@ -59,4 +61,16 @@ public class ExecuteController {
         return PublicResult.success(result);
     }
 
+    @GetMapping("/exec-task")
+    @Operation(summary = "分页查询执行")
+//    @AuthResource
+    public PublicResult<Object> executeTask() {
+        NotifyTask task = SpringUtil.getBean(NotifyTask.class);
+        task.statisticsWeeklyReport();
+        task.statisticsMonthlyReport();
+        return PublicResult.success();
+    }
+
+
+
 }

+ 2 - 9
src/main/java/com/ichaoj/ams/response/statistics/NotifyTaskResponse.java

@@ -3,7 +3,6 @@ package com.ichaoj.ams.response.statistics;
 import lombok.Data;
 
 import java.math.BigDecimal;
-import java.util.Map;
 
 /**
  * @author gavin
@@ -12,14 +11,8 @@ import java.util.Map;
 @Data
 public class NotifyTaskResponse {
 
-    private BigDecimal recentGas;
-    private BigDecimal totalGas;
-
-    private BigDecimal recentAmount;
-    private BigDecimal totalAmount;
-
-    private BigDecimal predictCost;
-    private BigDecimal actualCost;
+    private Long recentTradeCount;
+    private Long totalTradeCount;
 
     private Long recentBatchCount;
     private Long recentPremiumCount;

+ 76 - 29
src/main/java/com/ichaoj/ams/task/NotifyTask.java

@@ -1,22 +1,31 @@
 package com.ichaoj.ams.task;
 
 import cn.hutool.core.collection.ListUtil;
+import cn.hutool.core.date.DatePattern;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.date.LocalDateTimeUtil;
+import cn.hutool.core.date.format.DatePrinter;
+import cn.hutool.core.thread.ThreadUtil;
 import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.ichaoj.ams.entity.AmsAddressAccount;
+import com.ichaoj.ams.entity.AmsTradeRecord;
 import com.ichaoj.ams.response.statistics.DailyCostResponse;
 import com.ichaoj.ams.response.statistics.NotifyTaskResponse;
 import com.ichaoj.ams.service.*;
+import com.ichaoj.email.IEmailProvider;
 import com.ichaoj.web.util.ParamTemplate;
 import com.xxl.job.core.handler.annotation.XxlJob;
+import jdk.internal.org.objectweb.asm.tree.FieldInsnNode;
 import lombok.RequiredArgsConstructor;
+import lombok.SneakyThrows;
 import lombok.extern.slf4j.Slf4j;
+import org.jetbrains.annotations.NotNull;
 import org.springframework.stereotype.Component;
 
 import java.math.BigDecimal;
 import java.time.LocalDateTime;
+import java.util.Date;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
@@ -32,38 +41,62 @@ public class NotifyTask {
 
     private final IAmsTradeRecordService tradeService;
 
-    private final IAmsAirdropProjectService projectService;
-
     private final IAmsAddressAccountService accountService;
 
-    private final IAmsAirdropTaskService taskService;
-
-    private final IAmsExecuteRecordService executeRecordService;
+    private final IEmailProvider emailProvider;
     private final ParamTemplate paramTemplate;
 
     @XxlJob("ams_weekly_report")
+    @SuppressWarnings("all")
     public void statisticsWeeklyReport() {
         NotifyTaskResponse response = new NotifyTaskResponse();
 
         LocalDateTime startTime = LocalDateTimeUtil.of(DateUtil.lastWeek());
         LocalDateTime endTime = LocalDateTime.now();
 
-        // 统计最近的gas和amount日常支出
-        getDailyCost(response, startTime, endTime);
+        // 执行核心统计方法
+        executeCoreMethod(response, startTime, endTime);
 
-        // 统计总gas和amount支出
-        getDailyCost(response, null, null);
+        Set<String> emailSet = getEmailSet();
+        ThreadUtil.execute(() -> {
+            for (String email : emailSet) {
+                sendEmail(response, email, startTime, endTime);
+            }
+        });
+    }
 
-        // 统计最近添加地址数量和精品号数量
+    private void executeCoreMethod(NotifyTaskResponse response, LocalDateTime startTime, LocalDateTime endTime) {
+        // 统计地址数量和精品号数量
         countAddress(response, startTime, endTime, 0);
         countAddress(response, null, null, 0);
         countAddress(response, startTime, endTime, 1);
         countAddress(response, null, null, 1);
 
-        //  统计项目数量
-//        countProject();
+        //  统计交易次数
+        countTrade(response, startTime, endTime);
+        countTrade(response, null, null);
+    }
 
+    @XxlJob("ams_monthly_report")
+    @SuppressWarnings("all")
+    public void statisticsMonthlyReport() {
+        NotifyTaskResponse response = new NotifyTaskResponse();
+        LocalDateTime startTime = LocalDateTimeUtil.of(DateUtil.lastMonth());
+        LocalDateTime endTime = LocalDateTime.now();
+
+        // 执行核心统计方法
+        executeCoreMethod(response, startTime, endTime);
+
+        Set<String> emailSet = getEmailSet();
+        ThreadUtil.execute(() -> {
+            for (String email : emailSet) {
+                sendEmail(response, email, startTime, endTime);
+            }
+        });
+    }
 
+    @NotNull
+    private Set<String> getEmailSet() {
         String emailStr = paramTemplate.getParamValue("str_ams_data_notify_email");
         String[] emails = emailStr.split(StrUtil.COMMA);
         Set<String> emailSet = new HashSet<>();
@@ -72,13 +105,40 @@ public class NotifyTask {
         } else {
             emailSet.addAll(ListUtil.of(emails));
         }
-        for (String email : emailSet) {
-            sendEmail(response, email);
-        }
+        return emailSet;
     }
 
-    private void sendEmail(NotifyTaskResponse response, String email) {
+    private void countTrade(NotifyTaskResponse response, LocalDateTime startTime, LocalDateTime endTime) {
+        long count = tradeService.count(new LambdaQueryWrapper<AmsTradeRecord>()
+                .ge(startTime != null, AmsTradeRecord::getCreateTime, startTime)
+                .le(endTime != null, AmsTradeRecord::getCreateTime, endTime)
+        );
+        if (startTime == null) {
+            response.setTotalTradeCount(count);
+        } else {
+            response.setRecentTradeCount(count);
+        }
+    }
 
+    @SneakyThrows
+    private void sendEmail(NotifyTaskResponse response, String email, LocalDateTime startTime, LocalDateTime endTime) {
+        log.info("{} 你好,ams空投系统 {} - {} 报表统计," +
+                        "新增:{} 个批量地址,{} 个精品号地址," +
+                        "{} 条交易," +
+                        "总计:{} 个批量地址,{} 个精品号地址," +
+                        "{} 条交易.", email, startTime, endTime, response.getRecentBatchCount()
+                , response.getRecentPremiumCount(), response.getRecentTradeCount(),
+                response.getTotalBatchCount(), response.getTotalPremiumCount(), response.getTotalTradeCount());
+        emailProvider.sendEmail("ReportEmailTemplate.html",
+                "ams统计报表",
+                email,
+                context -> {
+                    context.setVariable("title", StrUtil.format("ams空投系统 {} - {} 报表统计",
+                            DateUtil.format(startTime, DatePattern.NORM_DATE_PATTERN),
+                            DateUtil.format(endTime, DatePattern.NORM_DATE_PATTERN)));
+                    context.setVariable("sendTime", DateUtil.format(new Date(), DatePattern.NORM_DATETIME_PATTERN));
+                    context.setVariable("message", response);
+                });
     }
 
     private void countAddress(NotifyTaskResponse response, LocalDateTime startTime, LocalDateTime endTime, int addressType) {
@@ -103,18 +163,5 @@ public class NotifyTask {
 
     }
 
-    private void getDailyCost(NotifyTaskResponse response, LocalDateTime startTime, LocalDateTime endTime) {
-        List<DailyCostResponse> list = tradeService.dailyCostStatistics(startTime, endTime, null);
-        BigDecimal gasCost = BigDecimal.valueOf(list.stream().mapToDouble(d -> d.getGas().doubleValue()).sum());
-        BigDecimal amountCost = BigDecimal.valueOf(list.stream().mapToDouble(d -> d.getPrincipal().doubleValue()).sum());
-        if (startTime == null) {
-            response.setTotalGas(gasCost);
-            response.setTotalGas(amountCost);
-        } else {
-            response.setRecentGas(gasCost);
-            response.setRecentGas(amountCost);
-        }
-    }
-
 
 }

Fichier diff supprimé car celui-ci est trop grand
+ 0 - 29
src/main/resources/templates/email/ReportEmailTemplate.html


Certains fichiers n'ont pas été affichés car il y a eu trop de fichiers modifiés dans ce diff