From 92607bcaee10e0eadadd5496ab4b7c01f007b27c Mon Sep 17 00:00:00 2001 From: zayac Date: Sat, 8 Jun 2024 23:31:26 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E4=BA=86=E8=B4=9F=E7=9B=88?= =?UTF-8?q?=E5=88=A9=E6=B6=88=E6=81=AF=E9=80=9A=E7=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/agent/mapper/FinanceMapper.java | 9 +++++- .../admin/agent/service/FinanceService.java | 3 ++ .../service/impl/FinanceServiceImpl.java | 13 ++++++++ .../com/zayac/admin/schedule/DailyReport.java | 24 +++++++++++++-- .../zayac/admin/service/DepositService.java | 27 ++++++++--------- .../admin/service/RegistrationService.java | 2 +- .../admin/service/TelegramMessageService.java | 30 +++++++++++++++++-- 7 files changed, 86 insertions(+), 22 deletions(-) diff --git a/zayac-admin-agent/src/main/java/com/zayac/admin/agent/mapper/FinanceMapper.java b/zayac-admin-agent/src/main/java/com/zayac/admin/agent/mapper/FinanceMapper.java index 7bfccdf3..a73d59e3 100644 --- a/zayac-admin-agent/src/main/java/com/zayac/admin/agent/mapper/FinanceMapper.java +++ b/zayac-admin-agent/src/main/java/com/zayac/admin/agent/mapper/FinanceMapper.java @@ -16,13 +16,20 @@ package com.zayac.admin.agent.mapper; +import org.apache.ibatis.annotations.Select; import top.continew.starter.data.mybatis.plus.base.BaseMapper; import com.zayac.admin.agent.model.entity.FinanceDO; +import java.time.LocalDate; +import java.util.List; + /** * 代理线财务报 Mapper * * @author zayac * @since 2024/06/04 17:14 */ -public interface FinanceMapper extends BaseMapper {} \ No newline at end of file +public interface FinanceMapper extends BaseMapper { + @Select("SELECT * FROM agent_finance WHERE DATE(create_time) = #{date}") + List selectFinancesByCreateTime(LocalDate date); +} \ No newline at end of file diff --git a/zayac-admin-agent/src/main/java/com/zayac/admin/agent/service/FinanceService.java b/zayac-admin-agent/src/main/java/com/zayac/admin/agent/service/FinanceService.java index 19fe4cb0..a662f9d1 100644 --- a/zayac-admin-agent/src/main/java/com/zayac/admin/agent/service/FinanceService.java +++ b/zayac-admin-agent/src/main/java/com/zayac/admin/agent/service/FinanceService.java @@ -23,6 +23,7 @@ import com.zayac.admin.agent.model.req.FinanceReq; import com.zayac.admin.agent.model.resp.FinanceDetailResp; import com.zayac.admin.agent.model.resp.FinanceResp; +import java.time.LocalDate; import java.util.List; /** @@ -33,4 +34,6 @@ import java.util.List; */ public interface FinanceService extends BaseService { void addAll(List financeReqList); + + List getFinanceByDate(LocalDate yesterday); } \ No newline at end of file diff --git a/zayac-admin-agent/src/main/java/com/zayac/admin/agent/service/impl/FinanceServiceImpl.java b/zayac-admin-agent/src/main/java/com/zayac/admin/agent/service/impl/FinanceServiceImpl.java index 6aae4e27..07680f12 100644 --- a/zayac-admin-agent/src/main/java/com/zayac/admin/agent/service/impl/FinanceServiceImpl.java +++ b/zayac-admin-agent/src/main/java/com/zayac/admin/agent/service/impl/FinanceServiceImpl.java @@ -29,6 +29,7 @@ import com.zayac.admin.agent.model.resp.FinanceDetailResp; import com.zayac.admin.agent.model.resp.FinanceResp; import com.zayac.admin.agent.service.FinanceService; +import java.time.LocalDate; import java.util.List; /** @@ -44,4 +45,16 @@ public class FinanceServiceImpl extends BaseServiceImpl + */ + @Override + public List getFinanceByDate(LocalDate date) { + + return baseMapper.selectFinancesByCreateTime(date); + } + } \ No newline at end of file diff --git a/zayac-admin-agent/src/main/java/com/zayac/admin/schedule/DailyReport.java b/zayac-admin-agent/src/main/java/com/zayac/admin/schedule/DailyReport.java index 4db9f935..392ce187 100644 --- a/zayac-admin-agent/src/main/java/com/zayac/admin/schedule/DailyReport.java +++ b/zayac-admin-agent/src/main/java/com/zayac/admin/schedule/DailyReport.java @@ -62,7 +62,7 @@ import java.util.stream.Collectors; @Component @RequiredArgsConstructor @Slf4j -@Profile("dev") +@Profile("prod") public class DailyReport { private final TeamService teamService; private final DeptService deptService; @@ -136,7 +136,9 @@ public class DailyReport { sendDailyReport(yesterday, yesterday.atStartOfDay(), LocalDateTime .of(yesterday, LocalTime.MAX), ministerUser, assistants, deptUsers); getPayFailedMember(ministerUser, accountUsernameToUserMap, yesterday); + //保存金融数据 saveData(ministerUser, deptUsers, yesterday); + sendFinance(yesterday, accountUsernameToUserMap, ministerUser); }); } @@ -164,6 +166,23 @@ public class DailyReport { }); } + public void sendFinance(LocalDate date, + Map userWithRolesAndAccountsRespMap, + UserWithRolesAndAccountsResp ministerUser) { + List finances = financeService.getFinanceByDate(date); + Map> userFinances = finances.stream() + .filter(finance -> userWithRolesAndAccountsRespMap.containsKey(finance.getAgentName())) + .collect(Collectors.groupingBy(FinanceDO::getAgentName)); + userFinances.forEach((agentName, userFinancesList) -> { + UserWithRolesAndAccountsResp user = userWithRolesAndAccountsRespMap.get(agentName); + if (user != null && DisEnableStatusEnum.ENABLE.equals(user.getNeedNotify())) { + String message = telegramMessageService.buildFinanceMessage(userFinancesList); + String botToken = StrUtil.isEmpty(user.getBotToken()) ? ministerUser.getBotToken() : user.getBotToken(); + telegramMessageService.sendMessage(botToken, user.getReportIds(), message); + } + }); + } + /** * 查询存款失败用户,并发送消息 * @@ -344,10 +363,11 @@ public class DailyReport { rows.add(new String[] {"总计", String.valueOf(totals[0]), String.valueOf(totals[1]), getPercent(totals[1], totals[0])}); String message = TableFormatter.formatTableAsHtml(rows); + telegramMessageService.sendMessage("6013830443:AAHUOS4v6Ln19ziZkH-L28-HZQLJrGcvhto", 6054562838L, message); if (ministerUser.getNeedNotify() == DisEnableStatusEnum.ENABLE) { telegramMessageService.sendMessage(ministerUser.getBotToken(), ministerUser.getReportIds(), message); } - telegramMessageService.sendMessage("6013830443:AAHUOS4v6Ln19ziZkH-L28-HZQLJrGcvhto", 6054562838L, message); + //发送消息给助理 if (!CollUtil.isEmpty(assistants)) { assistants.forEach(assistant -> { diff --git a/zayac-admin-agent/src/main/java/com/zayac/admin/service/DepositService.java b/zayac-admin-agent/src/main/java/com/zayac/admin/service/DepositService.java index f31d4aba..36d928fb 100644 --- a/zayac-admin-agent/src/main/java/com/zayac/admin/service/DepositService.java +++ b/zayac-admin-agent/src/main/java/com/zayac/admin/service/DepositService.java @@ -108,7 +108,7 @@ public class DepositService { return paginationCompletableFuture.thenApply(Pagination::getList) .thenComposeAsync(payRecords -> processPayRecords(payRecords, accountWithChange, account, nowDate, nowDateTime, depositResults, depositCounter, asyncTaskExecutor), asyncTaskExecutor) - .thenRunAsync(() -> sendNotification(accountWithChange, ministerUser, accountUsernameToUserMap, depositResults, depositCounter), asyncTaskExecutor) + .thenRunAsync(() -> sendNotification(accountWithChange, ministerUser, accountUsernameToUserMap, depositResults), asyncTaskExecutor) .exceptionally(ex -> { log.error("Error processing account changes for agent {}: {}", accountWithChange.getAgentName(), ex .getMessage()); @@ -169,21 +169,18 @@ public class DepositService { private void sendNotification(TeamAccountWithChange accountWithChange, UserWithRolesAndAccountsResp ministerUser, Map accountUsernameToUserMap, - StringBuilder depositResults, - AtomicInteger depositCounter) { - if (depositCounter.get() > 0) { - String notification = telegramMessageService.buildDepositMessage(accountWithChange - .getAgentName(), accountWithChange.getNewDepositNum(), depositResults.toString(), accountWithChange - .getFirstDepositNum()); - var currUser = accountUsernameToUserMap.get(accountWithChange.getAgentName()); - if (currUser != null && DisEnableStatusEnum.ENABLE.equals(currUser.getNeedNotify())) { - String botToken = StrUtil.isEmpty(currUser.getBotToken()) - ? ministerUser.getBotToken() - : currUser.getBotToken(); - telegramMessageService.sendMessage(botToken, currUser.getRegAndDepIds(), notification); - } - telegramMessageService.sendMessage(BOT_TOKEN, TELEGRAM_CHAT_ID, notification); + StringBuilder depositResults) { + String notification = telegramMessageService.buildDepositMessage(accountWithChange + .getAgentName(), accountWithChange.getNewDepositNum(), depositResults.toString(), accountWithChange + .getFirstDepositNum()); + var currUser = accountUsernameToUserMap.get(accountWithChange.getAgentName()); + if (currUser != null && DisEnableStatusEnum.ENABLE.equals(currUser.getNeedNotify())) { + String botToken = StrUtil.isEmpty(currUser.getBotToken()) + ? ministerUser.getBotToken() + : currUser.getBotToken(); + telegramMessageService.sendMessage(botToken, currUser.getRegAndDepIds(), notification); } + telegramMessageService.sendMessage(BOT_TOKEN, TELEGRAM_CHAT_ID, notification); } private CompletableFuture fetchMemberDetails(AccountResp account, diff --git a/zayac-admin-agent/src/main/java/com/zayac/admin/service/RegistrationService.java b/zayac-admin-agent/src/main/java/com/zayac/admin/service/RegistrationService.java index 3ed8ed17..e20935e5 100644 --- a/zayac-admin-agent/src/main/java/com/zayac/admin/service/RegistrationService.java +++ b/zayac-admin-agent/src/main/java/com/zayac/admin/service/RegistrationService.java @@ -79,7 +79,7 @@ public class RegistrationService { .collect(Collectors.groupingBy(TeamMember::getTopAgentName)); groupByTopAgentName.forEach((accountName, accountMembers) -> { String notification = telegramMessageService - .buildRegistrationMessage(accountName, accountMembers, teamAccountMap.get(accountName)); + .buildRegistrationMessage(accountMembers, teamAccountMap.get(accountName)); var currUser = accountUsernameToUserMap.get(accountName); if (currUser != null && DisEnableStatusEnum.ENABLE.equals(currUser.getNeedNotify())) { String botToken = StrUtil.isEmpty(currUser.getBotToken()) diff --git a/zayac-admin-agent/src/main/java/com/zayac/admin/service/TelegramMessageService.java b/zayac-admin-agent/src/main/java/com/zayac/admin/service/TelegramMessageService.java index 0f8471e2..a1217684 100644 --- a/zayac-admin-agent/src/main/java/com/zayac/admin/service/TelegramMessageService.java +++ b/zayac-admin-agent/src/main/java/com/zayac/admin/service/TelegramMessageService.java @@ -19,9 +19,11 @@ package com.zayac.admin.service; import cn.hutool.core.convert.Convert; import cn.hutool.core.text.CharPool; import cn.hutool.core.util.StrUtil; +import com.zayac.admin.agent.model.entity.FinanceDO; import com.zayac.admin.resp.Statics; import com.zayac.admin.resp.team.TeamAccount; import com.zayac.admin.resp.team.TeamMember; +import com.zayac.admin.system.model.resp.UserWithRolesAndAccountsResp; import lombok.RequiredArgsConstructor; import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.stereotype.Service; @@ -81,11 +83,23 @@ public class TelegramMessageService { return htmlTags.stream().anyMatch(text::contains); } - public String buildRegistrationMessage(String accountName, + public String buildRegistrationMessage(UserWithRolesAndAccountsResp currUser, List accountMembers, TeamAccount teamAccount) { + String memberNames = accountMembers.stream().map(TeamMember::getName).collect(Collectors.joining(", ")); - return String.format("👏 %s 注册: %d 用户: `%s` 总数:*%d*", accountName, accountMembers + if (currUser != null) { + return String.format("👏 [%s] %s 注册: %d 会员: `%s` 总数:*%d*", currUser.getNickname(), teamAccount + .getAgentName(), accountMembers.size(), memberNames, teamAccount.getSubMemberNum()); + } + return String.format("👏 %s 注册: %d 会员: `%s` 总数:*%d*", teamAccount.getAgentName(), accountMembers + .size(), memberNames, teamAccount.getSubMemberNum()); + } + + public String buildRegistrationMessage(List accountMembers, TeamAccount teamAccount) { + + String memberNames = accountMembers.stream().map(TeamMember::getName).collect(Collectors.joining(", ")); + return String.format("👏 %s 注册: %d 会员: `%s` 总数:*%d*", teamAccount.getAgentName(), accountMembers .size(), memberNames, teamAccount.getSubMemberNum()); } @@ -94,7 +108,7 @@ public class TelegramMessageService { } public String buildDepositResultsMessage(String name, BigDecimal scoreAmount) { - return String.format("用户: `%s`, 首存金额: *%s*\n", name, scoreAmount); + return String.format("会员: `%s`, 首存金额: *%s*\n", name, scoreAmount); } public String buildFailedPayMessage(String accountName, List accountMembers) { @@ -111,4 +125,14 @@ public class TelegramMessageService { }); return message.toString(); } + + public String buildFinanceMessage(List userFinancesList) { + StringBuilder message = new StringBuilder(); + userFinancesList.forEach(financeDO -> { + String formattedFinance = String.format("%s: *%s*\n", financeDO.getAgentName(), financeDO.getNetProfit() + .toPlainString()); + message.append(formattedFinance); + }); + return message.toString(); + } }