新增了负盈利消息通知
This commit is contained in:
parent
daa6b29579
commit
92607bcaee
@ -16,13 +16,20 @@
|
|||||||
|
|
||||||
package com.zayac.admin.agent.mapper;
|
package com.zayac.admin.agent.mapper;
|
||||||
|
|
||||||
|
import org.apache.ibatis.annotations.Select;
|
||||||
import top.continew.starter.data.mybatis.plus.base.BaseMapper;
|
import top.continew.starter.data.mybatis.plus.base.BaseMapper;
|
||||||
import com.zayac.admin.agent.model.entity.FinanceDO;
|
import com.zayac.admin.agent.model.entity.FinanceDO;
|
||||||
|
|
||||||
|
import java.time.LocalDate;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 代理线财务报 Mapper
|
* 代理线财务报 Mapper
|
||||||
*
|
*
|
||||||
* @author zayac
|
* @author zayac
|
||||||
* @since 2024/06/04 17:14
|
* @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);
|
||||||
|
}
|
@ -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.FinanceDetailResp;
|
||||||
import com.zayac.admin.agent.model.resp.FinanceResp;
|
import com.zayac.admin.agent.model.resp.FinanceResp;
|
||||||
|
|
||||||
|
import java.time.LocalDate;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -33,4 +34,6 @@ import java.util.List;
|
|||||||
*/
|
*/
|
||||||
public interface FinanceService extends BaseService<FinanceResp, FinanceDetailResp, FinanceQuery, FinanceReq> {
|
public interface FinanceService extends BaseService<FinanceResp, FinanceDetailResp, FinanceQuery, FinanceReq> {
|
||||||
void addAll(List<FinanceDO> financeReqList);
|
void addAll(List<FinanceDO> financeReqList);
|
||||||
|
|
||||||
|
List<FinanceDO> getFinanceByDate(LocalDate yesterday);
|
||||||
}
|
}
|
@ -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.model.resp.FinanceResp;
|
||||||
import com.zayac.admin.agent.service.FinanceService;
|
import com.zayac.admin.agent.service.FinanceService;
|
||||||
|
|
||||||
|
import java.time.LocalDate;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -44,4 +45,16 @@ public class FinanceServiceImpl extends BaseServiceImpl<FinanceMapper, FinanceDO
|
|||||||
baseMapper.insertBatch(financeReqList);
|
baseMapper.insertBatch(financeReqList);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据日期查询所有的财务信息
|
||||||
|
*
|
||||||
|
* @param date 日期
|
||||||
|
* @return List<FinanceDO>
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public List<FinanceDO> getFinanceByDate(LocalDate date) {
|
||||||
|
|
||||||
|
return baseMapper.selectFinancesByCreateTime(date);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
@ -62,7 +62,7 @@ import java.util.stream.Collectors;
|
|||||||
@Component
|
@Component
|
||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
@Slf4j
|
@Slf4j
|
||||||
@Profile("dev")
|
@Profile("prod")
|
||||||
public class DailyReport {
|
public class DailyReport {
|
||||||
private final TeamService teamService;
|
private final TeamService teamService;
|
||||||
private final DeptService deptService;
|
private final DeptService deptService;
|
||||||
@ -136,7 +136,9 @@ public class DailyReport {
|
|||||||
sendDailyReport(yesterday, yesterday.atStartOfDay(), LocalDateTime
|
sendDailyReport(yesterday, yesterday.atStartOfDay(), LocalDateTime
|
||||||
.of(yesterday, LocalTime.MAX), ministerUser, assistants, deptUsers);
|
.of(yesterday, LocalTime.MAX), ministerUser, assistants, deptUsers);
|
||||||
getPayFailedMember(ministerUser, accountUsernameToUserMap, yesterday);
|
getPayFailedMember(ministerUser, accountUsernameToUserMap, yesterday);
|
||||||
|
//保存金融数据
|
||||||
saveData(ministerUser, deptUsers, 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]),
|
rows.add(new String[] {"总计", String.valueOf(totals[0]), String.valueOf(totals[1]),
|
||||||
getPercent(totals[1], totals[0])});
|
getPercent(totals[1], totals[0])});
|
||||||
String message = TableFormatter.formatTableAsHtml(rows);
|
String message = TableFormatter.formatTableAsHtml(rows);
|
||||||
|
telegramMessageService.sendMessage("6013830443:AAHUOS4v6Ln19ziZkH-L28-HZQLJrGcvhto", 6054562838L, message);
|
||||||
if (ministerUser.getNeedNotify() == DisEnableStatusEnum.ENABLE) {
|
if (ministerUser.getNeedNotify() == DisEnableStatusEnum.ENABLE) {
|
||||||
telegramMessageService.sendMessage(ministerUser.getBotToken(), ministerUser.getReportIds(), message);
|
telegramMessageService.sendMessage(ministerUser.getBotToken(), ministerUser.getReportIds(), message);
|
||||||
}
|
}
|
||||||
telegramMessageService.sendMessage("6013830443:AAHUOS4v6Ln19ziZkH-L28-HZQLJrGcvhto", 6054562838L, message);
|
|
||||||
//发送消息给助理
|
//发送消息给助理
|
||||||
if (!CollUtil.isEmpty(assistants)) {
|
if (!CollUtil.isEmpty(assistants)) {
|
||||||
assistants.forEach(assistant -> {
|
assistants.forEach(assistant -> {
|
||||||
|
@ -108,7 +108,7 @@ public class DepositService {
|
|||||||
|
|
||||||
return paginationCompletableFuture.thenApply(Pagination::getList)
|
return paginationCompletableFuture.thenApply(Pagination::getList)
|
||||||
.thenComposeAsync(payRecords -> processPayRecords(payRecords, accountWithChange, account, nowDate, nowDateTime, depositResults, depositCounter, asyncTaskExecutor), asyncTaskExecutor)
|
.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 -> {
|
.exceptionally(ex -> {
|
||||||
log.error("Error processing account changes for agent {}: {}", accountWithChange.getAgentName(), ex
|
log.error("Error processing account changes for agent {}: {}", accountWithChange.getAgentName(), ex
|
||||||
.getMessage());
|
.getMessage());
|
||||||
@ -169,21 +169,18 @@ public class DepositService {
|
|||||||
private void sendNotification(TeamAccountWithChange accountWithChange,
|
private void sendNotification(TeamAccountWithChange accountWithChange,
|
||||||
UserWithRolesAndAccountsResp ministerUser,
|
UserWithRolesAndAccountsResp ministerUser,
|
||||||
Map<String, UserWithRolesAndAccountsResp> accountUsernameToUserMap,
|
Map<String, UserWithRolesAndAccountsResp> accountUsernameToUserMap,
|
||||||
StringBuilder depositResults,
|
StringBuilder depositResults) {
|
||||||
AtomicInteger depositCounter) {
|
String notification = telegramMessageService.buildDepositMessage(accountWithChange
|
||||||
if (depositCounter.get() > 0) {
|
.getAgentName(), accountWithChange.getNewDepositNum(), depositResults.toString(), accountWithChange
|
||||||
String notification = telegramMessageService.buildDepositMessage(accountWithChange
|
.getFirstDepositNum());
|
||||||
.getAgentName(), accountWithChange.getNewDepositNum(), depositResults.toString(), accountWithChange
|
var currUser = accountUsernameToUserMap.get(accountWithChange.getAgentName());
|
||||||
.getFirstDepositNum());
|
if (currUser != null && DisEnableStatusEnum.ENABLE.equals(currUser.getNeedNotify())) {
|
||||||
var currUser = accountUsernameToUserMap.get(accountWithChange.getAgentName());
|
String botToken = StrUtil.isEmpty(currUser.getBotToken())
|
||||||
if (currUser != null && DisEnableStatusEnum.ENABLE.equals(currUser.getNeedNotify())) {
|
? ministerUser.getBotToken()
|
||||||
String botToken = StrUtil.isEmpty(currUser.getBotToken())
|
: currUser.getBotToken();
|
||||||
? ministerUser.getBotToken()
|
telegramMessageService.sendMessage(botToken, currUser.getRegAndDepIds(), notification);
|
||||||
: currUser.getBotToken();
|
|
||||||
telegramMessageService.sendMessage(botToken, currUser.getRegAndDepIds(), notification);
|
|
||||||
}
|
|
||||||
telegramMessageService.sendMessage(BOT_TOKEN, TELEGRAM_CHAT_ID, notification);
|
|
||||||
}
|
}
|
||||||
|
telegramMessageService.sendMessage(BOT_TOKEN, TELEGRAM_CHAT_ID, notification);
|
||||||
}
|
}
|
||||||
|
|
||||||
private CompletableFuture<Member> fetchMemberDetails(AccountResp account,
|
private CompletableFuture<Member> fetchMemberDetails(AccountResp account,
|
||||||
|
@ -79,7 +79,7 @@ public class RegistrationService {
|
|||||||
.collect(Collectors.groupingBy(TeamMember::getTopAgentName));
|
.collect(Collectors.groupingBy(TeamMember::getTopAgentName));
|
||||||
groupByTopAgentName.forEach((accountName, accountMembers) -> {
|
groupByTopAgentName.forEach((accountName, accountMembers) -> {
|
||||||
String notification = telegramMessageService
|
String notification = telegramMessageService
|
||||||
.buildRegistrationMessage(accountName, accountMembers, teamAccountMap.get(accountName));
|
.buildRegistrationMessage(accountMembers, teamAccountMap.get(accountName));
|
||||||
var currUser = accountUsernameToUserMap.get(accountName);
|
var currUser = accountUsernameToUserMap.get(accountName);
|
||||||
if (currUser != null && DisEnableStatusEnum.ENABLE.equals(currUser.getNeedNotify())) {
|
if (currUser != null && DisEnableStatusEnum.ENABLE.equals(currUser.getNeedNotify())) {
|
||||||
String botToken = StrUtil.isEmpty(currUser.getBotToken())
|
String botToken = StrUtil.isEmpty(currUser.getBotToken())
|
||||||
|
@ -19,9 +19,11 @@ package com.zayac.admin.service;
|
|||||||
import cn.hutool.core.convert.Convert;
|
import cn.hutool.core.convert.Convert;
|
||||||
import cn.hutool.core.text.CharPool;
|
import cn.hutool.core.text.CharPool;
|
||||||
import cn.hutool.core.util.StrUtil;
|
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.Statics;
|
||||||
import com.zayac.admin.resp.team.TeamAccount;
|
import com.zayac.admin.resp.team.TeamAccount;
|
||||||
import com.zayac.admin.resp.team.TeamMember;
|
import com.zayac.admin.resp.team.TeamMember;
|
||||||
|
import com.zayac.admin.system.model.resp.UserWithRolesAndAccountsResp;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import org.springframework.amqp.rabbit.core.RabbitTemplate;
|
import org.springframework.amqp.rabbit.core.RabbitTemplate;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
@ -81,11 +83,23 @@ public class TelegramMessageService {
|
|||||||
return htmlTags.stream().anyMatch(text::contains);
|
return htmlTags.stream().anyMatch(text::contains);
|
||||||
}
|
}
|
||||||
|
|
||||||
public String buildRegistrationMessage(String accountName,
|
public String buildRegistrationMessage(UserWithRolesAndAccountsResp currUser,
|
||||||
List<TeamMember> accountMembers,
|
List<TeamMember> accountMembers,
|
||||||
TeamAccount teamAccount) {
|
TeamAccount teamAccount) {
|
||||||
|
|
||||||
String memberNames = accountMembers.stream().map(TeamMember::getName).collect(Collectors.joining(", "));
|
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());
|
.size(), memberNames, teamAccount.getSubMemberNum());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -94,7 +108,7 @@ public class TelegramMessageService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public String buildDepositResultsMessage(String name, BigDecimal scoreAmount) {
|
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) {
|
public String buildFailedPayMessage(String accountName, List<TeamMember> accountMembers) {
|
||||||
@ -111,4 +125,14 @@ public class TelegramMessageService {
|
|||||||
});
|
});
|
||||||
return message.toString();
|
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();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user