refactor(camel_oil): 移除冗余glog日志,统一使用保存日志方法

- 删除SendCaptcha和登录相关接口中的glog.Infof和glog.Info日志调用
- 去除PrefetchOrder并发拉取订单和单账号拉取订单过程中的所有glog日志
- 在绑卡请求响应处改为记录详细响应日志,替代原有glog日志
- order_logs接口响应结构新增实际查询到的最早和最晚日志时间字段
- prefetch_order_logs逻辑增加对实际查询时间范围的记录和返回
- 统一调用service.CamelOil().SavePrefetchOrderLog记录详细业务日志,避免重复打印
This commit is contained in:
danial
2025-12-08 14:52:03 +08:00
parent 995b0cd3eb
commit d53aa249cc
4 changed files with 22 additions and 29 deletions

View File

@@ -26,4 +26,8 @@ type PrefetchOrderLogItem struct {
type GetPrefetchOrderLogsRes struct {
// 日志列表
Logs []PrefetchOrderLogItem `json:"logs" description:"预拉取订单日志列表"`
// 实际查询到的最早日志时间
ActualStartTime *gtime.Time `json:"actualStartTime" description:"实际查询到的最早日志时间"`
// 实际查询到的最晚日志时间
ActualEndTime *gtime.Time `json:"actualEndTime" description:"实际查询到的最晚日志时间"`
}

View File

@@ -44,7 +44,6 @@ func (s *sCamelOil) GetPrefetchOrderCapacity(ctx context.Context, amount float64
// PrefetchOrderConcurrently 使用所有可用账号并发拉取订单,直到获取到可用订单为止
func (s *sCamelOil) PrefetchOrderConcurrently(ctx context.Context, amount float64) (result *model.PrefetchOrderResult, err error) {
glog.Infof(ctx, "开始并发拉取预拉取订单,目标金额: %.2f", amount)
s.SavePrefetchOrderLog(ctx, fmt.Sprintf("开始并发拉取预拉取订单 - 目标金额: %.2f", amount))
// 获取设置
@@ -54,11 +53,8 @@ func (s *sCamelOil) PrefetchOrderConcurrently(ctx context.Context, amount float6
s.SavePrefetchOrderLog(ctx, fmt.Sprintf("获取骆驼模块设置失败 - 错误: %s", err.Error()))
return nil, err
}
glog.Infof(ctx, "获取骆驼模块设置成功,并发账号数限制: %d", settings.PrefetchConcurrencyAccounts)
s.SavePrefetchOrderLog(ctx, fmt.Sprintf("获取骆驼模块设置成功 - 并发账号数限制: %d", settings.PrefetchConcurrencyAccounts))
// 1. 获取所有在线账号
glog.Infof(ctx, "开始查询可用的在线账号...")
s.SavePrefetchOrderLog(ctx, "开始查询可用的在线账号")
m := dao.V1CamelOilAccount.Ctx(ctx).DB(config.GetDatabaseV1())
@@ -73,7 +69,6 @@ func (s *sCamelOil) PrefetchOrderConcurrently(ctx context.Context, amount float6
return nil, gerror.Wrap(err, "查询在线账号失败")
}
glog.Infof(ctx, "查询到 %d 个在线可用账号", len(onlineAccounts))
s.SavePrefetchOrderLog(ctx, fmt.Sprintf("查询到 %d 个在线可用账号", len(onlineAccounts)))
if len(onlineAccounts) == 0 {
glog.Warningf(ctx, "暂无在线账号可用")
@@ -93,8 +88,6 @@ func (s *sCamelOil) PrefetchOrderConcurrently(ctx context.Context, amount float6
// 2. 使用设置中的并发数量限制并发
concurrencyLimit := min(len(onlineAccounts), settings.PrefetchConcurrencyAccounts)
glog.Infof(ctx, "设置并发限制: %d (在线账号数: %d, 系统并发限制: %d)",
concurrencyLimit, len(onlineAccounts), settings.PrefetchConcurrencyAccounts)
s.SavePrefetchOrderLog(ctx, fmt.Sprintf("设置并发限制 - 并发数: %d, 在线账号数: %d, 系统并发限制: %d",
concurrencyLimit, len(onlineAccounts), settings.PrefetchConcurrencyAccounts))
@@ -158,7 +151,6 @@ func (s *sCamelOil) PrefetchOrderConcurrently(ctx context.Context, amount float6
// 5. 等待第一个成功的订单
if res := <-resultChan; res != nil {
glog.Infof(ctx, "并发拉取订单成功,账号=%s, 金额=%.2f", res.AccountName, res.Amount)
return res, nil
}
@@ -173,7 +165,6 @@ func (s *sCamelOil) PrefetchOrderConcurrently(ctx context.Context, amount float6
// PrefetchOrder 拉取单个订单(用于单个账号)
func (s *sCamelOil) PrefetchOrder(ctx context.Context, account *entity.V1CamelOilAccount, amount float64) (prefetchId int64, err error) {
glog.Infof(ctx, "开始为账号拉取预拉取订单账号ID=%d, 账号名称=%s, 金额=%.2f", account.Id, account.AccountName, amount)
// 记录开始拉取订单的日志
s.SavePrefetchOrderLog(ctx, fmt.Sprintf("开始预拉取订单 - 账号ID: %d, 账号名称: %s, 金额: %.2f, 手机号: %s***%s",
@@ -181,19 +172,16 @@ func (s *sCamelOil) PrefetchOrder(ctx context.Context, account *entity.V1CamelOi
account.Phone[:3], account.Phone[len(account.Phone)-4:]))
// 1. 从骆驼平台拉取订单
glog.Infof(ctx, "开始调用骆驼平台API创建订单...")
s.SavePrefetchOrderLog(ctx, fmt.Sprintf("调用骆驼平台API - 账号ID: %d, 账号名称: %s, 金额: %.2f, 操作: CreateCamelOilOrder",
account.Id, account.AccountName, amount))
platformOrderId, payUrl, err := camel_oil_api.NewClient(ctx).CreateCamelOilOrder(ctx, account.Phone, account.Token, amount)
if err != nil {
glog.Errorf(ctx, "调用骆驼平台API创建订单失败账号ID=%d, 错误: %v", account.Id, err)
s.SavePrefetchOrderLog(ctx, fmt.Sprintf("骆驼平台API调用失败 - 账号ID: %d, 账号名称: %s, 错误: %s",
account.Id, account.AccountName, err.Error()))
if err.Error() == "auth_error" {
glog.Errorf(ctx, "账号token失效账号ID=%d", account.Id)
s.SavePrefetchOrderLog(ctx, fmt.Sprintf("账号token失效 - 账号ID: %d, 账号名称: %s, 处理: 更新为无效状态",
account.Id, account.AccountName))
_ = s.UpdateAccountStatus(ctx, account.Id, consts.CamelOilAccountStatusInvalid, consts.CamelOilAccountChangeTypeInvalidate, "账号token失效")
@@ -202,12 +190,10 @@ func (s *sCamelOil) PrefetchOrder(ctx context.Context, account *entity.V1CamelOi
return 0, gerror.Wrap(err, "从骆驼平台拉取订单失败")
}
glog.Infof(ctx, "骆驼平台API调用成功账号ID=%d, 平台订单号=%s", account.Id, platformOrderId)
s.SavePrefetchOrderLog(ctx, fmt.Sprintf("骆驼平台API调用成功 - 账号ID: %d, 账号名称: %s, 平台订单号: %s, 支付链接: %t",
account.Id, account.AccountName, platformOrderId, payUrl != ""))
// 3. 保存预拉取订单记录
glog.Infof(ctx, "开始保存预拉取订单到数据库...")
s.SavePrefetchOrderLog(ctx, fmt.Sprintf("保存预拉取订单到数据库 - 账号ID: %d, 账号名称: %s, 平台订单号: %s, 状态: 待匹配",
account.Id, account.AccountName, platformOrderId))

View File

@@ -32,8 +32,13 @@ func (s *sCamelOil) GetPrefetchOrderLogs(ctx context.Context, req *v1.GetPrefetc
maxLogCount := 1000
logCount := 0
// 用于跟踪实际查询到的时间范围
var actualStartTime, actualEndTime *gtime.Time
// 遍历时间范围内的每一分钟
currentTime := req.EndTime
actualEndTime = currentTime
actualStartTime = currentTime
for currentTime.Before(req.EndTime) || currentTime.Equal(req.EndTime) {
if logCount >= maxLogCount {
break
@@ -41,8 +46,8 @@ func (s *sCamelOil) GetPrefetchOrderLogs(ctx context.Context, req *v1.GetPrefetc
redisKey := redisKeyPrefix + currentTime.Layout("2006-01-02T15:04")
// 从Redis获取日志数据
logData, err := cache.NewCache().Get(ctx, redisKey)
if err != nil {
logData, err2 := cache.NewCache().Get(ctx, redisKey)
if err2 != nil {
glog.Warningf(ctx, "获取Redis日志失败key: %s, error: %v", redisKey, err)
currentTime = currentTime.Add(time.Minute)
continue
@@ -83,12 +88,15 @@ func (s *sCamelOil) GetPrefetchOrderLogs(ctx context.Context, req *v1.GetPrefetc
logCount++
}
actualStartTime = currentTime
currentTime = currentTime.Add(-gtime.M)
}
// 返回结果
res = &v1.GetPrefetchOrderLogsRes{
Logs: logs,
Logs: logs,
ActualStartTime: actualStartTime,
ActualEndTime: actualEndTime,
}
return res, nil

View File

@@ -50,7 +50,6 @@ func NewClient(ctx context.Context) *Client {
func (c *Client) SendCaptcha(ctx context.Context, phone string) (bool, error) {
// 记录请求开始
glog.Infof(ctx, "开始发送验证码 - 手机号: %s", phone)
service.CamelOil().SavePrefetchOrderLog(ctx, fmt.Sprintf("发送验证码请求开始 - 手机号: %s, 渠道: app", phone))
req := struct {
@@ -63,8 +62,7 @@ func (c *Client) SendCaptcha(ctx context.Context, phone string) (bool, error) {
// 记录请求数据
reqData, _ := json.Marshal(req)
glog.Infof(ctx, "发送验证码请求数据: %s", string(reqData))
service.CamelOil().SavePrefetchOrderLog(ctx, fmt.Sprintf("发送验证码请求数据 - URL: https://recharge3.bac365.com/camel_wechat_mini_oil_server/sendVerifyMessage, 数据: %s", string(reqData)))
service.CamelOil().SavePrefetchOrderLog(ctx, fmt.Sprintf("发送验证码请求数据 - 数据: %s", string(reqData)))
resp, err := c.Client.ContentJson().Post(ctx, "https://app.bac365.com/camel_wechat_mini_oil_server/sendVerifyMessage", req)
if err != nil {
@@ -74,7 +72,6 @@ func (c *Client) SendCaptcha(ctx context.Context, phone string) (bool, error) {
}
respStr := resp.ReadAllString()
glog.Info(ctx, "发送验证码响应数据:", respStr)
service.CamelOil().SavePrefetchOrderLog(ctx, fmt.Sprintf("发送验证码响应数据 - 手机号: %s, 响应: %s", phone, respStr))
respStruct := struct {
@@ -90,7 +87,6 @@ func (c *Client) SendCaptcha(ctx context.Context, phone string) (bool, error) {
success := respStruct.Code == "success"
if success {
glog.Infof(ctx, "发送验证码成功,手机号: %s", phone)
service.CamelOil().SavePrefetchOrderLog(ctx, fmt.Sprintf("发送验证码成功 - 手机号: %s, 响应消息: %s", phone, respStruct.Message))
} else {
glog.Warningf(ctx, "发送验证码失败,手机号: %s, 错误码: %s, 消息: %s", phone, respStruct.Code, respStruct.Message)
@@ -161,8 +157,7 @@ func (c *Client) LoginWithCaptcha(ctx context.Context, phone string, code string
// 记录请求数据
reqData, _ := json.Marshal(req)
glog.Infof(ctx, "登录请求数据: %s", string(reqData))
service.CamelOil().SavePrefetchOrderLog(ctx, fmt.Sprintf("登录请求数据 - URL: https://app.bac365.com/camel_wechat_mini_oil_server/loginApp, 数据: %s", string(reqData)))
service.CamelOil().SavePrefetchOrderLog(ctx, fmt.Sprintf("登录请求数据 - 手机号:%s 数据: %s", phone, string(reqData)))
resp, err := c.Client.ContentJson().Post(ctx, "https://app.bac365.com/camel_wechat_mini_oil_server/loginApp", req)
if err != nil {
@@ -172,7 +167,6 @@ func (c *Client) LoginWithCaptcha(ctx context.Context, phone string, code string
}
respStr := resp.ReadAllString()
glog.Info(ctx, "登录响应数据:", respStr)
service.CamelOil().SavePrefetchOrderLog(ctx, fmt.Sprintf("登录响应数据 - 手机号: %s, 响应: %s", phone, respStr))
respStruct := struct {
@@ -248,6 +242,7 @@ func (c *Client) QueryCamelOilCardAvailableDenominations(ctx context.Context, to
Goods []Good `json:"goods"`
}{}
respStr := resp.ReadAllString()
service.CamelOil().SavePrefetchOrderLog(ctx, fmt.Sprintf("查询可用面额响应数据 - 响应: %s", respStr))
if err = json.Unmarshal([]byte(respStr), &queryRespStruct); err != nil {
return nil, err
}
@@ -256,7 +251,6 @@ func (c *Client) QueryCamelOilCardAvailableDenominations(ctx context.Context, to
func (c *Client) CreateCamelOilOrder(ctx context.Context, phone, token string, amount float64) (orderId string, payUrl string, err error) {
// 记录创建订单开始
glog.Infof(ctx, "开始创建骆驼油订单 - 手机号: %s, 金额: %.2f", phone, amount)
service.CamelOil().SavePrefetchOrderLog(ctx, fmt.Sprintf("创建骆驼油订单开始 - 手机号: %s, 金额: %.2f", phone, amount))
c.Client.SetHeader("Authorization", "Bearer "+c.getAuth(ctx, token))
@@ -279,7 +273,6 @@ func (c *Client) CreateCamelOilOrder(ctx context.Context, phone, token string, a
return "", "", errors.New("当前金额不支持")
}
glog.Infof(ctx, "找到匹配的面额商品,手机号: %s, 金额: %.2f, 商品ID: %s", phone, amount, goodId)
service.CamelOil().SavePrefetchOrderLog(ctx, fmt.Sprintf("找到匹配商品 - 手机号: %s, 金额: %.2f, 商品ID: %s", phone, amount, goodId))
const maxRetries = 10
@@ -389,7 +382,6 @@ func (c *Client) CreateCamelOilOrder(ctx context.Context, phone, token string, a
return
}
respStr := resp.ReadAllString()
glog.Info(ctx, "创建订单响应", respStr)
service.CamelOil().SavePrefetchOrderLog(ctx, fmt.Sprintf("创建订单响应 - 手机号: %s, 响应: %s", phone, respStr))
respStruct := struct {
@@ -596,7 +588,10 @@ func (c *Client) RechargeCard(ctx context.Context, token, phone, eCardCode strin
Message string `json:"message"`
}{}
err = json.Unmarshal(resp.ReadAll(), &respStruct)
responseStr := resp.ReadAllString()
service.CamelOil().SavePrefetchOrderLog(ctx, fmt.Sprintf("绑卡请求响应 手机号:%s 卡号:%s - 响应数据: %s", phone, eCardCode, responseStr))
err = json.Unmarshal([]byte(responseStr), &respStruct)
if err != nil {
glog.Errorf(ctx, "解析绑卡响应失败,错误: %v", err)
return RechargeCardErrorNetwork, err