修复不能正常序列化数据的功能

增加了部分财务相关的功能
修复了部分发送消息为空的错误
This commit is contained in:
zayac 2024-06-04 13:56:18 +08:00
parent f0418a8038
commit f0b54f045a
20 changed files with 309 additions and 87 deletions

View File

@ -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";
}

View File

@ -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;
}

View File

@ -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<UserDO> users;
}

View File

@ -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<Venue> 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; // 彩票利润
}

View File

@ -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<T> extends Pagination<T> {
private TeamTotalSum totalSumVo;
}

View File

@ -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; // 风险调整总和
}

View File

@ -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<Long> userIds = userRoleService.listUserIdByRoleId(minister.getId());
userIds.forEach(userId -> {
userIds.parallelStream().forEach(userId -> {
UserDO ministerUser = userService.getById(userId);
List<UserDO> deptUsers = userService.getByDeptId(DisEnableStatusEnum.ENABLE, ministerUser.getDeptId());
if (ministerUser.getNeedNotify() == DisEnableStatusEnum.ENABLE) {
List<String[]> 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<TeamAccount> 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<String[]> 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<Long> userIds = userRoleService.listUserIdByRoleId(minister.getId());
userIds.forEach(userId -> {
UserDO ministerUser = userService.getById(userId);
//List<UserDO> deptUsers = userService.getByDeptId(DisEnableStatusEnum.ENABLE, ministerUser.getDeptId());
TeamFinanceReq teamFinanceReq = TeamFinanceReq.builder()
.pageNum(1)
.pageSize(999)
.commissionDate(date)
.build();
List<AccountResp> ministerUserAccounts = accountService.getAccountsByUserId(ministerUser.getId(), DisEnableStatusEnum.ENABLE)
.stream()
.filter(AccountResp::getIsTeam)
.toList();
ministerUserAccounts.forEach(accountResp -> {
TeamFinancePagination<TeamFinance> 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<String[]> generateRows(Long userId, LocalDateTime startDateTime, LocalDateTime endDateTime) {
List<String[]> 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;

View File

@ -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 -> {

View File

@ -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);

View File

@ -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<TeamFinancePagination<TeamFinance>> 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<>() {
});
}
}

View File

@ -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);

View File

@ -58,4 +58,7 @@ public class TeamService {
public void updateTeamInfo(AccountResp account, Team team) {
// Method intentionally left empty, used only for cache update
}
}

View File

@ -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<Long> 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<Long> convertStringToList(String str) {
// 去掉字符串的方括号和空格然后按逗号分隔并转换为 List<Long>
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<Character> escapeChars = Arrays
@ -52,10 +79,7 @@ public class TelegramMessageService {
private static boolean containsHTMLCharacters(String text) {
List<String> htmlTags = Arrays.asList("<b>", "<i>", "<a>", "<code>", "<pre>");
if (htmlTags.stream().anyMatch(text::contains)) {
return true;
}
return false;
return htmlTags.stream().anyMatch(text::contains);
}
public String buildRegistrationMessage(String accountName,

View File

@ -4,6 +4,8 @@ import java.util.List;
public class TableFormatter {
private static final int COLUMN_SPACING = 4; // 定义列之间的间距
public static String formatMarkdownTable(List<String[]> 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();
}

View File

@ -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 的类填充创建信息字段

View File

@ -23,4 +23,4 @@ import java.io.Serial;
public class AgentFinanceDO extends BaseDO {
@Serial
private static final long serialVersionUID = 1L;
}
}

View File

@ -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;
}

View File

@ -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<Long> regAndDepIds;
/**
* 报数群组ID
*/
@Schema(description = "报数群组ID", example = "-1234522455730")
private Long countGroupId;
@Schema(description = "报数目标ID", example = "-1234522455730")
private List<Long> reportIds;
/**
* 私聊消息ID

View File

@ -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<Long> regAndDepIds;
/**
* 报数消息通知群组id
*/
@Schema(description = "报数消息通知群组", example = "bot:xxxx")
private Long countGroupId;
@Schema(description = "报数目标ID", example = "bot:xxxx")
private List<Long> reportIds;
/**
* 聊天消息id

View File

@ -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<Long> regAndDepIds;
/**
* 报数消息通知群组id
*/
@Schema(description = "报数消息通知群组", example = "bot:xxxx")
private Long countGroupId;
@Schema(description = "报数目标ID", example = "bot:xxxx")
private List<Long> reportIds;
/**
* 聊天消息id