From 5d8bdf9ecc2c6ccd506a6689a5801130a6648a80 Mon Sep 17 00:00:00 2001 From: xupei Date: Thu, 11 Sep 2025 16:01:25 +0800 Subject: [PATCH] =?UTF-8?q?TASK:=20=E5=AD=90=E8=B4=A6=E5=8F=B7=E7=A7=AF?= =?UTF-8?q?=E5=88=86=E5=88=B7=E6=96=B0=E6=B2=BF=E7=94=A8=E4=B8=8A=E6=9C=88?= =?UTF-8?q?=E5=88=86=E9=85=8D=E7=9A=84=E7=A7=AF=E5=88=86=20BUGFIX:=20?= =?UTF-8?q?=E8=8E=B7=E5=8F=96=E4=BD=9C=E5=93=81=E8=AF=A6=E6=83=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/ai/da/common/task/AccountTask.java | 3 +- .../da/service/impl/AccountServiceImpl.java | 28 +++++++++++-------- .../da/service/impl/PortfolioServiceImpl.java | 14 +++++----- 3 files changed, 26 insertions(+), 19 deletions(-) diff --git a/src/main/java/com/ai/da/common/task/AccountTask.java b/src/main/java/com/ai/da/common/task/AccountTask.java index 383f7001..ee0950f3 100644 --- a/src/main/java/com/ai/da/common/task/AccountTask.java +++ b/src/main/java/com/ai/da/common/task/AccountTask.java @@ -25,7 +25,8 @@ public class AccountTask { * 每个月月初只刷新教育子账号的积分 */ // @Scheduled(cron = "59 59 23 * * ?") - @Scheduled(cron = "0 0 0 1 * ?") + @Scheduled(cron = "0 15 16 * * ?") +// @Scheduled(cron = "0 0 0 1 * ?") public void refreshCreditsMonthly() { log.info("每月1号0点 重置教育版子账号为默认积分"); accountService.refreshCreditsMonthly(); diff --git a/src/main/java/com/ai/da/service/impl/AccountServiceImpl.java b/src/main/java/com/ai/da/service/impl/AccountServiceImpl.java index 97a21ab2..4e0181db 100644 --- a/src/main/java/com/ai/da/service/impl/AccountServiceImpl.java +++ b/src/main/java/com/ai/da/service/impl/AccountServiceImpl.java @@ -1705,13 +1705,18 @@ public class AccountServiceImpl extends ServiceImpl impl continue; } - BigDecimal averageCredits = adminAccount.getCreditsUsageLimit().divide(new BigDecimal(adminAccount.getSubAccountNum()), RoundingMode.FLOOR); +// BigDecimal averageCredits = adminAccount.getCreditsUsageLimit().divide(new BigDecimal(adminAccount.getSubAccountNum()), RoundingMode.FLOOR); // 批量更新子账号积分 - int processedCount = batchUpdateSubAccountsCredits(subAccounts, averageCredits); + int processedCount = batchUpdateSubAccountsCredits(subAccounts); totalProcessed += processedCount; - adminAccount.setCreditsUsage(averageCredits.multiply(new BigDecimal(processedCount))); + BigDecimal sum = subAccounts.stream() + .filter(Objects::nonNull) + .map(Account::getCreditsUsageLimit) + .filter(Objects::nonNull) + .reduce(BigDecimal.ZERO, BigDecimal::add); + adminAccount.setCreditsUsage(sum); adminAccount.setCredits(adminAccount.getCreditsUsageLimit().subtract(adminAccount.getCreditsUsage())); adminAccount.setUpdateDate(new Date()); updateById(adminAccount); @@ -1740,13 +1745,13 @@ public class AccountServiceImpl extends ServiceImpl impl /** * 批量更新子账号积分 */ - private int batchUpdateSubAccountsCredits(List subAccounts, BigDecimal averageCredits) { + private int batchUpdateSubAccountsCredits(List subAccounts/*, BigDecimal averageCredits*/) { List accountsToUpdate = new ArrayList<>(); Date now = new Date(); for (Account subAcc : subAccounts) { try { - Account updatedAccount = calculateNewCredits(subAcc, now, averageCredits); + Account updatedAccount = calculateNewCredits(subAcc, now); accountsToUpdate.add(updatedAccount); } catch (Exception e) { @@ -1764,28 +1769,29 @@ public class AccountServiceImpl extends ServiceImpl impl /** * 计算新的积分值 - * 默认积分为学校总积分数 / 学校可使用子账号数 + * 默认积分为上月分配的积分 */ - private Account calculateNewCredits(Account subAcc, Date updateTime, BigDecimal averageCredits) { + private Account calculateNewCredits(Account subAcc, Date updateTime/*, BigDecimal averageCredits*/) { BigDecimal creditsUsageLimit = subAcc.getCreditsUsageLimit(); // 使用 Optional 替代 ObjectUtils.defaultIfNull BigDecimal creditsUsage = Optional.ofNullable(subAcc.getCreditsUsage()).orElse(BigDecimal.ZERO); BigDecimal currentCredits = Optional.ofNullable(subAcc.getCredits()).orElse(BigDecimal.ZERO); // 计算学校分配积分的剩余量 - BigDecimal schoolCreditRemaining = creditsUsageLimit.subtract(creditsUsage); + /*BigDecimal schoolCreditRemaining = creditsUsageLimit.subtract(creditsUsage); // 计算个人充值的积分(总积分减去学校分配的剩余积分) BigDecimal personalCredits = currentCredits.subtract( schoolCreditRemaining.compareTo(BigDecimal.ZERO) > 0 ? schoolCreditRemaining : BigDecimal.ZERO - ); + );*/ + BigDecimal personalCredits = currentCredits.add(creditsUsage).subtract(creditsUsageLimit); // 确保个人积分不为负数 personalCredits = personalCredits.max(BigDecimal.ZERO); // 新的总积分 = 个人积分 + 学校分配的新积分额度 (重新分配的积分是使用上个月分配的积分还是默认积分,暂时使用平均积分) - BigDecimal newTotalCredits = personalCredits.add(averageCredits); + BigDecimal newTotalCredits = personalCredits.add(creditsUsageLimit); // 记录积分变更日志(可选) logCreditChange(subAcc, currentCredits, newTotalCredits, creditsUsage); @@ -1795,7 +1801,7 @@ public class AccountServiceImpl extends ServiceImpl impl updatedAccount.setId(subAcc.getId()); updatedAccount.setCredits(newTotalCredits); updatedAccount.setCreditsUsage(BigDecimal.ZERO); // 重置已使用积分 - updatedAccount.setCreditsUsageLimit(averageCredits); // 重置为默认积分 +// updatedAccount.setCreditsUsageLimit(averageCredits); // 分配的积分沿用上次分配的积分 updatedAccount.setUpdateDate(updateTime); return updatedAccount; diff --git a/src/main/java/com/ai/da/service/impl/PortfolioServiceImpl.java b/src/main/java/com/ai/da/service/impl/PortfolioServiceImpl.java index 94023ccb..1c2fcbad 100644 --- a/src/main/java/com/ai/da/service/impl/PortfolioServiceImpl.java +++ b/src/main/java/com/ai/da/service/impl/PortfolioServiceImpl.java @@ -525,7 +525,7 @@ public class PortfolioServiceImpl extends ServiceImpl getSelectedQw = new QueryWrapper<>(); - getSelectedQw.lambda().eq(UserLikeGroup::getAccountId, userHolder.getId()); + getSelectedQw.lambda().eq(UserLikeGroup::getAccountId, portfolioDTO.getAccountId()); getSelectedQw.lambda().eq(UserLikeGroup::getOriginalPortfolioId, vo.getId()); List userLikeGroups = userLikeGroupMapper.selectList(getSelectedQw); if (CollectionUtils.isEmpty(userLikeGroups)) {