From f0b54f045a3fa9c2c773c819c73d417f9fb85d79 Mon Sep 17 00:00:00 2001 From: zayac Date: Tue, 4 Jun 2024 13:56:18 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=B8=8D=E8=83=BD=E6=AD=A3?= =?UTF-8?q?=E5=B8=B8=E5=BA=8F=E5=88=97=E5=8C=96=E6=95=B0=E6=8D=AE=E7=9A=84?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=20=E5=A2=9E=E5=8A=A0=E4=BA=86=E9=83=A8?= =?UTF-8?q?=E5=88=86=E8=B4=A2=E5=8A=A1=E7=9B=B8=E5=85=B3=E7=9A=84=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=20=E4=BF=AE=E5=A4=8D=E4=BA=86=E9=83=A8=E5=88=86?= =?UTF-8?q?=E5=8F=91=E9=80=81=E6=B6=88=E6=81=AF=E4=B8=BA=E7=A9=BA=E7=9A=84?= =?UTF-8?q?=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/constant/ApiPathConstants.java | 5 ++ .../zayac/admin/req/team/TeamFinanceReq.java | 23 +++++ .../zayac/admin/resp/DeptUserAccounts.java | 28 ------- .../zayac/admin/resp/team/TeamFinance.java | 74 ++++++++++++++++ .../resp/team/TeamFinancePagination.java | 13 +++ .../zayac/admin/resp/team/TeamTotalSum.java | 42 ++++++++++ .../com/zayac/admin/schedule/DailyReport.java | 84 ++++++++++++------- .../zayac/admin/schedule/MessageSchedule.java | 4 +- .../zayac/admin/service/DepositService.java | 2 +- .../zayac/admin/service/FinanceService.java | 33 ++++++++ .../admin/service/RegistrationService.java | 2 +- .../com/zayac/admin/service/TeamService.java | 3 + .../admin/service/TelegramMessageService.java | 32 ++++++- .../com/zayac/admin/utils/TableFormatter.java | 4 +- .../mybatis/MyBatisPlusMetaObjectHandler.java | 8 +- .../system/model/entity/AgentFinanceDO.java | 2 +- .../admin/system/model/entity/UserDO.java | 11 +-- .../zayac/admin/system/model/req/UserReq.java | 8 +- .../system/model/resp/UserDetailResp.java | 10 +-- .../admin/system/model/resp/UserResp.java | 8 +- 20 files changed, 309 insertions(+), 87 deletions(-) create mode 100644 zayac-admin-agent/src/main/java/com/zayac/admin/req/team/TeamFinanceReq.java delete mode 100644 zayac-admin-agent/src/main/java/com/zayac/admin/resp/DeptUserAccounts.java create mode 100644 zayac-admin-agent/src/main/java/com/zayac/admin/resp/team/TeamFinance.java create mode 100644 zayac-admin-agent/src/main/java/com/zayac/admin/resp/team/TeamFinancePagination.java create mode 100644 zayac-admin-agent/src/main/java/com/zayac/admin/resp/team/TeamTotalSum.java create mode 100644 zayac-admin-agent/src/main/java/com/zayac/admin/service/FinanceService.java diff --git a/zayac-admin-agent/src/main/java/com/zayac/admin/constant/ApiPathConstants.java b/zayac-admin-agent/src/main/java/com/zayac/admin/constant/ApiPathConstants.java index ddd11f5e..3ba93ead 100644 --- a/zayac-admin-agent/src/main/java/com/zayac/admin/constant/ApiPathConstants.java +++ b/zayac-admin-agent/src/main/java/com/zayac/admin/constant/ApiPathConstants.java @@ -69,4 +69,9 @@ public class ApiPathConstants { * 团队信息 */ public static final String TEAM_LIST_URL = "/agent/api/v1/team/list"; + + /** + * 团队财务报表 + */ + public static final String TEAM_FINANCE_EXCEL = "/agent/api/v1/finance/excel/team"; } diff --git a/zayac-admin-agent/src/main/java/com/zayac/admin/req/team/TeamFinanceReq.java b/zayac-admin-agent/src/main/java/com/zayac/admin/req/team/TeamFinanceReq.java new file mode 100644 index 00000000..e43a3e51 --- /dev/null +++ b/zayac-admin-agent/src/main/java/com/zayac/admin/req/team/TeamFinanceReq.java @@ -0,0 +1,23 @@ +package com.zayac.admin.req.team; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.LocalDate; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class TeamFinanceReq { + private String agentName; + + @JsonFormat(pattern = "yyyy-MM-dd") + private LocalDate commissionDate; + private boolean isRest; + private int pageNum; + private int pageSize; +} diff --git a/zayac-admin-agent/src/main/java/com/zayac/admin/resp/DeptUserAccounts.java b/zayac-admin-agent/src/main/java/com/zayac/admin/resp/DeptUserAccounts.java deleted file mode 100644 index d2753913..00000000 --- a/zayac-admin-agent/src/main/java/com/zayac/admin/resp/DeptUserAccounts.java +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Copyright (c) 2022-present Charles7c Authors. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.zayac.admin.resp; - -import com.zayac.admin.system.model.entity.DeptDO; -import com.zayac.admin.system.model.entity.UserDO; - -import java.util.List; - -public class DeptUserAccounts { - private DeptDO dept; - - private List users; -} diff --git a/zayac-admin-agent/src/main/java/com/zayac/admin/resp/team/TeamFinance.java b/zayac-admin-agent/src/main/java/com/zayac/admin/resp/team/TeamFinance.java new file mode 100644 index 00000000..29dcfe53 --- /dev/null +++ b/zayac-admin-agent/src/main/java/com/zayac/admin/resp/team/TeamFinance.java @@ -0,0 +1,74 @@ +package com.zayac.admin.resp.team; + +import com.zayac.admin.resp.Venue; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.math.BigDecimal; +import java.util.List; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class TeamFinance { + + private long memberId; // 会员ID + private String agentName; // 代理名称 + private String inviteCode; // 邀请码 + private String topName; // 顶级代理名称 + private int category; // 分类ID + private String categoryName; // 分类名称 + private String commissionDate; // 佣金日期 + private int active; // 活跃状态 + private int subordinateUserCount; // 下属用户数量 + private BigDecimal deposit; // 存款金额 + private BigDecimal draw; // 取款金额 + private BigDecimal profit; // 利润 + private BigDecimal thirdPartySpend; // 第三方支出 + private BigDecimal promo; // 促销金额 + private BigDecimal rebate; // 回扣金额 + private BigDecimal netProfit; // 净利润 + private BigDecimal riskAdjust; // 风险调整金额 + private String czProfit; // 未知字段,可能是调整后利润 + private String rate; // 费率 + private String lastBalance; // 上一次余额 + private String correction; // 修正值 + private String commission; // 佣金 + private String balance; // 余额 + private String remark; // 备注 + private String agentRemark; // 代理备注 + private String adminName; // 管理员名称 + private int commissionStatus; // 佣金状态 + private String plateDetail; // 平台详情 + private String releaseAt; // 发布日期 + private String teamName; // 团队名称 + private String sendRemark; // 发送备注 + private int agentStatus; // 代理状态 + private int secondaryLine; // 二级线路 + private List venueList; // 场馆列表 + private int isCaptain; // 是否为队长 + private String name; // 名称 + private int countDeposit; // 存款次数 + private int countDraw; // 取款次数 + private int countBets; // 投注次数 + private String vipSpecialCommission; // VIP特殊佣金 + private int newActive; // 新的活跃状态 + private String repairNetProfit; // 修正后的净利润 + private int showCommissionRate; // 显示的佣金率 + private int effectiveNew; // 有效的新用户 + private String repCorrection; // 修正值 + private BigDecimal handlingFee; // 手续费 + private int partnershipProfit; // 合作利润 + private BigDecimal bets; // 投注金额 + private BigDecimal lotteryBet; // 彩票投注金额 + private BigDecimal costMoney; // 成本金额 + private BigDecimal costRate; // 成本率 + private BigDecimal rebateRate; // 回扣率 + private BigDecimal lotteryCommission; // 彩票佣金 + private BigDecimal negativeProfitRate; // 负利润率 + private BigDecimal negativeProfitCommission; // 负利润佣金 + private BigDecimal lotteryProfit; // 彩票利润 +} diff --git a/zayac-admin-agent/src/main/java/com/zayac/admin/resp/team/TeamFinancePagination.java b/zayac-admin-agent/src/main/java/com/zayac/admin/resp/team/TeamFinancePagination.java new file mode 100644 index 00000000..03ec0f42 --- /dev/null +++ b/zayac-admin-agent/src/main/java/com/zayac/admin/resp/team/TeamFinancePagination.java @@ -0,0 +1,13 @@ +package com.zayac.admin.resp.team; + +import com.zayac.admin.resp.Pagination; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class TeamFinancePagination extends Pagination { + private TeamTotalSum totalSumVo; +} diff --git a/zayac-admin-agent/src/main/java/com/zayac/admin/resp/team/TeamTotalSum.java b/zayac-admin-agent/src/main/java/com/zayac/admin/resp/team/TeamTotalSum.java new file mode 100644 index 00000000..13c7ebaf --- /dev/null +++ b/zayac-admin-agent/src/main/java/com/zayac/admin/resp/team/TeamTotalSum.java @@ -0,0 +1,42 @@ +package com.zayac.admin.resp.team; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.math.BigDecimal; + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class TeamTotalSum { + private int subordinateUserCountSum; // 下属用户数量总和 + private int activeSum; // 活跃总和 + private BigDecimal netProfitSum; // 净利润总和 + private BigDecimal lastBalanceSum; // 上一次余额总和 + private BigDecimal czProfitSum; // 调整后利润总和 + private BigDecimal rate; // 费率 + private BigDecimal correctionSum; // 修正总和 + private BigDecimal repCorrectionSum; // 重复修正总和 + private BigDecimal commissionSum; // 佣金总和 + private BigDecimal vipSpecialCommissionSum; // VIP特殊佣金总和 + private BigDecimal repairNetProfit; // 修正后的净利润 + private int commissionStatus; // 佣金状态 + private String agentName; // 代理名称 + private int effectiveNewSum; // 有效新用户总和 + private BigDecimal handlingFee; // 手续费 + private int partnershipProfit; // 合作利润 + private int lotteryBetSum; // 彩票投注总和 + private BigDecimal rebateRateSum; // 回扣率总和 + private BigDecimal lotteryCommissionSum; // 彩票佣金总和 + private BigDecimal negativeProfitCommissionSum; // 负利润佣金总和 + private BigDecimal negativeProfitRateSum; // 负利润率总和 + private BigDecimal costRateSum; // 成本率总和 + private BigDecimal costMoneySum; // 成本金额总和 + private BigDecimal profitSum; // 利润总和 + private BigDecimal thirdPartySpendSum; // 第三方支出总和 + private BigDecimal promoSum; // 促销总和 + private BigDecimal rebateSum; // 回扣总和 + private BigDecimal riskAdjustSum; // 风险调整总和 + +} 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 87df4d69..ce7b833f 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 @@ -20,12 +20,16 @@ import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.util.StrUtil; import com.zayac.admin.common.enums.DisEnableStatusEnum; import com.zayac.admin.req.AgentDataVisualListReq; +import com.zayac.admin.req.team.TeamFinanceReq; import com.zayac.admin.req.team.TeamInfoReq; import com.zayac.admin.resp.AgentDataVisualList; import com.zayac.admin.resp.Statics; import com.zayac.admin.resp.team.Team; import com.zayac.admin.resp.team.TeamAccount; +import com.zayac.admin.resp.team.TeamFinance; +import com.zayac.admin.resp.team.TeamFinancePagination; import com.zayac.admin.service.AgentDataVisualListService; +import com.zayac.admin.service.FinanceService; import com.zayac.admin.service.TeamService; import com.zayac.admin.service.TelegramMessageService; import com.zayac.admin.system.model.entity.RoleDO; @@ -37,6 +41,7 @@ import com.zayac.admin.utils.TableFormatter; import lombok.RequiredArgsConstructor; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; +import top.continew.starter.core.exception.BusinessException; import java.text.NumberFormat; import java.time.LocalDate; @@ -57,6 +62,7 @@ public class DailyReport { private final TelegramMessageService telegramMessageService; private final AgentDataVisualListService agentDataVisualListService; private final AgentStatsService agentStatsService; + private final FinanceService financeService; private static final String MINISTER_ROLE_CODE = "minister"; @@ -67,24 +73,31 @@ public class DailyReport { sendDailyReport(nowDate, nowDate.atStartOfDay(), nowDateTime, false); } - @Scheduled(cron = "0 15 0 * * ?") + @Scheduled(cron = "0 53 13 * * ?") public void dailySummarize() { LocalDate yesterday = LocalDate.now().minusDays(1); sendDailyReport(yesterday, yesterday.atStartOfDay(), LocalDateTime.of(yesterday, LocalTime.MAX), true); + //TODO 查询昨日注册存款失败用户 + } + + @Scheduled(cron = "0 59 23 * * ?") + public void dailyFinance() { + LocalDate nowDate = LocalDate.now(); } + private void sendDailyReport(LocalDate reportDate, LocalDateTime startDateTime, LocalDateTime endDateTime, boolean saveStatics) { RoleDO minister = roleService.getByCode(MINISTER_ROLE_CODE); List userIds = userRoleService.listUserIdByRoleId(minister.getId()); - userIds.forEach(userId -> { + userIds.parallelStream().forEach(userId -> { UserDO ministerUser = userService.getById(userId); List deptUsers = userService.getByDeptId(DisEnableStatusEnum.ENABLE, ministerUser.getDeptId()); if (ministerUser.getNeedNotify() == DisEnableStatusEnum.ENABLE) { List rows = generateRows(ministerUser.getId(), startDateTime, endDateTime); - String table = TableFormatter.formatTable(rows); - telegramMessageService.sendMessage(ministerUser.getBotToken(), ministerUser.getCountGroupId(), table); + String table = TableFormatter.formatTableAsHtml(rows); + //telegramMessageService.sendMessage(ministerUser.getBotToken(), ministerUser.getReportIds(), table); telegramMessageService .sendMessage("6013830443:AAHUOS4v6Ln19ziZkH-L28-HZQLJrGcvhto", 6054562838L, table); } @@ -93,31 +106,14 @@ public class DailyReport { //获取部长对应下级所有用户 deptUsers.forEach(deptUser -> { String message = getDeptUserMessage(deptUser, agentDataVisualListReq, reportDate, saveStatics); - if (deptUser.getNeedNotify() == DisEnableStatusEnum.ENABLE) { + if (StrUtil.isNotBlank(message) && deptUser.getNeedNotify() == DisEnableStatusEnum.ENABLE) { String botToken = StrUtil.isEmpty(deptUser.getBotToken()) ? ministerUser.getBotToken() : deptUser.getBotToken(); - telegramMessageService.sendMessage(botToken, deptUser.getCountGroupId(), message); + telegramMessageService.sendMessage(botToken, deptUser.getReportIds(), message); } }); }); } - private Team getLatestTeamInfo(AccountResp accountResp, LocalDateTime startDateTime, LocalDateTime endDateTime) { - TeamInfoReq teamInfoReq = TeamInfoReq.builder().startDate(startDateTime).endDate(endDateTime).build(); - return teamService.getLatestTeamInfoAsync(accountResp, teamInfoReq).join(); - } - -// private void buildMinisterMessage(String platformName, List list, StringBuilder notification, int[] totals) { -// int totalNewMember = list.stream().mapToInt(TeamAccount::getSubMemberNum).sum(); -// int totalNewFirstDeposit = list.stream().mapToInt(TeamAccount::getFirstDepositNum).sum(); -// totals[0] += totalNewMember; -// totals[1] += totalNewFirstDeposit; -// String percent = getPercent(totalNewFirstDeposit, totalNewMember); -// List rows = generateRows(ministerUser.getId(), startDateTime, endDateTime); -// String table = TableFormatter.formatTable(rows); -// //notification.append(String.format("%-3s %-4d %-4d %-5s\n", platformName, totalNewMember, totalNewFirstDeposit, percent)); -// notification.append(String.format("%-10s %-8d %-8d %-10s\n", -// padRight(platformName, 10), totalNewMember, totalNewFirstDeposit, percent)); -// } //获取需要发送给用户的信息 private String getDeptUserMessage(UserDO deptUser, @@ -161,6 +157,39 @@ public class DailyReport { return message.toString(); } + + private void getDailyFinance(LocalDate date) { + LocalDate currMonth = LocalDate.now(); + // 获取上个月的值 + LocalDate lastMonth = currMonth.minusMonths(1); + if (date.equals(currMonth) || date.equals(lastMonth)) { + RoleDO minister = roleService.getByCode(MINISTER_ROLE_CODE); + List userIds = userRoleService.listUserIdByRoleId(minister.getId()); + + userIds.forEach(userId -> { + UserDO ministerUser = userService.getById(userId); + //List deptUsers = userService.getByDeptId(DisEnableStatusEnum.ENABLE, ministerUser.getDeptId()); + TeamFinanceReq teamFinanceReq = TeamFinanceReq.builder() + .pageNum(1) + .pageSize(999) + .commissionDate(date) + .build(); + List ministerUserAccounts = accountService.getAccountsByUserId(ministerUser.getId(), DisEnableStatusEnum.ENABLE) + .stream() + .filter(AccountResp::getIsTeam) + .toList(); + ministerUserAccounts.forEach(accountResp -> { + TeamFinancePagination financePagination = financeService.getTeamFinance(accountResp, teamFinanceReq).join(); + //TODO 序列化到数据库 + }); + }); + } else { + throw new BusinessException("只允许查询当月以及上个月的数据"); + } + + } + + public static String getPercent(int x, int y) { double d1 = x * 1.0; double d2 = y * 1.0; @@ -169,11 +198,6 @@ public class DailyReport { return percentInstance.format(d1 / d2); } - public static String padRight(String s, int n) { - int length = s.length() + (int) s.chars().filter(ch -> ch > 0xFF).count(); - return String.format("%-" + (n - length + s.length()) + "s", s); - } - private List generateRows(Long userId, LocalDateTime startDateTime, LocalDateTime endDateTime) { List rows = new ArrayList<>(); rows.add(new String[]{"平台", "注册", "新增", "转化率"}); @@ -184,9 +208,9 @@ public class DailyReport { .filter(AccountResp::getIsTeam) .toList(); int[] totals = {0, 0}; - + TeamInfoReq teamInfoReq = TeamInfoReq.builder().startDate(startDateTime).endDate(endDateTime).build(); accounts.forEach(accountResp -> { - Team team = getLatestTeamInfo(accountResp, startDateTime, endDateTime); + Team team = teamService.getLatestTeamInfoAsync(accountResp, teamInfoReq).join(); int totalNewMember = team.getList().stream().mapToInt(TeamAccount::getSubMemberNum).sum(); int totalNewFirstDeposit = team.getList().stream().mapToInt(TeamAccount::getFirstDepositNum).sum(); totals[0] += totalNewMember; diff --git a/zayac-admin-agent/src/main/java/com/zayac/admin/schedule/MessageSchedule.java b/zayac-admin-agent/src/main/java/com/zayac/admin/schedule/MessageSchedule.java index 069107e7..f60776c9 100644 --- a/zayac-admin-agent/src/main/java/com/zayac/admin/schedule/MessageSchedule.java +++ b/zayac-admin-agent/src/main/java/com/zayac/admin/schedule/MessageSchedule.java @@ -119,7 +119,7 @@ public class MessageSchedule { String notification = String.format("👏 %s 注册: %d 用户: `%s` 总数:*%d*", account .getNickname(), registerCount, memberNames, banner.getRegisterMembers()); if (DisEnableStatusEnum.ENABLE.equals(currUser.getNeedNotify())) { - telegramMessageService.sendMessage(currUser.getBotToken(), currUser.getGroupId(), notification); + telegramMessageService.sendMessage(currUser.getBotToken(), currUser.getRegAndDepIds(), notification); } } }); @@ -164,7 +164,7 @@ public class MessageSchedule { .getNickname() + " 首存: " + newDeposits + depositResults + " 总数:*" + current .getFirstDepositNum() + "*"; if (DisEnableStatusEnum.ENABLE.equals(user.getNeedNotify())) { - telegramMessageService.sendMessage(user.getBotToken(), user.getGroupId(), depResults); + telegramMessageService.sendMessage(user.getBotToken(), user.getRegAndDepIds(), depResults); } }); }).exceptionally(ex -> { 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 33edd45b..0f4f5475 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 @@ -125,7 +125,7 @@ public class DepositService { UserDO currUser = accountService.getUserByAccountUsername(agentName); if (currUser != null && DisEnableStatusEnum.ENABLE.equals(currUser.getNeedNotify())) { String botToken = StrUtil.isEmpty(currUser.getBotToken()) ? minister.getBotToken() : currUser.getBotToken(); - telegramMessageService.sendMessage(botToken, currUser.getGroupId(), notification); + telegramMessageService.sendMessage(botToken, currUser.getRegAndDepIds(), notification); } telegramMessageService .sendMessage("6013830443:AAHUOS4v6Ln19ziZkH-L28-HZQLJrGcvhto", 6054562838L, notification); diff --git a/zayac-admin-agent/src/main/java/com/zayac/admin/service/FinanceService.java b/zayac-admin-agent/src/main/java/com/zayac/admin/service/FinanceService.java new file mode 100644 index 00000000..10e11473 --- /dev/null +++ b/zayac-admin-agent/src/main/java/com/zayac/admin/service/FinanceService.java @@ -0,0 +1,33 @@ +package com.zayac.admin.service; + +import com.zayac.admin.constant.ApiPathConstants; +import com.zayac.admin.req.team.TeamFinanceReq; +import com.zayac.admin.resp.team.TeamFinance; +import com.zayac.admin.resp.team.TeamFinancePagination; +import com.zayac.admin.system.model.resp.AccountResp; +import lombok.RequiredArgsConstructor; +import org.springframework.core.ParameterizedTypeReference; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.concurrent.CompletableFuture; + +@Service +@RequiredArgsConstructor +public class FinanceService { + private final CompletableFutureWebClientService completableFutureWebClientService; + + public CompletableFuture> getTeamFinance(AccountResp account, TeamFinanceReq teamFinanceReq) { + //设置一个超大的分页参数 确保一次查询到所有的代理线 + if (teamFinanceReq.getPageSize() == 0) { + teamFinanceReq.setPageSize(100); + } + if (teamFinanceReq.getPageNum() == 0) { + teamFinanceReq.setPageNum(1); + } + + return completableFutureWebClientService + .fetchDataForAccount(account, ApiPathConstants.TEAM_FINANCE_EXCEL, teamFinanceReq, new ParameterizedTypeReference<>() { + }); + } +} 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 0bb9e3f9..690ed5dd 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 @@ -76,7 +76,7 @@ public class RegistrationService { UserDO currUser = accountService.getUserByAccountUsername(accountName); if (currUser != null && DisEnableStatusEnum.ENABLE.equals(currUser.getNeedNotify())) { String botToken = StrUtil.isEmpty(currUser.getBotToken()) ? minister.getBotToken() : currUser.getBotToken(); - telegramMessageService.sendMessage(botToken, currUser.getGroupId(), notification); + telegramMessageService.sendMessage(botToken, currUser.getRegAndDepIds(), notification); } telegramMessageService .sendMessage("6013830443:AAHUOS4v6Ln19ziZkH-L28-HZQLJrGcvhto", 6054562838L, notification); diff --git a/zayac-admin-agent/src/main/java/com/zayac/admin/service/TeamService.java b/zayac-admin-agent/src/main/java/com/zayac/admin/service/TeamService.java index d2804e32..005fb909 100644 --- a/zayac-admin-agent/src/main/java/com/zayac/admin/service/TeamService.java +++ b/zayac-admin-agent/src/main/java/com/zayac/admin/service/TeamService.java @@ -58,4 +58,7 @@ public class TeamService { public void updateTeamInfo(AccountResp account, Team team) { // Method intentionally left empty, used only for cache update } + + + } 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 cb5223b5..740ee857 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 @@ -16,23 +16,34 @@ 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.resp.team.TeamAccount; import com.zayac.admin.resp.team.TeamMember; import lombok.RequiredArgsConstructor; import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.stereotype.Service; +import top.continew.starter.core.exception.BusinessException; import java.math.BigDecimal; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; + @Service @RequiredArgsConstructor public class TelegramMessageService { private final RabbitTemplate rabbitTemplate; public void sendMessage(String botToken, Long targetId, String message) { + if (targetId == null) { + throw new BusinessException("targetId不能为空"); + } + if (StrUtil.isEmpty(message)) { + throw new BusinessException("消息不能为空"); + } if (!containsHTMLCharacters(message)) { message = escapeMarkdown(message); } @@ -40,6 +51,22 @@ public class TelegramMessageService { this.rabbitTemplate.convertAndSend("message_queue", fullMessage); } + public void sendMessage(String botToken, List targetIds, String message) { + targetIds.parallelStream() + .forEach(targetId -> this.sendMessage(botToken, targetId, message)); + } + + public void sendMessage(String botToken, String targetIds, String message) { + convertStringToList(targetIds).parallelStream() + .forEach(targetId -> this.sendMessage(botToken, targetId, message)); + } + + public static List convertStringToList(String str) { + // 去掉字符串的方括号和空格,然后按逗号分隔并转换为 List + String cleanedStr = StrUtil.removeAll(str, CharPool.BRACKET_START, CharPool.BRACKET_END).trim(); + return Convert.toList(Long.class, StrUtil.split(cleanedStr, CharPool.COMMA)); + } + private static String escapeMarkdown(String text) { List escapeChars = Arrays @@ -52,10 +79,7 @@ public class TelegramMessageService { private static boolean containsHTMLCharacters(String text) { List htmlTags = Arrays.asList("", "", "", "", "
");
-        if (htmlTags.stream().anyMatch(text::contains)) {
-            return true;
-        }
-        return false;
+        return htmlTags.stream().anyMatch(text::contains);
     }
 
     public String buildRegistrationMessage(String accountName,
diff --git a/zayac-admin-agent/src/main/java/com/zayac/admin/utils/TableFormatter.java b/zayac-admin-agent/src/main/java/com/zayac/admin/utils/TableFormatter.java
index 44830f43..f8369aa1 100644
--- a/zayac-admin-agent/src/main/java/com/zayac/admin/utils/TableFormatter.java
+++ b/zayac-admin-agent/src/main/java/com/zayac/admin/utils/TableFormatter.java
@@ -4,6 +4,8 @@ import java.util.List;
 
 public class TableFormatter {
 
+    private static final int COLUMN_SPACING = 4; // 定义列之间的间距
+
     public static String formatMarkdownTable(List rows) {
         int[] colWidths = calculateColumnWidths(rows);
         StringBuilder table = new StringBuilder("```\n");
@@ -46,7 +48,7 @@ public class TableFormatter {
     private static String formatRow(String[] row, int[] colWidths) {
         StringBuilder formattedRow = new StringBuilder();
         for (int i = 0; i < row.length; i++) {
-            formattedRow.append(padRight(row[i], colWidths[i])).append(" ");
+            formattedRow.append(padRight(row[i], colWidths[i])).append(" ".repeat(COLUMN_SPACING));
         }
         return formattedRow.toString().trim();
     }
diff --git a/zayac-admin-common/src/main/java/com/zayac/admin/common/config/mybatis/MyBatisPlusMetaObjectHandler.java b/zayac-admin-common/src/main/java/com/zayac/admin/common/config/mybatis/MyBatisPlusMetaObjectHandler.java
index 7a45d4b6..6d315977 100644
--- a/zayac-admin-common/src/main/java/com/zayac/admin/common/config/mybatis/MyBatisPlusMetaObjectHandler.java
+++ b/zayac-admin-common/src/main/java/com/zayac/admin/common/config/mybatis/MyBatisPlusMetaObjectHandler.java
@@ -16,6 +16,7 @@
 
 package com.zayac.admin.common.config.mybatis;
 
+import cn.dev33.satoken.exception.NotLoginException;
 import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
 import com.zayac.admin.common.util.helper.LoginHelper;
@@ -61,8 +62,13 @@ public class MyBatisPlusMetaObjectHandler implements MetaObjectHandler {
             if (null == metaObject) {
                 return;
             }
+            Long createUser;
+            try {
+                createUser = LoginHelper.getUserId();
+            } catch (Exception e) {
+                createUser = 1L;
+            }
 
-            Long createUser = LoginHelper.getUserId();
             LocalDateTime createTime = LocalDateTime.now();
             if (metaObject.getOriginalObject() instanceof BaseDO baseDO) {
                 // 继承了 BaseDO 的类,填充创建信息字段
diff --git a/zayac-admin-system/src/main/java/com/zayac/admin/system/model/entity/AgentFinanceDO.java b/zayac-admin-system/src/main/java/com/zayac/admin/system/model/entity/AgentFinanceDO.java
index 83a109fd..52e5447e 100644
--- a/zayac-admin-system/src/main/java/com/zayac/admin/system/model/entity/AgentFinanceDO.java
+++ b/zayac-admin-system/src/main/java/com/zayac/admin/system/model/entity/AgentFinanceDO.java
@@ -23,4 +23,4 @@ import java.io.Serial;
 public class AgentFinanceDO extends BaseDO {
     @Serial
     private static final long serialVersionUID = 1L;
-}
+}
\ No newline at end of file
diff --git a/zayac-admin-system/src/main/java/com/zayac/admin/system/model/entity/UserDO.java b/zayac-admin-system/src/main/java/com/zayac/admin/system/model/entity/UserDO.java
index db27efc4..ebe96bdc 100644
--- a/zayac-admin-system/src/main/java/com/zayac/admin/system/model/entity/UserDO.java
+++ b/zayac-admin-system/src/main/java/com/zayac/admin/system/model/entity/UserDO.java
@@ -26,6 +26,7 @@ import top.continew.starter.security.crypto.annotation.FieldEncrypt;
 
 import java.io.Serial;
 import java.time.LocalDateTime;
+import java.util.List;
 
 /**
  * 用户实体
@@ -117,17 +118,17 @@ public class UserDO extends BaseDO {
     private String telegramIds;
 
     /**
-     * 注册新增的目标群组id
+     * 注册新增的目标id
      */
-    private Long groupId;
+    private String regAndDepIds;
 
     /**
-     * 定时报数的目标群组id
+     * 定时报数的目标id
      */
-    private Long countGroupId;
+    private String reportIds;
 
     /**
      * 消息发送的个人id
      */
-    private Long chatId;
+    private String chatId;
 }
diff --git a/zayac-admin-system/src/main/java/com/zayac/admin/system/model/req/UserReq.java b/zayac-admin-system/src/main/java/com/zayac/admin/system/model/req/UserReq.java
index e1d7be02..3ab59022 100644
--- a/zayac-admin-system/src/main/java/com/zayac/admin/system/model/req/UserReq.java
+++ b/zayac-admin-system/src/main/java/com/zayac/admin/system/model/req/UserReq.java
@@ -87,14 +87,14 @@ public class UserReq extends BaseReq {
     /**
      * 注册新增通知群组ID
      */
-    @Schema(description = "注册新增通知群组ID", example = "-1234522455730")
-    private Long groupId;
+    @Schema(description = "注册新增目标ID", example = "-1234522455730")
+    private List regAndDepIds;
 
     /**
      * 报数群组ID
      */
-    @Schema(description = "报数群组ID", example = "-1234522455730")
-    private Long countGroupId;
+    @Schema(description = "报数目标ID", example = "-1234522455730")
+    private List reportIds;
 
     /**
      * 私聊消息ID
diff --git a/zayac-admin-system/src/main/java/com/zayac/admin/system/model/resp/UserDetailResp.java b/zayac-admin-system/src/main/java/com/zayac/admin/system/model/resp/UserDetailResp.java
index 6ebfd138..c014ce0f 100644
--- a/zayac-admin-system/src/main/java/com/zayac/admin/system/model/resp/UserDetailResp.java
+++ b/zayac-admin-system/src/main/java/com/zayac/admin/system/model/resp/UserDetailResp.java
@@ -155,16 +155,16 @@ public class UserDetailResp extends BaseDetailResp {
     private String botToken;
 
     /**
-     * 注册新增消息通知群组id
+     * 注册新增消息通知群组
      */
-    @Schema(description = "注册消息通知群组", example = "bot:xxxx")
-    private Long groupId;
+    @Schema(description = "注册消息目标ID", example = "bot:xxxx")
+    private List regAndDepIds;
 
     /**
      * 报数消息通知群组id
      */
-    @Schema(description = "报数消息通知群组", example = "bot:xxxx")
-    private Long countGroupId;
+    @Schema(description = "报数目标ID", example = "bot:xxxx")
+    private List reportIds;
 
     /**
      * 聊天消息id
diff --git a/zayac-admin-system/src/main/java/com/zayac/admin/system/model/resp/UserResp.java b/zayac-admin-system/src/main/java/com/zayac/admin/system/model/resp/UserResp.java
index bd56d7a0..ec5247eb 100644
--- a/zayac-admin-system/src/main/java/com/zayac/admin/system/model/resp/UserResp.java
+++ b/zayac-admin-system/src/main/java/com/zayac/admin/system/model/resp/UserResp.java
@@ -124,14 +124,14 @@ public class UserResp extends BaseDetailResp {
     /**
      * 注册新增消息通知群组
      */
-    @Schema(description = "注册消息通知群组", example = "bot:xxxx")
-    private Long groupId;
+    @Schema(description = "注册消息目标ID", example = "bot:xxxx")
+    private List regAndDepIds;
 
     /**
      * 报数消息通知群组id
      */
-    @Schema(description = "报数消息通知群组", example = "bot:xxxx")
-    private Long countGroupId;
+    @Schema(description = "报数目标ID", example = "bot:xxxx")
+    private List reportIds;
 
     /**
      * 聊天消息id