新版流量池服务端提交

This commit is contained in:
wong
2026-02-04 10:58:56 +08:00
parent f956fc949b
commit 7534dd79fa
19 changed files with 1101 additions and 147 deletions

View File

@@ -1292,44 +1292,47 @@ class Adapter implements WeChatServiceInterface
$affectedRows = 0;
try {
for ($i = 0; $i < $batchCount; $i++) {
$offset = $i * $batchSize;
// 使用 ON DUPLICATE KEY UPDATE 支持插入和更新
$sql = "INSERT INTO ck_traffic_pool_v1(
`identifier`, `wechatId`, `mobile`, `nickname`, `avatar`,
`gender`, `region`, `createTime`, `updateTime`
)
SELECT
t.wechatId AS identifier,
t.wechatId,
(SELECT phone FROM s2_wechat_friend WHERE wechatId = t.wechatId AND phone IS NOT NULL AND phone != '' LIMIT 1) AS mobile,
(SELECT nickname FROM s2_wechat_friend WHERE wechatId = t.wechatId ORDER BY id DESC LIMIT 1) AS nickname,
(SELECT avatar FROM s2_wechat_friend WHERE wechatId = t.wechatId ORDER BY id DESC LIMIT 1) AS avatar,
(SELECT gender FROM s2_wechat_friend WHERE wechatId = t.wechatId ORDER BY id DESC LIMIT 1) AS gender,
(SELECT region FROM s2_wechat_friend WHERE wechatId = t.wechatId ORDER BY id DESC LIMIT 1) AS region,
UNIX_TIMESTAMP() AS createTime,
UNIX_TIMESTAMP() AS updateTime
FROM (
SELECT wechatId FROM temp_wechat_ids LIMIT {$offset}, {$batchSize}
) AS t
ON DUPLICATE KEY UPDATE
mobile = COALESCE(VALUES(mobile), mobile),
nickname = COALESCE(VALUES(nickname), nickname),
avatar = COALESCE(VALUES(avatar), avatar),
gender = COALESCE(VALUES(gender), gender),
region = COALESCE(VALUES(region), region),
updateTime = UNIX_TIMESTAMP()";
$currentAffected = Db::execute($sql);
$affectedRows += $currentAffected;
if ($i % 5 == 0) {
gc_collect_cycles();
}
usleep(30000); // 30毫秒
}
// ========== 旧版流量池代码已废弃已迁移到V2 ==========
// for ($i = 0; $i < $batchCount; $i++) {
// $offset = $i * $batchSize;
//
// // 使用 ON DUPLICATE KEY UPDATE 支持插入和更新
// $sql = "INSERT INTO ck_traffic_pool_v1(
// `identifier`, `wechatId`, `mobile`, `nickname`, `avatar`,
// `gender`, `region`, `createTime`, `updateTime`
// )
// SELECT
// t.wechatId AS identifier,
// t.wechatId,
// (SELECT phone FROM s2_wechat_friend WHERE wechatId = t.wechatId AND phone IS NOT NULL AND phone != '' LIMIT 1) AS mobile,
// (SELECT nickname FROM s2_wechat_friend WHERE wechatId = t.wechatId ORDER BY id DESC LIMIT 1) AS nickname,
// (SELECT avatar FROM s2_wechat_friend WHERE wechatId = t.wechatId ORDER BY id DESC LIMIT 1) AS avatar,
// (SELECT gender FROM s2_wechat_friend WHERE wechatId = t.wechatId ORDER BY id DESC LIMIT 1) AS gender,
// (SELECT region FROM s2_wechat_friend WHERE wechatId = t.wechatId ORDER BY id DESC LIMIT 1) AS region,
// UNIX_TIMESTAMP() AS createTime,
// UNIX_TIMESTAMP() AS updateTime
// FROM (
// SELECT wechatId FROM temp_wechat_ids LIMIT {$offset}, {$batchSize}
// ) AS t
// ON DUPLICATE KEY UPDATE
// mobile = COALESCE(VALUES(mobile), mobile),
// nickname = COALESCE(VALUES(nickname), nickname),
// avatar = COALESCE(VALUES(avatar), avatar),
// gender = COALESCE(VALUES(gender), gender),
// region = COALESCE(VALUES(region), region),
// updateTime = UNIX_TIMESTAMP()";
//
// $currentAffected = Db::execute($sql);
// $affectedRows += $currentAffected;
//
// if ($i % 5 == 0) {
// gc_collect_cycles();
// }
//
// usleep(30000); // 30毫秒
// }
// ========== 旧版流量池代码结束(已迁移到 syncToTrafficPoolV2 ==========
// 注意:现在使用 syncToTrafficPoolV2() 方法同步到 V2 流量池系统
} catch (\Exception $e) {
\think\facade\Log::error("Error in traffic pool sync: " . $e->getMessage());
throw $e;