feat(quota): 新增用户额度总计模块

增加用户免费体验额度配置,支持新用户注册时的额度分配功能
This commit is contained in:
2025-12-16 17:54:53 +08:00
parent 495485cc07
commit f95762138b
4 changed files with 60 additions and 6 deletions

View File

@@ -0,0 +1,20 @@
package com.yolo.keyborad.config;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
/**
* 用户注册配置属性
*/
@ConfigurationProperties(prefix = "user.register")
@Component
@Data
public class UserRegisterProperties {
/**
* 新用户注册时的免费使用次数
*/
private Integer freeTrialQuota = 5;
}

View File

@@ -60,6 +60,12 @@ public class UserServiceImpl extends ServiceImpl<KeyboardUserMapper, KeyboardUse
@Resource @Resource
private KeyboardUserLoginLogService loginLogService; private KeyboardUserLoginLogService loginLogService;
@Resource
private com.yolo.keyborad.service.KeyboardUserQuotaTotalService quotaTotalService;
@Resource
private com.yolo.keyborad.config.UserRegisterProperties userRegisterProperties;
@Override @Override
public KeyboardUser selectUserWithSubjectId(String sub) { public KeyboardUser selectUserWithSubjectId(String sub) {
return keyboardUserMapper.selectOne( return keyboardUserMapper.selectOne(
@@ -77,7 +83,7 @@ public class UserServiceImpl extends ServiceImpl<KeyboardUserMapper, KeyboardUse
keyboardUserMapper.insert(keyboardUser); keyboardUserMapper.insert(keyboardUser);
keyboardCharacterService.addDefaultUserCharacter(keyboardUser.getId()); keyboardCharacterService.addDefaultUserCharacter(keyboardUser.getId());
// 初始化用户钱包 // 初始化用户钱包余额为0
KeyboardUserWallet wallet = new KeyboardUserWallet(); KeyboardUserWallet wallet = new KeyboardUserWallet();
wallet.setUserId(keyboardUser.getId()); wallet.setUserId(keyboardUser.getId());
wallet.setBalance(BigDecimal.ZERO); wallet.setBalance(BigDecimal.ZERO);
@@ -87,6 +93,20 @@ public class UserServiceImpl extends ServiceImpl<KeyboardUserMapper, KeyboardUse
wallet.setUpdatedAt(new Date()); wallet.setUpdatedAt(new Date());
walletService.save(wallet); walletService.save(wallet);
// 初始化用户免费使用次数配额
com.yolo.keyborad.model.entity.KeyboardUserQuotaTotal quotaTotal =
new com.yolo.keyborad.model.entity.KeyboardUserQuotaTotal();
quotaTotal.setUserId(keyboardUser.getId());
quotaTotal.setTotalQuota(userRegisterProperties.getFreeTrialQuota());
quotaTotal.setUsedQuota(0);
quotaTotal.setVersion(0);
quotaTotal.setCreatedAt(new Date());
quotaTotal.setUpdatedAt(new Date());
quotaTotalService.save(quotaTotal);
log.info("User registered with Apple Sign-In, userId={}, freeQuota={}",
keyboardUser.getId(), userRegisterProperties.getFreeTrialQuota());
return keyboardUser; return keyboardUser;
} }
@@ -201,7 +221,7 @@ public class UserServiceImpl extends ServiceImpl<KeyboardUserMapper, KeyboardUse
if (insertCount > 0) { if (insertCount > 0) {
keyboardCharacterService.addDefaultUserCharacter(keyboardUser.getId()); keyboardCharacterService.addDefaultUserCharacter(keyboardUser.getId());
// 初始化用户钱包 // 初始化用户钱包余额为0
KeyboardUserWallet wallet = new KeyboardUserWallet(); KeyboardUserWallet wallet = new KeyboardUserWallet();
wallet.setUserId(keyboardUser.getId()); wallet.setUserId(keyboardUser.getId());
wallet.setBalance(BigDecimal.ZERO); wallet.setBalance(BigDecimal.ZERO);
@@ -210,6 +230,20 @@ public class UserServiceImpl extends ServiceImpl<KeyboardUserMapper, KeyboardUse
wallet.setCreatedAt(new Date()); wallet.setCreatedAt(new Date());
wallet.setUpdatedAt(new Date()); wallet.setUpdatedAt(new Date());
walletService.save(wallet); walletService.save(wallet);
// 初始化用户免费使用次数配额
com.yolo.keyborad.model.entity.KeyboardUserQuotaTotal quotaTotal =
new com.yolo.keyborad.model.entity.KeyboardUserQuotaTotal();
quotaTotal.setUserId(keyboardUser.getId());
quotaTotal.setTotalQuota(userRegisterProperties.getFreeTrialQuota());
quotaTotal.setUsedQuota(0);
quotaTotal.setVersion(0);
quotaTotal.setCreatedAt(new Date());
quotaTotal.setUpdatedAt(new Date());
quotaTotalService.save(quotaTotal);
log.info("User registered with email, userId={}, email={}, freeQuota={}",
keyboardUser.getId(), keyboardUser.getEmail(), userRegisterProperties.getFreeTrialQuota());
} }
return insertCount > 0; return insertCount > 0;
} }

View File

@@ -79,8 +79,8 @@ mailgun:
# 用户注册配置 # 用户注册配置
user: user:
register: register:
# 新用户注册时的免费体验额度 # 新用户注册时的免费使用次数
free-trial-credits: 5 free-trial-quota: 5

View File

@@ -32,5 +32,5 @@ logging:
# 用户注册配置 # 用户注册配置
user: user:
register: register:
# 新用户注册时的免费体验额度 # 新用户注册时的免费使用次数
free-trial-credits: 5 free-trial-quota: 5