345 lines
13 KiB
MySQL
345 lines
13 KiB
MySQL
|
|
-- ============================================================================
|
|||
|
|
-- 全流程模拟测试 - 数据库验证脚本
|
|||
|
|
-- ============================================================================
|
|||
|
|
-- 用途:验证采购商下单 → 分享链接 → 纺织厂确认 → 生产流程 → 分批次入库
|
|||
|
|
-- 的完整业务流程数据一致性
|
|||
|
|
--
|
|||
|
|
-- 执行方式:通过 meoo-cli cloud query --sql "..." 逐条执行
|
|||
|
|
-- ============================================================================
|
|||
|
|
|
|||
|
|
-- ============================================================================
|
|||
|
|
-- 阶段零:环境准备(清理旧数据,模拟首次合作)
|
|||
|
|
-- ============================================================================
|
|||
|
|
|
|||
|
|
-- 0.1 清理旧的合作关系(模拟首次合作场景)
|
|||
|
|
DELETE FROM company_relationships
|
|||
|
|
WHERE purchaser_company_id = '11111111-1111-1111-1111-111111111101'
|
|||
|
|
AND factory_company_id = '11111111-1111-1111-1111-111111111102';
|
|||
|
|
|
|||
|
|
-- 0.2 清理旧的测试计划(避免重复)
|
|||
|
|
DELETE FROM production_plans WHERE plan_code = 'TEST-2026-001';
|
|||
|
|
|
|||
|
|
-- 0.3 清理旧的测试产品
|
|||
|
|
DELETE FROM products WHERE fabric_code = 'QM-XW-280-01'
|
|||
|
|
AND company_id = '11111111-1111-1111-1111-111111111101';
|
|||
|
|
|
|||
|
|
-- ============================================================================
|
|||
|
|
-- 阶段一:采购商创建产品和生产计划
|
|||
|
|
-- ============================================================================
|
|||
|
|
|
|||
|
|
-- 1.1 创建产品信息
|
|||
|
|
INSERT INTO products (
|
|||
|
|
company_id, product_name, weight, color, fabric_code, color_code,
|
|||
|
|
yarn_usage_per_meter, yarn_types, yarn_ratios, raw_fabric_rolls,
|
|||
|
|
raw_fabric_meters, total_stock, production_price, warp_weight,
|
|||
|
|
weft_weight, total_weight
|
|||
|
|
) VALUES (
|
|||
|
|
'11111111-1111-1111-1111-111111111101', -- 采购商公司ID
|
|||
|
|
'全棉斜纹布',
|
|||
|
|
280,
|
|||
|
|
'藏青',
|
|||
|
|
'QM-XW-280-01',
|
|||
|
|
'01',
|
|||
|
|
350,
|
|||
|
|
ARRAY['精梳棉纱','涤纶纱'],
|
|||
|
|
ARRAY[0.7,0.3],
|
|||
|
|
0,
|
|||
|
|
0,
|
|||
|
|
0,
|
|||
|
|
18.5,
|
|||
|
|
160,
|
|||
|
|
120,
|
|||
|
|
280
|
|||
|
|
);
|
|||
|
|
|
|||
|
|
-- 1.2 获取刚创建的产品ID(用于后续关联)
|
|||
|
|
-- SELECT id FROM products WHERE fabric_code = 'QM-XW-280-01'
|
|||
|
|
-- AND company_id = '11111111-1111-1111-1111-111111111101';
|
|||
|
|
|
|||
|
|
-- 1.3 创建生产计划
|
|||
|
|
INSERT INTO production_plans (
|
|||
|
|
plan_code, product_name, color, fabric_code, color_code,
|
|||
|
|
remark, purchaser_id, target_quantity, completed_quantity,
|
|||
|
|
yarn_usage_per_meter, production_price, status, start_time, created_by
|
|||
|
|
) VALUES (
|
|||
|
|
'TEST-2026-001',
|
|||
|
|
'全棉斜纹布',
|
|||
|
|
'藏青',
|
|||
|
|
'QM-XW-280-01',
|
|||
|
|
'01',
|
|||
|
|
'模拟测试订单',
|
|||
|
|
'11111111-1111-1111-1111-111111111101', -- 采购商公司ID
|
|||
|
|
10000, -- 目标产量10000米
|
|||
|
|
0, -- 初始完成量为0
|
|||
|
|
350, -- 每米纱用量
|
|||
|
|
18.5, -- 生产采购价
|
|||
|
|
'pending',
|
|||
|
|
NOW(),
|
|||
|
|
'a0000001-0000-0000-0000-000000000001' -- 采购商用户ID
|
|||
|
|
);
|
|||
|
|
|
|||
|
|
-- 1.4 获取刚创建的计划ID(用于后续关联)
|
|||
|
|
-- SELECT id FROM production_plans WHERE plan_code = 'TEST-2026-001';
|
|||
|
|
|
|||
|
|
-- 1.5 创建纱线配比(假设计划ID为 {plan_id})
|
|||
|
|
-- INSERT INTO yarn_ratios (plan_id, yarn_name, ratio, amount_per_meter, total_amount, company_id)
|
|||
|
|
-- VALUES ('{plan_id}', '精梳棉纱', 0.7, 245, 2450000, '11111111-1111-1111-1111-111111111101'),
|
|||
|
|
-- ('{plan_id}', '涤纶纱', 0.3, 105, 1050000, '11111111-1111-1111-1111-111111111101');
|
|||
|
|
|
|||
|
|
-- 1.6 创建流程节点(5个标准节点)
|
|||
|
|
-- INSERT INTO plan_process_steps (plan_id, step_type, status, company_id)
|
|||
|
|
-- VALUES ('{plan_id}', 'confirm', 'pending', '11111111-1111-1111-1111-111111111101'),
|
|||
|
|
-- ('{plan_id}', 'yarn_purchase', 'pending', '11111111-1111-1111-1111-111111111101'),
|
|||
|
|
-- ('{plan_id}', 'dyeing', 'pending', '11111111-1111-1111-1111-111111111101'),
|
|||
|
|
-- ('{plan_id}', 'machine_start', 'pending', '11111111-1111-1111-1111-111111111101'),
|
|||
|
|
-- ('{plan_id}', 'fabric_warehouse', 'pending', '11111111-1111-1111-1111-111111111101');
|
|||
|
|
|
|||
|
|
-- ============================================================================
|
|||
|
|
-- 阶段二:生成分享链接(首次合作)
|
|||
|
|
-- ============================================================================
|
|||
|
|
|
|||
|
|
-- 2.1 生成分享链接
|
|||
|
|
-- INSERT INTO share_links (short_code, plan_id, factory_type, created_by, expires_at, status)
|
|||
|
|
-- VALUES ('TEST-SIM-001', '{plan_id}', 'textile', 'a0000001-0000-0000-0000-000000000001',
|
|||
|
|
-- NOW() + INTERVAL '30 minutes', 'pending');
|
|||
|
|
|
|||
|
|
-- ============================================================================
|
|||
|
|
-- 阶段三:纺织厂点击链接并确认导入
|
|||
|
|
-- ============================================================================
|
|||
|
|
|
|||
|
|
-- 3.1 纺织厂点击链接(更新状态为 clicked)
|
|||
|
|
-- UPDATE share_links SET status = 'clicked', clicked_at = NOW(), click_count = 1
|
|||
|
|
-- WHERE short_code = 'TEST-SIM-001';
|
|||
|
|
|
|||
|
|
-- 3.2 纺织厂确认导入 - 创建工厂关联
|
|||
|
|
-- INSERT INTO plan_factories (plan_id, factory_id, factory_type)
|
|||
|
|
-- VALUES ('{plan_id}', '11111111-1111-1111-1111-111111111102', 'textile');
|
|||
|
|
|
|||
|
|
-- 3.3 更新分享链接状态为 confirmed
|
|||
|
|
-- UPDATE share_links SET status = 'confirmed', responded_at = NOW(),
|
|||
|
|
-- response_result = 'confirmed', used_at = NOW()
|
|||
|
|
-- WHERE short_code = 'TEST-SIM-001';
|
|||
|
|
|
|||
|
|
-- 3.4 建立合作关系
|
|||
|
|
-- INSERT INTO company_relationships (purchaser_company_id, factory_company_id, factory_type, status)
|
|||
|
|
-- VALUES ('11111111-1111-1111-1111-111111111101', '11111111-1111-1111-1111-111111111102', 'textile', 'active');
|
|||
|
|
|
|||
|
|
-- 3.5 更新计划状态为 producing
|
|||
|
|
-- UPDATE production_plans SET status = 'producing' WHERE id = '{plan_id}';
|
|||
|
|
|
|||
|
|
-- ============================================================================
|
|||
|
|
-- 阶段四:纺织厂确认生产流程节点
|
|||
|
|
-- ============================================================================
|
|||
|
|
|
|||
|
|
-- 4.1 确认所有流程节点(5个节点全部完成)
|
|||
|
|
-- UPDATE plan_process_steps SET status = 'completed', timestamp = NOW(),
|
|||
|
|
-- operator_id = 'a0000002-0000-0000-0000-000000000002' -- 纺织厂用户ID
|
|||
|
|
-- WHERE plan_id = '{plan_id}';
|
|||
|
|
|
|||
|
|
-- ============================================================================
|
|||
|
|
-- 阶段五:分批次坯布入库(3批)
|
|||
|
|
-- ============================================================================
|
|||
|
|
|
|||
|
|
-- 5.1 第1批入库:3000米,30匹
|
|||
|
|
-- INSERT INTO inventory_records (plan_id, warehouse_id, quantity, rolls, company_id, operator_id, price_per_meter)
|
|||
|
|
-- VALUES ('{plan_id}', '22222222-2222-2222-2222-222222222202', 3000, 30,
|
|||
|
|
-- '11111111-1111-1111-1111-111111111102', 'a0000002-0000-0000-0000-000000000002', 18.5);
|
|||
|
|
|
|||
|
|
-- 5.2 第2批入库:4000米,40匹
|
|||
|
|
-- INSERT INTO inventory_records (plan_id, warehouse_id, quantity, rolls, company_id, operator_id, price_per_meter)
|
|||
|
|
-- VALUES ('{plan_id}', '22222222-2222-2222-2222-222222222202', 4000, 40,
|
|||
|
|
-- '11111111-1111-1111-1111-111111111102', 'a0000002-0000-0000-0000-000000000002', 18.5);
|
|||
|
|
|
|||
|
|
-- 5.3 第3批入库:3000米,28匹
|
|||
|
|
-- INSERT INTO inventory_records (plan_id, warehouse_id, quantity, rolls, company_id, operator_id, price_per_meter)
|
|||
|
|
-- VALUES ('{plan_id}', '22222222-2222-2222-2222-222222222202', 3000, 28,
|
|||
|
|
-- '11111111-1111-1111-1111-111111111102', 'a0000002-0000-0000-0000-000000000002', 18.5);
|
|||
|
|
|
|||
|
|
-- 5.4 更新计划完成状态
|
|||
|
|
-- UPDATE production_plans SET completed_quantity = 10000, status = 'completed'
|
|||
|
|
-- WHERE id = '{plan_id}';
|
|||
|
|
|
|||
|
|
-- ============================================================================
|
|||
|
|
-- 阶段六:数据完整性验证查询
|
|||
|
|
-- ============================================================================
|
|||
|
|
|
|||
|
|
-- 6.1 验证计划基本信息
|
|||
|
|
SELECT
|
|||
|
|
p.plan_code,
|
|||
|
|
p.status,
|
|||
|
|
p.target_quantity,
|
|||
|
|
p.completed_quantity,
|
|||
|
|
p.product_name,
|
|||
|
|
p.color,
|
|||
|
|
p.fabric_code,
|
|||
|
|
c.name as purchaser_name
|
|||
|
|
FROM production_plans p
|
|||
|
|
LEFT JOIN companies c ON c.id = p.purchaser_id
|
|||
|
|
WHERE p.plan_code = 'TEST-2026-001';
|
|||
|
|
|
|||
|
|
-- 预期结果:
|
|||
|
|
-- plan_code: TEST-2026-001
|
|||
|
|
-- status: completed
|
|||
|
|
-- target_quantity: 10000
|
|||
|
|
-- completed_quantity: 10000
|
|||
|
|
-- product_name: 全棉斜纹布
|
|||
|
|
-- color: 藏青
|
|||
|
|
-- fabric_code: QM-XW-280-01
|
|||
|
|
|
|||
|
|
-- 6.2 验证流程节点完成情况
|
|||
|
|
SELECT
|
|||
|
|
p.plan_code,
|
|||
|
|
COUNT(*) as total_steps,
|
|||
|
|
SUM(CASE WHEN ps.status = 'completed' THEN 1 ELSE 0 END) as completed_steps,
|
|||
|
|
ARRAY_AGG(ps.step_type || ':' || ps.status) as step_details
|
|||
|
|
FROM production_plans p
|
|||
|
|
LEFT JOIN plan_process_steps ps ON ps.plan_id = p.id
|
|||
|
|
WHERE p.plan_code = 'TEST-2026-001'
|
|||
|
|
GROUP BY p.plan_code;
|
|||
|
|
|
|||
|
|
-- 预期结果:
|
|||
|
|
-- total_steps: 5
|
|||
|
|
-- completed_steps: 5
|
|||
|
|
-- step_details: {confirm:completed, yarn_purchase:completed, dyeing:completed, machine_start:completed, fabric_warehouse:completed}
|
|||
|
|
|
|||
|
|
-- 6.3 验证入库记录汇总
|
|||
|
|
SELECT
|
|||
|
|
p.plan_code,
|
|||
|
|
COUNT(ir.id) as inventory_batches,
|
|||
|
|
COALESCE(SUM(ir.quantity), 0) as total_meters,
|
|||
|
|
COALESCE(SUM(ir.rolls), 0) as total_rolls,
|
|||
|
|
AVG(ir.price_per_meter) as avg_price
|
|||
|
|
FROM production_plans p
|
|||
|
|
LEFT JOIN inventory_records ir ON ir.plan_id = p.id
|
|||
|
|
WHERE p.plan_code = 'TEST-2026-001'
|
|||
|
|
GROUP BY p.plan_code;
|
|||
|
|
|
|||
|
|
-- 预期结果:
|
|||
|
|
-- inventory_batches: 3
|
|||
|
|
-- total_meters: 10000
|
|||
|
|
-- total_rolls: 98
|
|||
|
|
-- avg_price: 18.5
|
|||
|
|
|
|||
|
|
-- 6.4 验证数据一致性(completed_quantity = SUM(inventory_records.quantity))
|
|||
|
|
SELECT
|
|||
|
|
p.plan_code,
|
|||
|
|
p.completed_quantity,
|
|||
|
|
COALESCE(SUM(ir.quantity), 0) as inventory_total,
|
|||
|
|
CASE
|
|||
|
|
WHEN p.completed_quantity = COALESCE(SUM(ir.quantity), 0) THEN '✓ 一致'
|
|||
|
|
ELSE '✗ 不一致'
|
|||
|
|
END as consistency_check
|
|||
|
|
FROM production_plans p
|
|||
|
|
LEFT JOIN inventory_records ir ON ir.plan_id = p.id
|
|||
|
|
WHERE p.plan_code = 'TEST-2026-001'
|
|||
|
|
GROUP BY p.plan_code, p.completed_quantity;
|
|||
|
|
|
|||
|
|
-- 预期结果:consistency_check = '✓ 一致'
|
|||
|
|
|
|||
|
|
-- 6.5 验证分享链接状态
|
|||
|
|
SELECT
|
|||
|
|
sl.short_code,
|
|||
|
|
sl.status,
|
|||
|
|
sl.factory_type,
|
|||
|
|
sl.click_count,
|
|||
|
|
sl.used_at IS NOT NULL as is_used,
|
|||
|
|
sl.expires_at > NOW() as is_valid,
|
|||
|
|
c.name as creator_company
|
|||
|
|
FROM share_links sl
|
|||
|
|
LEFT JOIN profiles pr ON pr.id = sl.created_by
|
|||
|
|
LEFT JOIN companies c ON c.id = pr.company_id
|
|||
|
|
WHERE sl.short_code = 'TEST-SIM-001';
|
|||
|
|
|
|||
|
|
-- 预期结果:
|
|||
|
|
-- status: confirmed
|
|||
|
|
-- is_used: true
|
|||
|
|
-- is_valid: false (已使用)
|
|||
|
|
|
|||
|
|
-- 6.6 验证合作关系建立
|
|||
|
|
SELECT
|
|||
|
|
cr.status,
|
|||
|
|
cr.factory_type,
|
|||
|
|
pc.name as purchaser_company,
|
|||
|
|
fc.name as factory_company,
|
|||
|
|
cr.created_at
|
|||
|
|
FROM company_relationships cr
|
|||
|
|
LEFT JOIN companies pc ON pc.id = cr.purchaser_company_id
|
|||
|
|
LEFT JOIN companies fc ON fc.id = cr.factory_company_id
|
|||
|
|
WHERE cr.purchaser_company_id = '11111111-1111-1111-1111-111111111101'
|
|||
|
|
AND cr.factory_company_id = '11111111-1111-1111-1111-111111111102';
|
|||
|
|
|
|||
|
|
-- 预期结果:
|
|||
|
|
-- status: active
|
|||
|
|
-- factory_type: textile
|
|||
|
|
|
|||
|
|
-- 6.7 验证工厂关联
|
|||
|
|
SELECT
|
|||
|
|
pf.factory_type,
|
|||
|
|
c.name as factory_name,
|
|||
|
|
pf.created_at
|
|||
|
|
FROM plan_factories pf
|
|||
|
|
LEFT JOIN companies c ON c.id = pf.factory_id
|
|||
|
|
LEFT JOIN production_plans p ON p.id = pf.plan_id
|
|||
|
|
WHERE p.plan_code = 'TEST-2026-001';
|
|||
|
|
|
|||
|
|
-- 预期结果:
|
|||
|
|
-- factory_type: textile
|
|||
|
|
-- factory_name: 示例纺织厂
|
|||
|
|
|
|||
|
|
-- 6.8 综合验证报告
|
|||
|
|
SELECT
|
|||
|
|
'=== 全流程模拟测试验证报告 ===' as section,
|
|||
|
|
'' as detail
|
|||
|
|
UNION ALL
|
|||
|
|
SELECT
|
|||
|
|
'计划编号: ' || p.plan_code,
|
|||
|
|
'状态: ' || p.status
|
|||
|
|
FROM production_plans p WHERE p.plan_code = 'TEST-2026-001'
|
|||
|
|
UNION ALL
|
|||
|
|
SELECT
|
|||
|
|
'目标产量: ' || p.target_quantity || ' 米',
|
|||
|
|
'完成产量: ' || p.completed_quantity || ' 米'
|
|||
|
|
FROM production_plans p WHERE p.plan_code = 'TEST-2026-001'
|
|||
|
|
UNION ALL
|
|||
|
|
SELECT
|
|||
|
|
'入库批次: ' || COUNT(ir.id),
|
|||
|
|
'总入库量: ' || COALESCE(SUM(ir.quantity), 0) || ' 米'
|
|||
|
|
FROM production_plans p
|
|||
|
|
LEFT JOIN inventory_records ir ON ir.plan_id = p.id
|
|||
|
|
WHERE p.plan_code = 'TEST-2026-001'
|
|||
|
|
UNION ALL
|
|||
|
|
SELECT
|
|||
|
|
'流程节点: ' || COUNT(ps.id),
|
|||
|
|
'已完成: ' || SUM(CASE WHEN ps.status = 'completed' THEN 1 ELSE 0 END)
|
|||
|
|
FROM production_plans p
|
|||
|
|
LEFT JOIN plan_process_steps ps ON ps.plan_id = p.id
|
|||
|
|
WHERE p.plan_code = 'TEST-2026-001'
|
|||
|
|
UNION ALL
|
|||
|
|
SELECT
|
|||
|
|
'数据一致性: ' ||
|
|||
|
|
CASE
|
|||
|
|
WHEN p.completed_quantity = COALESCE((SELECT SUM(quantity) FROM inventory_records WHERE plan_id = p.id), 0)
|
|||
|
|
THEN '✓ 通过'
|
|||
|
|
ELSE '✗ 失败'
|
|||
|
|
END,
|
|||
|
|
''
|
|||
|
|
FROM production_plans p WHERE p.plan_code = 'TEST-2026-001';
|
|||
|
|
|
|||
|
|
-- ============================================================================
|
|||
|
|
-- 阶段七:清理测试数据(可选)
|
|||
|
|
-- ============================================================================
|
|||
|
|
|
|||
|
|
-- 7.1 清理测试计划及相关数据
|
|||
|
|
-- DELETE FROM inventory_records WHERE plan_id IN (SELECT id FROM production_plans WHERE plan_code = 'TEST-2026-001');
|
|||
|
|
-- DELETE FROM plan_process_steps WHERE plan_id IN (SELECT id FROM production_plans WHERE plan_code = 'TEST-2026-001');
|
|||
|
|
-- DELETE FROM yarn_ratios WHERE plan_id IN (SELECT id FROM production_plans WHERE plan_code = 'TEST-2026-001');
|
|||
|
|
-- DELETE FROM plan_factories WHERE plan_id IN (SELECT id FROM production_plans WHERE plan_code = 'TEST-2026-001');
|
|||
|
|
-- DELETE FROM share_links WHERE short_code = 'TEST-SIM-001';
|
|||
|
|
-- DELETE FROM production_plans WHERE plan_code = 'TEST-2026-001';
|
|||
|
|
-- DELETE FROM products WHERE fabric_code = 'QM-XW-280-01' AND company_id = '11111111-1111-1111-1111-111111111101';
|
|||
|
|
-- DELETE FROM company_relationships WHERE purchaser_company_id = '11111111-1111-1111-1111-111111111101' AND factory_company_id = '11111111-1111-1111-1111-111111111102';
|
|||
|
|
|
|||
|
|
-- ============================================================================
|
|||
|
|
-- 结束
|
|||
|
|
-- ============================================================================
|