BUGFIX:普通生成积分扣除有误

This commit is contained in:
2025-08-27 14:15:58 +08:00
parent 98eb29eeb5
commit 126ac209c6
5 changed files with 23 additions and 29 deletions

View File

@@ -150,13 +150,6 @@ public class GenerateConsumer {
// 存redis
redisUtil.addToMap(exceptionMapKey, exceptionInfo);
}
} catch (BusinessException e){
log.error(e.getMsg());
try {
channel.basicAck(msg.getMessageProperties().getDeliveryTag(), false);
} catch (IOException exception) {
log.error("手动确认,取消返回队列,不再重新消费");
}
} catch (Exception e) {
log.error(e.getMessage());
try {

View File

@@ -141,7 +141,7 @@ public interface AccountService extends IService<Account> {
void moveLibraryDate();
void updateCreditsAndEndTime(Long accountId, String value, Long endTime, BigDecimal creditsUsage);
void updateCreditsAndEndTime(Account account, String value, Long endTime, BigDecimal creditsUsage);
Boolean designWorksRegister(AccountDesignWorksRegisterDTO accountDesignWorksRegisterDTO);

View File

@@ -1146,24 +1146,24 @@ public class AccountServiceImpl extends ServiceImpl<AccountMapper, Account> impl
// 未迁移过的进行迁移,注意模特数据迁移打点信息以及转换模特格式
}
public void updateCreditsAndEndTime(Long accountId, String value, Long endTime, BigDecimal creditsUsage) {
Account account = new Account();
account.setId(accountId);
account.setCredits(new BigDecimal(value));
public void updateCreditsAndEndTime(Account account, String value, Long endTime, BigDecimal creditsUsage) {
Account updateAcc = new Account();
updateAcc.setId(account.getId());
updateAcc.setCredits(new BigDecimal(value));
if (Objects.nonNull(endTime)){
account.setValidEndTime(toDayEnd(endTime));
updateAcc.setValidEndTime(toDayEnd(endTime));
}
if (Objects.nonNull(creditsUsage)){
// 机构的积分使用量不会超过上限
if (creditsUsage.compareTo(account.getCreditsUsageLimit()) > 0){
account.setCreditsUsage(account.getCreditsUsageLimit());
BigDecimal creditsUsageLimit = Objects.isNull(account.getCreditsUsageLimit()) ? BigDecimal.ZERO : account.getCreditsUsageLimit();
if (creditsUsage.compareTo(creditsUsageLimit) > 0){
updateAcc.setCreditsUsage(creditsUsageLimit);
} else {
account.setCreditsUsage(creditsUsage);
updateAcc.setCreditsUsage(creditsUsage);
}
}
account.setUpdateDate(new Date());
int i = accountMapper.updateById(account);
log.info("更新用户信息,影响条数:{},用户信息:{}", i, JSON.toJSON(account));
updateAcc.setUpdateDate(new Date());
int i = accountMapper.updateById(updateAcc);
}
@Override
@@ -1594,7 +1594,7 @@ public class AccountServiceImpl extends ServiceImpl<AccountMapper, Account> impl
// 3.3、更新 t_account 表
if (account.getValidEndTime() != null && account.getValidEndTime() < 1720972799000L){
updateCreditsAndEndTime(account.getId(), added.toString(), 1720972799000L, null);
updateCreditsAndEndTime(account, added.toString(), 1720972799000L, null);
}
}

View File

@@ -47,10 +47,11 @@ public class CreditsServiceImpl extends ServiceImpl<CreditsDetailMapper, Credits
@Override
public Boolean buyCredits(Long accountId, Float quantity) {
BigDecimal existingCredits = accountMapper.selectById(accountId).getCredits();
Account account = accountMapper.selectById(accountId);
BigDecimal existingCredits = account.getCredits();
BigDecimal newCredits = new BigDecimal(CreditsEventsEnum.BUY_CREDITS.getValue()).multiply(new BigDecimal(quantity));
BigDecimal added = existingCredits.add(newCredits);
accountService.updateCreditsAndEndTime(accountId, added.toString(), null, null);
accountService.updateCreditsAndEndTime(account, added.toString(), null, null);
return Boolean.TRUE;
}
@@ -61,11 +62,12 @@ public class CreditsServiceImpl extends ServiceImpl<CreditsDetailMapper, Credits
}
public void creditsRefund(Long accountId, Integer quantity, String orderNo) {
BigDecimal existingCredits = accountMapper.selectById(accountId).getCredits();
Account account = accountMapper.selectById(accountId);
BigDecimal existingCredits = account.getCredits();
BigDecimal newCredits = new BigDecimal(CreditsEventsEnum.BUY_CREDITS.getValue()).multiply(new BigDecimal(quantity));
BigDecimal subtracted = existingCredits.subtract(newCredits);
// 更新t_account表
accountService.updateCreditsAndEndTime(accountId, subtracted.toString(), null, null);
accountService.updateCreditsAndEndTime(account, subtracted.toString(), null, null);
// 更新t_credits_details表
// 添加积分变更记录
insertToCreditsDetail(accountId,
@@ -239,7 +241,7 @@ public class CreditsServiceImpl extends ServiceImpl<CreditsDetailMapper, Credits
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean taskCreditsDeduction(Long accountId, String taskId) {
log.info("指定 accountId: {} 任务的积分扣除 {}", accountId, taskId);
log.info("指定任务的积分扣除 {}", taskId);
String key = creditsDeduction + ":" + accountId + ":" + taskId;
// 1、获取当前任务id对应的积分
String value = redisUtil.getFromString(key);
@@ -263,7 +265,7 @@ public class CreditsServiceImpl extends ServiceImpl<CreditsDetailMapper, Credits
creditsUsage = Objects.isNull(account.getCreditsUsage()) ? BigDecimal.ZERO : account.getCreditsUsage();
creditsUsage = creditsUsage.add(new BigDecimal(value));
}
accountService.updateCreditsAndEndTime(accountId, subtract.toString(), null, creditsUsage);
accountService.updateCreditsAndEndTime(account, subtract.toString(), null, creditsUsage);
// 3、从redis中移除当前待扣积分
redisUtil.removeFromString(key);

View File

@@ -311,8 +311,7 @@ public class GenerateServiceImpl extends ServiceImpl<GenerateMapper, Generate> i
generateDetail.setCreateDate(LocalDateTime.now());
generateDetail.setMd5(md5);
// 将相应的url保存到数据库
int insert = generateDetailMapper.insert(generateDetail);
log.info("添加 {} 条数据到t_generate_detail", insert);
generateDetailMapper.insert(generateDetail);
// String uuid = taskId.substring(0, taskId.substring(0, taskId.lastIndexOf("-")).lastIndexOf("-"));
String key = generateResultKey + ":" + taskId;
@@ -1251,7 +1250,7 @@ public class GenerateServiceImpl extends ServiceImpl<GenerateMapper, Generate> i
creditsUsage = Objects.isNull(account.getCreditsUsage()) ? BigDecimal.ZERO : account.getCreditsUsage();
creditsUsage = creditsUsage.add(new BigDecimal(event.getValue()));
}
accountService.updateCreditsAndEndTime(accountId, subtract.toString(), null, creditsUsage);
accountService.updateCreditsAndEndTime(account, subtract.toString(), null, creditsUsage);
creditsService.preInsert(accountId, event.getName(), null, Boolean.FALSE, event.getValue());
}