Files
kami_backend/internal/service/camel_oil.go
danial 8495c453f3 feat(camel_oil): 添加骆驼模块设置和预拉取订单日志功能
- 增加骆驼模块设置接口支持获取和更新配置
- 使用Redis缓存设置数据,实现模块配置的持久化管理
- 引入预拉取订单日志功能,支持日志的保存和按时间范围查询
- 预拉取订单请求响应数据记录到Redis,方便问题追踪
- 根据模块设置动态调整账号登录、预拉取订单并发数量
- 调整账号登录逻辑以支持配置的并发控制
- 优化预拉取订单补充流程,支持多面额库存管理
- 修正集成API请求函数名及调用,记录详细调用日志数据
- 调整定时任务调度频率,增加预拉取订单补充任务的执行频率
- 升级golang版本到1.25.5,保持开发环境最新状态
2025-12-03 21:17:56 +08:00

161 lines
10 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// ================================================================================
// Code generated and maintained by GoFrame CLI tool. DO NOT EDIT.
// You can delete these comments if you wish manually maintain this interface file.
// ================================================================================
package service
import (
"context"
v1 "kami/api/camel_oil/v1"
"kami/api/commonApi"
"kami/internal/consts"
"kami/internal/model"
"kami/internal/model/entity"
"github.com/shopspring/decimal"
)
type (
ICamelOil interface {
// GetAccountInfo 获取账号信息
GetAccountInfo(ctx context.Context, accountId int64) (account *entity.V1CamelOilAccount, err error)
// CreateAccount 创建账号
CreateAccount(ctx context.Context, phoneNumber string, remark string) (accountId int64, err error)
// UpdateAccount 更新账号信息
UpdateAccount(ctx context.Context, accountId int64, remark string) (err error)
// DeleteAccount 删除账号(软删除)
DeleteAccount(ctx context.Context, accountId int64) (err error)
// ListAccounts 获取账号列表
ListAccounts(ctx context.Context, status int, current int, pageSize int) (accounts []*entity.V1CamelOilAccount, total int, err error)
// ListAccount 查询账号列表API版本
ListAccount(ctx context.Context, req *v1.ListAccountReq) (res *v1.ListAccountRes, err error)
// UpdateAccountStatus 更新账号状态并记录历史
UpdateAccountStatus(ctx context.Context, accountId int64, newStatus consts.CamelOilAccountStatus, operationType consts.CamelOilAccountChangeType, description string) (err error)
// RecordAccountHistory 记录账号历史
RecordAccountHistory(ctx context.Context, accountId int64, operationType consts.CamelOilAccountChangeType, oldStatus consts.CamelOilAccountStatus, newStatus consts.CamelOilAccountStatus, description string) (err error)
// GetOrderCountByStatus 获取指定状态的订单数量
GetOrderCountByStatus(ctx context.Context, status consts.CamelOilAccountStatus) (count int, err error)
// GetAvailableOrderCapacity 获取当前可用订单容量
// 计算所有在线账号的剩余可下单数之和
GetAvailableOrderCapacity(ctx context.Context) (capacity int, err error)
// GetAccountPoolStatus 获取账号池状态统计
GetAccountPoolStatus(ctx context.Context) (status map[string]interface{}, err error)
// GetAccountHistory 获取账号历史记录
GetAccountHistory(ctx context.Context, req *v1.AccountHistoryReq) (res *v1.AccountHistoryRes, err error)
// LoginAccount 执行账号登录流程
// 注意:当前使用假数据,实际应对接骆驼加油平台和接码平台
LoginAccount(ctx context.Context) (err error)
// BatchLoginAccounts 批量登录账号
BatchLoginAccounts(ctx context.Context, count int64) (successCount int64, err error)
// GetAvailableAccount 获取可用账号按last_used_at轮询
// 选择条件:
// 1. status=2在线
// 2. daily_order_count < 10当日未达限额
// 3. daily_order_date=今日(日期匹配)
// 排序last_used_at ASC最早使用的优先实现轮询
GetAvailableAccount(ctx context.Context) (account *entity.V1CamelOilAccount, err error)
// GetAccountStatistics 获取账号统计信息
GetAccountStatistics(ctx context.Context, req *v1.AccountStatisticsReq) (res *v1.AccountStatisticsRes, err error)
// CronAccountPrefetchTask 账户预拉取定时任务 - 由cron调度器定期调用
// 流程:并发拉取账户到指定数量
CronAccountPrefetchTask(ctx context.Context) error
// CronPrefetchOrderSupplementTask 预拉取订单补充定时任务 - 由cron调度器定期调用
// 流程:检查预拉取订单库存,不足时补充
CronPrefetchOrderSupplementTask(ctx context.Context) error
// CronOrderPaymentCheckTask 订单支付状态检测任务 - 由cron调度器定期调用
CronOrderPaymentCheckTask(ctx context.Context) error
// CronAccountDailyResetTask 账号日重置任务 - 由cron调度器在每日00:00调用
CronAccountDailyResetTask(ctx context.Context) error
CronVerifyCodeCheckTask(ctx context.Context) error
// CronCardBindingTask 卡密绑定定时任务 - 由cron调度器定期调用
// 流程:处理已支付但未绑定 Token 的订单,进行卡密绑定
CronCardBindingTask(ctx context.Context) error
// CronCleanExpiredPrefetchOrders 清理过期的预拉取订单
CronCleanExpiredPrefetchOrders(ctx context.Context) (cleanedCount int, err error)
// UpdateOrderStatus 更新订单状态并记录历史
UpdateOrderStatus(ctx context.Context, orderId int64, newStatus consts.CamelOilOrderStatus, operationType consts.CamelOilOrderChangeType, rawData string, description string) (err error)
// SubmitOrder 提交订单并返回支付宝支付链接
SubmitOrder(ctx context.Context, req *v1.SubmitOrderReq) (res *v1.SubmitOrderRes, err error)
// IncrementAccountOrderCount 增加账户订单计数(支付成功时调用)
IncrementAccountOrderCount(ctx context.Context, accountId int64) error
// TriggerOrderCallback 触发订单回调
TriggerOrderCallback(ctx context.Context, req *v1.OrderCallbackReq) (res *v1.OrderCallbackRes, err error)
// ProcessPendingCallbacks 处理待回调订单(定时任务使用)
ProcessPendingCallbacks(ctx context.Context) error
// GetOrderHistory 获取订单历史记录
GetOrderHistory(ctx context.Context, req *v1.OrderHistoryReq) (res *v1.OrderHistoryRes, err error)
// RecordOrderHistory 记录订单历史
RecordOrderHistory(ctx context.Context, orderNo string, changeType consts.CamelOilOrderChangeType, rawData string, remark string) error
// GetAccountOrders 查询账号关联订单
GetAccountOrders(ctx context.Context, req *v1.AccountOrderListReq) (res *v1.AccountOrderListRes, err error)
// ListOrder 查询订单列表
ListOrder(ctx context.Context, req *v1.ListOrderReq) (res *v1.ListOrderRes, err error)
// OrderDetail 查询订单详情
OrderDetail(ctx context.Context, req *v1.OrderDetailReq) (res *v1.OrderDetailRes, err error)
// GetPrefetchOrderCapacity 获取当前可用订单容量
GetPrefetchOrderCapacity(ctx context.Context, amount float64) (capacity int, err error)
// PrefetchOrderConcurrently 使用所有可用账号并发拉取订单,直到获取到可用订单为止
PrefetchOrderConcurrently(ctx context.Context, amount float64) (result *model.PrefetchOrderResult, err error)
// PrefetchOrder 拉取单个订单(用于单个账号)
PrefetchOrder(ctx context.Context, account *entity.V1CamelOilAccount, amount float64) (prefetchId int64, err error)
// ConcurrentPrefetchOrders 使用多个账号并发拉取订单
ConcurrentPrefetchOrders(ctx context.Context, amount float64, targetCount int) (successCount int, err error)
// SupplementPrefetchOrders 补充预拉取订单,当库存不足时调用
SupplementPrefetchOrders(ctx context.Context) (supplementedCount int, err error)
// MatchPrefetchOrder 将预拉取订单与用户订单进行匹配
MatchPrefetchOrder(ctx context.Context, orderId string, amount float64) (result *model.PrefetchOrderResult, err error)
// GetPrefetchOrderLogs 获取预拉取订单日志
GetPrefetchOrderLogs(ctx context.Context, req *v1.GetPrefetchOrderLogsReq) (res *v1.GetPrefetchOrderLogsRes, err error)
// SavePrefetchOrderLog 保存预拉取订单请求日志到Redis
SavePrefetchOrderLog(ctx context.Context, phone string, amount float64, respStr string)
// GetSettings 获取骆驼模块设置
GetSettings(ctx context.Context, req *v1.GetSettingsReq) (res *v1.GetSettingsRes, err error)
// UpdateSettings 更新骆驼模块设置
UpdateSettings(ctx context.Context, req *v1.UpdateSettingsReq) (res *v1.UpdateSettingsRes, err error)
// CreateToken 创建 Token
CreateToken(ctx context.Context, tokenName string, tokenValue string, phone string, remark string, rechargeLimitAmount float64, rechargeLimitCount int) (tokenId int64, err error)
// GetTokenInfo 获取 Token 信息
GetTokenInfo(ctx context.Context, tokenId int64) (token *entity.V1CamelOilToken, err error)
// ListTokens 列出所有可用的 Token
ListTokens(ctx context.Context) (tokens []*entity.V1CamelOilToken, err error)
// ListTokensWithPagination 列出所有可用的 Token支持分页和查询条件
ListTokensWithPagination(ctx context.Context, pageReq commonApi.CommonPageReq, tokenName string, status int) (tokens []*entity.V1CamelOilToken, total int, err error)
// UpdateToken 更新 Token 信息
UpdateToken(ctx context.Context, tokenId int64, tokenName string, status int, remark string) error
// UpdateTokenInfo 修改 Token 基本信息(不包括 tokenValue
UpdateTokenInfo(ctx context.Context, tokenId int64, tokenName string, phone string, remark string, rechargeLimitAmount float64, rechargeLimitCount int) error
// DeleteToken 删除 Token软删除
DeleteToken(ctx context.Context, tokenId int64) error
// UpdateTokenStatus 更新 Token 状态并记录日志
UpdateTokenStatus(ctx context.Context, tokenId int64, newStatus consts.CamelOilTokenStatus, remark string) error
// BindCardToToken 绑定卡密到 Token使用轮询算法选择 Token
BindCardToToken(ctx context.Context, orderId int64, cardNumber string, cardPassword string, amount decimal.Decimal) (bindingId int64, err error)
// GetCardBindingInfo 获取卡密绑定信息
GetCardBindingInfo(ctx context.Context, bindingId int64) (binding *entity.V1CamelOilCardBinding, err error)
// GetCardBindingByOrder 获取订单绑定的卡密信息
GetCardBindingByOrder(ctx context.Context, orderId int64) (binding *entity.V1CamelOilCardBinding, err error)
// GetCardBindingsByToken 根据 tokenId 查询绑定的卡密信息
GetCardBindingsByToken(ctx context.Context, tokenId int64, current int, pageSize int) (bindings []*entity.V1CamelOilCardBinding, total int, err error)
// GetTokenBindingStats 获取 Token 的绑定统计
GetTokenBindingStats(ctx context.Context, tokenId int64) (bindCount int, totalAmount decimal.Decimal, err error)
// CalculateTotalBindingAmount 计算所有 Token 的累计绑定金额
CalculateTotalBindingAmount(ctx context.Context) (totalAmount decimal.Decimal, err error)
}
)
var (
localCamelOil ICamelOil
)
func CamelOil() ICamelOil {
if localCamelOil == nil {
panic("implement not found for interface ICamelOil, forgot register?")
}
return localCamelOil
}
func RegisterCamelOil(i ICamelOil) {
localCamelOil = i
}