From 4b528184eae2518781ae6ae83b80ba751c4f7dac Mon Sep 17 00:00:00 2001 From: shanshanzhong Date: Tue, 17 Mar 2026 08:37:36 -0700 Subject: [PATCH] devicd_no --- .../migrate/database/00001_init_schema.up.sql | 32 +++++ pkg/email/template.go | 112 ++++++++++++------ 订单日子.txt | 76 ++---------- 说明文档.md | 12 +- 4 files changed, 130 insertions(+), 102 deletions(-) diff --git a/initialize/migrate/database/00001_init_schema.up.sql b/initialize/migrate/database/00001_init_schema.up.sql index 9be1ddb..ab5d0e4 100644 --- a/initialize/migrate/database/00001_init_schema.up.sql +++ b/initialize/migrate/database/00001_init_schema.up.sql @@ -551,5 +551,37 @@ CREATE TABLE IF NOT EXISTS `server_rule_group` DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_general_ci; +CREATE TABLE IF NOT EXISTS `user_family` +( + `id` bigint NOT NULL AUTO_INCREMENT, + `owner_user_id` bigint NOT NULL COMMENT 'Owner User ID', + `max_members` int NOT NULL DEFAULT 5 COMMENT 'Max members in family', + `status` tinyint NOT NULL DEFAULT 1 COMMENT 'Status: 1=active, 0=disabled', + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), + `deleted_at` datetime(3) NULL DEFAULT NULL, + PRIMARY KEY (`id`) USING BTREE, + UNIQUE INDEX `uniq_owner_user_id`(`owner_user_id` ASC) USING BTREE, + INDEX `idx_status`(`status` ASC) USING BTREE, + INDEX `idx_deleted_at`(`deleted_at` ASC) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 485 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci; + +CREATE TABLE IF NOT EXISTS `user_family_member` ( + `id` bigint NOT NULL AUTO_INCREMENT, + `family_id` bigint NOT NULL COMMENT 'Family ID', + `user_id` bigint NOT NULL COMMENT 'Member User ID', + `role` tinyint NOT NULL DEFAULT 2 COMMENT 'Role: 1=owner, 2=member', + `status` tinyint NOT NULL DEFAULT 1 COMMENT 'Status: 1=active, 2=left, 3=removed', + `join_source` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '' COMMENT 'Join source', + `joined_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `left_at` datetime(3) NULL DEFAULT NULL, + `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), + `deleted_at` datetime(3) NULL DEFAULT NULL, + PRIMARY KEY (`id`) USING BTREE, + UNIQUE INDEX `uniq_user_id`(`user_id` ASC) USING BTREE, + INDEX `idx_family_status`(`family_id` ASC, `status` ASC) USING BTREE, + INDEX `idx_deleted_at`(`deleted_at` ASC) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 510 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci; SET FOREIGN_KEY_CHECKS = 1; diff --git a/pkg/email/template.go b/pkg/email/template.go index 7026e87..a14e97a 100644 --- a/pkg/email/template.go +++ b/pkg/email/template.go @@ -301,41 +301,83 @@ const ( ` - DefaultDeleteAccountEmailTemplate = ` + DefaultDeleteAccountEmailTemplate = ` - - - - - - -
- -
账户注销确认
-
-

您好,

-

我们收到了您注销 {{.SiteName}} 账户的请求。请在系统提示时输入以下验证码以完成注销:

-
{{.Code}}
-

验证码将在 {{.Expire}} 分钟后过期。

-
-

⚠️ 重要提示:账户注销后,您的所有数据(包括订阅、套餐、账户信息)将被永久删除且不可恢复。请确认您已充分了解此操作的后果。

-
-

如果这不是您本人的操作,请立即忽略本邮件,您的账户将保持安全。

-

谢谢,
{{.SiteName}} 团队

-
- -
- + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + +
+ {{if .SiteLogo}}{{.SiteName}}{{end}} +
+

+ 账户注销确认 +

+

+ 亲爱的用户, + + 我们收到了你注销 {{.SiteName}} 账户的请求。 + 请在系统提示时输入以下验证码以完成注销: +

+ +
+ {{.Code}} +
+ +

+ 该验证码将在 {{.Expire}} 分钟 后过期。 +

+ + + + + + +
+

+ ⚠️ 重要提示:账户注销后,你的所有数据(包括订阅、套餐、账户信息)将被永久删除且不可恢复。请确认你已充分了解此操作的后果。 +

+
+ +

+ 如果这不是你本人操作,请忽略本邮件,你的账户将保持安全。 + + 谢谢, + {{.SiteName}}团队 +

+
+ {{if .SiteLogo}}{{.SiteName}}{{end}} +
+
+ ` ) diff --git a/订单日子.txt b/订单日子.txt index 6d1bfc7..a00e9ae 100644 --- a/订单日子.txt +++ b/订单日子.txt @@ -1,64 +1,12 @@ -success"} ip=111.55.176.10 trace=599cde0632e3cbd62b481f4d29219c74 -[GIN] 2026/03/07 - 18:32:15 | 200 | 6.812626ms | 111.55.176.10 | POST "/v1/public/portal/order/checkout" -70716-03-03 00:00:00.487 info 开始绑定 Apple IAP 交易 caller=apple/attachTransactionLogic.go:52 trace=92f7fcf0cff61025b4ee7f8803745b07 span=63cec34dcd4ddb2d orderNo=202603071832152196589625396 -70716-03-03 00:00:00.489 info [GORM] SQL Executed duration=1.3ms caller=apple/attachTransactionHandler.go:20 sql=SELECT user_family_member.role, user_family.status AS family_status, user_family.owner_user_id FROM `user_family_member` JOIN user_family ON user_family.id = user_family_member.family_id AND user_family.deleted_at IS NULL WHERE user_family_member.user_id = 666 AND user_family_member.deleted_at IS NULL AND user_family_member.status = 1 ORDER BY user_family_member.role LIMIT 1 span=63cec34dcd4ddb2d rows=0 trace=92f7fcf0cff61025b4ee7f8803745b07 -70716-03-03 00:00:00.490 info JWS 验签成功 caller=apple/attachTransactionLogic.go:90 originalTransactionId=2000001131910962 trace=92f7fcf0cff61025b4ee7f8803745b07 span=63cec34dcd4ddb2d productId=com.hifastvpn.vip.day7 purchaseAt=2026-03-07 18:29:22 +0800 CST -70716-03-03 00:00:00.491 info [GORM] SQL Executed duration=1.3ms caller=apple/attachTransactionLogic.go:93 sql=SELECT * FROM `apple_iap_transactions` WHERE original_transaction_id = '2000001131910962' ORDER BY `apple_iap_transactions`.`id` LIMIT 1 trace=92f7fcf0cff61025b4ee7f8803745b07 span=63cec34dcd4ddb2d rows=1 -70716-03-03 00:00:00.492 info 幂等等检查 caller=apple/attachTransactionLogic.go:94 originalTransactionId=2000001131910962 exists=true trace=92f7fcf0cff61025b4ee7f8803745b07 span=63cec34dcd4ddb2d -70716-03-03 00:00:00.492 info 商品映射解析 caller=apple/attachTransactionLogic.go:130 productId=com.hifastvpn.vip.day7 解析数量=7 解析单位=Day trace=92f7fcf0cff61025b4ee7f8803745b07 span=63cec34dcd4ddb2d -70716-03-03 00:00:00.493 info [GORM] SQL Executed duration=0.7ms caller=subscribe/model.go:128 sql=SELECT count(*) FROM `subscribe` WHERE `show` = true AND `sell` = true AND language = '' rows=1 trace=92f7fcf0cff61025b4ee7f8803745b07 span=63cec34dcd4ddb2d -70716-03-03 00:00:00.494 info [GORM] SQL Executed duration=1.0ms caller=subscribe/model.go:128 sql=SELECT * FROM `subscribe` WHERE `show` = true AND `sell` = true AND language = '' ORDER BY sort ASC LIMIT 9999 rows=1 trace=92f7fcf0cff61025b4ee7f8803745b07 span=63cec34dcd4ddb2d -70716-03-03 00:00:00.494 info 订阅映射命中 caller=apple/attachTransactionLogic.go:167 subscribeId=4 trace=92f7fcf0cff61025b4ee7f8803745b07 span=63cec34dcd4ddb2d name=日套餐 -70716-03-03 00:00:00.494 info 计算订阅到期时间 caller=apple/attachTransactionLogic.go:206 trace=92f7fcf0cff61025b4ee7f8803745b07 span=63cec34dcd4ddb2d expireAt=2026-03-14 18:29:22 +0800 CST expireUnix=1773484162 -70716-03-03 00:00:00.494 info IAP 绑定命中订单订阅 caller=apple/attachTransactionLogic.go:218 orderNo=202603071832152196589625396 subscribeToken=feaf5cb34ee2126186be2cda80325c99 trace=92f7fcf0cff61025b4ee7f8803745b07 span=63cec34dcd4ddb2d userSubscribeId=554 -70716-03-03 00:00:00.496 error [GORM] duration=0.9ms caller=apple/attachTransactionLogic.go:387 rows=0 error=record not found trace=92f7fcf0cff61025b4ee7f8803745b07 sql=SELECT * FROM `user_subscribe` WHERE token = 'iap:2000001131910962' ORDER BY `user_subscribe`.`id` LIMIT 1 span=63cec34dcd4ddb2d -70716-03-03 00:00:00.497 error [GORM] duration=0.8ms caller=apple/attachTransactionLogic.go:387 span=63cec34dcd4ddb2d error=record not found trace=92f7fcf0cff61025b4ee7f8803745b07 sql=SELECT * FROM `user_subscribe` WHERE token = '2000001131910962' ORDER BY `user_subscribe`.`id` LIMIT 1 rows=0 -70716-03-03 00:00:00.498 info [GORM] SQL Executed duration=0.7ms caller=user/subscribe.go:161 sql=SELECT * FROM `user_subscribe` WHERE id = 554 ORDER BY `user_subscribe`.`id` LIMIT 1 trace=92f7fcf0cff61025b4ee7f8803745b07 rows=1 span=63cec34dcd4ddb2d -70716-03-03 00:00:00.517 info [GORM] SQL Executed duration=19.2ms caller=user/subscribe.go:17 span=63cec34dcd4ddb2d rows=1 trace=92f7fcf0cff61025b4ee7f8803745b07 sql=UPDATE `user_subscribe` SET `id`=554,`user_id`=666,`order_id`=0,`subscribe_id`=4,`start_time`='2026-03-07 17:01:22.774',`expire_time`='2026-03-14 18:29:22',`finished_at`=NULL,`traffic`=0,`download`=2614807,`upload`=686954,`token`='feaf5cb34ee2126186be2cda80325c99',`uuid`='019cc787-a9d6-7f29-b4ef-60ae3979c57c',`status`=1,`note`='',`updated_at`='2026-03-07 18:32:16.499' WHERE id = 554 -70716-03-03 00:00:00.518 info 事务已处理,刷新订单关联订阅到期时间 caller=apple/attachTransactionLogic.go:275 userSubscribeId=554 expiresAt=1773484162 span=63cec34dcd4ddb2d orderNo=202603071832152196589625396 trace=92f7fcf0cff61025b4ee7f8803745b07 -70716-03-03 00:00:00.518 info HTTP Request duration=31.787656ms caller=middleware/loggerMiddleware.go:113 query= span=63cec34dcd4ddb2d request=POST tapi.hifast.biz/v1/public/iap/apple/transactions/attach user-agent=ios api_header= decrypted_request_body={"order_no":"202603071832152196589625396","signed_transaction_jws":"eyJhbGciOiJFUzI1NiIsIng1YyI6WyJNSUlFTVRDQ0E3YWdBd0lCQWdJUVI4S0h6ZG41NTRaL1VvcmFkTng5dHpBS0JnZ3Foa2pPUFFRREF6QjFNVVF3UWdZRFZRUURERHRCY0hCc1pTQlhiM0pzWkhkcFpHVWdSR1YyWld4dmNHVnlJRkpsYkdGMGFXOXVjeUJEWlhKMGFXWnBZMkYwYVc5dUlFRjFkR2h2Y21sMGVURUxNQWtHQTFVRUN3d0NSell4RXpBUkJnTlZCQW9NQ2tGd2NHeGxJRWx1WXk0eEN6QUpCZ05WQkFZVEFsVlRNQjRYRFRJMU1Ea3hPVEU1TkRRMU1Wb1hEVEkzTVRBeE16RTNORGN5TTFvd2daSXhRREErQmdOVkJBTU1OMUJ5YjJRZ1JVTkRJRTFoWXlCQmNIQWdVM1J2Y21VZ1lXNWtJR2xVZFc1bGN5QlRkRzl5WlNCU1pXTmxhWEIwSUZOcFoyNXBibWN4TERBcUJnTlZCQXNNSTBGd2NHeGxJRmR2Y214a2QybGtaU0JFWlhabGJHOXdaWElnVW1Wc1lYUnBiMjV6TVJNd0VRWURWUVFLREFwQmNIQnNaU0JKYm1NdU1Rc3dDUVlEVlFRR0V3SlZVekJaTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEEwSUFCTm5WdmhjdjdpVCs3RXg1dEJNQmdyUXNwSHpJc1hSaTBZeGZlazdsdjh3RW1qL2JIaVd0TndKcWMyQm9IenNRaUVqUDdLRklJS2c0WTh5MC9ueW51QW1qZ2dJSU1JSUNCREFNQmdOVkhSTUJBZjhFQWpBQU1COEdBMVVkSXdRWU1CYUFGRDh2bENOUjAxREptaWc5N2JCODVjK2xrR0taTUhBR0NDc0dBUVVGQndFQkJHUXdZakF0QmdnckJnRUZCUWN3QW9ZaGFIUjBjRG92TDJObGNuUnpMbUZ3Y0d4bExtTnZiUzkzZDJSeVp6WXVaR1Z5TURFR0NDc0dBUVVGQnpBQmhpVm9kSFJ3T2k4dmIyTnpjQzVoY0hCc1pTNWpiMjB2YjJOemNEQXpMWGQzWkhKbk5qQXlNSUlCSGdZRFZSMGdCSUlCRlRDQ0FSRXdnZ0VOQmdvcWhraUc5Mk5rQlFZQk1JSCtNSUhEQmdnckJnRUZCUWNDQWpDQnRneUJzMUpsYkdsaGJtTmxJRzl1SUhSb2FYTWdZMlZ5ZEdsbWFXTmhkR1VnWW5rZ1lXNTVJSEJoY25SNUlHRnpjM1Z0WlhNZ1lXTmpaWEIwWVc1alpTQnZaaUIwYUdVZ2RHaGxiaUJoY0hCc2FXTmhZbXhsSUhOMFlXNWtZWEprSUhSbGNtMXpJR0Z1WkNCamIyNWthWFJwYjI1eklHOW1JSFZ6WlN3Z1kyVnlkR2xtYVdOaGRHVWdjRzlzYVdONUlHRnVaQ0JqWlhKMGFXWnBZMkYwYVc5dUlIQnlZV04wYVdObElITjBZWFJsYldWdWRITXVNRFlHQ0NzR0FRVUZCd0lCRmlwb2RIUndPaTh2ZDNkM0xtRndjR3hsTG1OdmJTOWpaWEowYVdacFkyRjBaV0YxZEdodmNtbDBlUzh3SFFZRFZSME9CQllFRklGaW9HNHdNTVZBMWt1OXpKbUdOUEFWbjNlcU1BNEdBMVVkRHdFQi93UUVBd0lIZ0RBUUJnb3Foa2lHOTJOa0Jnc0JCQUlGQURBS0JnZ3Foa2pPUFFRREF3TnBBREJtQWpFQStxWG5SRUM3aFhJV1ZMc0x4em5qUnBJelBmN1ZIejlWL0NUbTgrTEpsclFlcG5tY1B2R0xOY1g2WFBubGNnTEFBakVBNUlqTlpLZ2c1cFE3OWtuRjRJYlRYZEt2OHZ1dElETVhEbWpQVlQzZEd2RnRzR1J3WE95d1Iya1pDZFNyZmVvdCIsIk1JSURGakNDQXB5Z0F3SUJBZ0lVSXNHaFJ3cDBjMm52VTRZU3ljYWZQVGp6Yk5jd0NnWUlLb1pJemowRUF3TXdaekViTUJrR0ExVUVBd3dTUVhCd2JHVWdVbTl2ZENCRFFTQXRJRWN6TVNZd0pBWURWUVFMREIxQmNIQnNaU0JEWlhKMGFXWnBZMkYwYVc5dUlFRjFkR2h2Y21sMGVURVRNQkVHQTFVRUNnd0tRWEJ3YkdVZ1NXNWpMakVMTUFrR0ExVUVCaE1DVlZNd0hoY05NakV3TXpFM01qQXpOekV3V2hjTk16WXdNekU1TURBd01EQXdXakIxTVVRd1FnWURWUVFERER0QmNIQnNaU0JYYjNKc1pIZHBaR1VnUkdWMlpXeHZjR1Z5SUZKbGJHRjBhVzl1Y3lCRFpYSjBhV1pwWTJGMGFXOXVJRUYxZEdodmNtbDBlVEVMTUFrR0ExVUVDd3dDUnpZeEV6QVJCZ05WQkFvTUNrRndjR3hsSUVsdVl5NHhDekFKQmdOVkJBWVRBbFZUTUhZd0VBWUhLb1pJemowQ0FRWUZLNEVFQUNJRFlnQUVic1FLQzk0UHJsV21aWG5YZ3R4emRWSkw4VDBTR1luZ0RSR3BuZ24zTjZQVDhKTUViN0ZEaTRiQm1QaENuWjMvc3E2UEYvY0djS1hXc0w1dk90ZVJoeUo0NXgzQVNQN2NPQithYW85MGZjcHhTdi9FWkZibmlBYk5nWkdoSWhwSW80SDZNSUgzTUJJR0ExVWRFd0VCL3dRSU1BWUJBZjhDQVFBd0h3WURWUjBqQkJnd0ZvQVV1N0Rlb1ZnemlKcWtpcG5ldnIzcnI5ckxKS3N3UmdZSUt3WUJCUVVIQVFFRU9qQTRNRFlHQ0NzR0FRVUZCekFCaGlwb2RIUndPaTh2YjJOemNDNWhjSEJzWlM1amIyMHZiMk56Y0RBekxXRndjR3hsY205dmRHTmhaek13TndZRFZSMGZCREF3TGpBc29DcWdLSVltYUhSMGNEb3ZMMk55YkM1aGNIQnNaUzVqYjIwdllYQndiR1Z5YjI5MFkyRm5NeTVqY213d0hRWURWUjBPQkJZRUZEOHZsQ05SMDFESm1pZzk3YkI4NWMrbGtHS1pNQTRHQTFVZER3RUIvd1FFQXdJQkJqQVFCZ29xaGtpRzkyTmtCZ0lCQkFJRkFEQUtCZ2dxaGtqT1BRUURBd05vQURCbEFqQkFYaFNxNUl5S29nTUNQdHc0OTBCYUI2NzdDYUVHSlh1ZlFCL0VxWkdkNkNTamlDdE9udU1UYlhWWG14eGN4ZmtDTVFEVFNQeGFyWlh2TnJreFUzVGtVTUkzM3l6dkZWVlJUNHd4V0pDOTk0T3NkY1o0K1JHTnNZRHlSNWdtZHIwbkRHZz0iLCJNSUlDUXpDQ0FjbWdBd0lCQWdJSUxjWDhpTkxGUzVVd0NnWUlLb1pJemowRUF3TXdaekViTUJrR0ExVUVBd3dTUVhCd2JHVWdVbTl2ZENCRFFTQXRJRWN6TVNZd0pBWURWUVFMREIxQmNIQnNaU0JEWlhKMGFXWnBZMkYwYVc5dUlFRjFkR2h2Y21sMGVURVRNQkVHQTFVRUNnd0tRWEJ3YkdVZ1NXNWpMakVMTUFrR0ExVUVCaE1DVlZNd0hoY05NVFF3TkRNd01UZ3hPVEEyV2hjTk16a3dORE13TVRneE9UQTJXakJuTVJzd0dRWURWUVFEREJKQmNIQnNaU0JTYjI5MElFTkJJQzBnUnpNeEpqQWtCZ05WQkFzTUhVRndjR3hsSUVObGNuUnBabWxqWVhScGIyNGdRWFYwYUc5eWFYUjVNUk13RVFZRFZRUUtEQXBCY0hCc1pTQkpibU11TVFzd0NRWURWUVFHRXdKVlV6QjJNQkFHQnlxR1NNNDlBZ0VHQlN1QkJBQWlBMklBQkpqcEx6MUFjcVR0a3lKeWdSTWMzUkNWOGNXalRuSGNGQmJaRHVXbUJTcDNaSHRmVGpqVHV4eEV0WC8xSDdZeVlsM0o2WVJiVHpCUEVWb0EvVmhZREtYMUR5eE5CMGNUZGRxWGw1ZHZNVnp0SzUxN0lEdll1VlRaWHBta09sRUtNYU5DTUVBd0hRWURWUjBPQkJZRUZMdXczcUZZTTRpYXBJcVozcjY5NjYvYXl5U3JNQThHQTFVZEV3RUIvd1FGTUFNQkFmOHdEZ1lEVlIwUEFRSC9CQVFEQWdFR01Bb0dDQ3FHU000OUJBTURBMmdBTUdVQ01RQ0Q2Y0hFRmw0YVhUUVkyZTN2OUd3T0FFWkx1Tit5UmhIRkQvM21lb3locG12T3dnUFVuUFdUeG5TNGF0K3FJeFVDTUcxbWloREsxQTNVVDgyTlF6NjBpbU9sTTI3amJkb1h0MlFmeUZNbStZaGlkRGtMRjF2TFVhZ002QmdENTZLeUtBPT0iXX0.eyJ0cmFuc2FjdGlvbklkIjoiMjAwMDAwMTEzMTkxMDk2MiIsIm9yaWdpbmFsVHJhbnNhY3Rpb25JZCI6IjIwMDAwMDExMzE5MTA5NjIiLCJidW5kbGVJZCI6ImNvbS50YXcuaGlmYXN0dnBuIiwicHJvZHVjdElkIjoiY29tLmhpZmFzdHZwbi52aXAuZGF5NyIsInB1cmNoYXNlRGF0ZSI6MTc3Mjg3OTM2MjAwMCwib3JpZ2luYWxQdXJjaGFzZURhdGUiOjE3NzI4NzkzNjIwMDAsInF1YW50aXR5IjoxLCJ0eXBlIjoiQ29uc3VtYWJsZSIsImRldmljZVZlcmlmaWNhdGlvbiI6ImdMaWtiVHZPdEd5Y2JkQnRNOFdJYkVHelp6cUN1alBBTTJVc1lHT3JKcTRCbzBXNkxMWlkveDVUUzI0cisxS3ciLCJkZXZpY2VWZXJpZmljYXRpb25Ob25jZSI6ImY0YjIwYmUxLWU4ZjktNGZmNy05MGUyLTZkNjY1ODkzOWQxMSIsImluQXBwT3duZXJzaGlwVHlwZSI6IlBVUkNIQVNFRCIsInNpZ25lZERhdGUiOjE3NzI4NzkzNjEyMzIsImVudmlyb25tZW50IjoiU2FuZGJveCIsInRyYW5zYWN0aW9uUmVhc29uIjoiUFVSQ0hBU0UiLCJzdG9yZWZyb250IjoiSEtHIiwic3RvcmVmcm9udElkIjoiMTQzNDYzIiwicHJpY2UiOjI4MDAwLCJjdXJyZW5jeSI6IkhLRCIsImFwcFRyYW5zYWN0aW9uSWQiOiI3MDUzMzcwNTA5OTAzNzYwODAifQ.nlnfCjq0I8uVmISo4W7XqQVG77DAUZMl4x9KBLX-zMUVs29TO5KpDR7rIS24jHmR35RLOcVqAsbhoXBBQgRTDw"} device_decrypt_status=success request_body={"data":"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","time":"2026-03-07T18:32:15.977357"} response_body={"code":200,"data":{"data":"FJysSCBUf1M2CEY3MIX47Si23mwLv4OzL2FgjJqcj0gJ5yf235krf5nOyp+K/SS3","time":"189a888b9bbc3ea0"},"msg":"success"} trace=92f7fcf0cff61025b4ee7f8803745b07 status=200 ip=111.55.176.10 -[GIN] 2026/03/07 - 18:32:16 | 200 | 32.143547ms | 111.55.176.10 | POST "/v1/public/iap/apple/transactions/attach" -70722-03-03 00:00:00.584 info [CheckSubscription] Start check subscription: 2026-03-07 18:32:22 caller=subscription/checkSubscriptionLogic.go:29 -70722-03-03 00:00:00.586 info [GORM] SQL Executed duration=0.6ms caller=user/default.go:145 rows=0 sql=SELECT * FROM `user_subscribe` WHERE upload + download >= traffic AND status IN (0, 1) AND traffic > 0 -70722-03-03 00:00:00.586 info [Check Subscription Traffic] No subscribe need to update caller=subscription/checkSubscriptionLogic.go:67 -70722-03-03 00:00:00.587 info [GORM] SQL Executed duration=0.8ms caller=user/default.go:145 sql=SELECT * FROM `user_subscribe` WHERE `status` IN (0, 1) AND `expire_time` < '2026-03-07 18:32:22.587' AND `expire_time` != '1970-01-01 08:00:00' and `finished_at` IS NULL rows=0 -70722-03-03 00:00:00.587 info [Check Subscription Expire] No subscribe need to update caller=subscription/checkSubscriptionLogic.go:109 -70724-03-03 00:00:00.038 info [GORM] SQL Executed duration=1.0ms caller=gin@v1.10.0/context.go:185 sql=SELECT * FROM `servers` WHERE id = 35 ORDER BY `servers`.`id` LIMIT 1 rows=1 trace=9c121966475da53142d63316bb0eea69 span=5961127bd1282677 -70724-03-03 00:00:00.040 info [GORM] SQL Executed duration=0.7ms caller=server/serverPushStatusHandler.go:24 sql=SELECT * FROM `servers` WHERE id = 35 ORDER BY `servers`.`id` LIMIT 1 span=5961127bd1282677 rows=1 trace=9c121966475da53142d63316bb0eea69 -70724-03-03 00:00:00.041 info [GORM] SQL Executed duration=0.7ms caller=callbacks/update.go:35 span=5961127bd1282677 sql=SELECT count(*) FROM `servers` WHERE sort = 2 AND id != 35 rows=1 trace=9c121966475da53142d63316bb0eea69 -70724-03-03 00:00:00.044 info [GORM] SQL Executed duration=4.4ms caller=gin@v1.10.0/context.go:185 sql=UPDATE `servers` SET `name`='Test2',`country`='JP',`city`='',`address`='test.airoport.win',`sort`=2,`protocols`='[{"type":"shadowsocks","port":3003,"enable":true,"cipher":"2022-blake3-aes-256-gcm","server_key":"kucakvzn1ndukmu8vpzifuftxxqbd2r1","obfs":"none","ratio":1,"cert_mode":"none","cert_dns_env":""}]',`last_reported_at`='2026-03-07 18:32:24.039',`longitude`='0.0',`latitude`='0.0',`longitude_center`='0.0',`latitude_center`='0.0',`updated_at`='2026-03-07 18:32:24.041' WHERE `id` = 35 AND `id` = 35 rows=1 span=5961127bd1282677 trace=9c121966475da53142d63316bb0eea69 -70724-03-03 00:00:00.044 info HTTP Request duration=7.079874ms caller=middleware/loggerMiddleware.go:113 user-agent=go-resty/2.16.5 (https://github.com/go-resty/resty) api_header= ip=104.129.59.167 trace=9c121966475da53142d63316bb0eea69 status=200 query=protocol=shadowsocks&secret_key=ibufechr-i18d-ftef-bohv-kkr2g3hdmije&server_id=35 request_body={"cpu":1.096876833038295,"disk":29.900554800715103,"mem":11.463589200132864,"updated_at":1772879544034} response_body={"code":200,"msg":"success"} span=5961127bd1282677 request=POST tapi.hifast.biz/v1/server/status?protocol=shadowsocks&secret_key=ibufechr-i18d-ftef-bohv-kkr2g3hdmije&server_id=35 -[GIN] 2026/03/07 - 18:32:24 | 200 | 7.299991ms | 104.129.59.167 | POST "/v1/server/status?protocol=shadowsocks&secret_key=ibufechr-i18d-ftef-bohv-kkr2g3hdmije&server_id=35" -70737-03-03 00:00:00.041 debug [AuthMiddleware] Redis Get{error redis: nil} {sessionId 019cc253-12f8-7e88-aa7b-ef6f20cdb990} caller=middleware/authMiddleware.go:56 trace=0669bb5d6665d851fad8eab6643beded span=43479b9207a1aa17 -70737-03-03 00:00:00.041 info HTTP Request duration=529.656µs caller=middleware/loggerMiddleware.go:113 query=data=h1xiEjH%2Fwoa%2FaJCN%2Bho2tw%3D%3D&time=2026-03-07T18%3A00%3A51.911455 ip=167.253.97.183 user-agent=android api_header= trace=0669bb5d6665d851fad8eab6643beded span=43479b9207a1aa17 status=200 request=GET tapi.hifast.biz/v1/public/user/subscribe?data=h1xiEjH%2Fwoa%2FaJCN%2Bho2tw%3D%3D&time=2026-03-07T18%3A00%3A51.911455 -[GIN] 2026/03/07 - 18:32:37 | 200 | 642.284µs | 167.253.97.183 | GET "/v1/public/user/subscribe?data=h1xiEjH%2Fwoa%2FaJCN%2Bho2tw%3D%3D&time=2026-03-07T18%3A00%3A51.911455" -[QueryServerProtocolConfigHandler] - ShouldBindQuery request: {ServerID:35 SecretKey:ibufechr-i18d-ftef-bohv-kkr2g3hdmije Protocols:[]} -70757-03-03 00:00:00.485 info [GORM] SQL Executed duration=1.1ms caller=gin@v1.10.0/context.go:185 sql=SELECT * FROM `servers` WHERE id = 35 ORDER BY `servers`.`id` LIMIT 1 rows=1 trace=668b105afaff512b8936f112688c0eb3 span=d87511034720e517 -70757-03-03 00:00:00.485 info HTTP Request duration=1.455482ms caller=middleware/loggerMiddleware.go:113 request=GET tapi.hifast.biz/v2/server/35?secret_key=ibufechr-i18d-ftef-bohv-kkr2g3hdmije query=secret_key=ibufechr-i18d-ftef-bohv-kkr2g3hdmije api_header= trace=668b105afaff512b8936f112688c0eb3 span=d87511034720e517 status=200 ip=104.129.59.167 user-agent=go-resty/2.16.5 (https://github.com/go-resty/resty) -[GIN] 2026/03/07 - 18:32:57 | 200 | 1.609159ms | 104.129.59.167 | GET "/v2/server/35?secret_key=ibufechr-i18d-ftef-bohv-kkr2g3hdmije" -70757-03-03 00:00:00.653 info HTTP Request duration=667.484µs caller=middleware/loggerMiddleware.go:113 query=protocol=shadowsocks&secret_key=ibufechr-i18d-ftef-bohv-kkr2g3hdmije&server_id=34 ip=104.129.59.167 api_header= span=f7270eac26d12f4e request=GET tapi.hifast.biz/v1/server/config?protocol=shadowsocks&secret_key=ibufechr-i18d-ftef-bohv-kkr2g3hdmije&server_id=34 user-agent=go-resty/2.13.1 (https://github.com/go-resty/resty) trace=e67a6083def94f750e6674c4053b4639 status=200 -[GIN] 2026/03/07 - 18:32:57 | 200 | 824.95µs | 104.129.59.167 | GET "/v1/server/config?protocol=shadowsocks&secret_key=ibufechr-i18d-ftef-bohv-kkr2g3hdmije&server_id=34" -70757-03-03 00:00:00.657 info HTTP Request duration=553.483µs caller=middleware/loggerMiddleware.go:113 query=protocol=shadowsocks&secret_key=ibufechr-i18d-ftef-bohv-kkr2g3hdmije&server_id=34 ip=104.129.59.167 api_header= trace=344754ec120a3e03e1d6431ef11c725a span=cae4368ad012569a status=200 request=GET tapi.hifast.biz/v1/server/user?protocol=shadowsocks&secret_key=ibufechr-i18d-ftef-bohv-kkr2g3hdmije&server_id=34 user-agent=go-resty/2.13.1 (https://github.com/go-resty/resty) -[GIN] 2026/03/07 - 18:32:57 | 200 | 696.89µs | 104.129.59.167 | GET "/v1/server/user?protocol=shadowsocks&secret_key=ibufechr-i18d-ftef-bohv-kkr2g3hdmije&server_id=34" -70757-03-03 00:00:00.824 info [GORM] SQL Executed duration=1.1ms caller=gin@v1.10.0/context.go:185 sql=SELECT * FROM `servers` WHERE id = 34 ORDER BY `servers`.`id` LIMIT 1 trace=7a76abec88076987509d242b7ef21237 span=25c6d86917fc1a97 rows=1 -70757-03-03 00:00:00.825 info [GORM] SQL Executed duration=0.9ms caller=server/serverPushStatusHandler.go:24 rows=1 trace=7a76abec88076987509d242b7ef21237 sql=SELECT * FROM `servers` WHERE id = 34 ORDER BY `servers`.`id` LIMIT 1 span=25c6d86917fc1a97 -70757-03-03 00:00:00.826 info [GORM] SQL Executed duration=0.9ms caller=callbacks/update.go:35 rows=1 span=25c6d86917fc1a97 sql=SELECT count(*) FROM `servers` WHERE sort = 1 AND id != 34 trace=7a76abec88076987509d242b7ef21237 -70757-03-03 00:00:00.829 info [GORM] SQL Executed duration=4.0ms caller=gin@v1.10.0/context.go:185 sql=UPDATE `servers` SET `name`='Test',`country`='US',`city`='',`address`='test.airoport.win',`sort`=1,`protocols`='[{"type":"shadowsocks","port":3002,"enable":true,"cipher":"aes-256-gcm","obfs":"none","ratio":1,"cert_mode":"none","cert_dns_env":""}]',`last_reported_at`='2026-03-07 18:32:57.824',`longitude`='0.0',`latitude`='0.0',`longitude_center`='0.0',`latitude_center`='0.0',`updated_at`='2026-03-07 18:32:57.827' WHERE `id` = 34 AND `id` = 34 rows=1 trace=7a76abec88076987509d242b7ef21237 span=25c6d86917fc1a97 -70757-03-03 00:00:00.829 info HTTP Request duration=7.040749ms caller=middleware/loggerMiddleware.go:113 request=POST tapi.hifast.biz/v1/server/status?protocol=shadowsocks&secret_key=ibufechr-i18d-ftef-bohv-kkr2g3hdmije&server_id=34 api_header= response_body={"code":200,"msg":"success"} status=200 ip=104.129.59.167 request_body={"cpu":1.0121288152167516,"disk":29.90058287909534,"mem":11.415347262863198,"updated_at":1772879577820} query=protocol=shadowsocks&secret_key=ibufechr-i18d-ftef-bohv-kkr2g3hdmije&server_id=34 user-agent=go-resty/2.13.1 (https://github.com/go-resty/resty) trace=7a76abec88076987509d242b7ef21237 span=25c6d86917fc1a97 -[GIN] 2026/03/07 - 18:32:57 | 200 | 7.24805ms | 104.129.59.167 | POST "/v1/server/status?protocol=shadowsocks&secret_key=ibufechr-i18d-ftef-bohv-kkr2g3hdmije&server_id=34" -70757-03-03 00:00:00.833 info [GORM] SQL Executed duration=1.0ms caller=gin@v1.10.0/context.go:185 rows=1 trace=81b91678b2672af0cdd15ec1630fc98f sql=SELECT * FROM `servers` WHERE id = 34 ORDER BY `servers`.`id` LIMIT 1 span=5f31dcb9d3c28653 -70757-03-03 00:00:00.834 info [ServerPushUserTraffic] Push traffic task success caller=server/serverPushUserTrafficLogic.go:54 trace=81b91678b2672af0cdd15ec1630fc98f span=5f31dcb9d3c28653 task=forthwith:traffic:statistics info={"server_id":34,"protocol":"shadowsocks","logs":[{"uid":554,"upload":2542,"download":27220}]} -70757-03-03 00:00:00.835 info [GORM] SQL Executed duration=0.8ms caller=server/serverPushUserTrafficHandler.go:24 sql=SELECT * FROM `servers` WHERE id = 34 ORDER BY `servers`.`id` LIMIT 1 rows=1 trace=81b91678b2672af0cdd15ec1630fc98f span=5f31dcb9d3c28653 -70757-03-03 00:00:00.836 info [GORM] SQL Executed duration=0.7ms caller=callbacks/update.go:35 sql=SELECT count(*) FROM `servers` WHERE sort = 1 AND id != 34 trace=81b91678b2672af0cdd15ec1630fc98f rows=1 span=5f31dcb9d3c28653 -70757-03-03 00:00:00.839 info [GORM] SQL Executed duration=3.4ms caller=gin@v1.10.0/context.go:185 sql=UPDATE `servers` SET `name`='Test',`country`='US',`city`='',`address`='test.airoport.win',`sort`=1,`protocols`='[{"type":"shadowsocks","port":3002,"enable":true,"cipher":"aes-256-gcm","obfs":"none","ratio":1,"cert_mode":"none","cert_dns_env":""}]',`last_reported_at`='2026-03-07 18:32:57.834',`longitude`='0.0',`latitude`='0.0',`longitude_center`='0.0',`latitude_center`='0.0',`updated_at`='2026-03-07 18:32:57.837' WHERE `id` = 34 AND `id` = 34 rows=1 trace=81b91678b2672af0cdd15ec1630fc98f span=5f31dcb9d3c28653 -70757-03-03 00:00:00.839 info HTTP Request duration=6.439323ms caller=middleware/loggerMiddleware.go:113 status=200 query=protocol=shadowsocks&secret_key=ibufechr-i18d-ftef-bohv-kkr2g3hdmije&server_id=34 ip=104.129.59.167 response_body={"code":200,"msg":"success"} trace=81b91678b2672af0cdd15ec1630fc98f request=POST tapi.hifast.biz/v1/server/push?protocol=shadowsocks&secret_key=ibufechr-i18d-ftef-bohv-kkr2g3hdmije&server_id=34 user-agent=go-resty/2.13.1 (https://github.com/go-resty/resty) request_body={"protocol":"","secret_key":"","server_id":0,"traffic":[{"download":27220,"uid":554,"upload":2542}]} api_header= span=5f31dcb9d3c28653 -[GIN] 2026/03/07 - 18:32:57 | 200 | 6.614832ms | 104.129.59.167 | POST "/v1/server/push?protocol=shadowsocks&secret_key=ibufechr-i18d-ftef-bohv-kkr2g3hdmije&server_id=34" -70757-03-03 00:00:00.842 info HTTP Request duration=324.66µs caller=middleware/loggerMiddleware.go:113 status=200 request_body=[{"uid":554,"ip":"111.55.176.10"}] trace=7a97c9cf4da3876a3f0c3bb2d9d94a55 request=POST tapi.hifast.biz/v1/server/online?protocol=shadowsocks&secret_key=ibufechr-i18d-ftef-bohv-kkr2g3hdmije&server_id=34 user-agent=go-resty/2.13.1 (https://github.com/go-resty/resty) api_header= span=a54d0a390931d783 query=protocol=shadowsocks&secret_key=ibufechr-i18d-ftef-bohv-kkr2g3hdmije&server_id=34 ip=104.129.59.167 response_body={"code":500,"msg":"Internal Server Error"} -[GIN] 2026/03/07 - 18:32:57 | 200 | 475.251µs | 104.129.59.167 | POST "/v1/server/online?protocol=shadowsocks&secret_key=ibufechr-i18d-ftef-bohv-kkr2g3hdmije&server_id=34" -70758-03-03 00:00:00.621 info [GORM] SQL Executed duration=1.3ms caller=asynq@v0.24.1/processor.go:432 sql=SELECT * FROM `servers` WHERE id = 34 ORDER BY `servers`.`id` LIMIT 1 rows=1 -70758-03-03 00:00:00.621 debug [TrafficStatisticsLogic] Current time traffic multiplier: 1.00 caller=traffic/trafficStatisticsLogic.go:82 -70758-03-03 00:00:00.623 info [GORM] SQL Executed duration=0.9ms caller=traffic/trafficStatisticsLogic.go:85 sql=SELECT * FROM `user_subscribe` WHERE id = 554 ORDER BY `user_subscribe`.`id` LIMIT 1 rows=1 -70758-03-03 00:00:00.626 info [GORM] SQL Executed duration=2.5ms caller=traffic/trafficStatisticsLogic.go:101 sql=UPDATE `user_subscribe` SET `download`=download + 27220,`upload`=upload + 2542,`updated_at`='2026-03-07 18:32:58.624' WHERE id = 554 rows=1 -70758-03-03 00:00:00.628 info [GORM] SQL Executed duration=2.1ms caller=asynq@v0.24.1/processor.go:432 sql=INSERT INTO `traffic_log` (`server_id`,`user_id`,`subscribe_id`,`download`,`upload`,`timestamp`) VALUES (34,666,554,27220,2542,'2026-03-07 18:32:58.621') rows=1 -7073-03-03 00:00:00.210 info HTTP Request duration=780.642µs caller=middleware/loggerMiddleware.go:113 ip=104.129.59.167 trace=3344560689835054a4c15d71a463cbeb status=304 request=GET tapi.hifast.biz/v1/server/user?protocol=shadowsocks&secret_key=ibufechr-i18d-ftef-bohv-kkr2g3hdmije&server_id=35 user-agent=go-resty/2.16.5 (https://github.com/go-resty/resty) api_header= span=7019a5639f54279b query=protocol=shadowsocks&secret_key=ibufechr-i18d-ftef-bohv-kkr2g3hdmije&server_id=35 -[GIN] 2026/03/07 - 18:33:03 | 304 | 949.24µs | 104.129.59.167 | GET "/v1/server/user?protocol=shadowsocks&secret_key=ibufechr-i18d-ftef-bohv-kkr2g3hdmije&server_id=35" +TRUNCATE TABLE apple_iap_transactions; +TRUNCATE TABLE application_versions; +TRUNCATE TABLE `order`; +TRUNCATE TABLE system_logs; +TRUNCATE TABLE traffic_log; +TRUNCATE TABLE user; +TRUNCATE TABLE user_auth_methods; +TRUNCATE TABLE user_device; +TRUNCATE TABLE user_device_online_record; +TRUNCATE TABLE user_family; +TRUNCATE TABLE user_family_member; +TRUNCATE TABLE user_subscribe; \ No newline at end of file diff --git a/说明文档.md b/说明文档.md index 47e05af..3b82543 100644 --- a/说明文档.md +++ b/说明文档.md @@ -20,8 +20,14 @@ certbot certonly --manual --preferred-challenges dns -d airoport.win -d "*.airop - gunzip -c /Users/Apple/Downloads/db_backups_20260315_000003/mysql/mysql_dump_20260311_173933.sql.gz \ - | docker exec -i ppanel-db mysql -uroot -prootpassword + gunzip -c mysql_dump_20260317_145137.sql.gz \ + | docker exec -i ppanel-mysql mysql -uroot -pjpcV41ppanel -go run scripts/migrate_paid_users.go -src 'root:rootpassword@tcp(127.0.0.1:3306)/ppanel?charset=utf8mb4&parseTime=True&loc=Local' -dst 'root:jpcV41ppanel@tcp(154.12.35.103:3306)/ppanel?charset=utf8mb4&parseTime=True&loc=Local' -clean \ No newline at end of file +go run scripts/migrate_paid_users.go -src 'root:rootpassword@tcp(127.0.0.1:3306)/ppanel?charset=utf8mb4&parseTime=True&loc=Local' -dst 'root:jpcV41ppanel@tcp(154.12.35.103:3306)/ppanel?charset=utf8mb4&parseTime=True&loc=Local' -clean + + + +docker exec ppanel-redis redis-cli --scan --pattern "*" \ +grep -vE "^auth:session_id:|^auth:user_sessions:" \ +xargs -r -n 500 docker exec -i ppanel-redis redis-cli DEL \ No newline at end of file