Files
kami_backend/internal/service/camel_oil.go
danial 85b552eec3 feat(camel_oil): add order export to Excel functionality
- Add ExportOrder RPC method to camel_oil API and service interfaces
- Implement service logic to query orders and generate Excel file with order data
- Include card number and password fields in order export
- Create HTTP handler to stream Excel file with proper headers for download
- Handle token status update on frequent error ban (oneDay case)
- Fix order processing query to filter by status and pay status correctly
- Add new error code for one-day ban in camel_oil_api and handle in client logic
- Update order model and response to include card number and password
- Remove redundant logging of SendCaptcha request data in camel_oil_api client
- Add access control checks on ExportOrder endpoint for authorized users only
2025-12-11 20:13:52 +08:00

170 lines
11 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/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)
// DeleteAllExpiredAccounts 删除所有过期无效的账号
DeleteAllExpiredAccounts(ctx context.Context) (deletedCount 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)
// CronExpiredTokensCode 获取需要发送验证码的 Token状态为待验证码
CronExpiredTokensCode(ctx context.Context) 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)
// ListPrefetchOrder 查询预拉取订单列表
ListPrefetchOrder(ctx context.Context, req *v1.ListPrefetchOrderReq) (res *v1.ListPrefetchOrderRes, err error)
// ExportOrder 导出订单数据为Excel
ExportOrder(ctx context.Context, req *v1.ExportOrderReq) (fileName string, content []byte, 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, respStr string)
// UpdateSettings 更新骆驼模块设置
UpdateSettings(ctx context.Context, req *v1.UpdateSettingsReq) (res *v1.UpdateSettingsRes, err error)
// GetCamelOilSettings 获取骆驼模块设置的辅助函数
GetCamelOilSettings(ctx context.Context) (*v1.CamelOilSettings, error)
// CreateToken 创建 Token
CreateToken(ctx context.Context, req *model.CamelOilTokenCreateInput) (tokenId int64, err error)
// GetTokenInfo 获取 Token 信息
GetTokenInfo(ctx context.Context, req *model.CamelOilTokenQueryInput) (token *entity.V1CamelOilToken, err error)
// ListTokens 列出所有可用的 Token
ListTokens(ctx context.Context) (tokens []*entity.V1CamelOilToken, err error)
// ListTokensWithPagination 列出所有可用的 Token支持分页和查询条件
ListTokensWithPagination(ctx context.Context, req *model.CamelOilTokenListInput) (tokens []*entity.V1CamelOilToken, total int, err error)
// UpdateTokenInfo 修改 Token 基本信息(不包括 tokenValue
UpdateTokenInfo(ctx context.Context, req *model.CamelOilTokenUpdateInput) error
// DeleteToken 删除 Token软删除
DeleteToken(ctx context.Context, req *model.CamelOilTokenDeleteInput) error
// UpdateTokenStatus 更新 Token 状态并记录日志
UpdateTokenStatus(ctx context.Context, req *model.CamelOilTokenStatusUpdateInput) error
// BindCardToToken 绑定卡密到 Token使用轮询算法选择 Token
BindCardToToken(ctx context.Context, req *model.CamelOilCardBindInput) (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, req *model.CamelOilCardListInput) (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)
// InputVerificationCode 输入验证码
InputVerificationCode(ctx context.Context, req *model.CamelOilTokenLoginInput) (string, error)
// ResendVerificationCode 重新发送验证码
ResendVerificationCode(ctx context.Context, req *model.CamelOilTokenResendCodeInput) 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
}