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 // 存redis
redisUtil.addToMap(exceptionMapKey, exceptionInfo); 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) { } catch (Exception e) {
log.error(e.getMessage()); log.error(e.getMessage());
try { try {

View File

@@ -141,7 +141,7 @@ public interface AccountService extends IService<Account> {
void moveLibraryDate(); 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); 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) { public void updateCreditsAndEndTime(Account account, String value, Long endTime, BigDecimal creditsUsage) {
Account account = new Account(); Account updateAcc = new Account();
account.setId(accountId); updateAcc.setId(account.getId());
account.setCredits(new BigDecimal(value)); updateAcc.setCredits(new BigDecimal(value));
if (Objects.nonNull(endTime)){ if (Objects.nonNull(endTime)){
account.setValidEndTime(toDayEnd(endTime)); updateAcc.setValidEndTime(toDayEnd(endTime));
} }
if (Objects.nonNull(creditsUsage)){ if (Objects.nonNull(creditsUsage)){
// 机构的积分使用量不会超过上限 // 机构的积分使用量不会超过上限
if (creditsUsage.compareTo(account.getCreditsUsageLimit()) > 0){ BigDecimal creditsUsageLimit = Objects.isNull(account.getCreditsUsageLimit()) ? BigDecimal.ZERO : account.getCreditsUsageLimit();
account.setCreditsUsage(account.getCreditsUsageLimit()); if (creditsUsage.compareTo(creditsUsageLimit) > 0){
updateAcc.setCreditsUsage(creditsUsageLimit);
} else { } else {
account.setCreditsUsage(creditsUsage); updateAcc.setCreditsUsage(creditsUsage);
} }
} }
account.setUpdateDate(new Date()); updateAcc.setUpdateDate(new Date());
int i = accountMapper.updateById(account); int i = accountMapper.updateById(updateAcc);
log.info("更新用户信息,影响条数:{},用户信息:{}", i, JSON.toJSON(account));
} }
@Override @Override
@@ -1594,7 +1594,7 @@ public class AccountServiceImpl extends ServiceImpl<AccountMapper, Account> impl
// 3.3、更新 t_account 表 // 3.3、更新 t_account 表
if (account.getValidEndTime() != null && account.getValidEndTime() < 1720972799000L){ 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 @Override
public Boolean buyCredits(Long accountId, Float quantity) { 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 newCredits = new BigDecimal(CreditsEventsEnum.BUY_CREDITS.getValue()).multiply(new BigDecimal(quantity));
BigDecimal added = existingCredits.add(newCredits); BigDecimal added = existingCredits.add(newCredits);
accountService.updateCreditsAndEndTime(accountId, added.toString(), null, null); accountService.updateCreditsAndEndTime(account, added.toString(), null, null);
return Boolean.TRUE; return Boolean.TRUE;
} }
@@ -61,11 +62,12 @@ public class CreditsServiceImpl extends ServiceImpl<CreditsDetailMapper, Credits
} }
public void creditsRefund(Long accountId, Integer quantity, String orderNo) { 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 newCredits = new BigDecimal(CreditsEventsEnum.BUY_CREDITS.getValue()).multiply(new BigDecimal(quantity));
BigDecimal subtracted = existingCredits.subtract(newCredits); BigDecimal subtracted = existingCredits.subtract(newCredits);
// 更新t_account表 // 更新t_account表
accountService.updateCreditsAndEndTime(accountId, subtracted.toString(), null, null); accountService.updateCreditsAndEndTime(account, subtracted.toString(), null, null);
// 更新t_credits_details表 // 更新t_credits_details表
// 添加积分变更记录 // 添加积分变更记录
insertToCreditsDetail(accountId, insertToCreditsDetail(accountId,
@@ -239,7 +241,7 @@ public class CreditsServiceImpl extends ServiceImpl<CreditsDetailMapper, Credits
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public Boolean taskCreditsDeduction(Long accountId, String taskId) { public Boolean taskCreditsDeduction(Long accountId, String taskId) {
log.info("指定 accountId: {} 任务的积分扣除 {}", accountId, taskId); log.info("指定任务的积分扣除 {}", taskId);
String key = creditsDeduction + ":" + accountId + ":" + taskId; String key = creditsDeduction + ":" + accountId + ":" + taskId;
// 1、获取当前任务id对应的积分 // 1、获取当前任务id对应的积分
String value = redisUtil.getFromString(key); 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 = Objects.isNull(account.getCreditsUsage()) ? BigDecimal.ZERO : account.getCreditsUsage();
creditsUsage = creditsUsage.add(new BigDecimal(value)); creditsUsage = creditsUsage.add(new BigDecimal(value));
} }
accountService.updateCreditsAndEndTime(accountId, subtract.toString(), null, creditsUsage); accountService.updateCreditsAndEndTime(account, subtract.toString(), null, creditsUsage);
// 3、从redis中移除当前待扣积分 // 3、从redis中移除当前待扣积分
redisUtil.removeFromString(key); redisUtil.removeFromString(key);

View File

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