diff --git a/db/alter_account_frozen_add_question.sql b/db/alter_account_frozen_add_question.sql
new file mode 100644
index 0000000..0d031b3
--- /dev/null
+++ b/db/alter_account_frozen_add_question.sql
@@ -0,0 +1,5 @@
+-- 为 account_frozen 表添加 question 字段
+-- 用于记录用户的问题或需求
+
+ALTER TABLE `account_frozen`
+ADD COLUMN `question` text DEFAULT NULL COMMENT '对应回答的问题或需求' AFTER `model_name`;
diff --git a/db/alter_account_transaction_add_call_id.sql b/db/alter_account_transaction_add_call_id.sql
new file mode 100644
index 0000000..0517128
--- /dev/null
+++ b/db/alter_account_transaction_add_call_id.sql
@@ -0,0 +1,9 @@
+-- 为 account_transaction 表添加 call_id 字段
+-- 用于关联冻结单释放时的调用ID
+
+ALTER TABLE `account_transaction`
+ADD COLUMN `call_id` varchar(100) DEFAULT NULL COMMENT '调用ID,关联冻结单' AFTER `business_type`;
+
+-- 添加索引以提高查询性能
+ALTER TABLE `account_transaction`
+ADD INDEX `idx_call_id` (`call_id`);
diff --git a/src/main/java/com/kexue/skills/entity/AccountFrozen.java b/src/main/java/com/kexue/skills/entity/AccountFrozen.java
index 26463f7..cdf807c 100644
--- a/src/main/java/com/kexue/skills/entity/AccountFrozen.java
+++ b/src/main/java/com/kexue/skills/entity/AccountFrozen.java
@@ -38,6 +38,9 @@ public class AccountFrozen extends BaseEntity implements Serializable {
@Schema(description ="模型名称")
private String modelName;
+ @Schema(description ="对应回答的问题或需求")
+ private String question;
+
@Schema(description ="冻结金额/张数/次数/分钟")
private BigDecimal frozenAmount;
diff --git a/src/main/java/com/kexue/skills/entity/AccountTransaction.java b/src/main/java/com/kexue/skills/entity/AccountTransaction.java
index 1aee812..a40ceb5 100644
--- a/src/main/java/com/kexue/skills/entity/AccountTransaction.java
+++ b/src/main/java/com/kexue/skills/entity/AccountTransaction.java
@@ -56,6 +56,9 @@ public class AccountTransaction extends BaseEntity implements Serializable {
@Schema(description ="业务类型")
private String businessType;
+ @Schema(description ="调用ID,关联冻结单")
+ private String callId;
+
@Schema(description ="交易备注")
private String remark;
diff --git a/src/main/java/com/kexue/skills/entity/dto/AccountFrozenDto.java b/src/main/java/com/kexue/skills/entity/dto/AccountFrozenDto.java
index 03e83a9..4f34071 100644
--- a/src/main/java/com/kexue/skills/entity/dto/AccountFrozenDto.java
+++ b/src/main/java/com/kexue/skills/entity/dto/AccountFrozenDto.java
@@ -24,6 +24,9 @@ public class AccountFrozenDto {
@Schema(description ="模型名称")
private String modelName;
+ @Schema(description ="对应回答的问题或需求")
+ private String question;
+
@Schema(description ="冻结金额/张数/次数/分钟")
private BigDecimal frozenAmount;
diff --git a/src/main/java/com/kexue/skills/service/impl/AccountFrozenServiceImpl.java b/src/main/java/com/kexue/skills/service/impl/AccountFrozenServiceImpl.java
index b3b8154..93103cc 100644
--- a/src/main/java/com/kexue/skills/service/impl/AccountFrozenServiceImpl.java
+++ b/src/main/java/com/kexue/skills/service/impl/AccountFrozenServiceImpl.java
@@ -23,6 +23,7 @@ import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.Date;
+import java.util.Objects;
/**
* 账户冻结单服务实现
@@ -135,6 +136,9 @@ public class AccountFrozenServiceImpl implements AccountFrozenService {
accountFrozen.setSessionId(accountFrozenDto.getSessionId());
accountFrozen.setCallId(accountFrozenDto.getCallId());
accountFrozen.setModelName(accountFrozenDto.getModelName());
+ if(Objects.nonNull(accountFrozenDto.getQuestion())){
+ accountFrozen.setQuestion(accountFrozenDto.getQuestion());
+ }
accountFrozen.setFrozenAmount(finalFrozenAmount);
accountFrozen.setFrozenType(accountFrozenDto.getFrozenType());
accountFrozen.setStatus("RESERVED");
@@ -261,6 +265,13 @@ public class AccountFrozenServiceImpl implements AccountFrozenService {
transaction.setBusinessType("frozen_release"); // 冻结单释放
transaction.setRemark("冻结单释放扣减: " + accountFrozen.getFrozenId());
transaction.setIsExpense(1); // 支出
+ transaction.setQuestion(accountFrozen.getQuestion());
+ if(Objects.nonNull(accountFrozen.getQuestion())){
+ transaction.setQuestion(accountFrozen.getQuestion());
+ }
+ if(Objects.nonNull(accountFrozen.getCallId())){
+ transaction.setCallId(accountFrozen.getCallId()); // 设置调用ID
+ }
// 如果是token消费,记录token信息
if (accountReleaseDto.getUsageInputTokens() != null && accountReleaseDto.getUsageOutputTokens() != null) {
diff --git a/src/main/java/com/kexue/skills/service/impl/SysUserServiceImpl.java b/src/main/java/com/kexue/skills/service/impl/SysUserServiceImpl.java
index e4e1a16..28cfd76 100644
--- a/src/main/java/com/kexue/skills/service/impl/SysUserServiceImpl.java
+++ b/src/main/java/com/kexue/skills/service/impl/SysUserServiceImpl.java
@@ -1030,6 +1030,9 @@ public class SysUserServiceImpl implements SysUserService {
"invite",
"邀请用户注册赠送"
);
+
+ // 给被邀请人(新用户)也赠送100积分作为邀请奖励
+ // 注意:这里先不执行,等账户创建后再执行
}
// 设置固定salt为666666
@@ -1073,6 +1076,18 @@ public class SysUserServiceImpl implements SysUserService {
"注册赠送"
);
+ // 如果有邀请码,额外赠送100积分作为邀请奖励
+ if (inviteCode != null && !inviteCode.isEmpty()) {
+ accountService.addGiftBalance(
+ sysUser.getUserId(),
+ BigDecimal.valueOf(100),
+ "gift_" + System.currentTimeMillis(),
+ null,
+ "invite_reward",
+ "通过邀请码注册赠送"
+ );
+ }
+
return sysUser;
}
diff --git a/src/main/resources/mapper/AccountFrozenMapper.xml b/src/main/resources/mapper/AccountFrozenMapper.xml
index 93c91c8..defc619 100644
--- a/src/main/resources/mapper/AccountFrozenMapper.xml
+++ b/src/main/resources/mapper/AccountFrozenMapper.xml
@@ -9,6 +9,7 @@
+
@@ -23,7 +24,7 @@
- frozen_id, account_transaction_id, user_id, call_id, session_id, model_name, frozen_amount,
+ frozen_id, account_transaction_id, user_id, call_id, session_id, model_name, question, frozen_amount,
frozen_type, final_amount, usage_input_tokens, usage_output_tokens, usage_total_tokens,
finalize_reason, status, expire_at, create_time, update_time
@@ -37,11 +38,11 @@
insert into account_frozen
- (frozen_id, account_transaction_id, user_id, call_id, session_id, model_name, frozen_amount,
+ (frozen_id, account_transaction_id, user_id, call_id, session_id, model_name, question, frozen_amount,
frozen_type, final_amount, usage_input_tokens, usage_output_tokens, usage_total_tokens,
finalize_reason, status, expire_at, create_time, update_time)
values
- (#{frozenId}, #{accountTransactionId}, #{userId}, #{callId}, #{sessionId}, #{modelName}, #{frozenAmount},
+ (#{frozenId}, #{accountTransactionId}, #{userId}, #{callId}, #{sessionId}, #{modelName}, #{question}, #{frozenAmount},
#{frozenType}, #{finalAmount}, #{usageInputTokens}, #{usageOutputTokens}, #{usageTotalTokens},
#{finalizeReason}, #{status}, #{expireAt}, #{createTime}, #{updateTime})
@@ -54,6 +55,7 @@
call_id = #{callId},
session_id = #{sessionId},
model_name = #{modelName},
+ question = #{question},
frozen_amount = #{frozenAmount},
frozen_type = #{frozenType},
final_amount = #{finalAmount},
diff --git a/src/main/resources/mapper/AccountTransactionMapper.xml b/src/main/resources/mapper/AccountTransactionMapper.xml
index 465bf4d..eeb7f19 100644
--- a/src/main/resources/mapper/AccountTransactionMapper.xml
+++ b/src/main/resources/mapper/AccountTransactionMapper.xml
@@ -15,6 +15,7 @@
+
@@ -34,7 +35,7 @@