修复不能正确显示昨日负盈利的问题

This commit is contained in:
zayac 2024-07-02 00:34:19 +08:00
parent 303db89f46
commit c39729f949
5 changed files with 61 additions and 26 deletions

View File

@ -26,4 +26,6 @@ import lombok.NoArgsConstructor;
public class TeamAccountWithChange extends TeamAccount { public class TeamAccountWithChange extends TeamAccount {
private int newRegisterNum; private int newRegisterNum;
private int newDepositNum; private int newDepositNum;
private int nowDateRegNum;
private int nowDateDepNum;
} }

View File

@ -176,7 +176,7 @@ public class DailyReport {
//保存数据 //保存数据
saveData(ministerUser, deptUsers, yesterday, accountNameWithTopAgentName); saveData(ministerUser, deptUsers, yesterday, accountNameWithTopAgentName);
//getPayFailedMember(ministerUser, accountUsernameToUserMap, yesterday); //getPayFailedMember(ministerUser, accountUsernameToUserMap, yesterday);
sendFinance(yesterday, accountUsernameToUserMap, ministerUser); sendFinance(LocalDate.now(), accountUsernameToUserMap, ministerUser);
}); });
log.info("dailySummarize finished at {}", LocalDateTime.now()); log.info("dailySummarize finished at {}", LocalDateTime.now());
} }

View File

