diff --git a/build.zip b/build.zip deleted file mode 100644 index 2c81efb..0000000 Binary files a/build.zip and /dev/null differ diff --git a/configs/dev_configs.toml b/configs/dev_configs.toml index 5abf92a..0ab1acd 100644 --- a/configs/dev_configs.toml +++ b/configs/dev_configs.toml @@ -1,31 +1,50 @@ -[mysql] - [mysql.read] - addr = "127.0.0.1:3306" - user = "root" - pass = "123456" - name = "bindbox_game" - [mysql.write] - addr = "127.0.0.1:3306" - user = "root" - pass = "123456" - name = "bindbox_game" +[language] +local = 'zh-cn' + +[mysql.read] +addr = 'sh-cynosdbmysql-grp-88th45wy.sql.tencentcdb.com:28555' +name = 'bindbox_game' +pass = 'api2api..' +user = 'root' [redis] addr = "118.25.13.43:8379" pass = "xbm#2023by1024" db = 5 -[random] - commit_master_key = "a1b2c3d4e5f6789012345678901234567890abcdef1234567890abcdef123456" + +[mysql.write] +addr = 'sh-cynosdbmysql-grp-88th45wy.sql.tencentcdb.com:28555' +name = 'bindbox_game' +pass = 'api2api..' +user = 'root' + +[jwt] +admin_secret = "m9ycX9RTPyuYTWw9FrCc" [wechat] - app_id = "" - app_secret = "" - lottery_result_template_id = "" +app_id = "wx26ad074017e1e63f" +app_secret = "026c19ce4f3bb090c56573024c59a8be" +lottery_result_template_id = "O2eqJQD3pn-vQ6g2z9DWzINVwOmPoz8yW-172J_YcpI" + +[cos] +bucket = "keaiya-1259195914" +region = "ap-shanghai" +secret_id = "AKIDtjPtAFPNDuR1UnxvoUCoRAnJgw164Zv6" +secret_key = "B0vvjMoMsKcipnJlLnFyWt6A2JRSJ0Wr" +# 可选:如有 CDN/自定义域名则填写,否则留空 +base_url = "" + +[random] +commit_master_key = "4d7a3b8f9c2e1a5d6b4f8c0e3a7d2b1c6f9e4a5d8c1b3f7a2e5d6c4b8f0e3a7d2b1c" [wechatpay] - mchid = "" - serial_no = "" - private_key_path = "" - api_v3_key = "" - notify_url = "http://localhost:9991/api/pay/wechat/notify" \ No newline at end of file + mchid = "1610439635" + serial_no = "3AFD505D597831F8E931EBFFEEB5976B81F66F03" + private_key_path = "./configs/cert/apiclient_key.pem" + api_v3_key = "3tbwEFZV3fZtOslpUJC7Sacb8qjzhm05" + notify_url = "https://mini-chat.1024tool.vip/api/pay/wechat/notify" + public_key_id = "PUB_KEY_ID_0116104396352025041000211519001600" + public_key_path = "./configs/cert/pub_key.pem" + + diff --git a/docs/docs.go b/docs/docs.go index 58f6528..14f39fb 100644 --- a/docs/docs.go +++ b/docs/docs.go @@ -3658,6 +3658,35 @@ const docTemplate = `{ } } }, + "/api/app/categories": { + "get": { + "description": "获取APP端商品分类列表", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "APP端.基础" + ], + "summary": "获取分类列表", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/app.listAppCategoriesResponse" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/code.Failure" + } + } + } + } + }, "/api/app/lottery/join": { "post": { "security": [ @@ -3912,6 +3941,29 @@ const docTemplate = `{ } } }, + "/api/app/notices": { + "get": { + "description": "获取APP首页滚动公告", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "APP端.基础" + ], + "summary": "获取公告列表", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/app.listAppNoticesResponse" + } + } + } + } + }, "/api/app/orders/{order_id}": { "get": { "security": [ @@ -4148,6 +4200,189 @@ const docTemplate = `{ } } }, + "/api/app/store/items": { + "get": { + "security": [ + { + "LoginVerifyToken": [] + } + ], + "description": "分页获取积分商城商品列表,支持按类型筛选(product/item_card/coupon)", + "consumes": [ + "application/x-www-form-urlencoded" + ], + "produces": [ + "application/json" + ], + "tags": [ + "APP端.积分商城" + ], + "summary": "获取积分商城商品列表", + "parameters": [ + { + "type": "string", + "description": "商品类型: product(默认), item_card, coupon", + "name": "kind", + "in": "query" + }, + { + "type": "integer", + "default": 1, + "description": "页码", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "default": 20, + "description": "每页数量", + "name": "page_size", + "in": "query" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/app.listStoreItemsResponse" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/code.Failure" + } + } + } + } + }, + "/api/app/task-center/tasks": { + "get": { + "description": "获取当前可用的任务列表,支持分页", + "consumes": [ + "application/x-www-form-urlencoded" + ], + "produces": [ + "application/json" + ], + "tags": [ + "TaskCenter(App)" + ], + "summary": "获取任务列表(App)", + "parameters": [ + { + "type": "integer", + "default": 1, + "description": "页码", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "default": 20, + "description": "每页数量", + "name": "page_size", + "in": "query" + } + ], + "responses": { + "200": { + "description": "任务列表", + "schema": { + "$ref": "#/definitions/taskcenter.listTasksResponse" + } + } + } + } + }, + "/api/app/task-center/tasks/{id}/claim/{user_id}": { + "post": { + "description": "用户领取指定任务层级的奖励", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "TaskCenter(App)" + ], + "summary": "领取任务奖励(App)", + "parameters": [ + { + "type": "integer", + "description": "任务ID", + "name": "id", + "in": "path", + "required": true + }, + { + "type": "integer", + "description": "用户ID", + "name": "user_id", + "in": "path", + "required": true + }, + { + "description": "领取请求", + "name": "request", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/taskcenter.claimTaskRequest" + } + } + ], + "responses": { + "200": { + "description": "领取成功", + "schema": { + "type": "object", + "additionalProperties": true + } + } + } + } + }, + "/api/app/task-center/tasks/{id}/progress/{user_id}": { + "get": { + "description": "获取指定用户在特定任务上的进度详情", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "TaskCenter(App)" + ], + "summary": "获取用户任务进度(App)", + "parameters": [ + { + "type": "integer", + "description": "任务ID", + "name": "id", + "in": "path", + "required": true + }, + { + "type": "integer", + "description": "用户ID", + "name": "user_id", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "任务进度详情", + "schema": { + "$ref": "#/definitions/taskcenter.taskProgressResponse" + } + } + } + } + }, "/api/app/users/weixin/login": { "post": { "description": "微信静默登录(需传递 code;可选 invite_code)", @@ -5218,6 +5453,18 @@ const docTemplate = `{ "name": "page_size", "in": "query", "required": true + }, + { + "type": "integer", + "description": "订单状态:1待支付 2已支付 3已取消 4已退款", + "name": "status", + "in": "query" + }, + { + "type": "integer", + "description": "是否已消耗/履约:0否 1是", + "name": "is_consumed", + "in": "query" } ], "responses": { @@ -5435,6 +5682,58 @@ const docTemplate = `{ } } }, + "/api/app/users/{user_id}/points/redeem-item-card": { + "post": { + "security": [ + { + "LoginVerifyToken": [] + } + ], + "description": "使用积分兑换指定数量的道具卡", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "APP端.用户" + ], + "summary": "积分兑换道具卡", + "parameters": [ + { + "type": "integer", + "description": "用户ID", + "name": "user_id", + "in": "path", + "required": true + }, + { + "description": "兑换请求参数", + "name": "request", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/app.redeemItemCardRequest" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/app.redeemItemCardResponse" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/code.Failure" + } + } + } + } + }, "/api/app/users/{user_id}/points/redeem-product": { "post": { "security": [ @@ -5728,133 +6027,6 @@ const docTemplate = `{ "responses": {} } }, - "/app/task_center/tasks": { - "get": { - "description": "获取当前可用的任务列表,支持分页", - "consumes": [ - "application/x-www-form-urlencoded" - ], - "produces": [ - "application/json" - ], - "tags": [ - "TaskCenter(App)" - ], - "summary": "获取任务列表(App)", - "parameters": [ - { - "type": "integer", - "default": 1, - "description": "页码", - "name": "page", - "in": "query" - }, - { - "type": "integer", - "default": 20, - "description": "每页数量", - "name": "page_size", - "in": "query" - } - ], - "responses": { - "200": { - "description": "任务列表", - "schema": { - "$ref": "#/definitions/taskcenter.listTasksResponse" - } - } - } - } - }, - "/app/task_center/tasks/{id}/progress/{user_id}": { - "get": { - "description": "获取指定用户在特定任务上的进度详情", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "TaskCenter(App)" - ], - "summary": "获取用户任务进度(App)", - "parameters": [ - { - "type": "integer", - "description": "任务ID", - "name": "id", - "in": "path", - "required": true - }, - { - "type": "integer", - "description": "用户ID", - "name": "user_id", - "in": "path", - "required": true - } - ], - "responses": { - "200": { - "description": "任务进度详情", - "schema": { - "$ref": "#/definitions/taskcenter.taskProgressResponse" - } - } - } - } - }, - "/app/task_center/tasks/{id}/users/{user_id}/claim": { - "post": { - "description": "用户领取指定任务层级的奖励", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "TaskCenter(App)" - ], - "summary": "领取任务奖励(App)", - "parameters": [ - { - "type": "integer", - "description": "任务ID", - "name": "id", - "in": "path", - "required": true - }, - { - "type": "integer", - "description": "用户ID", - "name": "user_id", - "in": "path", - "required": true - }, - { - "description": "领取请求", - "name": "request", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/taskcenter.claimTaskRequest" - } - } - ], - "responses": { - "200": { - "description": "领取成功", - "schema": { - "type": "object", - "additionalProperties": true - } - } - } - } - }, "/common/upload/wangeditor": { "post": { "description": "适配 WangEditor 的图片上传接口", @@ -8051,6 +8223,25 @@ const docTemplate = `{ } } }, + "app.appCategoryItem": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + } + } + }, + "app.appNoticeItem": { + "type": "object", + "properties": { + "content": { + "type": "string" + } + } + }, "app.bindPhoneRequest": { "type": "object", "properties": { @@ -8488,6 +8679,28 @@ const docTemplate = `{ } } }, + "app.listAppCategoriesResponse": { + "type": "object", + "properties": { + "list": { + "type": "array", + "items": { + "$ref": "#/definitions/app.appCategoryItem" + } + } + } + }, + "app.listAppNoticesResponse": { + "type": "object", + "properties": { + "list": { + "type": "array", + "items": { + "$ref": "#/definitions/app.appNoticeItem" + } + } + } + }, "app.listAppProductsItem": { "type": "object", "properties": { @@ -8756,6 +8969,64 @@ const docTemplate = `{ } } }, + "app.listStoreItem": { + "type": "object", + "properties": { + "discount_type": { + "type": "integer" + }, + "discount_value": { + "type": "integer" + }, + "id": { + "type": "integer" + }, + "in_stock": { + "type": "boolean" + }, + "kind": { + "type": "string" + }, + "main_image": { + "type": "string" + }, + "min_spend": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "price": { + "type": "integer" + }, + "status": { + "type": "integer" + }, + "supported": { + "type": "boolean" + } + } + }, + "app.listStoreItemsResponse": { + "type": "object", + "properties": { + "list": { + "type": "array", + "items": { + "$ref": "#/definitions/app.listStoreItem" + } + }, + "page": { + "type": "integer" + }, + "page_size": { + "type": "integer" + }, + "total": { + "type": "integer" + } + } + }, "app.listUserItemCardUsesResponse": { "type": "object", "properties": { @@ -9010,6 +9281,34 @@ const docTemplate = `{ } } }, + "app.redeemItemCardRequest": { + "type": "object", + "properties": { + "card_id": { + "type": "integer" + }, + "quantity": { + "type": "integer" + } + } + }, + "app.redeemItemCardResponse": { + "type": "object", + "properties": { + "card_id": { + "type": "integer" + }, + "ledger_id": { + "type": "integer" + }, + "message": { + "type": "string" + }, + "success": { + "type": "boolean" + } + } + }, "app.redeemProductRequest": { "type": "object", "properties": { @@ -10023,6 +10322,9 @@ const docTemplate = `{ "user.OrderWithItems": { "type": "object", "properties": { + "activity_id": { + "type": "integer" + }, "activity_name": { "type": "string" }, @@ -10034,6 +10336,12 @@ const docTemplate = `{ "description": "取消时间", "type": "string" }, + "category_id": { + "type": "integer" + }, + "category_name": { + "type": "string" + }, "created_at": { "description": "创建时间", "type": "string" @@ -10083,6 +10391,9 @@ const docTemplate = `{ "description": "关联预支付单ID(payment_preorder.id)", "type": "integer" }, + "play_type": { + "type": "string" + }, "points_amount": { "description": "积分抵扣金额(分)", "type": "integer" diff --git a/docs/swagger.json b/docs/swagger.json index 2d0aacd..0d52fd7 100644 --- a/docs/swagger.json +++ b/docs/swagger.json @@ -3650,6 +3650,35 @@ } } }, + "/api/app/categories": { + "get": { + "description": "获取APP端商品分类列表", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "APP端.基础" + ], + "summary": "获取分类列表", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/app.listAppCategoriesResponse" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/code.Failure" + } + } + } + } + }, "/api/app/lottery/join": { "post": { "security": [ @@ -3904,6 +3933,29 @@ } } }, + "/api/app/notices": { + "get": { + "description": "获取APP首页滚动公告", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "APP端.基础" + ], + "summary": "获取公告列表", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/app.listAppNoticesResponse" + } + } + } + } + }, "/api/app/orders/{order_id}": { "get": { "security": [ @@ -4140,6 +4192,189 @@ } } }, + "/api/app/store/items": { + "get": { + "security": [ + { + "LoginVerifyToken": [] + } + ], + "description": "分页获取积分商城商品列表,支持按类型筛选(product/item_card/coupon)", + "consumes": [ + "application/x-www-form-urlencoded" + ], + "produces": [ + "application/json" + ], + "tags": [ + "APP端.积分商城" + ], + "summary": "获取积分商城商品列表", + "parameters": [ + { + "type": "string", + "description": "商品类型: product(默认), item_card, coupon", + "name": "kind", + "in": "query" + }, + { + "type": "integer", + "default": 1, + "description": "页码", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "default": 20, + "description": "每页数量", + "name": "page_size", + "in": "query" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/app.listStoreItemsResponse" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/code.Failure" + } + } + } + } + }, + "/api/app/task-center/tasks": { + "get": { + "description": "获取当前可用的任务列表,支持分页", + "consumes": [ + "application/x-www-form-urlencoded" + ], + "produces": [ + "application/json" + ], + "tags": [ + "TaskCenter(App)" + ], + "summary": "获取任务列表(App)", + "parameters": [ + { + "type": "integer", + "default": 1, + "description": "页码", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "default": 20, + "description": "每页数量", + "name": "page_size", + "in": "query" + } + ], + "responses": { + "200": { + "description": "任务列表", + "schema": { + "$ref": "#/definitions/taskcenter.listTasksResponse" + } + } + } + } + }, + "/api/app/task-center/tasks/{id}/claim/{user_id}": { + "post": { + "description": "用户领取指定任务层级的奖励", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "TaskCenter(App)" + ], + "summary": "领取任务奖励(App)", + "parameters": [ + { + "type": "integer", + "description": "任务ID", + "name": "id", + "in": "path", + "required": true + }, + { + "type": "integer", + "description": "用户ID", + "name": "user_id", + "in": "path", + "required": true + }, + { + "description": "领取请求", + "name": "request", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/taskcenter.claimTaskRequest" + } + } + ], + "responses": { + "200": { + "description": "领取成功", + "schema": { + "type": "object", + "additionalProperties": true + } + } + } + } + }, + "/api/app/task-center/tasks/{id}/progress/{user_id}": { + "get": { + "description": "获取指定用户在特定任务上的进度详情", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "TaskCenter(App)" + ], + "summary": "获取用户任务进度(App)", + "parameters": [ + { + "type": "integer", + "description": "任务ID", + "name": "id", + "in": "path", + "required": true + }, + { + "type": "integer", + "description": "用户ID", + "name": "user_id", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "任务进度详情", + "schema": { + "$ref": "#/definitions/taskcenter.taskProgressResponse" + } + } + } + } + }, "/api/app/users/weixin/login": { "post": { "description": "微信静默登录(需传递 code;可选 invite_code)", @@ -5210,6 +5445,18 @@ "name": "page_size", "in": "query", "required": true + }, + { + "type": "integer", + "description": "订单状态:1待支付 2已支付 3已取消 4已退款", + "name": "status", + "in": "query" + }, + { + "type": "integer", + "description": "是否已消耗/履约:0否 1是", + "name": "is_consumed", + "in": "query" } ], "responses": { @@ -5427,6 +5674,58 @@ } } }, + "/api/app/users/{user_id}/points/redeem-item-card": { + "post": { + "security": [ + { + "LoginVerifyToken": [] + } + ], + "description": "使用积分兑换指定数量的道具卡", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "APP端.用户" + ], + "summary": "积分兑换道具卡", + "parameters": [ + { + "type": "integer", + "description": "用户ID", + "name": "user_id", + "in": "path", + "required": true + }, + { + "description": "兑换请求参数", + "name": "request", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/app.redeemItemCardRequest" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/app.redeemItemCardResponse" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/code.Failure" + } + } + } + } + }, "/api/app/users/{user_id}/points/redeem-product": { "post": { "security": [ @@ -5720,133 +6019,6 @@ "responses": {} } }, - "/app/task_center/tasks": { - "get": { - "description": "获取当前可用的任务列表,支持分页", - "consumes": [ - "application/x-www-form-urlencoded" - ], - "produces": [ - "application/json" - ], - "tags": [ - "TaskCenter(App)" - ], - "summary": "获取任务列表(App)", - "parameters": [ - { - "type": "integer", - "default": 1, - "description": "页码", - "name": "page", - "in": "query" - }, - { - "type": "integer", - "default": 20, - "description": "每页数量", - "name": "page_size", - "in": "query" - } - ], - "responses": { - "200": { - "description": "任务列表", - "schema": { - "$ref": "#/definitions/taskcenter.listTasksResponse" - } - } - } - } - }, - "/app/task_center/tasks/{id}/progress/{user_id}": { - "get": { - "description": "获取指定用户在特定任务上的进度详情", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "TaskCenter(App)" - ], - "summary": "获取用户任务进度(App)", - "parameters": [ - { - "type": "integer", - "description": "任务ID", - "name": "id", - "in": "path", - "required": true - }, - { - "type": "integer", - "description": "用户ID", - "name": "user_id", - "in": "path", - "required": true - } - ], - "responses": { - "200": { - "description": "任务进度详情", - "schema": { - "$ref": "#/definitions/taskcenter.taskProgressResponse" - } - } - } - } - }, - "/app/task_center/tasks/{id}/users/{user_id}/claim": { - "post": { - "description": "用户领取指定任务层级的奖励", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "TaskCenter(App)" - ], - "summary": "领取任务奖励(App)", - "parameters": [ - { - "type": "integer", - "description": "任务ID", - "name": "id", - "in": "path", - "required": true - }, - { - "type": "integer", - "description": "用户ID", - "name": "user_id", - "in": "path", - "required": true - }, - { - "description": "领取请求", - "name": "request", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/taskcenter.claimTaskRequest" - } - } - ], - "responses": { - "200": { - "description": "领取成功", - "schema": { - "type": "object", - "additionalProperties": true - } - } - } - } - }, "/common/upload/wangeditor": { "post": { "description": "适配 WangEditor 的图片上传接口", @@ -8043,6 +8215,25 @@ } } }, + "app.appCategoryItem": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "name": { + "type": "string" + } + } + }, + "app.appNoticeItem": { + "type": "object", + "properties": { + "content": { + "type": "string" + } + } + }, "app.bindPhoneRequest": { "type": "object", "properties": { @@ -8480,6 +8671,28 @@ } } }, + "app.listAppCategoriesResponse": { + "type": "object", + "properties": { + "list": { + "type": "array", + "items": { + "$ref": "#/definitions/app.appCategoryItem" + } + } + } + }, + "app.listAppNoticesResponse": { + "type": "object", + "properties": { + "list": { + "type": "array", + "items": { + "$ref": "#/definitions/app.appNoticeItem" + } + } + } + }, "app.listAppProductsItem": { "type": "object", "properties": { @@ -8748,6 +8961,64 @@ } } }, + "app.listStoreItem": { + "type": "object", + "properties": { + "discount_type": { + "type": "integer" + }, + "discount_value": { + "type": "integer" + }, + "id": { + "type": "integer" + }, + "in_stock": { + "type": "boolean" + }, + "kind": { + "type": "string" + }, + "main_image": { + "type": "string" + }, + "min_spend": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "price": { + "type": "integer" + }, + "status": { + "type": "integer" + }, + "supported": { + "type": "boolean" + } + } + }, + "app.listStoreItemsResponse": { + "type": "object", + "properties": { + "list": { + "type": "array", + "items": { + "$ref": "#/definitions/app.listStoreItem" + } + }, + "page": { + "type": "integer" + }, + "page_size": { + "type": "integer" + }, + "total": { + "type": "integer" + } + } + }, "app.listUserItemCardUsesResponse": { "type": "object", "properties": { @@ -9002,6 +9273,34 @@ } } }, + "app.redeemItemCardRequest": { + "type": "object", + "properties": { + "card_id": { + "type": "integer" + }, + "quantity": { + "type": "integer" + } + } + }, + "app.redeemItemCardResponse": { + "type": "object", + "properties": { + "card_id": { + "type": "integer" + }, + "ledger_id": { + "type": "integer" + }, + "message": { + "type": "string" + }, + "success": { + "type": "boolean" + } + } + }, "app.redeemProductRequest": { "type": "object", "properties": { @@ -10015,6 +10314,9 @@ "user.OrderWithItems": { "type": "object", "properties": { + "activity_id": { + "type": "integer" + }, "activity_name": { "type": "string" }, @@ -10026,6 +10328,12 @@ "description": "取消时间", "type": "string" }, + "category_id": { + "type": "integer" + }, + "category_name": { + "type": "string" + }, "created_at": { "description": "创建时间", "type": "string" @@ -10075,6 +10383,9 @@ "description": "关联预支付单ID(payment_preorder.id)", "type": "integer" }, + "play_type": { + "type": "string" + }, "points_amount": { "description": "积分抵扣金额(分)", "type": "integer" diff --git a/docs/swagger.yaml b/docs/swagger.yaml index b98af41..d2eede2 100644 --- a/docs/swagger.yaml +++ b/docs/swagger.yaml @@ -1353,6 +1353,18 @@ definitions: title: type: string type: object + app.appCategoryItem: + properties: + id: + type: integer + name: + type: string + type: object + app.appNoticeItem: + properties: + content: + type: string + type: object app.bindPhoneRequest: properties: code: @@ -1642,6 +1654,20 @@ definitions: $ref: '#/definitions/app.appBannerItem' type: array type: object + app.listAppCategoriesResponse: + properties: + list: + items: + $ref: '#/definitions/app.appCategoryItem' + type: array + type: object + app.listAppNoticesResponse: + properties: + list: + items: + $ref: '#/definitions/app.appNoticeItem' + type: array + type: object app.listAppProductsItem: properties: id: @@ -1816,6 +1842,44 @@ definitions: total: type: integer type: object + app.listStoreItem: + properties: + discount_type: + type: integer + discount_value: + type: integer + id: + type: integer + in_stock: + type: boolean + kind: + type: string + main_image: + type: string + min_spend: + type: integer + name: + type: string + price: + type: integer + status: + type: integer + supported: + type: boolean + type: object + app.listStoreItemsResponse: + properties: + list: + items: + $ref: '#/definitions/app.listStoreItem' + type: array + page: + type: integer + page_size: + type: integer + total: + type: integer + type: object app.listUserItemCardUsesResponse: properties: list: @@ -1981,6 +2045,24 @@ definitions: points: type: integer type: object + app.redeemItemCardRequest: + properties: + card_id: + type: integer + quantity: + type: integer + type: object + app.redeemItemCardResponse: + properties: + card_id: + type: integer + ledger_id: + type: integer + message: + type: string + success: + type: boolean + type: object app.redeemProductRequest: properties: product_id: @@ -2674,6 +2756,8 @@ definitions: type: object user.OrderWithItems: properties: + activity_id: + type: integer activity_name: type: string actual_amount: @@ -2682,6 +2766,10 @@ definitions: cancelled_at: description: 取消时间 type: string + category_id: + type: integer + category_name: + type: string created_at: description: 创建时间 type: string @@ -2717,6 +2805,8 @@ definitions: pay_preorder_id: description: 关联预支付单ID(payment_preorder.id) type: integer + play_type: + type: string points_amount: description: 积分抵扣金额(分) type: integer @@ -5153,6 +5243,25 @@ paths: summary: APP端轮播图列表 tags: - APP端.运营 + /api/app/categories: + get: + consumes: + - application/json + description: 获取APP端商品分类列表 + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/app.listAppCategoriesResponse' + "400": + description: Bad Request + schema: + $ref: '#/definitions/code.Failure' + summary: 获取分类列表 + tags: + - APP端.基础 /api/app/lottery/join: post: consumes: @@ -5313,6 +5422,21 @@ paths: summary: 获取对对碰游戏状态 tags: - APP端.活动 + /api/app/notices: + get: + consumes: + - application/json + description: 获取APP首页滚动公告 + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/app.listAppNoticesResponse' + summary: 获取公告列表 + tags: + - APP端.基础 /api/app/orders/{order_id}: get: consumes: @@ -5461,6 +5585,127 @@ paths: summary: 商品详情 tags: - APP端.商品 + /api/app/store/items: + get: + consumes: + - application/x-www-form-urlencoded + description: 分页获取积分商城商品列表,支持按类型筛选(product/item_card/coupon) + parameters: + - description: '商品类型: product(默认), item_card, coupon' + in: query + name: kind + type: string + - default: 1 + description: 页码 + in: query + name: page + type: integer + - default: 20 + description: 每页数量 + in: query + name: page_size + type: integer + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/app.listStoreItemsResponse' + "400": + description: Bad Request + schema: + $ref: '#/definitions/code.Failure' + security: + - LoginVerifyToken: [] + summary: 获取积分商城商品列表 + tags: + - APP端.积分商城 + /api/app/task-center/tasks: + get: + consumes: + - application/x-www-form-urlencoded + description: 获取当前可用的任务列表,支持分页 + parameters: + - default: 1 + description: 页码 + in: query + name: page + type: integer + - default: 20 + description: 每页数量 + in: query + name: page_size + type: integer + produces: + - application/json + responses: + "200": + description: 任务列表 + schema: + $ref: '#/definitions/taskcenter.listTasksResponse' + summary: 获取任务列表(App) + tags: + - TaskCenter(App) + /api/app/task-center/tasks/{id}/claim/{user_id}: + post: + consumes: + - application/json + description: 用户领取指定任务层级的奖励 + parameters: + - description: 任务ID + in: path + name: id + required: true + type: integer + - description: 用户ID + in: path + name: user_id + required: true + type: integer + - description: 领取请求 + in: body + name: request + required: true + schema: + $ref: '#/definitions/taskcenter.claimTaskRequest' + produces: + - application/json + responses: + "200": + description: 领取成功 + schema: + additionalProperties: true + type: object + summary: 领取任务奖励(App) + tags: + - TaskCenter(App) + /api/app/task-center/tasks/{id}/progress/{user_id}: + get: + consumes: + - application/json + description: 获取指定用户在特定任务上的进度详情 + parameters: + - description: 任务ID + in: path + name: id + required: true + type: integer + - description: 用户ID + in: path + name: user_id + required: true + type: integer + produces: + - application/json + responses: + "200": + description: 任务进度详情 + schema: + $ref: '#/definitions/taskcenter.taskProgressResponse' + summary: 获取用户任务进度(App) + tags: + - TaskCenter(App) /api/app/users/{user_id}: put: consumes: @@ -6119,6 +6364,14 @@ paths: name: page_size required: true type: integer + - description: 订单状态:1待支付 2已支付 3已取消 4已退款 + in: query + name: status + type: integer + - description: 是否已消耗/履约:0否 1是 + in: query + name: is_consumed + type: integer produces: - application/json responses: @@ -6262,6 +6515,39 @@ paths: summary: 积分兑换优惠券 tags: - APP端.积分 + /api/app/users/{user_id}/points/redeem-item-card: + post: + consumes: + - application/json + description: 使用积分兑换指定数量的道具卡 + parameters: + - description: 用户ID + in: path + name: user_id + required: true + type: integer + - description: 兑换请求参数 + in: body + name: request + required: true + schema: + $ref: '#/definitions/app.redeemItemCardRequest' + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/app.redeemItemCardResponse' + "400": + description: Bad Request + schema: + $ref: '#/definitions/code.Failure' + security: + - LoginVerifyToken: [] + summary: 积分兑换道具卡 + tags: + - APP端.用户 /api/app/users/{user_id}/points/redeem-product: post: consumes: @@ -6476,91 +6762,6 @@ paths: /api/v3/system/menus/simple: get: responses: {} - /app/task_center/tasks: - get: - consumes: - - application/x-www-form-urlencoded - description: 获取当前可用的任务列表,支持分页 - parameters: - - default: 1 - description: 页码 - in: query - name: page - type: integer - - default: 20 - description: 每页数量 - in: query - name: page_size - type: integer - produces: - - application/json - responses: - "200": - description: 任务列表 - schema: - $ref: '#/definitions/taskcenter.listTasksResponse' - summary: 获取任务列表(App) - tags: - - TaskCenter(App) - /app/task_center/tasks/{id}/progress/{user_id}: - get: - consumes: - - application/json - description: 获取指定用户在特定任务上的进度详情 - parameters: - - description: 任务ID - in: path - name: id - required: true - type: integer - - description: 用户ID - in: path - name: user_id - required: true - type: integer - produces: - - application/json - responses: - "200": - description: 任务进度详情 - schema: - $ref: '#/definitions/taskcenter.taskProgressResponse' - summary: 获取用户任务进度(App) - tags: - - TaskCenter(App) - /app/task_center/tasks/{id}/users/{user_id}/claim: - post: - consumes: - - application/json - description: 用户领取指定任务层级的奖励 - parameters: - - description: 任务ID - in: path - name: id - required: true - type: integer - - description: 用户ID - in: path - name: user_id - required: true - type: integer - - description: 领取请求 - in: body - name: request - required: true - schema: - $ref: '#/definitions/taskcenter.claimTaskRequest' - produces: - - application/json - responses: - "200": - description: 领取成功 - schema: - additionalProperties: true - type: object - summary: 领取任务奖励(App) - tags: - - TaskCenter(App) /common/upload/wangeditor: post: consumes: diff --git a/internal/api/activity/app.go b/internal/api/activity/app.go index f09b88c..5a6a563 100644 --- a/internal/api/activity/app.go +++ b/internal/api/activity/app.go @@ -13,27 +13,31 @@ import ( ) type handler struct { - logger logger.CustomLogger - writeDB *dao.Query - readDB *dao.Query - activity activitysvc.Service - syscfg syscfgsvc.Service - title titlesvc.Service - repo mysql.Repo - user usersvc.Service - redis *redis.Client + logger logger.CustomLogger + writeDB *dao.Query + readDB *dao.Query + activity activitysvc.Service + syscfg syscfgsvc.Service + title titlesvc.Service + repo mysql.Repo + user usersvc.Service + redis *redis.Client + activityOrder activitysvc.ActivityOrderService // 活动订单服务 + rewardEffects activitysvc.RewardEffectsService // 奖励效果服务 } func New(logger logger.CustomLogger, db mysql.Repo, rdb *redis.Client) *handler { return &handler{ - logger: logger, - writeDB: dao.Use(db.GetDbW()), - readDB: dao.Use(db.GetDbR()), - activity: activitysvc.New(logger, db), - syscfg: syscfgsvc.New(logger, db), - title: titlesvc.New(logger, db), - repo: db, - user: usersvc.New(logger, db), - redis: rdb, + logger: logger, + writeDB: dao.Use(db.GetDbW()), + readDB: dao.Use(db.GetDbR()), + activity: activitysvc.New(logger, db), + syscfg: syscfgsvc.New(logger, db), + title: titlesvc.New(logger, db), + repo: db, + user: usersvc.New(logger, db), + redis: rdb, + activityOrder: activitysvc.NewActivityOrderService(logger, db), + rewardEffects: activitysvc.NewRewardEffectsService(logger, db), } } diff --git a/internal/api/activity/matching_game_app.go b/internal/api/activity/matching_game_app.go index 6a3f6d3..ddd6f18 100644 --- a/internal/api/activity/matching_game_app.go +++ b/internal/api/activity/matching_game_app.go @@ -22,7 +22,7 @@ import ( "github.com/redis/go-redis/v9" "go.uber.org/zap" - titlesvc "bindbox-game/internal/service/title" + activitysvc "bindbox-game/internal/service/activity" usersvc "bindbox-game/internal/service/user" ) @@ -542,129 +542,32 @@ func (h *handler) PreOrderMatchingGame() core.HandlerFunc { return } - // 2. Prepare Order - orderNo := h.randomID("O") // Reuse helper from lottery_app.go? No, handler is same struct but method not exported? - // randomID is private in handler. We need to duplicate or make it public. - // Let's implement a local randomID or use UUID. - // h.randomID is `func (h *handler) randomID(prefix string) string`, it IS available to `h`. - - total := activity.PriceDraw // Matching game ensures 1 draw basically? Or is it a session price? - // "PreOrder" usually implies 1 game session. - - // Create basic order model - order := &model.Orders{ - UserID: userID, - OrderNo: orderNo, - TotalAmount: total, - ActualAmount: total, - Status: 1, // Pending - SourceType: 3, // Other/Game - CreatedAt: time.Now(), - UpdatedAt: time.Now(), - } - // Minimal Remark - order.Remark = fmt.Sprintf("matching_game:issue:%d", req.IssueID) - if activity.AllowItemCards && req.ItemCardID != nil && *req.ItemCardID > 0 { - order.Remark += fmt.Sprintf("|itemcard:%d", *req.ItemCardID) - } - - // 3. Apply Title Discount - titleEffects, _ := h.title.ResolveActiveEffects(ctx.RequestContext(), userID, titlesvc.EffectScope{ - ActivityID: &issue.ActivityID, - IssueID: &req.IssueID, - }) - for _, ef := range titleEffects { - if ef.EffectType == 2 { - var p struct { - DiscountType string `json:"discount_type"` - ValueX1000 int64 `json:"value_x1000"` - MaxDiscountX1000 int64 `json:"max_discount_x1000"` - } - if jsonErr := json.Unmarshal([]byte(ef.ParamsJSON), &p); jsonErr == nil { - var discount int64 - if p.DiscountType == "percentage" { - discount = order.ActualAmount * p.ValueX1000 / 1000 - } else if p.DiscountType == "fixed" { - discount = p.ValueX1000 - } - if p.MaxDiscountX1000 > 0 && discount > p.MaxDiscountX1000 { - discount = p.MaxDiscountX1000 - } - if discount > order.ActualAmount { - discount = order.ActualAmount - } - if discount > 0 { - order.ActualAmount -= discount - order.Remark += fmt.Sprintf("|title_discount:%d:%d", ef.ID, discount) - } - } - } - } - - // 4. Apply Coupon - var appliedCouponVal int64 + // 2. Create Order using ActivityOrderService + var couponID *int64 if activity.AllowCoupons && req.CouponID != nil && *req.CouponID > 0 { - // Reuse h.applyCouponWithCap? It is private. - // We need to either export it or duplicate logic. - // For safety and speed, let's duplicate the core check logic or use `usersvc` directly if possible. - // `h.applyCouponWithCap` logic: fetch coupon, check status, check expiry, check min_spend, calc discount. - // Let's implement simplified version here. - uc, _ := h.readDB.UserCoupons.WithContext(ctx.RequestContext()).Where(h.readDB.UserCoupons.ID.Eq(*req.CouponID), h.readDB.UserCoupons.UserID.Eq(userID)).First() - if uc != nil && uc.Status == 1 && (uc.ValidEnd.IsZero() || uc.ValidEnd.After(time.Now())) { - sc, _ := h.readDB.SystemCoupons.WithContext(ctx.RequestContext()).Where(h.readDB.SystemCoupons.ID.Eq(uc.CouponID)).First() - if sc != nil && order.ActualAmount >= sc.MinSpend { - var discount int64 - if sc.DiscountType == 3 { // Rate (Discount) - // DiscountValue is rate x 1000 (e.g. 800 = 80%) - // Discount Amount = Total * (1 - Rate/1000) ? Or simply applied rate? - // Usually "DiscountValue" for Type 3 means "The Ratio you PAY" or "The Ratio OFF"? - // Standard "zhekou": 8 zhe = pay 80%. Discount = 20%. - // Let's assume DiscountValue=800 means 80% pay. - discount = order.ActualAmount * (1000 - sc.DiscountValue) / 1000 - } else { // Fixed (Type 1 or 2) - discount = sc.DiscountValue - } - - if discount > order.ActualAmount { - discount = order.ActualAmount - } - if discount > 0 { - order.ActualAmount -= discount - order.DiscountAmount = discount - appliedCouponVal = discount - // Record usage later - } - } - } + couponID = req.CouponID + } + var itemCardID *int64 + if activity.AllowItemCards && req.ItemCardID != nil && *req.ItemCardID > 0 { + itemCardID = req.ItemCardID } - // Create Order - if err := h.writeDB.Orders.WithContext(ctx.RequestContext()).Create(order); err != nil { + orderResult, err := h.activityOrder.CreateActivityOrder(ctx, activitysvc.CreateActivityOrderRequest{ + UserID: userID, + ActivityID: issue.ActivityID, + IssueID: req.IssueID, + Count: 1, + UnitPrice: activity.PriceDraw, + SourceType: 3, // 对对碰 + CouponID: couponID, + ItemCardID: itemCardID, + ExtraRemark: fmt.Sprintf("matching_game:issue:%d", req.IssueID), + }) + if err != nil { ctx.AbortWithError(core.Error(http.StatusInternalServerError, 170002, err.Error())) return } - - // Record Coupon Usage - if appliedCouponVal > 0 && req.CouponID != nil { - _ = h.user.RecordOrderCouponUsage(ctx.RequestContext(), order.ID, *req.CouponID, appliedCouponVal) - } - - // Handle 0-amount auto-pay - if order.ActualAmount == 0 { - now := time.Now() - _, _ = h.writeDB.Orders.WithContext(ctx.RequestContext()).Where(h.writeDB.Orders.OrderNo.Eq(orderNo)).Updates(map[string]any{ - h.writeDB.Orders.Status.ColumnName().String(): 2, - h.writeDB.Orders.PaidAt.ColumnName().String(): now, - }) - // Consume Coupon - if req.CouponID != nil { - _, _ = h.writeDB.UserCoupons.WithContext(ctx.RequestContext()).Where(h.readDB.UserCoupons.ID.Eq(*req.CouponID)).Updates(map[string]any{ - h.readDB.UserCoupons.Status.ColumnName().String(): 2, - h.readDB.UserCoupons.UsedOrderID.ColumnName().String(): order.ID, - h.readDB.UserCoupons.UsedAt.ColumnName().String(): now, - }) - } - } + order := orderResult.Order // 2. 加载配置 configs, err := loadCardTypesFromDB(ctx.RequestContext(), h.readDB) @@ -799,6 +702,20 @@ func (h *handler) CheckMatchingGame() core.HandlerFunc { return } + // 校验:不能超过理论最大对数 + // 【关键校验】检查订单是否已支付 + // 对对碰游戏必须先支付才能结算和发奖 + order, err := h.readDB.Orders.WithContext(ctx.RequestContext()).Where(h.readDB.Orders.ID.Eq(game.OrderID)).First() + if err != nil || order == nil { + ctx.AbortWithError(core.Error(http.StatusBadRequest, 170003, "订单不存在")) + return + } + if order.Status != 2 { + fmt.Printf("[对对碰Check] ⏳ 订单支付确认中 order_id=%d status=%d,等待回调完成\n", order.ID, order.Status) + ctx.AbortWithError(core.Error(http.StatusBadRequest, 170004, "支付确认中,请稍后重试")) + return + } + // 校验:不能超过理论最大对数 if req.TotalPairs > game.MaxPossiblePairs { ctx.AbortWithError(core.Error(http.StatusBadRequest, code.ParamBindError, fmt.Sprintf("invalid total pairs: %d > %d", req.TotalPairs, game.MaxPossiblePairs))) @@ -818,19 +735,10 @@ func (h *handler) CheckMatchingGame() core.HandlerFunc { if r.Quantity <= 0 { continue } - if int64(req.TotalPairs) >= r.MinScore { - if candidate == nil { - candidate = r - } else { - // Prioritize Higher MinScore - if r.MinScore > candidate.MinScore { - candidate = r - } else if r.MinScore == candidate.MinScore { - if r.Sort < candidate.Sort { - candidate = r - } - } - } + // 精确匹配:用户消除的对子数 == 奖品设置的 MinScore + if int64(req.TotalPairs) == r.MinScore { + candidate = r + break // 精确匹配,直接使用 } } @@ -844,6 +752,101 @@ func (h *handler) CheckMatchingGame() core.HandlerFunc { Name: candidate.Name, Level: candidate.Level, } + + // 4. Apply Item Card Effects (if any) + ord, _ := h.readDB.Orders.WithContext(ctx.RequestContext()).Where(h.readDB.Orders.ID.Eq(game.OrderID)).First() + if ord != nil { + icID := parseItemCardIDFromRemark(ord.Remark) + fmt.Printf("[道具卡-CheckMatchingGame] 从订单备注解析道具卡ID icID=%d 订单备注=%s\n", icID, ord.Remark) + if icID > 0 { + uic, _ := h.readDB.UserItemCards.WithContext(ctx.RequestContext()).Where( + h.readDB.UserItemCards.ID.Eq(icID), + h.readDB.UserItemCards.UserID.Eq(game.UserID), + h.readDB.UserItemCards.Status.Eq(1), + ).First() + if uic != nil { + ic, _ := h.readDB.SystemItemCards.WithContext(ctx.RequestContext()).Where( + h.readDB.SystemItemCards.ID.Eq(uic.CardID), + h.readDB.SystemItemCards.Status.Eq(1), + ).First() + now := time.Now() + if ic != nil && !uic.ValidStart.After(now) && !uic.ValidEnd.Before(now) { + scopeOK := (ic.ScopeType == 1) || (ic.ScopeType == 3 && ic.ActivityID == game.ActivityID) || (ic.ScopeType == 4 && ic.IssueID == game.IssueID) + fmt.Printf("[道具卡-CheckMatchingGame] 范围检查 ScopeType=%d ActivityID=%d IssueID=%d scopeOK=%t\n", ic.ScopeType, game.ActivityID, game.IssueID, scopeOK) + if scopeOK { + // Apply effect based on type + if ic.EffectType == 1 && ic.RewardMultiplierX1000 >= 2000 { + // Double reward + fmt.Printf("[道具卡-CheckMatchingGame] ✅ 应用双倍奖励 倍数=%d 奖品ID=%d 奖品名=%s\n", ic.RewardMultiplierX1000, candidate.ID, candidate.Name) + rid := candidate.ID + _, _ = h.user.GrantRewardToOrder(ctx.RequestContext(), game.UserID, usersvc.GrantRewardToOrderRequest{ + OrderID: game.OrderID, + ProductID: candidate.ProductID, + Quantity: 1, + ActivityID: &game.ActivityID, + RewardID: &rid, + Remark: candidate.Name + "(倍数)", + }) + } else if ic.EffectType == 2 && ic.BoostRateX1000 > 0 { + // Probability boost - try to upgrade to better reward + fmt.Printf("[道具卡-CheckMatchingGame] 应用概率提升 BoostRateX1000=%d\n", ic.BoostRateX1000) + allRewards, _ := h.readDB.ActivityRewardSettings.WithContext(ctx.RequestContext()).Where( + h.readDB.ActivityRewardSettings.IssueID.Eq(game.IssueID), + ).Find() + var better *model.ActivityRewardSettings + for _, r := range allRewards { + if r.MinScore > candidate.MinScore && r.Quantity > 0 { + if better == nil || r.MinScore < better.MinScore { + better = r + } + } + } + if better != nil { + // Use crypto/rand for secure random + randBytes := make([]byte, 4) + rand.Read(randBytes) + randVal := int32(binary.BigEndian.Uint32(randBytes) % 1000) + if randVal < ic.BoostRateX1000 { + fmt.Printf("[道具卡-CheckMatchingGame] ✅ 概率提升成功 升级到奖品ID=%d 奖品名=%s\n", better.ID, better.Name) + rid := better.ID + _, _ = h.user.GrantRewardToOrder(ctx.RequestContext(), game.UserID, usersvc.GrantRewardToOrderRequest{ + OrderID: game.OrderID, + ProductID: better.ProductID, + Quantity: 1, + ActivityID: &game.ActivityID, + RewardID: &rid, + Remark: better.Name + "(升级)", + }) + } + } + } + + // Void the item card + fmt.Printf("[道具卡-CheckMatchingGame] 核销道具卡 用户道具卡ID=%d\n", icID) + // Get DrawLog ID for the order + drawLog, _ := h.readDB.ActivityDrawLogs.WithContext(ctx.RequestContext()).Where( + h.readDB.ActivityDrawLogs.OrderID.Eq(game.OrderID), + ).First() + var drawLogID int64 + if drawLog != nil { + drawLogID = drawLog.ID + } + _, _ = h.writeDB.UserItemCards.WithContext(ctx.RequestContext()).Where( + h.writeDB.UserItemCards.ID.Eq(icID), + h.writeDB.UserItemCards.UserID.Eq(game.UserID), + h.writeDB.UserItemCards.Status.Eq(1), + ).Updates(map[string]any{ + h.writeDB.UserItemCards.Status.ColumnName().String(): 2, + h.writeDB.UserItemCards.UsedDrawLogID.ColumnName().String(): drawLogID, + h.writeDB.UserItemCards.UsedActivityID.ColumnName().String(): game.ActivityID, + h.writeDB.UserItemCards.UsedIssueID.ColumnName().String(): game.IssueID, + h.writeDB.UserItemCards.UsedAt.ColumnName().String(): now, + }) + } + } + } + } + } } } } diff --git a/internal/api/activity/matching_game_app_test.go b/internal/api/activity/matching_game_app_test.go index 4879f7a..bb5a413 100644 --- a/internal/api/activity/matching_game_app_test.go +++ b/internal/api/activity/matching_game_app_test.go @@ -1 +1,98 @@ package app + +import ( + "bindbox-game/internal/repository/mysql/model" + "testing" +) + +// TestSelectRewardByExactMatch 测试对对碰选奖逻辑:精确匹配 TotalPairs == MinScore +func TestSelectRewardByExactMatch(t *testing.T) { + // 模拟奖品设置 + rewards := []*model.ActivityRewardSettings{ + {ID: 1, Name: "奖品A-10对", MinScore: 10, Quantity: 5}, + {ID: 2, Name: "奖品B-20对", MinScore: 20, Quantity: 5}, + {ID: 3, Name: "奖品C-30对", MinScore: 30, Quantity: 5}, + {ID: 4, Name: "奖品D-40对", MinScore: 40, Quantity: 5}, + {ID: 5, Name: "奖品E-45对", MinScore: 45, Quantity: 5}, + } + + testCases := []struct { + name string + totalPairs int64 + expectReward *int64 // nil = 无匹配 + expectName string + }{ + {"精确匹配10对", 10, ptr(int64(1)), "奖品A-10对"}, + {"精确匹配20对", 20, ptr(int64(2)), "奖品B-20对"}, + {"精确匹配30对", 30, ptr(int64(3)), "奖品C-30对"}, + {"精确匹配40对", 40, ptr(int64(4)), "奖品D-40对"}, + {"精确匹配45对", 45, ptr(int64(5)), "奖品E-45对"}, + {"15对-无匹配", 15, nil, ""}, + {"25对-无匹配", 25, nil, ""}, + {"35对-无匹配", 35, nil, ""}, + {"50对-无匹配", 50, nil, ""}, + {"0对-无匹配", 0, nil, ""}, + } + + for _, tc := range testCases { + t.Run(tc.name, func(t *testing.T) { + candidate := selectRewardExact(rewards, tc.totalPairs) + + if tc.expectReward == nil { + if candidate != nil { + t.Errorf("期望无匹配,但得到奖品: %s (ID=%d)", candidate.Name, candidate.ID) + } + } else { + if candidate == nil { + t.Errorf("期望匹配奖品ID=%d,但无匹配", *tc.expectReward) + } else if candidate.ID != *tc.expectReward { + t.Errorf("期望奖品ID=%d,实际=%d", *tc.expectReward, candidate.ID) + } else if candidate.Name != tc.expectName { + t.Errorf("期望奖品名=%s,实际=%s", tc.expectName, candidate.Name) + } + } + }) + } +} + +// TestSelectRewardWithZeroQuantity 测试库存为0时不匹配 +func TestSelectRewardWithZeroQuantity(t *testing.T) { + rewards := []*model.ActivityRewardSettings{ + {ID: 1, Name: "奖品A-10对", MinScore: 10, Quantity: 0}, // 库存为0 + {ID: 2, Name: "奖品B-20对", MinScore: 20, Quantity: 5}, + } + + // 即使精确匹配,库存为0也不应匹配 + candidate := selectRewardExact(rewards, 10) + if candidate != nil { + t.Errorf("库存为0时不应匹配,但得到: %s", candidate.Name) + } + + // 库存>0应正常匹配 + candidate = selectRewardExact(rewards, 20) + if candidate == nil { + t.Error("库存>0时应匹配,但无匹配") + } else if candidate.ID != 2 { + t.Errorf("期望ID=2,实际=%d", candidate.ID) + } +} + +// selectRewardExact 精确匹配选奖逻辑(从matching_game_app.go提取) +// 这是 CheckMatchingGame 中实际使用的逻辑 +func selectRewardExact(rewards []*model.ActivityRewardSettings, totalPairs int64) *model.ActivityRewardSettings { + for _, r := range rewards { + if r.Quantity <= 0 { + continue + } + // 精确匹配:用户消除的对子数 == 奖品设置的 MinScore + if totalPairs == r.MinScore { + return r + } + } + return nil +} + +// ptr 辅助函数:创建int64指针 +func ptr(v int64) *int64 { + return &v +} diff --git a/internal/api/admin/pay_orders_admin.go b/internal/api/admin/pay_orders_admin.go index 8f628d2..4d8b0ea 100644 --- a/internal/api/admin/pay_orders_admin.go +++ b/internal/api/admin/pay_orders_admin.go @@ -5,6 +5,8 @@ import ( "net/http" "time" + "go.uber.org/zap" + "bindbox-game/configs" "bindbox-game/internal/code" "bindbox-game/internal/pkg/core" @@ -16,7 +18,9 @@ import ( type listPayOrdersRequest struct { Page int `form:"page"` + Current int `form:"current"` PageSize int `form:"page_size"` + Size int `form:"size"` Status *int32 `form:"status"` SourceType *int32 `form:"source_type"` ExcludeSourceType *int32 `form:"exclude_source_type"` @@ -44,6 +48,12 @@ func (h *handler) ListPayOrders() core.HandlerFunc { ctx.AbortWithError(core.Error(http.StatusBadRequest, code.ParamBindError, validation.Error(err))) return } + if req.Page <= 0 && req.Current > 0 { + req.Page = req.Current + } + if req.PageSize <= 0 && req.Size > 0 { + req.PageSize = req.Size + } if req.Page <= 0 { req.Page = 1 } @@ -63,9 +73,6 @@ func (h *handler) ListPayOrders() core.HandlerFunc { if req.ExcludeSourceType != nil { q = q.Not(h.readDB.Orders.SourceType.Eq(*req.ExcludeSourceType)) } - if req.SourceType == nil && req.ExcludeSourceType == nil { - q = q.Not(h.readDB.Orders.SourceType.Eq(3)) - } if req.UserID != nil { q = q.Where(h.readDB.Orders.UserID.Eq(*req.UserID)) } @@ -114,9 +121,13 @@ func (h *handler) ListPayOrders() core.HandlerFunc { pointsRate = r } } + out := make([]map[string]any, 0, len(rows)) for _, o := range rows { - ledgers, _ := h.readDB.UserPointsLedger.WithContext(ctx.RequestContext()).ReadDB().Where(h.readDB.UserPointsLedger.RefTable.Eq("orders"), h.readDB.UserPointsLedger.RefID.Eq(o.OrderNo)).Find() + ledgers, err := h.readDB.UserPointsLedger.WithContext(ctx.RequestContext()).ReadDB().Where(h.readDB.UserPointsLedger.RefTable.Eq("orders"), h.readDB.UserPointsLedger.RefID.Eq(o.OrderNo)).Find() + if err != nil { + h.logger.Error("ListPayOrders fetch ledgers error", zap.Error(err), zap.String("order_no", o.OrderNo)) + } var consumePointsSum int64 for _, lg := range ledgers { if lg.Points < 0 { @@ -141,7 +152,7 @@ func (h *handler) ListPayOrders() core.HandlerFunc { "actual_amount": o.ActualAmount, "status": o.Status, "paid_at": func() string { - if !o.PaidAt.IsZero() { + if o.PaidAt != nil && !o.PaidAt.IsZero() { return o.PaidAt.Format("2006-01-02 15:04:05") } return "" @@ -466,9 +477,14 @@ func (h *handler) GetPayOrderDetail() core.HandlerFunc { CouponAppliedAmount int64 `json:"coupon_applied_amount"` TotalAmount int64 `json:"total_amount"` }{ - Status: order.Status, - ActualAmount: order.ActualAmount, - PaidAt: order.PaidAt.Format("2006-01-02 15:04:05"), + Status: order.Status, + ActualAmount: order.ActualAmount, + PaidAt: func() string { + if order.PaidAt != nil && !order.PaidAt.IsZero() { + return order.PaidAt.Format("2006-01-02 15:04:05") + } + return "" + }(), PayPreorderID: order.PayPreorderID, TransactionID: "", PointsAmount: pointsAmountCents, diff --git a/internal/api/admin/pay_orders_export.go b/internal/api/admin/pay_orders_export.go index ea8853d..4df86f8 100644 --- a/internal/api/admin/pay_orders_export.go +++ b/internal/api/admin/pay_orders_export.go @@ -1,98 +1,117 @@ package admin import ( - "bytes" - "fmt" - "net/http" - "time" + "bytes" + "fmt" + "net/http" + "time" - "bindbox-game/internal/code" - "bindbox-game/internal/pkg/core" - "bindbox-game/internal/pkg/validation" - "github.com/tealeg/xlsx" + "bindbox-game/internal/code" + "bindbox-game/internal/pkg/core" + "bindbox-game/internal/pkg/validation" + + "github.com/tealeg/xlsx" ) type exportOrdersRequest struct { - Status *int32 `form:"status"` - SourceType *int32 `form:"source_type"` - StartDate string `form:"start_date"` - EndDate string `form:"end_date"` + Status *int32 `form:"status"` + SourceType *int32 `form:"source_type"` + StartDate string `form:"start_date"` + EndDate string `form:"end_date"` } func (h *handler) ExportPayOrders() core.HandlerFunc { - return func(ctx core.Context) { - req := new(exportOrdersRequest) - if err := ctx.ShouldBindForm(req); err != nil { - ctx.AbortWithError(core.Error(http.StatusBadRequest, code.ParamBindError, validation.Error(err))) - return - } - q := h.readDB.Orders.WithContext(ctx.RequestContext()).ReadDB() - if req.Status != nil { - q = q.Where(h.readDB.Orders.Status.Eq(*req.Status)) - } - if req.SourceType != nil { - q = q.Where(h.readDB.Orders.SourceType.Eq(*req.SourceType)) - } - if req.StartDate != "" { - if t, err := time.Parse("2006-01-02", req.StartDate); err == nil { - q = q.Where(h.readDB.Orders.CreatedAt.Gte(t)) - } - } - if req.EndDate != "" { - if t, err := time.Parse("2006-01-02", req.EndDate); err == nil { - t = t.Add(24 * time.Hour).Add(-time.Second) - q = q.Where(h.readDB.Orders.CreatedAt.Lte(t)) - } - } - rows, err := q.Order(h.readDB.Orders.ID.Desc()).Limit(5000).Find() - if err != nil { - ctx.AbortWithError(core.Error(http.StatusBadRequest, 23001, err.Error())) - return - } - var pointsRate int64 = 1 - if cfgRate, _ := h.readDB.SystemConfigs.WithContext(ctx.RequestContext()).Where(h.readDB.SystemConfigs.ConfigKey.Eq("points_exchange_per_cent")).First(); cfgRate != nil { - var r int64 - _, _ = fmt.Sscanf(cfgRate.ConfigValue, "%d", &r) - if r > 0 { pointsRate = r } - } - file := xlsx.NewFile() - sheet, _ := file.AddSheet("orders") - header := []string{"订单号", "用户ID", "来源", "状态", "总金额", "折扣", "积分抵扣(分)", "积分抵扣(积分)", "优惠券抵扣(分)", "实付", "支付时间", "创建时间"} - row := sheet.AddRow() - for _, hname := range header { - cell := row.AddCell() - cell.Value = hname - } - for _, o := range rows { - leds, _ := h.readDB.UserPointsLedger.WithContext(ctx.RequestContext()).ReadDB().Where(h.readDB.UserPointsLedger.RefTable.Eq("orders"), h.readDB.UserPointsLedger.RefID.Eq(o.OrderNo)).Find() - var consumePointsSum int64 - for _, lg := range leds { if lg.Points < 0 { consumePointsSum += -lg.Points } } - pa := o.PointsAmount - if pa == 0 && consumePointsSum > 0 { pa = consumePointsSum / pointsRate } - pu := int64(0) - if consumePointsSum > 0 { pu = consumePointsSum } else if pa > 0 { pu = pa * pointsRate } - ocs, _ := h.readDB.OrderCoupons.WithContext(ctx.RequestContext()).ReadDB().Where(h.readDB.OrderCoupons.OrderID.Eq(o.ID)).Find() - var couponApplied int64 - for _, oc := range ocs { couponApplied += oc.AppliedAmount } - r := sheet.AddRow() - r.AddCell().Value = o.OrderNo - r.AddCell().SetInt64(o.UserID) - r.AddCell().SetInt(int(o.SourceType)) - r.AddCell().SetInt(int(o.Status)) - r.AddCell().SetInt64(o.TotalAmount) - r.AddCell().SetInt64(o.DiscountAmount) - r.AddCell().SetInt64(pa) - r.AddCell().SetInt64(pu) - r.AddCell().SetInt64(couponApplied) - r.AddCell().SetInt64(o.ActualAmount) - r.AddCell().Value = o.PaidAt.Format("2006-01-02 15:04:05") - r.AddCell().Value = o.CreatedAt.Format("2006-01-02 15:04:05") - } - var buf bytes.Buffer - if err := file.Write(&buf); err != nil { - ctx.AbortWithError(core.Error(http.StatusBadRequest, 23002, err.Error())) - return - } - ctx.ExcelData("orders.xlsx", buf.Bytes()) - } + return func(ctx core.Context) { + req := new(exportOrdersRequest) + if err := ctx.ShouldBindForm(req); err != nil { + ctx.AbortWithError(core.Error(http.StatusBadRequest, code.ParamBindError, validation.Error(err))) + return + } + q := h.readDB.Orders.WithContext(ctx.RequestContext()).ReadDB() + if req.Status != nil { + q = q.Where(h.readDB.Orders.Status.Eq(*req.Status)) + } + if req.SourceType != nil { + q = q.Where(h.readDB.Orders.SourceType.Eq(*req.SourceType)) + } + if req.StartDate != "" { + if t, err := time.Parse("2006-01-02", req.StartDate); err == nil { + q = q.Where(h.readDB.Orders.CreatedAt.Gte(t)) + } + } + if req.EndDate != "" { + if t, err := time.Parse("2006-01-02", req.EndDate); err == nil { + t = t.Add(24 * time.Hour).Add(-time.Second) + q = q.Where(h.readDB.Orders.CreatedAt.Lte(t)) + } + } + rows, err := q.Order(h.readDB.Orders.ID.Desc()).Limit(5000).Find() + if err != nil { + ctx.AbortWithError(core.Error(http.StatusBadRequest, 23001, err.Error())) + return + } + var pointsRate int64 = 1 + if cfgRate, _ := h.readDB.SystemConfigs.WithContext(ctx.RequestContext()).Where(h.readDB.SystemConfigs.ConfigKey.Eq("points_exchange_per_cent")).First(); cfgRate != nil { + var r int64 + _, _ = fmt.Sscanf(cfgRate.ConfigValue, "%d", &r) + if r > 0 { + pointsRate = r + } + } + file := xlsx.NewFile() + sheet, _ := file.AddSheet("orders") + header := []string{"订单号", "用户ID", "来源", "状态", "总金额", "折扣", "积分抵扣(分)", "积分抵扣(积分)", "优惠券抵扣(分)", "实付", "支付时间", "创建时间"} + row := sheet.AddRow() + for _, hname := range header { + cell := row.AddCell() + cell.Value = hname + } + for _, o := range rows { + leds, _ := h.readDB.UserPointsLedger.WithContext(ctx.RequestContext()).ReadDB().Where(h.readDB.UserPointsLedger.RefTable.Eq("orders"), h.readDB.UserPointsLedger.RefID.Eq(o.OrderNo)).Find() + var consumePointsSum int64 + for _, lg := range leds { + if lg.Points < 0 { + consumePointsSum += -lg.Points + } + } + pa := o.PointsAmount + if pa == 0 && consumePointsSum > 0 { + pa = consumePointsSum / pointsRate + } + pu := int64(0) + if consumePointsSum > 0 { + pu = consumePointsSum + } else if pa > 0 { + pu = pa * pointsRate + } + ocs, _ := h.readDB.OrderCoupons.WithContext(ctx.RequestContext()).ReadDB().Where(h.readDB.OrderCoupons.OrderID.Eq(o.ID)).Find() + var couponApplied int64 + for _, oc := range ocs { + couponApplied += oc.AppliedAmount + } + r := sheet.AddRow() + r.AddCell().Value = o.OrderNo + r.AddCell().SetInt64(o.UserID) + r.AddCell().SetInt(int(o.SourceType)) + r.AddCell().SetInt(int(o.Status)) + r.AddCell().SetInt64(o.TotalAmount) + r.AddCell().SetInt64(o.DiscountAmount) + r.AddCell().SetInt64(pa) + r.AddCell().SetInt64(pu) + r.AddCell().SetInt64(couponApplied) + r.AddCell().SetInt64(o.ActualAmount) + if o.PaidAt != nil { + r.AddCell().Value = o.PaidAt.Format("2006-01-02 15:04:05") + } else { + r.AddCell().Value = "" + } + r.AddCell().Value = o.CreatedAt.Format("2006-01-02 15:04:05") + } + var buf bytes.Buffer + if err := file.Write(&buf); err != nil { + ctx.AbortWithError(core.Error(http.StatusBadRequest, 23002, err.Error())) + return + } + ctx.ExcelData("orders.xlsx", buf.Bytes()) + } } diff --git a/internal/api/admin/users_admin.go b/internal/api/admin/users_admin.go index 19117d8..73866a4 100644 --- a/internal/api/admin/users_admin.go +++ b/internal/api/admin/users_admin.go @@ -314,7 +314,7 @@ func (h *handler) ListUserOrders() core.HandlerFunc { ctx.AbortWithError(core.Error(http.StatusBadRequest, code.ParamBindError, "未传递用户ID")) return } - items, total, err := h.user.ListOrdersWithItems(ctx.RequestContext(), userID, 0, req.Page, req.PageSize) + items, total, err := h.user.ListOrdersWithItems(ctx.RequestContext(), userID, 0, nil, req.Page, req.PageSize) if err != nil { ctx.AbortWithError(core.Error(http.StatusBadRequest, 20104, err.Error())) return diff --git a/internal/api/user/orders_app.go b/internal/api/user/orders_app.go index f722950..85e15f0 100644 --- a/internal/api/user/orders_app.go +++ b/internal/api/user/orders_app.go @@ -12,9 +12,10 @@ import ( ) type listOrdersRequest struct { - Page int `form:"page"` - PageSize int `form:"page_size"` - Status int32 `form:"status"` + Page int `form:"page"` + PageSize int `form:"page_size"` + Status int32 `form:"status"` + IsConsumed *int32 `form:"is_consumed"` } type listOrdersResponse struct { Page int `json:"page"` @@ -33,6 +34,8 @@ type listOrdersResponse struct { // @Security LoginVerifyToken // @Param page query int true "页码" default(1) // @Param page_size query int true "每页数量,最多100" default(20) +// @Param status query int false "订单状态:1待支付 2已支付 3已取消 4已退款" +// @Param is_consumed query int false "是否已消耗/履约:0否 1是" // @Success 200 {object} listOrdersResponse // @Failure 400 {object} code.Failure // @Router /api/app/users/{user_id}/orders [get] @@ -45,7 +48,8 @@ func (h *handler) ListUserOrders() core.HandlerFunc { return } userID := int64(ctx.SessionUserInfo().Id) - items, total, err := h.user.ListOrdersWithItems(ctx.RequestContext(), userID, req.Status, req.Page, req.PageSize) + + items, total, err := h.user.ListOrdersWithItems(ctx.RequestContext(), userID, req.Status, req.IsConsumed, req.Page, req.PageSize) if err != nil { ctx.AbortWithError(core.Error(http.StatusBadRequest, 10002, err.Error())) return diff --git a/internal/pkg/core/core.go b/internal/pkg/core/core.go index d26b3ab..97a302b 100644 --- a/internal/pkg/core/core.go +++ b/internal/pkg/core/core.go @@ -343,7 +343,7 @@ func New(logger logger.CustomLogger, options ...Option) (Mux, error) { if err := recover(); err != nil { panicStackInfo = string(debug.Stack()) panicError = fmt.Sprintf("%+v", err) - // logger.Error("got panic", zap.String("panic", fmt.Sprintf("%+v", err)), zap.String("stack", stackInfo)) + logger.Error("got panic", zap.String("panic", fmt.Sprintf("%+v", err)), zap.String("stack", panicStackInfo)) context.AbortWithError(Error( http.StatusInternalServerError, code.ServerError, @@ -490,17 +490,17 @@ func New(logger logger.CustomLogger, options ...Option) (Mux, error) { t.Success = !ctx.IsAborted() && (ctx.Writer.Status() == http.StatusOK) t.CostSeconds = time.Since(ts).Seconds() - //logger.Info("trace-log", - // zap.Any("method", ctx.Request.Method), - // zap.Any("path", decodedURL), - // zap.Any("http_code", ctx.Writer.Status()), - // zap.Any("business_code", businessCode), - // zap.Any("success", t.Success), - // zap.Any("cost_seconds", t.CostSeconds), - // zap.Any("trace_id", t.Identifier), - // zap.Any("trace_info", t), - // zap.Error(abortErr), - //) + logger.Info("trace-log", + zap.Any("method", ctx.Request.Method), + zap.Any("path", decodedURL), + zap.Any("http_code", ctx.Writer.Status()), + zap.Any("business_code", businessCode), + zap.Any("success", t.Success), + zap.Any("cost_seconds", t.CostSeconds), + zap.Any("trace_id", t.Identifier), + zap.Any("trace_info", t), + zap.Error(abortErr), + ) traceInfo := "" if traceJsonData, err := json.Marshal(t); err == nil { diff --git a/internal/service/activity/activity_order_service.go b/internal/service/activity/activity_order_service.go new file mode 100644 index 0000000..62a6afd --- /dev/null +++ b/internal/service/activity/activity_order_service.go @@ -0,0 +1,309 @@ +package activity + +import ( + "bindbox-game/internal/pkg/core" + "bindbox-game/internal/pkg/logger" + "bindbox-game/internal/repository/mysql" + "bindbox-game/internal/repository/mysql/dao" + "bindbox-game/internal/repository/mysql/model" + titlesvc "bindbox-game/internal/service/title" + usersvc "bindbox-game/internal/service/user" + "context" + "encoding/json" + "fmt" + "time" +) + +// ActivityOrderService 活动订单创建服务 +// 统一处理一番赏和对对碰的订单创建逻辑 +type ActivityOrderService interface { + // CreateActivityOrder 创建活动订单 + // 统一处理优惠券、称号折扣、道具卡记录等 + CreateActivityOrder(ctx core.Context, req CreateActivityOrderRequest) (*CreateActivityOrderResult, error) +} + +// CreateActivityOrderRequest 订单创建请求 +type CreateActivityOrderRequest struct { + UserID int64 // 用户ID + ActivityID int64 // 活动ID + IssueID int64 // 期ID + Count int64 // 数量 + UnitPrice int64 // 单价(分) + SourceType int32 // 订单来源类型: 2=抽奖, 3=对对碰 + CouponID *int64 // 优惠券ID(可选) + ItemCardID *int64 // 道具卡ID(可选) + ExtraRemark string // 额外备注信息 +} + +// CreateActivityOrderResult 订单创建结果 +type CreateActivityOrderResult struct { + Order *model.Orders // 创建的订单 + AppliedCouponVal int64 // 应用的优惠券抵扣金额 +} + +type activityOrderService struct { + logger logger.CustomLogger + readDB *dao.Query + writeDB *dao.Query + repo mysql.Repo + title titlesvc.Service + user usersvc.Service +} + +// NewActivityOrderService 创建活动订单服务 +func NewActivityOrderService(l logger.CustomLogger, db mysql.Repo) ActivityOrderService { + return &activityOrderService{ + logger: l, + readDB: dao.Use(db.GetDbR()), + writeDB: dao.Use(db.GetDbW()), + repo: db, + title: titlesvc.New(l, db), + user: usersvc.New(l, db), + } +} + +// CreateActivityOrder 创建活动订单 +func (s *activityOrderService) CreateActivityOrder(ctx core.Context, req CreateActivityOrderRequest) (*CreateActivityOrderResult, error) { + userID := req.UserID + count := req.Count + if count <= 0 { + count = 1 + } + total := req.UnitPrice * count + + // 1. 创建订单基础信息 + orderNo := fmt.Sprintf("O%s", time.Now().Format("20060102150405")) + order := &model.Orders{ + UserID: userID, + OrderNo: orderNo, + SourceType: req.SourceType, + TotalAmount: total, + ActualAmount: total, + Status: 1, // Pending + CreatedAt: time.Now(), + UpdatedAt: time.Now(), + } + + // 设置备注 + if req.ExtraRemark != "" { + order.Remark = req.ExtraRemark + } else { + order.Remark = fmt.Sprintf("activity:%d|issue:%d|count:%d", req.ActivityID, req.IssueID, count) + } + + // 2. 应用称号折扣 (Title Discount) + titleEffects, _ := s.title.ResolveActiveEffects(ctx.RequestContext(), userID, titlesvc.EffectScope{ + ActivityID: &req.ActivityID, + IssueID: &req.IssueID, + }) + for _, ef := range titleEffects { + if ef.EffectType == 2 { // Discount effect + var p struct { + DiscountType string `json:"discount_type"` + ValueX1000 int64 `json:"value_x1000"` + MaxDiscountX1000 int64 `json:"max_discount_x1000"` + } + if jsonErr := json.Unmarshal([]byte(ef.ParamsJSON), &p); jsonErr == nil { + var discount int64 + if p.DiscountType == "percentage" { + discount = order.ActualAmount * p.ValueX1000 / 1000 + } else if p.DiscountType == "fixed" { + discount = p.ValueX1000 + } + if p.MaxDiscountX1000 > 0 && discount > p.MaxDiscountX1000 { + discount = p.MaxDiscountX1000 + } + if discount > order.ActualAmount { + discount = order.ActualAmount + } + if discount > 0 { + order.ActualAmount -= discount + order.Remark += fmt.Sprintf("|title_discount:%d:%d", ef.ID, discount) + } + } + } + } + + // 3. 应用优惠券 (using applyCouponWithCap logic) + var appliedCouponVal int64 + if req.CouponID != nil && *req.CouponID > 0 { + fmt.Printf("[订单服务] 尝试优惠券 用户券ID=%d 应用前实付(分)=%d\n", *req.CouponID, order.ActualAmount) + appliedCouponVal = s.applyCouponWithCap(ctx.RequestContext(), userID, order, req.ActivityID, *req.CouponID) + fmt.Printf("[订单服务] 优惠后 实付(分)=%d 累计优惠(分)=%d\n", order.ActualAmount, order.DiscountAmount) + } + + // 4. 记录道具卡到备注 + if req.ItemCardID != nil && *req.ItemCardID > 0 { + order.Remark += fmt.Sprintf("|itemcard:%d", *req.ItemCardID) + } + + // 5. 保存订单 + if err := s.writeDB.Orders.WithContext(ctx.RequestContext()).Omit(s.writeDB.Orders.PaidAt, s.writeDB.Orders.CancelledAt).Create(order); err != nil { + return nil, err + } + + // 6. 记录优惠券使用明细 + if appliedCouponVal > 0 && req.CouponID != nil && *req.CouponID > 0 { + _ = s.user.RecordOrderCouponUsage(ctx.RequestContext(), order.ID, *req.CouponID, appliedCouponVal) + } + + // 7. 处理0元订单自动支付 + if order.ActualAmount == 0 { + now := time.Now() + _, _ = s.writeDB.Orders.WithContext(ctx.RequestContext()).Where(s.writeDB.Orders.OrderNo.Eq(orderNo)).Updates(map[string]any{ + s.writeDB.Orders.Status.ColumnName().String(): 2, + s.writeDB.Orders.PaidAt.ColumnName().String(): now, + }) + order.Status = 2 + + // 核销优惠券 + if req.CouponID != nil && *req.CouponID > 0 { + s.consumeCouponOnZeroPay(ctx.RequestContext(), userID, order.ID, *req.CouponID, appliedCouponVal, now) + } + } + + fmt.Printf("[订单服务] 订单创建完成 订单号=%s 总额(分)=%d 优惠(分)=%d 实付(分)=%d 状态=%d\n", + order.OrderNo, order.TotalAmount, order.DiscountAmount, order.ActualAmount, order.Status) + + return &CreateActivityOrderResult{ + Order: order, + AppliedCouponVal: appliedCouponVal, + }, nil +} + +// applyCouponWithCap 优惠券抵扣(含50%封顶与金额券部分使用) +func (s *activityOrderService) applyCouponWithCap(ctx context.Context, userID int64, order *model.Orders, activityID int64, userCouponID int64) int64 { + uc, _ := s.readDB.UserCoupons.WithContext(ctx).Where(s.readDB.UserCoupons.ID.Eq(userCouponID), s.readDB.UserCoupons.UserID.Eq(userID), s.readDB.UserCoupons.Status.Eq(1)).First() + if uc == nil { + return 0 + } + fmt.Printf("[优惠券] 用户券ID=%d 开始=%s 结束=%s\n", userCouponID, uc.ValidStart.Format(time.RFC3339), func() string { + if uc.ValidEnd.IsZero() { + return "无截止" + } + return uc.ValidEnd.Format(time.RFC3339) + }()) + sc, _ := s.readDB.SystemCoupons.WithContext(ctx).Where(s.readDB.SystemCoupons.ID.Eq(uc.CouponID), s.readDB.SystemCoupons.Status.Eq(1)).First() + now := time.Now() + if sc == nil { + fmt.Printf("[优惠券] 模板不存在 用户券ID=%d\n", userCouponID) + return 0 + } + if uc.ValidStart.After(now) { + fmt.Printf("[优惠券] 未到开始时间 用户券ID=%d\n", userCouponID) + return 0 + } + if !uc.ValidEnd.IsZero() && uc.ValidEnd.Before(now) { + fmt.Printf("[优惠券] 已过期 用户券ID=%d\n", userCouponID) + return 0 + } + scopeOK := (sc.ScopeType == 1) || (sc.ScopeType == 2 && sc.ActivityID == activityID) + if !scopeOK { + fmt.Printf("[优惠券] 范围不匹配 用户券ID=%d scope_type=%d\n", userCouponID, sc.ScopeType) + return 0 + } + if order.TotalAmount < sc.MinSpend { + fmt.Printf("[优惠券] 未达使用门槛 用户券ID=%d min_spend(分)=%d 订单总额(分)=%d\n", userCouponID, sc.MinSpend, order.TotalAmount) + return 0 + } + + // 50% 封顶 + cap := order.TotalAmount / 2 + remainingCap := cap - order.DiscountAmount + if remainingCap <= 0 { + fmt.Printf("[优惠券] 已达封顶\n") + return 0 + } + + applied := int64(0) + switch sc.DiscountType { + case 1: // 金额券 + var bal int64 + _ = s.repo.GetDbR().Raw("SELECT COALESCE(balance_amount,0) FROM user_coupons WHERE id=?", userCouponID).Scan(&bal).Error + if bal <= 0 { + bal = sc.DiscountValue + } + if bal > 0 { + if bal > remainingCap { + applied = remainingCap + } else { + applied = bal + } + } + case 2: // 满减券 + applied = sc.DiscountValue + if applied > remainingCap { + applied = remainingCap + } + case 3: // 折扣券 + rate := sc.DiscountValue + if rate < 0 { + rate = 0 + } + if rate > 1000 { + rate = 1000 + } + newAmt := order.ActualAmount * rate / 1000 + d := order.ActualAmount - newAmt + if d > remainingCap { + applied = remainingCap + } else { + applied = d + } + } + + if applied > order.ActualAmount { + applied = order.ActualAmount + } + if applied <= 0 { + return 0 + } + + order.ActualAmount -= applied + order.DiscountAmount += applied + order.Remark += fmt.Sprintf("|c:%d:%d", userCouponID, applied) + fmt.Printf("[优惠券] 本次抵扣(分)=%d\n", applied) + + return applied +} + +// consumeCouponOnZeroPay 0元支付时核销优惠券 +func (s *activityOrderService) consumeCouponOnZeroPay(ctx context.Context, userID int64, orderID int64, userCouponID int64, applied int64, now time.Time) { + uc, _ := s.readDB.UserCoupons.WithContext(ctx).Where(s.readDB.UserCoupons.ID.Eq(userCouponID), s.readDB.UserCoupons.UserID.Eq(userID)).First() + if uc == nil { + return + } + sc, _ := s.readDB.SystemCoupons.WithContext(ctx).Where(s.readDB.SystemCoupons.ID.Eq(uc.CouponID)).First() + if sc == nil { + return + } + + if sc.DiscountType == 1 { // 金额券 - 部分扣减 + var bal int64 + _ = s.repo.GetDbR().Raw("SELECT COALESCE(balance_amount,0) FROM user_coupons WHERE id=?", userCouponID).Scan(&bal).Error + nb := bal - applied + if nb < 0 { + nb = 0 + } + if nb == 0 { + _, _ = s.writeDB.UserCoupons.WithContext(ctx).Where(s.readDB.UserCoupons.ID.Eq(userCouponID)).Updates(map[string]any{ + "balance_amount": nb, + s.readDB.UserCoupons.Status.ColumnName().String(): 2, + s.readDB.UserCoupons.UsedOrderID.ColumnName().String(): orderID, + s.readDB.UserCoupons.UsedAt.ColumnName().String(): now, + }) + } else { + _, _ = s.writeDB.UserCoupons.WithContext(ctx).Where(s.readDB.UserCoupons.ID.Eq(userCouponID)).Updates(map[string]any{ + "balance_amount": nb, + s.readDB.UserCoupons.UsedOrderID.ColumnName().String(): orderID, + s.readDB.UserCoupons.UsedAt.ColumnName().String(): now, + }) + } + } else { // 满减/折扣券 - 直接核销 + _, _ = s.writeDB.UserCoupons.WithContext(ctx).Where(s.readDB.UserCoupons.ID.Eq(userCouponID)).Updates(map[string]any{ + s.readDB.UserCoupons.Status.ColumnName().String(): 2, + s.readDB.UserCoupons.UsedOrderID.ColumnName().String(): orderID, + s.readDB.UserCoupons.UsedAt.ColumnName().String(): now, + }) + } +} diff --git a/internal/service/activity/reward_effects_service.go b/internal/service/activity/reward_effects_service.go new file mode 100644 index 0000000..1c5a8d0 --- /dev/null +++ b/internal/service/activity/reward_effects_service.go @@ -0,0 +1,265 @@ +package activity + +import ( + "bindbox-game/internal/pkg/logger" + "bindbox-game/internal/repository/mysql" + "bindbox-game/internal/repository/mysql/dao" + "bindbox-game/internal/repository/mysql/model" + usersvc "bindbox-game/internal/service/user" + "context" + "crypto/rand" + "encoding/binary" + "fmt" + "time" +) + +// RewardEffectsService 奖励效果服务 +// 统一处理奖励发放和道具卡效果应用 +type RewardEffectsService interface { + // GrantRewardWithEffects 发放奖励并应用道具卡效果 + GrantRewardWithEffects(ctx context.Context, req GrantRewardRequest) (*GrantRewardResult, error) +} + +// GrantRewardRequest 奖励发放请求 +type GrantRewardRequest struct { + UserID int64 // 用户ID + OrderID int64 // 订单ID + ActivityID int64 // 活动ID + IssueID int64 // 期ID + Reward *model.ActivityRewardSettings // 要发放的奖励 + AllRewards []*model.ActivityRewardSettings // 所有可用奖励(用于概率提升升级) +} + +// GrantRewardResult 奖励发放结果 +type GrantRewardResult struct { + RewardID int64 // 发放的奖励ID + RewardName string // 奖励名称 + ItemCardApplied bool // 是否应用了道具卡效果 + UpgradedReward *model.ActivityRewardSettings // 如果概率提升成功,升级后的奖励 + DrawLogID int64 // 创建的抽奖日志ID +} + +type rewardEffectsService struct { + logger logger.CustomLogger + readDB *dao.Query + writeDB *dao.Query + repo mysql.Repo + user usersvc.Service +} + +// NewRewardEffectsService 创建奖励效果服务 +func NewRewardEffectsService(l logger.CustomLogger, db mysql.Repo) RewardEffectsService { + return &rewardEffectsService{ + logger: l, + readDB: dao.Use(db.GetDbR()), + writeDB: dao.Use(db.GetDbW()), + repo: db, + user: usersvc.New(l, db), + } +} + +// GrantRewardWithEffects 发放奖励并应用道具卡效果 +func (s *rewardEffectsService) GrantRewardWithEffects(ctx context.Context, req GrantRewardRequest) (*GrantRewardResult, error) { + if req.Reward == nil { + return nil, fmt.Errorf("reward is nil") + } + + result := &GrantRewardResult{ + RewardID: req.Reward.ID, + RewardName: req.Reward.Name, + } + + // 1. 扣减库存 + res, err := s.writeDB.ActivityRewardSettings.WithContext(ctx).Where( + s.writeDB.ActivityRewardSettings.ID.Eq(req.Reward.ID), + s.writeDB.ActivityRewardSettings.Quantity.Gt(0), + ).UpdateSimple(s.writeDB.ActivityRewardSettings.Quantity.Add(-1)) + if err != nil { + return nil, err + } + if res.RowsAffected == 0 { + return nil, fmt.Errorf("reward out of stock") + } + + // 2. 发放奖励到订单 + rid := req.Reward.ID + _, err = s.user.GrantRewardToOrder(ctx, req.UserID, usersvc.GrantRewardToOrderRequest{ + OrderID: req.OrderID, + ProductID: req.Reward.ProductID, + Quantity: 1, + ActivityID: &req.ActivityID, + RewardID: &rid, + Remark: req.Reward.Name, + }) + if err != nil { + return nil, err + } + + // 3. 创建抽奖日志 + drawLog := &model.ActivityDrawLogs{ + UserID: req.UserID, + IssueID: req.IssueID, + OrderID: req.OrderID, + RewardID: req.Reward.ID, + IsWinner: 1, + Level: req.Reward.Level, + CurrentLevel: 1, + CreatedAt: time.Now(), + } + if err := s.writeDB.ActivityDrawLogs.WithContext(ctx).Create(drawLog); err != nil { + return nil, err + } + result.DrawLogID = drawLog.ID + + // 4. 从订单备注解析道具卡ID并应用效果 + ord, _ := s.readDB.Orders.WithContext(ctx).Where(s.readDB.Orders.ID.Eq(req.OrderID)).First() + if ord != nil { + icID := parseItemCardIDFromRemark(ord.Remark) + if icID > 0 { + applied, upgradedReward := s.applyItemCardEffects(ctx, req, icID, drawLog.ID) + result.ItemCardApplied = applied + result.UpgradedReward = upgradedReward + } + } + + return result, nil +} + +// applyItemCardEffects 应用道具卡效果 +func (s *rewardEffectsService) applyItemCardEffects(ctx context.Context, req GrantRewardRequest, icID int64, drawLogID int64) (bool, *model.ActivityRewardSettings) { + fmt.Printf("[道具卡-RewardEffects] 从订单备注解析道具卡ID icID=%d\n", icID) + + uic, _ := s.readDB.UserItemCards.WithContext(ctx).Where( + s.readDB.UserItemCards.ID.Eq(icID), + s.readDB.UserItemCards.UserID.Eq(req.UserID), + s.readDB.UserItemCards.Status.Eq(1), + ).First() + if uic == nil { + fmt.Printf("[道具卡-RewardEffects] ❌ 未找到用户道具卡 用户ID=%d 道具卡ID=%d\n", req.UserID, icID) + return false, nil + } + + ic, _ := s.readDB.SystemItemCards.WithContext(ctx).Where( + s.readDB.SystemItemCards.ID.Eq(uic.CardID), + s.readDB.SystemItemCards.Status.Eq(1), + ).First() + if ic == nil { + fmt.Printf("[道具卡-RewardEffects] ❌ 未找到系统道具卡 CardID=%d\n", uic.CardID) + return false, nil + } + + now := time.Now() + if uic.ValidStart.After(now) || uic.ValidEnd.Before(now) { + fmt.Printf("[道具卡-RewardEffects] ❌ 道具卡不在有效期\n") + return false, nil + } + + // 范围检查 + scopeOK := (ic.ScopeType == 1) || (ic.ScopeType == 3 && ic.ActivityID == req.ActivityID) || (ic.ScopeType == 4 && ic.IssueID == req.IssueID) + if !scopeOK { + fmt.Printf("[道具卡-RewardEffects] ❌ 范围检查失败 ScopeType=%d\n", ic.ScopeType) + return false, nil + } + + var upgradedReward *model.ActivityRewardSettings + + // 应用效果 + if ic.EffectType == 1 && ic.RewardMultiplierX1000 >= 2000 { + // 双倍奖励 + fmt.Printf("[道具卡-RewardEffects] ✅ 应用双倍奖励 倍数=%d 奖品ID=%d 奖品名=%s\n", ic.RewardMultiplierX1000, req.Reward.ID, req.Reward.Name) + rid := req.Reward.ID + _, _ = s.user.GrantRewardToOrder(ctx, req.UserID, usersvc.GrantRewardToOrderRequest{ + OrderID: req.OrderID, + ProductID: req.Reward.ProductID, + Quantity: 1, + ActivityID: &req.ActivityID, + RewardID: &rid, + Remark: req.Reward.Name + "(倍数)", + }) + } else if ic.EffectType == 2 && ic.BoostRateX1000 > 0 { + // 概率提升 - 尝试升级到更好的奖励 + fmt.Printf("[道具卡-RewardEffects] 应用概率提升 BoostRateX1000=%d\n", ic.BoostRateX1000) + var better *model.ActivityRewardSettings + for _, r := range req.AllRewards { + if r.MinScore > req.Reward.MinScore && r.Quantity > 0 { + if better == nil || r.MinScore < better.MinScore { + better = r + } + } + } + if better != nil { + randBytes := make([]byte, 4) + rand.Read(randBytes) + randVal := int32(binary.BigEndian.Uint32(randBytes) % 1000) + if randVal < ic.BoostRateX1000 { + fmt.Printf("[道具卡-RewardEffects] ✅ 概率提升成功 升级到奖品ID=%d 奖品名=%s\n", better.ID, better.Name) + rid := better.ID + _, _ = s.user.GrantRewardToOrder(ctx, req.UserID, usersvc.GrantRewardToOrderRequest{ + OrderID: req.OrderID, + ProductID: better.ProductID, + Quantity: 1, + ActivityID: &req.ActivityID, + RewardID: &rid, + Remark: better.Name + "(升级)", + }) + upgradedReward = better + } + } + } + + // 核销道具卡 + fmt.Printf("[道具卡-RewardEffects] 核销道具卡 用户道具卡ID=%d\n", icID) + _, _ = s.writeDB.UserItemCards.WithContext(ctx).Where( + s.writeDB.UserItemCards.ID.Eq(icID), + s.writeDB.UserItemCards.UserID.Eq(req.UserID), + s.writeDB.UserItemCards.Status.Eq(1), + ).Updates(map[string]any{ + s.writeDB.UserItemCards.Status.ColumnName().String(): 2, + s.writeDB.UserItemCards.UsedDrawLogID.ColumnName().String(): drawLogID, + s.writeDB.UserItemCards.UsedActivityID.ColumnName().String(): req.ActivityID, + s.writeDB.UserItemCards.UsedIssueID.ColumnName().String(): req.IssueID, + s.writeDB.UserItemCards.UsedAt.ColumnName().String(): now, + }) + + return true, upgradedReward +} + +// parseItemCardIDFromRemark 从订单备注解析道具卡ID +func parseItemCardIDFromRemark(remark string) int64 { + if remark == "" { + return 0 + } + // 查找 |itemcard:xxx 模式 + prefix := "|itemcard:" + idx := -1 + for i := 0; i <= len(remark)-len(prefix); i++ { + if remark[i:i+len(prefix)] == prefix { + idx = i + len(prefix) + break + } + } + if idx < 0 { + // 也检查开头没有 | 的情况 + prefix = "itemcard:" + for i := 0; i <= len(remark)-len(prefix); i++ { + if remark[i:i+len(prefix)] == prefix { + idx = i + len(prefix) + break + } + } + } + if idx < 0 { + return 0 + } + + var n int64 + for idx < len(remark) { + c := remark[idx] + if c < '0' || c > '9' { + break + } + n = n*10 + int64(c-'0') + idx++ + } + return n +} diff --git a/internal/service/user/orders_list.go b/internal/service/user/orders_list.go index e768e7b..14fddc0 100644 --- a/internal/service/user/orders_list.go +++ b/internal/service/user/orders_list.go @@ -34,6 +34,10 @@ type OrderWithItems struct { *model.Orders Items []*model.OrderItems `json:"items"` ActivityName string `json:"activity_name"` + ActivityID int64 `json:"activity_id,omitempty"` + PlayType string `json:"play_type,omitempty"` + CategoryID int64 `json:"category_id,omitempty"` + CategoryName string `json:"category_name,omitempty"` IssueNumber string `json:"issue_number"` IsDraw bool `json:"is_draw"` IsWinner bool `json:"is_winner"` @@ -133,6 +137,15 @@ func (s *service) GetOrderWithItems(ctx context.Context, userID int64, orderID i act, _ := s.readDB.Activities.WithContext(ctx).ReadDB().Where(s.readDB.Activities.ID.Eq(issue.ActivityID)).First() if act != nil { res.ActivityName = act.Name + res.ActivityID = act.ID + res.PlayType = act.PlayType + res.CategoryID = act.ActivityCategoryID + if act.ActivityCategoryID > 0 { + cat, _ := s.readDB.ActivityCategories.WithContext(ctx).ReadDB().Where(s.readDB.ActivityCategories.ID.Eq(act.ActivityCategoryID)).First() + if cat != nil { + res.CategoryName = cat.Name + } + } } } @@ -184,12 +197,15 @@ func (s *service) GetOrderWithItems(ctx context.Context, userID int64, orderID i } // ListOrdersWithItems 查询用户的订单列表,包含订单项详情 -func (s *service) ListOrdersWithItems(ctx context.Context, userID int64, status int32, page, pageSize int) (items []*OrderWithItems, total int64, err error) { +func (s *service) ListOrdersWithItems(ctx context.Context, userID int64, status int32, isConsumed *int32, page, pageSize int) (items []*OrderWithItems, total int64, err error) { // 查询用户的所有订单,包括商城直购(1)、抽奖票据(2)和系统发放(3) q := s.readDB.Orders.WithContext(ctx).ReadDB().Where(s.readDB.Orders.UserID.Eq(userID)) if status > 0 { q = q.Where(s.readDB.Orders.Status.Eq(status)) } + if isConsumed != nil { + q = q.Where(s.readDB.Orders.IsConsumed.Eq(*isConsumed)) + } total, err = q.Count() if err != nil { return nil, 0, err @@ -293,6 +309,42 @@ func (s *service) ListOrdersWithItems(ctx context.Context, userID int64, status } } } + + // 为没有开奖记录的抽奖订单补充查询活动信息 + var extraActIDs []int64 + for _, order := range orders { + if order.SourceType == 2 { + if _, hasLogs := drawLogsListMap[order.ID]; !hasLogs { + actID := parseActivityIDFromRemark(order.Remark) + if actID > 0 { + if _, exists := activityMap[actID]; !exists { + extraActIDs = append(extraActIDs, actID) + } + } + } + } + } + if len(extraActIDs) > 0 { + extraActs, _ := s.readDB.Activities.WithContext(ctx).ReadDB().Where(s.readDB.Activities.ID.In(extraActIDs...)).Find() + for _, act := range extraActs { + activityMap[act.ID] = act + } + } + } + + // 批量查询活动分类信息 + categoryMap := make(map[int64]*model.ActivityCategories) + var categoryIDs []int64 + for _, act := range activityMap { + if act.ActivityCategoryID > 0 { + categoryIDs = append(categoryIDs, act.ActivityCategoryID) + } + } + if len(categoryIDs) > 0 { + categories, _ := s.readDB.ActivityCategories.WithContext(ctx).ReadDB().Where(s.readDB.ActivityCategories.ID.In(categoryIDs...)).Find() + for _, cat := range categories { + categoryMap[cat.ID] = cat + } } // 批量查询抽奖凭据 @@ -322,6 +374,12 @@ func (s *service) ListOrdersWithItems(ctx context.Context, userID int64, status items[i].IssueNumber = issue.IssueNumber if act, ok := activityMap[issue.ActivityID]; ok { items[i].ActivityName = act.Name + items[i].ActivityID = act.ID + items[i].PlayType = act.PlayType + items[i].CategoryID = act.ActivityCategoryID + if cat, ok := categoryMap[act.ActivityCategoryID]; ok { + items[i].CategoryName = cat.Name + } } } @@ -350,8 +408,45 @@ func (s *service) ListOrdersWithItems(ctx context.Context, userID int64, status }) } } + } else if order.SourceType == 2 { + // 抽奖订单但没有开奖记录(如对对碰支付后还没玩),从备注解析活动信息 + actID := parseActivityIDFromRemark(order.Remark) + if actID > 0 { + if act, ok := activityMap[actID]; ok { + items[i].ActivityName = act.Name + items[i].ActivityID = act.ID + items[i].PlayType = act.PlayType + items[i].CategoryID = act.ActivityCategoryID + if cat, ok := categoryMap[act.ActivityCategoryID]; ok { + items[i].CategoryName = cat.Name + } + } + } } } return items, total, nil } + +// parseActivityIDFromRemark 从订单备注解析活动ID +func parseActivityIDFromRemark(remark string) int64 { + if remark == "" { + return 0 + } + parts := strings.Split(remark, "|") + for _, p := range parts { + if strings.HasPrefix(p, "lottery:activity:") { + idStr := p[len("lottery:activity:"):] + var n int64 + for i := 0; i < len(idStr); i++ { + c := idStr[i] + if c < '0' || c > '9' { + break + } + n = n*10 + int64(c-'0') + } + return n + } + } + return 0 +} diff --git a/internal/service/user/user.go b/internal/service/user/user.go index d69b5c0..3129a2c 100644 --- a/internal/service/user/user.go +++ b/internal/service/user/user.go @@ -12,7 +12,7 @@ import ( type Service interface { UpdateProfile(ctx context.Context, userID int64, nickname *string, avatar *string) (*model.Users, error) ListOrders(ctx context.Context, userID int64, page, pageSize int) (items []*model.Orders, total int64, err error) - ListOrdersWithItems(ctx context.Context, userID int64, status int32, page, pageSize int) (items []*OrderWithItems, total int64, err error) + ListOrdersWithItems(ctx context.Context, userID int64, status int32, isConsumed *int32, page, pageSize int) (items []*OrderWithItems, total int64, err error) ListInventoryWithProduct(ctx context.Context, userID int64, page, pageSize int) (items []*InventoryWithProduct, total int64, err error) ListInventoryWithProductActive(ctx context.Context, userID int64, page, pageSize int) (items []*InventoryWithProduct, total int64, err error) ListCoupons(ctx context.Context, userID int64, page, pageSize int) (items []*model.UserCoupons, total int64, err error) diff --git a/logs/mini-chat-access.log b/logs/mini-chat-access.log index 3b84ec2..f0796fd 100644 --- a/logs/mini-chat-access.log +++ b/logs/mini-chat-access.log @@ -22,3 +22,150 @@ {"level":"info","time":"2025-12-21 17:43:58","caller":"logger/logger.go:309","msg":"Connected to Redis","domain":"mini-chat[fat]","addr":"118.25.13.43:8379"} {"level":"info","time":"2025-12-21 17:59:49","caller":"logger/logger.go:309","msg":"Connected to Redis","domain":"mini-chat[fat]","addr":"118.25.13.43:8379"} {"level":"fatal","time":"2025-12-21 17:59:49","caller":"logger/logger.go:333","msg":"http server startup err","domain":"mini-chat[fat]","error":"listen tcp :9991: bind: address already in use"} +{"level":"info","time":"2025-12-22 11:19:03","caller":"logger/logger.go:309","msg":"Connected to Redis","domain":"mini-chat[fat]","addr":"118.25.13.43:8379"} +{"level":"info","time":"2025-12-22 11:22:42","caller":"logger/logger.go:309","msg":"Connected to Redis","domain":"mini-chat[fat]","addr":"118.25.13.43:8379"} +{"level":"info","time":"2025-12-22 11:49:49","caller":"logger/logger.go:309","msg":"Connected to Redis","domain":"mini-chat[fat]","addr":"118.25.13.43:8379"} +{"level":"fatal","time":"2025-12-22 11:49:49","caller":"logger/logger.go:333","msg":"http server startup err","domain":"mini-chat[fat]","error":"listen tcp :9991: bind: address already in use"} +{"level":"info","time":"2025-12-22 11:49:58","caller":"logger/logger.go:309","msg":"Connected to Redis","domain":"mini-chat[fat]","addr":"118.25.13.43:8379"} +{"level":"info","time":"2025-12-22 11:55:54","caller":"logger/logger.go:309","msg":"Connected to Redis","domain":"mini-chat[fat]","addr":"118.25.13.43:8379"} +{"level":"fatal","time":"2025-12-22 11:55:54","caller":"logger/logger.go:333","msg":"http server startup err","domain":"mini-chat[fat]","error":"listen tcp :9991: bind: address already in use"} +{"level":"info","time":"2025-12-22 11:56:04","caller":"logger/logger.go:309","msg":"Connected to Redis","domain":"mini-chat[fat]","addr":"118.25.13.43:8379"} +{"level":"info","time":"2025-12-22 13:13:32","caller":"logger/logger.go:309","msg":"Connected to Redis","domain":"mini-chat[fat]","addr":"118.25.13.43:8379"} +{"level":"info","time":"2025-12-22 13:21:42","caller":"logger/logger.go:309","msg":"Connected to Redis","domain":"mini-chat[fat]","addr":"118.25.13.43:8379"} +{"level":"fatal","time":"2025-12-22 13:21:42","caller":"logger/logger.go:333","msg":"http server startup err","domain":"mini-chat[fat]","error":"listen tcp :9991: bind: address already in use"} +{"level":"info","time":"2025-12-22 13:21:58","caller":"logger/logger.go:309","msg":"Connected to Redis","domain":"mini-chat[fat]","addr":"118.25.13.43:8379"} +{"level":"info","time":"2025-12-22 13:22:19","caller":"logger/logger.go:309","msg":"Connected to Redis","domain":"mini-chat[fat]","addr":"118.25.13.43:8379"} +{"level":"fatal","time":"2025-12-22 13:22:19","caller":"logger/logger.go:333","msg":"http server startup err","domain":"mini-chat[fat]","error":"listen tcp :9991: bind: address already in use"} +{"level":"info","time":"2025-12-22 13:23:25","caller":"logger/logger.go:309","msg":"Connected to Redis","domain":"mini-chat[fat]","addr":"118.25.13.43:8379"} +{"level":"info","time":"2025-12-22 13:24:20","caller":"logger/logger.go:309","msg":"Connected to Redis","domain":"mini-chat[fat]","addr":"118.25.13.43:8379"} +{"level":"info","time":"2025-12-22 13:45:01","caller":"logger/logger.go:309","msg":"Connected to Redis","domain":"mini-chat[fat]","addr":"118.25.13.43:8379"} +{"level":"info","time":"2025-12-22 13:46:09","caller":"logger/logger.go:309","msg":"Connected to Redis","domain":"mini-chat[fat]","addr":"118.25.13.43:8379"} +{"level":"info","time":"2025-12-22 13:46:09","caller":"logger/logger.go:309","msg":"Connected to Redis","domain":"mini-chat[fat]","addr":"118.25.13.43:8379"} +{"level":"fatal","time":"2025-12-22 13:46:09","caller":"logger/logger.go:333","msg":"http server startup err","domain":"mini-chat[fat]","error":"listen tcp :9991: bind: address already in use"} +{"level":"info","time":"2025-12-22 13:46:20","caller":"logger/logger.go:309","msg":"Connected to Redis","domain":"mini-chat[fat]","addr":"118.25.13.43:8379"} +{"level":"info","time":"2025-12-22 13:48:29","caller":"logger/logger.go:309","msg":"Connected to Redis","domain":"mini-chat[fat]","addr":"118.25.13.43:8379"} +{"level":"info","time":"2025-12-22 13:53:26","caller":"logger/logger.go:309","msg":"Connected to Redis","domain":"mini-chat[fat]","addr":"118.25.13.43:8379"} +{"level":"info","time":"2025-12-22 13:54:55","caller":"logger/logger.go:309","msg":"Connected to Redis","domain":"mini-chat[fat]","addr":"118.25.13.43:8379"} +{"level":"info","time":"2025-12-22 13:59:02","caller":"logger/logger.go:309","msg":"Connected to Redis","domain":"mini-chat[fat]","addr":"118.25.13.43:8379"} +{"level":"info","time":"2025-12-22 13:59:46","caller":"logger/logger.go:309","msg":"Connected to Redis","domain":"mini-chat[fat]","addr":"118.25.13.43:8379"} +{"level":"fatal","time":"2025-12-22 13:59:46","caller":"logger/logger.go:333","msg":"http server startup err","domain":"mini-chat[fat]","error":"listen tcp :9991: bind: address already in use"} +{"level":"info","time":"2025-12-22 14:00:03","caller":"logger/logger.go:309","msg":"Connected to Redis","domain":"mini-chat[fat]","addr":"118.25.13.43:8379"} +{"level":"info","time":"2025-12-22 14:00:43","caller":"logger/logger.go:309","msg":"trace-log","domain":"mini-chat[fat]","method":"POST","path":"/api/admin/login","http_code":400,"business_code":10102,"success":false,"cost_seconds":0.000224834,"trace_id":"2002982615354707968","trace_info":{"trace_id":"2002982615354707968","request":{"ttl":"un-limit","method":"POST","decoded_url":"/api/admin/login","header":{"Content-Type":"application/x-www-form-urlencoded"},"body":"{}"},"response":{"header":{"Content-Type":["application/json; charset=utf-8"],"Trace-Id":["2002982615354707968"],"Vary":["Origin"]},"body":null,"business_code":10102,"business_code_msg":"Username为必填字段;Password为必填字段;","http_code":400,"http_code_msg":"Bad Request","cost_seconds":0.000224709},"third_party_requests":null,"debugs":null,"sqls":null,"redis":null,"mongos":null,"success":false,"cost_seconds":0.000224834}} +{"level":"info","time":"2025-12-22 14:02:12","caller":"logger/logger.go:309","msg":"Connected to Redis","domain":"mini-chat[fat]","addr":"118.25.13.43:8379"} +{"level":"info","time":"2025-12-22 14:02:22","caller":"logger/logger.go:309","msg":"trace-log","domain":"mini-chat[fat]","method":"GET","path":"/api/admin/pay/orders?current=1&size=10&isTrusted=true&_vts=1766383159315&exclude_source_type=3","http_code":200,"business_code":0,"success":true,"cost_seconds":0.079041458,"trace_id":"2002983029194100736","trace_info":{"trace_id":"2002983029194100736","request":{"ttl":"un-limit","method":"GET","decoded_url":"/api/admin/pay/orders?current=1&size=10&isTrusted=true&_vts=1766383159315&exclude_source_type=3","header":{"Content-Type":""},"body":""},"response":{"header":{"Content-Type":["application/json; charset=utf-8"],"Trace-Id":["2002983029194100736"],"Vary":["Origin"]},"body":{"page":1,"page_size":10,"total":0,"list":[]},"http_code":200,"http_code_msg":"OK","cost_seconds":0.079041125},"third_party_requests":null,"debugs":null,"sqls":[{"time":"2025-12-22 14:02:22","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/router/interceptor/admin_auth.go:43","sql":"SELECT * FROM `admin` WHERE `admin`.`id` = 2 ORDER BY `admin`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.02051925},{"time":"2025-12-22 14:02:22","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/api/admin/pay_orders_admin.go:109","sql":"SELECT count(*) FROM `orders` WHERE `orders`.`source_type` <> 3","rows_affected":1,"cost_seconds":0.019616708},{"time":"2025-12-22 14:02:22","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/api/admin/pay_orders_admin.go:114","sql":"SELECT * FROM `orders` WHERE `orders`.`source_type` <> 3 ORDER BY `orders`.`id` DESC LIMIT 10","rows_affected":0,"cost_seconds":0.019032416},{"time":"2025-12-22 14:02:22","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/api/admin/pay_orders_admin.go:120","sql":"SELECT * FROM `system_configs` WHERE `system_configs`.`config_key` = 'points_exchange_per_cent' AND `system_configs`.`deleted_at` IS NULL ORDER BY `system_configs`.`id` LIMIT 1","rows_affected":0,"cost_seconds":0.018930208}],"redis":null,"mongos":null,"success":true,"cost_seconds":0.079041458}} +{"level":"info","time":"2025-12-22 14:02:28","caller":"logger/logger.go:309","msg":"trace-log","domain":"mini-chat[fat]","method":"GET","path":"/api/admin/pay/orders?current=1&size=10&isTrusted=true&_vts=1766383159315&exclude_source_type=3","http_code":200,"business_code":0,"success":true,"cost_seconds":0.076069459,"trace_id":"2002983052942249984","trace_info":{"trace_id":"2002983052942249984","request":{"ttl":"un-limit","method":"GET","decoded_url":"/api/admin/pay/orders?current=1&size=10&isTrusted=true&_vts=1766383159315&exclude_source_type=3","header":{"Content-Type":""},"body":""},"response":{"header":{"Content-Type":["application/json; charset=utf-8"],"Trace-Id":["2002983052942249984"],"Vary":["Origin"]},"body":{"page":1,"page_size":10,"total":0,"list":[]},"http_code":200,"http_code_msg":"OK","cost_seconds":0.076069167},"third_party_requests":null,"debugs":null,"sqls":[{"time":"2025-12-22 14:02:28","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/router/interceptor/admin_auth.go:43","sql":"SELECT * FROM `admin` WHERE `admin`.`id` = 2 ORDER BY `admin`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.017404},{"time":"2025-12-22 14:02:28","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/api/admin/pay_orders_admin.go:109","sql":"SELECT count(*) FROM `orders` WHERE `orders`.`source_type` <> 3","rows_affected":1,"cost_seconds":0.019576},{"time":"2025-12-22 14:02:28","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/api/admin/pay_orders_admin.go:114","sql":"SELECT * FROM `orders` WHERE `orders`.`source_type` <> 3 ORDER BY `orders`.`id` DESC LIMIT 10","rows_affected":0,"cost_seconds":0.018772375},{"time":"2025-12-22 14:02:28","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/api/admin/pay_orders_admin.go:120","sql":"SELECT * FROM `system_configs` WHERE `system_configs`.`config_key` = 'points_exchange_per_cent' AND `system_configs`.`deleted_at` IS NULL ORDER BY `system_configs`.`id` LIMIT 1","rows_affected":0,"cost_seconds":0.019544083}],"redis":null,"mongos":null,"success":true,"cost_seconds":0.076069459}} +{"level":"info","time":"2025-12-22 14:02:29","caller":"logger/logger.go:309","msg":"trace-log","domain":"mini-chat[fat]","method":"GET","path":"/api/admin/pay/orders?current=1&size=10&isTrusted=true&_vts=1766383159315&exclude_source_type=3","http_code":200,"business_code":0,"success":true,"cost_seconds":0.084775042,"trace_id":"2002983057375629312","trace_info":{"trace_id":"2002983057375629312","request":{"ttl":"un-limit","method":"GET","decoded_url":"/api/admin/pay/orders?current=1&size=10&isTrusted=true&_vts=1766383159315&exclude_source_type=3","header":{"Content-Type":""},"body":""},"response":{"header":{"Content-Type":["application/json; charset=utf-8"],"Trace-Id":["2002983057375629312"],"Vary":["Origin"]},"body":{"page":1,"page_size":10,"total":0,"list":[]},"http_code":200,"http_code_msg":"OK","cost_seconds":0.084774667},"third_party_requests":null,"debugs":null,"sqls":[{"time":"2025-12-22 14:02:29","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/router/interceptor/admin_auth.go:43","sql":"SELECT * FROM `admin` WHERE `admin`.`id` = 2 ORDER BY `admin`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.025802},{"time":"2025-12-22 14:02:29","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/api/admin/pay_orders_admin.go:109","sql":"SELECT count(*) FROM `orders` WHERE `orders`.`source_type` <> 3","rows_affected":1,"cost_seconds":0.020025875},{"time":"2025-12-22 14:02:29","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/api/admin/pay_orders_admin.go:114","sql":"SELECT * FROM `orders` WHERE `orders`.`source_type` <> 3 ORDER BY `orders`.`id` DESC LIMIT 10","rows_affected":0,"cost_seconds":0.019376125},{"time":"2025-12-22 14:02:29","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/api/admin/pay_orders_admin.go:120","sql":"SELECT * FROM `system_configs` WHERE `system_configs`.`config_key` = 'points_exchange_per_cent' AND `system_configs`.`deleted_at` IS NULL ORDER BY `system_configs`.`id` LIMIT 1","rows_affected":0,"cost_seconds":0.018829125}],"redis":null,"mongos":null,"success":true,"cost_seconds":0.084775042}} +{"level":"info","time":"2025-12-22 14:03:23","caller":"logger/logger.go:309","msg":"trace-log","domain":"mini-chat[fat]","method":"GET","path":"/api/admin/pay/orders?current=1&size=10&isTrusted=true&_vts=1766383159315","http_code":200,"business_code":0,"success":true,"cost_seconds":0.076168459,"trace_id":"2002983286195884032","trace_info":{"trace_id":"2002983286195884032","request":{"ttl":"un-limit","method":"GET","decoded_url":"/api/admin/pay/orders?current=1&size=10&isTrusted=true&_vts=1766383159315","header":{"Content-Type":""},"body":""},"response":{"header":{"Content-Type":["application/json; charset=utf-8"],"Trace-Id":["2002983286195884032"],"Vary":["Origin"]},"body":{"page":1,"page_size":10,"total":0,"list":[]},"http_code":200,"http_code_msg":"OK","cost_seconds":0.076168209},"third_party_requests":null,"debugs":null,"sqls":[{"time":"2025-12-22 14:03:23","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/router/interceptor/admin_auth.go:43","sql":"SELECT * FROM `admin` WHERE `admin`.`id` = 2 ORDER BY `admin`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.017496916},{"time":"2025-12-22 14:03:23","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/api/admin/pay_orders_admin.go:109","sql":"SELECT count(*) FROM `orders` WHERE `orders`.`source_type` <> 3","rows_affected":1,"cost_seconds":0.018672542},{"time":"2025-12-22 14:03:23","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/api/admin/pay_orders_admin.go:114","sql":"SELECT * FROM `orders` WHERE `orders`.`source_type` <> 3 ORDER BY `orders`.`id` DESC LIMIT 10","rows_affected":0,"cost_seconds":0.018189292},{"time":"2025-12-22 14:03:23","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/api/admin/pay_orders_admin.go:120","sql":"SELECT * FROM `system_configs` WHERE `system_configs`.`config_key` = 'points_exchange_per_cent' AND `system_configs`.`deleted_at` IS NULL ORDER BY `system_configs`.`id` LIMIT 1","rows_affected":0,"cost_seconds":0.021414333}],"redis":null,"mongos":null,"success":true,"cost_seconds":0.076168459}} +{"level":"info","time":"2025-12-22 14:03:32","caller":"logger/logger.go:309","msg":"trace-log","domain":"mini-chat[fat]","method":"GET","path":"/api/admin/pay/orders?current=1&size=10&isTrusted=true&_vts=1766383159315&source_type=3","http_code":200,"business_code":0,"success":true,"cost_seconds":0.173697959,"trace_id":"2002983322011045888","trace_info":{"trace_id":"2002983322011045888","request":{"ttl":"un-limit","method":"GET","decoded_url":"/api/admin/pay/orders?current=1&size=10&isTrusted=true&_vts=1766383159315&source_type=3","header":{"Content-Type":""},"body":""},"response":{"header":{"Content-Type":["application/json; charset=utf-8"],"Trace-Id":["2002983322011045888"],"Vary":["Origin"]},"body":{"page":1,"page_size":10,"total":5,"list":[{"actual_amount":990,"created_at":"2025-12-22T13:57:40.712+08:00","id":285,"is_consumed":0,"order_no":"O20251222135740","paid_at":"2025-12-22 13:57:47","points_amount":0,"points_used":0,"remark":"matching_game:issue:71","source_type":3,"status":2,"total_amount":990,"user_id":12},{"actual_amount":990,"created_at":"2025-12-22T13:43:07.064+08:00","id":284,"is_consumed":0,"order_no":"O20251222134307","paid_at":"2025-12-22 13:43:15","points_amount":0,"points_used":0,"remark":"matching_game:issue:71","source_type":3,"status":2,"total_amount":990,"user_id":12},{"actual_amount":990,"created_at":"2025-12-22T13:32:34.182+08:00","id":283,"is_consumed":0,"order_no":"O20251222133234","paid_at":"2025-12-22 13:32:40","points_amount":0,"points_used":0,"remark":"matching_game:issue:71","source_type":3,"status":2,"total_amount":990,"user_id":12},{"actual_amount":990,"created_at":"2025-12-22T13:30:35.46+08:00","id":282,"is_consumed":0,"order_no":"O20251222133035","paid_at":"2025-12-22 13:30:42","points_amount":0,"points_used":0,"remark":"matching_game:issue:71","source_type":3,"status":2,"total_amount":990,"user_id":12},{"actual_amount":990,"created_at":"2025-12-22T13:27:07.25+08:00","id":281,"is_consumed":0,"order_no":"O20251222132707","paid_at":"2025-12-22 13:27:13","points_amount":0,"points_used":0,"remark":"matching_game:issue:71","source_type":3,"status":2,"total_amount":990,"user_id":12}]},"http_code":200,"http_code_msg":"OK","cost_seconds":0.173697709},"third_party_requests":null,"debugs":null,"sqls":[{"time":"2025-12-22 14:03:32","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/router/interceptor/admin_auth.go:43","sql":"SELECT * FROM `admin` WHERE `admin`.`id` = 2 ORDER BY `admin`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.017526708},{"time":"2025-12-22 14:03:32","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/api/admin/pay_orders_admin.go:109","sql":"SELECT count(*) FROM `orders` WHERE `orders`.`source_type` = 3","rows_affected":1,"cost_seconds":0.019782791},{"time":"2025-12-22 14:03:32","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/api/admin/pay_orders_admin.go:114","sql":"SELECT * FROM `orders` WHERE `orders`.`source_type` = 3 ORDER BY `orders`.`id` DESC LIMIT 10","rows_affected":5,"cost_seconds":0.017947625},{"time":"2025-12-22 14:03:32","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/api/admin/pay_orders_admin.go:120","sql":"SELECT * FROM `system_configs` WHERE `system_configs`.`config_key` = 'points_exchange_per_cent' AND `system_configs`.`deleted_at` IS NULL ORDER BY `system_configs`.`id` LIMIT 1","rows_affected":0,"cost_seconds":0.021096041},{"time":"2025-12-22 14:03:32","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/api/admin/pay_orders_admin.go:130","sql":"SELECT * FROM `user_points_ledger` WHERE `user_points_ledger`.`ref_table` = 'orders' AND `user_points_ledger`.`ref_id` = 'O20251222135740'","rows_affected":0,"cost_seconds":0.0192635},{"time":"2025-12-22 14:03:32","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/api/admin/pay_orders_admin.go:130","sql":"SELECT * FROM `user_points_ledger` WHERE `user_points_ledger`.`ref_table` = 'orders' AND `user_points_ledger`.`ref_id` = 'O20251222134307'","rows_affected":0,"cost_seconds":0.019022584},{"time":"2025-12-22 14:03:32","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/api/admin/pay_orders_admin.go:130","sql":"SELECT * FROM `user_points_ledger` WHERE `user_points_ledger`.`ref_table` = 'orders' AND `user_points_ledger`.`ref_id` = 'O20251222133234'","rows_affected":0,"cost_seconds":0.0211405},{"time":"2025-12-22 14:03:32","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/api/admin/pay_orders_admin.go:130","sql":"SELECT * FROM `user_points_ledger` WHERE `user_points_ledger`.`ref_table` = 'orders' AND `user_points_ledger`.`ref_id` = 'O20251222133035'","rows_affected":0,"cost_seconds":0.018897166},{"time":"2025-12-22 14:03:32","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/api/admin/pay_orders_admin.go:130","sql":"SELECT * FROM `user_points_ledger` WHERE `user_points_ledger`.`ref_table` = 'orders' AND `user_points_ledger`.`ref_id` = 'O20251222132707'","rows_affected":0,"cost_seconds":0.018564875}],"redis":null,"mongos":null,"success":true,"cost_seconds":0.173697959}} +{"level":"info","time":"2025-12-22 14:06:24","caller":"logger/logger.go:309","msg":"trace-log","domain":"mini-chat[fat]","method":"GET","path":"/api/admin/pay/orders?current=1&size=10&isTrusted=true&_vts=1766383159315&exclude_source_type=3","http_code":200,"business_code":0,"success":true,"cost_seconds":0.0913635,"trace_id":"2002984044739956736","trace_info":{"trace_id":"2002984044739956736","request":{"ttl":"un-limit","method":"GET","decoded_url":"/api/admin/pay/orders?current=1&size=10&isTrusted=true&_vts=1766383159315&exclude_source_type=3","header":{"Content-Type":""},"body":""},"response":{"header":{"Content-Type":["application/json; charset=utf-8"],"Trace-Id":["2002984044739956736"],"Vary":["Origin"]},"body":{"page":1,"page_size":10,"total":0,"list":[]},"http_code":200,"http_code_msg":"OK","cost_seconds":0.091362459},"third_party_requests":null,"debugs":null,"sqls":[{"time":"2025-12-22 14:06:24","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/router/interceptor/admin_auth.go:43","sql":"SELECT * FROM `admin` WHERE `admin`.`id` = 2 ORDER BY `admin`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.025550042},{"time":"2025-12-22 14:06:24","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/api/admin/pay_orders_admin.go:109","sql":"SELECT count(*) FROM `orders` WHERE `orders`.`source_type` <> 3","rows_affected":1,"cost_seconds":0.022436417},{"time":"2025-12-22 14:06:24","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/api/admin/pay_orders_admin.go:114","sql":"SELECT * FROM `orders` WHERE `orders`.`source_type` <> 3 ORDER BY `orders`.`id` DESC LIMIT 10","rows_affected":0,"cost_seconds":0.022138417},{"time":"2025-12-22 14:06:24","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/api/admin/pay_orders_admin.go:120","sql":"SELECT * FROM `system_configs` WHERE `system_configs`.`config_key` = 'points_exchange_per_cent' AND `system_configs`.`deleted_at` IS NULL ORDER BY `system_configs`.`id` LIMIT 1","rows_affected":0,"cost_seconds":0.020643166}],"redis":null,"mongos":null,"success":true,"cost_seconds":0.0913635}} +{"level":"info","time":"2025-12-22 14:06:25","caller":"logger/logger.go:309","msg":"trace-log","domain":"mini-chat[fat]","method":"GET","path":"/api/admin/pay/orders?current=1&size=10&isTrusted=true&_vts=1766383159315&exclude_source_type=3","http_code":200,"business_code":0,"success":true,"cost_seconds":0.088077875,"trace_id":"2002984047831158784","trace_info":{"trace_id":"2002984047831158784","request":{"ttl":"un-limit","method":"GET","decoded_url":"/api/admin/pay/orders?current=1&size=10&isTrusted=true&_vts=1766383159315&exclude_source_type=3","header":{"Content-Type":""},"body":""},"response":{"header":{"Content-Type":["application/json; charset=utf-8"],"Trace-Id":["2002984047831158784"],"Vary":["Origin"]},"body":{"page":1,"page_size":10,"total":0,"list":[]},"http_code":200,"http_code_msg":"OK","cost_seconds":0.088077333},"third_party_requests":null,"debugs":null,"sqls":[{"time":"2025-12-22 14:06:25","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/router/interceptor/admin_auth.go:43","sql":"SELECT * FROM `admin` WHERE `admin`.`id` = 2 ORDER BY `admin`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.021787625},{"time":"2025-12-22 14:06:25","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/api/admin/pay_orders_admin.go:109","sql":"SELECT count(*) FROM `orders` WHERE `orders`.`source_type` <> 3","rows_affected":1,"cost_seconds":0.02420075},{"time":"2025-12-22 14:06:25","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/api/admin/pay_orders_admin.go:114","sql":"SELECT * FROM `orders` WHERE `orders`.`source_type` <> 3 ORDER BY `orders`.`id` DESC LIMIT 10","rows_affected":0,"cost_seconds":0.021157333},{"time":"2025-12-22 14:06:25","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/api/admin/pay_orders_admin.go:120","sql":"SELECT * FROM `system_configs` WHERE `system_configs`.`config_key` = 'points_exchange_per_cent' AND `system_configs`.`deleted_at` IS NULL ORDER BY `system_configs`.`id` LIMIT 1","rows_affected":0,"cost_seconds":0.020096834}],"redis":null,"mongos":null,"success":true,"cost_seconds":0.088077875}} +{"level":"info","time":"2025-12-22 14:06:40","caller":"logger/logger.go:309","msg":"trace-log","domain":"mini-chat[fat]","method":"GET","path":"/api/admin/pay/orders?current=1&size=10&isTrusted=true&_vts=1766383159315&exclude_source_type=3","http_code":200,"business_code":0,"success":true,"cost_seconds":0.089619875,"trace_id":"2002984113237135360","trace_info":{"trace_id":"2002984113237135360","request":{"ttl":"un-limit","method":"GET","decoded_url":"/api/admin/pay/orders?current=1&size=10&isTrusted=true&_vts=1766383159315&exclude_source_type=3","header":{"Content-Type":""},"body":""},"response":{"header":{"Content-Type":["application/json; charset=utf-8"],"Trace-Id":["2002984113237135360"],"Vary":["Origin"]},"body":{"page":1,"page_size":10,"total":0,"list":[]},"http_code":200,"http_code_msg":"OK","cost_seconds":0.08961925},"third_party_requests":null,"debugs":null,"sqls":[{"time":"2025-12-22 14:06:40","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/router/interceptor/admin_auth.go:43","sql":"SELECT * FROM `admin` WHERE `admin`.`id` = 2 ORDER BY `admin`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.022034208},{"time":"2025-12-22 14:06:40","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/api/admin/pay_orders_admin.go:109","sql":"SELECT count(*) FROM `orders` WHERE `orders`.`source_type` <> 3","rows_affected":1,"cost_seconds":0.021711416},{"time":"2025-12-22 14:06:40","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/api/admin/pay_orders_admin.go:114","sql":"SELECT * FROM `orders` WHERE `orders`.`source_type` <> 3 ORDER BY `orders`.`id` DESC LIMIT 10","rows_affected":0,"cost_seconds":0.022846375},{"time":"2025-12-22 14:06:40","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/api/admin/pay_orders_admin.go:120","sql":"SELECT * FROM `system_configs` WHERE `system_configs`.`config_key` = 'points_exchange_per_cent' AND `system_configs`.`deleted_at` IS NULL ORDER BY `system_configs`.`id` LIMIT 1","rows_affected":0,"cost_seconds":0.022177417}],"redis":null,"mongos":null,"success":true,"cost_seconds":0.089619875}} +{"level":"info","time":"2025-12-22 14:06:45","caller":"logger/logger.go:309","msg":"Connected to Redis","domain":"mini-chat[fat]","addr":"118.25.13.43:8379"} +{"level":"info","time":"2025-12-22 14:06:48","caller":"logger/logger.go:309","msg":"trace-log","domain":"mini-chat[fat]","method":"GET","path":"/api/admin/pay/orders?current=1&size=10&isTrusted=true&_vts=1766383159315&exclude_source_type=3","http_code":200,"business_code":0,"success":true,"cost_seconds":0.086496541,"trace_id":"2002984145088679936","trace_info":{"trace_id":"2002984145088679936","request":{"ttl":"un-limit","method":"GET","decoded_url":"/api/admin/pay/orders?current=1&size=10&isTrusted=true&_vts=1766383159315&exclude_source_type=3","header":{"Content-Type":""},"body":""},"response":{"header":{"Content-Type":["application/json; charset=utf-8"],"Trace-Id":["2002984145088679936"],"Vary":["Origin"]},"body":{"page":1,"page_size":10,"total":0,"list":[]},"http_code":200,"http_code_msg":"OK","cost_seconds":0.086496},"third_party_requests":null,"debugs":null,"sqls":[{"time":"2025-12-22 14:06:48","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/router/interceptor/admin_auth.go:43","sql":"SELECT * FROM `admin` WHERE `admin`.`id` = 2 ORDER BY `admin`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.022660833},{"time":"2025-12-22 14:06:48","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/api/admin/pay_orders_admin.go:109","sql":"SELECT count(*) FROM `orders` WHERE `orders`.`source_type` <> 3","rows_affected":1,"cost_seconds":0.021163458},{"time":"2025-12-22 14:06:48","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/api/admin/pay_orders_admin.go:114","sql":"SELECT * FROM `orders` WHERE `orders`.`source_type` <> 3 ORDER BY `orders`.`id` DESC LIMIT 10","rows_affected":0,"cost_seconds":0.019778042},{"time":"2025-12-22 14:06:48","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/api/admin/pay_orders_admin.go:120","sql":"SELECT * FROM `system_configs` WHERE `system_configs`.`config_key` = 'points_exchange_per_cent' AND `system_configs`.`deleted_at` IS NULL ORDER BY `system_configs`.`id` LIMIT 1","rows_affected":0,"cost_seconds":0.021671709}],"redis":null,"mongos":null,"success":true,"cost_seconds":0.086496541}} +{"level":"info","time":"2025-12-22 14:08:19","caller":"logger/logger.go:309","msg":"trace-log","domain":"mini-chat[fat]","method":"GET","path":"/api/admin/pay/orders?current=1&size=10&exclude_source_type=3","http_code":200,"business_code":0,"success":true,"cost_seconds":0.080715875,"trace_id":"2002984524593500160","trace_info":{"trace_id":"2002984524593500160","request":{"ttl":"un-limit","method":"GET","decoded_url":"/api/admin/pay/orders?current=1&size=10&exclude_source_type=3","header":{"Content-Type":""},"body":""},"response":{"header":{"Content-Type":["application/json; charset=utf-8"],"Trace-Id":["2002984524593500160"],"Vary":["Origin"]},"body":{"page":1,"page_size":10,"total":0,"list":[]},"http_code":200,"http_code_msg":"OK","cost_seconds":0.080715458},"third_party_requests":null,"debugs":null,"sqls":[{"time":"2025-12-22 14:08:18","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/router/interceptor/admin_auth.go:43","sql":"SELECT * FROM `admin` WHERE `admin`.`id` = 2 ORDER BY `admin`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.0212265},{"time":"2025-12-22 14:08:19","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/api/admin/pay_orders_admin.go:109","sql":"SELECT count(*) FROM `orders` WHERE `orders`.`source_type` <> 3","rows_affected":1,"cost_seconds":0.02007125},{"time":"2025-12-22 14:08:19","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/api/admin/pay_orders_admin.go:114","sql":"SELECT * FROM `orders` WHERE `orders`.`source_type` <> 3 ORDER BY `orders`.`id` DESC LIMIT 10","rows_affected":0,"cost_seconds":0.019582917},{"time":"2025-12-22 14:08:19","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/api/admin/pay_orders_admin.go:120","sql":"SELECT * FROM `system_configs` WHERE `system_configs`.`config_key` = 'points_exchange_per_cent' AND `system_configs`.`deleted_at` IS NULL ORDER BY `system_configs`.`id` LIMIT 1","rows_affected":0,"cost_seconds":0.019087666}],"redis":null,"mongos":null,"success":true,"cost_seconds":0.080715875}} +{"level":"info","time":"2025-12-22 14:08:22","caller":"logger/logger.go:309","msg":"trace-log","domain":"mini-chat[fat]","method":"GET","path":"/api/admin/pay/orders?current=1&size=10&isTrusted=true&_vts=1766383702062&exclude_source_type=3&status=1","http_code":200,"business_code":0,"success":true,"cost_seconds":0.078138333,"trace_id":"2002984537574871040","trace_info":{"trace_id":"2002984537574871040","request":{"ttl":"un-limit","method":"GET","decoded_url":"/api/admin/pay/orders?current=1&size=10&isTrusted=true&_vts=1766383702062&exclude_source_type=3&status=1","header":{"Content-Type":""},"body":""},"response":{"header":{"Content-Type":["application/json; charset=utf-8"],"Trace-Id":["2002984537574871040"],"Vary":["Origin"]},"body":{"page":1,"page_size":10,"total":0,"list":[]},"http_code":200,"http_code_msg":"OK","cost_seconds":0.078138042},"third_party_requests":null,"debugs":null,"sqls":[{"time":"2025-12-22 14:08:22","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/router/interceptor/admin_auth.go:43","sql":"SELECT * FROM `admin` WHERE `admin`.`id` = 2 ORDER BY `admin`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.018222209},{"time":"2025-12-22 14:08:22","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/api/admin/pay_orders_admin.go:109","sql":"SELECT count(*) FROM `orders` WHERE `orders`.`status` = 1 AND `orders`.`source_type` <> 3","rows_affected":1,"cost_seconds":0.019503333},{"time":"2025-12-22 14:08:22","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/api/admin/pay_orders_admin.go:114","sql":"SELECT * FROM `orders` WHERE `orders`.`status` = 1 AND `orders`.`source_type` <> 3 ORDER BY `orders`.`id` DESC LIMIT 10","rows_affected":0,"cost_seconds":0.019871125},{"time":"2025-12-22 14:08:22","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/api/admin/pay_orders_admin.go:120","sql":"SELECT * FROM `system_configs` WHERE `system_configs`.`config_key` = 'points_exchange_per_cent' AND `system_configs`.`deleted_at` IS NULL ORDER BY `system_configs`.`id` LIMIT 1","rows_affected":0,"cost_seconds":0.020162375}],"redis":null,"mongos":null,"success":true,"cost_seconds":0.078138333}} +{"level":"info","time":"2025-12-22 14:08:25","caller":"logger/logger.go:309","msg":"trace-log","domain":"mini-chat[fat]","method":"GET","path":"/api/admin/pay/orders?current=1&size=10&isTrusted=true&_vts=1766383705783&exclude_source_type=3&status=3","http_code":200,"business_code":0,"success":true,"cost_seconds":0.078517542,"trace_id":"2002984553177681920","trace_info":{"trace_id":"2002984553177681920","request":{"ttl":"un-limit","method":"GET","decoded_url":"/api/admin/pay/orders?current=1&size=10&isTrusted=true&_vts=1766383705783&exclude_source_type=3&status=3","header":{"Content-Type":""},"body":""},"response":{"header":{"Content-Type":["application/json; charset=utf-8"],"Trace-Id":["2002984553177681920"],"Vary":["Origin"]},"body":{"page":1,"page_size":10,"total":0,"list":[]},"http_code":200,"http_code_msg":"OK","cost_seconds":0.078517417},"third_party_requests":null,"debugs":null,"sqls":[{"time":"2025-12-22 14:08:25","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/router/interceptor/admin_auth.go:43","sql":"SELECT * FROM `admin` WHERE `admin`.`id` = 2 ORDER BY `admin`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.018442042},{"time":"2025-12-22 14:08:25","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/api/admin/pay_orders_admin.go:109","sql":"SELECT count(*) FROM `orders` WHERE `orders`.`status` = 3 AND `orders`.`source_type` <> 3","rows_affected":1,"cost_seconds":0.02043475},{"time":"2025-12-22 14:08:25","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/api/admin/pay_orders_admin.go:114","sql":"SELECT * FROM `orders` WHERE `orders`.`status` = 3 AND `orders`.`source_type` <> 3 ORDER BY `orders`.`id` DESC LIMIT 10","rows_affected":0,"cost_seconds":0.020264167},{"time":"2025-12-22 14:08:25","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/api/admin/pay_orders_admin.go:120","sql":"SELECT * FROM `system_configs` WHERE `system_configs`.`config_key` = 'points_exchange_per_cent' AND `system_configs`.`deleted_at` IS NULL ORDER BY `system_configs`.`id` LIMIT 1","rows_affected":0,"cost_seconds":0.018985083}],"redis":null,"mongos":null,"success":true,"cost_seconds":0.078517542}} +{"level":"info","time":"2025-12-22 14:08:28","caller":"logger/logger.go:309","msg":"trace-log","domain":"mini-chat[fat]","method":"GET","path":"/api/admin/pay/orders?current=1&size=10&isTrusted=true&_vts=1766383708910&exclude_source_type=3&status=4","http_code":200,"business_code":0,"success":true,"cost_seconds":0.082478625,"trace_id":"2002984566297464832","trace_info":{"trace_id":"2002984566297464832","request":{"ttl":"un-limit","method":"GET","decoded_url":"/api/admin/pay/orders?current=1&size=10&isTrusted=true&_vts=1766383708910&exclude_source_type=3&status=4","header":{"Content-Type":""},"body":""},"response":{"header":{"Content-Type":["application/json; charset=utf-8"],"Trace-Id":["2002984566297464832"],"Vary":["Origin"]},"body":{"page":1,"page_size":10,"total":0,"list":[]},"http_code":200,"http_code_msg":"OK","cost_seconds":0.082478167},"third_party_requests":null,"debugs":null,"sqls":[{"time":"2025-12-22 14:08:28","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/router/interceptor/admin_auth.go:43","sql":"SELECT * FROM `admin` WHERE `admin`.`id` = 2 ORDER BY `admin`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.0210005},{"time":"2025-12-22 14:08:28","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/api/admin/pay_orders_admin.go:109","sql":"SELECT count(*) FROM `orders` WHERE `orders`.`status` = 4 AND `orders`.`source_type` <> 3","rows_affected":1,"cost_seconds":0.020177417},{"time":"2025-12-22 14:08:28","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/api/admin/pay_orders_admin.go:114","sql":"SELECT * FROM `orders` WHERE `orders`.`status` = 4 AND `orders`.`source_type` <> 3 ORDER BY `orders`.`id` DESC LIMIT 10","rows_affected":0,"cost_seconds":0.019969417},{"time":"2025-12-22 14:08:28","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/api/admin/pay_orders_admin.go:120","sql":"SELECT * FROM `system_configs` WHERE `system_configs`.`config_key` = 'points_exchange_per_cent' AND `system_configs`.`deleted_at` IS NULL ORDER BY `system_configs`.`id` LIMIT 1","rows_affected":0,"cost_seconds":0.020725167}],"redis":null,"mongos":null,"success":true,"cost_seconds":0.082478625}} +{"level":"info","time":"2025-12-22 14:08:34","caller":"logger/logger.go:309","msg":"trace-log","domain":"mini-chat[fat]","method":"GET","path":"/api/admin/pay/orders?current=1&size=10&isTrusted=true&_vts=1766383714902&exclude_source_type=3&status=3","http_code":200,"business_code":0,"success":true,"cost_seconds":0.080245916,"trace_id":"2002984591433928704","trace_info":{"trace_id":"2002984591433928704","request":{"ttl":"un-limit","method":"GET","decoded_url":"/api/admin/pay/orders?current=1&size=10&isTrusted=true&_vts=1766383714902&exclude_source_type=3&status=3","header":{"Content-Type":""},"body":""},"response":{"header":{"Content-Type":["application/json; charset=utf-8"],"Trace-Id":["2002984591433928704"],"Vary":["Origin"]},"body":{"page":1,"page_size":10,"total":0,"list":[]},"http_code":200,"http_code_msg":"OK","cost_seconds":0.080245541},"third_party_requests":null,"debugs":null,"sqls":[{"time":"2025-12-22 14:08:34","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/router/interceptor/admin_auth.go:43","sql":"SELECT * FROM `admin` WHERE `admin`.`id` = 2 ORDER BY `admin`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.019303083},{"time":"2025-12-22 14:08:34","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/api/admin/pay_orders_admin.go:109","sql":"SELECT count(*) FROM `orders` WHERE `orders`.`status` = 3 AND `orders`.`source_type` <> 3","rows_affected":1,"cost_seconds":0.019114041},{"time":"2025-12-22 14:08:34","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/api/admin/pay_orders_admin.go:114","sql":"SELECT * FROM `orders` WHERE `orders`.`status` = 3 AND `orders`.`source_type` <> 3 ORDER BY `orders`.`id` DESC LIMIT 10","rows_affected":0,"cost_seconds":0.020739541},{"time":"2025-12-22 14:08:34","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/api/admin/pay_orders_admin.go:120","sql":"SELECT * FROM `system_configs` WHERE `system_configs`.`config_key` = 'points_exchange_per_cent' AND `system_configs`.`deleted_at` IS NULL ORDER BY `system_configs`.`id` LIMIT 1","rows_affected":0,"cost_seconds":0.02022775}],"redis":null,"mongos":null,"success":true,"cost_seconds":0.080245916}} +{"level":"info","time":"2025-12-22 14:09:07","caller":"logger/logger.go:309","msg":"trace-log","domain":"mini-chat[fat]","method":"GET","path":"/api/admin/pay/orders?current=1&size=10&isTrusted=true&_vts=1766383159315","http_code":200,"business_code":0,"success":true,"cost_seconds":0.081323792,"trace_id":"2002984727794946048","trace_info":{"trace_id":"2002984727794946048","request":{"ttl":"un-limit","method":"GET","decoded_url":"/api/admin/pay/orders?current=1&size=10&isTrusted=true&_vts=1766383159315","header":{"Content-Type":""},"body":""},"response":{"header":{"Content-Type":["application/json; charset=utf-8"],"Trace-Id":["2002984727794946048"],"Vary":["Origin"]},"body":{"page":1,"page_size":10,"total":0,"list":[]},"http_code":200,"http_code_msg":"OK","cost_seconds":0.081322834},"third_party_requests":null,"debugs":null,"sqls":[{"time":"2025-12-22 14:09:07","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/router/interceptor/admin_auth.go:43","sql":"SELECT * FROM `admin` WHERE `admin`.`id` = 2 ORDER BY `admin`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.020364667},{"time":"2025-12-22 14:09:07","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/api/admin/pay_orders_admin.go:109","sql":"SELECT count(*) FROM `orders` WHERE `orders`.`source_type` <> 3","rows_affected":1,"cost_seconds":0.019613},{"time":"2025-12-22 14:09:07","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/api/admin/pay_orders_admin.go:114","sql":"SELECT * FROM `orders` WHERE `orders`.`source_type` <> 3 ORDER BY `orders`.`id` DESC LIMIT 10","rows_affected":0,"cost_seconds":0.01954125},{"time":"2025-12-22 14:09:07","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/api/admin/pay_orders_admin.go:120","sql":"SELECT * FROM `system_configs` WHERE `system_configs`.`config_key` = 'points_exchange_per_cent' AND `system_configs`.`deleted_at` IS NULL ORDER BY `system_configs`.`id` LIMIT 1","rows_affected":0,"cost_seconds":0.0209305}],"redis":null,"mongos":null,"success":true,"cost_seconds":0.081323792}} +{"level":"info","time":"2025-12-22 14:12:05","caller":"logger/logger.go:309","msg":"trace-log","domain":"mini-chat[fat]","method":"GET","path":"/api/admin/pay/orders?current=1&size=10&exclude_source_type=0","http_code":200,"business_code":0,"success":true,"cost_seconds":0.184122125,"trace_id":"2002985472866914304","trace_info":{"trace_id":"2002985472866914304","request":{"ttl":"un-limit","method":"GET","decoded_url":"/api/admin/pay/orders?current=1&size=10&exclude_source_type=0","header":{"Content-Type":""},"body":""},"response":{"header":{"Content-Type":["application/json; charset=utf-8"],"Trace-Id":["2002985472866914304"],"Vary":["Origin"]},"body":{"page":1,"page_size":10,"total":5,"list":[{"actual_amount":990,"created_at":"2025-12-22T13:57:40.712+08:00","id":285,"is_consumed":0,"order_no":"O20251222135740","paid_at":"2025-12-22 13:57:47","points_amount":0,"points_used":0,"remark":"matching_game:issue:71","source_type":3,"status":2,"total_amount":990,"user_id":12},{"actual_amount":990,"created_at":"2025-12-22T13:43:07.064+08:00","id":284,"is_consumed":0,"order_no":"O20251222134307","paid_at":"2025-12-22 13:43:15","points_amount":0,"points_used":0,"remark":"matching_game:issue:71","source_type":3,"status":2,"total_amount":990,"user_id":12},{"actual_amount":990,"created_at":"2025-12-22T13:32:34.182+08:00","id":283,"is_consumed":0,"order_no":"O20251222133234","paid_at":"2025-12-22 13:32:40","points_amount":0,"points_used":0,"remark":"matching_game:issue:71","source_type":3,"status":2,"total_amount":990,"user_id":12},{"actual_amount":990,"created_at":"2025-12-22T13:30:35.46+08:00","id":282,"is_consumed":0,"order_no":"O20251222133035","paid_at":"2025-12-22 13:30:42","points_amount":0,"points_used":0,"remark":"matching_game:issue:71","source_type":3,"status":2,"total_amount":990,"user_id":12},{"actual_amount":990,"created_at":"2025-12-22T13:27:07.25+08:00","id":281,"is_consumed":0,"order_no":"O20251222132707","paid_at":"2025-12-22 13:27:13","points_amount":0,"points_used":0,"remark":"matching_game:issue:71","source_type":3,"status":2,"total_amount":990,"user_id":12}]},"http_code":200,"http_code_msg":"OK","cost_seconds":0.184121625},"third_party_requests":null,"debugs":null,"sqls":[{"time":"2025-12-22 14:12:05","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/router/interceptor/admin_auth.go:43","sql":"SELECT * FROM `admin` WHERE `admin`.`id` = 2 ORDER BY `admin`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.020797709},{"time":"2025-12-22 14:12:05","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/api/admin/pay_orders_admin.go:109","sql":"SELECT count(*) FROM `orders` WHERE `orders`.`source_type` <> 0","rows_affected":1,"cost_seconds":0.0210295},{"time":"2025-12-22 14:12:05","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/api/admin/pay_orders_admin.go:114","sql":"SELECT * FROM `orders` WHERE `orders`.`source_type` <> 0 ORDER BY `orders`.`id` DESC LIMIT 10","rows_affected":5,"cost_seconds":0.02121925},{"time":"2025-12-22 14:12:05","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/api/admin/pay_orders_admin.go:120","sql":"SELECT * FROM `system_configs` WHERE `system_configs`.`config_key` = 'points_exchange_per_cent' AND `system_configs`.`deleted_at` IS NULL ORDER BY `system_configs`.`id` LIMIT 1","rows_affected":0,"cost_seconds":0.020616542},{"time":"2025-12-22 14:12:05","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/api/admin/pay_orders_admin.go:130","sql":"SELECT * FROM `user_points_ledger` WHERE `user_points_ledger`.`ref_table` = 'orders' AND `user_points_ledger`.`ref_id` = 'O20251222135740'","rows_affected":0,"cost_seconds":0.020293917},{"time":"2025-12-22 14:12:05","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/api/admin/pay_orders_admin.go:130","sql":"SELECT * FROM `user_points_ledger` WHERE `user_points_ledger`.`ref_table` = 'orders' AND `user_points_ledger`.`ref_id` = 'O20251222134307'","rows_affected":0,"cost_seconds":0.019742333},{"time":"2025-12-22 14:12:05","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/api/admin/pay_orders_admin.go:130","sql":"SELECT * FROM `user_points_ledger` WHERE `user_points_ledger`.`ref_table` = 'orders' AND `user_points_ledger`.`ref_id` = 'O20251222133234'","rows_affected":0,"cost_seconds":0.019507583},{"time":"2025-12-22 14:12:05","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/api/admin/pay_orders_admin.go:130","sql":"SELECT * FROM `user_points_ledger` WHERE `user_points_ledger`.`ref_table` = 'orders' AND `user_points_ledger`.`ref_id` = 'O20251222133035'","rows_affected":0,"cost_seconds":0.019223459},{"time":"2025-12-22 14:12:05","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/api/admin/pay_orders_admin.go:130","sql":"SELECT * FROM `user_points_ledger` WHERE `user_points_ledger`.`ref_table` = 'orders' AND `user_points_ledger`.`ref_id` = 'O20251222132707'","rows_affected":0,"cost_seconds":0.021131}],"redis":null,"mongos":null,"success":true,"cost_seconds":0.184122125}} +{"level":"info","time":"2025-12-22 14:13:56","caller":"logger/logger.go:309","msg":"Connected to Redis","domain":"mini-chat[fat]","addr":"118.25.13.43:8379"} +{"level":"info","time":"2025-12-22 14:14:01","caller":"logger/logger.go:309","msg":"trace-log","domain":"mini-chat[fat]","method":"GET","path":"/api/admin/pay/orders?current=1&size=10&exclude_source_type=0","http_code":200,"business_code":0,"success":true,"cost_seconds":0.187597458,"trace_id":"2002985962367356928","trace_info":{"trace_id":"2002985962367356928","request":{"ttl":"un-limit","method":"GET","decoded_url":"/api/admin/pay/orders?current=1&size=10&exclude_source_type=0","header":{"Content-Type":""},"body":""},"response":{"header":{"Content-Type":["application/json; charset=utf-8"],"Trace-Id":["2002985962367356928"],"Vary":["Origin"]},"body":{"page":1,"page_size":10,"total":5,"list":[{"actual_amount":990,"created_at":"2025-12-22T13:57:40.712+08:00","id":285,"is_consumed":0,"order_no":"O20251222135740","paid_at":"2025-12-22 13:57:47","points_amount":0,"points_used":0,"remark":"matching_game:issue:71","source_type":3,"status":2,"total_amount":990,"user_id":12},{"actual_amount":990,"created_at":"2025-12-22T13:43:07.064+08:00","id":284,"is_consumed":0,"order_no":"O20251222134307","paid_at":"2025-12-22 13:43:15","points_amount":0,"points_used":0,"remark":"matching_game:issue:71","source_type":3,"status":2,"total_amount":990,"user_id":12},{"actual_amount":990,"created_at":"2025-12-22T13:32:34.182+08:00","id":283,"is_consumed":0,"order_no":"O20251222133234","paid_at":"2025-12-22 13:32:40","points_amount":0,"points_used":0,"remark":"matching_game:issue:71","source_type":3,"status":2,"total_amount":990,"user_id":12},{"actual_amount":990,"created_at":"2025-12-22T13:30:35.46+08:00","id":282,"is_consumed":0,"order_no":"O20251222133035","paid_at":"2025-12-22 13:30:42","points_amount":0,"points_used":0,"remark":"matching_game:issue:71","source_type":3,"status":2,"total_amount":990,"user_id":12},{"actual_amount":990,"created_at":"2025-12-22T13:27:07.25+08:00","id":281,"is_consumed":0,"order_no":"O20251222132707","paid_at":"2025-12-22 13:27:13","points_amount":0,"points_used":0,"remark":"matching_game:issue:71","source_type":3,"status":2,"total_amount":990,"user_id":12}]},"http_code":200,"http_code_msg":"OK","cost_seconds":0.187596958},"third_party_requests":null,"debugs":null,"sqls":[{"time":"2025-12-22 14:14:01","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/router/interceptor/admin_auth.go:43","sql":"SELECT * FROM `admin` WHERE `admin`.`id` = 2 ORDER BY `admin`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.019787666},{"time":"2025-12-22 14:14:01","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/api/admin/pay_orders_admin.go:109","sql":"SELECT count(*) FROM `orders` WHERE `orders`.`source_type` <> 0","rows_affected":1,"cost_seconds":0.020630916},{"time":"2025-12-22 14:14:01","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/api/admin/pay_orders_admin.go:114","sql":"SELECT * FROM `orders` WHERE `orders`.`source_type` <> 0 ORDER BY `orders`.`id` DESC LIMIT 10","rows_affected":5,"cost_seconds":0.021420458},{"time":"2025-12-22 14:14:01","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/api/admin/pay_orders_admin.go:120","sql":"SELECT * FROM `system_configs` WHERE `system_configs`.`config_key` = 'points_exchange_per_cent' AND `system_configs`.`deleted_at` IS NULL ORDER BY `system_configs`.`id` LIMIT 1","rows_affected":0,"cost_seconds":0.021373583},{"time":"2025-12-22 14:14:01","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/api/admin/pay_orders_admin.go:130","sql":"SELECT * FROM `user_points_ledger` WHERE `user_points_ledger`.`ref_table` = 'orders' AND `user_points_ledger`.`ref_id` = 'O20251222135740'","rows_affected":0,"cost_seconds":0.021156833},{"time":"2025-12-22 14:14:01","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/api/admin/pay_orders_admin.go:130","sql":"SELECT * FROM `user_points_ledger` WHERE `user_points_ledger`.`ref_table` = 'orders' AND `user_points_ledger`.`ref_id` = 'O20251222134307'","rows_affected":0,"cost_seconds":0.019977417},{"time":"2025-12-22 14:14:01","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/api/admin/pay_orders_admin.go:130","sql":"SELECT * FROM `user_points_ledger` WHERE `user_points_ledger`.`ref_table` = 'orders' AND `user_points_ledger`.`ref_id` = 'O20251222133234'","rows_affected":0,"cost_seconds":0.020618625},{"time":"2025-12-22 14:14:01","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/api/admin/pay_orders_admin.go:130","sql":"SELECT * FROM `user_points_ledger` WHERE `user_points_ledger`.`ref_table` = 'orders' AND `user_points_ledger`.`ref_id` = 'O20251222133035'","rows_affected":0,"cost_seconds":0.019833708},{"time":"2025-12-22 14:14:01","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/api/admin/pay_orders_admin.go:130","sql":"SELECT * FROM `user_points_ledger` WHERE `user_points_ledger`.`ref_table` = 'orders' AND `user_points_ledger`.`ref_id` = 'O20251222132707'","rows_affected":0,"cost_seconds":0.020894}],"redis":null,"mongos":null,"success":true,"cost_seconds":0.187597458}} +{"level":"info","time":"2025-12-22 14:14:10","caller":"logger/logger.go:309","msg":"trace-log","domain":"mini-chat[fat]","method":"GET","path":"/api/admin/pay/orders?current=1&size=10&isTrusted=true&_vts=1766384049929&exclude_source_type=0&source_type=1","http_code":200,"business_code":0,"success":true,"cost_seconds":0.083506416,"trace_id":"2002985996643209216","trace_info":{"trace_id":"2002985996643209216","request":{"ttl":"un-limit","method":"GET","decoded_url":"/api/admin/pay/orders?current=1&size=10&isTrusted=true&_vts=1766384049929&exclude_source_type=0&source_type=1","header":{"Content-Type":""},"body":""},"response":{"header":{"Content-Type":["application/json; charset=utf-8"],"Trace-Id":["2002985996643209216"],"Vary":["Origin"]},"body":{"page":1,"page_size":10,"total":0,"list":[]},"http_code":200,"http_code_msg":"OK","cost_seconds":0.08350075},"third_party_requests":null,"debugs":null,"sqls":[{"time":"2025-12-22 14:14:09","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/router/interceptor/admin_auth.go:43","sql":"SELECT * FROM `admin` WHERE `admin`.`id` = 2 ORDER BY `admin`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.020869125},{"time":"2025-12-22 14:14:09","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/api/admin/pay_orders_admin.go:109","sql":"SELECT count(*) FROM `orders` WHERE `orders`.`source_type` = 1 AND `orders`.`source_type` <> 0","rows_affected":1,"cost_seconds":0.019581209},{"time":"2025-12-22 14:14:10","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/api/admin/pay_orders_admin.go:114","sql":"SELECT * FROM `orders` WHERE `orders`.`source_type` = 1 AND `orders`.`source_type` <> 0 ORDER BY `orders`.`id` DESC LIMIT 10","rows_affected":0,"cost_seconds":0.022231292},{"time":"2025-12-22 14:14:10","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/api/admin/pay_orders_admin.go:120","sql":"SELECT * FROM `system_configs` WHERE `system_configs`.`config_key` = 'points_exchange_per_cent' AND `system_configs`.`deleted_at` IS NULL ORDER BY `system_configs`.`id` LIMIT 1","rows_affected":0,"cost_seconds":0.020097}],"redis":null,"mongos":null,"success":true,"cost_seconds":0.083506416}} +{"level":"info","time":"2025-12-22 14:14:13","caller":"logger/logger.go:309","msg":"trace-log","domain":"mini-chat[fat]","method":"GET","path":"/api/admin/pay/orders?current=1&size=10&isTrusted=true&_vts=1766384053200&exclude_source_type=0&source_type=2","http_code":200,"business_code":0,"success":true,"cost_seconds":0.083742209,"trace_id":"2002986010354388992","trace_info":{"trace_id":"2002986010354388992","request":{"ttl":"un-limit","method":"GET","decoded_url":"/api/admin/pay/orders?current=1&size=10&isTrusted=true&_vts=1766384053200&exclude_source_type=0&source_type=2","header":{"Content-Type":""},"body":""},"response":{"header":{"Content-Type":["application/json; charset=utf-8"],"Trace-Id":["2002986010354388992"],"Vary":["Origin"]},"body":{"page":1,"page_size":10,"total":0,"list":[]},"http_code":200,"http_code_msg":"OK","cost_seconds":0.08374175},"third_party_requests":null,"debugs":null,"sqls":[{"time":"2025-12-22 14:14:13","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/router/interceptor/admin_auth.go:43","sql":"SELECT * FROM `admin` WHERE `admin`.`id` = 2 ORDER BY `admin`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.019654375},{"time":"2025-12-22 14:14:13","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/api/admin/pay_orders_admin.go:109","sql":"SELECT count(*) FROM `orders` WHERE `orders`.`source_type` = 2 AND `orders`.`source_type` <> 0","rows_affected":1,"cost_seconds":0.021266375},{"time":"2025-12-22 14:14:13","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/api/admin/pay_orders_admin.go:114","sql":"SELECT * FROM `orders` WHERE `orders`.`source_type` = 2 AND `orders`.`source_type` <> 0 ORDER BY `orders`.`id` DESC LIMIT 10","rows_affected":0,"cost_seconds":0.02088275},{"time":"2025-12-22 14:14:13","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/api/admin/pay_orders_admin.go:120","sql":"SELECT * FROM `system_configs` WHERE `system_configs`.`config_key` = 'points_exchange_per_cent' AND `system_configs`.`deleted_at` IS NULL ORDER BY `system_configs`.`id` LIMIT 1","rows_affected":0,"cost_seconds":0.021021959}],"redis":null,"mongos":null,"success":true,"cost_seconds":0.083742209}} +{"level":"info","time":"2025-12-22 14:14:23","caller":"logger/logger.go:309","msg":"trace-log","domain":"mini-chat[fat]","method":"GET","path":"/api/admin/pay/orders?current=1&size=10&isTrusted=true&_vts=1766384063353&exclude_source_type=0&source_type=3","http_code":200,"business_code":0,"success":true,"cost_seconds":0.191229083,"trace_id":"2002986052939157504","trace_info":{"trace_id":"2002986052939157504","request":{"ttl":"un-limit","method":"GET","decoded_url":"/api/admin/pay/orders?current=1&size=10&isTrusted=true&_vts=1766384063353&exclude_source_type=0&source_type=3","header":{"Content-Type":""},"body":""},"response":{"header":{"Content-Type":["application/json; charset=utf-8"],"Trace-Id":["2002986052939157504"],"Vary":["Origin"]},"body":{"page":1,"page_size":10,"total":5,"list":[{"actual_amount":990,"created_at":"2025-12-22T13:57:40.712+08:00","id":285,"is_consumed":0,"order_no":"O20251222135740","paid_at":"2025-12-22 13:57:47","points_amount":0,"points_used":0,"remark":"matching_game:issue:71","source_type":3,"status":2,"total_amount":990,"user_id":12},{"actual_amount":990,"created_at":"2025-12-22T13:43:07.064+08:00","id":284,"is_consumed":0,"order_no":"O20251222134307","paid_at":"2025-12-22 13:43:15","points_amount":0,"points_used":0,"remark":"matching_game:issue:71","source_type":3,"status":2,"total_amount":990,"user_id":12},{"actual_amount":990,"created_at":"2025-12-22T13:32:34.182+08:00","id":283,"is_consumed":0,"order_no":"O20251222133234","paid_at":"2025-12-22 13:32:40","points_amount":0,"points_used":0,"remark":"matching_game:issue:71","source_type":3,"status":2,"total_amount":990,"user_id":12},{"actual_amount":990,"created_at":"2025-12-22T13:30:35.46+08:00","id":282,"is_consumed":0,"order_no":"O20251222133035","paid_at":"2025-12-22 13:30:42","points_amount":0,"points_used":0,"remark":"matching_game:issue:71","source_type":3,"status":2,"total_amount":990,"user_id":12},{"actual_amount":990,"created_at":"2025-12-22T13:27:07.25+08:00","id":281,"is_consumed":0,"order_no":"O20251222132707","paid_at":"2025-12-22 13:27:13","points_amount":0,"points_used":0,"remark":"matching_game:issue:71","source_type":3,"status":2,"total_amount":990,"user_id":12}]},"http_code":200,"http_code_msg":"OK","cost_seconds":0.19122875},"third_party_requests":null,"debugs":null,"sqls":[{"time":"2025-12-22 14:14:23","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/router/interceptor/admin_auth.go:43","sql":"SELECT * FROM `admin` WHERE `admin`.`id` = 2 ORDER BY `admin`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.019222459},{"time":"2025-12-22 14:14:23","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/api/admin/pay_orders_admin.go:109","sql":"SELECT count(*) FROM `orders` WHERE `orders`.`source_type` = 3 AND `orders`.`source_type` <> 0","rows_affected":1,"cost_seconds":0.020601667},{"time":"2025-12-22 14:14:23","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/api/admin/pay_orders_admin.go:114","sql":"SELECT * FROM `orders` WHERE `orders`.`source_type` = 3 AND `orders`.`source_type` <> 0 ORDER BY `orders`.`id` DESC LIMIT 10","rows_affected":5,"cost_seconds":0.021735083},{"time":"2025-12-22 14:14:23","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/api/admin/pay_orders_admin.go:120","sql":"SELECT * FROM `system_configs` WHERE `system_configs`.`config_key` = 'points_exchange_per_cent' AND `system_configs`.`deleted_at` IS NULL ORDER BY `system_configs`.`id` LIMIT 1","rows_affected":0,"cost_seconds":0.021435542},{"time":"2025-12-22 14:14:23","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/api/admin/pay_orders_admin.go:130","sql":"SELECT * FROM `user_points_ledger` WHERE `user_points_ledger`.`ref_table` = 'orders' AND `user_points_ledger`.`ref_id` = 'O20251222135740'","rows_affected":0,"cost_seconds":0.022858625},{"time":"2025-12-22 14:14:23","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/api/admin/pay_orders_admin.go:130","sql":"SELECT * FROM `user_points_ledger` WHERE `user_points_ledger`.`ref_table` = 'orders' AND `user_points_ledger`.`ref_id` = 'O20251222134307'","rows_affected":0,"cost_seconds":0.021603625},{"time":"2025-12-22 14:14:23","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/api/admin/pay_orders_admin.go:130","sql":"SELECT * FROM `user_points_ledger` WHERE `user_points_ledger`.`ref_table` = 'orders' AND `user_points_ledger`.`ref_id` = 'O20251222133234'","rows_affected":0,"cost_seconds":0.021958708},{"time":"2025-12-22 14:14:23","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/api/admin/pay_orders_admin.go:130","sql":"SELECT * FROM `user_points_ledger` WHERE `user_points_ledger`.`ref_table` = 'orders' AND `user_points_ledger`.`ref_id` = 'O20251222133035'","rows_affected":0,"cost_seconds":0.020026334},{"time":"2025-12-22 14:14:23","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/api/admin/pay_orders_admin.go:130","sql":"SELECT * FROM `user_points_ledger` WHERE `user_points_ledger`.`ref_table` = 'orders' AND `user_points_ledger`.`ref_id` = 'O20251222132707'","rows_affected":0,"cost_seconds":0.020786041}],"redis":null,"mongos":null,"success":true,"cost_seconds":0.191229083}} +{"level":"info","time":"2025-12-22 14:14:40","caller":"logger/logger.go:309","msg":"trace-log","domain":"mini-chat[fat]","method":"GET","path":"/api/admin/pay/orders?current=1&size=10&exclude_source_type=0&source_type=3","http_code":200,"business_code":0,"success":true,"cost_seconds":0.185909125,"trace_id":"2002986123546071040","trace_info":{"trace_id":"2002986123546071040","request":{"ttl":"un-limit","method":"GET","decoded_url":"/api/admin/pay/orders?current=1&size=10&exclude_source_type=0&source_type=3","header":{"Content-Type":""},"body":""},"response":{"header":{"Content-Type":["application/json; charset=utf-8"],"Trace-Id":["2002986123546071040"],"Vary":["Origin"]},"body":{"page":1,"page_size":10,"total":5,"list":[{"actual_amount":990,"created_at":"2025-12-22T13:57:40.712+08:00","id":285,"is_consumed":0,"order_no":"O20251222135740","paid_at":"2025-12-22 13:57:47","points_amount":0,"points_used":0,"remark":"matching_game:issue:71","source_type":3,"status":2,"total_amount":990,"user_id":12},{"actual_amount":990,"created_at":"2025-12-22T13:43:07.064+08:00","id":284,"is_consumed":0,"order_no":"O20251222134307","paid_at":"2025-12-22 13:43:15","points_amount":0,"points_used":0,"remark":"matching_game:issue:71","source_type":3,"status":2,"total_amount":990,"user_id":12},{"actual_amount":990,"created_at":"2025-12-22T13:32:34.182+08:00","id":283,"is_consumed":0,"order_no":"O20251222133234","paid_at":"2025-12-22 13:32:40","points_amount":0,"points_used":0,"remark":"matching_game:issue:71","source_type":3,"status":2,"total_amount":990,"user_id":12},{"actual_amount":990,"created_at":"2025-12-22T13:30:35.46+08:00","id":282,"is_consumed":0,"order_no":"O20251222133035","paid_at":"2025-12-22 13:30:42","points_amount":0,"points_used":0,"remark":"matching_game:issue:71","source_type":3,"status":2,"total_amount":990,"user_id":12},{"actual_amount":990,"created_at":"2025-12-22T13:27:07.25+08:00","id":281,"is_consumed":0,"order_no":"O20251222132707","paid_at":"2025-12-22 13:27:13","points_amount":0,"points_used":0,"remark":"matching_game:issue:71","source_type":3,"status":2,"total_amount":990,"user_id":12}]},"http_code":200,"http_code_msg":"OK","cost_seconds":0.18590875},"third_party_requests":null,"debugs":null,"sqls":[{"time":"2025-12-22 14:14:40","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/router/interceptor/admin_auth.go:43","sql":"SELECT * FROM `admin` WHERE `admin`.`id` = 2 ORDER BY `admin`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.019924667},{"time":"2025-12-22 14:14:40","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/api/admin/pay_orders_admin.go:109","sql":"SELECT count(*) FROM `orders` WHERE `orders`.`source_type` = 3 AND `orders`.`source_type` <> 0","rows_affected":1,"cost_seconds":0.020622125},{"time":"2025-12-22 14:14:40","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/api/admin/pay_orders_admin.go:114","sql":"SELECT * FROM `orders` WHERE `orders`.`source_type` = 3 AND `orders`.`source_type` <> 0 ORDER BY `orders`.`id` DESC LIMIT 10","rows_affected":5,"cost_seconds":0.021450208},{"time":"2025-12-22 14:14:40","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/api/admin/pay_orders_admin.go:120","sql":"SELECT * FROM `system_configs` WHERE `system_configs`.`config_key` = 'points_exchange_per_cent' AND `system_configs`.`deleted_at` IS NULL ORDER BY `system_configs`.`id` LIMIT 1","rows_affected":0,"cost_seconds":0.020909417},{"time":"2025-12-22 14:14:40","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/api/admin/pay_orders_admin.go:130","sql":"SELECT * FROM `user_points_ledger` WHERE `user_points_ledger`.`ref_table` = 'orders' AND `user_points_ledger`.`ref_id` = 'O20251222135740'","rows_affected":0,"cost_seconds":0.019941542},{"time":"2025-12-22 14:14:40","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/api/admin/pay_orders_admin.go:130","sql":"SELECT * FROM `user_points_ledger` WHERE `user_points_ledger`.`ref_table` = 'orders' AND `user_points_ledger`.`ref_id` = 'O20251222134307'","rows_affected":0,"cost_seconds":0.021056208},{"time":"2025-12-22 14:14:40","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/api/admin/pay_orders_admin.go:130","sql":"SELECT * FROM `user_points_ledger` WHERE `user_points_ledger`.`ref_table` = 'orders' AND `user_points_ledger`.`ref_id` = 'O20251222133234'","rows_affected":0,"cost_seconds":0.019807167},{"time":"2025-12-22 14:14:40","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/api/admin/pay_orders_admin.go:130","sql":"SELECT * FROM `user_points_ledger` WHERE `user_points_ledger`.`ref_table` = 'orders' AND `user_points_ledger`.`ref_id` = 'O20251222133035'","rows_affected":0,"cost_seconds":0.021344333},{"time":"2025-12-22 14:14:40","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/api/admin/pay_orders_admin.go:130","sql":"SELECT * FROM `user_points_ledger` WHERE `user_points_ledger`.`ref_table` = 'orders' AND `user_points_ledger`.`ref_id` = 'O20251222132707'","rows_affected":0,"cost_seconds":0.019729709}],"redis":null,"mongos":null,"success":true,"cost_seconds":0.185909125}} +{"level":"info","time":"2025-12-22 14:14:44","caller":"logger/logger.go:309","msg":"trace-log","domain":"mini-chat[fat]","method":"GET","path":"/api/admin/pay/orders?current=1&size=10&isTrusted=true&_vts=1766384084000&exclude_source_type=0&source_type=3","http_code":200,"business_code":0,"success":true,"cost_seconds":0.176738292,"trace_id":"2002986139547340800","trace_info":{"trace_id":"2002986139547340800","request":{"ttl":"un-limit","method":"GET","decoded_url":"/api/admin/pay/orders?current=1&size=10&isTrusted=true&_vts=1766384084000&exclude_source_type=0&source_type=3","header":{"Content-Type":""},"body":""},"response":{"header":{"Content-Type":["application/json; charset=utf-8"],"Trace-Id":["2002986139547340800"],"Vary":["Origin"]},"body":{"page":1,"page_size":10,"total":5,"list":[{"actual_amount":990,"created_at":"2025-12-22T13:57:40.712+08:00","id":285,"is_consumed":0,"order_no":"O20251222135740","paid_at":"2025-12-22 13:57:47","points_amount":0,"points_used":0,"remark":"matching_game:issue:71","source_type":3,"status":2,"total_amount":990,"user_id":12},{"actual_amount":990,"created_at":"2025-12-22T13:43:07.064+08:00","id":284,"is_consumed":0,"order_no":"O20251222134307","paid_at":"2025-12-22 13:43:15","points_amount":0,"points_used":0,"remark":"matching_game:issue:71","source_type":3,"status":2,"total_amount":990,"user_id":12},{"actual_amount":990,"created_at":"2025-12-22T13:32:34.182+08:00","id":283,"is_consumed":0,"order_no":"O20251222133234","paid_at":"2025-12-22 13:32:40","points_amount":0,"points_used":0,"remark":"matching_game:issue:71","source_type":3,"status":2,"total_amount":990,"user_id":12},{"actual_amount":990,"created_at":"2025-12-22T13:30:35.46+08:00","id":282,"is_consumed":0,"order_no":"O20251222133035","paid_at":"2025-12-22 13:30:42","points_amount":0,"points_used":0,"remark":"matching_game:issue:71","source_type":3,"status":2,"total_amount":990,"user_id":12},{"actual_amount":990,"created_at":"2025-12-22T13:27:07.25+08:00","id":281,"is_consumed":0,"order_no":"O20251222132707","paid_at":"2025-12-22 13:27:13","points_amount":0,"points_used":0,"remark":"matching_game:issue:71","source_type":3,"status":2,"total_amount":990,"user_id":12}]},"http_code":200,"http_code_msg":"OK","cost_seconds":0.176738084},"third_party_requests":null,"debugs":null,"sqls":[{"time":"2025-12-22 14:14:44","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/router/interceptor/admin_auth.go:43","sql":"SELECT * FROM `admin` WHERE `admin`.`id` = 2 ORDER BY `admin`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.018644667},{"time":"2025-12-22 14:14:44","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/api/admin/pay_orders_admin.go:109","sql":"SELECT count(*) FROM `orders` WHERE `orders`.`source_type` = 3 AND `orders`.`source_type` <> 0","rows_affected":1,"cost_seconds":0.01918625},{"time":"2025-12-22 14:14:44","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/api/admin/pay_orders_admin.go:114","sql":"SELECT * FROM `orders` WHERE `orders`.`source_type` = 3 AND `orders`.`source_type` <> 0 ORDER BY `orders`.`id` DESC LIMIT 10","rows_affected":5,"cost_seconds":0.019272042},{"time":"2025-12-22 14:14:44","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/api/admin/pay_orders_admin.go:120","sql":"SELECT * FROM `system_configs` WHERE `system_configs`.`config_key` = 'points_exchange_per_cent' AND `system_configs`.`deleted_at` IS NULL ORDER BY `system_configs`.`id` LIMIT 1","rows_affected":0,"cost_seconds":0.020106792},{"time":"2025-12-22 14:14:44","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/api/admin/pay_orders_admin.go:130","sql":"SELECT * FROM `user_points_ledger` WHERE `user_points_ledger`.`ref_table` = 'orders' AND `user_points_ledger`.`ref_id` = 'O20251222135740'","rows_affected":0,"cost_seconds":0.020335625},{"time":"2025-12-22 14:14:44","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/api/admin/pay_orders_admin.go:130","sql":"SELECT * FROM `user_points_ledger` WHERE `user_points_ledger`.`ref_table` = 'orders' AND `user_points_ledger`.`ref_id` = 'O20251222134307'","rows_affected":0,"cost_seconds":0.020144375},{"time":"2025-12-22 14:14:44","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/api/admin/pay_orders_admin.go:130","sql":"SELECT * FROM `user_points_ledger` WHERE `user_points_ledger`.`ref_table` = 'orders' AND `user_points_ledger`.`ref_id` = 'O20251222133234'","rows_affected":0,"cost_seconds":0.019258708},{"time":"2025-12-22 14:14:44","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/api/admin/pay_orders_admin.go:130","sql":"SELECT * FROM `user_points_ledger` WHERE `user_points_ledger`.`ref_table` = 'orders' AND `user_points_ledger`.`ref_id` = 'O20251222133035'","rows_affected":0,"cost_seconds":0.019642791},{"time":"2025-12-22 14:14:44","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/api/admin/pay_orders_admin.go:130","sql":"SELECT * FROM `user_points_ledger` WHERE `user_points_ledger`.`ref_table` = 'orders' AND `user_points_ledger`.`ref_id` = 'O20251222132707'","rows_affected":0,"cost_seconds":0.019428167}],"redis":null,"mongos":null,"success":true,"cost_seconds":0.176738292}} +{"level":"info","time":"2025-12-22 14:15:51","caller":"logger/logger.go:309","msg":"trace-log","domain":"mini-chat[fat]","method":"GET","path":"/api/admin/pay/orders?current=1&size=10","http_code":200,"business_code":0,"success":true,"cost_seconds":0.0853305,"trace_id":"2002986423719825408","trace_info":{"trace_id":"2002986423719825408","request":{"ttl":"un-limit","method":"GET","decoded_url":"/api/admin/pay/orders?current=1&size=10","header":{"Content-Type":""},"body":""},"response":{"header":{"Content-Type":["application/json; charset=utf-8"],"Trace-Id":["2002986423719825408"],"Vary":["Origin"]},"body":{"page":1,"page_size":10,"total":0,"list":[]},"http_code":200,"http_code_msg":"OK","cost_seconds":0.085330208},"third_party_requests":null,"debugs":null,"sqls":[{"time":"2025-12-22 14:15:51","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/router/interceptor/admin_auth.go:43","sql":"SELECT * FROM `admin` WHERE `admin`.`id` = 2 ORDER BY `admin`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.019948584},{"time":"2025-12-22 14:15:51","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/api/admin/pay_orders_admin.go:109","sql":"SELECT count(*) FROM `orders` WHERE `orders`.`source_type` <> 3","rows_affected":1,"cost_seconds":0.021013083},{"time":"2025-12-22 14:15:51","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/api/admin/pay_orders_admin.go:114","sql":"SELECT * FROM `orders` WHERE `orders`.`source_type` <> 3 ORDER BY `orders`.`id` DESC LIMIT 10","rows_affected":0,"cost_seconds":0.022128417},{"time":"2025-12-22 14:15:51","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/api/admin/pay_orders_admin.go:120","sql":"SELECT * FROM `system_configs` WHERE `system_configs`.`config_key` = 'points_exchange_per_cent' AND `system_configs`.`deleted_at` IS NULL ORDER BY `system_configs`.`id` LIMIT 1","rows_affected":0,"cost_seconds":0.021432041}],"redis":null,"mongos":null,"success":true,"cost_seconds":0.0853305}} +{"level":"info","time":"2025-12-22 14:16:08","caller":"logger/logger.go:309","msg":"Connected to Redis","domain":"mini-chat[fat]","addr":"118.25.13.43:8379"} +{"level":"fatal","time":"2025-12-22 14:16:08","caller":"logger/logger.go:333","msg":"http server startup err","domain":"mini-chat[fat]","error":"listen tcp :9991: bind: address already in use"} +{"level":"info","time":"2025-12-22 14:46:34","caller":"logger/logger.go:309","msg":"trace-log","domain":"mini-chat[fat]","method":"GET","path":"/api/admin/activities?page=1&page_size=20","http_code":200,"business_code":0,"success":true,"cost_seconds":0.082453042,"trace_id":"2002994154455437312","trace_info":{"trace_id":"2002994154455437312","request":{"ttl":"un-limit","method":"GET","decoded_url":"/api/admin/activities?page=1&page_size=20","header":{"Content-Type":""},"body":""},"response":{"header":{"Content-Type":["application/json; charset=utf-8"],"Trace-Id":["2002994154455437312"],"Vary":["Origin"]},"body":{"page":1,"page_size":20,"total":8,"list":[{"id":64,"name":"测试对对碰","banner":"","image":"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/18/1766068622450706000.png","activity_category_id":3,"category_name":"对对碰","status":1,"price_draw":990,"is_boss":0},{"id":63,"name":"名创优品","banner":"","image":"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/17/1765960589609003500.jpg","activity_category_id":2,"category_name":"无限赏","status":1,"price_draw":3690,"is_boss":0},{"id":62,"name":"ZIPPO系列","banner":"","image":"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765877646985207000.jpg","activity_category_id":2,"category_name":"无限赏","status":1,"price_draw":21990,"is_boss":0},{"id":60,"name":"王者荣耀","banner":"","image":"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765867203460929500.jpg","activity_category_id":2,"category_name":"无限赏","status":1,"price_draw":6490,"is_boss":0},{"id":59,"name":"迪士尼玩偶45.9无限赏","banner":"","image":"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/15/1765793139058012000.png","activity_category_id":2,"category_name":"无限赏","status":1,"price_draw":4590,"is_boss":0},{"id":57,"name":"9.9无限测试","banner":"","image":"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/11/1765423908712770100.jpg","activity_category_id":2,"category_name":"无限赏","status":1,"price_draw":990,"is_boss":0},{"id":56,"name":"9.9无限","banner":"","image":"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/10/1765368557100778000.jpg","activity_category_id":2,"category_name":"无限赏","status":2,"price_draw":99000,"is_boss":0},{"id":52,"name":"测试一番赏","banner":"","image":"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/03/1764757217193870000.jpeg","activity_category_id":1,"category_name":"一番赏","status":1,"price_draw":3000,"is_boss":0}]},"http_code":200,"http_code_msg":"OK","cost_seconds":0.082452875},"third_party_requests":null,"debugs":null,"sqls":[{"time":"2025-12-22 14:46:34","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/router/interceptor/admin_auth.go:43","sql":"SELECT * FROM `admin` WHERE `admin`.`id` = 2 ORDER BY `admin`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.020709292},{"time":"2025-12-22 14:46:34","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/service/activity/activities_list.go:32","sql":"SELECT count(*) FROM `activities` WHERE `activities`.`is_boss` = 0 AND `activities`.`end_time` > '2025-12-22 14:46:34.932' AND deleted_at IS NULL AND `activities`.`deleted_at` IS NULL","rows_affected":1,"cost_seconds":0.020625875},{"time":"2025-12-22 14:46:34","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/service/activity/activities_list.go:47","sql":"SELECT * FROM `activities` WHERE `activities`.`is_boss` = 0 AND `activities`.`end_time` > '2025-12-22 14:46:34.932' AND deleted_at IS NULL AND `activities`.`deleted_at` IS NULL ORDER BY `activities`.`id` DESC LIMIT 20","rows_affected":8,"cost_seconds":0.022007125},{"time":"2025-12-22 14:46:34","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/service/activity/category_lookup.go:15","sql":"SELECT * FROM `activity_categories` WHERE `activity_categories`.`id` IN (3,2,1)","rows_affected":3,"cost_seconds":0.018642292}],"redis":null,"mongos":null,"success":true,"cost_seconds":0.082453042}} +{"level":"info","time":"2025-12-22 14:46:35","caller":"logger/logger.go:309","msg":"trace-log","domain":"mini-chat[fat]","method":"GET","path":"/api/admin/activities?page=1&page_size=20","http_code":200,"business_code":0,"success":true,"cost_seconds":0.083817333,"trace_id":"2002994155361406976","trace_info":{"trace_id":"2002994155361406976","request":{"ttl":"un-limit","method":"GET","decoded_url":"/api/admin/activities?page=1&page_size=20","header":{"Content-Type":""},"body":""},"response":{"header":{"Content-Type":["application/json; charset=utf-8"],"Trace-Id":["2002994155361406976"],"Vary":["Origin"]},"body":{"page":1,"page_size":20,"total":8,"list":[{"id":64,"name":"测试对对碰","banner":"","image":"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/18/1766068622450706000.png","activity_category_id":3,"category_name":"对对碰","status":1,"price_draw":990,"is_boss":0},{"id":63,"name":"名创优品","banner":"","image":"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/17/1765960589609003500.jpg","activity_category_id":2,"category_name":"无限赏","status":1,"price_draw":3690,"is_boss":0},{"id":62,"name":"ZIPPO系列","banner":"","image":"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765877646985207000.jpg","activity_category_id":2,"category_name":"无限赏","status":1,"price_draw":21990,"is_boss":0},{"id":60,"name":"王者荣耀","banner":"","image":"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765867203460929500.jpg","activity_category_id":2,"category_name":"无限赏","status":1,"price_draw":6490,"is_boss":0},{"id":59,"name":"迪士尼玩偶45.9无限赏","banner":"","image":"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/15/1765793139058012000.png","activity_category_id":2,"category_name":"无限赏","status":1,"price_draw":4590,"is_boss":0},{"id":57,"name":"9.9无限测试","banner":"","image":"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/11/1765423908712770100.jpg","activity_category_id":2,"category_name":"无限赏","status":1,"price_draw":990,"is_boss":0},{"id":56,"name":"9.9无限","banner":"","image":"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/10/1765368557100778000.jpg","activity_category_id":2,"category_name":"无限赏","status":2,"price_draw":99000,"is_boss":0},{"id":52,"name":"测试一番赏","banner":"","image":"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/03/1764757217193870000.jpeg","activity_category_id":1,"category_name":"一番赏","status":1,"price_draw":3000,"is_boss":0}]},"http_code":200,"http_code_msg":"OK","cost_seconds":0.083817208},"third_party_requests":null,"debugs":null,"sqls":[{"time":"2025-12-22 14:46:35","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/router/interceptor/admin_auth.go:43","sql":"SELECT * FROM `admin` WHERE `admin`.`id` = 2 ORDER BY `admin`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.017867583},{"time":"2025-12-22 14:46:35","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/service/activity/activities_list.go:32","sql":"SELECT count(*) FROM `activities` WHERE `activities`.`is_boss` = 0 AND `activities`.`end_time` > '2025-12-22 14:46:35.145' AND deleted_at IS NULL AND `activities`.`deleted_at` IS NULL","rows_affected":1,"cost_seconds":0.021032916},{"time":"2025-12-22 14:46:35","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/service/activity/activities_list.go:47","sql":"SELECT * FROM `activities` WHERE `activities`.`is_boss` = 0 AND `activities`.`end_time` > '2025-12-22 14:46:35.145' AND deleted_at IS NULL AND `activities`.`deleted_at` IS NULL ORDER BY `activities`.`id` DESC LIMIT 20","rows_affected":8,"cost_seconds":0.026485375},{"time":"2025-12-22 14:46:35","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/service/activity/category_lookup.go:15","sql":"SELECT * FROM `activity_categories` WHERE `activity_categories`.`id` IN (3,2,1)","rows_affected":3,"cost_seconds":0.018065833}],"redis":null,"mongos":null,"success":true,"cost_seconds":0.083817333}} +{"level":"info","time":"2025-12-22 14:46:35","caller":"logger/logger.go:309","msg":"trace-log","domain":"mini-chat[fat]","method":"GET","path":"/api/admin/activities/62","http_code":200,"business_code":0,"success":true,"cost_seconds":0.089779708,"trace_id":"2002994155373989888","trace_info":{"trace_id":"2002994155373989888","request":{"ttl":"un-limit","method":"GET","decoded_url":"/api/admin/activities/62","header":{"Content-Type":""},"body":""},"response":{"header":{"Content-Type":["application/json; charset=utf-8"],"Trace-Id":["2002994155373989888"],"Vary":["Origin"]},"body":{"id":62,"created_at":"2025-12-16T17:34:11.375+08:00","updated_at":"2025-12-22T13:14:21.521+08:00","name":"ZIPPO系列","banner":"","activity_category_id":2,"status":1,"price_draw":21990,"is_boss":0,"start_time":"2025-12-16T17:33:40+08:00","end_time":"2026-07-31T00:00:00+08:00","draw_mode":"instant","play_type":"infinite","min_participants":0,"interval_minutes":0,"scheduled_time":"0001-01-01T00:00:00Z","last_settled_at":"0001-01-01T00:00:00Z","refund_coupon_id":0,"image":"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765877646985207000.jpg","gameplay_intro":"","allow_item_cards":true,"allow_coupons":true},"http_code":200,"http_code_msg":"OK","cost_seconds":0.0897795},"third_party_requests":null,"debugs":null,"sqls":[{"time":"2025-12-22 14:46:35","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/router/interceptor/admin_auth.go:43","sql":"SELECT * FROM `admin` WHERE `admin`.`id` = 2 ORDER BY `admin`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.069243875},{"time":"2025-12-22 14:46:35","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/service/activity/activity_get.go:16","sql":"SELECT * FROM `activities` WHERE `activities`.`id` = 62 AND deleted_at IS NULL AND `activities`.`deleted_at` IS NULL ORDER BY `activities`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.020163708}],"redis":null,"mongos":null,"success":true,"cost_seconds":0.089779708}} +{"level":"info","time":"2025-12-22 14:46:35","caller":"logger/logger.go:309","msg":"trace-log","domain":"mini-chat[fat]","method":"GET","path":"/api/admin/activities/60","http_code":200,"business_code":0,"success":true,"cost_seconds":0.091184584,"trace_id":"2002994155373989888","trace_info":{"trace_id":"2002994155373989888","request":{"ttl":"un-limit","method":"GET","decoded_url":"/api/admin/activities/60","header":{"Content-Type":""},"body":""},"response":{"header":{"Content-Type":["application/json; charset=utf-8"],"Trace-Id":["2002994155373989888"],"Vary":["Origin"]},"body":{"id":60,"created_at":"2025-12-16T14:40:06.547+08:00","updated_at":"2025-12-22T13:14:28.397+08:00","name":"王者荣耀","banner":"","activity_category_id":2,"status":1,"price_draw":6490,"is_boss":0,"start_time":"2025-12-16T14:39:53+08:00","end_time":"2026-07-31T00:00:00+08:00","draw_mode":"instant","play_type":"infinite","min_participants":0,"interval_minutes":0,"scheduled_time":"0001-01-01T00:00:00Z","last_settled_at":"0001-01-01T00:00:00Z","refund_coupon_id":0,"image":"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765867203460929500.jpg","gameplay_intro":"
对对碰游戏
","allow_item_cards":true,"allow_coupons":true},"http_code":200,"http_code_msg":"OK","cost_seconds":0.091184459},"third_party_requests":null,"debugs":null,"sqls":[{"time":"2025-12-22 14:46:35","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/router/interceptor/admin_auth.go:43","sql":"SELECT * FROM `admin` WHERE `admin`.`id` = 2 ORDER BY `admin`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.072267541},{"time":"2025-12-22 14:46:35","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/service/activity/activity_get.go:16","sql":"SELECT * FROM `activities` WHERE `activities`.`id` = 60 AND deleted_at IS NULL AND `activities`.`deleted_at` IS NULL ORDER BY `activities`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.018573958}],"redis":null,"mongos":null,"success":true,"cost_seconds":0.091184584}} +{"level":"info","time":"2025-12-22 14:46:35","caller":"logger/logger.go:309","msg":"trace-log","domain":"mini-chat[fat]","method":"GET","path":"/api/admin/activities/59","http_code":200,"business_code":0,"success":true,"cost_seconds":0.092013125,"trace_id":"2002994155378184192","trace_info":{"trace_id":"2002994155378184192","request":{"ttl":"un-limit","method":"GET","decoded_url":"/api/admin/activities/59","header":{"Content-Type":""},"body":""},"response":{"header":{"Content-Type":["application/json; charset=utf-8"],"Trace-Id":["2002994155378184192"],"Vary":["Origin"]},"body":{"id":59,"created_at":"2025-12-15T18:05:45.119+08:00","updated_at":"2025-12-22T13:14:34.923+08:00","name":"迪士尼玩偶45.9无限赏","banner":"","activity_category_id":2,"status":1,"price_draw":4590,"is_boss":0,"start_time":"2025-12-15T18:08:22+08:00","end_time":"2026-07-31T00:00:00+08:00","draw_mode":"instant","play_type":"infinite","min_participants":0,"interval_minutes":0,"scheduled_time":"0001-01-01T00:00:00Z","last_settled_at":"0001-01-01T00:00:00Z","refund_coupon_id":0,"image":"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/15/1765793139058012000.png","gameplay_intro":"对对碰游戏
","allow_item_cards":true,"allow_coupons":true},"http_code":200,"http_code_msg":"OK","cost_seconds":0.093476917},"third_party_requests":null,"debugs":null,"sqls":[{"time":"2025-12-22 14:46:35","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/router/interceptor/admin_auth.go:43","sql":"SELECT * FROM `admin` WHERE `admin`.`id` = 2 ORDER BY `admin`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.072585709},{"time":"2025-12-22 14:46:35","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/service/activity/activity_get.go:16","sql":"SELECT * FROM `activities` WHERE `activities`.`id` = 64 AND deleted_at IS NULL AND `activities`.`deleted_at` IS NULL ORDER BY `activities`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.020541041}],"redis":null,"mongos":null,"success":true,"cost_seconds":0.093477084}} +{"level":"info","time":"2025-12-22 14:46:35","caller":"logger/logger.go:309","msg":"trace-log","domain":"mini-chat[fat]","method":"GET","path":"/api/admin/activities/57","http_code":200,"business_code":0,"success":true,"cost_seconds":0.038782584,"trace_id":"2002994156066050048","trace_info":{"trace_id":"2002994156066050048","request":{"ttl":"un-limit","method":"GET","decoded_url":"/api/admin/activities/57","header":{"Content-Type":""},"body":""},"response":{"header":{"Content-Type":["application/json; charset=utf-8"],"Trace-Id":["2002994156066050048"],"Vary":["Origin"]},"body":{"id":57,"created_at":"2025-12-11T11:19:57.512+08:00","updated_at":"2025-12-22T13:14:41.507+08:00","name":"9.9无限测试","banner":"","activity_category_id":2,"status":1,"price_draw":990,"is_boss":0,"start_time":"2025-12-11T11:33:23+08:00","end_time":"2026-07-31T00:00:00+08:00","draw_mode":"instant","play_type":"infinite","min_participants":0,"interval_minutes":0,"scheduled_time":"0001-01-01T00:00:00Z","last_settled_at":"0001-01-01T00:00:00Z","refund_coupon_id":0,"image":"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/11/1765423908712770100.jpg","gameplay_intro":"对对碰游戏
","allow_item_cards":true,"allow_coupons":true},"http_code":200,"http_code_msg":"OK","cost_seconds":0.038428041},"third_party_requests":null,"debugs":null,"sqls":[{"time":"2025-12-22 14:46:35","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/router/interceptor/admin_auth.go:43","sql":"SELECT * FROM `admin` WHERE `admin`.`id` = 2 ORDER BY `admin`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.018493709},{"time":"2025-12-22 14:46:35","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/service/activity/activity_get.go:16","sql":"SELECT * FROM `activities` WHERE `activities`.`id` = 64 AND deleted_at IS NULL AND `activities`.`deleted_at` IS NULL ORDER BY `activities`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.018925667}],"redis":null,"mongos":null,"success":true,"cost_seconds":0.038428583}} +{"level":"info","time":"2025-12-22 14:46:35","caller":"logger/logger.go:309","msg":"trace-log","domain":"mini-chat[fat]","method":"GET","path":"/api/admin/activities/56","http_code":200,"business_code":0,"success":true,"cost_seconds":0.038760166,"trace_id":"2002994156313513984","trace_info":{"trace_id":"2002994156313513984","request":{"ttl":"un-limit","method":"GET","decoded_url":"/api/admin/activities/56","header":{"Content-Type":""},"body":""},"response":{"header":{"Content-Type":["application/json; charset=utf-8"],"Trace-Id":["2002994156313513984"],"Vary":["Origin"]},"body":{"id":56,"created_at":"2025-12-10T20:09:21.702+08:00","updated_at":"2025-12-22T13:14:46.521+08:00","name":"9.9无限","banner":"","activity_category_id":2,"status":2,"price_draw":99000,"is_boss":0,"start_time":"2025-12-10T20:10:42+08:00","end_time":"2026-07-31T00:00:00+08:00","draw_mode":"instant","play_type":"ichiban","min_participants":0,"interval_minutes":0,"scheduled_time":"0001-01-01T00:00:00Z","last_settled_at":"0001-01-01T00:00:00Z","refund_coupon_id":0,"image":"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/10/1765368557100778000.jpg","gameplay_intro":"对对碰游戏
","allow_item_cards":true,"allow_coupons":true},"http_code":200,"http_code_msg":"OK","cost_seconds":0.041801125},"third_party_requests":null,"debugs":null,"sqls":[{"time":"2025-12-22 14:46:35","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/router/interceptor/admin_auth.go:43","sql":"SELECT * FROM `admin` WHERE `admin`.`id` = 2 ORDER BY `admin`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.020090708},{"time":"2025-12-22 14:46:35","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/service/activity/activity_get.go:16","sql":"SELECT * FROM `activities` WHERE `activities`.`id` = 60 AND deleted_at IS NULL AND `activities`.`deleted_at` IS NULL ORDER BY `activities`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.021293416}],"redis":null,"mongos":null,"success":true,"cost_seconds":0.041801542}} +{"level":"info","time":"2025-12-22 14:46:35","caller":"logger/logger.go:309","msg":"trace-log","domain":"mini-chat[fat]","method":"GET","path":"/api/admin/activities/57","http_code":200,"business_code":0,"success":true,"cost_seconds":0.038519209,"trace_id":"2002994156821024768","trace_info":{"trace_id":"2002994156821024768","request":{"ttl":"un-limit","method":"GET","decoded_url":"/api/admin/activities/57","header":{"Content-Type":""},"body":""},"response":{"header":{"Content-Type":["application/json; charset=utf-8"],"Trace-Id":["2002994156821024768"],"Vary":["Origin"]},"body":{"id":57,"created_at":"2025-12-11T11:19:57.512+08:00","updated_at":"2025-12-22T13:14:41.507+08:00","name":"9.9无限测试","banner":"","activity_category_id":2,"status":1,"price_draw":990,"is_boss":0,"start_time":"2025-12-11T11:33:23+08:00","end_time":"2026-07-31T00:00:00+08:00","draw_mode":"instant","play_type":"infinite","min_participants":0,"interval_minutes":0,"scheduled_time":"0001-01-01T00:00:00Z","last_settled_at":"0001-01-01T00:00:00Z","refund_coupon_id":0,"image":"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/11/1765423908712770100.jpg","gameplay_intro":"对对碰游戏
","allow_item_cards":true,"allow_coupons":true},"http_code":200,"http_code_msg":"OK","cost_seconds":0.03844},"third_party_requests":null,"debugs":null,"sqls":[{"time":"2025-12-22 14:46:41","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/router/interceptor/admin_auth.go:43","sql":"SELECT * FROM `admin` WHERE `admin`.`id` = 2 ORDER BY `admin`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.018562},{"time":"2025-12-22 14:46:41","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/service/activity/activity_get.go:16","sql":"SELECT * FROM `activities` WHERE `activities`.`id` = 64 AND deleted_at IS NULL AND `activities`.`deleted_at` IS NULL ORDER BY `activities`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.0195185}],"redis":null,"mongos":null,"success":true,"cost_seconds":0.03844025}} +{"level":"info","time":"2025-12-22 14:46:45","caller":"logger/logger.go:309","msg":"trace-log","domain":"mini-chat[fat]","method":"GET","path":"/api/admin/activities/64/issues?page=1&page_size=20","http_code":200,"business_code":0,"success":true,"cost_seconds":0.075366917,"trace_id":"2002994197648379904","trace_info":{"trace_id":"2002994197648379904","request":{"ttl":"un-limit","method":"GET","decoded_url":"/api/admin/activities/64/issues?page=1&page_size=20","header":{"Content-Type":""},"body":""},"response":{"header":{"Content-Type":["application/json; charset=utf-8"],"Trace-Id":["2002994197648379904"],"Vary":["Origin"]},"body":{"page":1,"page_size":20,"total":1,"list":[{"id":71,"issue_number":"1","status":1,"sort":1,"prize_count":11}]},"http_code":200,"http_code_msg":"OK","cost_seconds":0.075366292},"third_party_requests":null,"debugs":null,"sqls":[{"time":"2025-12-22 14:46:45","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/router/interceptor/admin_auth.go:43","sql":"SELECT * FROM `admin` WHERE `admin`.`id` = 2 ORDER BY `admin`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.018237583},{"time":"2025-12-22 14:46:45","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/service/activity/issues_list.go:14","sql":"SELECT count(*) FROM `activity_issues` WHERE `activity_issues`.`activity_id` = 64 AND `activity_issues`.`status` <> 2 AND deleted_at IS NULL AND `activity_issues`.`deleted_at` IS NULL","rows_affected":1,"cost_seconds":0.018292542},{"time":"2025-12-22 14:46:45","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/service/activity/issues_list.go:27","sql":"SELECT * FROM `activity_issues` WHERE `activity_issues`.`activity_id` = 64 AND `activity_issues`.`status` <> 2 AND deleted_at IS NULL AND `activity_issues`.`deleted_at` IS NULL ORDER BY `activity_issues`.`sort` DESC LIMIT 20","rows_affected":1,"cost_seconds":0.018857},{"time":"2025-12-22 14:46:45","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/api/admin/issues_admin.go:76","sql":"SELECT count(*) FROM `activity_reward_settings` WHERE `activity_reward_settings`.`issue_id` = 71 AND deleted_at IS NULL AND `activity_reward_settings`.`deleted_at` IS NULL","rows_affected":1,"cost_seconds":0.019051375}],"redis":null,"mongos":null,"success":true,"cost_seconds":0.075366917}} +{"level":"info","time":"2025-12-22 14:46:45","caller":"logger/logger.go:309","msg":"trace-log","domain":"mini-chat[fat]","method":"GET","path":"/api/admin/activities/64/commitment/summary","http_code":200,"business_code":0,"success":true,"cost_seconds":0.163500083,"trace_id":"2002994197648379904","trace_info":{"trace_id":"2002994197648379904","request":{"ttl":"un-limit","method":"GET","decoded_url":"/api/admin/activities/64/commitment/summary","header":{"Content-Type":""},"body":""},"response":{"header":{"Content-Type":["application/json; charset=utf-8"],"Trace-Id":["2002994197648379904"],"Vary":["Origin"]},"body":{"seed_version":0,"algo":"commit-v1","has_seed":false,"len_seed_master":0,"len_seed_hash":0,"len_items_root":0,"items_root_hex":""},"http_code":200,"http_code_msg":"OK","cost_seconds":0.163499458},"third_party_requests":null,"debugs":null,"sqls":[{"time":"2025-12-22 14:46:45","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/router/interceptor/admin_auth.go:43","sql":"SELECT * FROM `admin` WHERE `admin`.`id` = 2 ORDER BY `admin`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.018863625}],"redis":null,"mongos":null,"success":true,"cost_seconds":0.163500083}} +{"level":"info","time":"2025-12-22 14:46:45","caller":"logger/logger.go:309","msg":"trace-log","domain":"mini-chat[fat]","method":"GET","path":"/api/admin/activities/64/issues?page=1&page_size=20","http_code":200,"business_code":0,"success":true,"cost_seconds":0.074497959,"trace_id":"2002994198290108416","trace_info":{"trace_id":"2002994198290108416","request":{"ttl":"un-limit","method":"GET","decoded_url":"/api/admin/activities/64/issues?page=1&page_size=20","header":{"Content-Type":""},"body":""},"response":{"header":{"Content-Type":["application/json; charset=utf-8"],"Trace-Id":["2002994198290108416"],"Vary":["Origin"]},"body":{"page":1,"page_size":20,"total":1,"list":[{"id":71,"issue_number":"1","status":1,"sort":1,"prize_count":11}]},"http_code":200,"http_code_msg":"OK","cost_seconds":0.074497417},"third_party_requests":null,"debugs":null,"sqls":[{"time":"2025-12-22 14:46:45","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/router/interceptor/admin_auth.go:43","sql":"SELECT * FROM `admin` WHERE `admin`.`id` = 2 ORDER BY `admin`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.018277625},{"time":"2025-12-22 14:46:45","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/service/activity/issues_list.go:14","sql":"SELECT count(*) FROM `activity_issues` WHERE `activity_issues`.`activity_id` = 64 AND `activity_issues`.`status` <> 2 AND deleted_at IS NULL AND `activity_issues`.`deleted_at` IS NULL","rows_affected":1,"cost_seconds":0.019224917},{"time":"2025-12-22 14:46:45","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/service/activity/issues_list.go:27","sql":"SELECT * FROM `activity_issues` WHERE `activity_issues`.`activity_id` = 64 AND `activity_issues`.`status` <> 2 AND deleted_at IS NULL AND `activity_issues`.`deleted_at` IS NULL ORDER BY `activity_issues`.`sort` DESC LIMIT 20","rows_affected":1,"cost_seconds":0.017483875},{"time":"2025-12-22 14:46:45","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/api/admin/issues_admin.go:76","sql":"SELECT count(*) FROM `activity_reward_settings` WHERE `activity_reward_settings`.`issue_id` = 71 AND deleted_at IS NULL AND `activity_reward_settings`.`deleted_at` IS NULL","rows_affected":1,"cost_seconds":0.018403333}],"redis":null,"mongos":null,"success":true,"cost_seconds":0.074497959}} +{"level":"info","time":"2025-12-22 14:46:47","caller":"logger/logger.go:309","msg":"trace-log","domain":"mini-chat[fat]","method":"GET","path":"/api/admin/activities/64/issues/71/rewards","http_code":200,"business_code":0,"success":true,"cost_seconds":0.041755375,"trace_id":"2002994206905208832","trace_info":{"trace_id":"2002994206905208832","request":{"ttl":"un-limit","method":"GET","decoded_url":"/api/admin/activities/64/issues/71/rewards","header":{"Content-Type":""},"body":""},"response":{"header":{"Content-Type":["application/json; charset=utf-8"],"Trace-Id":["2002994206905208832"],"Vary":["Origin"]},"body":{"list":[{"id":237,"product_id":0,"name":"参与奖-5对","weight":0,"quantity":98,"original_qty":100,"level":10,"sort":1,"is_boss":0,"min_score":5},{"id":238,"product_id":0,"name":"参与奖-10对","weight":0,"quantity":100,"original_qty":100,"level":9,"sort":2,"is_boss":0,"min_score":10},{"id":239,"product_id":0,"name":"铜奖-15对","weight":0,"quantity":50,"original_qty":50,"level":8,"sort":3,"is_boss":0,"min_score":15},{"id":240,"product_id":0,"name":"铜奖-20对","weight":0,"quantity":50,"original_qty":50,"level":7,"sort":4,"is_boss":0,"min_score":20},{"id":241,"product_id":0,"name":"银奖-25对","weight":0,"quantity":30,"original_qty":30,"level":6,"sort":5,"is_boss":0,"min_score":25},{"id":242,"product_id":0,"name":"银奖-30对","weight":0,"quantity":30,"original_qty":30,"level":5,"sort":6,"is_boss":0,"min_score":30},{"id":243,"product_id":0,"name":"金奖-35对","weight":0,"quantity":20,"original_qty":20,"level":4,"sort":7,"is_boss":0,"min_score":35},{"id":244,"product_id":0,"name":"金奖-40对","weight":0,"quantity":20,"original_qty":20,"level":3,"sort":8,"is_boss":0,"min_score":40},{"id":245,"product_id":0,"name":"特等奖-42对","weight":0,"quantity":10,"original_qty":10,"level":2,"sort":9,"is_boss":0,"min_score":42},{"id":246,"product_id":0,"name":"特等奖-44对","weight":0,"quantity":5,"original_qty":5,"level":1,"sort":10,"is_boss":0,"min_score":44},{"id":247,"product_id":0,"name":"终极大奖-45对","weight":0,"quantity":3,"original_qty":3,"level":0,"sort":11,"is_boss":1,"min_score":45}]},"http_code":200,"http_code_msg":"OK","cost_seconds":0.041754833},"third_party_requests":null,"debugs":null,"sqls":[{"time":"2025-12-22 14:46:47","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/router/interceptor/admin_auth.go:43","sql":"SELECT * FROM `admin` WHERE `admin`.`id` = 2 ORDER BY `admin`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.0198325},{"time":"2025-12-22 14:46:47","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/service/activity/rewards_list.go:13","sql":"SELECT * FROM `activity_reward_settings` WHERE `activity_reward_settings`.`issue_id` = 71 AND deleted_at IS NULL AND `activity_reward_settings`.`deleted_at` IS NULL ORDER BY `activity_reward_settings`.`sort` ASC","rows_affected":11,"cost_seconds":0.021311042}],"redis":null,"mongos":null,"success":true,"cost_seconds":0.041755375}} +{"level":"info","time":"2025-12-22 14:46:47","caller":"logger/logger.go:309","msg":"trace-log","domain":"mini-chat[fat]","method":"GET","path":"/api/admin/products?page=1&page_size=100","http_code":200,"business_code":0,"success":true,"cost_seconds":0.062914958,"trace_id":"2002994206905208832","trace_info":{"trace_id":"2002994206905208832","request":{"ttl":"un-limit","method":"GET","decoded_url":"/api/admin/products?page=1&page_size=100","header":{"Content-Type":""},"body":""},"response":{"header":{"Content-Type":["application/json; charset=utf-8"],"Trace-Id":["2002994206905208832"],"Vary":["Origin"]},"body":{"page":1,"page_size":100,"total":271,"list":[{"id":271,"name":"LAMY凌美宝珠笔礼盒暗夜绿野奢礼盒","category_id":10,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/17/1765974142175986900.jpg\"]","price":87990,"stock":9999,"sales":0,"status":1},{"id":270,"name":"LAMY凌美钢笔礼盒 宋代限定版墨水笔青苍玉兰","category_id":10,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/17/1765974064319974300.jpg\"]","price":32990,"stock":9999,"sales":0,"status":1},{"id":269,"name":"LAMY凌美 钢笔(尼克+朱迪)礼盒疯狂动物城联名墨水笔套装","category_id":10,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/17/1765973959992705500.jpg\"]","price":100900,"stock":9999,"sales":0,"status":1},{"id":268,"name":"LAMY凌美钢笔礼盒 狩猎系列磨砂黑白色墨水笔套装","category_id":10,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/17/1765973806819055400.jpg\"]","price":43900,"stock":9999,"sales":0,"status":1},{"id":267,"name":"LAMY凌美钢笔礼盒 狩猎系列库洛米联名限定套装","category_id":10,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/17/1765973718891607700.png\"]","price":50500,"stock":99999,"sales":0,"status":1},{"id":266,"name":"MINISO名创优品U型枕飞机云朵护颈枕记忆棉","category_id":9,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/17/1765958525893026200.jpg\"]","price":7700,"stock":9999,"sales":0,"status":1},{"id":265,"name":"MINISO名创优品假面骑士×WASA龙联名系列盲盒单盒随机","category_id":9,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/17/1765958389919343600.jpg\"]","price":10490,"stock":9999,"sales":0,"status":1},{"id":264,"name":"MINISO名创优品橘猫工业铁甲小宝第二弹模型玩具","category_id":9,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/17/1765958320499495500.jpg\"]","price":10800,"stock":9999,"sales":0,"status":1},{"id":263,"name":"MINISO名创优品橘猫工业铁甲小宝第一弹模型玩具","category_id":9,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/17/1765958282291523200.jpg\"]","price":10800,"stock":9999,"sales":0,"status":1},{"id":262,"name":"MINISO名创Nanci囡茜氛围灯积木摆件中国风小夜灯","category_id":9,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/17/1765958213519986200.png\"]","price":10900,"stock":9999,"sales":0,"status":1},{"id":261,"name":"名创优品迪士尼316不锈钢保温饭盒便当盒","category_id":9,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/17/1765958147297026300.jpg\"]","price":8900,"stock":9999,"sales":0,"status":1},{"id":260,"name":"MINISO名创优品学院系列焦糖格纹双肩包包学院风","category_id":9,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/17/1765958088190736900.jpg\"]","price":11500,"stock":9999,"sales":0,"status":1},{"id":259,"name":"MINISO/名创优品迪士尼朱迪的警官生活系列痛包","category_id":9,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/17/1765957990772169000.jpg\"]","price":13090,"stock":9999,"sales":0,"status":1},{"id":258,"name":"MINISO名创优品雪夜派对拼装模型圣诞节礼物","category_id":9,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/17/1765957900503621400.jpg\"]","price":13900,"stock":9999,"sales":0,"status":1},{"id":257,"name":"MINISO名创优品【深睡记忆枕】透气枕芯枕头护颈椎释压","category_id":9,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/17/1765957819453538400.png\"]","price":14590,"stock":9999,"sales":0,"status":1},{"id":256,"name":"MINISO名创优品香薰氛围感蓝牙音乐香氛机","category_id":9,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/17/1765957751042251600.jpg\"]","price":24500,"stock":9999,"sales":0,"status":1},{"id":255,"name":"MINISO名创优品铠魂帝皇侠15周年典藏模玩机甲超可动人偶成品模型","category_id":9,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/17/1765957636770820900.jpg\"]","price":27500,"stock":9999,"sales":0,"status":1},{"id":254,"name":"MINISO名创优品冰淇淋香薰膏室内卫生间清新芬芳花果香4盒","category_id":9,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/17/1765957419425272100.jpg\"]","price":4390,"stock":9999,"sales":0,"status":1},{"id":253,"name":"MINISO名创优品硅胶热水袋","category_id":9,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/17/1765957295282004700.jpg\"]","price":5790,"stock":9999,"sales":0,"status":1},{"id":252,"name":"MINISO名创优品Chiikawa系列毛茸茸季斗篷休闲午休毯随机","category_id":9,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/17/1765957103956331200.jpg\"]","price":16390,"stock":9999,"sales":0,"status":1},{"id":251,"name":"MINISO名创优品罗小黑轩影摇香系列迷你挂画冰箱贴五款盲盒","category_id":9,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/17/1765957004993236600.jpg\"]","price":13990,"stock":9999,"sales":0,"status":1},{"id":250,"name":"MINISO名创优品chiikawa系列睡衣毛绒公仔","category_id":9,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/17/1765956849972873300.jpg\"]","price":10900,"stock":9999,"sales":0,"status":1},{"id":249,"name":"MINISO名创优品蜡笔小新拼图","category_id":9,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/17/1765956726589144000.png\"]","price":8890,"stock":9999,"sales":0,"status":1},{"id":248,"name":"MINISO名创优品三丽鸥保温杯公仔冰霸杯","category_id":9,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/17/1765956569488102100.jpg\"]","price":8890,"stock":9999,"sales":0,"status":1},{"id":247,"name":"MINISO名创优品蜡笔小新超变装毛绒眼罩","category_id":9,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/17/1765956491344273300.jpg\"]","price":1990,"stock":9999,"sales":0,"status":1},{"id":246,"name":"MINISO名创优品迪士尼疯狂动物城搪胶毛绒公仔盲盒摆件","category_id":9,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/17/1765956361082178100.jpg\"]","price":8690,"stock":9999,"sales":0,"status":1},{"id":245,"name":"MINISO名创优品玉桂狗酷洛米捏捏小夜灯卧室睡眠灯床头灯LED灯随机款","category_id":9,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/17/1765956188247609800.jpg\"]","price":6590,"stock":9999,"sales":0,"status":1},{"id":244,"name":"MINISO名创优品Chiikawa奇幻马戏团毛绒挂件随机款","category_id":9,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/17/1765956006896154800.jpg\"]","price":5590,"stock":9999,"sales":0,"status":1},{"id":243,"name":"MINISO名创优品WAKUKU哇库库毛毛潮趣第二弹系列单盒盲盒","category_id":9,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/17/1765955886258552300.jpg\"]","price":7590,"stock":9999,"sales":0,"status":1},{"id":242,"name":"MINISO名创优品Chiikawa樱花季吉伊乌萨奇小八零钱包挂件耳机包随机款","category_id":9,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/17/1765955794487832400.jpg\"]","price":4390,"stock":9999,"sales":0,"status":1},{"id":241,"name":"MINISO名创优品草莓熊休闲毯加厚保暖午睡毯子","category_id":9,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/17/1765955717135623100.jpg\"]","price":9900,"stock":9999,"sales":0,"status":1},{"id":240,"name":"MINISO名创优品MyMelody秘森茶话会盲盒","category_id":9,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/17/1765955658005155100.jpg\"]","price":3900,"stock":9999,"sales":0,"status":1},{"id":239,"name":"MINISO名创优品【指环爱神系列】2盒随机2款手办盲盒","category_id":9,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/17/1765955515578588700.png\"]","price":6400,"stock":9999,"sales":0,"status":1},{"id":238,"name":"MINISO名创优品 小熊维尼拍立得系列(单盒单款)","category_id":9,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/17/1765955384656076300.jpg\"]","price":3690,"stock":9999,"sales":0,"status":1},{"id":237,"name":"MINISO名创优品 小熊维尼拍立得系列(端盒8款)盲盒","category_id":9,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/17/1765955301119356700.jpg\"]","price":30000,"stock":999,"sales":0,"status":1},{"id":236,"name":"MINISO名创优品缤纷街景积木第6季五件套拼装积木玩具","category_id":9,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/17/1765954965838583100.jpg\"]","price":18500,"stock":9999,"sales":0,"status":1},{"id":235,"name":"MINISO名创优品羊咩咩小羊玩偶毛绒公仔","category_id":9,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/17/1765954804800434800.jpg\"]","price":2190,"stock":9999,"sales":0,"status":1},{"id":234,"name":"MINISO名创优品大师香薰室内家用150ml随机款","category_id":9,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/17/1765954438035852600.jpg\"]","price":4500,"stock":9999,"sales":0,"status":1},{"id":233,"name":"MINISO名创优品天然植物化妆棉800片白色","category_id":9,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/17/1765954130792789000.jpg\"]","price":1390,"stock":9999,"sales":0,"status":1},{"id":232,"name":"MINISO名创优品玉桂狗u型枕","category_id":9,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/17/1765953971587736200.png\"]","price":3300,"stock":99999,"sales":0,"status":1},{"id":231,"name":"ZIPPO 春华秋实套装打火机","category_id":8,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765878978681838200.jpg\"]","price":327500,"stock":9999,"sales":0,"status":1},{"id":230,"name":"ZIPPO 觉醒系列打火机","category_id":8,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765877510957720900.jpg\"]","price":145500,"stock":9999,"sales":0,"status":1},{"id":229,"name":"ZIPPO 星际异兽套装打火机","category_id":8,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765876033609870000.jpg\"]","price":135000,"stock":9999,"sales":0,"status":1},{"id":228,"name":"ZIPPO 幸运灵虫 套装打火机","category_id":8,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765875966491566400.jpg\"]","price":263900,"stock":9999,"sales":0,"status":1},{"id":227,"name":"ZIPPO Jack Daniel联名款——橡木之味打火机","category_id":8,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765875891023016800.jpg\"]","price":113800,"stock":9999,"sales":0,"status":1},{"id":226,"name":"ZIPPO八音盒·怦然心动打火机","category_id":8,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765875820076074600.jpg\"]","price":119900,"stock":9999,"sales":0,"status":1},{"id":225,"name":"ZIPPO蔷薇水晶礼盒套装打火机","category_id":8,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765875719520558200.jpg\"]","price":185000,"stock":9999,"sales":0,"status":1},{"id":224,"name":"ZIPPO幸运石系列随机款打火机","category_id":8,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765875631784700700.jpg\"]","price":58800,"stock":9999,"sales":0,"status":1},{"id":223,"name":"ZIPPO暗花幺點-PVD浸染打火机","category_id":8,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765875319301817500.avif\"]","price":33700,"stock":9999,"sales":0,"status":1},{"id":222,"name":"ZIPPO 雪花系列随机款打火机","category_id":8,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765875220636810700.jpg\"]","price":38200,"stock":9999,"sales":0,"status":1},{"id":221,"name":"唐草之Zippo在我心-烧金色","category_id":8,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765875121383638800.jpg\"]","price":70400,"stock":9999,"sales":0,"status":1},{"id":220,"name":"ZIPPO东来也—武财神打火机","category_id":8,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765875049932239300.jpg\"]","price":26800,"stock":9999,"sales":0,"status":1},{"id":219,"name":"ZIPPO十二星座秘典随机款打火机","category_id":8,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765874983695603700.jpg\"]","price":50200,"stock":9999,"sales":0,"status":1},{"id":218,"name":"ZIPPO 喵望星空-仿古银打火机","category_id":8,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765874892660518100.jpg\"]","price":35000,"stock":9999,"sales":0,"status":1},{"id":217,"name":"ZIPPO 寻梦旅行猫咪打火机","category_id":8,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765874799357193500.jpg\"]","price":26800,"stock":9999,"sales":0,"status":1},{"id":216,"name":"ZIPPO 经典缎纱系列打火机","category_id":8,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765874656843816600.jpg\"]","price":18300,"stock":9999,"sales":0,"status":1},{"id":215,"name":"ZIPPO 恋爱至死套装打火机","category_id":8,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765874569257704700.jpg\"]","price":30600,"stock":9999,"sales":0,"status":1},{"id":214,"name":"ZIPPO山海经系列打火机随机款","category_id":8,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765874469951727700.jpg\"]","price":124500,"stock":9999,"sales":0,"status":1},{"id":213,"name":"ZIPPO 黑冰360精雕-太阳与水晶打火机","category_id":8,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765874394511845600.jpg\"]","price":128900,"stock":9999,"sales":0,"status":1},{"id":212,"name":"ZIPPO 纪念二战胜利75周年纯钢限量款打火机","category_id":8,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765874282732029500.jpg\"]","price":132500,"stock":9999,"sales":0,"status":1},{"id":211,"name":"ZIPPO 90周年荣耀之宝-纪念款打火机","category_id":8,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765874137696852300.jpg\"]","price":239900,"stock":9999,"sales":0,"status":1},{"id":210,"name":"ZIPPO 僵尸迷宫 僵尸新郎-发现你打火机","category_id":8,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765873962535031300.jpg\"]","price":35000,"stock":999,"sales":0,"status":1},{"id":209,"name":"ZIPPO 赛博朋克 浪子英雄打火机","category_id":8,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765873867250535900.jpg\"]","price":26800,"stock":9999,"sales":0,"status":1},{"id":208,"name":"ZIPPO 警世箴言打火机","category_id":8,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765873648027889100.jpg\"]","price":18300,"stock":9999,"sales":0,"status":1},{"id":207,"name":"ZIPPO 八方来财打火机红色礼盒套装(含线)","category_id":8,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765873539960206300.jpg\"]","price":77500,"stock":999,"sales":0,"status":1},{"id":206,"name":"ZIPPO 如意吉象打火机","category_id":8,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765873442205527300.jpg\"]","price":106200,"stock":9999,"sales":0,"status":1},{"id":205,"name":"ZIPPO 钱来运转打火机","category_id":8,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765873359362166400.jpg\"]","price":124500,"stock":9999,"sales":0,"status":1},{"id":204,"name":"ZIPPO 川流不息打火机","category_id":8,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765873287499214100.jpg\"]","price":43200,"stock":999,"sales":0,"status":1},{"id":203,"name":"ZIPPO 熏金十二星座打火机随机款","category_id":8,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765873231085180300.jpg\"]","price":168500,"stock":9999,"sales":0,"status":1},{"id":202,"name":"ZIPPO 飞的更高打火机","category_id":8,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765873015631694800.jpg\"]","price":42100,"stock":999,"sales":0,"status":1},{"id":201,"name":"ZIPPO 流云淬火打火机","category_id":8,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765872880849231700.jpg\"]","price":41200,"stock":999,"sales":0,"status":1},{"id":200,"name":"ZIPPO 招财猫打火机","category_id":8,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765872628921136000.jpg\"]","price":26900,"stock":9999,"sales":0,"status":1},{"id":199,"name":"ZIPPO 经典黑裂漆定制打火机","category_id":8,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765872449667519000.jpg\"]","price":21900,"stock":9999,"sales":0,"status":1},{"id":198,"name":"ZIPPO 步步高升打火机","category_id":8,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765872312650382500.jpg\"]","price":18300,"stock":999,"sales":0,"status":1},{"id":197,"name":"ZIPPO 秋水含睛打火机","category_id":8,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765871946370381700.jpg\"]","price":17000,"stock":9999,"sales":0,"status":1},{"id":196,"name":"ZIPPO 经典黑炫冰定制打火机","category_id":8,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765871840986068400.jpg\"]","price":21900,"stock":9999,"sales":0,"status":1},{"id":195,"name":"王者荣耀官方正版【大桥-白鹤梁神女】1:7典藏手办","category_id":7,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765870735671721900.jpg\"]","price":99900,"stock":9999,"sales":0,"status":1},{"id":194,"name":"王者荣耀x康佳联名李白电煮锅 多功能料理锅","category_id":7,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765870440985958300.jpg\"]","price":12000,"stock":9999,"sales":0,"status":1},{"id":193,"name":"王者荣耀x康佳 鲁班联名电热水杯316不锈钢保温杯","category_id":7,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765870093003812000.jpg\"]","price":22500,"stock":9999,"sales":0,"status":1},{"id":192,"name":"王者荣耀官方正版周边【孙尚香-千金重弩】Q版手办","category_id":7,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765869381195810100.jpg\"]","price":18200,"stock":9999,"sales":0,"status":1},{"id":191,"name":"王者荣耀峡谷萌新-峡谷感谢季系列手办盲盒随机款","category_id":7,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765868952997446900.jpg\"]","price":7600,"stock":9999,"sales":0,"status":1},{"id":190,"name":"王者荣耀 心动的王者-假面绮宴主体邀请函套组随机(主题色纸+纪念票根)","category_id":7,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765868228234275600.jpg\"]","price":4300,"stock":9999,"sales":0,"status":1},{"id":189,"name":"王者荣耀 公孙离 惊鸿舞Myethos典藏手办摆件","category_id":7,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765867054597073200.jpg\"]","price":204000,"stock":999,"sales":0,"status":1},{"id":188,"name":"王者荣耀 人鱼之歌 朵利亚 Myethos典藏手办官方正版","category_id":7,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765866846021926900.jpg\"]","price":165000,"stock":9999,"sales":0,"status":1},{"id":187,"name":"王者荣耀X赞尔 蔡文姬 奇迹圣诞音乐水晶球","category_id":7,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765866550110881300.jpg\"]","price":66000,"stock":9999,"sales":0,"status":1},{"id":186,"name":"王者荣耀x万代ROBOT魂零号赤焰孙悟空可动机甲模型手办","category_id":7,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765866368803472700.jpg\"]","price":72900,"stock":9999,"sales":0,"status":1},{"id":185,"name":"王者荣耀官方正版周边【周瑜小乔-纯白花嫁】Q版手办","category_id":7,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765866153156237400.jpg\"]","price":61500,"stock":9999,"sales":0,"status":1},{"id":184,"name":"王者荣耀亚克力书签一套(隐藏款共8个)","category_id":7,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765865957316362700.jpg\"]","price":35000,"stock":9999,"sales":0,"status":1},{"id":183,"name":"王者荣耀正品40cm套装无限王者团棉花娃娃随机款","category_id":7,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765865719308392900.jpg\"]","price":31800,"stock":9999,"sales":0,"status":1},{"id":182,"name":"王者荣耀官方正版 大圣娶亲孙悟空 Q版手办","category_id":7,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765865338690308200.jpg\"]","price":28400,"stock":9999,"sales":0,"status":1},{"id":181,"name":"王者荣耀官方正版 一生所爱露娜 甜蜜组合Q版手办","category_id":7,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765865210058790000.jpg\"]","price":28400,"stock":9999,"sales":0,"status":1},{"id":180,"name":"王者荣耀英雄铠合作款多功能手表装饰穿搭潮流游戏周边","category_id":7,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765865092352107800.jpg\"]","price":29600,"stock":9999,"sales":0,"status":1},{"id":179,"name":"王者荣耀x黄油猫联名款暖手宝充电宝二合一随机款","category_id":7,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765864948813799800.jpg\"]","price":21900,"stock":9999,"sales":0,"status":1},{"id":178,"name":"王者荣耀xNICE FUN 逍遥幻梦庄周 鲲抱枕 半米尺寸","category_id":7,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765864773584950800.jpg\"]","price":14000,"stock":999,"sales":0,"status":1},{"id":177,"name":"王者荣耀官方正版 天籁弦音蔡文姬Q版手办 周边玩具摆件","category_id":7,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765863968816956200.jpg\"]","price":20800,"stock":9999,"sales":0,"status":1},{"id":176,"name":"王者荣耀 棉乖乖系列可爱毛绒挂件公仔棉花娃娃游戏周边","category_id":7,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765863782017506700.jpg\"]","price":7700,"stock":9999,"sales":0,"status":1},{"id":175,"name":"王者荣耀夏侯淳盒蛋公仔游戏周边QQfamily","category_id":7,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765863642672282700.jpg\"]","price":8700,"stock":9999,"sales":0,"status":1},{"id":174,"name":"王者荣耀公孙离绒团毛绒挂件游戏周边NICE FUN","category_id":7,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765863285495146100.jpg\"]","price":6400,"stock":9999,"sales":0,"status":1},{"id":173,"name":"王者荣耀正版NFC手机挂绳(触碰启动王者)","category_id":7,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765863146757914300.jpg\"]","price":3200,"stock":9999,"sales":0,"status":1},{"id":172,"name":"迪士尼(Disney)官方正版暗黑库洛米毛绒玩具65cm","category_id":6,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/15/1765796432217447600.jpg\"]","price":10500,"stock":9999,"sales":0,"status":1}]},"http_code":200,"http_code_msg":"OK","cost_seconds":0.0629145},"third_party_requests":null,"debugs":null,"sqls":[{"time":"2025-12-22 14:46:47","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/router/interceptor/admin_auth.go:43","sql":"SELECT * FROM `admin` WHERE `admin`.`id` = 2 ORDER BY `admin`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.0196045},{"time":"2025-12-22 14:46:47","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/service/product/product.go:233","sql":"SELECT count(*) FROM `products` WHERE deleted_at IS NULL AND `products`.`deleted_at` IS NULL","rows_affected":1,"cost_seconds":0.011431166},{"time":"2025-12-22 14:46:47","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/service/product/product.go:237","sql":"SELECT * FROM `products` WHERE deleted_at IS NULL AND `products`.`deleted_at` IS NULL ORDER BY `products`.`id` DESC LIMIT 100","rows_affected":100,"cost_seconds":0.030948375}],"redis":null,"mongos":null,"success":true,"cost_seconds":0.062914958}} +{"level":"info","time":"2025-12-22 14:47:45","caller":"logger/logger.go:309","msg":"trace-log","domain":"mini-chat[fat]","method":"PUT","path":"/api/admin/activities/64/issues/71/rewards/247","http_code":200,"business_code":0,"success":true,"cost_seconds":0.078286459,"trace_id":"2002994449042378752","trace_info":{"trace_id":"2002994449042378752","request":{"ttl":"un-limit","method":"PUT","decoded_url":"/api/admin/activities/64/issues/71/rewards/247","header":{"Content-Type":"application/json"},"body":"{\"product_id\":0,\"weight\":0,\"quantity\":3,\"original_qty\":3,\"level\":0,\"sort\":11,\"is_boss\":1,\"name\":\"终极大奖-45对\",\"min_score\":1}"},"response":{"header":{"Access-Control-Allow-Credentials":["true"],"Access-Control-Allow-Origin":["*"],"Content-Type":["application/json; charset=utf-8"],"Trace-Id":["2002994449042378752"],"Vary":["Origin"]},"body":{"message":"操作成功"},"http_code":200,"http_code_msg":"OK","cost_seconds":0.078286167},"third_party_requests":null,"debugs":null,"sqls":[{"time":"2025-12-22 14:47:45","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/router/interceptor/admin_auth.go:43","sql":"SELECT * FROM `admin` WHERE `admin`.`id` = 2 ORDER BY `admin`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.016812916},{"time":"2025-12-22 14:47:45","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/service/activity/rewards_modify.go:14","sql":"SELECT * FROM `activity_reward_settings` WHERE `activity_reward_settings`.`id` = 247 AND deleted_at IS NULL AND `activity_reward_settings`.`deleted_at` IS NULL ORDER BY `activity_reward_settings`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.020226209},{"time":"2025-12-22 14:47:45","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/service/activity/rewards_modify.go:46","sql":"INSERT INTO `activity_reward_settings` (`issue_id`,`product_id`,`name`,`weight`,`quantity`,`original_qty`,`level`,`sort`,`is_boss`,`min_score`,`deleted_at`,`id`,`created_at`,`updated_at`) VALUES (71,0,'终极大奖-45对',0,3,3,0,11,1,1,NULL,247,'2025-12-22 11:09:07.96','2025-12-22 14:47:45.184') ON DUPLICATE KEY UPDATE `issue_id`=VALUES(`issue_id`),`product_id`=VALUES(`product_id`),`name`=VALUES(`name`),`weight`=VALUES(`weight`),`quantity`=VALUES(`quantity`),`original_qty`=VALUES(`original_qty`),`level`=VALUES(`level`),`sort`=VALUES(`sort`),`is_boss`=VALUES(`is_boss`),`min_score`=VALUES(`min_score`),`deleted_at`=VALUES(`deleted_at`)","rows_affected":2,"cost_seconds":0.030702666}],"redis":null,"mongos":null,"success":true,"cost_seconds":0.078286459}} +{"level":"info","time":"2025-12-22 14:47:45","caller":"logger/logger.go:309","msg":"trace-log","domain":"mini-chat[fat]","method":"GET","path":"/api/admin/activities/64/issues/71/rewards","http_code":200,"business_code":0,"success":true,"cost_seconds":0.044207792,"trace_id":"2002994449742827520","trace_info":{"trace_id":"2002994449742827520","request":{"ttl":"un-limit","method":"GET","decoded_url":"/api/admin/activities/64/issues/71/rewards","header":{"Content-Type":""},"body":""},"response":{"header":{"Content-Type":["application/json; charset=utf-8"],"Trace-Id":["2002994449742827520"],"Vary":["Origin"]},"body":{"list":[{"id":237,"product_id":0,"name":"参与奖-5对","weight":0,"quantity":98,"original_qty":100,"level":10,"sort":1,"is_boss":0,"min_score":5},{"id":238,"product_id":0,"name":"参与奖-10对","weight":0,"quantity":100,"original_qty":100,"level":9,"sort":2,"is_boss":0,"min_score":10},{"id":239,"product_id":0,"name":"铜奖-15对","weight":0,"quantity":50,"original_qty":50,"level":8,"sort":3,"is_boss":0,"min_score":15},{"id":240,"product_id":0,"name":"铜奖-20对","weight":0,"quantity":50,"original_qty":50,"level":7,"sort":4,"is_boss":0,"min_score":20},{"id":241,"product_id":0,"name":"银奖-25对","weight":0,"quantity":30,"original_qty":30,"level":6,"sort":5,"is_boss":0,"min_score":25},{"id":242,"product_id":0,"name":"银奖-30对","weight":0,"quantity":30,"original_qty":30,"level":5,"sort":6,"is_boss":0,"min_score":30},{"id":243,"product_id":0,"name":"金奖-35对","weight":0,"quantity":20,"original_qty":20,"level":4,"sort":7,"is_boss":0,"min_score":35},{"id":244,"product_id":0,"name":"金奖-40对","weight":0,"quantity":20,"original_qty":20,"level":3,"sort":8,"is_boss":0,"min_score":40},{"id":245,"product_id":0,"name":"特等奖-42对","weight":0,"quantity":10,"original_qty":10,"level":2,"sort":9,"is_boss":0,"min_score":42},{"id":246,"product_id":0,"name":"特等奖-44对","weight":0,"quantity":5,"original_qty":5,"level":1,"sort":10,"is_boss":0,"min_score":44},{"id":247,"product_id":0,"name":"终极大奖-45对","weight":0,"quantity":3,"original_qty":3,"level":0,"sort":11,"is_boss":1,"min_score":1}]},"http_code":200,"http_code_msg":"OK","cost_seconds":0.044207334},"third_party_requests":null,"debugs":null,"sqls":[{"time":"2025-12-22 14:47:45","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/router/interceptor/admin_auth.go:43","sql":"SELECT * FROM `admin` WHERE `admin`.`id` = 2 ORDER BY `admin`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.022644875},{"time":"2025-12-22 14:47:45","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/service/activity/rewards_list.go:13","sql":"SELECT * FROM `activity_reward_settings` WHERE `activity_reward_settings`.`issue_id` = 71 AND deleted_at IS NULL AND `activity_reward_settings`.`deleted_at` IS NULL ORDER BY `activity_reward_settings`.`sort` ASC","rows_affected":11,"cost_seconds":0.020831333}],"redis":null,"mongos":null,"success":true,"cost_seconds":0.044207792}} +{"level":"info","time":"2025-12-22 14:47:45","caller":"logger/logger.go:309","msg":"trace-log","domain":"mini-chat[fat]","method":"GET","path":"/api/admin/activities/64/issues?page=1&page_size=20","http_code":200,"business_code":0,"success":true,"cost_seconds":0.089514375,"trace_id":"2002994450359390208","trace_info":{"trace_id":"2002994450359390208","request":{"ttl":"un-limit","method":"GET","decoded_url":"/api/admin/activities/64/issues?page=1&page_size=20","header":{"Content-Type":""},"body":""},"response":{"header":{"Content-Type":["application/json; charset=utf-8"],"Trace-Id":["2002994450359390208"],"Vary":["Origin"]},"body":{"page":1,"page_size":20,"total":1,"list":[{"id":71,"issue_number":"1","status":1,"sort":1,"prize_count":11}]},"http_code":200,"http_code_msg":"OK","cost_seconds":0.089514125},"third_party_requests":null,"debugs":null,"sqls":[{"time":"2025-12-22 14:47:45","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/router/interceptor/admin_auth.go:43","sql":"SELECT * FROM `admin` WHERE `admin`.`id` = 2 ORDER BY `admin`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.025085417},{"time":"2025-12-22 14:47:45","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/service/activity/issues_list.go:14","sql":"SELECT count(*) FROM `activity_issues` WHERE `activity_issues`.`activity_id` = 64 AND `activity_issues`.`status` <> 2 AND deleted_at IS NULL AND `activity_issues`.`deleted_at` IS NULL","rows_affected":1,"cost_seconds":0.02107875},{"time":"2025-12-22 14:47:45","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/service/activity/issues_list.go:27","sql":"SELECT * FROM `activity_issues` WHERE `activity_issues`.`activity_id` = 64 AND `activity_issues`.`status` <> 2 AND deleted_at IS NULL AND `activity_issues`.`deleted_at` IS NULL ORDER BY `activity_issues`.`sort` DESC LIMIT 20","rows_affected":1,"cost_seconds":0.019368458},{"time":"2025-12-22 14:47:45","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/api/admin/issues_admin.go:76","sql":"SELECT count(*) FROM `activity_reward_settings` WHERE `activity_reward_settings`.`issue_id` = 71 AND deleted_at IS NULL AND `activity_reward_settings`.`deleted_at` IS NULL","rows_affected":1,"cost_seconds":0.023622875}],"redis":null,"mongos":null,"success":true,"cost_seconds":0.089514375}} +{"level":"info","time":"2025-12-22 14:47:51","caller":"logger/logger.go:309","msg":"trace-log","domain":"mini-chat[fat]","method":"PUT","path":"/api/admin/activities/64/issues/71/rewards/246","http_code":200,"business_code":0,"success":true,"cost_seconds":0.083327083,"trace_id":"2002994473516142592","trace_info":{"trace_id":"2002994473516142592","request":{"ttl":"un-limit","method":"PUT","decoded_url":"/api/admin/activities/64/issues/71/rewards/246","header":{"Content-Type":"application/json"},"body":"{\"product_id\":0,\"weight\":0,\"quantity\":5,\"original_qty\":5,\"level\":1,\"sort\":10,\"is_boss\":0,\"name\":\"特等奖-44对\",\"min_score\":2}"},"response":{"header":{"Access-Control-Allow-Credentials":["true"],"Access-Control-Allow-Origin":["*"],"Content-Type":["application/json; charset=utf-8"],"Trace-Id":["2002994473516142592"],"Vary":["Origin"]},"body":{"message":"操作成功"},"http_code":200,"http_code_msg":"OK","cost_seconds":0.083322916},"third_party_requests":null,"debugs":null,"sqls":[{"time":"2025-12-22 14:47:50","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/router/interceptor/admin_auth.go:43","sql":"SELECT * FROM `admin` WHERE `admin`.`id` = 2 ORDER BY `admin`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.017393833},{"time":"2025-12-22 14:47:51","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/service/activity/rewards_modify.go:14","sql":"SELECT * FROM `activity_reward_settings` WHERE `activity_reward_settings`.`id` = 246 AND deleted_at IS NULL AND `activity_reward_settings`.`deleted_at` IS NULL ORDER BY `activity_reward_settings`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.019649375},{"time":"2025-12-22 14:47:51","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/service/activity/rewards_modify.go:46","sql":"INSERT INTO `activity_reward_settings` (`issue_id`,`product_id`,`name`,`weight`,`quantity`,`original_qty`,`level`,`sort`,`is_boss`,`min_score`,`deleted_at`,`id`,`created_at`,`updated_at`) VALUES (71,0,'特等奖-44对',0,5,5,1,10,0,2,NULL,246,'2025-12-22 11:09:07.96','2025-12-22 14:47:51.019') ON DUPLICATE KEY UPDATE `issue_id`=VALUES(`issue_id`),`product_id`=VALUES(`product_id`),`name`=VALUES(`name`),`weight`=VALUES(`weight`),`quantity`=VALUES(`quantity`),`original_qty`=VALUES(`original_qty`),`level`=VALUES(`level`),`sort`=VALUES(`sort`),`is_boss`=VALUES(`is_boss`),`min_score`=VALUES(`min_score`),`deleted_at`=VALUES(`deleted_at`)","rows_affected":2,"cost_seconds":0.037278417}],"redis":null,"mongos":null,"success":true,"cost_seconds":0.083327083}} +{"level":"info","time":"2025-12-22 14:47:51","caller":"logger/logger.go:309","msg":"trace-log","domain":"mini-chat[fat]","method":"GET","path":"/api/admin/activities/64/issues/71/rewards","http_code":200,"business_code":0,"success":true,"cost_seconds":0.037098125,"trace_id":"2002994474233368576","trace_info":{"trace_id":"2002994474233368576","request":{"ttl":"un-limit","method":"GET","decoded_url":"/api/admin/activities/64/issues/71/rewards","header":{"Content-Type":""},"body":""},"response":{"header":{"Content-Type":["application/json; charset=utf-8"],"Trace-Id":["2002994474233368576"],"Vary":["Origin"]},"body":{"list":[{"id":237,"product_id":0,"name":"参与奖-5对","weight":0,"quantity":98,"original_qty":100,"level":10,"sort":1,"is_boss":0,"min_score":5},{"id":238,"product_id":0,"name":"参与奖-10对","weight":0,"quantity":100,"original_qty":100,"level":9,"sort":2,"is_boss":0,"min_score":10},{"id":239,"product_id":0,"name":"铜奖-15对","weight":0,"quantity":50,"original_qty":50,"level":8,"sort":3,"is_boss":0,"min_score":15},{"id":240,"product_id":0,"name":"铜奖-20对","weight":0,"quantity":50,"original_qty":50,"level":7,"sort":4,"is_boss":0,"min_score":20},{"id":241,"product_id":0,"name":"银奖-25对","weight":0,"quantity":30,"original_qty":30,"level":6,"sort":5,"is_boss":0,"min_score":25},{"id":242,"product_id":0,"name":"银奖-30对","weight":0,"quantity":30,"original_qty":30,"level":5,"sort":6,"is_boss":0,"min_score":30},{"id":243,"product_id":0,"name":"金奖-35对","weight":0,"quantity":20,"original_qty":20,"level":4,"sort":7,"is_boss":0,"min_score":35},{"id":244,"product_id":0,"name":"金奖-40对","weight":0,"quantity":20,"original_qty":20,"level":3,"sort":8,"is_boss":0,"min_score":40},{"id":245,"product_id":0,"name":"特等奖-42对","weight":0,"quantity":10,"original_qty":10,"level":2,"sort":9,"is_boss":0,"min_score":42},{"id":246,"product_id":0,"name":"特等奖-44对","weight":0,"quantity":5,"original_qty":5,"level":1,"sort":10,"is_boss":0,"min_score":2},{"id":247,"product_id":0,"name":"终极大奖-45对","weight":0,"quantity":3,"original_qty":3,"level":0,"sort":11,"is_boss":1,"min_score":1}]},"http_code":200,"http_code_msg":"OK","cost_seconds":0.037097667},"third_party_requests":null,"debugs":null,"sqls":[{"time":"2025-12-22 14:47:51","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/router/interceptor/admin_auth.go:43","sql":"SELECT * FROM `admin` WHERE `admin`.`id` = 2 ORDER BY `admin`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.016904208},{"time":"2025-12-22 14:47:51","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/service/activity/rewards_list.go:13","sql":"SELECT * FROM `activity_reward_settings` WHERE `activity_reward_settings`.`issue_id` = 71 AND deleted_at IS NULL AND `activity_reward_settings`.`deleted_at` IS NULL ORDER BY `activity_reward_settings`.`sort` ASC","rows_affected":11,"cost_seconds":0.0195735}],"redis":null,"mongos":null,"success":true,"cost_seconds":0.037098125}} +{"level":"info","time":"2025-12-22 14:47:51","caller":"logger/logger.go:309","msg":"trace-log","domain":"mini-chat[fat]","method":"GET","path":"/api/admin/activities/64/issues?page=1&page_size=20","http_code":200,"business_code":0,"success":true,"cost_seconds":0.084943291,"trace_id":"2002994474812182528","trace_info":{"trace_id":"2002994474812182528","request":{"ttl":"un-limit","method":"GET","decoded_url":"/api/admin/activities/64/issues?page=1&page_size=20","header":{"Content-Type":""},"body":""},"response":{"header":{"Content-Type":["application/json; charset=utf-8"],"Trace-Id":["2002994474812182528"],"Vary":["Origin"]},"body":{"page":1,"page_size":20,"total":1,"list":[{"id":71,"issue_number":"1","status":1,"sort":1,"prize_count":11}]},"http_code":200,"http_code_msg":"OK","cost_seconds":0.08494275},"third_party_requests":null,"debugs":null,"sqls":[{"time":"2025-12-22 14:47:51","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/router/interceptor/admin_auth.go:43","sql":"SELECT * FROM `admin` WHERE `admin`.`id` = 2 ORDER BY `admin`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.018577708},{"time":"2025-12-22 14:47:51","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/service/activity/issues_list.go:14","sql":"SELECT count(*) FROM `activity_issues` WHERE `activity_issues`.`activity_id` = 64 AND `activity_issues`.`status` <> 2 AND deleted_at IS NULL AND `activity_issues`.`deleted_at` IS NULL","rows_affected":1,"cost_seconds":0.0232555},{"time":"2025-12-22 14:47:51","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/service/activity/issues_list.go:27","sql":"SELECT * FROM `activity_issues` WHERE `activity_issues`.`activity_id` = 64 AND `activity_issues`.`status` <> 2 AND deleted_at IS NULL AND `activity_issues`.`deleted_at` IS NULL ORDER BY `activity_issues`.`sort` DESC LIMIT 20","rows_affected":1,"cost_seconds":0.019336042},{"time":"2025-12-22 14:47:51","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/api/admin/issues_admin.go:76","sql":"SELECT count(*) FROM `activity_reward_settings` WHERE `activity_reward_settings`.`issue_id` = 71 AND deleted_at IS NULL AND `activity_reward_settings`.`deleted_at` IS NULL","rows_affected":1,"cost_seconds":0.023432583}],"redis":null,"mongos":null,"success":true,"cost_seconds":0.084943291}} +{"level":"info","time":"2025-12-22 14:47:54","caller":"logger/logger.go:309","msg":"trace-log","domain":"mini-chat[fat]","method":"PUT","path":"/api/admin/activities/64/issues/71/rewards/245","http_code":200,"business_code":0,"success":true,"cost_seconds":0.093352166,"trace_id":"2002994489693573120","trace_info":{"trace_id":"2002994489693573120","request":{"ttl":"un-limit","method":"PUT","decoded_url":"/api/admin/activities/64/issues/71/rewards/245","header":{"Content-Type":"application/json"},"body":"{\"product_id\":0,\"weight\":0,\"quantity\":10,\"original_qty\":10,\"level\":2,\"sort\":9,\"is_boss\":0,\"name\":\"特等奖-42对\",\"min_score\":3}"},"response":{"header":{"Access-Control-Allow-Credentials":["true"],"Access-Control-Allow-Origin":["*"],"Content-Type":["application/json; charset=utf-8"],"Trace-Id":["2002994489693573120"],"Vary":["Origin"]},"body":{"message":"操作成功"},"http_code":200,"http_code_msg":"OK","cost_seconds":0.093351708},"third_party_requests":null,"debugs":null,"sqls":[{"time":"2025-12-22 14:47:54","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/router/interceptor/admin_auth.go:43","sql":"SELECT * FROM `admin` WHERE `admin`.`id` = 2 ORDER BY `admin`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.027601834},{"time":"2025-12-22 14:47:54","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/service/activity/rewards_modify.go:14","sql":"SELECT * FROM `activity_reward_settings` WHERE `activity_reward_settings`.`id` = 245 AND deleted_at IS NULL AND `activity_reward_settings`.`deleted_at` IS NULL ORDER BY `activity_reward_settings`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.020167042},{"time":"2025-12-22 14:47:54","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/service/activity/rewards_modify.go:46","sql":"INSERT INTO `activity_reward_settings` (`issue_id`,`product_id`,`name`,`weight`,`quantity`,`original_qty`,`level`,`sort`,`is_boss`,`min_score`,`deleted_at`,`id`,`created_at`,`updated_at`) VALUES (71,0,'特等奖-42对',0,10,10,2,9,0,3,NULL,245,'2025-12-22 11:09:07.96','2025-12-22 14:47:54.887') ON DUPLICATE KEY UPDATE `issue_id`=VALUES(`issue_id`),`product_id`=VALUES(`product_id`),`name`=VALUES(`name`),`weight`=VALUES(`weight`),`quantity`=VALUES(`quantity`),`original_qty`=VALUES(`original_qty`),`level`=VALUES(`level`),`sort`=VALUES(`sort`),`is_boss`=VALUES(`is_boss`),`min_score`=VALUES(`min_score`),`deleted_at`=VALUES(`deleted_at`)","rows_affected":2,"cost_seconds":0.036482875}],"redis":null,"mongos":null,"success":true,"cost_seconds":0.093352166}} +{"level":"info","time":"2025-12-22 14:47:55","caller":"logger/logger.go:309","msg":"trace-log","domain":"mini-chat[fat]","method":"GET","path":"/api/admin/activities/64/issues/71/rewards","http_code":200,"business_code":0,"success":true,"cost_seconds":0.056694709,"trace_id":"2002994490461130752","trace_info":{"trace_id":"2002994490461130752","request":{"ttl":"un-limit","method":"GET","decoded_url":"/api/admin/activities/64/issues/71/rewards","header":{"Content-Type":""},"body":""},"response":{"header":{"Content-Type":["application/json; charset=utf-8"],"Trace-Id":["2002994490461130752"],"Vary":["Origin"]},"body":{"list":[{"id":237,"product_id":0,"name":"参与奖-5对","weight":0,"quantity":98,"original_qty":100,"level":10,"sort":1,"is_boss":0,"min_score":5},{"id":238,"product_id":0,"name":"参与奖-10对","weight":0,"quantity":100,"original_qty":100,"level":9,"sort":2,"is_boss":0,"min_score":10},{"id":239,"product_id":0,"name":"铜奖-15对","weight":0,"quantity":50,"original_qty":50,"level":8,"sort":3,"is_boss":0,"min_score":15},{"id":240,"product_id":0,"name":"铜奖-20对","weight":0,"quantity":50,"original_qty":50,"level":7,"sort":4,"is_boss":0,"min_score":20},{"id":241,"product_id":0,"name":"银奖-25对","weight":0,"quantity":30,"original_qty":30,"level":6,"sort":5,"is_boss":0,"min_score":25},{"id":242,"product_id":0,"name":"银奖-30对","weight":0,"quantity":30,"original_qty":30,"level":5,"sort":6,"is_boss":0,"min_score":30},{"id":243,"product_id":0,"name":"金奖-35对","weight":0,"quantity":20,"original_qty":20,"level":4,"sort":7,"is_boss":0,"min_score":35},{"id":244,"product_id":0,"name":"金奖-40对","weight":0,"quantity":20,"original_qty":20,"level":3,"sort":8,"is_boss":0,"min_score":40},{"id":245,"product_id":0,"name":"特等奖-42对","weight":0,"quantity":10,"original_qty":10,"level":2,"sort":9,"is_boss":0,"min_score":3},{"id":246,"product_id":0,"name":"特等奖-44对","weight":0,"quantity":5,"original_qty":5,"level":1,"sort":10,"is_boss":0,"min_score":2},{"id":247,"product_id":0,"name":"终极大奖-45对","weight":0,"quantity":3,"original_qty":3,"level":0,"sort":11,"is_boss":1,"min_score":1}]},"http_code":200,"http_code_msg":"OK","cost_seconds":0.056694084},"third_party_requests":null,"debugs":null,"sqls":[{"time":"2025-12-22 14:47:55","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/router/interceptor/admin_auth.go:43","sql":"SELECT * FROM `admin` WHERE `admin`.`id` = 2 ORDER BY `admin`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.021320958},{"time":"2025-12-22 14:47:55","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/service/activity/rewards_list.go:13","sql":"SELECT * FROM `activity_reward_settings` WHERE `activity_reward_settings`.`issue_id` = 71 AND deleted_at IS NULL AND `activity_reward_settings`.`deleted_at` IS NULL ORDER BY `activity_reward_settings`.`sort` ASC","rows_affected":11,"cost_seconds":0.034515916}],"redis":null,"mongos":null,"success":true,"cost_seconds":0.056694709}} +{"level":"info","time":"2025-12-22 14:47:55","caller":"logger/logger.go:309","msg":"trace-log","domain":"mini-chat[fat]","method":"GET","path":"/api/admin/activities/64/issues?page=1&page_size=20","http_code":200,"business_code":0,"success":true,"cost_seconds":0.081425625,"trace_id":"2002994491060916224","trace_info":{"trace_id":"2002994491060916224","request":{"ttl":"un-limit","method":"GET","decoded_url":"/api/admin/activities/64/issues?page=1&page_size=20","header":{"Content-Type":""},"body":""},"response":{"header":{"Content-Type":["application/json; charset=utf-8"],"Trace-Id":["2002994491060916224"],"Vary":["Origin"]},"body":{"page":1,"page_size":20,"total":1,"list":[{"id":71,"issue_number":"1","status":1,"sort":1,"prize_count":11}]},"http_code":200,"http_code_msg":"OK","cost_seconds":0.081425208},"third_party_requests":null,"debugs":null,"sqls":[{"time":"2025-12-22 14:47:55","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/router/interceptor/admin_auth.go:43","sql":"SELECT * FROM `admin` WHERE `admin`.`id` = 2 ORDER BY `admin`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.019418584},{"time":"2025-12-22 14:47:55","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/service/activity/issues_list.go:14","sql":"SELECT count(*) FROM `activity_issues` WHERE `activity_issues`.`activity_id` = 64 AND `activity_issues`.`status` <> 2 AND deleted_at IS NULL AND `activity_issues`.`deleted_at` IS NULL","rows_affected":1,"cost_seconds":0.022097875},{"time":"2025-12-22 14:47:55","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/service/activity/issues_list.go:27","sql":"SELECT * FROM `activity_issues` WHERE `activity_issues`.`activity_id` = 64 AND `activity_issues`.`status` <> 2 AND deleted_at IS NULL AND `activity_issues`.`deleted_at` IS NULL ORDER BY `activity_issues`.`sort` DESC LIMIT 20","rows_affected":1,"cost_seconds":0.019242667},{"time":"2025-12-22 14:47:55","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/api/admin/issues_admin.go:76","sql":"SELECT count(*) FROM `activity_reward_settings` WHERE `activity_reward_settings`.`issue_id` = 71 AND deleted_at IS NULL AND `activity_reward_settings`.`deleted_at` IS NULL","rows_affected":1,"cost_seconds":0.020282542}],"redis":null,"mongos":null,"success":true,"cost_seconds":0.081425625}} +{"level":"info","time":"2025-12-22 14:48:00","caller":"logger/logger.go:309","msg":"trace-log","domain":"mini-chat[fat]","method":"PUT","path":"/api/admin/activities/64/issues/71/rewards/244","http_code":200,"business_code":0,"success":true,"cost_seconds":0.08424,"trace_id":"2002994511726252032","trace_info":{"trace_id":"2002994511726252032","request":{"ttl":"un-limit","method":"PUT","decoded_url":"/api/admin/activities/64/issues/71/rewards/244","header":{"Content-Type":"application/json"},"body":"{\"product_id\":0,\"weight\":0,\"quantity\":20,\"original_qty\":20,\"level\":3,\"sort\":8,\"is_boss\":0,\"name\":\"金奖-40对\",\"min_score\":4}"},"response":{"header":{"Access-Control-Allow-Credentials":["true"],"Access-Control-Allow-Origin":["*"],"Content-Type":["application/json; charset=utf-8"],"Trace-Id":["2002994511726252032"],"Vary":["Origin"]},"body":{"message":"操作成功"},"http_code":200,"http_code_msg":"OK","cost_seconds":0.0842395},"third_party_requests":null,"debugs":null,"sqls":[{"time":"2025-12-22 14:48:00","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/router/interceptor/admin_auth.go:43","sql":"SELECT * FROM `admin` WHERE `admin`.`id` = 2 ORDER BY `admin`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.01872525},{"time":"2025-12-22 14:48:00","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/service/activity/rewards_modify.go:14","sql":"SELECT * FROM `activity_reward_settings` WHERE `activity_reward_settings`.`id` = 244 AND deleted_at IS NULL AND `activity_reward_settings`.`deleted_at` IS NULL ORDER BY `activity_reward_settings`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.019311875},{"time":"2025-12-22 14:48:00","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/service/activity/rewards_modify.go:46","sql":"INSERT INTO `activity_reward_settings` (`issue_id`,`product_id`,`name`,`weight`,`quantity`,`original_qty`,`level`,`sort`,`is_boss`,`min_score`,`deleted_at`,`id`,`created_at`,`updated_at`) VALUES (71,0,'金奖-40对',0,20,20,3,8,0,4,NULL,244,'2025-12-22 11:09:07.96','2025-12-22 14:48:00.129') ON DUPLICATE KEY UPDATE `issue_id`=VALUES(`issue_id`),`product_id`=VALUES(`product_id`),`name`=VALUES(`name`),`weight`=VALUES(`weight`),`quantity`=VALUES(`quantity`),`original_qty`=VALUES(`original_qty`),`level`=VALUES(`level`),`sort`=VALUES(`sort`),`is_boss`=VALUES(`is_boss`),`min_score`=VALUES(`min_score`),`deleted_at`=VALUES(`deleted_at`)","rows_affected":2,"cost_seconds":0.037825708}],"redis":null,"mongos":null,"success":true,"cost_seconds":0.08424}} +{"level":"info","time":"2025-12-22 14:48:00","caller":"logger/logger.go:309","msg":"trace-log","domain":"mini-chat[fat]","method":"GET","path":"/api/admin/activities/64/issues/71/rewards","http_code":200,"business_code":0,"success":true,"cost_seconds":0.040949,"trace_id":"2002994512468643840","trace_info":{"trace_id":"2002994512468643840","request":{"ttl":"un-limit","method":"GET","decoded_url":"/api/admin/activities/64/issues/71/rewards","header":{"Content-Type":""},"body":""},"response":{"header":{"Content-Type":["application/json; charset=utf-8"],"Trace-Id":["2002994512468643840"],"Vary":["Origin"]},"body":{"list":[{"id":237,"product_id":0,"name":"参与奖-5对","weight":0,"quantity":98,"original_qty":100,"level":10,"sort":1,"is_boss":0,"min_score":5},{"id":238,"product_id":0,"name":"参与奖-10对","weight":0,"quantity":100,"original_qty":100,"level":9,"sort":2,"is_boss":0,"min_score":10},{"id":239,"product_id":0,"name":"铜奖-15对","weight":0,"quantity":50,"original_qty":50,"level":8,"sort":3,"is_boss":0,"min_score":15},{"id":240,"product_id":0,"name":"铜奖-20对","weight":0,"quantity":50,"original_qty":50,"level":7,"sort":4,"is_boss":0,"min_score":20},{"id":241,"product_id":0,"name":"银奖-25对","weight":0,"quantity":30,"original_qty":30,"level":6,"sort":5,"is_boss":0,"min_score":25},{"id":242,"product_id":0,"name":"银奖-30对","weight":0,"quantity":30,"original_qty":30,"level":5,"sort":6,"is_boss":0,"min_score":30},{"id":243,"product_id":0,"name":"金奖-35对","weight":0,"quantity":20,"original_qty":20,"level":4,"sort":7,"is_boss":0,"min_score":35},{"id":244,"product_id":0,"name":"金奖-40对","weight":0,"quantity":20,"original_qty":20,"level":3,"sort":8,"is_boss":0,"min_score":4},{"id":245,"product_id":0,"name":"特等奖-42对","weight":0,"quantity":10,"original_qty":10,"level":2,"sort":9,"is_boss":0,"min_score":3},{"id":246,"product_id":0,"name":"特等奖-44对","weight":0,"quantity":5,"original_qty":5,"level":1,"sort":10,"is_boss":0,"min_score":2},{"id":247,"product_id":0,"name":"终极大奖-45对","weight":0,"quantity":3,"original_qty":3,"level":0,"sort":11,"is_boss":1,"min_score":1}]},"http_code":200,"http_code_msg":"OK","cost_seconds":0.0409485},"third_party_requests":null,"debugs":null,"sqls":[{"time":"2025-12-22 14:48:00","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/router/interceptor/admin_auth.go:43","sql":"SELECT * FROM `admin` WHERE `admin`.`id` = 2 ORDER BY `admin`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.018307375},{"time":"2025-12-22 14:48:00","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/service/activity/rewards_list.go:13","sql":"SELECT * FROM `activity_reward_settings` WHERE `activity_reward_settings`.`issue_id` = 71 AND deleted_at IS NULL AND `activity_reward_settings`.`deleted_at` IS NULL ORDER BY `activity_reward_settings`.`sort` ASC","rows_affected":11,"cost_seconds":0.021896}],"redis":null,"mongos":null,"success":true,"cost_seconds":0.040949}} +{"level":"info","time":"2025-12-22 14:48:00","caller":"logger/logger.go:309","msg":"trace-log","domain":"mini-chat[fat]","method":"GET","path":"/api/admin/activities/64/issues?page=1&page_size=20","http_code":200,"business_code":0,"success":true,"cost_seconds":0.085203375,"trace_id":"2002994513085206528","trace_info":{"trace_id":"2002994513085206528","request":{"ttl":"un-limit","method":"GET","decoded_url":"/api/admin/activities/64/issues?page=1&page_size=20","header":{"Content-Type":""},"body":""},"response":{"header":{"Content-Type":["application/json; charset=utf-8"],"Trace-Id":["2002994513085206528"],"Vary":["Origin"]},"body":{"page":1,"page_size":20,"total":1,"list":[{"id":71,"issue_number":"1","status":1,"sort":1,"prize_count":11}]},"http_code":200,"http_code_msg":"OK","cost_seconds":0.085203041},"third_party_requests":null,"debugs":null,"sqls":[{"time":"2025-12-22 14:48:00","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/router/interceptor/admin_auth.go:43","sql":"SELECT * FROM `admin` WHERE `admin`.`id` = 2 ORDER BY `admin`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.018320209},{"time":"2025-12-22 14:48:00","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/service/activity/issues_list.go:14","sql":"SELECT count(*) FROM `activity_issues` WHERE `activity_issues`.`activity_id` = 64 AND `activity_issues`.`status` <> 2 AND deleted_at IS NULL AND `activity_issues`.`deleted_at` IS NULL","rows_affected":1,"cost_seconds":0.023279791},{"time":"2025-12-22 14:48:00","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/service/activity/issues_list.go:27","sql":"SELECT * FROM `activity_issues` WHERE `activity_issues`.`activity_id` = 64 AND `activity_issues`.`status` <> 2 AND deleted_at IS NULL AND `activity_issues`.`deleted_at` IS NULL ORDER BY `activity_issues`.`sort` DESC LIMIT 20","rows_affected":1,"cost_seconds":0.019215917},{"time":"2025-12-22 14:48:00","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/api/admin/issues_admin.go:76","sql":"SELECT count(*) FROM `activity_reward_settings` WHERE `activity_reward_settings`.`issue_id` = 71 AND deleted_at IS NULL AND `activity_reward_settings`.`deleted_at` IS NULL","rows_affected":1,"cost_seconds":0.023537417}],"redis":null,"mongos":null,"success":true,"cost_seconds":0.085203375}} +{"level":"info","time":"2025-12-22 14:48:06","caller":"logger/logger.go:309","msg":"trace-log","domain":"mini-chat[fat]","method":"PUT","path":"/api/admin/activities/64/issues/71/rewards/243","http_code":200,"business_code":0,"success":true,"cost_seconds":0.089041833,"trace_id":"2002994540155244544","trace_info":{"trace_id":"2002994540155244544","request":{"ttl":"un-limit","method":"PUT","decoded_url":"/api/admin/activities/64/issues/71/rewards/243","header":{"Content-Type":"application/json"},"body":"{\"product_id\":0,\"weight\":0,\"quantity\":20,\"original_qty\":20,\"level\":4,\"sort\":7,\"is_boss\":0,\"name\":\"金奖-35对\",\"min_score\":5}"},"response":{"header":{"Access-Control-Allow-Credentials":["true"],"Access-Control-Allow-Origin":["*"],"Content-Type":["application/json; charset=utf-8"],"Trace-Id":["2002994540155244544"],"Vary":["Origin"]},"body":{"message":"操作成功"},"http_code":200,"http_code_msg":"OK","cost_seconds":0.089041},"third_party_requests":null,"debugs":null,"sqls":[{"time":"2025-12-22 14:48:06","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/router/interceptor/admin_auth.go:43","sql":"SELECT * FROM `admin` WHERE `admin`.`id` = 2 ORDER BY `admin`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.023547},{"time":"2025-12-22 14:48:06","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/service/activity/rewards_modify.go:14","sql":"SELECT * FROM `activity_reward_settings` WHERE `activity_reward_settings`.`id` = 243 AND deleted_at IS NULL AND `activity_reward_settings`.`deleted_at` IS NULL ORDER BY `activity_reward_settings`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.019277291},{"time":"2025-12-22 14:48:06","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/service/activity/rewards_modify.go:46","sql":"INSERT INTO `activity_reward_settings` (`issue_id`,`product_id`,`name`,`weight`,`quantity`,`original_qty`,`level`,`sort`,`is_boss`,`min_score`,`deleted_at`,`id`,`created_at`,`updated_at`) VALUES (71,0,'金奖-35对',0,20,20,4,7,0,5,NULL,243,'2025-12-22 11:09:07.96','2025-12-22 14:48:06.912') ON DUPLICATE KEY UPDATE `issue_id`=VALUES(`issue_id`),`product_id`=VALUES(`product_id`),`name`=VALUES(`name`),`weight`=VALUES(`weight`),`quantity`=VALUES(`quantity`),`original_qty`=VALUES(`original_qty`),`level`=VALUES(`level`),`sort`=VALUES(`sort`),`is_boss`=VALUES(`is_boss`),`min_score`=VALUES(`min_score`),`deleted_at`=VALUES(`deleted_at`)","rows_affected":2,"cost_seconds":0.037367875}],"redis":null,"mongos":null,"success":true,"cost_seconds":0.089041833}} +{"level":"info","time":"2025-12-22 14:48:07","caller":"logger/logger.go:309","msg":"trace-log","domain":"mini-chat[fat]","method":"GET","path":"/api/admin/activities/64/issues/71/rewards","http_code":200,"business_code":0,"success":true,"cost_seconds":0.037557875,"trace_id":"2002994540897636352","trace_info":{"trace_id":"2002994540897636352","request":{"ttl":"un-limit","method":"GET","decoded_url":"/api/admin/activities/64/issues/71/rewards","header":{"Content-Type":""},"body":""},"response":{"header":{"Content-Type":["application/json; charset=utf-8"],"Trace-Id":["2002994540897636352"],"Vary":["Origin"]},"body":{"list":[{"id":237,"product_id":0,"name":"参与奖-5对","weight":0,"quantity":98,"original_qty":100,"level":10,"sort":1,"is_boss":0,"min_score":5},{"id":238,"product_id":0,"name":"参与奖-10对","weight":0,"quantity":100,"original_qty":100,"level":9,"sort":2,"is_boss":0,"min_score":10},{"id":239,"product_id":0,"name":"铜奖-15对","weight":0,"quantity":50,"original_qty":50,"level":8,"sort":3,"is_boss":0,"min_score":15},{"id":240,"product_id":0,"name":"铜奖-20对","weight":0,"quantity":50,"original_qty":50,"level":7,"sort":4,"is_boss":0,"min_score":20},{"id":241,"product_id":0,"name":"银奖-25对","weight":0,"quantity":30,"original_qty":30,"level":6,"sort":5,"is_boss":0,"min_score":25},{"id":242,"product_id":0,"name":"银奖-30对","weight":0,"quantity":30,"original_qty":30,"level":5,"sort":6,"is_boss":0,"min_score":30},{"id":243,"product_id":0,"name":"金奖-35对","weight":0,"quantity":20,"original_qty":20,"level":4,"sort":7,"is_boss":0,"min_score":5},{"id":244,"product_id":0,"name":"金奖-40对","weight":0,"quantity":20,"original_qty":20,"level":3,"sort":8,"is_boss":0,"min_score":4},{"id":245,"product_id":0,"name":"特等奖-42对","weight":0,"quantity":10,"original_qty":10,"level":2,"sort":9,"is_boss":0,"min_score":3},{"id":246,"product_id":0,"name":"特等奖-44对","weight":0,"quantity":5,"original_qty":5,"level":1,"sort":10,"is_boss":0,"min_score":2},{"id":247,"product_id":0,"name":"终极大奖-45对","weight":0,"quantity":3,"original_qty":3,"level":0,"sort":11,"is_boss":1,"min_score":1}]},"http_code":200,"http_code_msg":"OK","cost_seconds":0.0375575},"third_party_requests":null,"debugs":null,"sqls":[{"time":"2025-12-22 14:48:07","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/router/interceptor/admin_auth.go:43","sql":"SELECT * FROM `admin` WHERE `admin`.`id` = 2 ORDER BY `admin`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.017566458},{"time":"2025-12-22 14:48:07","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/service/activity/rewards_list.go:13","sql":"SELECT * FROM `activity_reward_settings` WHERE `activity_reward_settings`.`issue_id` = 71 AND deleted_at IS NULL AND `activity_reward_settings`.`deleted_at` IS NULL ORDER BY `activity_reward_settings`.`sort` ASC","rows_affected":11,"cost_seconds":0.019656833}],"redis":null,"mongos":null,"success":true,"cost_seconds":0.037557875}} +{"level":"info","time":"2025-12-22 14:48:07","caller":"logger/logger.go:309","msg":"trace-log","domain":"mini-chat[fat]","method":"GET","path":"/api/admin/activities/64/issues?page=1&page_size=20","http_code":200,"business_code":0,"success":true,"cost_seconds":0.087441959,"trace_id":"2002994541451284480","trace_info":{"trace_id":"2002994541451284480","request":{"ttl":"un-limit","method":"GET","decoded_url":"/api/admin/activities/64/issues?page=1&page_size=20","header":{"Content-Type":""},"body":""},"response":{"header":{"Content-Type":["application/json; charset=utf-8"],"Trace-Id":["2002994541451284480"],"Vary":["Origin"]},"body":{"page":1,"page_size":20,"total":1,"list":[{"id":71,"issue_number":"1","status":1,"sort":1,"prize_count":11}]},"http_code":200,"http_code_msg":"OK","cost_seconds":0.087441667},"third_party_requests":null,"debugs":null,"sqls":[{"time":"2025-12-22 14:48:07","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/router/interceptor/admin_auth.go:43","sql":"SELECT * FROM `admin` WHERE `admin`.`id` = 2 ORDER BY `admin`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.017921791},{"time":"2025-12-22 14:48:07","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/service/activity/issues_list.go:14","sql":"SELECT count(*) FROM `activity_issues` WHERE `activity_issues`.`activity_id` = 64 AND `activity_issues`.`status` <> 2 AND deleted_at IS NULL AND `activity_issues`.`deleted_at` IS NULL","rows_affected":1,"cost_seconds":0.023347708},{"time":"2025-12-22 14:48:07","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/service/activity/issues_list.go:27","sql":"SELECT * FROM `activity_issues` WHERE `activity_issues`.`activity_id` = 64 AND `activity_issues`.`status` <> 2 AND deleted_at IS NULL AND `activity_issues`.`deleted_at` IS NULL ORDER BY `activity_issues`.`sort` DESC LIMIT 20","rows_affected":1,"cost_seconds":0.021037958},{"time":"2025-12-22 14:48:07","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/api/admin/issues_admin.go:76","sql":"SELECT count(*) FROM `activity_reward_settings` WHERE `activity_reward_settings`.`issue_id` = 71 AND deleted_at IS NULL AND `activity_reward_settings`.`deleted_at` IS NULL","rows_affected":1,"cost_seconds":0.024738042}],"redis":null,"mongos":null,"success":true,"cost_seconds":0.087441959}} +{"level":"info","time":"2025-12-22 14:48:11","caller":"logger/logger.go:309","msg":"trace-log","domain":"mini-chat[fat]","method":"PUT","path":"/api/admin/activities/64/issues/71/rewards/242","http_code":200,"business_code":0,"success":true,"cost_seconds":0.08083475,"trace_id":"2002994560875106304","trace_info":{"trace_id":"2002994560875106304","request":{"ttl":"un-limit","method":"PUT","decoded_url":"/api/admin/activities/64/issues/71/rewards/242","header":{"Content-Type":"application/json"},"body":"{\"product_id\":0,\"weight\":0,\"quantity\":30,\"original_qty\":30,\"level\":5,\"sort\":6,\"is_boss\":0,\"name\":\"银奖-30对\",\"min_score\":6}"},"response":{"header":{"Access-Control-Allow-Credentials":["true"],"Access-Control-Allow-Origin":["*"],"Content-Type":["application/json; charset=utf-8"],"Trace-Id":["2002994560875106304"],"Vary":["Origin"]},"body":{"message":"操作成功"},"http_code":200,"http_code_msg":"OK","cost_seconds":0.080833917},"third_party_requests":null,"debugs":null,"sqls":[{"time":"2025-12-22 14:48:11","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/router/interceptor/admin_auth.go:43","sql":"SELECT * FROM `admin` WHERE `admin`.`id` = 2 ORDER BY `admin`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.017822375},{"time":"2025-12-22 14:48:11","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/service/activity/rewards_modify.go:14","sql":"SELECT * FROM `activity_reward_settings` WHERE `activity_reward_settings`.`id` = 242 AND deleted_at IS NULL AND `activity_reward_settings`.`deleted_at` IS NULL ORDER BY `activity_reward_settings`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.019001375},{"time":"2025-12-22 14:48:11","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/service/activity/rewards_modify.go:46","sql":"INSERT INTO `activity_reward_settings` (`issue_id`,`product_id`,`name`,`weight`,`quantity`,`original_qty`,`level`,`sort`,`is_boss`,`min_score`,`deleted_at`,`id`,`created_at`,`updated_at`) VALUES (71,0,'银奖-30对',0,30,30,5,6,0,6,NULL,242,'2025-12-22 11:09:07.96','2025-12-22 14:48:11.846') ON DUPLICATE KEY UPDATE `issue_id`=VALUES(`issue_id`),`product_id`=VALUES(`product_id`),`name`=VALUES(`name`),`weight`=VALUES(`weight`),`quantity`=VALUES(`quantity`),`original_qty`=VALUES(`original_qty`),`level`=VALUES(`level`),`sort`=VALUES(`sort`),`is_boss`=VALUES(`is_boss`),`min_score`=VALUES(`min_score`),`deleted_at`=VALUES(`deleted_at`)","rows_affected":2,"cost_seconds":0.034836958}],"redis":null,"mongos":null,"success":true,"cost_seconds":0.08083475}} +{"level":"info","time":"2025-12-22 14:48:12","caller":"logger/logger.go:309","msg":"trace-log","domain":"mini-chat[fat]","method":"GET","path":"/api/admin/activities/64/issues/71/rewards","http_code":200,"business_code":0,"success":true,"cost_seconds":0.041442625,"trace_id":"2002994561567166464","trace_info":{"trace_id":"2002994561567166464","request":{"ttl":"un-limit","method":"GET","decoded_url":"/api/admin/activities/64/issues/71/rewards","header":{"Content-Type":""},"body":""},"response":{"header":{"Content-Type":["application/json; charset=utf-8"],"Trace-Id":["2002994561567166464"],"Vary":["Origin"]},"body":{"list":[{"id":237,"product_id":0,"name":"参与奖-5对","weight":0,"quantity":98,"original_qty":100,"level":10,"sort":1,"is_boss":0,"min_score":5},{"id":238,"product_id":0,"name":"参与奖-10对","weight":0,"quantity":100,"original_qty":100,"level":9,"sort":2,"is_boss":0,"min_score":10},{"id":239,"product_id":0,"name":"铜奖-15对","weight":0,"quantity":50,"original_qty":50,"level":8,"sort":3,"is_boss":0,"min_score":15},{"id":240,"product_id":0,"name":"铜奖-20对","weight":0,"quantity":50,"original_qty":50,"level":7,"sort":4,"is_boss":0,"min_score":20},{"id":241,"product_id":0,"name":"银奖-25对","weight":0,"quantity":30,"original_qty":30,"level":6,"sort":5,"is_boss":0,"min_score":25},{"id":242,"product_id":0,"name":"银奖-30对","weight":0,"quantity":30,"original_qty":30,"level":5,"sort":6,"is_boss":0,"min_score":6},{"id":243,"product_id":0,"name":"金奖-35对","weight":0,"quantity":20,"original_qty":20,"level":4,"sort":7,"is_boss":0,"min_score":5},{"id":244,"product_id":0,"name":"金奖-40对","weight":0,"quantity":20,"original_qty":20,"level":3,"sort":8,"is_boss":0,"min_score":4},{"id":245,"product_id":0,"name":"特等奖-42对","weight":0,"quantity":10,"original_qty":10,"level":2,"sort":9,"is_boss":0,"min_score":3},{"id":246,"product_id":0,"name":"特等奖-44对","weight":0,"quantity":5,"original_qty":5,"level":1,"sort":10,"is_boss":0,"min_score":2},{"id":247,"product_id":0,"name":"终极大奖-45对","weight":0,"quantity":3,"original_qty":3,"level":0,"sort":11,"is_boss":1,"min_score":1}]},"http_code":200,"http_code_msg":"OK","cost_seconds":0.041442167},"third_party_requests":null,"debugs":null,"sqls":[{"time":"2025-12-22 14:48:11","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/router/interceptor/admin_auth.go:43","sql":"SELECT * FROM `admin` WHERE `admin`.`id` = 2 ORDER BY `admin`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.0210045},{"time":"2025-12-22 14:48:12","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/service/activity/rewards_list.go:13","sql":"SELECT * FROM `activity_reward_settings` WHERE `activity_reward_settings`.`issue_id` = 71 AND deleted_at IS NULL AND `activity_reward_settings`.`deleted_at` IS NULL ORDER BY `activity_reward_settings`.`sort` ASC","rows_affected":11,"cost_seconds":0.019809458}],"redis":null,"mongos":null,"success":true,"cost_seconds":0.041442625}} +{"level":"info","time":"2025-12-22 14:48:12","caller":"logger/logger.go:309","msg":"trace-log","domain":"mini-chat[fat]","method":"GET","path":"/api/admin/activities/64/issues?page=1&page_size=20","http_code":200,"business_code":0,"success":true,"cost_seconds":0.079136625,"trace_id":"2002994562162757632","trace_info":{"trace_id":"2002994562162757632","request":{"ttl":"un-limit","method":"GET","decoded_url":"/api/admin/activities/64/issues?page=1&page_size=20","header":{"Content-Type":""},"body":""},"response":{"header":{"Content-Type":["application/json; charset=utf-8"],"Trace-Id":["2002994562162757632"],"Vary":["Origin"]},"body":{"page":1,"page_size":20,"total":1,"list":[{"id":71,"issue_number":"1","status":1,"sort":1,"prize_count":11}]},"http_code":200,"http_code_msg":"OK","cost_seconds":0.079136125},"third_party_requests":null,"debugs":null,"sqls":[{"time":"2025-12-22 14:48:12","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/router/interceptor/admin_auth.go:43","sql":"SELECT * FROM `admin` WHERE `admin`.`id` = 2 ORDER BY `admin`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.019548334},{"time":"2025-12-22 14:48:12","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/service/activity/issues_list.go:14","sql":"SELECT count(*) FROM `activity_issues` WHERE `activity_issues`.`activity_id` = 64 AND `activity_issues`.`status` <> 2 AND deleted_at IS NULL AND `activity_issues`.`deleted_at` IS NULL","rows_affected":1,"cost_seconds":0.018738834},{"time":"2025-12-22 14:48:12","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/service/activity/issues_list.go:27","sql":"SELECT * FROM `activity_issues` WHERE `activity_issues`.`activity_id` = 64 AND `activity_issues`.`status` <> 2 AND deleted_at IS NULL AND `activity_issues`.`deleted_at` IS NULL ORDER BY `activity_issues`.`sort` DESC LIMIT 20","rows_affected":1,"cost_seconds":0.020680916},{"time":"2025-12-22 14:48:12","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/api/admin/issues_admin.go:76","sql":"SELECT count(*) FROM `activity_reward_settings` WHERE `activity_reward_settings`.`issue_id` = 71 AND deleted_at IS NULL AND `activity_reward_settings`.`deleted_at` IS NULL","rows_affected":1,"cost_seconds":0.019472042}],"redis":null,"mongos":null,"success":true,"cost_seconds":0.079136625}} +{"level":"info","time":"2025-12-22 14:48:16","caller":"logger/logger.go:309","msg":"trace-log","domain":"mini-chat[fat]","method":"PUT","path":"/api/admin/activities/64/issues/71/rewards/241","http_code":200,"business_code":0,"success":true,"cost_seconds":0.088914291,"trace_id":"2002994579850137600","trace_info":{"trace_id":"2002994579850137600","request":{"ttl":"un-limit","method":"PUT","decoded_url":"/api/admin/activities/64/issues/71/rewards/241","header":{"Content-Type":"application/json"},"body":"{\"product_id\":0,\"weight\":0,\"quantity\":30,\"original_qty\":30,\"level\":6,\"sort\":5,\"is_boss\":0,\"name\":\"银奖-25对\",\"min_score\":7}"},"response":{"header":{"Access-Control-Allow-Credentials":["true"],"Access-Control-Allow-Origin":["*"],"Content-Type":["application/json; charset=utf-8"],"Trace-Id":["2002994579850137600"],"Vary":["Origin"]},"body":{"message":"操作成功"},"http_code":200,"http_code_msg":"OK","cost_seconds":0.088913916},"third_party_requests":null,"debugs":null,"sqls":[{"time":"2025-12-22 14:48:16","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/router/interceptor/admin_auth.go:43","sql":"SELECT * FROM `admin` WHERE `admin`.`id` = 2 ORDER BY `admin`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.023063833},{"time":"2025-12-22 14:48:16","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/service/activity/rewards_modify.go:14","sql":"SELECT * FROM `activity_reward_settings` WHERE `activity_reward_settings`.`id` = 241 AND deleted_at IS NULL AND `activity_reward_settings`.`deleted_at` IS NULL ORDER BY `activity_reward_settings`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.019424459},{"time":"2025-12-22 14:48:16","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/service/activity/rewards_modify.go:46","sql":"INSERT INTO `activity_reward_settings` (`issue_id`,`product_id`,`name`,`weight`,`quantity`,`original_qty`,`level`,`sort`,`is_boss`,`min_score`,`deleted_at`,`id`,`created_at`,`updated_at`) VALUES (71,0,'银奖-25对',0,30,30,6,5,0,7,NULL,241,'2025-12-22 11:09:07.96','2025-12-22 14:48:16.376') ON DUPLICATE KEY UPDATE `issue_id`=VALUES(`issue_id`),`product_id`=VALUES(`product_id`),`name`=VALUES(`name`),`weight`=VALUES(`weight`),`quantity`=VALUES(`quantity`),`original_qty`=VALUES(`original_qty`),`level`=VALUES(`level`),`sort`=VALUES(`sort`),`is_boss`=VALUES(`is_boss`),`min_score`=VALUES(`min_score`),`deleted_at`=VALUES(`deleted_at`)","rows_affected":2,"cost_seconds":0.037377459}],"redis":null,"mongos":null,"success":true,"cost_seconds":0.088914291}} +{"level":"info","time":"2025-12-22 14:48:16","caller":"logger/logger.go:309","msg":"trace-log","domain":"mini-chat[fat]","method":"GET","path":"/api/admin/activities/64/issues/71/rewards","http_code":200,"business_code":0,"success":true,"cost_seconds":0.05346625,"trace_id":"2002994580613500928","trace_info":{"trace_id":"2002994580613500928","request":{"ttl":"un-limit","method":"GET","decoded_url":"/api/admin/activities/64/issues/71/rewards","header":{"Content-Type":""},"body":""},"response":{"header":{"Content-Type":["application/json; charset=utf-8"],"Trace-Id":["2002994580613500928"],"Vary":["Origin"]},"body":{"list":[{"id":237,"product_id":0,"name":"参与奖-5对","weight":0,"quantity":98,"original_qty":100,"level":10,"sort":1,"is_boss":0,"min_score":5},{"id":238,"product_id":0,"name":"参与奖-10对","weight":0,"quantity":100,"original_qty":100,"level":9,"sort":2,"is_boss":0,"min_score":10},{"id":239,"product_id":0,"name":"铜奖-15对","weight":0,"quantity":50,"original_qty":50,"level":8,"sort":3,"is_boss":0,"min_score":15},{"id":240,"product_id":0,"name":"铜奖-20对","weight":0,"quantity":50,"original_qty":50,"level":7,"sort":4,"is_boss":0,"min_score":20},{"id":241,"product_id":0,"name":"银奖-25对","weight":0,"quantity":30,"original_qty":30,"level":6,"sort":5,"is_boss":0,"min_score":7},{"id":242,"product_id":0,"name":"银奖-30对","weight":0,"quantity":30,"original_qty":30,"level":5,"sort":6,"is_boss":0,"min_score":6},{"id":243,"product_id":0,"name":"金奖-35对","weight":0,"quantity":20,"original_qty":20,"level":4,"sort":7,"is_boss":0,"min_score":5},{"id":244,"product_id":0,"name":"金奖-40对","weight":0,"quantity":20,"original_qty":20,"level":3,"sort":8,"is_boss":0,"min_score":4},{"id":245,"product_id":0,"name":"特等奖-42对","weight":0,"quantity":10,"original_qty":10,"level":2,"sort":9,"is_boss":0,"min_score":3},{"id":246,"product_id":0,"name":"特等奖-44对","weight":0,"quantity":5,"original_qty":5,"level":1,"sort":10,"is_boss":0,"min_score":2},{"id":247,"product_id":0,"name":"终极大奖-45对","weight":0,"quantity":3,"original_qty":3,"level":0,"sort":11,"is_boss":1,"min_score":1}]},"http_code":200,"http_code_msg":"OK","cost_seconds":0.053465708},"third_party_requests":null,"debugs":null,"sqls":[{"time":"2025-12-22 14:48:16","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/router/interceptor/admin_auth.go:43","sql":"SELECT * FROM `admin` WHERE `admin`.`id` = 2 ORDER BY `admin`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.026083541},{"time":"2025-12-22 14:48:16","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/service/activity/rewards_list.go:13","sql":"SELECT * FROM `activity_reward_settings` WHERE `activity_reward_settings`.`issue_id` = 71 AND deleted_at IS NULL AND `activity_reward_settings`.`deleted_at` IS NULL ORDER BY `activity_reward_settings`.`sort` ASC","rows_affected":11,"cost_seconds":0.026595792}],"redis":null,"mongos":null,"success":true,"cost_seconds":0.05346625}} +{"level":"info","time":"2025-12-22 14:48:16","caller":"logger/logger.go:309","msg":"trace-log","domain":"mini-chat[fat]","method":"GET","path":"/api/admin/activities/64/issues?page=1&page_size=20","http_code":200,"business_code":0,"success":true,"cost_seconds":0.077479792,"trace_id":"2002994581318144000","trace_info":{"trace_id":"2002994581318144000","request":{"ttl":"un-limit","method":"GET","decoded_url":"/api/admin/activities/64/issues?page=1&page_size=20","header":{"Content-Type":""},"body":""},"response":{"header":{"Content-Type":["application/json; charset=utf-8"],"Trace-Id":["2002994581318144000"],"Vary":["Origin"]},"body":{"page":1,"page_size":20,"total":1,"list":[{"id":71,"issue_number":"1","status":1,"sort":1,"prize_count":11}]},"http_code":200,"http_code_msg":"OK","cost_seconds":0.077479458},"third_party_requests":null,"debugs":null,"sqls":[{"time":"2025-12-22 14:48:16","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/router/interceptor/admin_auth.go:43","sql":"SELECT * FROM `admin` WHERE `admin`.`id` = 2 ORDER BY `admin`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.019551167},{"time":"2025-12-22 14:48:16","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/service/activity/issues_list.go:14","sql":"SELECT count(*) FROM `activity_issues` WHERE `activity_issues`.`activity_id` = 64 AND `activity_issues`.`status` <> 2 AND deleted_at IS NULL AND `activity_issues`.`deleted_at` IS NULL","rows_affected":1,"cost_seconds":0.01910975},{"time":"2025-12-22 14:48:16","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/service/activity/issues_list.go:27","sql":"SELECT * FROM `activity_issues` WHERE `activity_issues`.`activity_id` = 64 AND `activity_issues`.`status` <> 2 AND deleted_at IS NULL AND `activity_issues`.`deleted_at` IS NULL ORDER BY `activity_issues`.`sort` DESC LIMIT 20","rows_affected":1,"cost_seconds":0.018975417},{"time":"2025-12-22 14:48:16","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/api/admin/issues_admin.go:76","sql":"SELECT count(*) FROM `activity_reward_settings` WHERE `activity_reward_settings`.`issue_id` = 71 AND deleted_at IS NULL AND `activity_reward_settings`.`deleted_at` IS NULL","rows_affected":1,"cost_seconds":0.019030334}],"redis":null,"mongos":null,"success":true,"cost_seconds":0.077479792}} +{"level":"info","time":"2025-12-22 14:48:21","caller":"logger/logger.go:309","msg":"trace-log","domain":"mini-chat[fat]","method":"PUT","path":"/api/admin/activities/64/issues/71/rewards/240","http_code":200,"business_code":0,"success":true,"cost_seconds":0.087613417,"trace_id":"2002994599735332864","trace_info":{"trace_id":"2002994599735332864","request":{"ttl":"un-limit","method":"PUT","decoded_url":"/api/admin/activities/64/issues/71/rewards/240","header":{"Content-Type":"application/json"},"body":"{\"product_id\":0,\"weight\":0,\"quantity\":50,\"original_qty\":50,\"level\":7,\"sort\":4,\"is_boss\":0,\"name\":\"铜奖-20对\",\"min_score\":8}"},"response":{"header":{"Access-Control-Allow-Credentials":["true"],"Access-Control-Allow-Origin":["*"],"Content-Type":["application/json; charset=utf-8"],"Trace-Id":["2002994599735332864"],"Vary":["Origin"]},"body":{"message":"操作成功"},"http_code":200,"http_code_msg":"OK","cost_seconds":0.087613042},"third_party_requests":null,"debugs":null,"sqls":[{"time":"2025-12-22 14:48:21","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/router/interceptor/admin_auth.go:43","sql":"SELECT * FROM `admin` WHERE `admin`.`id` = 2 ORDER BY `admin`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.028036},{"time":"2025-12-22 14:48:21","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/service/activity/rewards_modify.go:14","sql":"SELECT * FROM `activity_reward_settings` WHERE `activity_reward_settings`.`id` = 240 AND deleted_at IS NULL AND `activity_reward_settings`.`deleted_at` IS NULL ORDER BY `activity_reward_settings`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.019006542},{"time":"2025-12-22 14:48:21","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/service/activity/rewards_modify.go:46","sql":"INSERT INTO `activity_reward_settings` (`issue_id`,`product_id`,`name`,`weight`,`quantity`,`original_qty`,`level`,`sort`,`is_boss`,`min_score`,`deleted_at`,`id`,`created_at`,`updated_at`) VALUES (71,0,'铜奖-20对',0,50,50,7,4,0,8,NULL,240,'2025-12-22 11:09:07.96','2025-12-22 14:48:21.121') ON DUPLICATE KEY UPDATE `issue_id`=VALUES(`issue_id`),`product_id`=VALUES(`product_id`),`name`=VALUES(`name`),`weight`=VALUES(`weight`),`quantity`=VALUES(`quantity`),`original_qty`=VALUES(`original_qty`),`level`=VALUES(`level`),`sort`=VALUES(`sort`),`is_boss`=VALUES(`is_boss`),`min_score`=VALUES(`min_score`),`deleted_at`=VALUES(`deleted_at`)","rows_affected":2,"cost_seconds":0.031602416}],"redis":null,"mongos":null,"success":true,"cost_seconds":0.087613417}} +{"level":"info","time":"2025-12-22 14:48:21","caller":"logger/logger.go:309","msg":"trace-log","domain":"mini-chat[fat]","method":"GET","path":"/api/admin/activities/64/issues/71/rewards","http_code":200,"business_code":0,"success":true,"cost_seconds":0.040785917,"trace_id":"2002994600460947456","trace_info":{"trace_id":"2002994600460947456","request":{"ttl":"un-limit","method":"GET","decoded_url":"/api/admin/activities/64/issues/71/rewards","header":{"Content-Type":""},"body":""},"response":{"header":{"Content-Type":["application/json; charset=utf-8"],"Trace-Id":["2002994600460947456"],"Vary":["Origin"]},"body":{"list":[{"id":237,"product_id":0,"name":"参与奖-5对","weight":0,"quantity":98,"original_qty":100,"level":10,"sort":1,"is_boss":0,"min_score":5},{"id":238,"product_id":0,"name":"参与奖-10对","weight":0,"quantity":100,"original_qty":100,"level":9,"sort":2,"is_boss":0,"min_score":10},{"id":239,"product_id":0,"name":"铜奖-15对","weight":0,"quantity":50,"original_qty":50,"level":8,"sort":3,"is_boss":0,"min_score":15},{"id":240,"product_id":0,"name":"铜奖-20对","weight":0,"quantity":50,"original_qty":50,"level":7,"sort":4,"is_boss":0,"min_score":8},{"id":241,"product_id":0,"name":"银奖-25对","weight":0,"quantity":30,"original_qty":30,"level":6,"sort":5,"is_boss":0,"min_score":7},{"id":242,"product_id":0,"name":"银奖-30对","weight":0,"quantity":30,"original_qty":30,"level":5,"sort":6,"is_boss":0,"min_score":6},{"id":243,"product_id":0,"name":"金奖-35对","weight":0,"quantity":20,"original_qty":20,"level":4,"sort":7,"is_boss":0,"min_score":5},{"id":244,"product_id":0,"name":"金奖-40对","weight":0,"quantity":20,"original_qty":20,"level":3,"sort":8,"is_boss":0,"min_score":4},{"id":245,"product_id":0,"name":"特等奖-42对","weight":0,"quantity":10,"original_qty":10,"level":2,"sort":9,"is_boss":0,"min_score":3},{"id":246,"product_id":0,"name":"特等奖-44对","weight":0,"quantity":5,"original_qty":5,"level":1,"sort":10,"is_boss":0,"min_score":2},{"id":247,"product_id":0,"name":"终极大奖-45对","weight":0,"quantity":3,"original_qty":3,"level":0,"sort":11,"is_boss":1,"min_score":1}]},"http_code":200,"http_code_msg":"OK","cost_seconds":0.040785542},"third_party_requests":null,"debugs":null,"sqls":[{"time":"2025-12-22 14:48:21","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/router/interceptor/admin_auth.go:43","sql":"SELECT * FROM `admin` WHERE `admin`.`id` = 2 ORDER BY `admin`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.019588667},{"time":"2025-12-22 14:48:21","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/service/activity/rewards_list.go:13","sql":"SELECT * FROM `activity_reward_settings` WHERE `activity_reward_settings`.`issue_id` = 71 AND deleted_at IS NULL AND `activity_reward_settings`.`deleted_at` IS NULL ORDER BY `activity_reward_settings`.`sort` ASC","rows_affected":11,"cost_seconds":0.020836667}],"redis":null,"mongos":null,"success":true,"cost_seconds":0.040785917}} +{"level":"info","time":"2025-12-22 14:48:21","caller":"logger/logger.go:309","msg":"trace-log","domain":"mini-chat[fat]","method":"GET","path":"/api/admin/activities/64/issues?page=1&page_size=20","http_code":200,"business_code":0,"success":true,"cost_seconds":0.077642375,"trace_id":"2002994601064927232","trace_info":{"trace_id":"2002994601064927232","request":{"ttl":"un-limit","method":"GET","decoded_url":"/api/admin/activities/64/issues?page=1&page_size=20","header":{"Content-Type":""},"body":""},"response":{"header":{"Content-Type":["application/json; charset=utf-8"],"Trace-Id":["2002994601064927232"],"Vary":["Origin"]},"body":{"page":1,"page_size":20,"total":1,"list":[{"id":71,"issue_number":"1","status":1,"sort":1,"prize_count":11}]},"http_code":200,"http_code_msg":"OK","cost_seconds":0.077642},"third_party_requests":null,"debugs":null,"sqls":[{"time":"2025-12-22 14:48:21","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/router/interceptor/admin_auth.go:43","sql":"SELECT * FROM `admin` WHERE `admin`.`id` = 2 ORDER BY `admin`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.019385167},{"time":"2025-12-22 14:48:21","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/service/activity/issues_list.go:14","sql":"SELECT count(*) FROM `activity_issues` WHERE `activity_issues`.`activity_id` = 64 AND `activity_issues`.`status` <> 2 AND deleted_at IS NULL AND `activity_issues`.`deleted_at` IS NULL","rows_affected":1,"cost_seconds":0.019411292},{"time":"2025-12-22 14:48:21","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/service/activity/issues_list.go:27","sql":"SELECT * FROM `activity_issues` WHERE `activity_issues`.`activity_id` = 64 AND `activity_issues`.`status` <> 2 AND deleted_at IS NULL AND `activity_issues`.`deleted_at` IS NULL ORDER BY `activity_issues`.`sort` DESC LIMIT 20","rows_affected":1,"cost_seconds":0.019235542},{"time":"2025-12-22 14:48:21","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/api/admin/issues_admin.go:76","sql":"SELECT count(*) FROM `activity_reward_settings` WHERE `activity_reward_settings`.`issue_id` = 71 AND deleted_at IS NULL AND `activity_reward_settings`.`deleted_at` IS NULL","rows_affected":1,"cost_seconds":0.019244083}],"redis":null,"mongos":null,"success":true,"cost_seconds":0.077642375}} +{"level":"info","time":"2025-12-22 14:48:25","caller":"logger/logger.go:309","msg":"trace-log","domain":"mini-chat[fat]","method":"PUT","path":"/api/admin/activities/64/issues/71/rewards/239","http_code":200,"business_code":0,"success":true,"cost_seconds":0.0838875,"trace_id":"2002994619867992064","trace_info":{"trace_id":"2002994619867992064","request":{"ttl":"un-limit","method":"PUT","decoded_url":"/api/admin/activities/64/issues/71/rewards/239","header":{"Content-Type":"application/json"},"body":"{\"product_id\":0,\"weight\":0,\"quantity\":50,\"original_qty\":50,\"level\":8,\"sort\":3,\"is_boss\":0,\"name\":\"铜奖-15对\",\"min_score\":9}"},"response":{"header":{"Access-Control-Allow-Credentials":["true"],"Access-Control-Allow-Origin":["*"],"Content-Type":["application/json; charset=utf-8"],"Trace-Id":["2002994619867992064"],"Vary":["Origin"]},"body":{"message":"操作成功"},"http_code":200,"http_code_msg":"OK","cost_seconds":0.083886291},"third_party_requests":null,"debugs":null,"sqls":[{"time":"2025-12-22 14:48:25","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/router/interceptor/admin_auth.go:43","sql":"SELECT * FROM `admin` WHERE `admin`.`id` = 2 ORDER BY `admin`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.018833667},{"time":"2025-12-22 14:48:25","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/service/activity/rewards_modify.go:14","sql":"SELECT * FROM `activity_reward_settings` WHERE `activity_reward_settings`.`id` = 239 AND deleted_at IS NULL AND `activity_reward_settings`.`deleted_at` IS NULL ORDER BY `activity_reward_settings`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.021777292},{"time":"2025-12-22 14:48:25","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/service/activity/rewards_modify.go:46","sql":"INSERT INTO `activity_reward_settings` (`issue_id`,`product_id`,`name`,`weight`,`quantity`,`original_qty`,`level`,`sort`,`is_boss`,`min_score`,`deleted_at`,`id`,`created_at`,`updated_at`) VALUES (71,0,'铜奖-15对',0,50,50,8,3,0,9,NULL,239,'2025-12-22 11:09:07.96','2025-12-22 14:48:25.915') ON DUPLICATE KEY UPDATE `issue_id`=VALUES(`issue_id`),`product_id`=VALUES(`product_id`),`name`=VALUES(`name`),`weight`=VALUES(`weight`),`quantity`=VALUES(`quantity`),`original_qty`=VALUES(`original_qty`),`level`=VALUES(`level`),`sort`=VALUES(`sort`),`is_boss`=VALUES(`is_boss`),`min_score`=VALUES(`min_score`),`deleted_at`=VALUES(`deleted_at`)","rows_affected":2,"cost_seconds":0.033468}],"redis":null,"mongos":null,"success":true,"cost_seconds":0.0838875}} +{"level":"info","time":"2025-12-22 14:48:26","caller":"logger/logger.go:309","msg":"trace-log","domain":"mini-chat[fat]","method":"GET","path":"/api/admin/activities/64/issues/71/rewards","http_code":200,"business_code":0,"success":true,"cost_seconds":0.040889417,"trace_id":"2002994620593606656","trace_info":{"trace_id":"2002994620593606656","request":{"ttl":"un-limit","method":"GET","decoded_url":"/api/admin/activities/64/issues/71/rewards","header":{"Content-Type":""},"body":""},"response":{"header":{"Content-Type":["application/json; charset=utf-8"],"Trace-Id":["2002994620593606656"],"Vary":["Origin"]},"body":{"list":[{"id":237,"product_id":0,"name":"参与奖-5对","weight":0,"quantity":98,"original_qty":100,"level":10,"sort":1,"is_boss":0,"min_score":5},{"id":238,"product_id":0,"name":"参与奖-10对","weight":0,"quantity":100,"original_qty":100,"level":9,"sort":2,"is_boss":0,"min_score":10},{"id":239,"product_id":0,"name":"铜奖-15对","weight":0,"quantity":50,"original_qty":50,"level":8,"sort":3,"is_boss":0,"min_score":9},{"id":240,"product_id":0,"name":"铜奖-20对","weight":0,"quantity":50,"original_qty":50,"level":7,"sort":4,"is_boss":0,"min_score":8},{"id":241,"product_id":0,"name":"银奖-25对","weight":0,"quantity":30,"original_qty":30,"level":6,"sort":5,"is_boss":0,"min_score":7},{"id":242,"product_id":0,"name":"银奖-30对","weight":0,"quantity":30,"original_qty":30,"level":5,"sort":6,"is_boss":0,"min_score":6},{"id":243,"product_id":0,"name":"金奖-35对","weight":0,"quantity":20,"original_qty":20,"level":4,"sort":7,"is_boss":0,"min_score":5},{"id":244,"product_id":0,"name":"金奖-40对","weight":0,"quantity":20,"original_qty":20,"level":3,"sort":8,"is_boss":0,"min_score":4},{"id":245,"product_id":0,"name":"特等奖-42对","weight":0,"quantity":10,"original_qty":10,"level":2,"sort":9,"is_boss":0,"min_score":3},{"id":246,"product_id":0,"name":"特等奖-44对","weight":0,"quantity":5,"original_qty":5,"level":1,"sort":10,"is_boss":0,"min_score":2},{"id":247,"product_id":0,"name":"终极大奖-45对","weight":0,"quantity":3,"original_qty":3,"level":0,"sort":11,"is_boss":1,"min_score":1}]},"http_code":200,"http_code_msg":"OK","cost_seconds":0.040888959},"third_party_requests":null,"debugs":null,"sqls":[{"time":"2025-12-22 14:48:26","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/router/interceptor/admin_auth.go:43","sql":"SELECT * FROM `admin` WHERE `admin`.`id` = 2 ORDER BY `admin`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.018877417},{"time":"2025-12-22 14:48:26","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/service/activity/rewards_list.go:13","sql":"SELECT * FROM `activity_reward_settings` WHERE `activity_reward_settings`.`issue_id` = 71 AND deleted_at IS NULL AND `activity_reward_settings`.`deleted_at` IS NULL ORDER BY `activity_reward_settings`.`sort` ASC","rows_affected":11,"cost_seconds":0.021343958}],"redis":null,"mongos":null,"success":true,"cost_seconds":0.040889417}} +{"level":"info","time":"2025-12-22 14:48:26","caller":"logger/logger.go:309","msg":"trace-log","domain":"mini-chat[fat]","method":"GET","path":"/api/admin/activities/64/issues?page=1&page_size=20","http_code":200,"business_code":0,"success":true,"cost_seconds":0.086908083,"trace_id":"2002994621214363648","trace_info":{"trace_id":"2002994621214363648","request":{"ttl":"un-limit","method":"GET","decoded_url":"/api/admin/activities/64/issues?page=1&page_size=20","header":{"Content-Type":""},"body":""},"response":{"header":{"Content-Type":["application/json; charset=utf-8"],"Trace-Id":["2002994621214363648"],"Vary":["Origin"]},"body":{"page":1,"page_size":20,"total":1,"list":[{"id":71,"issue_number":"1","status":1,"sort":1,"prize_count":11}]},"http_code":200,"http_code_msg":"OK","cost_seconds":0.086907791},"third_party_requests":null,"debugs":null,"sqls":[{"time":"2025-12-22 14:48:26","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/router/interceptor/admin_auth.go:43","sql":"SELECT * FROM `admin` WHERE `admin`.`id` = 2 ORDER BY `admin`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.018003417},{"time":"2025-12-22 14:48:26","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/service/activity/issues_list.go:14","sql":"SELECT count(*) FROM `activity_issues` WHERE `activity_issues`.`activity_id` = 64 AND `activity_issues`.`status` <> 2 AND deleted_at IS NULL AND `activity_issues`.`deleted_at` IS NULL","rows_affected":1,"cost_seconds":0.020560125},{"time":"2025-12-22 14:48:26","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/service/activity/issues_list.go:27","sql":"SELECT * FROM `activity_issues` WHERE `activity_issues`.`activity_id` = 64 AND `activity_issues`.`status` <> 2 AND deleted_at IS NULL AND `activity_issues`.`deleted_at` IS NULL ORDER BY `activity_issues`.`sort` DESC LIMIT 20","rows_affected":1,"cost_seconds":0.02116375},{"time":"2025-12-22 14:48:26","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/api/admin/issues_admin.go:76","sql":"SELECT count(*) FROM `activity_reward_settings` WHERE `activity_reward_settings`.`issue_id` = 71 AND deleted_at IS NULL AND `activity_reward_settings`.`deleted_at` IS NULL","rows_affected":1,"cost_seconds":0.026422583}],"redis":null,"mongos":null,"success":true,"cost_seconds":0.086908083}} +{"level":"info","time":"2025-12-22 14:48:32","caller":"logger/logger.go:309","msg":"trace-log","domain":"mini-chat[fat]","method":"PUT","path":"/api/admin/activities/64/issues/71/rewards/237","http_code":200,"business_code":0,"success":true,"cost_seconds":0.08122675,"trace_id":"2002994648695443456","trace_info":{"trace_id":"2002994648695443456","request":{"ttl":"un-limit","method":"PUT","decoded_url":"/api/admin/activities/64/issues/71/rewards/237","header":{"Content-Type":"application/json"},"body":"{\"product_id\":0,\"weight\":0,\"quantity\":98,\"original_qty\":100,\"level\":10,\"sort\":1,\"is_boss\":0,\"name\":\"参与奖-5对\",\"min_score\":11}"},"response":{"header":{"Access-Control-Allow-Credentials":["true"],"Access-Control-Allow-Origin":["*"],"Content-Type":["application/json; charset=utf-8"],"Trace-Id":["2002994648695443456"],"Vary":["Origin"]},"body":{"message":"操作成功"},"http_code":200,"http_code_msg":"OK","cost_seconds":0.08122625},"third_party_requests":null,"debugs":null,"sqls":[{"time":"2025-12-22 14:48:32","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/router/interceptor/admin_auth.go:43","sql":"SELECT * FROM `admin` WHERE `admin`.`id` = 2 ORDER BY `admin`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.017937583},{"time":"2025-12-22 14:48:32","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/service/activity/rewards_modify.go:14","sql":"SELECT * FROM `activity_reward_settings` WHERE `activity_reward_settings`.`id` = 237 AND deleted_at IS NULL AND `activity_reward_settings`.`deleted_at` IS NULL ORDER BY `activity_reward_settings`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.019710208},{"time":"2025-12-22 14:48:32","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/service/activity/rewards_modify.go:46","sql":"INSERT INTO `activity_reward_settings` (`issue_id`,`product_id`,`name`,`weight`,`quantity`,`original_qty`,`level`,`sort`,`is_boss`,`min_score`,`deleted_at`,`id`,`created_at`,`updated_at`) VALUES (71,0,'参与奖-5对',0,98,100,10,1,0,11,NULL,237,'2025-12-22 11:09:07.96','2025-12-22 14:48:32.785') ON DUPLICATE KEY UPDATE `issue_id`=VALUES(`issue_id`),`product_id`=VALUES(`product_id`),`name`=VALUES(`name`),`weight`=VALUES(`weight`),`quantity`=VALUES(`quantity`),`original_qty`=VALUES(`original_qty`),`level`=VALUES(`level`),`sort`=VALUES(`sort`),`is_boss`=VALUES(`is_boss`),`min_score`=VALUES(`min_score`),`deleted_at`=VALUES(`deleted_at`)","rows_affected":2,"cost_seconds":0.034180084}],"redis":null,"mongos":null,"success":true,"cost_seconds":0.08122675}} +{"level":"info","time":"2025-12-22 14:48:32","caller":"logger/logger.go:309","msg":"trace-log","domain":"mini-chat[fat]","method":"GET","path":"/api/admin/activities/64/issues/71/rewards","http_code":200,"business_code":0,"success":true,"cost_seconds":0.038364541,"trace_id":"2002994649404280832","trace_info":{"trace_id":"2002994649404280832","request":{"ttl":"un-limit","method":"GET","decoded_url":"/api/admin/activities/64/issues/71/rewards","header":{"Content-Type":""},"body":""},"response":{"header":{"Content-Type":["application/json; charset=utf-8"],"Trace-Id":["2002994649404280832"],"Vary":["Origin"]},"body":{"list":[{"id":237,"product_id":0,"name":"参与奖-5对","weight":0,"quantity":98,"original_qty":100,"level":10,"sort":1,"is_boss":0,"min_score":11},{"id":238,"product_id":0,"name":"参与奖-10对","weight":0,"quantity":100,"original_qty":100,"level":9,"sort":2,"is_boss":0,"min_score":10},{"id":239,"product_id":0,"name":"铜奖-15对","weight":0,"quantity":50,"original_qty":50,"level":8,"sort":3,"is_boss":0,"min_score":9},{"id":240,"product_id":0,"name":"铜奖-20对","weight":0,"quantity":50,"original_qty":50,"level":7,"sort":4,"is_boss":0,"min_score":8},{"id":241,"product_id":0,"name":"银奖-25对","weight":0,"quantity":30,"original_qty":30,"level":6,"sort":5,"is_boss":0,"min_score":7},{"id":242,"product_id":0,"name":"银奖-30对","weight":0,"quantity":30,"original_qty":30,"level":5,"sort":6,"is_boss":0,"min_score":6},{"id":243,"product_id":0,"name":"金奖-35对","weight":0,"quantity":20,"original_qty":20,"level":4,"sort":7,"is_boss":0,"min_score":5},{"id":244,"product_id":0,"name":"金奖-40对","weight":0,"quantity":20,"original_qty":20,"level":3,"sort":8,"is_boss":0,"min_score":4},{"id":245,"product_id":0,"name":"特等奖-42对","weight":0,"quantity":10,"original_qty":10,"level":2,"sort":9,"is_boss":0,"min_score":3},{"id":246,"product_id":0,"name":"特等奖-44对","weight":0,"quantity":5,"original_qty":5,"level":1,"sort":10,"is_boss":0,"min_score":2},{"id":247,"product_id":0,"name":"终极大奖-45对","weight":0,"quantity":3,"original_qty":3,"level":0,"sort":11,"is_boss":1,"min_score":1}]},"http_code":200,"http_code_msg":"OK","cost_seconds":0.038364125},"third_party_requests":null,"debugs":null,"sqls":[{"time":"2025-12-22 14:48:32","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/router/interceptor/admin_auth.go:43","sql":"SELECT * FROM `admin` WHERE `admin`.`id` = 2 ORDER BY `admin`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.017865625},{"time":"2025-12-22 14:48:32","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/service/activity/rewards_list.go:13","sql":"SELECT * FROM `activity_reward_settings` WHERE `activity_reward_settings`.`issue_id` = 71 AND deleted_at IS NULL AND `activity_reward_settings`.`deleted_at` IS NULL ORDER BY `activity_reward_settings`.`sort` ASC","rows_affected":11,"cost_seconds":0.019732542}],"redis":null,"mongos":null,"success":true,"cost_seconds":0.038364541}} +{"level":"info","time":"2025-12-22 14:48:33","caller":"logger/logger.go:309","msg":"trace-log","domain":"mini-chat[fat]","method":"GET","path":"/api/admin/activities/64/issues?page=1&page_size=20","http_code":200,"business_code":0,"success":true,"cost_seconds":0.076907,"trace_id":"2002994649970511872","trace_info":{"trace_id":"2002994649970511872","request":{"ttl":"un-limit","method":"GET","decoded_url":"/api/admin/activities/64/issues?page=1&page_size=20","header":{"Content-Type":""},"body":""},"response":{"header":{"Content-Type":["application/json; charset=utf-8"],"Trace-Id":["2002994649970511872"],"Vary":["Origin"]},"body":{"page":1,"page_size":20,"total":1,"list":[{"id":71,"issue_number":"1","status":1,"sort":1,"prize_count":11}]},"http_code":200,"http_code_msg":"OK","cost_seconds":0.076906583},"third_party_requests":null,"debugs":null,"sqls":[{"time":"2025-12-22 14:48:33","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/router/interceptor/admin_auth.go:43","sql":"SELECT * FROM `admin` WHERE `admin`.`id` = 2 ORDER BY `admin`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.018905458},{"time":"2025-12-22 14:48:33","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/service/activity/issues_list.go:14","sql":"SELECT count(*) FROM `activity_issues` WHERE `activity_issues`.`activity_id` = 64 AND `activity_issues`.`status` <> 2 AND deleted_at IS NULL AND `activity_issues`.`deleted_at` IS NULL","rows_affected":1,"cost_seconds":0.019077291},{"time":"2025-12-22 14:48:33","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/service/activity/issues_list.go:27","sql":"SELECT * FROM `activity_issues` WHERE `activity_issues`.`activity_id` = 64 AND `activity_issues`.`status` <> 2 AND deleted_at IS NULL AND `activity_issues`.`deleted_at` IS NULL ORDER BY `activity_issues`.`sort` DESC LIMIT 20","rows_affected":1,"cost_seconds":0.019094125},{"time":"2025-12-22 14:48:33","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/api/admin/issues_admin.go:76","sql":"SELECT count(*) FROM `activity_reward_settings` WHERE `activity_reward_settings`.`issue_id` = 71 AND deleted_at IS NULL AND `activity_reward_settings`.`deleted_at` IS NULL","rows_affected":1,"cost_seconds":0.018924834}],"redis":null,"mongos":null,"success":true,"cost_seconds":0.076907}} +{"level":"info","time":"2025-12-22 15:01:13","caller":"logger/logger.go:309","msg":"Connected to Redis","domain":"mini-chat[fat]","addr":"118.25.13.43:8379"} +{"level":"info","time":"2025-12-22 15:01:17","caller":"logger/logger.go:309","msg":"trace-log","domain":"mini-chat[fat]","method":"GET","path":"/api/admin/activities/64/issues/71/rewards","http_code":200,"business_code":0,"success":true,"cost_seconds":0.042648958,"trace_id":"2002997855408623616","trace_info":{"trace_id":"2002997855408623616","request":{"ttl":"un-limit","method":"GET","decoded_url":"/api/admin/activities/64/issues/71/rewards","header":{"Content-Type":""},"body":""},"response":{"header":{"Content-Type":["application/json; charset=utf-8"],"Trace-Id":["2002997855408623616"],"Vary":["Origin"]},"body":{"list":[{"id":237,"product_id":0,"name":"参与奖-5对","weight":0,"quantity":98,"original_qty":100,"level":10,"sort":1,"is_boss":0,"min_score":11},{"id":238,"product_id":0,"name":"参与奖-10对","weight":0,"quantity":100,"original_qty":100,"level":9,"sort":2,"is_boss":0,"min_score":10},{"id":239,"product_id":0,"name":"铜奖-15对","weight":0,"quantity":50,"original_qty":50,"level":8,"sort":3,"is_boss":0,"min_score":9},{"id":240,"product_id":0,"name":"铜奖-20对","weight":0,"quantity":50,"original_qty":50,"level":7,"sort":4,"is_boss":0,"min_score":8},{"id":241,"product_id":0,"name":"银奖-25对","weight":0,"quantity":30,"original_qty":30,"level":6,"sort":5,"is_boss":0,"min_score":7},{"id":242,"product_id":0,"name":"银奖-30对","weight":0,"quantity":30,"original_qty":30,"level":5,"sort":6,"is_boss":0,"min_score":6},{"id":243,"product_id":0,"name":"金奖-35对","weight":0,"quantity":20,"original_qty":20,"level":4,"sort":7,"is_boss":0,"min_score":5},{"id":244,"product_id":0,"name":"金奖-40对","weight":0,"quantity":19,"original_qty":20,"level":3,"sort":8,"is_boss":0,"min_score":4},{"id":245,"product_id":0,"name":"特等奖-42对","weight":0,"quantity":10,"original_qty":10,"level":2,"sort":9,"is_boss":0,"min_score":3},{"id":246,"product_id":0,"name":"特等奖-44对","weight":0,"quantity":5,"original_qty":5,"level":1,"sort":10,"is_boss":0,"min_score":2},{"id":247,"product_id":0,"name":"终极大奖-45对","weight":0,"quantity":3,"original_qty":3,"level":0,"sort":11,"is_boss":1,"min_score":1}]},"http_code":200,"http_code_msg":"OK","cost_seconds":0.042646083},"third_party_requests":null,"debugs":null,"sqls":[{"time":"2025-12-22 15:01:17","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/router/interceptor/admin_auth.go:43","sql":"SELECT * FROM `admin` WHERE `admin`.`id` = 2 ORDER BY `admin`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.020508667},{"time":"2025-12-22 15:01:17","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/service/activity/rewards_list.go:13","sql":"SELECT * FROM `activity_reward_settings` WHERE `activity_reward_settings`.`issue_id` = 71 AND deleted_at IS NULL AND `activity_reward_settings`.`deleted_at` IS NULL ORDER BY `activity_reward_settings`.`sort` ASC","rows_affected":11,"cost_seconds":0.021435375}],"redis":null,"mongos":null,"success":true,"cost_seconds":0.042648958}} +{"level":"info","time":"2025-12-22 15:01:17","caller":"logger/logger.go:309","msg":"trace-log","domain":"mini-chat[fat]","method":"GET","path":"/api/admin/products?page=1&page_size=100","http_code":200,"business_code":0,"success":true,"cost_seconds":0.125343667,"trace_id":"2002997855408623616","trace_info":{"trace_id":"2002997855408623616","request":{"ttl":"un-limit","method":"GET","decoded_url":"/api/admin/products?page=1&page_size=100","header":{"Content-Type":""},"body":""},"response":{"header":{"Content-Type":["application/json; charset=utf-8"],"Trace-Id":["2002997855408623616"],"Vary":["Origin"]},"body":{"page":1,"page_size":100,"total":271,"list":[{"id":271,"name":"LAMY凌美宝珠笔礼盒暗夜绿野奢礼盒","category_id":10,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/17/1765974142175986900.jpg\"]","price":87990,"stock":9999,"sales":0,"status":1},{"id":270,"name":"LAMY凌美钢笔礼盒 宋代限定版墨水笔青苍玉兰","category_id":10,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/17/1765974064319974300.jpg\"]","price":32990,"stock":9999,"sales":0,"status":1},{"id":269,"name":"LAMY凌美 钢笔(尼克+朱迪)礼盒疯狂动物城联名墨水笔套装","category_id":10,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/17/1765973959992705500.jpg\"]","price":100900,"stock":9999,"sales":0,"status":1},{"id":268,"name":"LAMY凌美钢笔礼盒 狩猎系列磨砂黑白色墨水笔套装","category_id":10,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/17/1765973806819055400.jpg\"]","price":43900,"stock":9999,"sales":0,"status":1},{"id":267,"name":"LAMY凌美钢笔礼盒 狩猎系列库洛米联名限定套装","category_id":10,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/17/1765973718891607700.png\"]","price":50500,"stock":99999,"sales":0,"status":1},{"id":266,"name":"MINISO名创优品U型枕飞机云朵护颈枕记忆棉","category_id":9,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/17/1765958525893026200.jpg\"]","price":7700,"stock":9999,"sales":0,"status":1},{"id":265,"name":"MINISO名创优品假面骑士×WASA龙联名系列盲盒单盒随机","category_id":9,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/17/1765958389919343600.jpg\"]","price":10490,"stock":9999,"sales":0,"status":1},{"id":264,"name":"MINISO名创优品橘猫工业铁甲小宝第二弹模型玩具","category_id":9,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/17/1765958320499495500.jpg\"]","price":10800,"stock":9999,"sales":0,"status":1},{"id":263,"name":"MINISO名创优品橘猫工业铁甲小宝第一弹模型玩具","category_id":9,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/17/1765958282291523200.jpg\"]","price":10800,"stock":9999,"sales":0,"status":1},{"id":262,"name":"MINISO名创Nanci囡茜氛围灯积木摆件中国风小夜灯","category_id":9,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/17/1765958213519986200.png\"]","price":10900,"stock":9999,"sales":0,"status":1},{"id":261,"name":"名创优品迪士尼316不锈钢保温饭盒便当盒","category_id":9,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/17/1765958147297026300.jpg\"]","price":8900,"stock":9999,"sales":0,"status":1},{"id":260,"name":"MINISO名创优品学院系列焦糖格纹双肩包包学院风","category_id":9,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/17/1765958088190736900.jpg\"]","price":11500,"stock":9999,"sales":0,"status":1},{"id":259,"name":"MINISO/名创优品迪士尼朱迪的警官生活系列痛包","category_id":9,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/17/1765957990772169000.jpg\"]","price":13090,"stock":9999,"sales":0,"status":1},{"id":258,"name":"MINISO名创优品雪夜派对拼装模型圣诞节礼物","category_id":9,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/17/1765957900503621400.jpg\"]","price":13900,"stock":9999,"sales":0,"status":1},{"id":257,"name":"MINISO名创优品【深睡记忆枕】透气枕芯枕头护颈椎释压","category_id":9,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/17/1765957819453538400.png\"]","price":14590,"stock":9999,"sales":0,"status":1},{"id":256,"name":"MINISO名创优品香薰氛围感蓝牙音乐香氛机","category_id":9,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/17/1765957751042251600.jpg\"]","price":24500,"stock":9999,"sales":0,"status":1},{"id":255,"name":"MINISO名创优品铠魂帝皇侠15周年典藏模玩机甲超可动人偶成品模型","category_id":9,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/17/1765957636770820900.jpg\"]","price":27500,"stock":9999,"sales":0,"status":1},{"id":254,"name":"MINISO名创优品冰淇淋香薰膏室内卫生间清新芬芳花果香4盒","category_id":9,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/17/1765957419425272100.jpg\"]","price":4390,"stock":9999,"sales":0,"status":1},{"id":253,"name":"MINISO名创优品硅胶热水袋","category_id":9,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/17/1765957295282004700.jpg\"]","price":5790,"stock":9999,"sales":0,"status":1},{"id":252,"name":"MINISO名创优品Chiikawa系列毛茸茸季斗篷休闲午休毯随机","category_id":9,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/17/1765957103956331200.jpg\"]","price":16390,"stock":9999,"sales":0,"status":1},{"id":251,"name":"MINISO名创优品罗小黑轩影摇香系列迷你挂画冰箱贴五款盲盒","category_id":9,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/17/1765957004993236600.jpg\"]","price":13990,"stock":9999,"sales":0,"status":1},{"id":250,"name":"MINISO名创优品chiikawa系列睡衣毛绒公仔","category_id":9,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/17/1765956849972873300.jpg\"]","price":10900,"stock":9999,"sales":0,"status":1},{"id":249,"name":"MINISO名创优品蜡笔小新拼图","category_id":9,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/17/1765956726589144000.png\"]","price":8890,"stock":9999,"sales":0,"status":1},{"id":248,"name":"MINISO名创优品三丽鸥保温杯公仔冰霸杯","category_id":9,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/17/1765956569488102100.jpg\"]","price":8890,"stock":9999,"sales":0,"status":1},{"id":247,"name":"MINISO名创优品蜡笔小新超变装毛绒眼罩","category_id":9,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/17/1765956491344273300.jpg\"]","price":1990,"stock":9999,"sales":0,"status":1},{"id":246,"name":"MINISO名创优品迪士尼疯狂动物城搪胶毛绒公仔盲盒摆件","category_id":9,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/17/1765956361082178100.jpg\"]","price":8690,"stock":9999,"sales":0,"status":1},{"id":245,"name":"MINISO名创优品玉桂狗酷洛米捏捏小夜灯卧室睡眠灯床头灯LED灯随机款","category_id":9,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/17/1765956188247609800.jpg\"]","price":6590,"stock":9999,"sales":0,"status":1},{"id":244,"name":"MINISO名创优品Chiikawa奇幻马戏团毛绒挂件随机款","category_id":9,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/17/1765956006896154800.jpg\"]","price":5590,"stock":9999,"sales":0,"status":1},{"id":243,"name":"MINISO名创优品WAKUKU哇库库毛毛潮趣第二弹系列单盒盲盒","category_id":9,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/17/1765955886258552300.jpg\"]","price":7590,"stock":9999,"sales":0,"status":1},{"id":242,"name":"MINISO名创优品Chiikawa樱花季吉伊乌萨奇小八零钱包挂件耳机包随机款","category_id":9,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/17/1765955794487832400.jpg\"]","price":4390,"stock":9999,"sales":0,"status":1},{"id":241,"name":"MINISO名创优品草莓熊休闲毯加厚保暖午睡毯子","category_id":9,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/17/1765955717135623100.jpg\"]","price":9900,"stock":9999,"sales":0,"status":1},{"id":240,"name":"MINISO名创优品MyMelody秘森茶话会盲盒","category_id":9,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/17/1765955658005155100.jpg\"]","price":3900,"stock":9999,"sales":0,"status":1},{"id":239,"name":"MINISO名创优品【指环爱神系列】2盒随机2款手办盲盒","category_id":9,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/17/1765955515578588700.png\"]","price":6400,"stock":9999,"sales":0,"status":1},{"id":238,"name":"MINISO名创优品 小熊维尼拍立得系列(单盒单款)","category_id":9,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/17/1765955384656076300.jpg\"]","price":3690,"stock":9999,"sales":0,"status":1},{"id":237,"name":"MINISO名创优品 小熊维尼拍立得系列(端盒8款)盲盒","category_id":9,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/17/1765955301119356700.jpg\"]","price":30000,"stock":999,"sales":0,"status":1},{"id":236,"name":"MINISO名创优品缤纷街景积木第6季五件套拼装积木玩具","category_id":9,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/17/1765954965838583100.jpg\"]","price":18500,"stock":9999,"sales":0,"status":1},{"id":235,"name":"MINISO名创优品羊咩咩小羊玩偶毛绒公仔","category_id":9,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/17/1765954804800434800.jpg\"]","price":2190,"stock":9999,"sales":0,"status":1},{"id":234,"name":"MINISO名创优品大师香薰室内家用150ml随机款","category_id":9,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/17/1765954438035852600.jpg\"]","price":4500,"stock":9999,"sales":0,"status":1},{"id":233,"name":"MINISO名创优品天然植物化妆棉800片白色","category_id":9,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/17/1765954130792789000.jpg\"]","price":1390,"stock":9999,"sales":0,"status":1},{"id":232,"name":"MINISO名创优品玉桂狗u型枕","category_id":9,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/17/1765953971587736200.png\"]","price":3300,"stock":99999,"sales":0,"status":1},{"id":231,"name":"ZIPPO 春华秋实套装打火机","category_id":8,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765878978681838200.jpg\"]","price":327500,"stock":9999,"sales":0,"status":1},{"id":230,"name":"ZIPPO 觉醒系列打火机","category_id":8,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765877510957720900.jpg\"]","price":145500,"stock":9999,"sales":0,"status":1},{"id":229,"name":"ZIPPO 星际异兽套装打火机","category_id":8,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765876033609870000.jpg\"]","price":135000,"stock":9999,"sales":0,"status":1},{"id":228,"name":"ZIPPO 幸运灵虫 套装打火机","category_id":8,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765875966491566400.jpg\"]","price":263900,"stock":9999,"sales":0,"status":1},{"id":227,"name":"ZIPPO Jack Daniel联名款——橡木之味打火机","category_id":8,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765875891023016800.jpg\"]","price":113800,"stock":9999,"sales":0,"status":1},{"id":226,"name":"ZIPPO八音盒·怦然心动打火机","category_id":8,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765875820076074600.jpg\"]","price":119900,"stock":9999,"sales":0,"status":1},{"id":225,"name":"ZIPPO蔷薇水晶礼盒套装打火机","category_id":8,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765875719520558200.jpg\"]","price":185000,"stock":9999,"sales":0,"status":1},{"id":224,"name":"ZIPPO幸运石系列随机款打火机","category_id":8,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765875631784700700.jpg\"]","price":58800,"stock":9999,"sales":0,"status":1},{"id":223,"name":"ZIPPO暗花幺點-PVD浸染打火机","category_id":8,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765875319301817500.avif\"]","price":33700,"stock":9999,"sales":0,"status":1},{"id":222,"name":"ZIPPO 雪花系列随机款打火机","category_id":8,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765875220636810700.jpg\"]","price":38200,"stock":9999,"sales":0,"status":1},{"id":221,"name":"唐草之Zippo在我心-烧金色","category_id":8,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765875121383638800.jpg\"]","price":70400,"stock":9999,"sales":0,"status":1},{"id":220,"name":"ZIPPO东来也—武财神打火机","category_id":8,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765875049932239300.jpg\"]","price":26800,"stock":9999,"sales":0,"status":1},{"id":219,"name":"ZIPPO十二星座秘典随机款打火机","category_id":8,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765874983695603700.jpg\"]","price":50200,"stock":9999,"sales":0,"status":1},{"id":218,"name":"ZIPPO 喵望星空-仿古银打火机","category_id":8,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765874892660518100.jpg\"]","price":35000,"stock":9999,"sales":0,"status":1},{"id":217,"name":"ZIPPO 寻梦旅行猫咪打火机","category_id":8,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765874799357193500.jpg\"]","price":26800,"stock":9999,"sales":0,"status":1},{"id":216,"name":"ZIPPO 经典缎纱系列打火机","category_id":8,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765874656843816600.jpg\"]","price":18300,"stock":9999,"sales":0,"status":1},{"id":215,"name":"ZIPPO 恋爱至死套装打火机","category_id":8,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765874569257704700.jpg\"]","price":30600,"stock":9999,"sales":0,"status":1},{"id":214,"name":"ZIPPO山海经系列打火机随机款","category_id":8,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765874469951727700.jpg\"]","price":124500,"stock":9999,"sales":0,"status":1},{"id":213,"name":"ZIPPO 黑冰360精雕-太阳与水晶打火机","category_id":8,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765874394511845600.jpg\"]","price":128900,"stock":9999,"sales":0,"status":1},{"id":212,"name":"ZIPPO 纪念二战胜利75周年纯钢限量款打火机","category_id":8,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765874282732029500.jpg\"]","price":132500,"stock":9999,"sales":0,"status":1},{"id":211,"name":"ZIPPO 90周年荣耀之宝-纪念款打火机","category_id":8,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765874137696852300.jpg\"]","price":239900,"stock":9999,"sales":0,"status":1},{"id":210,"name":"ZIPPO 僵尸迷宫 僵尸新郎-发现你打火机","category_id":8,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765873962535031300.jpg\"]","price":35000,"stock":999,"sales":0,"status":1},{"id":209,"name":"ZIPPO 赛博朋克 浪子英雄打火机","category_id":8,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765873867250535900.jpg\"]","price":26800,"stock":9999,"sales":0,"status":1},{"id":208,"name":"ZIPPO 警世箴言打火机","category_id":8,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765873648027889100.jpg\"]","price":18300,"stock":9999,"sales":0,"status":1},{"id":207,"name":"ZIPPO 八方来财打火机红色礼盒套装(含线)","category_id":8,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765873539960206300.jpg\"]","price":77500,"stock":999,"sales":0,"status":1},{"id":206,"name":"ZIPPO 如意吉象打火机","category_id":8,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765873442205527300.jpg\"]","price":106200,"stock":9999,"sales":0,"status":1},{"id":205,"name":"ZIPPO 钱来运转打火机","category_id":8,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765873359362166400.jpg\"]","price":124500,"stock":9999,"sales":0,"status":1},{"id":204,"name":"ZIPPO 川流不息打火机","category_id":8,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765873287499214100.jpg\"]","price":43200,"stock":999,"sales":0,"status":1},{"id":203,"name":"ZIPPO 熏金十二星座打火机随机款","category_id":8,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765873231085180300.jpg\"]","price":168500,"stock":9999,"sales":0,"status":1},{"id":202,"name":"ZIPPO 飞的更高打火机","category_id":8,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765873015631694800.jpg\"]","price":42100,"stock":999,"sales":0,"status":1},{"id":201,"name":"ZIPPO 流云淬火打火机","category_id":8,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765872880849231700.jpg\"]","price":41200,"stock":999,"sales":0,"status":1},{"id":200,"name":"ZIPPO 招财猫打火机","category_id":8,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765872628921136000.jpg\"]","price":26900,"stock":9999,"sales":0,"status":1},{"id":199,"name":"ZIPPO 经典黑裂漆定制打火机","category_id":8,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765872449667519000.jpg\"]","price":21900,"stock":9999,"sales":0,"status":1},{"id":198,"name":"ZIPPO 步步高升打火机","category_id":8,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765872312650382500.jpg\"]","price":18300,"stock":999,"sales":0,"status":1},{"id":197,"name":"ZIPPO 秋水含睛打火机","category_id":8,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765871946370381700.jpg\"]","price":17000,"stock":9999,"sales":0,"status":1},{"id":196,"name":"ZIPPO 经典黑炫冰定制打火机","category_id":8,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765871840986068400.jpg\"]","price":21900,"stock":9999,"sales":0,"status":1},{"id":195,"name":"王者荣耀官方正版【大桥-白鹤梁神女】1:7典藏手办","category_id":7,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765870735671721900.jpg\"]","price":99900,"stock":9999,"sales":0,"status":1},{"id":194,"name":"王者荣耀x康佳联名李白电煮锅 多功能料理锅","category_id":7,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765870440985958300.jpg\"]","price":12000,"stock":9999,"sales":0,"status":1},{"id":193,"name":"王者荣耀x康佳 鲁班联名电热水杯316不锈钢保温杯","category_id":7,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765870093003812000.jpg\"]","price":22500,"stock":9999,"sales":0,"status":1},{"id":192,"name":"王者荣耀官方正版周边【孙尚香-千金重弩】Q版手办","category_id":7,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765869381195810100.jpg\"]","price":18200,"stock":9999,"sales":0,"status":1},{"id":191,"name":"王者荣耀峡谷萌新-峡谷感谢季系列手办盲盒随机款","category_id":7,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765868952997446900.jpg\"]","price":7600,"stock":9999,"sales":0,"status":1},{"id":190,"name":"王者荣耀 心动的王者-假面绮宴主体邀请函套组随机(主题色纸+纪念票根)","category_id":7,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765868228234275600.jpg\"]","price":4300,"stock":9999,"sales":0,"status":1},{"id":189,"name":"王者荣耀 公孙离 惊鸿舞Myethos典藏手办摆件","category_id":7,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765867054597073200.jpg\"]","price":204000,"stock":999,"sales":0,"status":1},{"id":188,"name":"王者荣耀 人鱼之歌 朵利亚 Myethos典藏手办官方正版","category_id":7,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765866846021926900.jpg\"]","price":165000,"stock":9999,"sales":0,"status":1},{"id":187,"name":"王者荣耀X赞尔 蔡文姬 奇迹圣诞音乐水晶球","category_id":7,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765866550110881300.jpg\"]","price":66000,"stock":9999,"sales":0,"status":1},{"id":186,"name":"王者荣耀x万代ROBOT魂零号赤焰孙悟空可动机甲模型手办","category_id":7,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765866368803472700.jpg\"]","price":72900,"stock":9999,"sales":0,"status":1},{"id":185,"name":"王者荣耀官方正版周边【周瑜小乔-纯白花嫁】Q版手办","category_id":7,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765866153156237400.jpg\"]","price":61500,"stock":9999,"sales":0,"status":1},{"id":184,"name":"王者荣耀亚克力书签一套(隐藏款共8个)","category_id":7,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765865957316362700.jpg\"]","price":35000,"stock":9999,"sales":0,"status":1},{"id":183,"name":"王者荣耀正品40cm套装无限王者团棉花娃娃随机款","category_id":7,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765865719308392900.jpg\"]","price":31800,"stock":9999,"sales":0,"status":1},{"id":182,"name":"王者荣耀官方正版 大圣娶亲孙悟空 Q版手办","category_id":7,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765865338690308200.jpg\"]","price":28400,"stock":9999,"sales":0,"status":1},{"id":181,"name":"王者荣耀官方正版 一生所爱露娜 甜蜜组合Q版手办","category_id":7,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765865210058790000.jpg\"]","price":28400,"stock":9999,"sales":0,"status":1},{"id":180,"name":"王者荣耀英雄铠合作款多功能手表装饰穿搭潮流游戏周边","category_id":7,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765865092352107800.jpg\"]","price":29600,"stock":9999,"sales":0,"status":1},{"id":179,"name":"王者荣耀x黄油猫联名款暖手宝充电宝二合一随机款","category_id":7,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765864948813799800.jpg\"]","price":21900,"stock":9999,"sales":0,"status":1},{"id":178,"name":"王者荣耀xNICE FUN 逍遥幻梦庄周 鲲抱枕 半米尺寸","category_id":7,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765864773584950800.jpg\"]","price":14000,"stock":999,"sales":0,"status":1},{"id":177,"name":"王者荣耀官方正版 天籁弦音蔡文姬Q版手办 周边玩具摆件","category_id":7,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765863968816956200.jpg\"]","price":20800,"stock":9999,"sales":0,"status":1},{"id":176,"name":"王者荣耀 棉乖乖系列可爱毛绒挂件公仔棉花娃娃游戏周边","category_id":7,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765863782017506700.jpg\"]","price":7700,"stock":9999,"sales":0,"status":1},{"id":175,"name":"王者荣耀夏侯淳盒蛋公仔游戏周边QQfamily","category_id":7,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765863642672282700.jpg\"]","price":8700,"stock":9999,"sales":0,"status":1},{"id":174,"name":"王者荣耀公孙离绒团毛绒挂件游戏周边NICE FUN","category_id":7,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765863285495146100.jpg\"]","price":6400,"stock":9999,"sales":0,"status":1},{"id":173,"name":"王者荣耀正版NFC手机挂绳(触碰启动王者)","category_id":7,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/16/1765863146757914300.jpg\"]","price":3200,"stock":9999,"sales":0,"status":1},{"id":172,"name":"迪士尼(Disney)官方正版暗黑库洛米毛绒玩具65cm","category_id":6,"images_json":"[\"https://keaiya-1259195914.cos.ap-shanghai.myqcloud.com/images/2025/12/15/1765796432217447600.jpg\"]","price":10500,"stock":9999,"sales":0,"status":1}]},"http_code":200,"http_code_msg":"OK","cost_seconds":0.125343417},"third_party_requests":null,"debugs":null,"sqls":[{"time":"2025-12-22 15:01:17","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/router/interceptor/admin_auth.go:43","sql":"SELECT * FROM `admin` WHERE `admin`.`id` = 2 ORDER BY `admin`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.07719},{"time":"2025-12-22 15:01:17","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/service/product/product.go:233","sql":"SELECT count(*) FROM `products` WHERE deleted_at IS NULL AND `products`.`deleted_at` IS NULL","rows_affected":1,"cost_seconds":0.011444125},{"time":"2025-12-22 15:01:17","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/service/product/product.go:237","sql":"SELECT * FROM `products` WHERE deleted_at IS NULL AND `products`.`deleted_at` IS NULL ORDER BY `products`.`id` DESC LIMIT 100","rows_affected":100,"cost_seconds":0.035303292}],"redis":null,"mongos":null,"success":true,"cost_seconds":0.125343667}} +{"level":"info","time":"2025-12-22 15:01:24","caller":"logger/logger.go:309","msg":"trace-log","domain":"mini-chat[fat]","method":"PUT","path":"/api/admin/activities/64/issues/71/rewards/247","http_code":200,"business_code":0,"success":true,"cost_seconds":0.089919666,"trace_id":"2002997886500999168","trace_info":{"trace_id":"2002997886500999168","request":{"ttl":"un-limit","method":"PUT","decoded_url":"/api/admin/activities/64/issues/71/rewards/247","header":{"Content-Type":"application/json"},"body":"{\"product_id\":271,\"weight\":0,\"quantity\":3,\"original_qty\":3,\"level\":0,\"sort\":11,\"is_boss\":1,\"name\":\"终极大奖-45对\",\"min_score\":1}"},"response":{"header":{"Access-Control-Allow-Credentials":["true"],"Access-Control-Allow-Origin":["*"],"Content-Type":["application/json; charset=utf-8"],"Trace-Id":["2002997886500999168"],"Vary":["Origin"]},"body":{"message":"操作成功"},"http_code":200,"http_code_msg":"OK","cost_seconds":0.089919458},"third_party_requests":null,"debugs":null,"sqls":[{"time":"2025-12-22 15:01:24","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/router/interceptor/admin_auth.go:43","sql":"SELECT * FROM `admin` WHERE `admin`.`id` = 2 ORDER BY `admin`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.02192225},{"time":"2025-12-22 15:01:24","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/service/activity/rewards_modify.go:14","sql":"SELECT * FROM `activity_reward_settings` WHERE `activity_reward_settings`.`id` = 247 AND deleted_at IS NULL AND `activity_reward_settings`.`deleted_at` IS NULL ORDER BY `activity_reward_settings`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.02416775},{"time":"2025-12-22 15:01:24","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/service/activity/rewards_modify.go:46","sql":"INSERT INTO `activity_reward_settings` (`issue_id`,`product_id`,`name`,`weight`,`quantity`,`original_qty`,`level`,`sort`,`is_boss`,`min_score`,`deleted_at`,`id`,`created_at`,`updated_at`) VALUES (71,271,'终极大奖-45对',0,3,3,0,11,1,1,NULL,247,'2025-12-22 11:09:07.96','2025-12-22 15:01:24.747') ON DUPLICATE KEY UPDATE `issue_id`=VALUES(`issue_id`),`product_id`=VALUES(`product_id`),`name`=VALUES(`name`),`weight`=VALUES(`weight`),`quantity`=VALUES(`quantity`),`original_qty`=VALUES(`original_qty`),`level`=VALUES(`level`),`sort`=VALUES(`sort`),`is_boss`=VALUES(`is_boss`),`min_score`=VALUES(`min_score`),`deleted_at`=VALUES(`deleted_at`)","rows_affected":2,"cost_seconds":0.034819}],"redis":null,"mongos":null,"success":true,"cost_seconds":0.089919666}} +{"level":"info","time":"2025-12-22 15:01:24","caller":"logger/logger.go:309","msg":"trace-log","domain":"mini-chat[fat]","method":"GET","path":"/api/admin/activities/64/issues/71/rewards","http_code":200,"business_code":0,"success":true,"cost_seconds":0.047932542,"trace_id":"2002997887268556800","trace_info":{"trace_id":"2002997887268556800","request":{"ttl":"un-limit","method":"GET","decoded_url":"/api/admin/activities/64/issues/71/rewards","header":{"Content-Type":""},"body":""},"response":{"header":{"Content-Type":["application/json; charset=utf-8"],"Trace-Id":["2002997887268556800"],"Vary":["Origin"]},"body":{"list":[{"id":237,"product_id":0,"name":"参与奖-5对","weight":0,"quantity":98,"original_qty":100,"level":10,"sort":1,"is_boss":0,"min_score":11},{"id":238,"product_id":0,"name":"参与奖-10对","weight":0,"quantity":100,"original_qty":100,"level":9,"sort":2,"is_boss":0,"min_score":10},{"id":239,"product_id":0,"name":"铜奖-15对","weight":0,"quantity":50,"original_qty":50,"level":8,"sort":3,"is_boss":0,"min_score":9},{"id":240,"product_id":0,"name":"铜奖-20对","weight":0,"quantity":50,"original_qty":50,"level":7,"sort":4,"is_boss":0,"min_score":8},{"id":241,"product_id":0,"name":"银奖-25对","weight":0,"quantity":30,"original_qty":30,"level":6,"sort":5,"is_boss":0,"min_score":7},{"id":242,"product_id":0,"name":"银奖-30对","weight":0,"quantity":30,"original_qty":30,"level":5,"sort":6,"is_boss":0,"min_score":6},{"id":243,"product_id":0,"name":"金奖-35对","weight":0,"quantity":20,"original_qty":20,"level":4,"sort":7,"is_boss":0,"min_score":5},{"id":244,"product_id":0,"name":"金奖-40对","weight":0,"quantity":19,"original_qty":20,"level":3,"sort":8,"is_boss":0,"min_score":4},{"id":245,"product_id":0,"name":"特等奖-42对","weight":0,"quantity":10,"original_qty":10,"level":2,"sort":9,"is_boss":0,"min_score":3},{"id":246,"product_id":0,"name":"特等奖-44对","weight":0,"quantity":5,"original_qty":5,"level":1,"sort":10,"is_boss":0,"min_score":2},{"id":247,"product_id":271,"name":"终极大奖-45对","weight":0,"quantity":3,"original_qty":3,"level":0,"sort":11,"is_boss":1,"min_score":1}]},"http_code":200,"http_code_msg":"OK","cost_seconds":0.04793225},"third_party_requests":null,"debugs":null,"sqls":[{"time":"2025-12-22 15:01:24","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/router/interceptor/admin_auth.go:43","sql":"SELECT * FROM `admin` WHERE `admin`.`id` = 2 ORDER BY `admin`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.022524291},{"time":"2025-12-22 15:01:24","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/service/activity/rewards_list.go:13","sql":"SELECT * FROM `activity_reward_settings` WHERE `activity_reward_settings`.`issue_id` = 71 AND deleted_at IS NULL AND `activity_reward_settings`.`deleted_at` IS NULL ORDER BY `activity_reward_settings`.`sort` ASC","rows_affected":11,"cost_seconds":0.025066375}],"redis":null,"mongos":null,"success":true,"cost_seconds":0.047932542}} +{"level":"info","time":"2025-12-22 15:01:29","caller":"logger/logger.go:309","msg":"trace-log","domain":"mini-chat[fat]","method":"PUT","path":"/api/admin/activities/64/issues/71/rewards/246","http_code":200,"business_code":0,"success":true,"cost_seconds":0.100690208,"trace_id":"2002997907417993216","trace_info":{"trace_id":"2002997907417993216","request":{"ttl":"un-limit","method":"PUT","decoded_url":"/api/admin/activities/64/issues/71/rewards/246","header":{"Content-Type":"application/json"},"body":"{\"product_id\":270,\"weight\":0,\"quantity\":5,\"original_qty\":5,\"level\":1,\"sort\":10,\"is_boss\":0,\"name\":\"特等奖-44对\",\"min_score\":2}"},"response":{"header":{"Access-Control-Allow-Credentials":["true"],"Access-Control-Allow-Origin":["*"],"Content-Type":["application/json; charset=utf-8"],"Trace-Id":["2002997907417993216"],"Vary":["Origin"]},"body":{"message":"操作成功"},"http_code":200,"http_code_msg":"OK","cost_seconds":0.100689875},"third_party_requests":null,"debugs":null,"sqls":[{"time":"2025-12-22 15:01:29","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/router/interceptor/admin_auth.go:43","sql":"SELECT * FROM `admin` WHERE `admin`.`id` = 2 ORDER BY `admin`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.030338917},{"time":"2025-12-22 15:01:29","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/service/activity/rewards_modify.go:14","sql":"SELECT * FROM `activity_reward_settings` WHERE `activity_reward_settings`.`id` = 246 AND deleted_at IS NULL AND `activity_reward_settings`.`deleted_at` IS NULL ORDER BY `activity_reward_settings`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.029328125},{"time":"2025-12-22 15:01:29","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/service/activity/rewards_modify.go:46","sql":"INSERT INTO `activity_reward_settings` (`issue_id`,`product_id`,`name`,`weight`,`quantity`,`original_qty`,`level`,`sort`,`is_boss`,`min_score`,`deleted_at`,`id`,`created_at`,`updated_at`) VALUES (71,270,'特等奖-44对',0,5,5,1,10,0,2,NULL,246,'2025-12-22 11:09:07.96','2025-12-22 15:01:29.747') ON DUPLICATE KEY UPDATE `issue_id`=VALUES(`issue_id`),`product_id`=VALUES(`product_id`),`name`=VALUES(`name`),`weight`=VALUES(`weight`),`quantity`=VALUES(`quantity`),`original_qty`=VALUES(`original_qty`),`level`=VALUES(`level`),`sort`=VALUES(`sort`),`is_boss`=VALUES(`is_boss`),`min_score`=VALUES(`min_score`),`deleted_at`=VALUES(`deleted_at`)","rows_affected":2,"cost_seconds":0.03250575}],"redis":null,"mongos":null,"success":true,"cost_seconds":0.100690208}} +{"level":"info","time":"2025-12-22 15:01:29","caller":"logger/logger.go:309","msg":"trace-log","domain":"mini-chat[fat]","method":"GET","path":"/api/admin/activities/64/issues/71/rewards","http_code":200,"business_code":0,"success":true,"cost_seconds":0.042044416,"trace_id":"2002997908206522368","trace_info":{"trace_id":"2002997908206522368","request":{"ttl":"un-limit","method":"GET","decoded_url":"/api/admin/activities/64/issues/71/rewards","header":{"Content-Type":""},"body":""},"response":{"header":{"Content-Type":["application/json; charset=utf-8"],"Trace-Id":["2002997908206522368"],"Vary":["Origin"]},"body":{"list":[{"id":237,"product_id":0,"name":"参与奖-5对","weight":0,"quantity":98,"original_qty":100,"level":10,"sort":1,"is_boss":0,"min_score":11},{"id":238,"product_id":0,"name":"参与奖-10对","weight":0,"quantity":100,"original_qty":100,"level":9,"sort":2,"is_boss":0,"min_score":10},{"id":239,"product_id":0,"name":"铜奖-15对","weight":0,"quantity":50,"original_qty":50,"level":8,"sort":3,"is_boss":0,"min_score":9},{"id":240,"product_id":0,"name":"铜奖-20对","weight":0,"quantity":50,"original_qty":50,"level":7,"sort":4,"is_boss":0,"min_score":8},{"id":241,"product_id":0,"name":"银奖-25对","weight":0,"quantity":30,"original_qty":30,"level":6,"sort":5,"is_boss":0,"min_score":7},{"id":242,"product_id":0,"name":"银奖-30对","weight":0,"quantity":30,"original_qty":30,"level":5,"sort":6,"is_boss":0,"min_score":6},{"id":243,"product_id":0,"name":"金奖-35对","weight":0,"quantity":20,"original_qty":20,"level":4,"sort":7,"is_boss":0,"min_score":5},{"id":244,"product_id":0,"name":"金奖-40对","weight":0,"quantity":19,"original_qty":20,"level":3,"sort":8,"is_boss":0,"min_score":4},{"id":245,"product_id":0,"name":"特等奖-42对","weight":0,"quantity":10,"original_qty":10,"level":2,"sort":9,"is_boss":0,"min_score":3},{"id":246,"product_id":270,"name":"特等奖-44对","weight":0,"quantity":5,"original_qty":5,"level":1,"sort":10,"is_boss":0,"min_score":2},{"id":247,"product_id":271,"name":"终极大奖-45对","weight":0,"quantity":3,"original_qty":3,"level":0,"sort":11,"is_boss":1,"min_score":1}]},"http_code":200,"http_code_msg":"OK","cost_seconds":0.042044125},"third_party_requests":null,"debugs":null,"sqls":[{"time":"2025-12-22 15:01:29","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/router/interceptor/admin_auth.go:43","sql":"SELECT * FROM `admin` WHERE `admin`.`id` = 2 ORDER BY `admin`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.02029875},{"time":"2025-12-22 15:01:29","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/service/activity/rewards_list.go:13","sql":"SELECT * FROM `activity_reward_settings` WHERE `activity_reward_settings`.`issue_id` = 71 AND deleted_at IS NULL AND `activity_reward_settings`.`deleted_at` IS NULL ORDER BY `activity_reward_settings`.`sort` ASC","rows_affected":11,"cost_seconds":0.021386041}],"redis":null,"mongos":null,"success":true,"cost_seconds":0.042044416}} +{"level":"info","time":"2025-12-22 15:01:36","caller":"logger/logger.go:309","msg":"trace-log","domain":"mini-chat[fat]","method":"PUT","path":"/api/admin/activities/64/issues/71/rewards/245","http_code":200,"business_code":0,"success":true,"cost_seconds":0.087473,"trace_id":"2002997936971059200","trace_info":{"trace_id":"2002997936971059200","request":{"ttl":"un-limit","method":"PUT","decoded_url":"/api/admin/activities/64/issues/71/rewards/245","header":{"Content-Type":"application/json"},"body":"{\"product_id\":269,\"weight\":0,\"quantity\":10,\"original_qty\":10,\"level\":2,\"sort\":9,\"is_boss\":0,\"name\":\"特等奖-42对\",\"min_score\":3}"},"response":{"header":{"Access-Control-Allow-Credentials":["true"],"Access-Control-Allow-Origin":["*"],"Content-Type":["application/json; charset=utf-8"],"Trace-Id":["2002997936971059200"],"Vary":["Origin"]},"body":{"message":"操作成功"},"http_code":200,"http_code_msg":"OK","cost_seconds":0.087472292},"third_party_requests":null,"debugs":null,"sqls":[{"time":"2025-12-22 15:01:36","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/router/interceptor/admin_auth.go:43","sql":"SELECT * FROM `admin` WHERE `admin`.`id` = 2 ORDER BY `admin`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.021795959},{"time":"2025-12-22 15:01:36","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/service/activity/rewards_modify.go:14","sql":"SELECT * FROM `activity_reward_settings` WHERE `activity_reward_settings`.`id` = 245 AND deleted_at IS NULL AND `activity_reward_settings`.`deleted_at` IS NULL ORDER BY `activity_reward_settings`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.02392575},{"time":"2025-12-22 15:01:36","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/service/activity/rewards_modify.go:46","sql":"INSERT INTO `activity_reward_settings` (`issue_id`,`product_id`,`name`,`weight`,`quantity`,`original_qty`,`level`,`sort`,`is_boss`,`min_score`,`deleted_at`,`id`,`created_at`,`updated_at`) VALUES (71,269,'特等奖-42对',0,10,10,2,9,0,3,NULL,245,'2025-12-22 11:09:07.96','2025-12-22 15:01:36.78') ON DUPLICATE KEY UPDATE `issue_id`=VALUES(`issue_id`),`product_id`=VALUES(`product_id`),`name`=VALUES(`name`),`weight`=VALUES(`weight`),`quantity`=VALUES(`quantity`),`original_qty`=VALUES(`original_qty`),`level`=VALUES(`level`),`sort`=VALUES(`sort`),`is_boss`=VALUES(`is_boss`),`min_score`=VALUES(`min_score`),`deleted_at`=VALUES(`deleted_at`)","rows_affected":2,"cost_seconds":0.03237525}],"redis":null,"mongos":null,"success":true,"cost_seconds":0.087473}} +{"level":"info","time":"2025-12-22 15:01:36","caller":"logger/logger.go:309","msg":"trace-log","domain":"mini-chat[fat]","method":"GET","path":"/api/admin/activities/64/issues/71/rewards","http_code":200,"business_code":0,"success":true,"cost_seconds":0.047734542,"trace_id":"2002997937675702272","trace_info":{"trace_id":"2002997937675702272","request":{"ttl":"un-limit","method":"GET","decoded_url":"/api/admin/activities/64/issues/71/rewards","header":{"Content-Type":""},"body":""},"response":{"header":{"Content-Type":["application/json; charset=utf-8"],"Trace-Id":["2002997937675702272"],"Vary":["Origin"]},"body":{"list":[{"id":237,"product_id":0,"name":"参与奖-5对","weight":0,"quantity":98,"original_qty":100,"level":10,"sort":1,"is_boss":0,"min_score":11},{"id":238,"product_id":0,"name":"参与奖-10对","weight":0,"quantity":100,"original_qty":100,"level":9,"sort":2,"is_boss":0,"min_score":10},{"id":239,"product_id":0,"name":"铜奖-15对","weight":0,"quantity":50,"original_qty":50,"level":8,"sort":3,"is_boss":0,"min_score":9},{"id":240,"product_id":0,"name":"铜奖-20对","weight":0,"quantity":50,"original_qty":50,"level":7,"sort":4,"is_boss":0,"min_score":8},{"id":241,"product_id":0,"name":"银奖-25对","weight":0,"quantity":30,"original_qty":30,"level":6,"sort":5,"is_boss":0,"min_score":7},{"id":242,"product_id":0,"name":"银奖-30对","weight":0,"quantity":30,"original_qty":30,"level":5,"sort":6,"is_boss":0,"min_score":6},{"id":243,"product_id":0,"name":"金奖-35对","weight":0,"quantity":20,"original_qty":20,"level":4,"sort":7,"is_boss":0,"min_score":5},{"id":244,"product_id":0,"name":"金奖-40对","weight":0,"quantity":19,"original_qty":20,"level":3,"sort":8,"is_boss":0,"min_score":4},{"id":245,"product_id":269,"name":"特等奖-42对","weight":0,"quantity":10,"original_qty":10,"level":2,"sort":9,"is_boss":0,"min_score":3},{"id":246,"product_id":270,"name":"特等奖-44对","weight":0,"quantity":5,"original_qty":5,"level":1,"sort":10,"is_boss":0,"min_score":2},{"id":247,"product_id":271,"name":"终极大奖-45对","weight":0,"quantity":3,"original_qty":3,"level":0,"sort":11,"is_boss":1,"min_score":1}]},"http_code":200,"http_code_msg":"OK","cost_seconds":0.047734125},"third_party_requests":null,"debugs":null,"sqls":[{"time":"2025-12-22 15:01:36","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/router/interceptor/admin_auth.go:43","sql":"SELECT * FROM `admin` WHERE `admin`.`id` = 2 ORDER BY `admin`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.024515458},{"time":"2025-12-22 15:01:36","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/service/activity/rewards_list.go:13","sql":"SELECT * FROM `activity_reward_settings` WHERE `activity_reward_settings`.`issue_id` = 71 AND deleted_at IS NULL AND `activity_reward_settings`.`deleted_at` IS NULL ORDER BY `activity_reward_settings`.`sort` ASC","rows_affected":11,"cost_seconds":0.022876667}],"redis":null,"mongos":null,"success":true,"cost_seconds":0.047734542}} +{"level":"info","time":"2025-12-22 15:01:42","caller":"logger/logger.go:309","msg":"trace-log","domain":"mini-chat[fat]","method":"PUT","path":"/api/admin/activities/64/issues/71/rewards/244","http_code":200,"business_code":0,"success":true,"cost_seconds":0.092194875,"trace_id":"2002997961411268608","trace_info":{"trace_id":"2002997961411268608","request":{"ttl":"un-limit","method":"PUT","decoded_url":"/api/admin/activities/64/issues/71/rewards/244","header":{"Content-Type":"application/json"},"body":"{\"product_id\":268,\"weight\":0,\"quantity\":19,\"original_qty\":20,\"level\":3,\"sort\":8,\"is_boss\":0,\"name\":\"金奖-40对\",\"min_score\":4}"},"response":{"header":{"Access-Control-Allow-Credentials":["true"],"Access-Control-Allow-Origin":["*"],"Content-Type":["application/json; charset=utf-8"],"Trace-Id":["2002997961411268608"],"Vary":["Origin"]},"body":{"message":"操作成功"},"http_code":200,"http_code_msg":"OK","cost_seconds":0.092194583},"third_party_requests":null,"debugs":null,"sqls":[{"time":"2025-12-22 15:01:42","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/router/interceptor/admin_auth.go:43","sql":"SELECT * FROM `admin` WHERE `admin`.`id` = 2 ORDER BY `admin`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.022846333},{"time":"2025-12-22 15:01:42","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/service/activity/rewards_modify.go:14","sql":"SELECT * FROM `activity_reward_settings` WHERE `activity_reward_settings`.`id` = 244 AND deleted_at IS NULL AND `activity_reward_settings`.`deleted_at` IS NULL ORDER BY `activity_reward_settings`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.023200583},{"time":"2025-12-22 15:01:42","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/service/activity/rewards_modify.go:46","sql":"INSERT INTO `activity_reward_settings` (`issue_id`,`product_id`,`name`,`weight`,`quantity`,`original_qty`,`level`,`sort`,`is_boss`,`min_score`,`deleted_at`,`id`,`created_at`,`updated_at`) VALUES (71,268,'金奖-40对',0,19,20,3,8,0,4,NULL,244,'2025-12-22 11:09:07.96','2025-12-22 15:01:42.607') ON DUPLICATE KEY UPDATE `issue_id`=VALUES(`issue_id`),`product_id`=VALUES(`product_id`),`name`=VALUES(`name`),`weight`=VALUES(`weight`),`quantity`=VALUES(`quantity`),`original_qty`=VALUES(`original_qty`),`level`=VALUES(`level`),`sort`=VALUES(`sort`),`is_boss`=VALUES(`is_boss`),`min_score`=VALUES(`min_score`),`deleted_at`=VALUES(`deleted_at`)","rows_affected":2,"cost_seconds":0.036579292}],"redis":null,"mongos":null,"success":true,"cost_seconds":0.092194875}} +{"level":"info","time":"2025-12-22 15:01:42","caller":"logger/logger.go:309","msg":"trace-log","domain":"mini-chat[fat]","method":"GET","path":"/api/admin/activities/64/issues/71/rewards","http_code":200,"business_code":0,"success":true,"cost_seconds":0.041971041,"trace_id":"2002997962174631936","trace_info":{"trace_id":"2002997962174631936","request":{"ttl":"un-limit","method":"GET","decoded_url":"/api/admin/activities/64/issues/71/rewards","header":{"Content-Type":""},"body":""},"response":{"header":{"Content-Type":["application/json; charset=utf-8"],"Trace-Id":["2002997962174631936"],"Vary":["Origin"]},"body":{"list":[{"id":237,"product_id":0,"name":"参与奖-5对","weight":0,"quantity":98,"original_qty":100,"level":10,"sort":1,"is_boss":0,"min_score":11},{"id":238,"product_id":0,"name":"参与奖-10对","weight":0,"quantity":100,"original_qty":100,"level":9,"sort":2,"is_boss":0,"min_score":10},{"id":239,"product_id":0,"name":"铜奖-15对","weight":0,"quantity":50,"original_qty":50,"level":8,"sort":3,"is_boss":0,"min_score":9},{"id":240,"product_id":0,"name":"铜奖-20对","weight":0,"quantity":50,"original_qty":50,"level":7,"sort":4,"is_boss":0,"min_score":8},{"id":241,"product_id":0,"name":"银奖-25对","weight":0,"quantity":30,"original_qty":30,"level":6,"sort":5,"is_boss":0,"min_score":7},{"id":242,"product_id":0,"name":"银奖-30对","weight":0,"quantity":30,"original_qty":30,"level":5,"sort":6,"is_boss":0,"min_score":6},{"id":243,"product_id":0,"name":"金奖-35对","weight":0,"quantity":20,"original_qty":20,"level":4,"sort":7,"is_boss":0,"min_score":5},{"id":244,"product_id":268,"name":"金奖-40对","weight":0,"quantity":19,"original_qty":20,"level":3,"sort":8,"is_boss":0,"min_score":4},{"id":245,"product_id":269,"name":"特等奖-42对","weight":0,"quantity":10,"original_qty":10,"level":2,"sort":9,"is_boss":0,"min_score":3},{"id":246,"product_id":270,"name":"特等奖-44对","weight":0,"quantity":5,"original_qty":5,"level":1,"sort":10,"is_boss":0,"min_score":2},{"id":247,"product_id":271,"name":"终极大奖-45对","weight":0,"quantity":3,"original_qty":3,"level":0,"sort":11,"is_boss":1,"min_score":1}]},"http_code":200,"http_code_msg":"OK","cost_seconds":0.041970833},"third_party_requests":null,"debugs":null,"sqls":[{"time":"2025-12-22 15:01:42","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/router/interceptor/admin_auth.go:43","sql":"SELECT * FROM `admin` WHERE `admin`.`id` = 2 ORDER BY `admin`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.019951708},{"time":"2025-12-22 15:01:42","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/service/activity/rewards_list.go:13","sql":"SELECT * FROM `activity_reward_settings` WHERE `activity_reward_settings`.`issue_id` = 71 AND deleted_at IS NULL AND `activity_reward_settings`.`deleted_at` IS NULL ORDER BY `activity_reward_settings`.`sort` ASC","rows_affected":11,"cost_seconds":0.021690667}],"redis":null,"mongos":null,"success":true,"cost_seconds":0.041971041}} +{"level":"info","time":"2025-12-22 15:01:48","caller":"logger/logger.go:309","msg":"trace-log","domain":"mini-chat[fat]","method":"PUT","path":"/api/admin/activities/64/issues/71/rewards/243","http_code":200,"business_code":0,"success":true,"cost_seconds":0.086583875,"trace_id":"2002997987873132544","trace_info":{"trace_id":"2002997987873132544","request":{"ttl":"un-limit","method":"PUT","decoded_url":"/api/admin/activities/64/issues/71/rewards/243","header":{"Content-Type":"application/json"},"body":"{\"product_id\":266,\"weight\":0,\"quantity\":20,\"original_qty\":20,\"level\":4,\"sort\":7,\"is_boss\":0,\"name\":\"金奖-35对\",\"min_score\":5}"},"response":{"header":{"Access-Control-Allow-Credentials":["true"],"Access-Control-Allow-Origin":["*"],"Content-Type":["application/json; charset=utf-8"],"Trace-Id":["2002997987873132544"],"Vary":["Origin"]},"body":{"message":"操作成功"},"http_code":200,"http_code_msg":"OK","cost_seconds":0.086581875},"third_party_requests":null,"debugs":null,"sqls":[{"time":"2025-12-22 15:01:48","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/router/interceptor/admin_auth.go:43","sql":"SELECT * FROM `admin` WHERE `admin`.`id` = 2 ORDER BY `admin`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.019570291},{"time":"2025-12-22 15:01:48","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/service/activity/rewards_modify.go:14","sql":"SELECT * FROM `activity_reward_settings` WHERE `activity_reward_settings`.`id` = 243 AND deleted_at IS NULL AND `activity_reward_settings`.`deleted_at` IS NULL ORDER BY `activity_reward_settings`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.020926916},{"time":"2025-12-22 15:01:48","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/service/activity/rewards_modify.go:46","sql":"INSERT INTO `activity_reward_settings` (`issue_id`,`product_id`,`name`,`weight`,`quantity`,`original_qty`,`level`,`sort`,`is_boss`,`min_score`,`deleted_at`,`id`,`created_at`,`updated_at`) VALUES (71,266,'金奖-35对',0,20,20,4,7,0,5,NULL,243,'2025-12-22 11:09:07.96','2025-12-22 15:01:48.914') ON DUPLICATE KEY UPDATE `issue_id`=VALUES(`issue_id`),`product_id`=VALUES(`product_id`),`name`=VALUES(`name`),`weight`=VALUES(`weight`),`quantity`=VALUES(`quantity`),`original_qty`=VALUES(`original_qty`),`level`=VALUES(`level`),`sort`=VALUES(`sort`),`is_boss`=VALUES(`is_boss`),`min_score`=VALUES(`min_score`),`deleted_at`=VALUES(`deleted_at`)","rows_affected":2,"cost_seconds":0.033180833}],"redis":null,"mongos":null,"success":true,"cost_seconds":0.086583875}} +{"level":"info","time":"2025-12-22 15:01:49","caller":"logger/logger.go:309","msg":"trace-log","domain":"mini-chat[fat]","method":"GET","path":"/api/admin/activities/64/issues/71/rewards","http_code":200,"business_code":0,"success":true,"cost_seconds":0.041654542,"trace_id":"2002997988607135744","trace_info":{"trace_id":"2002997988607135744","request":{"ttl":"un-limit","method":"GET","decoded_url":"/api/admin/activities/64/issues/71/rewards","header":{"Content-Type":""},"body":""},"response":{"header":{"Content-Type":["application/json; charset=utf-8"],"Trace-Id":["2002997988607135744"],"Vary":["Origin"]},"body":{"list":[{"id":237,"product_id":0,"name":"参与奖-5对","weight":0,"quantity":98,"original_qty":100,"level":10,"sort":1,"is_boss":0,"min_score":11},{"id":238,"product_id":0,"name":"参与奖-10对","weight":0,"quantity":100,"original_qty":100,"level":9,"sort":2,"is_boss":0,"min_score":10},{"id":239,"product_id":0,"name":"铜奖-15对","weight":0,"quantity":50,"original_qty":50,"level":8,"sort":3,"is_boss":0,"min_score":9},{"id":240,"product_id":0,"name":"铜奖-20对","weight":0,"quantity":50,"original_qty":50,"level":7,"sort":4,"is_boss":0,"min_score":8},{"id":241,"product_id":0,"name":"银奖-25对","weight":0,"quantity":30,"original_qty":30,"level":6,"sort":5,"is_boss":0,"min_score":7},{"id":242,"product_id":0,"name":"银奖-30对","weight":0,"quantity":30,"original_qty":30,"level":5,"sort":6,"is_boss":0,"min_score":6},{"id":243,"product_id":266,"name":"金奖-35对","weight":0,"quantity":20,"original_qty":20,"level":4,"sort":7,"is_boss":0,"min_score":5},{"id":244,"product_id":268,"name":"金奖-40对","weight":0,"quantity":19,"original_qty":20,"level":3,"sort":8,"is_boss":0,"min_score":4},{"id":245,"product_id":269,"name":"特等奖-42对","weight":0,"quantity":10,"original_qty":10,"level":2,"sort":9,"is_boss":0,"min_score":3},{"id":246,"product_id":270,"name":"特等奖-44对","weight":0,"quantity":5,"original_qty":5,"level":1,"sort":10,"is_boss":0,"min_score":2},{"id":247,"product_id":271,"name":"终极大奖-45对","weight":0,"quantity":3,"original_qty":3,"level":0,"sort":11,"is_boss":1,"min_score":1}]},"http_code":200,"http_code_msg":"OK","cost_seconds":0.041644917},"third_party_requests":null,"debugs":null,"sqls":[{"time":"2025-12-22 15:01:49","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/router/interceptor/admin_auth.go:43","sql":"SELECT * FROM `admin` WHERE `admin`.`id` = 2 ORDER BY `admin`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.020026875},{"time":"2025-12-22 15:01:49","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/service/activity/rewards_list.go:13","sql":"SELECT * FROM `activity_reward_settings` WHERE `activity_reward_settings`.`issue_id` = 71 AND deleted_at IS NULL AND `activity_reward_settings`.`deleted_at` IS NULL ORDER BY `activity_reward_settings`.`sort` ASC","rows_affected":11,"cost_seconds":0.021287041}],"redis":null,"mongos":null,"success":true,"cost_seconds":0.041654542}} +{"level":"info","time":"2025-12-22 15:01:53","caller":"logger/logger.go:309","msg":"trace-log","domain":"mini-chat[fat]","method":"PUT","path":"/api/admin/activities/64/issues/71/rewards/243","http_code":200,"business_code":0,"success":true,"cost_seconds":0.092789666,"trace_id":"2002998006357430272","trace_info":{"trace_id":"2002998006357430272","request":{"ttl":"un-limit","method":"PUT","decoded_url":"/api/admin/activities/64/issues/71/rewards/243","header":{"Content-Type":"application/json"},"body":"{\"product_id\":265,\"weight\":0,\"quantity\":20,\"original_qty\":20,\"level\":4,\"sort\":7,\"is_boss\":0,\"name\":\"金奖-35对\",\"min_score\":5}"},"response":{"header":{"Access-Control-Allow-Credentials":["true"],"Access-Control-Allow-Origin":["*"],"Content-Type":["application/json; charset=utf-8"],"Trace-Id":["2002998006357430272"],"Vary":["Origin"]},"body":{"message":"操作成功"},"http_code":200,"http_code_msg":"OK","cost_seconds":0.092789208},"third_party_requests":null,"debugs":null,"sqls":[{"time":"2025-12-22 15:01:53","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/router/interceptor/admin_auth.go:43","sql":"SELECT * FROM `admin` WHERE `admin`.`id` = 2 ORDER BY `admin`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.026266792},{"time":"2025-12-22 15:01:53","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/service/activity/rewards_modify.go:14","sql":"SELECT * FROM `activity_reward_settings` WHERE `activity_reward_settings`.`id` = 243 AND deleted_at IS NULL AND `activity_reward_settings`.`deleted_at` IS NULL ORDER BY `activity_reward_settings`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.022577125},{"time":"2025-12-22 15:01:53","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/service/activity/rewards_modify.go:46","sql":"INSERT INTO `activity_reward_settings` (`issue_id`,`product_id`,`name`,`weight`,`quantity`,`original_qty`,`level`,`sort`,`is_boss`,`min_score`,`deleted_at`,`id`,`created_at`,`updated_at`) VALUES (71,265,'金奖-35对',0,20,20,4,7,0,5,NULL,243,'2025-12-22 11:09:07.96','2025-12-22 15:01:53.326') ON DUPLICATE KEY UPDATE `issue_id`=VALUES(`issue_id`),`product_id`=VALUES(`product_id`),`name`=VALUES(`name`),`weight`=VALUES(`weight`),`quantity`=VALUES(`quantity`),`original_qty`=VALUES(`original_qty`),`level`=VALUES(`level`),`sort`=VALUES(`sort`),`is_boss`=VALUES(`is_boss`),`min_score`=VALUES(`min_score`),`deleted_at`=VALUES(`deleted_at`)","rows_affected":2,"cost_seconds":0.031541459}],"redis":null,"mongos":null,"success":true,"cost_seconds":0.092789666}} +{"level":"info","time":"2025-12-22 15:01:53","caller":"logger/logger.go:309","msg":"trace-log","domain":"mini-chat[fat]","method":"GET","path":"/api/admin/activities/64/issues/71/rewards","http_code":200,"business_code":0,"success":true,"cost_seconds":0.042014875,"trace_id":"2002998007137570816","trace_info":{"trace_id":"2002998007137570816","request":{"ttl":"un-limit","method":"GET","decoded_url":"/api/admin/activities/64/issues/71/rewards","header":{"Content-Type":""},"body":""},"response":{"header":{"Content-Type":["application/json; charset=utf-8"],"Trace-Id":["2002998007137570816"],"Vary":["Origin"]},"body":{"list":[{"id":237,"product_id":0,"name":"参与奖-5对","weight":0,"quantity":98,"original_qty":100,"level":10,"sort":1,"is_boss":0,"min_score":11},{"id":238,"product_id":0,"name":"参与奖-10对","weight":0,"quantity":100,"original_qty":100,"level":9,"sort":2,"is_boss":0,"min_score":10},{"id":239,"product_id":0,"name":"铜奖-15对","weight":0,"quantity":50,"original_qty":50,"level":8,"sort":3,"is_boss":0,"min_score":9},{"id":240,"product_id":0,"name":"铜奖-20对","weight":0,"quantity":50,"original_qty":50,"level":7,"sort":4,"is_boss":0,"min_score":8},{"id":241,"product_id":0,"name":"银奖-25对","weight":0,"quantity":30,"original_qty":30,"level":6,"sort":5,"is_boss":0,"min_score":7},{"id":242,"product_id":0,"name":"银奖-30对","weight":0,"quantity":30,"original_qty":30,"level":5,"sort":6,"is_boss":0,"min_score":6},{"id":243,"product_id":265,"name":"金奖-35对","weight":0,"quantity":20,"original_qty":20,"level":4,"sort":7,"is_boss":0,"min_score":5},{"id":244,"product_id":268,"name":"金奖-40对","weight":0,"quantity":19,"original_qty":20,"level":3,"sort":8,"is_boss":0,"min_score":4},{"id":245,"product_id":269,"name":"特等奖-42对","weight":0,"quantity":10,"original_qty":10,"level":2,"sort":9,"is_boss":0,"min_score":3},{"id":246,"product_id":270,"name":"特等奖-44对","weight":0,"quantity":5,"original_qty":5,"level":1,"sort":10,"is_boss":0,"min_score":2},{"id":247,"product_id":271,"name":"终极大奖-45对","weight":0,"quantity":3,"original_qty":3,"level":0,"sort":11,"is_boss":1,"min_score":1}]},"http_code":200,"http_code_msg":"OK","cost_seconds":0.0420145},"third_party_requests":null,"debugs":null,"sqls":[{"time":"2025-12-22 15:01:53","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/router/interceptor/admin_auth.go:43","sql":"SELECT * FROM `admin` WHERE `admin`.`id` = 2 ORDER BY `admin`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.021022291},{"time":"2025-12-22 15:01:53","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/service/activity/rewards_list.go:13","sql":"SELECT * FROM `activity_reward_settings` WHERE `activity_reward_settings`.`issue_id` = 71 AND deleted_at IS NULL AND `activity_reward_settings`.`deleted_at` IS NULL ORDER BY `activity_reward_settings`.`sort` ASC","rows_affected":11,"cost_seconds":0.020685917}],"redis":null,"mongos":null,"success":true,"cost_seconds":0.042014875}} +{"level":"info","time":"2025-12-22 15:01:59","caller":"logger/logger.go:309","msg":"trace-log","domain":"mini-chat[fat]","method":"PUT","path":"/api/admin/activities/64/issues/71/rewards/242","http_code":200,"business_code":0,"success":true,"cost_seconds":0.085050916,"trace_id":"2002998033297444864","trace_info":{"trace_id":"2002998033297444864","request":{"ttl":"un-limit","method":"PUT","decoded_url":"/api/admin/activities/64/issues/71/rewards/242","header":{"Content-Type":"application/json"},"body":"{\"product_id\":266,\"weight\":0,\"quantity\":30,\"original_qty\":30,\"level\":5,\"sort\":6,\"is_boss\":0,\"name\":\"银奖-30对\",\"min_score\":6}"},"response":{"header":{"Access-Control-Allow-Credentials":["true"],"Access-Control-Allow-Origin":["*"],"Content-Type":["application/json; charset=utf-8"],"Trace-Id":["2002998033297444864"],"Vary":["Origin"]},"body":{"message":"操作成功"},"http_code":200,"http_code_msg":"OK","cost_seconds":0.085050458},"third_party_requests":null,"debugs":null,"sqls":[{"time":"2025-12-22 15:01:59","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/router/interceptor/admin_auth.go:43","sql":"SELECT * FROM `admin` WHERE `admin`.`id` = 2 ORDER BY `admin`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.02137075},{"time":"2025-12-22 15:01:59","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/service/activity/rewards_modify.go:14","sql":"SELECT * FROM `activity_reward_settings` WHERE `activity_reward_settings`.`id` = 242 AND deleted_at IS NULL AND `activity_reward_settings`.`deleted_at` IS NULL ORDER BY `activity_reward_settings`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.021537625},{"time":"2025-12-22 15:01:59","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/service/activity/rewards_modify.go:46","sql":"INSERT INTO `activity_reward_settings` (`issue_id`,`product_id`,`name`,`weight`,`quantity`,`original_qty`,`level`,`sort`,`is_boss`,`min_score`,`deleted_at`,`id`,`created_at`,`updated_at`) VALUES (71,266,'银奖-30对',0,30,30,5,6,0,6,NULL,242,'2025-12-22 11:09:07.96','2025-12-22 15:01:59.743') ON DUPLICATE KEY UPDATE `issue_id`=VALUES(`issue_id`),`product_id`=VALUES(`product_id`),`name`=VALUES(`name`),`weight`=VALUES(`weight`),`quantity`=VALUES(`quantity`),`original_qty`=VALUES(`original_qty`),`level`=VALUES(`level`),`sort`=VALUES(`sort`),`is_boss`=VALUES(`is_boss`),`min_score`=VALUES(`min_score`),`deleted_at`=VALUES(`deleted_at`)","rows_affected":2,"cost_seconds":0.03209675}],"redis":null,"mongos":null,"success":true,"cost_seconds":0.085050916}} +{"level":"info","time":"2025-12-22 15:01:59","caller":"logger/logger.go:309","msg":"trace-log","domain":"mini-chat[fat]","method":"GET","path":"/api/admin/activities/64/issues/71/rewards","http_code":200,"business_code":0,"success":true,"cost_seconds":0.042438833,"trace_id":"2002998034014670848","trace_info":{"trace_id":"2002998034014670848","request":{"ttl":"un-limit","method":"GET","decoded_url":"/api/admin/activities/64/issues/71/rewards","header":{"Content-Type":""},"body":""},"response":{"header":{"Content-Type":["application/json; charset=utf-8"],"Trace-Id":["2002998034014670848"],"Vary":["Origin"]},"body":{"list":[{"id":237,"product_id":0,"name":"参与奖-5对","weight":0,"quantity":98,"original_qty":100,"level":10,"sort":1,"is_boss":0,"min_score":11},{"id":238,"product_id":0,"name":"参与奖-10对","weight":0,"quantity":100,"original_qty":100,"level":9,"sort":2,"is_boss":0,"min_score":10},{"id":239,"product_id":0,"name":"铜奖-15对","weight":0,"quantity":50,"original_qty":50,"level":8,"sort":3,"is_boss":0,"min_score":9},{"id":240,"product_id":0,"name":"铜奖-20对","weight":0,"quantity":50,"original_qty":50,"level":7,"sort":4,"is_boss":0,"min_score":8},{"id":241,"product_id":0,"name":"银奖-25对","weight":0,"quantity":30,"original_qty":30,"level":6,"sort":5,"is_boss":0,"min_score":7},{"id":242,"product_id":266,"name":"银奖-30对","weight":0,"quantity":30,"original_qty":30,"level":5,"sort":6,"is_boss":0,"min_score":6},{"id":243,"product_id":265,"name":"金奖-35对","weight":0,"quantity":20,"original_qty":20,"level":4,"sort":7,"is_boss":0,"min_score":5},{"id":244,"product_id":268,"name":"金奖-40对","weight":0,"quantity":19,"original_qty":20,"level":3,"sort":8,"is_boss":0,"min_score":4},{"id":245,"product_id":269,"name":"特等奖-42对","weight":0,"quantity":10,"original_qty":10,"level":2,"sort":9,"is_boss":0,"min_score":3},{"id":246,"product_id":270,"name":"特等奖-44对","weight":0,"quantity":5,"original_qty":5,"level":1,"sort":10,"is_boss":0,"min_score":2},{"id":247,"product_id":271,"name":"终极大奖-45对","weight":0,"quantity":3,"original_qty":3,"level":0,"sort":11,"is_boss":1,"min_score":1}]},"http_code":200,"http_code_msg":"OK","cost_seconds":0.042438375},"third_party_requests":null,"debugs":null,"sqls":[{"time":"2025-12-22 15:01:59","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/router/interceptor/admin_auth.go:43","sql":"SELECT * FROM `admin` WHERE `admin`.`id` = 2 ORDER BY `admin`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.0194145},{"time":"2025-12-22 15:01:59","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/service/activity/rewards_list.go:13","sql":"SELECT * FROM `activity_reward_settings` WHERE `activity_reward_settings`.`issue_id` = 71 AND deleted_at IS NULL AND `activity_reward_settings`.`deleted_at` IS NULL ORDER BY `activity_reward_settings`.`sort` ASC","rows_affected":11,"cost_seconds":0.022442958}],"redis":null,"mongos":null,"success":true,"cost_seconds":0.042438833}} +{"level":"info","time":"2025-12-22 15:02:04","caller":"logger/logger.go:309","msg":"trace-log","domain":"mini-chat[fat]","method":"PUT","path":"/api/admin/activities/64/issues/71/rewards/241","http_code":200,"business_code":0,"success":true,"cost_seconds":0.087707167,"trace_id":"2002998052620603392","trace_info":{"trace_id":"2002998052620603392","request":{"ttl":"un-limit","method":"PUT","decoded_url":"/api/admin/activities/64/issues/71/rewards/241","header":{"Content-Type":"application/json"},"body":"{\"product_id\":260,\"weight\":0,\"quantity\":30,\"original_qty\":30,\"level\":6,\"sort\":5,\"is_boss\":0,\"name\":\"银奖-25对\",\"min_score\":7}"},"response":{"header":{"Access-Control-Allow-Credentials":["true"],"Access-Control-Allow-Origin":["*"],"Content-Type":["application/json; charset=utf-8"],"Trace-Id":["2002998052620603392"],"Vary":["Origin"]},"body":{"message":"操作成功"},"http_code":200,"http_code_msg":"OK","cost_seconds":0.087706958},"third_party_requests":null,"debugs":null,"sqls":[{"time":"2025-12-22 15:02:04","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/router/interceptor/admin_auth.go:43","sql":"SELECT * FROM `admin` WHERE `admin`.`id` = 2 ORDER BY `admin`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.024356875},{"time":"2025-12-22 15:02:04","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/service/activity/rewards_modify.go:14","sql":"SELECT * FROM `activity_reward_settings` WHERE `activity_reward_settings`.`id` = 241 AND deleted_at IS NULL AND `activity_reward_settings`.`deleted_at` IS NULL ORDER BY `activity_reward_settings`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.022750292},{"time":"2025-12-22 15:02:04","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/service/activity/rewards_modify.go:46","sql":"INSERT INTO `activity_reward_settings` (`issue_id`,`product_id`,`name`,`weight`,`quantity`,`original_qty`,`level`,`sort`,`is_boss`,`min_score`,`deleted_at`,`id`,`created_at`,`updated_at`) VALUES (71,260,'银奖-25对',0,30,30,6,5,0,7,NULL,241,'2025-12-22 11:09:07.96','2025-12-22 15:02:04.354') ON DUPLICATE KEY UPDATE `issue_id`=VALUES(`issue_id`),`product_id`=VALUES(`product_id`),`name`=VALUES(`name`),`weight`=VALUES(`weight`),`quantity`=VALUES(`quantity`),`original_qty`=VALUES(`original_qty`),`level`=VALUES(`level`),`sort`=VALUES(`sort`),`is_boss`=VALUES(`is_boss`),`min_score`=VALUES(`min_score`),`deleted_at`=VALUES(`deleted_at`)","rows_affected":2,"cost_seconds":0.0312615}],"redis":null,"mongos":null,"success":true,"cost_seconds":0.087707167}} +{"level":"info","time":"2025-12-22 15:02:04","caller":"logger/logger.go:309","msg":"trace-log","domain":"mini-chat[fat]","method":"GET","path":"/api/admin/activities/64/issues/71/rewards","http_code":200,"business_code":0,"success":true,"cost_seconds":0.041580291,"trace_id":"2002998053371383808","trace_info":{"trace_id":"2002998053371383808","request":{"ttl":"un-limit","method":"GET","decoded_url":"/api/admin/activities/64/issues/71/rewards","header":{"Content-Type":""},"body":""},"response":{"header":{"Content-Type":["application/json; charset=utf-8"],"Trace-Id":["2002998053371383808"],"Vary":["Origin"]},"body":{"list":[{"id":237,"product_id":0,"name":"参与奖-5对","weight":0,"quantity":98,"original_qty":100,"level":10,"sort":1,"is_boss":0,"min_score":11},{"id":238,"product_id":0,"name":"参与奖-10对","weight":0,"quantity":100,"original_qty":100,"level":9,"sort":2,"is_boss":0,"min_score":10},{"id":239,"product_id":0,"name":"铜奖-15对","weight":0,"quantity":50,"original_qty":50,"level":8,"sort":3,"is_boss":0,"min_score":9},{"id":240,"product_id":0,"name":"铜奖-20对","weight":0,"quantity":50,"original_qty":50,"level":7,"sort":4,"is_boss":0,"min_score":8},{"id":241,"product_id":260,"name":"银奖-25对","weight":0,"quantity":30,"original_qty":30,"level":6,"sort":5,"is_boss":0,"min_score":7},{"id":242,"product_id":266,"name":"银奖-30对","weight":0,"quantity":30,"original_qty":30,"level":5,"sort":6,"is_boss":0,"min_score":6},{"id":243,"product_id":265,"name":"金奖-35对","weight":0,"quantity":20,"original_qty":20,"level":4,"sort":7,"is_boss":0,"min_score":5},{"id":244,"product_id":268,"name":"金奖-40对","weight":0,"quantity":19,"original_qty":20,"level":3,"sort":8,"is_boss":0,"min_score":4},{"id":245,"product_id":269,"name":"特等奖-42对","weight":0,"quantity":10,"original_qty":10,"level":2,"sort":9,"is_boss":0,"min_score":3},{"id":246,"product_id":270,"name":"特等奖-44对","weight":0,"quantity":5,"original_qty":5,"level":1,"sort":10,"is_boss":0,"min_score":2},{"id":247,"product_id":271,"name":"终极大奖-45对","weight":0,"quantity":3,"original_qty":3,"level":0,"sort":11,"is_boss":1,"min_score":1}]},"http_code":200,"http_code_msg":"OK","cost_seconds":0.041579916},"third_party_requests":null,"debugs":null,"sqls":[{"time":"2025-12-22 15:02:04","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/router/interceptor/admin_auth.go:43","sql":"SELECT * FROM `admin` WHERE `admin`.`id` = 2 ORDER BY `admin`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.020078792},{"time":"2025-12-22 15:02:04","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/service/activity/rewards_list.go:13","sql":"SELECT * FROM `activity_reward_settings` WHERE `activity_reward_settings`.`issue_id` = 71 AND deleted_at IS NULL AND `activity_reward_settings`.`deleted_at` IS NULL ORDER BY `activity_reward_settings`.`sort` ASC","rows_affected":11,"cost_seconds":0.021178125}],"redis":null,"mongos":null,"success":true,"cost_seconds":0.041580291}} +{"level":"info","time":"2025-12-22 15:02:10","caller":"logger/logger.go:309","msg":"trace-log","domain":"mini-chat[fat]","method":"PUT","path":"/api/admin/activities/64/issues/71/rewards/240","http_code":200,"business_code":0,"success":true,"cost_seconds":0.082756292,"trace_id":"2002998076914012160","trace_info":{"trace_id":"2002998076914012160","request":{"ttl":"un-limit","method":"PUT","decoded_url":"/api/admin/activities/64/issues/71/rewards/240","header":{"Content-Type":"application/json"},"body":"{\"product_id\":232,\"weight\":0,\"quantity\":50,\"original_qty\":50,\"level\":7,\"sort\":4,\"is_boss\":0,\"name\":\"铜奖-20对\",\"min_score\":8}"},"response":{"header":{"Access-Control-Allow-Credentials":["true"],"Access-Control-Allow-Origin":["*"],"Content-Type":["application/json; charset=utf-8"],"Trace-Id":["2002998076914012160"],"Vary":["Origin"]},"body":{"message":"操作成功"},"http_code":200,"http_code_msg":"OK","cost_seconds":0.082755875},"third_party_requests":null,"debugs":null,"sqls":[{"time":"2025-12-22 15:02:10","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/router/interceptor/admin_auth.go:43","sql":"SELECT * FROM `admin` WHERE `admin`.`id` = 2 ORDER BY `admin`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.019662083},{"time":"2025-12-22 15:02:10","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/service/activity/rewards_modify.go:14","sql":"SELECT * FROM `activity_reward_settings` WHERE `activity_reward_settings`.`id` = 240 AND deleted_at IS NULL AND `activity_reward_settings`.`deleted_at` IS NULL ORDER BY `activity_reward_settings`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.021185666},{"time":"2025-12-22 15:02:10","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/service/activity/rewards_modify.go:46","sql":"INSERT INTO `activity_reward_settings` (`issue_id`,`product_id`,`name`,`weight`,`quantity`,`original_qty`,`level`,`sort`,`is_boss`,`min_score`,`deleted_at`,`id`,`created_at`,`updated_at`) VALUES (71,232,'铜奖-20对',0,50,50,7,4,0,8,NULL,240,'2025-12-22 11:09:07.96','2025-12-22 15:02:10.139') ON DUPLICATE KEY UPDATE `issue_id`=VALUES(`issue_id`),`product_id`=VALUES(`product_id`),`name`=VALUES(`name`),`weight`=VALUES(`weight`),`quantity`=VALUES(`quantity`),`original_qty`=VALUES(`original_qty`),`level`=VALUES(`level`),`sort`=VALUES(`sort`),`is_boss`=VALUES(`is_boss`),`min_score`=VALUES(`min_score`),`deleted_at`=VALUES(`deleted_at`)","rows_affected":2,"cost_seconds":0.033579416}],"redis":null,"mongos":null,"success":true,"cost_seconds":0.082756292}} +{"level":"info","time":"2025-12-22 15:02:10","caller":"logger/logger.go:309","msg":"trace-log","domain":"mini-chat[fat]","method":"GET","path":"/api/admin/activities/64/issues/71/rewards","http_code":200,"business_code":0,"success":true,"cost_seconds":0.043232791,"trace_id":"2002998077635432448","trace_info":{"trace_id":"2002998077635432448","request":{"ttl":"un-limit","method":"GET","decoded_url":"/api/admin/activities/64/issues/71/rewards","header":{"Content-Type":""},"body":""},"response":{"header":{"Content-Type":["application/json; charset=utf-8"],"Trace-Id":["2002998077635432448"],"Vary":["Origin"]},"body":{"list":[{"id":237,"product_id":0,"name":"参与奖-5对","weight":0,"quantity":98,"original_qty":100,"level":10,"sort":1,"is_boss":0,"min_score":11},{"id":238,"product_id":0,"name":"参与奖-10对","weight":0,"quantity":100,"original_qty":100,"level":9,"sort":2,"is_boss":0,"min_score":10},{"id":239,"product_id":0,"name":"铜奖-15对","weight":0,"quantity":50,"original_qty":50,"level":8,"sort":3,"is_boss":0,"min_score":9},{"id":240,"product_id":232,"name":"铜奖-20对","weight":0,"quantity":50,"original_qty":50,"level":7,"sort":4,"is_boss":0,"min_score":8},{"id":241,"product_id":260,"name":"银奖-25对","weight":0,"quantity":30,"original_qty":30,"level":6,"sort":5,"is_boss":0,"min_score":7},{"id":242,"product_id":266,"name":"银奖-30对","weight":0,"quantity":30,"original_qty":30,"level":5,"sort":6,"is_boss":0,"min_score":6},{"id":243,"product_id":265,"name":"金奖-35对","weight":0,"quantity":20,"original_qty":20,"level":4,"sort":7,"is_boss":0,"min_score":5},{"id":244,"product_id":268,"name":"金奖-40对","weight":0,"quantity":19,"original_qty":20,"level":3,"sort":8,"is_boss":0,"min_score":4},{"id":245,"product_id":269,"name":"特等奖-42对","weight":0,"quantity":10,"original_qty":10,"level":2,"sort":9,"is_boss":0,"min_score":3},{"id":246,"product_id":270,"name":"特等奖-44对","weight":0,"quantity":5,"original_qty":5,"level":1,"sort":10,"is_boss":0,"min_score":2},{"id":247,"product_id":271,"name":"终极大奖-45对","weight":0,"quantity":3,"original_qty":3,"level":0,"sort":11,"is_boss":1,"min_score":1}]},"http_code":200,"http_code_msg":"OK","cost_seconds":0.043232333},"third_party_requests":null,"debugs":null,"sqls":[{"time":"2025-12-22 15:02:10","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/router/interceptor/admin_auth.go:43","sql":"SELECT * FROM `admin` WHERE `admin`.`id` = 2 ORDER BY `admin`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.019548},{"time":"2025-12-22 15:02:10","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/service/activity/rewards_list.go:13","sql":"SELECT * FROM `activity_reward_settings` WHERE `activity_reward_settings`.`issue_id` = 71 AND deleted_at IS NULL AND `activity_reward_settings`.`deleted_at` IS NULL ORDER BY `activity_reward_settings`.`sort` ASC","rows_affected":11,"cost_seconds":0.022702083}],"redis":null,"mongos":null,"success":true,"cost_seconds":0.043232791}} +{"level":"info","time":"2025-12-22 15:02:15","caller":"logger/logger.go:309","msg":"trace-log","domain":"mini-chat[fat]","method":"PUT","path":"/api/admin/activities/64/issues/71/rewards/239","http_code":200,"business_code":0,"success":true,"cost_seconds":0.094146292,"trace_id":"2002998097952641024","trace_info":{"trace_id":"2002998097952641024","request":{"ttl":"un-limit","method":"PUT","decoded_url":"/api/admin/activities/64/issues/71/rewards/239","header":{"Content-Type":"application/json"},"body":"{\"product_id\":206,\"weight\":0,\"quantity\":50,\"original_qty\":50,\"level\":8,\"sort\":3,\"is_boss\":0,\"name\":\"铜奖-15对\",\"min_score\":9}"},"response":{"header":{"Access-Control-Allow-Credentials":["true"],"Access-Control-Allow-Origin":["*"],"Content-Type":["application/json; charset=utf-8"],"Trace-Id":["2002998097952641024"],"Vary":["Origin"]},"body":{"message":"操作成功"},"http_code":200,"http_code_msg":"OK","cost_seconds":0.094145917},"third_party_requests":null,"debugs":null,"sqls":[{"time":"2025-12-22 15:02:15","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/router/interceptor/admin_auth.go:43","sql":"SELECT * FROM `admin` WHERE `admin`.`id` = 2 ORDER BY `admin`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.031048833},{"time":"2025-12-22 15:02:15","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/service/activity/rewards_modify.go:14","sql":"SELECT * FROM `activity_reward_settings` WHERE `activity_reward_settings`.`id` = 239 AND deleted_at IS NULL AND `activity_reward_settings`.`deleted_at` IS NULL ORDER BY `activity_reward_settings`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.022520791},{"time":"2025-12-22 15:02:15","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/service/activity/rewards_modify.go:46","sql":"INSERT INTO `activity_reward_settings` (`issue_id`,`product_id`,`name`,`weight`,`quantity`,`original_qty`,`level`,`sort`,`is_boss`,`min_score`,`deleted_at`,`id`,`created_at`,`updated_at`) VALUES (71,206,'铜奖-15对',0,50,50,8,3,0,9,NULL,239,'2025-12-22 11:09:07.96','2025-12-22 15:02:15.168') ON DUPLICATE KEY UPDATE `issue_id`=VALUES(`issue_id`),`product_id`=VALUES(`product_id`),`name`=VALUES(`name`),`weight`=VALUES(`weight`),`quantity`=VALUES(`quantity`),`original_qty`=VALUES(`original_qty`),`level`=VALUES(`level`),`sort`=VALUES(`sort`),`is_boss`=VALUES(`is_boss`),`min_score`=VALUES(`min_score`),`deleted_at`=VALUES(`deleted_at`)","rows_affected":2,"cost_seconds":0.031634041}],"redis":null,"mongos":null,"success":true,"cost_seconds":0.094146292}} +{"level":"info","time":"2025-12-22 15:02:15","caller":"logger/logger.go:309","msg":"trace-log","domain":"mini-chat[fat]","method":"GET","path":"/api/admin/activities/64/issues/71/rewards","http_code":200,"business_code":0,"success":true,"cost_seconds":0.044045584,"trace_id":"2002998098728587264","trace_info":{"trace_id":"2002998098728587264","request":{"ttl":"un-limit","method":"GET","decoded_url":"/api/admin/activities/64/issues/71/rewards","header":{"Content-Type":""},"body":""},"response":{"header":{"Content-Type":["application/json; charset=utf-8"],"Trace-Id":["2002998098728587264"],"Vary":["Origin"]},"body":{"list":[{"id":237,"product_id":0,"name":"参与奖-5对","weight":0,"quantity":98,"original_qty":100,"level":10,"sort":1,"is_boss":0,"min_score":11},{"id":238,"product_id":0,"name":"参与奖-10对","weight":0,"quantity":100,"original_qty":100,"level":9,"sort":2,"is_boss":0,"min_score":10},{"id":239,"product_id":206,"name":"铜奖-15对","weight":0,"quantity":50,"original_qty":50,"level":8,"sort":3,"is_boss":0,"min_score":9},{"id":240,"product_id":232,"name":"铜奖-20对","weight":0,"quantity":50,"original_qty":50,"level":7,"sort":4,"is_boss":0,"min_score":8},{"id":241,"product_id":260,"name":"银奖-25对","weight":0,"quantity":30,"original_qty":30,"level":6,"sort":5,"is_boss":0,"min_score":7},{"id":242,"product_id":266,"name":"银奖-30对","weight":0,"quantity":30,"original_qty":30,"level":5,"sort":6,"is_boss":0,"min_score":6},{"id":243,"product_id":265,"name":"金奖-35对","weight":0,"quantity":20,"original_qty":20,"level":4,"sort":7,"is_boss":0,"min_score":5},{"id":244,"product_id":268,"name":"金奖-40对","weight":0,"quantity":19,"original_qty":20,"level":3,"sort":8,"is_boss":0,"min_score":4},{"id":245,"product_id":269,"name":"特等奖-42对","weight":0,"quantity":10,"original_qty":10,"level":2,"sort":9,"is_boss":0,"min_score":3},{"id":246,"product_id":270,"name":"特等奖-44对","weight":0,"quantity":5,"original_qty":5,"level":1,"sort":10,"is_boss":0,"min_score":2},{"id":247,"product_id":271,"name":"终极大奖-45对","weight":0,"quantity":3,"original_qty":3,"level":0,"sort":11,"is_boss":1,"min_score":1}]},"http_code":200,"http_code_msg":"OK","cost_seconds":0.044045209},"third_party_requests":null,"debugs":null,"sqls":[{"time":"2025-12-22 15:02:15","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/router/interceptor/admin_auth.go:43","sql":"SELECT * FROM `admin` WHERE `admin`.`id` = 2 ORDER BY `admin`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.0221905},{"time":"2025-12-22 15:02:15","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/service/activity/rewards_list.go:13","sql":"SELECT * FROM `activity_reward_settings` WHERE `activity_reward_settings`.`issue_id` = 71 AND deleted_at IS NULL AND `activity_reward_settings`.`deleted_at` IS NULL ORDER BY `activity_reward_settings`.`sort` ASC","rows_affected":11,"cost_seconds":0.021518584}],"redis":null,"mongos":null,"success":true,"cost_seconds":0.044045584}} +{"level":"info","time":"2025-12-22 15:02:20","caller":"logger/logger.go:309","msg":"trace-log","domain":"mini-chat[fat]","method":"PUT","path":"/api/admin/activities/64/issues/71/rewards/238","http_code":200,"business_code":0,"success":true,"cost_seconds":0.087070167,"trace_id":"2002998120136314880","trace_info":{"trace_id":"2002998120136314880","request":{"ttl":"un-limit","method":"PUT","decoded_url":"/api/admin/activities/64/issues/71/rewards/238","header":{"Content-Type":"application/json"},"body":"{\"product_id\":188,\"weight\":0,\"quantity\":100,\"original_qty\":100,\"level\":9,\"sort\":2,\"is_boss\":0,\"name\":\"参与奖-10对\",\"min_score\":10}"},"response":{"header":{"Access-Control-Allow-Credentials":["true"],"Access-Control-Allow-Origin":["*"],"Content-Type":["application/json; charset=utf-8"],"Trace-Id":["2002998120136314880"],"Vary":["Origin"]},"body":{"message":"操作成功"},"http_code":200,"http_code_msg":"OK","cost_seconds":0.08706975},"third_party_requests":null,"debugs":null,"sqls":[{"time":"2025-12-22 15:02:20","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/router/interceptor/admin_auth.go:43","sql":"SELECT * FROM `admin` WHERE `admin`.`id` = 2 ORDER BY `admin`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.020566042},{"time":"2025-12-22 15:02:20","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/service/activity/rewards_modify.go:14","sql":"SELECT * FROM `activity_reward_settings` WHERE `activity_reward_settings`.`id` = 238 AND deleted_at IS NULL AND `activity_reward_settings`.`deleted_at` IS NULL ORDER BY `activity_reward_settings`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.027036042},{"time":"2025-12-22 15:02:20","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/service/activity/rewards_modify.go:46","sql":"INSERT INTO `activity_reward_settings` (`issue_id`,`product_id`,`name`,`weight`,`quantity`,`original_qty`,`level`,`sort`,`is_boss`,`min_score`,`deleted_at`,`id`,`created_at`,`updated_at`) VALUES (71,188,'参与奖-10对',0,100,100,9,2,0,10,NULL,238,'2025-12-22 11:09:07.96','2025-12-22 15:02:20.451') ON DUPLICATE KEY UPDATE `issue_id`=VALUES(`issue_id`),`product_id`=VALUES(`product_id`),`name`=VALUES(`name`),`weight`=VALUES(`weight`),`quantity`=VALUES(`quantity`),`original_qty`=VALUES(`original_qty`),`level`=VALUES(`level`),`sort`=VALUES(`sort`),`is_boss`=VALUES(`is_boss`),`min_score`=VALUES(`min_score`),`deleted_at`=VALUES(`deleted_at`)","rows_affected":2,"cost_seconds":0.029445375}],"redis":null,"mongos":null,"success":true,"cost_seconds":0.087070167}} +{"level":"info","time":"2025-12-22 15:02:20","caller":"logger/logger.go:309","msg":"trace-log","domain":"mini-chat[fat]","method":"GET","path":"/api/admin/activities/64/issues/71/rewards","http_code":200,"business_code":0,"success":true,"cost_seconds":0.04405725,"trace_id":"2002998120878706688","trace_info":{"trace_id":"2002998120878706688","request":{"ttl":"un-limit","method":"GET","decoded_url":"/api/admin/activities/64/issues/71/rewards","header":{"Content-Type":""},"body":""},"response":{"header":{"Content-Type":["application/json; charset=utf-8"],"Trace-Id":["2002998120878706688"],"Vary":["Origin"]},"body":{"list":[{"id":237,"product_id":0,"name":"参与奖-5对","weight":0,"quantity":98,"original_qty":100,"level":10,"sort":1,"is_boss":0,"min_score":11},{"id":238,"product_id":188,"name":"参与奖-10对","weight":0,"quantity":100,"original_qty":100,"level":9,"sort":2,"is_boss":0,"min_score":10},{"id":239,"product_id":206,"name":"铜奖-15对","weight":0,"quantity":50,"original_qty":50,"level":8,"sort":3,"is_boss":0,"min_score":9},{"id":240,"product_id":232,"name":"铜奖-20对","weight":0,"quantity":50,"original_qty":50,"level":7,"sort":4,"is_boss":0,"min_score":8},{"id":241,"product_id":260,"name":"银奖-25对","weight":0,"quantity":30,"original_qty":30,"level":6,"sort":5,"is_boss":0,"min_score":7},{"id":242,"product_id":266,"name":"银奖-30对","weight":0,"quantity":30,"original_qty":30,"level":5,"sort":6,"is_boss":0,"min_score":6},{"id":243,"product_id":265,"name":"金奖-35对","weight":0,"quantity":20,"original_qty":20,"level":4,"sort":7,"is_boss":0,"min_score":5},{"id":244,"product_id":268,"name":"金奖-40对","weight":0,"quantity":19,"original_qty":20,"level":3,"sort":8,"is_boss":0,"min_score":4},{"id":245,"product_id":269,"name":"特等奖-42对","weight":0,"quantity":10,"original_qty":10,"level":2,"sort":9,"is_boss":0,"min_score":3},{"id":246,"product_id":270,"name":"特等奖-44对","weight":0,"quantity":5,"original_qty":5,"level":1,"sort":10,"is_boss":0,"min_score":2},{"id":247,"product_id":271,"name":"终极大奖-45对","weight":0,"quantity":3,"original_qty":3,"level":0,"sort":11,"is_boss":1,"min_score":1}]},"http_code":200,"http_code_msg":"OK","cost_seconds":0.044057083},"third_party_requests":null,"debugs":null,"sqls":[{"time":"2025-12-22 15:02:20","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/router/interceptor/admin_auth.go:43","sql":"SELECT * FROM `admin` WHERE `admin`.`id` = 2 ORDER BY `admin`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.0201555},{"time":"2025-12-22 15:02:20","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/service/activity/rewards_list.go:13","sql":"SELECT * FROM `activity_reward_settings` WHERE `activity_reward_settings`.`issue_id` = 71 AND deleted_at IS NULL AND `activity_reward_settings`.`deleted_at` IS NULL ORDER BY `activity_reward_settings`.`sort` ASC","rows_affected":11,"cost_seconds":0.023317375}],"redis":null,"mongos":null,"success":true,"cost_seconds":0.04405725}} +{"level":"info","time":"2025-12-22 15:02:26","caller":"logger/logger.go:309","msg":"trace-log","domain":"mini-chat[fat]","method":"PUT","path":"/api/admin/activities/64/issues/71/rewards/237","http_code":200,"business_code":0,"success":true,"cost_seconds":0.082585209,"trace_id":"2002998146413629440","trace_info":{"trace_id":"2002998146413629440","request":{"ttl":"un-limit","method":"PUT","decoded_url":"/api/admin/activities/64/issues/71/rewards/237","header":{"Content-Type":"application/json"},"body":"{\"product_id\":176,\"weight\":0,\"quantity\":98,\"original_qty\":100,\"level\":10,\"sort\":1,\"is_boss\":0,\"name\":\"参与奖-5对\",\"min_score\":11}"},"response":{"header":{"Access-Control-Allow-Credentials":["true"],"Access-Control-Allow-Origin":["*"],"Content-Type":["application/json; charset=utf-8"],"Trace-Id":["2002998146413629440"],"Vary":["Origin"]},"body":{"message":"操作成功"},"http_code":200,"http_code_msg":"OK","cost_seconds":0.08258475},"third_party_requests":null,"debugs":null,"sqls":[{"time":"2025-12-22 15:02:26","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/router/interceptor/admin_auth.go:43","sql":"SELECT * FROM `admin` WHERE `admin`.`id` = 2 ORDER BY `admin`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.020250292},{"time":"2025-12-22 15:02:26","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/service/activity/rewards_modify.go:14","sql":"SELECT * FROM `activity_reward_settings` WHERE `activity_reward_settings`.`id` = 237 AND deleted_at IS NULL AND `activity_reward_settings`.`deleted_at` IS NULL ORDER BY `activity_reward_settings`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.02290525},{"time":"2025-12-22 15:02:26","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/service/activity/rewards_modify.go:46","sql":"INSERT INTO `activity_reward_settings` (`issue_id`,`product_id`,`name`,`weight`,`quantity`,`original_qty`,`level`,`sort`,`is_boss`,`min_score`,`deleted_at`,`id`,`created_at`,`updated_at`) VALUES (71,176,'参与奖-5对',0,98,100,10,1,0,11,NULL,237,'2025-12-22 11:09:07.96','2025-12-22 15:02:26.712') ON DUPLICATE KEY UPDATE `issue_id`=VALUES(`issue_id`),`product_id`=VALUES(`product_id`),`name`=VALUES(`name`),`weight`=VALUES(`weight`),`quantity`=VALUES(`quantity`),`original_qty`=VALUES(`original_qty`),`level`=VALUES(`level`),`sort`=VALUES(`sort`),`is_boss`=VALUES(`is_boss`),`min_score`=VALUES(`min_score`),`deleted_at`=VALUES(`deleted_at`)","rows_affected":2,"cost_seconds":0.030123209}],"redis":null,"mongos":null,"success":true,"cost_seconds":0.082585209}} +{"level":"info","time":"2025-12-22 15:02:26","caller":"logger/logger.go:309","msg":"trace-log","domain":"mini-chat[fat]","method":"GET","path":"/api/admin/activities/64/issues/71/rewards","http_code":200,"business_code":0,"success":true,"cost_seconds":0.042336334,"trace_id":"2002998147109883904","trace_info":{"trace_id":"2002998147109883904","request":{"ttl":"un-limit","method":"GET","decoded_url":"/api/admin/activities/64/issues/71/rewards","header":{"Content-Type":""},"body":""},"response":{"header":{"Content-Type":["application/json; charset=utf-8"],"Trace-Id":["2002998147109883904"],"Vary":["Origin"]},"body":{"list":[{"id":237,"product_id":176,"name":"参与奖-5对","weight":0,"quantity":98,"original_qty":100,"level":10,"sort":1,"is_boss":0,"min_score":11},{"id":238,"product_id":188,"name":"参与奖-10对","weight":0,"quantity":100,"original_qty":100,"level":9,"sort":2,"is_boss":0,"min_score":10},{"id":239,"product_id":206,"name":"铜奖-15对","weight":0,"quantity":50,"original_qty":50,"level":8,"sort":3,"is_boss":0,"min_score":9},{"id":240,"product_id":232,"name":"铜奖-20对","weight":0,"quantity":50,"original_qty":50,"level":7,"sort":4,"is_boss":0,"min_score":8},{"id":241,"product_id":260,"name":"银奖-25对","weight":0,"quantity":30,"original_qty":30,"level":6,"sort":5,"is_boss":0,"min_score":7},{"id":242,"product_id":266,"name":"银奖-30对","weight":0,"quantity":30,"original_qty":30,"level":5,"sort":6,"is_boss":0,"min_score":6},{"id":243,"product_id":265,"name":"金奖-35对","weight":0,"quantity":20,"original_qty":20,"level":4,"sort":7,"is_boss":0,"min_score":5},{"id":244,"product_id":268,"name":"金奖-40对","weight":0,"quantity":19,"original_qty":20,"level":3,"sort":8,"is_boss":0,"min_score":4},{"id":245,"product_id":269,"name":"特等奖-42对","weight":0,"quantity":10,"original_qty":10,"level":2,"sort":9,"is_boss":0,"min_score":3},{"id":246,"product_id":270,"name":"特等奖-44对","weight":0,"quantity":5,"original_qty":5,"level":1,"sort":10,"is_boss":0,"min_score":2},{"id":247,"product_id":271,"name":"终极大奖-45对","weight":0,"quantity":3,"original_qty":3,"level":0,"sort":11,"is_boss":1,"min_score":1}]},"http_code":200,"http_code_msg":"OK","cost_seconds":0.042321459},"third_party_requests":null,"debugs":null,"sqls":[{"time":"2025-12-22 15:02:26","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/router/interceptor/admin_auth.go:43","sql":"SELECT * FROM `admin` WHERE `admin`.`id` = 2 ORDER BY `admin`.`id` LIMIT 1","rows_affected":1,"cost_seconds":0.019896167},{"time":"2025-12-22 15:02:26","stack":"/Users/win/aicode/bindbox/bindbox_game/internal/service/activity/rewards_list.go:13","sql":"SELECT * FROM `activity_reward_settings` WHERE `activity_reward_settings`.`issue_id` = 71 AND deleted_at IS NULL AND `activity_reward_settings`.`deleted_at` IS NULL ORDER BY `activity_reward_settings`.`sort` ASC","rows_affected":11,"cost_seconds":0.021531792}],"redis":null,"mongos":null,"success":true,"cost_seconds":0.042336334}} diff --git a/migrations/matching_game_test_data.sql b/migrations/matching_game_test_data.sql new file mode 100644 index 0000000..e57137b --- /dev/null +++ b/migrations/matching_game_test_data.sql @@ -0,0 +1,61 @@ +-- 对对碰奖励测试数据 +-- 前提:需要先有一个活动和期次 +-- 假设期次ID为 ? (请根据实际情况替换) + +-- 查看现有期次 +-- SELECT id, activity_id, issue_number FROM activity_issues ORDER BY id DESC LIMIT 10; + +-- 设置期次ID (请替换为实际的期次ID) +SET @issue_id = 1; + +-- 清理该期次下的旧奖励数据(谨慎使用) +-- DELETE FROM activity_reward_settings WHERE issue_id = @issue_id; + +-- 插入对对碰奖励测试数据 +-- 每个 min_score 对应一个奖品,精确匹配 +INSERT INTO activity_reward_settings +(issue_id, product_id, name, weight, quantity, original_qty, level, sort, is_boss, min_score, created_at, updated_at) +VALUES +-- 0-10对:参与奖 +(@issue_id, 0, '参与奖-5对', 0, 100, 100, 10, 1, 0, 5, NOW(), NOW()), +(@issue_id, 0, '参与奖-10对', 0, 100, 100, 9, 2, 0, 10, NOW(), NOW()), + +-- 10-20对:铜奖 +(@issue_id, 0, '铜奖-15对', 0, 50, 50, 8, 3, 0, 15, NOW(), NOW()), +(@issue_id, 0, '铜奖-20对', 0, 50, 50, 7, 4, 0, 20, NOW(), NOW()), + +-- 20-30对:银奖 +(@issue_id, 0, '银奖-25对', 0, 30, 30, 6, 5, 0, 25, NOW(), NOW()), +(@issue_id, 0, '银奖-30对', 0, 30, 30, 5, 6, 0, 30, NOW(), NOW()), + +-- 30-40对:金奖 +(@issue_id, 0, '金奖-35对', 0, 20, 20, 4, 7, 0, 35, NOW(), NOW()), +(@issue_id, 0, '金奖-40对', 0, 20, 20, 3, 8, 0, 40, NOW(), NOW()), + +-- 40-45对:特等奖 +(@issue_id, 0, '特等奖-42对', 0, 10, 10, 2, 9, 0, 42, NOW(), NOW()), +(@issue_id, 0, '特等奖-44对', 0, 5, 5, 1, 10, 0, 44, NOW(), NOW()), + +-- 45对以上:大奖(理论最大45-49对) +(@issue_id, 0, '终极大奖-45对', 0, 3, 3, 0, 11, 1, 45, NOW(), NOW()); + +-- 验证插入的数据 +SELECT id, issue_id, name, min_score, quantity, level, sort +FROM activity_reward_settings +WHERE issue_id = @issue_id +ORDER BY min_score ASC; + +-- ================================================================ +-- 使用说明: +-- 1. 将 @issue_id 替换为实际用于对对碰测试的期次ID +-- 2. 执行此脚本插入测试数据 +-- 3. 通过APP或接口测试对对碰游戏 +-- 4. 验证不同对子数是否匹配到正确的奖品 +-- +-- 测试用例: +-- - 消除5对 → 获得 "参与奖-5对" +-- - 消除10对 → 获得 "参与奖-10对" +-- - 消除15对 → 获得 "铜奖-15对" +-- - 消除12对 → 无匹配(因为是精确匹配) +-- - 消除45对 → 获得 "终极大奖-45对" +-- ================================================================ diff --git a/scripts/check_api_json_tags.go b/scripts/check_api_json_tags.go deleted file mode 100644 index cc93c19..0000000 --- a/scripts/check_api_json_tags.go +++ /dev/null @@ -1,27 +0,0 @@ -package main - -import "fmt" - -func CheckAPIJSONTags() { - tasks := doRequest("GET", "/api/admin/task-center/tasks", nil) - list, ok := tasks["list"].([]interface{}) - if !ok || len(list) == 0 { - fmt.Println("No tasks found") - return - } - firstTask, ok := list[0].(map[string]any) - if !ok { - fmt.Println("Invalid task list format") - return - } - taskID := int64(firstTask["id"].(float64)) - fmt.Printf("Checking Task ID: %d\n", taskID) - - fmt.Println("\n--- Checking Tiers API ---") - tiersRaw := doRequestRaw("GET", fmt.Sprintf("/api/admin/task-center/tasks/%d/tiers", taskID), nil) - fmt.Println(string(tiersRaw)) - - fmt.Println("\n--- Checking Rewards API ---") - rewardsRaw := doRequestRaw("GET", fmt.Sprintf("/api/admin/task-center/tasks/%d/rewards", taskID), nil) - fmt.Println(string(rewardsRaw)) -} diff --git a/scripts/matching_game_demo.py b/scripts/matching_game_demo.py deleted file mode 100644 index a710588..0000000 --- a/scripts/matching_game_demo.py +++ /dev/null @@ -1,169 +0,0 @@ -import os -import hmac -import hashlib -import time -from typing import List, Dict, Any, Tuple -from collections import Counter - -class SecureBlindBoxRNG: - """使用 HMAC-SHA256 的加密安全随机数生成器""" - - def __init__(self): - self.server_seed = os.urandom(32) - self.server_seed_hash = hashlib.sha256(self.server_seed).hexdigest() - self.nonce = 0 - - def _generate_random_bytes(self, context: str) -> bytes: - self.nonce += 1 - message = f"{context}|nonce:{self.nonce}".encode() - return hmac.new(self.server_seed, message, hashlib.sha256).digest() - - def secure_randint(self, max_value: int, context: str = "rand") -> int: - if max_value <= 0: - return 0 - rand_bytes = self._generate_random_bytes(context) - return int.from_bytes(rand_bytes[:8], 'big') % max_value - - def secure_shuffle(self, items: List) -> List: - items = items[:] - n = len(items) - for i in range(n - 1, 0, -1): - j = self.secure_randint(i + 1, f"shuffle:{i}") - items[i], items[j] = items[j], items[i] - return items - - -class MatchingGame: - """对对碰游戏 - 可视化版本""" - - def __init__(self): - self.rng = SecureBlindBoxRNG() - - # 11种卡牌,每种9张 - self.card_types = ['🍎', '🍊', '🍋', '🍇', '🍓', '🍒', '🥝', '🍑', '🍌', '🍉', '🫐'] - self.card_list = [card for card in self.card_types for _ in range(9)] - - # 安全洗牌 - self.card_list = self.rng.secure_shuffle(self.card_list) - - self.hand = self.card_list[:9] - self.deck = self.card_list[9:] - self.total_pairs = 0 - self.round = 0 - - def display_hand(self): - """显示当前手牌""" - print(f"\n{'='*50}") - print(f" 第 {self.round} 轮 | 手牌: {len(self.hand)}张 | 牌堆: {len(self.deck)}张") - print(f"{'='*50}") - print(f" 手牌: {' '.join(self.hand)}") - - # 统计每种牌的数量 - counter = Counter(self.hand) - pairs_info = [] - for card, count in counter.items(): - if count >= 2: - pairs_info.append(f"{card}×{count}") - - if pairs_info: - print(f" 可配对: {', '.join(pairs_info)}") - else: - print(f" 可配对: 无") - - def find_and_remove_pairs(self) -> Tuple[int, List[str]]: - """找出并移除配对的牌""" - counter = Counter(self.hand) - pairs_found = 0 - pairs_detail = [] - remaining = [] - - for card, count in counter.items(): - pairs = count // 2 - if pairs > 0: - pairs_found += pairs - pairs_detail.append(f"{card}×{pairs*2}") - - # 剩余的单张 - if count % 2 == 1: - remaining.append(card) - - return pairs_found, remaining, pairs_detail - - def play_round(self, is_first: bool = False): - """执行一轮游戏""" - self.round += 1 - - # 第一轮:如果有🍎,额外抽牌 - if is_first: - apple_count = self.hand.count('🍎') - if apple_count > 0: - print(f"\n 🎁 发现 {apple_count} 张🍎,额外抽取 {apple_count} 张牌!") - extra = self.deck[:apple_count] - self.hand.extend(extra) - self.deck = self.deck[apple_count:] - print(f" 抽到: {' '.join(extra)}") - - self.display_hand() - - # 配对 - pairs, remaining, pairs_detail = self.find_and_remove_pairs() - - if pairs > 0: - print(f"\n ✨ 配对成功: {', '.join(pairs_detail)}") - print(f" 本轮配对: {pairs} 对") - self.total_pairs += pairs - - # 抽取新牌 - draw_count = min(pairs, len(self.deck)) - if draw_count > 0: - new_cards = self.deck[:draw_count] - self.deck = self.deck[draw_count:] - remaining.extend(new_cards) - print(f" 从牌堆抽取: {' '.join(new_cards)}") - - self.hand = remaining - return True - else: - print(f"\n ❌ 无法配对,游戏结束") - self.hand = remaining - return False - - def play(self): - """完整游戏流程""" - print("\n" + "🎮" * 20) - print(" 欢迎来到 对对碰 游戏!") - print("🎮" * 20) - print(f"\n游戏规则:") - print(f" 1. 初始手牌 9 张") - print(f" 2. 相同的牌可以配对消除") - print(f" 3. 每配对一次,从牌堆抽取相应数量的新牌") - print(f" 4. 直到无法配对为止") - print(f"\n种子哈希: {self.rng.server_seed_hash[:16]}...") - - # 第一轮 - can_continue = self.play_round(is_first=True) - - # 后续轮次 - while can_continue: - input("\n 按回车继续...") - can_continue = self.play_round(is_first=False) - - # 游戏结束 - print(f"\n{'='*50}") - print(f" 🏆 游戏结束!") - print(f" 总配对数: {self.total_pairs} 对") - print(f" 剩余手牌: {len(self.hand)} 张 {' '.join(self.hand)}") - print(f" 剩余牌堆: {len(self.deck)} 张") - print(f"{'='*50}") - - return { - "total_pairs": self.total_pairs, - "remaining_hand": self.hand, - "remaining_deck_count": len(self.deck), - "seed_hash": self.rng.server_seed_hash - } - - -if __name__ == "__main__": - game = MatchingGame() - result = game.play() diff --git a/scripts/matching_simulation.py b/scripts/matching_simulation.py deleted file mode 100644 index 612a156..0000000 --- a/scripts/matching_simulation.py +++ /dev/null @@ -1,124 +0,0 @@ -import random -import collections - -# Configuration: 11 types, 9 cards each. Total 99 cards. -CARD_TYPES = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K'] -CARDS_PER_TYPE = 9 -BOARD_SIZE = 9 - -def create_deck(): - """Create a full deck of 99 cards.""" - deck = [] - for t in CARD_TYPES: - for _ in range(CARDS_PER_TYPE): - deck.append(t) - random.shuffle(deck) - return deck - -def play_one_game(): - """Simulate one full game session.""" - # 1. Initialize - full_deck = create_deck() - board = full_deck[:BOARD_SIZE] - deck = full_deck[BOARD_SIZE:] - - pairs_found = 0 - - # Loop until game over - while True: - # 2. Check for matches on board - # Strategy: Always eliminate the first pair found. - # (In real game, user choice might matter, but for max pairs, - # elimination order rarely changes the total count if we have infinite reshuffles) - - counts = collections.Counter(board) - match_type = None - for t, count in counts.items(): - if count >= 2: - match_type = t - break - - if match_type: - # ELIMINATE - pairs_found += 1 - - # Remove 2 instances of match_type - removed_count = 0 - new_board = [] - for card in board: - if card == match_type and removed_count < 2: - removed_count += 1 - continue # Skip (remove) - new_board.append(card) - board = new_board - - # Fill from deck - while len(board) < BOARD_SIZE and len(deck) > 0: - board.append(deck.pop(0)) - - else: - # DEADLOCK (No matches on board) - if len(deck) == 0: - # Game Over - break - else: - # RESHUFFLE - # Collect all remaining cards (board + deck) - remaining = board + deck - random.shuffle(remaining) - - # Refill board and deck - board = remaining[:BOARD_SIZE] - deck = remaining[BOARD_SIZE:] - - # Check if new board has matches. - # Theoretically possibility of repeated deadlocks, but loop continues. - # To prevent infinite loop in case of bad logic (e.g. 1 card left), check solvability. - # But here we have types. If we have pairs left in TOTAL, reshuffle will eventually bring them to board. - - # Optimization: If total remaining of every type is < 2, we can never match again. - total_counts = collections.Counter(remaining) - can_match = False - for t, c in total_counts.items(): - if c >= 2: - can_match = True - break - - if not can_match: - # Impossible to match anything more - break - - return pairs_found - -def run_simulation(times=10000): - print(f"Simulating {times} games...") - print(f"Config: {len(CARD_TYPES)} types x {CARDS_PER_TYPE} cards = {len(CARD_TYPES)*CARDS_PER_TYPE} total.") - - results = [] - for i in range(times): - score = play_one_game() - results.append(score) - if (i+1) % 1000 == 0: - print(f"Progress: {i+1}/{times}") - - max_score = max(results) - min_score = min(results) - avg_score = sum(results) / len(results) - - print("\n=== Results ===") - print(f"Max Pairs: {max_score}") - print(f"Min Pairs: {min_score}") - print(f"Avg Pairs: {avg_score:.2f}") - - # Theoretical Max - # floor(9/2) * 11 = 4 * 11 = 44 - print(f"Theoretical Max: {int(CARDS_PER_TYPE/2) * len(CARD_TYPES)}") - - # Distribution - dist = collections.Counter(results) - print("\nDistribution:") - for score in sorted(dist.keys()): - print(f"{score} pairs: {dist[score]} times") - -if __name__ == "__main__": - run_simulation() diff --git a/scripts/setup_full_tasks.go b/scripts/setup_full_tasks.go deleted file mode 100644 index dec7995..0000000 --- a/scripts/setup_full_tasks.go +++ /dev/null @@ -1,203 +0,0 @@ -package main - -import ( - "bytes" - "encoding/json" - "fmt" - "io" - "net/http" - "os" -) - -const ( - BaseURL = "http://localhost:9991" - Token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MiwidXNlcm5hbWUiOiJTdXBlciIsIm5pY2tuYW1lIjoiU3VwZXIiLCJpc19zdXBlciI6MSwicGxhdGZvcm0iOiLnrqHnkIbnq68iLCJleHAiOjE3NjU2NDIwMDYsIm5iZiI6MTc2NTM4MjgwNiwiaWF0IjoxNzY1MzgyODA2fQ.1pYRmSmFd-b4PudiYhGXgCv-LBr49_MMfNdyuc_7LXA" -) - -func main() { - if len(os.Args) > 1 && os.Args[1] == "check-json" { - CheckAPIJSONTags() - return - } - - fmt.Println("Starting to setup complete task center...") - - // 1. 清理现有任务 - tasks := doRequest("GET", "/api/admin/task-center/tasks", nil) - list := tasks["list"].([]interface{}) - for _, t := range list { - task := t.(map[string]any) - id := int64(task["id"].(float64)) - fmt.Printf("Deleting existing task: %d - %s\n", id, task["name"]) - doRequest("DELETE", fmt.Sprintf("/api/admin/task-center/tasks/%d", id), nil) - } - - // --------------------------------------------------------- - // 任务 1: 每日订单挑战 (Daily Order Challenge) - // --------------------------------------------------------- - t1ID := createTask("每日订单挑战", "每日完成订单挑战,赢取积分与道具", 1, 1) - upsertTiers(t1ID, []map[string]any{ - {"metric": "order_count", "operator": ">=", "threshold": 1, "window": "daily", "repeatable": 1, "priority": 1}, - {"metric": "order_count", "operator": ">=", "threshold": 10, "window": "daily", "repeatable": 1, "priority": 2}, - {"metric": "order_count", "operator": ">=", "threshold": 100, "window": "daily", "repeatable": 1, "priority": 3}, - }) - // 获取 Tier IDs 并配置奖励 - t1Tiers := listTiers(t1ID) - var r1 []map[string]any - for _, t := range t1Tiers { - p := int(t["Priority"].(float64)) - tid := int64(t["ID"].(float64)) - if p == 1 { // 1单 -> 1元(100积分) - r1 = append(r1, map[string]any{"tier_id": tid, "reward_type": "points", "reward_payload": map[string]int{"points": 100}, "quantity": 1}) - } else if p == 2 { // 10单 -> 优惠券ID 1 - r1 = append(r1, map[string]any{"tier_id": tid, "reward_type": "coupon", "reward_payload": map[string]int{"coupon_id": 1}, "quantity": 1}) - } else if p == 3 { // 100单 -> 道具卡ID 1 - r1 = append(r1, map[string]any{"tier_id": tid, "reward_type": "item_card", "reward_payload": map[string]int{"card_id": 1, "quantity": 1}, "quantity": 1}) - } - } - upsertRewards(t1ID, r1) - fmt.Printf("Created Task [Daily Order]: %d\n", t1ID) - - // --------------------------------------------------------- - // 任务 2: 每日邀请挑战 (Daily Invite Challenge) - // --------------------------------------------------------- - t2ID := createTask("每日邀请挑战", "每日邀请好友,奖励领不停", 1, 1) - upsertTiers(t2ID, []map[string]any{ - {"metric": "invite_count", "operator": ">=", "threshold": 1, "window": "daily", "repeatable": 1, "priority": 1}, - {"metric": "invite_count", "operator": ">=", "threshold": 10, "window": "daily", "repeatable": 1, "priority": 2}, - {"metric": "invite_count", "operator": ">=", "threshold": 100, "window": "daily", "repeatable": 1, "priority": 3}, - }) - t2Tiers := listTiers(t2ID) - var r2 []map[string]any - for _, t := range t2Tiers { - p := int(t["Priority"].(float64)) - tid := int64(t["ID"].(float64)) - if p == 1 { // 1人 -> 1元(100积分) - r2 = append(r2, map[string]any{"tier_id": tid, "reward_type": "points", "reward_payload": map[string]int{"points": 100}, "quantity": 1}) - } else if p == 2 { // 10人 -> 优惠券ID 1 - r2 = append(r2, map[string]any{"tier_id": tid, "reward_type": "coupon", "reward_payload": map[string]int{"coupon_id": 1}, "quantity": 1}) - } else if p == 3 { // 100人 -> 道具卡ID 1 - r2 = append(r2, map[string]any{"tier_id": tid, "reward_type": "item_card", "reward_payload": map[string]int{"card_id": 1, "quantity": 1}, "quantity": 1}) - } - } - upsertRewards(t2ID, r2) - fmt.Printf("Created Task [Daily Invite]: %d\n", t2ID) - - // --------------------------------------------------------- - // 任务 3: 新人首单福利 (Newbie First Order) - Lifetime - // --------------------------------------------------------- - t3ID := createTask("新人首单福利", "完成首次订单,获得新人专属奖励", 1, 1) - upsertTiers(t3ID, []map[string]any{ - {"metric": "first_order", "operator": "==", "threshold": 1, "window": "lifetime", "repeatable": 0, "priority": 1}, - }) - t3Tiers := listTiers(t3ID) - var r3 []map[string]any - for _, t := range t3Tiers { - // 首单奖励 500 积分 - r3 = append(r3, map[string]any{"tier_id": int64(t["ID"].(float64)), "reward_type": "points", "reward_payload": map[string]int{"points": 500}, "quantity": 1}) - } - upsertRewards(t3ID, r3) - fmt.Printf("Created Task [Newbie First Order]: %d\n", t3ID) - - // --------------------------------------------------------- - // 任务 4: 邀请达人 (Master Inviter) - Lifetime Cumulative - // --------------------------------------------------------- - t4ID := createTask("邀请达人挑战", "累计邀请好友,解锁达人成就", 1, 1) - upsertTiers(t4ID, []map[string]any{ - {"metric": "invite_count", "operator": ">=", "threshold": 50, "window": "lifetime", "repeatable": 0, "priority": 1}, - {"metric": "invite_count", "operator": ">=", "threshold": 200, "window": "lifetime", "repeatable": 0, "priority": 2}, - {"metric": "invite_count", "operator": ">=", "threshold": 500, "window": "lifetime", "repeatable": 0, "priority": 3}, - }) - t4Tiers := listTiers(t4ID) - var r4 []map[string]any - for _, t := range t4Tiers { - p := int(t["Priority"].(float64)) - tid := int64(t["ID"].(float64)) - if p == 1 { // 50人 -> 道具卡 ID 1 x2 - r4 = append(r4, map[string]any{"tier_id": tid, "reward_type": "item_card", "reward_payload": map[string]int{"card_id": 1, "quantity": 2}, "quantity": 2}) - } else if p == 2 { // 200人 -> 优惠券 ID 1 x5 - r4 = append(r4, map[string]any{"tier_id": tid, "reward_type": "coupon", "reward_payload": map[string]int{"coupon_id": 1}, "quantity": 5}) - } else if p == 3 { // 500人 -> 10000 积分 - r4 = append(r4, map[string]any{"tier_id": tid, "reward_type": "points", "reward_payload": map[string]int{"points": 10000}, "quantity": 1}) - } - } - upsertRewards(t4ID, r4) - fmt.Printf("Created Task [Master Inviter]: %d\n", t4ID) - - fmt.Println("All tasks setup completed!") -} - -func doRequest(method, path string, body any) map[string]any { - var bodyReader io.Reader - if body != nil { - b, _ := json.Marshal(body) - bodyReader = bytes.NewReader(b) - } - req, _ := http.NewRequest(method, BaseURL+path, bodyReader) - req.Header.Set("Authorization", Token) - req.Header.Set("Content-Type", "application/json") - - resp, err := http.DefaultClient.Do(req) - if err != nil { - panic(err) - } - defer resp.Body.Close() - - b, _ := io.ReadAll(resp.Body) - if resp.StatusCode >= 400 { - panic(fmt.Sprintf("Status: %d, Body: %s", resp.StatusCode, string(b))) - } - - var res map[string]any - json.Unmarshal(b, &res) - return res -} - -func doRequestRaw(method, path string, body any) []byte { - var bodyReader io.Reader - if body != nil { - b, _ := json.Marshal(body) - bodyReader = bytes.NewReader(b) - } - req, _ := http.NewRequest(method, BaseURL+path, bodyReader) - req.Header.Set("Authorization", Token) - if body != nil { - req.Header.Set("Content-Type", "application/json") - } - resp, err := http.DefaultClient.Do(req) - if err != nil { - panic(err) - } - defer resp.Body.Close() - b, _ := io.ReadAll(resp.Body) - return b -} - -func createTask(name, desc string, status, visibility int) int64 { - res := doRequest("POST", "/api/admin/task-center/tasks", map[string]any{ - "name": name, "description": desc, "status": status, "visibility": visibility, - }) - return int64(res["id"].(float64)) -} - -func upsertTiers(taskID int64, tiers []map[string]any) { - doRequest("POST", fmt.Sprintf("/api/admin/task-center/tasks/%d/tiers", taskID), map[string]any{ - "tiers": tiers, - }) -} - -func listTiers(taskID int64) []map[string]any { - res := doRequest("GET", fmt.Sprintf("/api/admin/task-center/tasks/%d/tiers", taskID), nil) - list := res["list"].([]interface{}) - var ret []map[string]any - for _, v := range list { - ret = append(ret, v.(map[string]any)) - } - return ret -} - -func upsertRewards(taskID int64, rewards []map[string]any) { - doRequest("POST", fmt.Sprintf("/api/admin/task-center/tasks/%d/rewards", taskID), map[string]any{ - "rewards": rewards, - }) -}