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 @@ select transaction_id, user_id, user_name, transaction_type, amount, before_balance, after_balance, status, - transaction_no, pay_type, business_id, business_type, remark, is_expense, input_token, output_token, + transaction_no, pay_type, business_id, business_type, call_id, remark, is_expense, input_token, output_token, total_tokens, model_name, question, income_type, create_time, update_time, create_by, update_by, delete_flag from account_transaction @@ -82,7 +83,7 @@ select transaction_id, user_id, user_name, transaction_type, amount, before_balance, after_balance, status, - transaction_no, pay_type, business_id, business_type, remark, is_expense, input_token, output_token, + transaction_no, pay_type, business_id, business_type, call_id, remark, is_expense, input_token, output_token, total_tokens, model_name, question, income_type, create_time, update_time, create_by, update_by, delete_flag from account_transaction where user_id = #{userId}