@ -23,6 +23,7 @@ import com.zayac.admin.constant.ApiPathConstants;
import com.zayac.admin.req.ActiveListReq; import com.zayac.admin.req.ActiveListReq;
import com.zayac.admin.req.MemberDetailsReq; import com.zayac.admin.req.MemberDetailsReq;
import com.zayac.admin.req.PayRecordsListReq; import com.zayac.admin.req.PayRecordsListReq;
import com.zayac.admin.req.team.TeamInfoReq;
import com.zayac.admin.req.team.TeamMemberListReq; import com.zayac.admin.req.team.TeamMemberListReq;
import com.zayac.admin.resp.*; import com.zayac.admin.resp.*;
import com.zayac.admin.resp.team.Team; import com.zayac.admin.resp.team.Team;
@ -40,10 +41,8 @@ import java.math.BigDecimal;
import java.time.Duration; import java.time.Duration;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.Comparator; import java.time.LocalTime;
import java.util.LinkedHashMap; import java.util.*;
import java.util.List;
import java.util.Map;
import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletableFuture;
import java.util.concurrent.Executor; import java.util.concurrent.Executor;
import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicInteger;
@ -58,6 +57,7 @@ import static com.zayac.admin.utils.CommonUtils.findChangedTeamAccount;
public class DepositService { public class DepositService {
private final CompletableFutureWebClientService completableFutureWebClientService; private final CompletableFutureWebClientService completableFutureWebClientService;
private final TelegramMessageService telegramMessageService; private final TelegramMessageService telegramMessageService;
private final TeamService teamService;
private static final String BOT_TOKEN = "6013830443:AAHUOS4v6Ln19ziZkH-L28-HZQLJrGcvhto"; private static final String BOT_TOKEN = "6013830443:AAHUOS4v6Ln19ziZkH-L28-HZQLJrGcvhto";
private static final Long TELEGRAM_CHAT_ID = 6054562838L; private static final Long TELEGRAM_CHAT_ID = 6054562838L;
@ -115,8 +115,29 @@ public class DepositService {
return completableFutureWebClientService return completableFutureWebClientService
.fetchDataForAccount(account, ApiPathConstants.ACTIVE_LIST, req, new ParameterizedTypeReference<ApiResponse<Pagination<List<ActiveListResp>>>>() { .fetchDataForAccount(account, ApiPathConstants.ACTIVE_LIST, req, new ParameterizedTypeReference<ApiResponse<Pagination<List<ActiveListResp>>>>() {
}) })
.thenApply(Pagination::getList) .thenApply(response -> {
if (response == null || response.getList() == null) {
log.warn("Fetched active list responses are null");
return Collections.<ActiveListResp>emptyList();
}
return response.getList();
})
.thenComposeAsync(activeListResps -> { .thenComposeAsync(activeListResps -> {
if (activeListResps.isEmpty()) {
TeamInfoReq teamInfoReq = TeamInfoReq.builder()
.startDate(nowDate.atStartOfDay())
.endDate(nowDate.atTime(LocalTime.MAX))
.agentName(accountWithChange.getAgentName())
.pageNum(1)
.pageSize(1)
.build();
log.info("未能获取到{}首存信息", accountWithChange.getAgentName());
CompletableFuture<Void> teamInfoFuture = teamService.getLatestTeamInfoAsync(account, teamInfoReq)
.thenAcceptAsync(team -> accountWithChange.setNowDateDepNum(team.getList().get(0).getFirstDepositNum()), asyncTaskExecutor);
return teamInfoFuture.thenApply(v -> Collections.<ActiveListResp>emptyList());
}
// 过滤并排序 // 过滤并排序
List<ActiveListResp> sortedList = activeListResps.stream() List<ActiveListResp> sortedList = activeListResps.stream()
.filter(resp -> resp.getFirstPayTime() != null && resp.getFirstPayTime() .filter(resp -> resp.getFirstPayTime() != null && resp.getFirstPayTime()
@ -124,6 +145,11 @@ public class DepositService {
.sorted(Comparator.comparing(ActiveListResp::getFirstPayTime)) .sorted(Comparator.comparing(ActiveListResp::getFirstPayTime))
.collect(Collectors.toList()); .collect(Collectors.toList());
long nowDateNewDep = activeListResps.stream()
.filter(mem -> mem.getFirstPayTime().isAfter(nowDate.atStartOfDay()))
.count();
accountWithChange.setNowDateDepNum((int)nowDateNewDep);
// 截取后N个元素 // 截取后N个元素
List<ActiveListResp> activeListRespList = ListUtil.sub(sortedList, -accountWithChange List<ActiveListResp> activeListRespList = ListUtil.sub(sortedList, -accountWithChange
.getNewDepositNum(), sortedList.size()); .getNewDepositNum(), sortedList.size());
@ -144,12 +170,16 @@ public class DepositService {
return completableFutureWebClientService return completableFutureWebClientService
.fetchDataForAccount(account, ApiPathConstants.PAY_RECORDS_LIST_URL, payRecordsListReq, new ParameterizedTypeReference<ApiResponse<Pagination<List<PayRecord>>>>() { .fetchDataForAccount(account, ApiPathConstants.PAY_RECORDS_LIST_URL, payRecordsListReq, new ParameterizedTypeReference<ApiResponse<Pagination<List<PayRecord>>>>() {
}) })
.thenApply(Pagination::getList) .thenApply(response -> {
.thenAcceptAsync(payRecords -> { if (response == null || response.getList() == null) {
if (payRecords != null && !payRecords.isEmpty()) {
resp.setDeposit(payRecords.get(0).getScoreAmount());
} else {
log.warn("No pay records found for member: {}", resp.getName()); log.warn("No pay records found for member: {}", resp.getName());
return Collections.<PayRecord>emptyList();
}
return response.getList();
})
.thenAcceptAsync(payRecords -> {
if (!payRecords.isEmpty()) {
resp.setDeposit(payRecords.get(0).getScoreAmount());
} }
}, asyncTaskExecutor); }, asyncTaskExecutor);
} }
@ -178,8 +208,7 @@ public class DepositService {
} }
private String buildNotificationMessage(TeamAccountWithChange accountWithChange, String depositResults) { private String buildNotificationMessage(TeamAccountWithChange accountWithChange, String depositResults) {
return telegramMessageService.buildDepositMessage(accountWithChange.getAgentName(), accountWithChange return telegramMessageService.buildDepositMessage(accountWithChange, depositResults);
.getNewDepositNum(), depositResults, accountWithChange.getFirstDepositNum());
} }
private void sendNotifications(TeamAccountWithChange accountWithChange, private void sendNotifications(TeamAccountWithChange accountWithChange,
@ -187,7 +216,8 @@ public class DepositService {
Map<String, UserWithRolesAndAccountsResp> accountUsernameToUserMap, Map<String, UserWithRolesAndAccountsResp> accountUsernameToUserMap,
String notification) { String notification) {
var currUser = accountUsernameToUserMap.get(accountWithChange.getAgentName()); var currUser = accountUsernameToUserMap.get(accountWithChange.getAgentName());
if (currUser != null && DisEnableStatusEnum.ENABLE.equals(currUser.getNeedNotify())) { if (currUser != null && DisEnableStatusEnum.ENABLE.equals(currUser.getNeedNotify()) && !"guanzi".equals(currUser
.getUsername())) {
String botToken = StrUtil.isEmpty(currUser.getBotToken()) String botToken = StrUtil.isEmpty(currUser.getBotToken())
? ministerUser.getBotToken() ? ministerUser.getBotToken()
: currUser.getBotToken(); : currUser.getBotToken();
@ -289,9 +319,7 @@ public class DepositService {
UserWithRolesAndAccountsResp ministerUser, UserWithRolesAndAccountsResp ministerUser,
Map<String, UserWithRolesAndAccountsResp> accountUsernameToUserMap, Map<String, UserWithRolesAndAccountsResp> accountUsernameToUserMap,
StringBuilder depositResults) { StringBuilder depositResults) {
String notification = telegramMessageService.buildDepositMessage(accountWithChange String notification = telegramMessageService.buildDepositMessage(accountWithChange, depositResults.toString());
.getAgentName(), accountWithChange.getNewDepositNum(), depositResults.toString(), accountWithChange
.getFirstDepositNum());
var currUser = accountUsernameToUserMap.get(accountWithChange.getAgentName()); var currUser = accountUsernameToUserMap.get(accountWithChange.getAgentName());
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())

View File

@ -77,8 +77,10 @@ public class RegistrationService {
completableFutureWebClientService completableFutureWebClientService
.fetchDataForAccount(account, ApiPathConstants.MEMBER_TEAM_LIST_URL, memberListReq, new ParameterizedTypeReference<ApiResponse<MemberPagination<List<TeamMember>>>>() { .fetchDataForAccount(account, ApiPathConstants.MEMBER_TEAM_LIST_URL, memberListReq, new ParameterizedTypeReference<ApiResponse<MemberPagination<List<TeamMember>>>>() {
}) })
.thenApply(MemberPagination::getList) //.thenApply(MemberPagination::getList)
.thenAcceptAsync(members -> { .thenAcceptAsync(memberPagination -> {
List<TeamMember> members = memberPagination.getList();
accountWithChange.setNowDateRegNum(memberPagination.getTotal());
log.info("Successfully get [{}] new registered members for {}", members log.info("Successfully get [{}] new registered members for {}", members
.size(), accountWithChange.getAgentName()); .size(), accountWithChange.getAgentName());
if (CollUtil.isNotEmpty(members)) { if (CollUtil.isNotEmpty(members)) {

View File

@ -91,10 +91,10 @@ public class TelegramMessageService {
String memberNames = accountMembers.stream().map(TeamMember::getName).collect(Collectors.joining(", ")); String memberNames = accountMembers.stream().map(TeamMember::getName).collect(Collectors.joining(", "));
if (currUser != null) { if (currUser != null) {
return String.format("👏 [%s] %s 注册: %d 会员: `%s` 总数:*%d*", currUser.getNickname(), teamAccount return String.format("👏 [%s] %s 注册: %d 会员: `%s` 本月:*%d*", currUser.getNickname(), teamAccount
.getAgentName(), accountMembers.size(), memberNames, teamAccount.getSubMemberNum()); .getAgentName(), accountMembers.size(), memberNames, teamAccount.getSubMemberNum());
} }
return String.format("👏 %s 注册: %d 会员: `%s` 总数:*%d*", teamAccount.getAgentName(), accountMembers return String.format("👏 %s 注册: %d 会员: `%s` 本月:*%d*", teamAccount.getAgentName(), accountMembers
.size(), memberNames, teamAccount.getSubMemberNum()); .size(), memberNames, teamAccount.getSubMemberNum());
} }
@ -103,16 +103,19 @@ public class TelegramMessageService {
String memberNames = accountMembers.stream() String memberNames = accountMembers.stream()
.map(member -> "`" + member.getName() + "`") .map(member -> "`" + member.getName() + "`")
.collect(Collectors.joining(", ")); .collect(Collectors.joining(", "));
return String.format("👏 %s 注册: %d 会员: %s 总数:*%d*", teamAccount.getAgentName(), accountMembers return String.format("👏 %s 注册: %d 今日: *%d* 本月:*%d* 会员: %s ", teamAccount.getAgentName(), accountMembers
.size(), memberNames, teamAccount.getSubMemberNum()); .size(), teamAccount.getNowDateRegNum(), teamAccount.getSubMemberNum(), memberNames);
} }
public String buildDepositMessage(String agentName, int newDepositNum, String depositResults, int firstDepositNum) { public String buildDepositMessage(TeamAccountWithChange accountWithChange, String memberInfo) {
return String.format("🎉 %s 首存: *%d* %s 总数: *%d*", agentName, newDepositNum, depositResults, firstDepositNum);
return String.format("🎉 %s 首存: *%d* 今日: *%d* 本月: *%d* \n%s", accountWithChange
.getAgentName(), accountWithChange.getNewDepositNum(), accountWithChange
.getNowDateDepNum(), accountWithChange.getFirstDepositNum(), memberInfo);
} }
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) {