TASK: 子账号积分刷新沿用上月分配的积分
BUGFIX: 获取作品详情
This commit is contained in:
@@ -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();
|
||||
|
||||
@@ -1705,13 +1705,18 @@ public class AccountServiceImpl extends ServiceImpl<AccountMapper, Account> 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<AccountMapper, Account> impl
|
||||
/**
|
||||
* 批量更新子账号积分
|
||||
*/
|
||||
private int batchUpdateSubAccountsCredits(List<Account> subAccounts, BigDecimal averageCredits) {
|
||||
private int batchUpdateSubAccountsCredits(List<Account> subAccounts/*, BigDecimal averageCredits*/) {
|
||||
List<Account> 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<AccountMapper, Account> 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<AccountMapper, Account> impl
|
||||
updatedAccount.setId(subAcc.getId());
|
||||
updatedAccount.setCredits(newTotalCredits);
|
||||
updatedAccount.setCreditsUsage(BigDecimal.ZERO); // 重置已使用积分
|
||||
updatedAccount.setCreditsUsageLimit(averageCredits); // 重置为默认积分
|
||||
// updatedAccount.setCreditsUsageLimit(averageCredits); // 分配的积分沿用上次分配的积分
|
||||
updatedAccount.setUpdateDate(updateTime);
|
||||
|
||||
return updatedAccount;
|
||||
|
||||
@@ -525,7 +525,7 @@ public class PortfolioServiceImpl extends ServiceImpl<PortfolioMapper, Portfolio
|
||||
|
||||
@Override
|
||||
public PortfolioVO detail(PortfolioDTO portfolioDTO) {
|
||||
AuthPrincipalVo userHolder = UserContext.getUserHolder();
|
||||
// AuthPrincipalVo userHolder = UserContext.getUserHolder();
|
||||
Portfolio portfolio = portfolioMapper.selectById(portfolioDTO.getId());
|
||||
PortfolioVO vo = CopyUtil.copyObject(portfolio, PortfolioVO.class);
|
||||
if (vo.getOpenSource() == 1) {
|
||||
@@ -556,19 +556,19 @@ public class PortfolioServiceImpl extends ServiceImpl<PortfolioMapper, Portfolio
|
||||
vo.setLikeNum(redisUtil.getLikeCount(vo.getId()));
|
||||
String avatar;
|
||||
Account account = accountMapper.selectById(vo.getAccountId());
|
||||
if (userHolder == null) {
|
||||
if (Objects.isNull(portfolioDTO.getAccountId())) {
|
||||
vo.setIsLike(0);
|
||||
vo.setIsFollow(0);
|
||||
avatar = CommonConstant.DEFAULT_AVATAR;
|
||||
} else {
|
||||
boolean postLikedByUser = redisUtil.isPostLikedByUser(portfolioDTO.getId(), userHolder.getId());
|
||||
boolean postLikedByUser = redisUtil.isPostLikedByUser(portfolioDTO.getId(), portfolioDTO.getAccountId());
|
||||
if (postLikedByUser) {
|
||||
vo.setIsLike(1);
|
||||
} else {
|
||||
vo.setIsLike(0);
|
||||
}
|
||||
// 设置当前用户是否关注了所查看作品的作者
|
||||
Integer ifFollowed = getIfFollowed(portfolio.getAccountId(), userHolder.getId());
|
||||
Integer ifFollowed = getIfFollowed(portfolio.getAccountId(), portfolioDTO.getAccountId());
|
||||
vo.setIsFollow(ifFollowed);
|
||||
avatar = StringUtil.isNullOrEmpty(account.getAvatar()) ? CommonConstant.DEFAULT_AVATAR : account.getAvatar();
|
||||
}
|
||||
@@ -589,17 +589,17 @@ public class PortfolioServiceImpl extends ServiceImpl<PortfolioMapper, Portfolio
|
||||
}
|
||||
}
|
||||
}
|
||||
if (userHolder == null) {
|
||||
if (Objects.isNull(portfolioDTO.getAccountId())) {
|
||||
vo.setIsMine(0);
|
||||
vo.setSelected(0);
|
||||
} else {
|
||||
if (Objects.equals(vo.getAccountId(), userHolder.getId()) || Objects.equals(vo.getOriginalAccountId(), userHolder.getId())) {
|
||||
if (Objects.equals(vo.getAccountId(), portfolioDTO.getAccountId()) || Objects.equals(vo.getOriginalAccountId(), portfolioDTO.getAccountId())) {
|
||||
vo.setIsMine(1);
|
||||
vo.setSelected(1);
|
||||
} else {
|
||||
vo.setIsMine(0);
|
||||
QueryWrapper<UserLikeGroup> 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<UserLikeGroup> userLikeGroups = userLikeGroupMapper.selectList(getSelectedQw);
|
||||
if (CollectionUtils.isEmpty(userLikeGroups)) {
|
||||
|
||||
Reference in New Issue
Block a user