新版流量池服务端提交
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user