新增了负盈利消息通知

This commit is contained in:
zayac 2024-06-08 23:31:26 +08:00
parent daa6b29579
commit 92607bcaee
7 changed files with 86 additions and 22 deletions

View File

@ -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<FinanceDO> {}
public interface FinanceMapper extends BaseMapper<FinanceDO> {
@Select("SELECT * FROM agent_finance WHERE DATE(create_time) = #{date}")
List<FinanceDO> selectFinancesByCreateTime(LocalDate date);
}

View File

@ -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<FinanceResp, FinanceDetailResp, FinanceQuery, FinanceReq> {
void addAll(List<FinanceDO> financeReqList);
List<FinanceDO> getFinanceByDate(LocalDate yesterday);
}

View File

@ -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<FinanceMapper, FinanceDO
baseMapper.insertBatch(financeReqList);
}
/**
* 根据日期查询所有的财务信息
*
* @param date 日期
* @return List<FinanceDO>
*/
@Override
public List<FinanceDO> getFinanceByDate(LocalDate date) {
return baseMapper.selectFinancesByCreateTime(date);
}
}

View File

@ -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<String, UserWithRolesAndAccountsResp> userWithRolesAndAccountsRespMap,
UserWithRolesAndAccountsResp ministerUser) {
List<FinanceDO> finances = financeService.getFinanceByDate(date);
Map<String, List<FinanceDO>> 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 -> {

View File

@ -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,9 +169,7 @@ public class DepositService {
private void sendNotification(TeamAccountWithChange accountWithChange,
UserWithRolesAndAccountsResp ministerUser,
Map<String, UserWithRolesAndAccountsResp> accountUsernameToUserMap,
StringBuilder depositResults,
AtomicInteger depositCounter) {
if (depositCounter.get() > 0) {
StringBuilder depositResults) {
String notification = telegramMessageService.buildDepositMessage(accountWithChange
.getAgentName(), accountWithChange.getNewDepositNum(), depositResults.toString(), accountWithChange
.getFirstDepositNum());
@ -184,7 +182,6 @@ public class DepositService {
}
telegramMessageService.sendMessage(BOT_TOKEN, TELEGRAM_CHAT_ID, notification);
}
}
private CompletableFuture<Member> fetchMemberDetails(AccountResp account,
String name,

View File

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

View File

@ -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<TeamMember> 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<TeamMember> 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<TeamMember> accountMembers) {
@ -111,4 +125,14 @@ public class TelegramMessageService {
});
return message.toString();
}
public String buildFinanceMessage(List<FinanceDO> 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();
}
}