合并商品编号迁移
This commit is contained in:
@@ -18,12 +18,14 @@ BEGIN
|
||||
DECLARE current_batch INT DEFAULT 0;
|
||||
DECLARE batch_start INT;
|
||||
DECLARE batch_end INT;
|
||||
DECLARE current_limit INT;
|
||||
|
||||
SET batches = CEIL(batch_size / batch_limit);
|
||||
|
||||
WHILE current_batch < batches DO
|
||||
SET batch_start = current_batch * batch_limit + 1;
|
||||
SET batch_end = LEAST((current_batch + 1) * batch_limit, batch_size);
|
||||
SET current_limit = batch_end - batch_start + 1;
|
||||
|
||||
-- 使用 INSERT ... SELECT 批量生成
|
||||
INSERT INTO users (phone, nickname, realname_status, risk_status, credit_score, status, created_at)
|
||||
@@ -45,7 +47,7 @@ BEGIN
|
||||
(SELECT 0 UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4
|
||||
UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) t3,
|
||||
(SELECT @row := batch_start - 1) r
|
||||
LIMIT batch_end - batch_start + 1
|
||||
LIMIT current_limit
|
||||
) seqs
|
||||
ON DUPLICATE KEY UPDATE id=id;
|
||||
|
||||
@@ -90,6 +92,7 @@ BEGIN
|
||||
DECLARE batch_limit INT DEFAULT 1000;
|
||||
DECLARE batches INT;
|
||||
DECLARE current_batch INT DEFAULT 0;
|
||||
DECLARE verified_user_count INT DEFAULT 0;
|
||||
|
||||
-- 创建临时表存储已实名用户ID
|
||||
DROP TEMPORARY TABLE IF EXISTS tmp_verified_users;
|
||||
@@ -104,6 +107,8 @@ BEGIN
|
||||
WHERE realname_status = 'verified'
|
||||
ORDER BY id;
|
||||
|
||||
SELECT COUNT(*) INTO verified_user_count FROM tmp_verified_users;
|
||||
|
||||
SET batches = CEIL(batch_size / batch_limit);
|
||||
|
||||
WHILE current_batch < batches DO
|
||||
@@ -149,15 +154,19 @@ BEGIN
|
||||
(SELECT @row2 := current_batch * batch_limit) r
|
||||
LIMIT batch_limit
|
||||
) seqs
|
||||
INNER JOIN tmp_verified_users u ON u.row_num = (seq % (SELECT COUNT(*) FROM tmp_verified_users)) + 1
|
||||
INNER JOIN tmp_verified_users u ON u.row_num = (seq % verified_user_count) + 1
|
||||
WHERE seq <= batch_size;
|
||||
|
||||
-- 批量生成租号商品
|
||||
INSERT INTO rental_listings (
|
||||
account_id, owner_id, price, deposit_amount,
|
||||
listing_no, account_id, owner_id, price, deposit_amount,
|
||||
in_transaction, status, review_status, published_at
|
||||
)
|
||||
SELECT
|
||||
CONCAT(
|
||||
DATE_FORMAT(DATE_SUB(NOW(), INTERVAL (ga.id % 90) DAY), '%Y%m%d'),
|
||||
LPAD(FLOOR((ga.id - 1) / 90) + 1, 4, '0')
|
||||
) as listing_no,
|
||||
ga.id as account_id,
|
||||
ga.owner_id,
|
||||
5.00 + ((ga.id % 20) * 0.5) as price,
|
||||
@@ -182,6 +191,14 @@ BEGIN
|
||||
COMMIT;
|
||||
END WHILE;
|
||||
|
||||
INSERT INTO listing_no_sequences (biz_date, next_seq)
|
||||
SELECT LEFT(listing_no, 8), MAX(CAST(SUBSTRING(listing_no, 9) AS UNSIGNED))
|
||||
FROM rental_listings
|
||||
GROUP BY LEFT(listing_no, 8)
|
||||
ON DUPLICATE KEY UPDATE next_seq = GREATEST(next_seq, VALUES(next_seq));
|
||||
|
||||
COMMIT;
|
||||
|
||||
DROP TEMPORARY TABLE IF EXISTS tmp_verified_users;
|
||||
END$$
|
||||
DELIMITER ;
|
||||
@@ -196,6 +213,8 @@ BEGIN
|
||||
DECLARE batch_limit INT DEFAULT 1000;
|
||||
DECLARE batches INT;
|
||||
DECLARE current_batch INT DEFAULT 0;
|
||||
DECLARE available_listing_count INT DEFAULT 0;
|
||||
DECLARE verified_user_count INT DEFAULT 0;
|
||||
|
||||
-- 创建临时表:可用商品
|
||||
DROP TEMPORARY TABLE IF EXISTS tmp_available_listings;
|
||||
@@ -214,6 +233,8 @@ BEGIN
|
||||
WHERE status IN ('published', 'active') AND review_status = 'approved'
|
||||
ORDER BY id;
|
||||
|
||||
SELECT COUNT(*) INTO available_listing_count FROM tmp_available_listings;
|
||||
|
||||
-- 创建临时表:已实名用户
|
||||
DROP TEMPORARY TABLE IF EXISTS tmp_verified_users;
|
||||
CREATE TEMPORARY TABLE tmp_verified_users (
|
||||
@@ -227,6 +248,8 @@ BEGIN
|
||||
WHERE realname_status = 'verified'
|
||||
ORDER BY id;
|
||||
|
||||
SELECT COUNT(*) INTO verified_user_count FROM tmp_verified_users;
|
||||
|
||||
SET batches = CEIL(batch_size / batch_limit);
|
||||
|
||||
WHILE current_batch < batches DO
|
||||
@@ -278,8 +301,8 @@ BEGIN
|
||||
(SELECT @row3 := current_batch * batch_limit) r
|
||||
LIMIT batch_limit
|
||||
) seqs
|
||||
INNER JOIN tmp_available_listings l ON l.row_num = (seq % (SELECT COUNT(*) FROM tmp_available_listings)) + 1
|
||||
INNER JOIN tmp_verified_users r ON r.row_num = (seq % (SELECT COUNT(*) FROM tmp_verified_users)) + 1
|
||||
INNER JOIN tmp_available_listings l ON l.row_num = (seq % available_listing_count) + 1
|
||||
INNER JOIN tmp_verified_users r ON r.row_num = (seq % verified_user_count) + 1
|
||||
WHERE seq <= batch_size AND r.id != l.owner_id
|
||||
LIMIT batch_limit;
|
||||
|
||||
@@ -302,6 +325,8 @@ BEGIN
|
||||
DECLARE batch_limit INT DEFAULT 1000;
|
||||
DECLARE batches INT;
|
||||
DECLARE current_batch INT DEFAULT 0;
|
||||
DECLARE user_count INT DEFAULT 0;
|
||||
DECLARE order_count INT DEFAULT 0;
|
||||
|
||||
-- 创建临时表:用户列表
|
||||
DROP TEMPORARY TABLE IF EXISTS tmp_users;
|
||||
@@ -315,6 +340,8 @@ BEGIN
|
||||
FROM users, (SELECT @rn := 0) init
|
||||
ORDER BY id;
|
||||
|
||||
SELECT COUNT(*) INTO user_count FROM tmp_users;
|
||||
|
||||
-- 创建临时表:订单列表
|
||||
DROP TEMPORARY TABLE IF EXISTS tmp_orders;
|
||||
CREATE TEMPORARY TABLE tmp_orders (
|
||||
@@ -327,6 +354,8 @@ BEGIN
|
||||
FROM rental_orders, (SELECT @rn2 := 0) init
|
||||
ORDER BY id;
|
||||
|
||||
SELECT COUNT(*) INTO order_count FROM tmp_orders;
|
||||
|
||||
SET batches = CEIL(batch_size / batch_limit);
|
||||
|
||||
WHILE current_batch < batches DO
|
||||
@@ -365,8 +394,8 @@ BEGIN
|
||||
(SELECT @row4 := current_batch * batch_limit) r
|
||||
LIMIT batch_limit
|
||||
) seqs
|
||||
INNER JOIN tmp_users u ON u.row_num = (seq % (SELECT COUNT(*) FROM tmp_users)) + 1
|
||||
LEFT JOIN tmp_orders o ON o.row_num = (seq % (SELECT COUNT(*) FROM tmp_orders)) + 1
|
||||
INNER JOIN tmp_users u ON u.row_num = (seq % user_count) + 1
|
||||
LEFT JOIN tmp_orders o ON o.row_num = (seq % order_count) + 1
|
||||
WHERE seq <= batch_size
|
||||
LIMIT batch_limit;
|
||||
|
||||
@@ -386,6 +415,12 @@ DROP PROCEDURE IF EXISTS generate_chat_data_batch;
|
||||
DELIMITER $$
|
||||
CREATE PROCEDURE generate_chat_data_batch(IN message_count INT)
|
||||
BEGIN
|
||||
DECLARE batch_limit INT DEFAULT 1000;
|
||||
DECLARE batches INT;
|
||||
DECLARE current_batch INT DEFAULT 0;
|
||||
DECLARE conversation_count INT DEFAULT 0;
|
||||
DECLARE user_count INT DEFAULT 0;
|
||||
|
||||
-- 先生成聊天会话(基于订单)
|
||||
INSERT INTO chat_conversations (order_id, type, title, status, last_message_at)
|
||||
SELECT
|
||||
@@ -399,11 +434,6 @@ BEGIN
|
||||
LIMIT 1000
|
||||
ON DUPLICATE KEY UPDATE order_id=order_id;
|
||||
|
||||
-- 批量生成聊天消息
|
||||
DECLARE batch_limit INT DEFAULT 1000;
|
||||
DECLARE batches INT;
|
||||
DECLARE current_batch INT DEFAULT 0;
|
||||
|
||||
DROP TEMPORARY TABLE IF EXISTS tmp_conversations;
|
||||
CREATE TEMPORARY TABLE tmp_conversations (
|
||||
id BIGINT PRIMARY KEY,
|
||||
@@ -415,6 +445,8 @@ BEGIN
|
||||
FROM chat_conversations, (SELECT @rn := 0) init
|
||||
ORDER BY id;
|
||||
|
||||
SELECT COUNT(*) INTO conversation_count FROM tmp_conversations;
|
||||
|
||||
DROP TEMPORARY TABLE IF EXISTS tmp_users;
|
||||
CREATE TEMPORARY TABLE tmp_users (
|
||||
id BIGINT PRIMARY KEY,
|
||||
@@ -426,6 +458,8 @@ BEGIN
|
||||
FROM users, (SELECT @rn2 := 0) init
|
||||
ORDER BY id;
|
||||
|
||||
SELECT COUNT(*) INTO user_count FROM tmp_users;
|
||||
|
||||
SET batches = CEIL(message_count / batch_limit);
|
||||
|
||||
WHILE current_batch < batches DO
|
||||
@@ -453,8 +487,8 @@ BEGIN
|
||||
(SELECT @row5 := current_batch * batch_limit) r
|
||||
LIMIT batch_limit
|
||||
) seqs
|
||||
INNER JOIN tmp_conversations c ON c.row_num = (seq % (SELECT COUNT(*) FROM tmp_conversations)) + 1
|
||||
INNER JOIN tmp_users u ON u.row_num = (seq % (SELECT COUNT(*) FROM tmp_users)) + 1
|
||||
INNER JOIN tmp_conversations c ON c.row_num = (seq % conversation_count) + 1
|
||||
INNER JOIN tmp_users u ON u.row_num = (seq % user_count) + 1
|
||||
WHERE seq <= message_count
|
||||
LIMIT batch_limit;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user