|
@@ -1,22 +1,31 @@
|
|
package com.ichaoj.ams.task;
|
|
package com.ichaoj.ams.task;
|
|
|
|
|
|
import cn.hutool.core.collection.ListUtil;
|
|
import cn.hutool.core.collection.ListUtil;
|
|
|
|
+import cn.hutool.core.date.DatePattern;
|
|
import cn.hutool.core.date.DateUtil;
|
|
import cn.hutool.core.date.DateUtil;
|
|
import cn.hutool.core.date.LocalDateTimeUtil;
|
|
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 cn.hutool.core.util.StrUtil;
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
import com.ichaoj.ams.entity.AmsAddressAccount;
|
|
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.DailyCostResponse;
|
|
import com.ichaoj.ams.response.statistics.NotifyTaskResponse;
|
|
import com.ichaoj.ams.response.statistics.NotifyTaskResponse;
|
|
import com.ichaoj.ams.service.*;
|
|
import com.ichaoj.ams.service.*;
|
|
|
|
+import com.ichaoj.email.IEmailProvider;
|
|
import com.ichaoj.web.util.ParamTemplate;
|
|
import com.ichaoj.web.util.ParamTemplate;
|
|
import com.xxl.job.core.handler.annotation.XxlJob;
|
|
import com.xxl.job.core.handler.annotation.XxlJob;
|
|
|
|
+import jdk.internal.org.objectweb.asm.tree.FieldInsnNode;
|
|
import lombok.RequiredArgsConstructor;
|
|
import lombok.RequiredArgsConstructor;
|
|
|
|
+import lombok.SneakyThrows;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
|
+import org.jetbrains.annotations.NotNull;
|
|
import org.springframework.stereotype.Component;
|
|
import org.springframework.stereotype.Component;
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
import java.math.BigDecimal;
|
|
import java.time.LocalDateTime;
|
|
import java.time.LocalDateTime;
|
|
|
|
+import java.util.Date;
|
|
import java.util.HashSet;
|
|
import java.util.HashSet;
|
|
import java.util.List;
|
|
import java.util.List;
|
|
import java.util.Set;
|
|
import java.util.Set;
|
|
@@ -32,38 +41,62 @@ public class NotifyTask {
|
|
|
|
|
|
private final IAmsTradeRecordService tradeService;
|
|
private final IAmsTradeRecordService tradeService;
|
|
|
|
|
|
- private final IAmsAirdropProjectService projectService;
|
|
|
|
-
|
|
|
|
private final IAmsAddressAccountService accountService;
|
|
private final IAmsAddressAccountService accountService;
|
|
|
|
|
|
- private final IAmsAirdropTaskService taskService;
|
|
|
|
-
|
|
|
|
- private final IAmsExecuteRecordService executeRecordService;
|
|
|
|
|
|
+ private final IEmailProvider emailProvider;
|
|
private final ParamTemplate paramTemplate;
|
|
private final ParamTemplate paramTemplate;
|
|
|
|
|
|
@XxlJob("ams_weekly_report")
|
|
@XxlJob("ams_weekly_report")
|
|
|
|
+ @SuppressWarnings("all")
|
|
public void statisticsWeeklyReport() {
|
|
public void statisticsWeeklyReport() {
|
|
NotifyTaskResponse response = new NotifyTaskResponse();
|
|
NotifyTaskResponse response = new NotifyTaskResponse();
|
|
|
|
|
|
LocalDateTime startTime = LocalDateTimeUtil.of(DateUtil.lastWeek());
|
|
LocalDateTime startTime = LocalDateTimeUtil.of(DateUtil.lastWeek());
|
|
LocalDateTime endTime = LocalDateTime.now();
|
|
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, startTime, endTime, 0);
|
|
countAddress(response, null, null, 0);
|
|
countAddress(response, null, null, 0);
|
|
countAddress(response, startTime, endTime, 1);
|
|
countAddress(response, startTime, endTime, 1);
|
|
countAddress(response, null, null, 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 emailStr = paramTemplate.getParamValue("str_ams_data_notify_email");
|
|
String[] emails = emailStr.split(StrUtil.COMMA);
|
|
String[] emails = emailStr.split(StrUtil.COMMA);
|
|
Set<String> emailSet = new HashSet<>();
|
|
Set<String> emailSet = new HashSet<>();
|
|
@@ -72,13 +105,40 @@ public class NotifyTask {
|
|
} else {
|
|
} else {
|
|
emailSet.addAll(ListUtil.of(emails));
|
|
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) {
|
|
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);
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
|
|
|
|
}
|
|
}
|