From 5c143616d5782baf5754f3a3fd25e32095f2b341 Mon Sep 17 00:00:00 2001 From: zhouyonggao <1971162852@qq.com> Date: Wed, 17 Dec 2025 15:51:30 +0800 Subject: [PATCH] =?UTF-8?q?refactor(api):=20=E4=BC=98=E5=8C=96CreatorsAPI?= =?UTF-8?q?=E7=9A=84=E5=88=97=E8=A1=A8=E9=80=BB=E8=BE=91=E4=B8=8E=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 增强list方法,添加重复用户ID过滤,确保返回数据唯一性 - 改进用户名称显示逻辑,支持格式化输出 - 统一SQL查询逻辑,提升代码可读性与维护性 - 处理查询结果时,确保错误处理和数据有效性检查更加严谨 --- server/internal/api/creators.go | 237 +++++++++++++++++++------------ server/internal/api/ymt_users.go | 25 +++- server/server.log | 97 +------------ server/server_restart.log | 2 + 4 files changed, 173 insertions(+), 188 deletions(-) create mode 100644 server/server_restart.log diff --git a/server/internal/api/creators.go b/server/internal/api/creators.go index 5d93312..a0408cf 100644 --- a/server/internal/api/creators.go +++ b/server/internal/api/creators.go @@ -1,105 +1,158 @@ package api import ( - "database/sql" - "net/http" - "strconv" - "strings" + "database/sql" + "fmt" + "net/http" + "strconv" + "strings" ) type CreatorsAPI struct { - marketing *sql.DB + marketing *sql.DB } func CreatorsHandler(marketing *sql.DB) http.Handler { - api := &CreatorsAPI{marketing: marketing} - return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - p := strings.TrimPrefix(r.URL.Path, "/api/creators") - if r.Method == http.MethodGet && p == "" { - api.list(w, r) - return - } - w.WriteHeader(http.StatusNotFound) - }) + api := &CreatorsAPI{marketing: marketing} + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + p := strings.TrimPrefix(r.URL.Path, "/api/creators") + if r.Method == http.MethodGet && p == "" { + api.list(w, r) + return + } + w.WriteHeader(http.StatusNotFound) + }) } func (a *CreatorsAPI) list(w http.ResponseWriter, r *http.Request) { - q := r.URL.Query().Get("q") - limitStr := r.URL.Query().Get("limit") - limit := 2000 - if limitStr != "" { - if n, err := strconv.Atoi(limitStr); err == nil && n > 0 && n <= 10000 { limit = n } - } - sql1 := "SELECT DISTINCT user_id, COALESCE(user_name, '') AS name FROM activity WHERE user_id IS NOT NULL" - args := []interface{}{} - if q != "" { - sql1 += " AND (CAST(user_id AS CHAR) LIKE ? OR user_name LIKE ?)" - like := "%" + q + "%" - args = append(args, like, like) - } - sql1 += " ORDER BY user_id ASC LIMIT ?" - args = append(args, limit) - rows, err := a.marketing.Query(sql1, args...) - out := []map[string]interface{}{} - if err == nil { - defer rows.Close() - for rows.Next() { - var id sql.NullInt64 - var name sql.NullString - if err := rows.Scan(&id, &name); err != nil { continue } - if !id.Valid { continue } - m := map[string]interface{}{"id": id.Int64, "name": name.String} - out = append(out, m) - } - } - if err != nil || len(out) == 0 { - sqlPlan := "SELECT DISTINCT creator, COALESCE(creator_name, '') AS name FROM plan WHERE creator IS NOT NULL" - argsPlan := []interface{}{} - if q != "" { - sqlPlan += " AND (CAST(creator AS CHAR) LIKE ? OR creator_name LIKE ?)" - like := "%" + q + "%" - argsPlan = append(argsPlan, like, like) - } - sqlPlan += " ORDER BY creator ASC LIMIT ?" - argsPlan = append(argsPlan, limit) - rowsPlan, errPlan := a.marketing.Query(sqlPlan, argsPlan...) - if errPlan == nil { - defer rowsPlan.Close() - tmp := []map[string]interface{}{} - for rowsPlan.Next() { - var id sql.NullInt64 - var name sql.NullString - if err := rowsPlan.Scan(&id, &name); err != nil { continue } - if !id.Valid { continue } - tmp = append(tmp, map[string]interface{}{"id": id.Int64, "name": name.String}) - } - if len(tmp) > 0 { out = tmp } - } - if len(out) == 0 { - sql2 := "SELECT DISTINCT creator, '' AS name FROM `order` WHERE creator IS NOT NULL" - args2 := []interface{}{} - if q != "" { - sql2 += " AND CAST(creator AS CHAR) LIKE ?" - args2 = append(args2, "%"+q+"%") - } - sql2 += " ORDER BY creator ASC LIMIT ?" - args2 = append(args2, limit) - rows2, err2 := a.marketing.Query(sql2, args2...) - if err2 != nil { - fail(w, r, http.StatusInternalServerError, err2.Error()) - return - } - defer rows2.Close() - out = out[:0] - for rows2.Next() { - var id sql.NullInt64 - var name sql.NullString - if err := rows2.Scan(&id, &name); err != nil { continue } - if !id.Valid { continue } - m := map[string]interface{}{"id": id.Int64, "name": name.String} - out = append(out, m) - } - } - } - ok(w, r, out) + q := r.URL.Query().Get("q") + limitStr := r.URL.Query().Get("limit") + limit := 2000 + if limitStr != "" { + if n, err := strconv.Atoi(limitStr); err == nil && n > 0 && n <= 10000 { + limit = n + } + } + sql1 := "SELECT DISTINCT user_id, COALESCE(user_name, '') AS name FROM activity WHERE user_id IS NOT NULL" + args := []interface{}{} + if q != "" { + sql1 += " AND (CAST(user_id AS CHAR) LIKE ? OR user_name LIKE ?)" + like := "%" + q + "%" + args = append(args, like, like) + } + sql1 += " ORDER BY user_id ASC LIMIT ?" + args = append(args, limit) + rows, err := a.marketing.Query(sql1, args...) + out := []map[string]interface{}{} + used := map[int64]struct{}{} + if err == nil { + defer rows.Close() + for rows.Next() { + var id sql.NullInt64 + var name sql.NullString + if err := rows.Scan(&id, &name); err != nil { + continue + } + if !id.Valid { + continue + } + if _, ok := used[id.Int64]; ok { + continue + } + used[id.Int64] = struct{}{} + + n := strings.TrimSpace(name.String) + if n == "" { + n = strconv.FormatInt(id.Int64, 10) + } + display := fmt.Sprintf("%s(%d)", n, id.Int64) + + m := map[string]interface{}{"id": id.Int64, "name": display} + out = append(out, m) + } + } + if err != nil || len(out) == 0 { + sqlPlan := "SELECT DISTINCT creator, COALESCE(creator_name, '') AS name FROM plan WHERE creator IS NOT NULL" + argsPlan := []interface{}{} + if q != "" { + sqlPlan += " AND (CAST(creator AS CHAR) LIKE ? OR creator_name LIKE ?)" + like := "%" + q + "%" + argsPlan = append(argsPlan, like, like) + } + sqlPlan += " ORDER BY creator ASC LIMIT ?" + argsPlan = append(argsPlan, limit) + rowsPlan, errPlan := a.marketing.Query(sqlPlan, argsPlan...) + if errPlan == nil { + defer rowsPlan.Close() + tmp := []map[string]interface{}{} + usedPlan := map[int64]struct{}{} + for rowsPlan.Next() { + var id sql.NullInt64 + var name sql.NullString + if err := rowsPlan.Scan(&id, &name); err != nil { + continue + } + if !id.Valid { + continue + } + if _, ok := usedPlan[id.Int64]; ok { + continue + } + usedPlan[id.Int64] = struct{}{} + + n := strings.TrimSpace(name.String) + if n == "" { + n = strconv.FormatInt(id.Int64, 10) + } + display := fmt.Sprintf("%s(%d)", n, id.Int64) + + tmp = append(tmp, map[string]interface{}{"id": id.Int64, "name": display}) + } + if len(tmp) > 0 { + out = tmp + } + } + if len(out) == 0 { + sql2 := "SELECT DISTINCT creator, '' AS name FROM `order` WHERE creator IS NOT NULL" + args2 := []interface{}{} + if q != "" { + sql2 += " AND CAST(creator AS CHAR) LIKE ?" + args2 = append(args2, "%"+q+"%") + } + sql2 += " ORDER BY creator ASC LIMIT ?" + args2 = append(args2, limit) + rows2, err2 := a.marketing.Query(sql2, args2...) + if err2 != nil { + fail(w, r, http.StatusInternalServerError, err2.Error()) + return + } + defer rows2.Close() + out = out[:0] + usedOrder := map[int64]struct{}{} + for rows2.Next() { + var id sql.NullInt64 + var name sql.NullString + if err := rows2.Scan(&id, &name); err != nil { + continue + } + if !id.Valid { + continue + } + if _, ok := usedOrder[id.Int64]; ok { + continue + } + usedOrder[id.Int64] = struct{}{} + + n := strings.TrimSpace(name.String) + if n == "" { + n = strconv.FormatInt(id.Int64, 10) + } + display := fmt.Sprintf("%s(%d)", n, id.Int64) + + m := map[string]interface{}{"id": id.Int64, "name": display} + out = append(out, m) + } + } + } + ok(w, r, out) } diff --git a/server/internal/api/ymt_users.go b/server/internal/api/ymt_users.go index ce694dc..c41f373 100644 --- a/server/internal/api/ymt_users.go +++ b/server/internal/api/ymt_users.go @@ -2,6 +2,7 @@ package api import ( "database/sql" + "fmt" "net/http" "strconv" "strings" @@ -45,13 +46,31 @@ func (a *YMTUsersAPI) list(w http.ResponseWriter, r *http.Request) { return } defer rows.Close() + out := []map[string]interface{}{} + used := map[int64]struct{}{} for rows.Next() { var id sql.NullInt64 var name sql.NullString - if err := rows.Scan(&id, &name); err != nil { continue } - if !id.Valid { continue } - out = append(out, map[string]interface{}{"id": id.Int64, "name": name.String}) + if err := rows.Scan(&id, &name); err != nil { + continue + } + if !id.Valid { + continue + } + if _, ok := used[id.Int64]; ok { + // 根据 ID 去重 + continue + } + used[id.Int64] = struct{}{} + + n := strings.TrimSpace(name.String) + if n == "" { + n = strconv.FormatInt(id.Int64, 10) + } + display := fmt.Sprintf("%s(%d)", n, id.Int64) + + out = append(out, map[string]interface{}{"id": id.Int64, "name": display}) } ok(w, r, out) } diff --git a/server/server.log b/server/server.log index d22715e..1730c66 100644 --- a/server/server.log +++ b/server/server.log @@ -2,96 +2,7 @@ connecting YMT MySQL: 47.97.27.195:3306 db merketing user root connecting Marketing MySQL: 192.168.6.92:3306 db market user root connecting Meta MySQL (templates/jobs): 47.97.27.195:3306 db merketing user root server listening on :8077 -{"bytes":9873,"duration_ms":3,"kind":"access","level":"INFO","method":"","path":"","query":"","remote":"","status":200,"trace_id":"","ts":"2025-12-15T12:03:13+08:00"} -{"bytes":2702,"duration_ms":61,"kind":"access","level":"INFO","method":"","path":"","query":"","remote":"","status":200,"trace_id":"","ts":"2025-12-15T12:03:13+08:00"} -{"bytes":2047,"duration_ms":116,"kind":"access","level":"INFO","method":"","path":"","query":"","remote":"","status":200,"trace_id":"","ts":"2025-12-15T12:03:15+08:00"} -{"bytes":639,"duration_ms":113,"kind":"access","level":"INFO","method":"","path":"","query":"","remote":"","status":200,"trace_id":"","ts":"2025-12-15T12:03:15+08:00"} -{"event":"export_filters_debug","filters":{"create_time_between":["2025-11-01 00:00:00","2025-11-30 23:59:59"],"type_eq":2},"has_creator_in":false,"has_merchant_id_in":false,"level":"INFO","ts":"2025-12-15T12:03:16+08:00"} -{"event":"fields_not_whitelisted","level":"ERROR","removed":["order_digit.card_pass"],"ts":"2025-12-15T12:03:16+08:00"} -{"event":"fields_deduplicated_exact","level":"INFO","reason":"移除完全重复的字段","removed":["merchant.name","order.status","order.create_time","order.update_time"],"ts":"2025-12-15T12:03:16+08:00"} -{"event":"field_count_mismatch","final_count":62,"level":"ERROR","template_count":68,"ts":"2025-12-15T12:03:16+08:00"} -{"args":["2025-11-01 00:00:00","2025-11-30 23:59:59",2],"datasource":"ymt","event":"export_sql","file_format":"xlsx","final_sql":"SELECT `order_info`.order_no AS `order.order_number`,`order_info`.key_code AS `order.key`,CASE `order_info`.type WHEN 1 THEN '红包订单' WHEN 2 THEN '直充卡密订单' WHEN 3 THEN '立减金订单' ELSE '' END AS `order.type`,CASE `order_info`.status WHEN 1 THEN '待充值' WHEN 2 THEN '充值中' WHEN 3 THEN '充值成功' WHEN 4 THEN '充值失败' WHEN 5 THEN '已过期' WHEN 6 THEN '已作废' WHEN 7 THEN '已核销' WHEN 8 THEN '核销失败' WHEN 9 THEN '订单重置' WHEN 10 THEN '卡单' ELSE '' END AS `order.status`,`order_info`.contract_price AS `order.contract_price`,`order_info`.official_price AS `order.official_price`,`order_info`.merchant_name AS `order.merchant_name`,`order_info`.activity_name AS `order.activity_name`,`order_info`.goods_name AS `order.goods_name`,`order_info`.num AS `order.num`,CASE `order_info`.pay_status WHEN 1 THEN '待支付' WHEN 2 THEN '支付中' WHEN 3 THEN '已支付' WHEN 4 THEN '取消支付' WHEN 5 THEN '退款中' WHEN 6 THEN '退款成功' ELSE '' END AS `order.pay_status`,`order_info`.supplier_product_name AS `order.supplier_product_name`,CASE `order_info`.is_inner WHEN 1 THEN '内部供应商' ELSE '外部供应商' END AS `order.is_inner`,`order_info`.icon AS `order.icon`,`order_info`.cost_price AS `order.cost_price`,`order_info`.success_num AS `order.success_num`,`order_info`.is_reset AS `order.is_reset`,`order_info`.create_time AS `order.create_time`,`order_info`.update_time AS `order.update_time`,CASE `order_info`.is_retry WHEN 0 THEN '可以失败重试' WHEN 1 THEN '可以失败重试' WHEN 2 THEN '不可以失败重试' ELSE '' END AS `order.is_retry`,`order_info`.channel AS `order.channel`,`order_info`.is_store AS `order.is_store`,'' AS `order.supplier_name`,`order_info`.pay_price AS `order.pay_amount`,`order_info`.pay_time AS `order.pay_time`,`order_info`.coupon_id AS `order.coupon_id`,`order_info`.discount_amount AS `order.discount_amount`,`order_info`.out_order_no AS `order.out_trade_no`,`order_info`.next_retry_time AS `order.next_retry_time`,`order_info`.recharge_suc_time AS `order.recharge_suc_time`,`merchant`.merchant_no AS `merchant.merchant_no`,`merchant`.name AS `merchant.name`,`merchant`.subject AS `merchant.subject`,CASE `merchant`.third_party WHEN 1 THEN '外部供应商' WHEN 2 THEN '内部供应商' ELSE '' END AS `merchant.third_party`,`merchant`.contact_name AS `merchant.contact_name`,`merchant`.contact_phone AS `merchant.contact_phone`,`activity`.user_name AS `activity.user_name`,`activity`.activity_no AS `activity.activity_no`,`activity`.key_usable_num AS `activity.key_usable_num`,`activity`.domain_url AS `activity.domain_url`,`activity`.theme_login_id AS `activity.theme_login_id`,`activity`.theme_list_id AS `activity.theme_list_id`,CASE `activity`.settlement_type WHEN 1 THEN '发放结算' WHEN 2 THEN '打开结算' WHEN 3 THEN '领用结算' WHEN 4 THEN '核销结算' ELSE '' END AS `activity.settlement_type`,`activity`.key_expire_type AS `activity.key_expire_type`,`activity`.key_valid_day AS `activity.key_valid_day`,`activity`.key_begin_time AS `activity.key_begin_time`,`activity`.key_end_time AS `activity.key_end_time`,`activity`.auto_charge AS `activity.auto_charge`,`activity`.key_style AS `activity.key_style`,`activity`.amount AS `activity.amount`,`activity`.channels AS `activity.channels`,`activity`.key_pay_button_text AS `activity.key_pay_button_text`,`activity`.goods_pay_button_text AS `activity.goods_pay_button_text`,`order_digit`.order_no AS `order_digit.order_no`,`order_digit`.card_no AS `order_digit.card_no`,`order_digit`.account AS `order_digit.account`,`order_digit`.success_time AS `order_digit.success_time`,`order_digit`.supplier_product_no AS `order_digit.supplier_product_no`,CASE `order_digit`.order_type WHEN 1 THEN '直充' WHEN 2 THEN '卡密' ELSE '' END AS `order_digit.order_type`,`order_digit`.end_time AS `order_digit.end_time`,`order_digit`.code AS `order_digit.code`,`order_digit`.sms_channel AS `order_digit.sms_channel` FROM `order_info` LEFT JOIN `order_digit` ON `order_digit`.order_no = `order_info`.order_no LEFT JOIN `merchant` ON `merchant`.id = `order_info`.merchant_id LEFT JOIN `activity` ON `activity`.id = `order_info`.activity_id WHERE `order_info`.create_time BETWEEN '2025-11-01 00:00:00' AND '2025-11-30 23:59:59' AND `order_info`.type = 2","level":"INFO","main_table":"order_info","sql":"SELECT `order_info`.order_no AS `order.order_number`,`order_info`.key_code AS `order.key`,CASE `order_info`.type WHEN 1 THEN '红包订单' WHEN 2 THEN '直充卡密订单' WHEN 3 THEN '立减金订单' ELSE '' END AS `order.type`,CASE `order_info`.status WHEN 1 THEN '待充值' WHEN 2 THEN '充值中' WHEN 3 THEN '充值成功' WHEN 4 THEN '充值失败' WHEN 5 THEN '已过期' WHEN 6 THEN '已作废' WHEN 7 THEN '已核销' WHEN 8 THEN '核销失败' WHEN 9 THEN '订单重置' WHEN 10 THEN '卡单' ELSE '' END AS `order.status`,`order_info`.contract_price AS `order.contract_price`,`order_info`.official_price AS `order.official_price`,`order_info`.merchant_name AS `order.merchant_name`,`order_info`.activity_name AS `order.activity_name`,`order_info`.goods_name AS `order.goods_name`,`order_info`.num AS `order.num`,CASE `order_info`.pay_status WHEN 1 THEN '待支付' WHEN 2 THEN '支付中' WHEN 3 THEN '已支付' WHEN 4 THEN '取消支付' WHEN 5 THEN '退款中' WHEN 6 THEN '退款成功' ELSE '' END AS `order.pay_status`,`order_info`.supplier_product_name AS `order.supplier_product_name`,CASE `order_info`.is_inner WHEN 1 THEN '内部供应商' ELSE '外部供应商' END AS `order.is_inner`,`order_info`.icon AS `order.icon`,`order_info`.cost_price AS `order.cost_price`,`order_info`.success_num AS `order.success_num`,`order_info`.is_reset AS `order.is_reset`,`order_info`.create_time AS `order.create_time`,`order_info`.update_time AS `order.update_time`,CASE `order_info`.is_retry WHEN 0 THEN '可以失败重试' WHEN 1 THEN '可以失败重试' WHEN 2 THEN '不可以失败重试' ELSE '' END AS `order.is_retry`,`order_info`.channel AS `order.channel`,`order_info`.is_store AS `order.is_store`,'' AS `order.supplier_name`,`order_info`.pay_price AS `order.pay_amount`,`order_info`.pay_time AS `order.pay_time`,`order_info`.coupon_id AS `order.coupon_id`,`order_info`.discount_amount AS `order.discount_amount`,`order_info`.out_order_no AS `order.out_trade_no`,`order_info`.next_retry_time AS `order.next_retry_time`,`order_info`.recharge_suc_time AS `order.recharge_suc_time`,`merchant`.merchant_no AS `merchant.merchant_no`,`merchant`.name AS `merchant.name`,`merchant`.subject AS `merchant.subject`,CASE `merchant`.third_party WHEN 1 THEN '外部供应商' WHEN 2 THEN '内部供应商' ELSE '' END AS `merchant.third_party`,`merchant`.contact_name AS `merchant.contact_name`,`merchant`.contact_phone AS `merchant.contact_phone`,`activity`.user_name AS `activity.user_name`,`activity`.activity_no AS `activity.activity_no`,`activity`.key_usable_num AS `activity.key_usable_num`,`activity`.domain_url AS `activity.domain_url`,`activity`.theme_login_id AS `activity.theme_login_id`,`activity`.theme_list_id AS `activity.theme_list_id`,CASE `activity`.settlement_type WHEN 1 THEN '发放结算' WHEN 2 THEN '打开结算' WHEN 3 THEN '领用结算' WHEN 4 THEN '核销结算' ELSE '' END AS `activity.settlement_type`,`activity`.key_expire_type AS `activity.key_expire_type`,`activity`.key_valid_day AS `activity.key_valid_day`,`activity`.key_begin_time AS `activity.key_begin_time`,`activity`.key_end_time AS `activity.key_end_time`,`activity`.auto_charge AS `activity.auto_charge`,`activity`.key_style AS `activity.key_style`,`activity`.amount AS `activity.amount`,`activity`.channels AS `activity.channels`,`activity`.key_pay_button_text AS `activity.key_pay_button_text`,`activity`.goods_pay_button_text AS `activity.goods_pay_button_text`,`order_digit`.order_no AS `order_digit.order_no`,`order_digit`.card_no AS `order_digit.card_no`,`order_digit`.account AS `order_digit.account`,`order_digit`.success_time AS `order_digit.success_time`,`order_digit`.supplier_product_no AS `order_digit.supplier_product_no`,CASE `order_digit`.order_type WHEN 1 THEN '直充' WHEN 2 THEN '卡密' ELSE '' END AS `order_digit.order_type`,`order_digit`.end_time AS `order_digit.end_time`,`order_digit`.code AS `order_digit.code`,`order_digit`.sms_channel AS `order_digit.sms_channel` FROM `order_info` LEFT JOIN `order_digit` ON `order_digit`.order_no = `order_info`.order_no LEFT JOIN `merchant` ON `merchant`.id = `order_info`.merchant_id LEFT JOIN `activity` ON `activity`.id = `order_info`.activity_id WHERE `order_info`.create_time BETWEEN ? AND ? AND `order_info`.type = ?","ts":"2025-12-15T12:03:16+08:00"} -export_sql ds=ymt main=order_info fmt=xlsx sql=SELECT `order_info`.order_no AS `order.order_number`,`order_info`.key_code AS `order.key`,CASE `order_info`.type WHEN 1 THEN '红包订单' WHEN 2 THEN '直充卡密订单' WHEN 3 THEN '立减金订单' ELSE '' END AS `order.type`,CASE `order_info`.status WHEN 1 THEN '待充值' WHEN 2 THEN '充值中' WHEN 3 THEN '充值成功' WHEN 4 THEN '充值失败' WHEN 5 THEN '已过期' WHEN 6 THEN '已作废' WHEN 7 THEN '已核销' WHEN 8 THEN '核销失败' WHEN 9 THEN '订单重置' WHEN 10 THEN '卡单' ELSE '' END AS `order.status`,`order_info`.contract_price AS `order.contract_price`,`order_info`.official_price AS `order.official_price`,`order_info`.merchant_name AS `order.merchant_name`,`order_info`.activity_name AS `order.activity_name`,`order_info`.goods_name AS `order.goods_name`,`order_info`.num AS `order.num`,CASE `order_info`.pay_status WHEN 1 THEN '待支付' WHEN 2 THEN '支付中' WHEN 3 THEN '已支付' WHEN 4 THEN '取消支付' WHEN 5 THEN '退款中' WHEN 6 THEN '退款成功' ELSE '' END AS `order.pay_status`,`order_info`.supplier_product_name AS `order.supplier_product_name`,CASE `order_info`.is_inner WHEN 1 THEN '内部供应商' ELSE '外部供应商' END AS `order.is_inner`,`order_info`.icon AS `order.icon`,`order_info`.cost_price AS `order.cost_price`,`order_info`.success_num AS `order.success_num`,`order_info`.is_reset AS `order.is_reset`,`order_info`.create_time AS `order.create_time`,`order_info`.update_time AS `order.update_time`,CASE `order_info`.is_retry WHEN 0 THEN '可以失败重试' WHEN 1 THEN '可以失败重试' WHEN 2 THEN '不可以失败重试' ELSE '' END AS `order.is_retry`,`order_info`.channel AS `order.channel`,`order_info`.is_store AS `order.is_store`,'' AS `order.supplier_name`,`order_info`.pay_price AS `order.pay_amount`,`order_info`.pay_time AS `order.pay_time`,`order_info`.coupon_id AS `order.coupon_id`,`order_info`.discount_amount AS `order.discount_amount`,`order_info`.out_order_no AS `order.out_trade_no`,`order_info`.next_retry_time AS `order.next_retry_time`,`order_info`.recharge_suc_time AS `order.recharge_suc_time`,`merchant`.merchant_no AS `merchant.merchant_no`,`merchant`.name AS `merchant.name`,`merchant`.subject AS `merchant.subject`,CASE `merchant`.third_party WHEN 1 THEN '外部供应商' WHEN 2 THEN '内部供应商' ELSE '' END AS `merchant.third_party`,`merchant`.contact_name AS `merchant.contact_name`,`merchant`.contact_phone AS `merchant.contact_phone`,`activity`.user_name AS `activity.user_name`,`activity`.activity_no AS `activity.activity_no`,`activity`.key_usable_num AS `activity.key_usable_num`,`activity`.domain_url AS `activity.domain_url`,`activity`.theme_login_id AS `activity.theme_login_id`,`activity`.theme_list_id AS `activity.theme_list_id`,CASE `activity`.settlement_type WHEN 1 THEN '发放结算' WHEN 2 THEN '打开结算' WHEN 3 THEN '领用结算' WHEN 4 THEN '核销结算' ELSE '' END AS `activity.settlement_type`,`activity`.key_expire_type AS `activity.key_expire_type`,`activity`.key_valid_day AS `activity.key_valid_day`,`activity`.key_begin_time AS `activity.key_begin_time`,`activity`.key_end_time AS `activity.key_end_time`,`activity`.auto_charge AS `activity.auto_charge`,`activity`.key_style AS `activity.key_style`,`activity`.amount AS `activity.amount`,`activity`.channels AS `activity.channels`,`activity`.key_pay_button_text AS `activity.key_pay_button_text`,`activity`.goods_pay_button_text AS `activity.goods_pay_button_text`,`order_digit`.order_no AS `order_digit.order_no`,`order_digit`.card_no AS `order_digit.card_no`,`order_digit`.account AS `order_digit.account`,`order_digit`.success_time AS `order_digit.success_time`,`order_digit`.supplier_product_no AS `order_digit.supplier_product_no`,CASE `order_digit`.order_type WHEN 1 THEN '直充' WHEN 2 THEN '卡密' ELSE '' END AS `order_digit.order_type`,`order_digit`.end_time AS `order_digit.end_time`,`order_digit`.code AS `order_digit.code`,`order_digit`.sms_channel AS `order_digit.sms_channel` FROM `order_info` LEFT JOIN `order_digit` ON `order_digit`.order_no = `order_info`.order_no LEFT JOIN `merchant` ON `merchant`.id = `order_info`.merchant_id LEFT JOIN `activity` ON `activity`.id = `order_info`.activity_id WHERE `order_info`.create_time BETWEEN ? AND ? AND `order_info`.type = ? args=[2025-11-01 00:00:00 2025-11-30 23:59:59 2] final_sql=SELECT `order_info`.order_no AS `order.order_number`,`order_info`.key_code AS `order.key`,CASE `order_info`.type WHEN 1 THEN '红包订单' WHEN 2 THEN '直充卡密订单' WHEN 3 THEN '立减金订单' ELSE '' END AS `order.type`,CASE `order_info`.status WHEN 1 THEN '待充值' WHEN 2 THEN '充值中' WHEN 3 THEN '充值成功' WHEN 4 THEN '充值失败' WHEN 5 THEN '已过期' WHEN 6 THEN '已作废' WHEN 7 THEN '已核销' WHEN 8 THEN '核销失败' WHEN 9 THEN '订单重置' WHEN 10 THEN '卡单' ELSE '' END AS `order.status`,`order_info`.contract_price AS `order.contract_price`,`order_info`.official_price AS `order.official_price`,`order_info`.merchant_name AS `order.merchant_name`,`order_info`.activity_name AS `order.activity_name`,`order_info`.goods_name AS `order.goods_name`,`order_info`.num AS `order.num`,CASE `order_info`.pay_status WHEN 1 THEN '待支付' WHEN 2 THEN '支付中' WHEN 3 THEN '已支付' WHEN 4 THEN '取消支付' WHEN 5 THEN '退款中' WHEN 6 THEN '退款成功' ELSE '' END AS `order.pay_status`,`order_info`.supplier_product_name AS `order.supplier_product_name`,CASE `order_info`.is_inner WHEN 1 THEN '内部供应商' ELSE '外部供应商' END AS `order.is_inner`,`order_info`.icon AS `order.icon`,`order_info`.cost_price AS `order.cost_price`,`order_info`.success_num AS `order.success_num`,`order_info`.is_reset AS `order.is_reset`,`order_info`.create_time AS `order.create_time`,`order_info`.update_time AS `order.update_time`,CASE `order_info`.is_retry WHEN 0 THEN '可以失败重试' WHEN 1 THEN '可以失败重试' WHEN 2 THEN '不可以失败重试' ELSE '' END AS `order.is_retry`,`order_info`.channel AS `order.channel`,`order_info`.is_store AS `order.is_store`,'' AS `order.supplier_name`,`order_info`.pay_price AS `order.pay_amount`,`order_info`.pay_time AS `order.pay_time`,`order_info`.coupon_id AS `order.coupon_id`,`order_info`.discount_amount AS `order.discount_amount`,`order_info`.out_order_no AS `order.out_trade_no`,`order_info`.next_retry_time AS `order.next_retry_time`,`order_info`.recharge_suc_time AS `order.recharge_suc_time`,`merchant`.merchant_no AS `merchant.merchant_no`,`merchant`.name AS `merchant.name`,`merchant`.subject AS `merchant.subject`,CASE `merchant`.third_party WHEN 1 THEN '外部供应商' WHEN 2 THEN '内部供应商' ELSE '' END AS `merchant.third_party`,`merchant`.contact_name AS `merchant.contact_name`,`merchant`.contact_phone AS `merchant.contact_phone`,`activity`.user_name AS `activity.user_name`,`activity`.activity_no AS `activity.activity_no`,`activity`.key_usable_num AS `activity.key_usable_num`,`activity`.domain_url AS `activity.domain_url`,`activity`.theme_login_id AS `activity.theme_login_id`,`activity`.theme_list_id AS `activity.theme_list_id`,CASE `activity`.settlement_type WHEN 1 THEN '发放结算' WHEN 2 THEN '打开结算' WHEN 3 THEN '领用结算' WHEN 4 THEN '核销结算' ELSE '' END AS `activity.settlement_type`,`activity`.key_expire_type AS `activity.key_expire_type`,`activity`.key_valid_day AS `activity.key_valid_day`,`activity`.key_begin_time AS `activity.key_begin_time`,`activity`.key_end_time AS `activity.key_end_time`,`activity`.auto_charge AS `activity.auto_charge`,`activity`.key_style AS `activity.key_style`,`activity`.amount AS `activity.amount`,`activity`.channels AS `activity.channels`,`activity`.key_pay_button_text AS `activity.key_pay_button_text`,`activity`.goods_pay_button_text AS `activity.goods_pay_button_text`,`order_digit`.order_no AS `order_digit.order_no`,`order_digit`.card_no AS `order_digit.card_no`,`order_digit`.account AS `order_digit.account`,`order_digit`.success_time AS `order_digit.success_time`,`order_digit`.supplier_product_no AS `order_digit.supplier_product_no`,CASE `order_digit`.order_type WHEN 1 THEN '直充' WHEN 2 THEN '卡密' ELSE '' END AS `order_digit.order_type`,`order_digit`.end_time AS `order_digit.end_time`,`order_digit`.code AS `order_digit.code`,`order_digit`.sms_channel AS `order_digit.sms_channel` FROM `order_info` LEFT JOIN `order_digit` ON `order_digit`.order_no = `order_info`.order_no LEFT JOIN `merchant` ON `merchant`.id = `order_info`.merchant_id LEFT JOIN `activity` ON `activity`.id = `order_info`.activity_id WHERE `order_info`.create_time BETWEEN '2025-11-01 00:00:00' AND '2025-11-30 23:59:59' AND `order_info`.type = 2 -sql=EXPLAIN SELECT `order_info`.order_no AS `order.order_number`,`order_info`.key_code AS `order.key`,CASE `order_info`.type WHEN 1 THEN '红包订单' WHEN 2 THEN '直充卡密订单' WHEN 3 THEN '立减金订单' ELSE '' END AS `order.type`,CASE `order_info`.status WHEN 1 THEN '待充值' WHEN 2 THEN '充值中' WHEN 3 THEN '充值成功' WHEN 4 THEN '充值失败' WHEN 5 THEN '已过期' WHEN 6 THEN '已作废' WHEN 7 THEN '已核销' WHEN 8 THEN '核销失败' WHEN 9 THEN '订单重置' WHEN 10 THEN '卡单' ELSE '' END AS `order.status`,`order_info`.contract_price AS `order.contract_price`,`order_info`.official_price AS `order.official_price`,`order_info`.merchant_name AS `order.merchant_name`,`order_info`.activity_name AS `order.activity_name`,`order_info`.goods_name AS `order.goods_name`,`order_info`.num AS `order.num`,CASE `order_info`.pay_status WHEN 1 THEN '待支付' WHEN 2 THEN '支付中' WHEN 3 THEN '已支付' WHEN 4 THEN '取消支付' WHEN 5 THEN '退款中' WHEN 6 THEN '退款成功' ELSE '' END AS `order.pay_status`,`order_info`.supplier_product_name AS `order.supplier_product_name`,CASE `order_info`.is_inner WHEN 1 THEN '内部供应商' ELSE '外部供应商' END AS `order.is_inner`,`order_info`.icon AS `order.icon`,`order_info`.cost_price AS `order.cost_price`,`order_info`.success_num AS `order.success_num`,`order_info`.is_reset AS `order.is_reset`,`order_info`.create_time AS `order.create_time`,`order_info`.update_time AS `order.update_time`,CASE `order_info`.is_retry WHEN 0 THEN '可以失败重试' WHEN 1 THEN '可以失败重试' WHEN 2 THEN '不可以失败重试' ELSE '' END AS `order.is_retry`,`order_info`.channel AS `order.channel`,`order_info`.is_store AS `order.is_store`,'' AS `order.supplier_name`,`order_info`.pay_price AS `order.pay_amount`,`order_info`.pay_time AS `order.pay_time`,`order_info`.coupon_id AS `order.coupon_id`,`order_info`.discount_amount AS `order.discount_amount`,`order_info`.out_order_no AS `order.out_trade_no`,`order_info`.next_retry_time AS `order.next_retry_time`,`order_info`.recharge_suc_time AS `order.recharge_suc_time`,`merchant`.merchant_no AS `merchant.merchant_no`,`merchant`.name AS `merchant.name`,`merchant`.subject AS `merchant.subject`,CASE `merchant`.third_party WHEN 1 THEN '外部供应商' WHEN 2 THEN '内部供应商' ELSE '' END AS `merchant.third_party`,`merchant`.contact_name AS `merchant.contact_name`,`merchant`.contact_phone AS `merchant.contact_phone`,`activity`.user_name AS `activity.user_name`,`activity`.activity_no AS `activity.activity_no`,`activity`.key_usable_num AS `activity.key_usable_num`,`activity`.domain_url AS `activity.domain_url`,`activity`.theme_login_id AS `activity.theme_login_id`,`activity`.theme_list_id AS `activity.theme_list_id`,CASE `activity`.settlement_type WHEN 1 THEN '发放结算' WHEN 2 THEN '打开结算' WHEN 3 THEN '领用结算' WHEN 4 THEN '核销结算' ELSE '' END AS `activity.settlement_type`,`activity`.key_expire_type AS `activity.key_expire_type`,`activity`.key_valid_day AS `activity.key_valid_day`,`activity`.key_begin_time AS `activity.key_begin_time`,`activity`.key_end_time AS `activity.key_end_time`,`activity`.auto_charge AS `activity.auto_charge`,`activity`.key_style AS `activity.key_style`,`activity`.amount AS `activity.amount`,`activity`.channels AS `activity.channels`,`activity`.key_pay_button_text AS `activity.key_pay_button_text`,`activity`.goods_pay_button_text AS `activity.goods_pay_button_text`,`order_digit`.order_no AS `order_digit.order_no`,`order_digit`.card_no AS `order_digit.card_no`,`order_digit`.account AS `order_digit.account`,`order_digit`.success_time AS `order_digit.success_time`,`order_digit`.supplier_product_no AS `order_digit.supplier_product_no`,CASE `order_digit`.order_type WHEN 1 THEN '直充' WHEN 2 THEN '卡密' ELSE '' END AS `order_digit.order_type`,`order_digit`.end_time AS `order_digit.end_time`,`order_digit`.code AS `order_digit.code`,`order_digit`.sms_channel AS `order_digit.sms_channel` FROM `order_info` LEFT JOIN `order_digit` ON `order_digit`.order_no = `order_info`.order_no LEFT JOIN `merchant` ON `merchant`.id = `order_info`.merchant_id LEFT JOIN `activity` ON `activity`.id = `order_info`.activity_id WHERE `order_info`.create_time BETWEEN ? AND ? AND `order_info`.type = ? args=[2025-11-01 00:00:00 2025-11-30 23:59:59 2] -{"bytes":85,"duration_ms":990,"kind":"access","level":"INFO","method":"","path":"","query":"","remote":"","status":200,"trace_id":"","ts":"2025-12-15T12:03:17+08:00"} -job_id=294 sql=SELECT `order_info`.order_no AS `order.order_number`,`order_info`.key_code AS `order.key`,CASE `order_info`.type WHEN 1 THEN '红包订单' WHEN 2 THEN '直充卡密订单' WHEN 3 THEN '立减金订单' ELSE '' END AS `order.type`,CASE `order_info`.status WHEN 1 THEN '待充值' WHEN 2 THEN '充值中' WHEN 3 THEN '充值成功' WHEN 4 THEN '充值失败' WHEN 5 THEN '已过期' WHEN 6 THEN '已作废' WHEN 7 THEN '已核销' WHEN 8 THEN '核销失败' WHEN 9 THEN '订单重置' WHEN 10 THEN '卡单' ELSE '' END AS `order.status`,`order_info`.contract_price AS `order.contract_price`,`order_info`.official_price AS `order.official_price`,`order_info`.merchant_name AS `order.merchant_name`,`order_info`.activity_name AS `order.activity_name`,`order_info`.goods_name AS `order.goods_name`,`order_info`.num AS `order.num`,CASE `order_info`.pay_status WHEN 1 THEN '待支付' WHEN 2 THEN '支付中' WHEN 3 THEN '已支付' WHEN 4 THEN '取消支付' WHEN 5 THEN '退款中' WHEN 6 THEN '退款成功' ELSE '' END AS `order.pay_status`,`order_info`.supplier_product_name AS `order.supplier_product_name`,CASE `order_info`.is_inner WHEN 1 THEN '内部供应商' ELSE '外部供应商' END AS `order.is_inner`,`order_info`.icon AS `order.icon`,`order_info`.cost_price AS `order.cost_price`,`order_info`.success_num AS `order.success_num`,`order_info`.is_reset AS `order.is_reset`,`order_info`.create_time AS `order.create_time`,`order_info`.update_time AS `order.update_time`,CASE `order_info`.is_retry WHEN 0 THEN '可以失败重试' WHEN 1 THEN '可以失败重试' WHEN 2 THEN '不可以失败重试' ELSE '' END AS `order.is_retry`,`order_info`.channel AS `order.channel`,`order_info`.is_store AS `order.is_store`,'' AS `order.supplier_name`,`order_info`.pay_price AS `order.pay_amount`,`order_info`.pay_time AS `order.pay_time`,`order_info`.coupon_id AS `order.coupon_id`,`order_info`.discount_amount AS `order.discount_amount`,`order_info`.out_order_no AS `order.out_trade_no`,`order_info`.next_retry_time AS `order.next_retry_time`,`order_info`.recharge_suc_time AS `order.recharge_suc_time`,`merchant`.merchant_no AS `merchant.merchant_no`,`merchant`.name AS `merchant.name`,`merchant`.subject AS `merchant.subject`,CASE `merchant`.third_party WHEN 1 THEN '外部供应商' WHEN 2 THEN '内部供应商' ELSE '' END AS `merchant.third_party`,`merchant`.contact_name AS `merchant.contact_name`,`merchant`.contact_phone AS `merchant.contact_phone`,`activity`.user_name AS `activity.user_name`,`activity`.activity_no AS `activity.activity_no`,`activity`.key_usable_num AS `activity.key_usable_num`,`activity`.domain_url AS `activity.domain_url`,`activity`.theme_login_id AS `activity.theme_login_id`,`activity`.theme_list_id AS `activity.theme_list_id`,CASE `activity`.settlement_type WHEN 1 THEN '发放结算' WHEN 2 THEN '打开结算' WHEN 3 THEN '领用结算' WHEN 4 THEN '核销结算' ELSE '' END AS `activity.settlement_type`,`activity`.key_expire_type AS `activity.key_expire_type`,`activity`.key_valid_day AS `activity.key_valid_day`,`activity`.key_begin_time AS `activity.key_begin_time`,`activity`.key_end_time AS `activity.key_end_time`,`activity`.auto_charge AS `activity.auto_charge`,`activity`.key_style AS `activity.key_style`,`activity`.amount AS `activity.amount`,`activity`.channels AS `activity.channels`,`activity`.key_pay_button_text AS `activity.key_pay_button_text`,`activity`.goods_pay_button_text AS `activity.goods_pay_button_text`,`order_digit`.order_no AS `order_digit.order_no`,`order_digit`.card_no AS `order_digit.card_no`,`order_digit`.account AS `order_digit.account`,`order_digit`.success_time AS `order_digit.success_time`,`order_digit`.supplier_product_no AS `order_digit.supplier_product_no`,CASE `order_digit`.order_type WHEN 1 THEN '直充' WHEN 2 THEN '卡密' ELSE '' END AS `order_digit.order_type`,`order_digit`.end_time AS `order_digit.end_time`,`order_digit`.code AS `order_digit.code`,`order_digit`.sms_channel AS `order_digit.sms_channel` FROM `order_info` LEFT JOIN `order_digit` ON `order_digit`.order_no = `order_info`.order_no LEFT JOIN `merchant` ON `merchant`.id = `order_info`.merchant_id LEFT JOIN `activity` ON `activity`.id = `order_info`.activity_id WHERE `order_info`.create_time BETWEEN ? AND ? AND `order_info`.type = ? args=[2025-11-01 00:00:00 2025-11-30 23:59:59 2] -{"args":["2025-11-01 00:00:00","2025-11-30 23:59:59",2],"event":"export_sql_execute","final_sql":"SELECT `order_info`.order_no AS `order.order_number`,`order_info`.key_code AS `order.key`,CASE `order_info`.type WHEN 1 THEN '红包订单' WHEN 2 THEN '直充卡密订单' WHEN 3 THEN '立减金订单' ELSE '' END AS `order.type`,CASE `order_info`.status WHEN 1 THEN '待充值' WHEN 2 THEN '充值中' WHEN 3 THEN '充值成功' WHEN 4 THEN '充值失败' WHEN 5 THEN '已过期' WHEN 6 THEN '已作废' WHEN 7 THEN '已核销' WHEN 8 THEN '核销失败' WHEN 9 THEN '订单重置' WHEN 10 THEN '卡单' ELSE '' END AS `order.status`,`order_info`.contract_price AS `order.contract_price`,`order_info`.official_price AS `order.official_price`,`order_info`.merchant_name AS `order.merchant_name`,`order_info`.activity_name AS `order.activity_name`,`order_info`.goods_name AS `order.goods_name`,`order_info`.num AS `order.num`,CASE `order_info`.pay_status WHEN 1 THEN '待支付' WHEN 2 THEN '支付中' WHEN 3 THEN '已支付' WHEN 4 THEN '取消支付' WHEN 5 THEN '退款中' WHEN 6 THEN '退款成功' ELSE '' END AS `order.pay_status`,`order_info`.supplier_product_name AS `order.supplier_product_name`,CASE `order_info`.is_inner WHEN 1 THEN '内部供应商' ELSE '外部供应商' END AS `order.is_inner`,`order_info`.icon AS `order.icon`,`order_info`.cost_price AS `order.cost_price`,`order_info`.success_num AS `order.success_num`,`order_info`.is_reset AS `order.is_reset`,`order_info`.create_time AS `order.create_time`,`order_info`.update_time AS `order.update_time`,CASE `order_info`.is_retry WHEN 0 THEN '可以失败重试' WHEN 1 THEN '可以失败重试' WHEN 2 THEN '不可以失败重试' ELSE '' END AS `order.is_retry`,`order_info`.channel AS `order.channel`,`order_info`.is_store AS `order.is_store`,'' AS `order.supplier_name`,`order_info`.pay_price AS `order.pay_amount`,`order_info`.pay_time AS `order.pay_time`,`order_info`.coupon_id AS `order.coupon_id`,`order_info`.discount_amount AS `order.discount_amount`,`order_info`.out_order_no AS `order.out_trade_no`,`order_info`.next_retry_time AS `order.next_retry_time`,`order_info`.recharge_suc_time AS `order.recharge_suc_time`,`merchant`.merchant_no AS `merchant.merchant_no`,`merchant`.name AS `merchant.name`,`merchant`.subject AS `merchant.subject`,CASE `merchant`.third_party WHEN 1 THEN '外部供应商' WHEN 2 THEN '内部供应商' ELSE '' END AS `merchant.third_party`,`merchant`.contact_name AS `merchant.contact_name`,`merchant`.contact_phone AS `merchant.contact_phone`,`activity`.user_name AS `activity.user_name`,`activity`.activity_no AS `activity.activity_no`,`activity`.key_usable_num AS `activity.key_usable_num`,`activity`.domain_url AS `activity.domain_url`,`activity`.theme_login_id AS `activity.theme_login_id`,`activity`.theme_list_id AS `activity.theme_list_id`,CASE `activity`.settlement_type WHEN 1 THEN '发放结算' WHEN 2 THEN '打开结算' WHEN 3 THEN '领用结算' WHEN 4 THEN '核销结算' ELSE '' END AS `activity.settlement_type`,`activity`.key_expire_type AS `activity.key_expire_type`,`activity`.key_valid_day AS `activity.key_valid_day`,`activity`.key_begin_time AS `activity.key_begin_time`,`activity`.key_end_time AS `activity.key_end_time`,`activity`.auto_charge AS `activity.auto_charge`,`activity`.key_style AS `activity.key_style`,`activity`.amount AS `activity.amount`,`activity`.channels AS `activity.channels`,`activity`.key_pay_button_text AS `activity.key_pay_button_text`,`activity`.goods_pay_button_text AS `activity.goods_pay_button_text`,`order_digit`.order_no AS `order_digit.order_no`,`order_digit`.card_no AS `order_digit.card_no`,`order_digit`.account AS `order_digit.account`,`order_digit`.success_time AS `order_digit.success_time`,`order_digit`.supplier_product_no AS `order_digit.supplier_product_no`,CASE `order_digit`.order_type WHEN 1 THEN '直充' WHEN 2 THEN '卡密' ELSE '' END AS `order_digit.order_type`,`order_digit`.end_time AS `order_digit.end_time`,`order_digit`.code AS `order_digit.code`,`order_digit`.sms_channel AS `order_digit.sms_channel` FROM `order_info` LEFT JOIN `order_digit` ON `order_digit`.order_no = `order_info`.order_no LEFT JOIN `merchant` ON `merchant`.id = `order_info`.merchant_id LEFT JOIN `activity` ON `activity`.id = `order_info`.activity_id WHERE `order_info`.create_time BETWEEN '2025-11-01 00:00:00' AND '2025-11-30 23:59:59' AND `order_info`.type = 2","job_id":294,"level":"INFO","sql":"SELECT `order_info`.order_no AS `order.order_number`,`order_info`.key_code AS `order.key`,CASE `order_info`.type WHEN 1 THEN '红包订单' WHEN 2 THEN '直充卡密订单' WHEN 3 THEN '立减金订单' ELSE '' END AS `order.type`,CASE `order_info`.status WHEN 1 THEN '待充值' WHEN 2 THEN '充值中' WHEN 3 THEN '充值成功' WHEN 4 THEN '充值失败' WHEN 5 THEN '已过期' WHEN 6 THEN '已作废' WHEN 7 THEN '已核销' WHEN 8 THEN '核销失败' WHEN 9 THEN '订单重置' WHEN 10 THEN '卡单' ELSE '' END AS `order.status`,`order_info`.contract_price AS `order.contract_price`,`order_info`.official_price AS `order.official_price`,`order_info`.merchant_name AS `order.merchant_name`,`order_info`.activity_name AS `order.activity_name`,`order_info`.goods_name AS `order.goods_name`,`order_info`.num AS `order.num`,CASE `order_info`.pay_status WHEN 1 THEN '待支付' WHEN 2 THEN '支付中' WHEN 3 THEN '已支付' WHEN 4 THEN '取消支付' WHEN 5 THEN '退款中' WHEN 6 THEN '退款成功' ELSE '' END AS `order.pay_status`,`order_info`.supplier_product_name AS `order.supplier_product_name`,CASE `order_info`.is_inner WHEN 1 THEN '内部供应商' ELSE '外部供应商' END AS `order.is_inner`,`order_info`.icon AS `order.icon`,`order_info`.cost_price AS `order.cost_price`,`order_info`.success_num AS `order.success_num`,`order_info`.is_reset AS `order.is_reset`,`order_info`.create_time AS `order.create_time`,`order_info`.update_time AS `order.update_time`,CASE `order_info`.is_retry WHEN 0 THEN '可以失败重试' WHEN 1 THEN '可以失败重试' WHEN 2 THEN '不可以失败重试' ELSE '' END AS `order.is_retry`,`order_info`.channel AS `order.channel`,`order_info`.is_store AS `order.is_store`,'' AS `order.supplier_name`,`order_info`.pay_price AS `order.pay_amount`,`order_info`.pay_time AS `order.pay_time`,`order_info`.coupon_id AS `order.coupon_id`,`order_info`.discount_amount AS `order.discount_amount`,`order_info`.out_order_no AS `order.out_trade_no`,`order_info`.next_retry_time AS `order.next_retry_time`,`order_info`.recharge_suc_time AS `order.recharge_suc_time`,`merchant`.merchant_no AS `merchant.merchant_no`,`merchant`.name AS `merchant.name`,`merchant`.subject AS `merchant.subject`,CASE `merchant`.third_party WHEN 1 THEN '外部供应商' WHEN 2 THEN '内部供应商' ELSE '' END AS `merchant.third_party`,`merchant`.contact_name AS `merchant.contact_name`,`merchant`.contact_phone AS `merchant.contact_phone`,`activity`.user_name AS `activity.user_name`,`activity`.activity_no AS `activity.activity_no`,`activity`.key_usable_num AS `activity.key_usable_num`,`activity`.domain_url AS `activity.domain_url`,`activity`.theme_login_id AS `activity.theme_login_id`,`activity`.theme_list_id AS `activity.theme_list_id`,CASE `activity`.settlement_type WHEN 1 THEN '发放结算' WHEN 2 THEN '打开结算' WHEN 3 THEN '领用结算' WHEN 4 THEN '核销结算' ELSE '' END AS `activity.settlement_type`,`activity`.key_expire_type AS `activity.key_expire_type`,`activity`.key_valid_day AS `activity.key_valid_day`,`activity`.key_begin_time AS `activity.key_begin_time`,`activity`.key_end_time AS `activity.key_end_time`,`activity`.auto_charge AS `activity.auto_charge`,`activity`.key_style AS `activity.key_style`,`activity`.amount AS `activity.amount`,`activity`.channels AS `activity.channels`,`activity`.key_pay_button_text AS `activity.key_pay_button_text`,`activity`.goods_pay_button_text AS `activity.goods_pay_button_text`,`order_digit`.order_no AS `order_digit.order_no`,`order_digit`.card_no AS `order_digit.card_no`,`order_digit`.account AS `order_digit.account`,`order_digit`.success_time AS `order_digit.success_time`,`order_digit`.supplier_product_no AS `order_digit.supplier_product_no`,CASE `order_digit`.order_type WHEN 1 THEN '直充' WHEN 2 THEN '卡密' ELSE '' END AS `order_digit.order_type`,`order_digit`.end_time AS `order_digit.end_time`,`order_digit`.code AS `order_digit.code`,`order_digit`.sms_channel AS `order_digit.sms_channel` FROM `order_info` LEFT JOIN `order_digit` ON `order_digit`.order_no = `order_info`.order_no LEFT JOIN `merchant` ON `merchant`.id = `order_info`.merchant_id LEFT JOIN `activity` ON `activity`.id = `order_info`.activity_id WHERE `order_info`.create_time BETWEEN ? AND ? AND `order_info`.type = ?","ts":"2025-12-15T12:03:18+08:00"} -export_sql_execute job_id=294 final_sql=SELECT `order_info`.order_no AS `order.order_number`,`order_info`.key_code AS `order.key`,CASE `order_info`.type WHEN 1 THEN '红包订单' WHEN 2 THEN '直充卡密订单' WHEN 3 THEN '立减金订单' ELSE '' END AS `order.type`,CASE `order_info`.status WHEN 1 THEN '待充值' WHEN 2 THEN '充值中' WHEN 3 THEN '充值成功' WHEN 4 THEN '充值失败' WHEN 5 THEN '已过期' WHEN 6 THEN '已作废' WHEN 7 THEN '已核销' WHEN 8 THEN '核销失败' WHEN 9 THEN '订单重置' WHEN 10 THEN '卡单' ELSE '' END AS `order.status`,`order_info`.contract_price AS `order.contract_price`,`order_info`.official_price AS `order.official_price`,`order_info`.merchant_name AS `order.merchant_name`,`order_info`.activity_name AS `order.activity_name`,`order_info`.goods_name AS `order.goods_name`,`order_info`.num AS `order.num`,CASE `order_info`.pay_status WHEN 1 THEN '待支付' WHEN 2 THEN '支付中' WHEN 3 THEN '已支付' WHEN 4 THEN '取消支付' WHEN 5 THEN '退款中' WHEN 6 THEN '退款成功' ELSE '' END AS `order.pay_status`,`order_info`.supplier_product_name AS `order.supplier_product_name`,CASE `order_info`.is_inner WHEN 1 THEN '内部供应商' ELSE '外部供应商' END AS `order.is_inner`,`order_info`.icon AS `order.icon`,`order_info`.cost_price AS `order.cost_price`,`order_info`.success_num AS `order.success_num`,`order_info`.is_reset AS `order.is_reset`,`order_info`.create_time AS `order.create_time`,`order_info`.update_time AS `order.update_time`,CASE `order_info`.is_retry WHEN 0 THEN '可以失败重试' WHEN 1 THEN '可以失败重试' WHEN 2 THEN '不可以失败重试' ELSE '' END AS `order.is_retry`,`order_info`.channel AS `order.channel`,`order_info`.is_store AS `order.is_store`,'' AS `order.supplier_name`,`order_info`.pay_price AS `order.pay_amount`,`order_info`.pay_time AS `order.pay_time`,`order_info`.coupon_id AS `order.coupon_id`,`order_info`.discount_amount AS `order.discount_amount`,`order_info`.out_order_no AS `order.out_trade_no`,`order_info`.next_retry_time AS `order.next_retry_time`,`order_info`.recharge_suc_time AS `order.recharge_suc_time`,`merchant`.merchant_no AS `merchant.merchant_no`,`merchant`.name AS `merchant.name`,`merchant`.subject AS `merchant.subject`,CASE `merchant`.third_party WHEN 1 THEN '外部供应商' WHEN 2 THEN '内部供应商' ELSE '' END AS `merchant.third_party`,`merchant`.contact_name AS `merchant.contact_name`,`merchant`.contact_phone AS `merchant.contact_phone`,`activity`.user_name AS `activity.user_name`,`activity`.activity_no AS `activity.activity_no`,`activity`.key_usable_num AS `activity.key_usable_num`,`activity`.domain_url AS `activity.domain_url`,`activity`.theme_login_id AS `activity.theme_login_id`,`activity`.theme_list_id AS `activity.theme_list_id`,CASE `activity`.settlement_type WHEN 1 THEN '发放结算' WHEN 2 THEN '打开结算' WHEN 3 THEN '领用结算' WHEN 4 THEN '核销结算' ELSE '' END AS `activity.settlement_type`,`activity`.key_expire_type AS `activity.key_expire_type`,`activity`.key_valid_day AS `activity.key_valid_day`,`activity`.key_begin_time AS `activity.key_begin_time`,`activity`.key_end_time AS `activity.key_end_time`,`activity`.auto_charge AS `activity.auto_charge`,`activity`.key_style AS `activity.key_style`,`activity`.amount AS `activity.amount`,`activity`.channels AS `activity.channels`,`activity`.key_pay_button_text AS `activity.key_pay_button_text`,`activity`.goods_pay_button_text AS `activity.goods_pay_button_text`,`order_digit`.order_no AS `order_digit.order_no`,`order_digit`.card_no AS `order_digit.card_no`,`order_digit`.account AS `order_digit.account`,`order_digit`.success_time AS `order_digit.success_time`,`order_digit`.supplier_product_no AS `order_digit.supplier_product_no`,CASE `order_digit`.order_type WHEN 1 THEN '直充' WHEN 2 THEN '卡密' ELSE '' END AS `order_digit.order_type`,`order_digit`.end_time AS `order_digit.end_time`,`order_digit`.code AS `order_digit.code`,`order_digit`.sms_channel AS `order_digit.sms_channel` FROM `order_info` LEFT JOIN `order_digit` ON `order_digit`.order_no = `order_info`.order_no LEFT JOIN `merchant` ON `merchant`.id = `order_info`.merchant_id LEFT JOIN `activity` ON `activity`.id = `order_info`.activity_id WHERE `order_info`.create_time BETWEEN '2025-11-01 00:00:00' AND '2025-11-30 23:59:59' AND `order_info`.type = 2 -{"bytes":2984,"duration_ms":1273,"kind":"access","level":"INFO","method":"","path":"","query":"","remote":"","status":200,"trace_id":"","ts":"2025-12-15T12:03:18+08:00"} -{"bytes":2984,"duration_ms":511,"kind":"access","level":"INFO","method":"","path":"","query":"","remote":"","status":200,"trace_id":"","ts":"2025-12-15T12:03:19+08:00"} -{"event":"progress_update","job_id":294,"level":"INFO","total_rows":0,"ts":"2025-12-15T12:03:19+08:00"} -job_id=294 sql=INSERT INTO export_job_files (job_id, storage_uri, row_count, size_bytes, created_at, updated_at) VALUES (?,?,?,?,?,?) args=[294 storage/export_job_294_20251215120319.xlsx 177 58902 2025-12-15 12:03:19.838346 +0800 CST m=+86.260493751 2025-12-15 12:03:19.838346 +0800 CST m=+86.260493834] -{"bytes":2984,"duration_ms":324,"kind":"access","level":"INFO","method":"","path":"","query":"","remote":"","status":200,"trace_id":"","ts":"2025-12-15T12:03:19+08:00"} -{"bytes":2988,"duration_ms":927,"kind":"access","level":"INFO","method":"","path":"","query":"","remote":"","status":200,"trace_id":"","ts":"2025-12-15T12:03:21+08:00"} -{"bytes":2988,"duration_ms":360,"kind":"access","level":"INFO","method":"","path":"","query":"","remote":"","status":200,"trace_id":"","ts":"2025-12-15T12:03:21+08:00"} -{"bytes":45566,"duration_ms":189,"kind":"access","level":"INFO","method":"","path":"","query":"","remote":"","status":200,"trace_id":"","ts":"2025-12-15T12:03:22+08:00"} -{"bytes":2988,"duration_ms":484,"kind":"access","level":"INFO","method":"","path":"","query":"","remote":"","status":200,"trace_id":"","ts":"2025-12-15T12:03:23+08:00"} -{"bytes":2988,"duration_ms":436,"kind":"access","level":"INFO","method":"","path":"","query":"","remote":"","status":200,"trace_id":"","ts":"2025-12-15T12:03:24+08:00"} -{"bytes":2988,"duration_ms":440,"kind":"access","level":"INFO","method":"","path":"","query":"","remote":"","status":200,"trace_id":"","ts":"2025-12-15T12:03:25+08:00"} -{"bytes":2988,"duration_ms":792,"kind":"access","level":"INFO","method":"","path":"","query":"","remote":"","status":200,"trace_id":"","ts":"2025-12-15T12:03:26+08:00"} -{"bytes":2988,"duration_ms":310,"kind":"access","level":"INFO","method":"","path":"","query":"","remote":"","status":200,"trace_id":"","ts":"2025-12-15T12:03:26+08:00"} -{"bytes":2988,"duration_ms":474,"kind":"access","level":"INFO","method":"","path":"","query":"","remote":"","status":200,"trace_id":"","ts":"2025-12-15T12:03:28+08:00"} -{"bytes":2988,"duration_ms":619,"kind":"access","level":"INFO","method":"","path":"","query":"","remote":"","status":200,"trace_id":"","ts":"2025-12-15T12:03:29+08:00"} -{"bytes":2988,"duration_ms":633,"kind":"access","level":"INFO","method":"","path":"","query":"","remote":"","status":200,"trace_id":"","ts":"2025-12-15T12:03:30+08:00"} -{"bytes":2988,"duration_ms":640,"kind":"access","level":"INFO","method":"","path":"","query":"","remote":"","status":200,"trace_id":"","ts":"2025-12-15T12:03:31+08:00"} -{"bytes":2988,"duration_ms":450,"kind":"access","level":"INFO","method":"","path":"","query":"","remote":"","status":200,"trace_id":"","ts":"2025-12-15T12:03:32+08:00"} -{"bytes":2988,"duration_ms":378,"kind":"access","level":"INFO","method":"","path":"","query":"","remote":"","status":200,"trace_id":"","ts":"2025-12-15T12:03:33+08:00"} -{"bytes":2988,"duration_ms":678,"kind":"access","level":"INFO","method":"","path":"","query":"","remote":"","status":200,"trace_id":"","ts":"2025-12-15T12:03:34+08:00"} -{"bytes":2988,"duration_ms":327,"kind":"access","level":"INFO","method":"","path":"","query":"","remote":"","status":200,"trace_id":"","ts":"2025-12-15T12:03:34+08:00"} -{"bytes":2988,"duration_ms":337,"kind":"access","level":"INFO","method":"","path":"","query":"","remote":"","status":200,"trace_id":"","ts":"2025-12-15T12:03:35+08:00"} -{"bytes":2988,"duration_ms":428,"kind":"access","level":"INFO","method":"","path":"","query":"","remote":"","status":200,"trace_id":"","ts":"2025-12-15T12:03:37+08:00"} -{"bytes":2988,"duration_ms":534,"kind":"access","level":"INFO","method":"","path":"","query":"","remote":"","status":200,"trace_id":"","ts":"2025-12-15T12:03:38+08:00"} -{"bytes":2988,"duration_ms":457,"kind":"access","level":"INFO","method":"","path":"","query":"","remote":"","status":200,"trace_id":"","ts":"2025-12-15T12:03:39+08:00"} -{"bytes":2988,"duration_ms":397,"kind":"access","level":"INFO","method":"","path":"","query":"","remote":"","status":200,"trace_id":"","ts":"2025-12-15T12:03:40+08:00"} -{"bytes":2988,"duration_ms":464,"kind":"access","level":"INFO","method":"","path":"","query":"","remote":"","status":200,"trace_id":"","ts":"2025-12-15T12:03:41+08:00"} -{"bytes":2988,"duration_ms":458,"kind":"access","level":"INFO","method":"","path":"","query":"","remote":"","status":200,"trace_id":"","ts":"2025-12-15T12:03:42+08:00"} -{"bytes":2988,"duration_ms":424,"kind":"access","level":"INFO","method":"","path":"","query":"","remote":"","status":200,"trace_id":"","ts":"2025-12-15T12:03:43+08:00"} -{"bytes":2988,"duration_ms":865,"kind":"access","level":"INFO","method":"","path":"","query":"","remote":"","status":200,"trace_id":"","ts":"2025-12-15T12:03:44+08:00"} -{"bytes":2988,"duration_ms":237,"kind":"access","level":"INFO","method":"","path":"","query":"","remote":"","status":200,"trace_id":"","ts":"2025-12-15T12:03:44+08:00"} -{"bytes":2988,"duration_ms":470,"kind":"access","level":"INFO","method":"","path":"","query":"","remote":"","status":200,"trace_id":"","ts":"2025-12-15T12:03:46+08:00"} -{"bytes":2988,"duration_ms":508,"kind":"access","level":"INFO","method":"","path":"","query":"","remote":"","status":200,"trace_id":"","ts":"2025-12-15T12:03:47+08:00"} -{"bytes":2988,"duration_ms":518,"kind":"access","level":"INFO","method":"","path":"","query":"","remote":"","status":200,"trace_id":"","ts":"2025-12-15T12:03:48+08:00"} -{"bytes":2988,"duration_ms":953,"kind":"access","level":"INFO","method":"","path":"","query":"","remote":"","status":200,"trace_id":"","ts":"2025-12-15T12:03:49+08:00"} -{"bytes":2988,"duration_ms":324,"kind":"access","level":"INFO","method":"","path":"","query":"","remote":"","status":200,"trace_id":"","ts":"2025-12-15T12:03:49+08:00"} -{"bytes":2988,"duration_ms":542,"kind":"access","level":"INFO","method":"","path":"","query":"","remote":"","status":200,"trace_id":"","ts":"2025-12-15T12:03:51+08:00"} -{"bytes":2988,"duration_ms":458,"kind":"access","level":"INFO","method":"","path":"","query":"","remote":"","status":200,"trace_id":"","ts":"2025-12-15T12:03:52+08:00"} -{"bytes":2988,"duration_ms":405,"kind":"access","level":"INFO","method":"","path":"","query":"","remote":"","status":200,"trace_id":"","ts":"2025-12-15T12:03:53+08:00"} -{"bytes":2988,"duration_ms":846,"kind":"access","level":"INFO","method":"","path":"","query":"","remote":"","status":200,"trace_id":"","ts":"2025-12-15T12:03:54+08:00"} -{"bytes":2988,"duration_ms":363,"kind":"access","level":"INFO","method":"","path":"","query":"","remote":"","status":200,"trace_id":"","ts":"2025-12-15T12:03:54+08:00"} -{"bytes":2988,"duration_ms":377,"kind":"access","level":"INFO","method":"","path":"","query":"","remote":"","status":200,"trace_id":"","ts":"2025-12-15T12:03:55+08:00"} -{"bytes":2988,"duration_ms":421,"kind":"access","level":"INFO","method":"","path":"","query":"","remote":"","status":200,"trace_id":"","ts":"2025-12-15T12:03:57+08:00"} -{"bytes":2988,"duration_ms":463,"kind":"access","level":"INFO","method":"","path":"","query":"","remote":"","status":200,"trace_id":"","ts":"2025-12-15T12:03:58+08:00"} -{"bytes":2988,"duration_ms":635,"kind":"access","level":"INFO","method":"","path":"","query":"","remote":"","status":200,"trace_id":"","ts":"2025-12-15T12:03:59+08:00"} -{"bytes":2988,"duration_ms":2755,"kind":"access","level":"INFO","method":"","path":"","query":"","remote":"","status":200,"trace_id":"","ts":"2025-12-15T12:04:02+08:00"} -{"bytes":2988,"duration_ms":2160,"kind":"access","level":"INFO","method":"","path":"","query":"","remote":"","status":200,"trace_id":"","ts":"2025-12-15T12:04:04+08:00"} -{"bytes":2988,"duration_ms":4270,"kind":"access","level":"INFO","method":"","path":"","query":"","remote":"","status":200,"trace_id":"","ts":"2025-12-15T12:04:04+08:00"} -{"bytes":2988,"duration_ms":3813,"kind":"access","level":"INFO","method":"","path":"","query":"","remote":"","status":200,"trace_id":"","ts":"2025-12-15T12:04:05+08:00"} -{"bytes":2988,"duration_ms":384,"kind":"access","level":"INFO","method":"","path":"","query":"","remote":"","status":200,"trace_id":"","ts":"2025-12-15T12:04:05+08:00"} -{"bytes":2988,"duration_ms":2197,"kind":"access","level":"INFO","method":"","path":"","query":"","remote":"","status":200,"trace_id":"","ts":"2025-12-15T12:04:05+08:00"} -{"bytes":2988,"duration_ms":266,"kind":"access","level":"INFO","method":"","path":"","query":"","remote":"","status":200,"trace_id":"","ts":"2025-12-15T12:04:06+08:00"} -{"bytes":2988,"duration_ms":320,"kind":"access","level":"INFO","method":"","path":"","query":"","remote":"","status":200,"trace_id":"","ts":"2025-12-15T12:04:07+08:00"} -{"bytes":2988,"duration_ms":1738,"kind":"access","level":"INFO","method":"","path":"","query":"","remote":"","status":200,"trace_id":"","ts":"2025-12-15T12:04:10+08:00"} -{"bytes":2988,"duration_ms":1005,"kind":"access","level":"INFO","method":"","path":"","query":"","remote":"","status":200,"trace_id":"","ts":"2025-12-15T12:04:10+08:00"} -{"bytes":2988,"duration_ms":816,"kind":"access","level":"INFO","method":"","path":"","query":"","remote":"","status":200,"trace_id":"","ts":"2025-12-15T12:04:11+08:00"} -{"bytes":2988,"duration_ms":280,"kind":"access","level":"INFO","method":"","path":"","query":"","remote":"","status":200,"trace_id":"","ts":"2025-12-15T12:04:11+08:00"} -{"bytes":2988,"duration_ms":330,"kind":"access","level":"INFO","method":"","path":"","query":"","remote":"","status":200,"trace_id":"","ts":"2025-12-15T12:04:12+08:00"} -{"bytes":2988,"duration_ms":433,"kind":"access","level":"INFO","method":"","path":"","query":"","remote":"","status":200,"trace_id":"","ts":"2025-12-15T12:04:13+08:00"} -{"bytes":2988,"duration_ms":352,"kind":"access","level":"INFO","method":"","path":"","query":"","remote":"","status":200,"trace_id":"","ts":"2025-12-15T12:04:14+08:00"} -{"bytes":2988,"duration_ms":821,"kind":"access","level":"INFO","method":"","path":"","query":"","remote":"","status":200,"trace_id":"","ts":"2025-12-15T12:04:16+08:00"} -{"bytes":2988,"duration_ms":309,"kind":"access","level":"INFO","method":"","path":"","query":"","remote":"","status":200,"trace_id":"","ts":"2025-12-15T12:04:16+08:00"} -{"bytes":2988,"duration_ms":294,"kind":"access","level":"INFO","method":"","path":"","query":"","remote":"","status":200,"trace_id":"","ts":"2025-12-15T12:04:17+08:00"} -{"bytes":2988,"duration_ms":351,"kind":"access","level":"INFO","method":"","path":"","query":"","remote":"","status":200,"trace_id":"","ts":"2025-12-15T12:04:18+08:00"} -{"bytes":2988,"duration_ms":835,"kind":"access","level":"INFO","method":"","path":"","query":"","remote":"","status":200,"trace_id":"","ts":"2025-12-15T12:04:20+08:00"} -{"bytes":2988,"duration_ms":929,"kind":"access","level":"INFO","method":"","path":"","query":"","remote":"","status":200,"trace_id":"","ts":"2025-12-15T12:04:21+08:00"} -{"bytes":2988,"duration_ms":1339,"kind":"access","level":"INFO","method":"","path":"","query":"","remote":"","status":200,"trace_id":"","ts":"2025-12-15T12:04:22+08:00"} -{"bytes":2988,"duration_ms":1633,"kind":"access","level":"INFO","method":"","path":"","query":"","remote":"","status":200,"trace_id":"","ts":"2025-12-15T12:04:23+08:00"} -{"bytes":2988,"duration_ms":2241,"kind":"access","level":"INFO","method":"","path":"","query":"","remote":"","status":200,"trace_id":"","ts":"2025-12-15T12:04:25+08:00"} -{"bytes":2988,"duration_ms":1323,"kind":"access","level":"INFO","method":"","path":"","query":"","remote":"","status":200,"trace_id":"","ts":"2025-12-15T12:04:25+08:00"} -{"bytes":2988,"duration_ms":1313,"kind":"access","level":"INFO","method":"","path":"","query":"","remote":"","status":200,"trace_id":"","ts":"2025-12-15T12:04:26+08:00"} -{"bytes":2988,"duration_ms":423,"kind":"access","level":"INFO","method":"","path":"","query":"","remote":"","status":200,"trace_id":"","ts":"2025-12-15T12:04:26+08:00"} -{"bytes":2988,"duration_ms":1031,"kind":"access","level":"INFO","method":"","path":"","query":"","remote":"","status":200,"trace_id":"","ts":"2025-12-15T12:04:28+08:00"} -{"bytes":2988,"duration_ms":1833,"kind":"access","level":"INFO","method":"","path":"","query":"","remote":"","status":200,"trace_id":"","ts":"2025-12-15T12:04:30+08:00"} -{"bytes":2988,"duration_ms":1258,"kind":"access","level":"INFO","method":"","path":"","query":"","remote":"","status":200,"trace_id":"","ts":"2025-12-15T12:04:30+08:00"} -{"bytes":2988,"duration_ms":419,"kind":"access","level":"INFO","method":"","path":"","query":"","remote":"","status":200,"trace_id":"","ts":"2025-12-15T12:04:30+08:00"} -{"bytes":2988,"duration_ms":312,"kind":"access","level":"INFO","method":"","path":"","query":"","remote":"","status":200,"trace_id":"","ts":"2025-12-15T12:04:31+08:00"} -{"bytes":2988,"duration_ms":372,"kind":"access","level":"INFO","method":"","path":"","query":"","remote":"","status":200,"trace_id":"","ts":"2025-12-15T12:04:32+08:00"} +{"bytes":9873,"duration_ms":0,"kind":"access","level":"INFO","method":"","path":"","query":"","remote":"","status":200,"trace_id":"","ts":"2025-12-17T15:51:04+08:00"} +{"bytes":6169,"duration_ms":98,"kind":"access","level":"INFO","method":"","path":"","query":"","remote":"","status":200,"trace_id":"","ts":"2025-12-17T15:51:04+08:00"} +{"bytes":1888,"duration_ms":95,"kind":"access","level":"INFO","method":"","path":"","query":"","remote":"","status":200,"trace_id":"","ts":"2025-12-17T15:51:07+08:00"} +{"bytes":505,"duration_ms":88,"kind":"access","level":"INFO","method":"","path":"","query":"","remote":"","status":200,"trace_id":"","ts":"2025-12-17T15:51:07+08:00"} diff --git a/server/server_restart.log b/server/server_restart.log new file mode 100644 index 0000000..6393b21 --- /dev/null +++ b/server/server_restart.log @@ -0,0 +1,2 @@ +/opt/homebrew/opt/go/libexec/src/crypto/x509/cert_pool.go:10:2: package encoding/pem is not in std (/opt/homebrew/opt/go/libexec/src/encoding/pem) +cmd/server/main.go:7:2: open /Users/zhouyonggao/Library/Caches/go-build/81/81aa4fdeaa93757df0aec25e30b31ebae853b2651233ed934d1a1b081249443a-d: operation not permitted