| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- -- 人员从业资格证拆分:cert_name 重命名(可重复执行)
- -- 前置 spec: docs/superpowers/specs/2026-07-13-pl-personnel-cert-split-design.md
- -- 1) 押运员证 → 押运员从业资格证(全部 personnel 证书)
- UPDATE pl_cert c
- INNER JOIN pl_personnel p ON p.id = c.owner_id AND p.del_flag = 0
- SET c.cert_name = '押运员从业资格证',
- c.update_time = NOW()
- WHERE c.del_flag = 0
- AND c.owner_type = 'personnel'
- AND c.cert_name = '押运员证';
- -- 2) 泛称从业资格证 → 驾驶员从业资格证(driver / both)
- UPDATE pl_cert c
- INNER JOIN pl_personnel p ON p.id = c.owner_id AND p.del_flag = 0
- SET c.cert_name = '驾驶员从业资格证',
- c.update_time = NOW()
- WHERE c.del_flag = 0
- AND c.owner_type = 'personnel'
- AND c.cert_name = '从业资格证'
- AND p.personnel_type IN ('driver', 'both');
- -- 3) 泛称从业资格证 → 押运员从业资格证(escort)
- UPDATE pl_cert c
- INNER JOIN pl_personnel p ON p.id = c.owner_id AND p.del_flag = 0
- SET c.cert_name = '押运员从业资格证',
- c.update_time = NOW()
- WHERE c.del_flag = 0
- AND c.owner_type = 'personnel'
- AND c.cert_name = '从业资格证'
- AND p.personnel_type = 'escort';
- -- 4) both 人员:若迁移后仍缺驾/押任一从业证,供运营补录(验证查询,不修改数据)
- SELECT
- p.id AS personnel_id,
- p.personnel_name,
- p.personnel_type,
- GROUP_CONCAT(c.cert_name ORDER BY c.cert_name SEPARATOR '、') AS cert_names
- FROM pl_personnel p
- LEFT JOIN pl_cert c
- ON c.owner_id = p.id
- AND c.owner_type = 'personnel'
- AND c.del_flag = 0
- WHERE p.del_flag = 0
- AND p.personnel_type = 'both'
- GROUP BY p.id, p.personnel_name, p.personnel_type
- HAVING SUM(CASE WHEN c.cert_name IN ('驾驶员从业资格证') THEN 1 ELSE 0 END) = 0
- OR SUM(CASE WHEN c.cert_name IN ('押运员从业资格证', '押运员证') THEN 1 ELSE 0 END) = 0;
- -- 5) 危化品从业资格证:不自动迁移(人工清单)
- SELECT
- p.id AS personnel_id,
- p.personnel_name,
- p.personnel_type,
- c.id AS cert_id,
- c.cert_name
- FROM pl_cert c
- INNER JOIN pl_personnel p ON p.id = c.owner_id AND p.del_flag = 0
- WHERE c.del_flag = 0
- AND c.owner_type = 'personnel'
- AND c.cert_name = '危化品从业资格证';
- -- 6) both + 仍保留泛称「从业资格证」的歧义记录(需人工处理,不自动改)
- SELECT
- p.id AS personnel_id,
- p.personnel_name,
- c.id AS cert_id,
- c.cert_name
- FROM pl_cert c
- INNER JOIN pl_personnel p ON p.id = c.owner_id AND p.del_flag = 0
- WHERE c.del_flag = 0
- AND c.owner_type = 'personnel'
- AND c.cert_name = '从业资格证'
- AND p.personnel_type = 'both';
- -- 7) 字典 pl_cert_name 增量(可选,可重复执行)
- INSERT INTO sys_dict_data (id, dict_label, dict_value, tag_type, dict_type, tenant_no, order_num, del_flag, create_time, update_time)
- SELECT 'PL_CERT_DRIVER_QUAL', '驾驶员从业资格证', '驾驶员从业资格证', 'primary', 'pl_cert_name', 'shanxia2.0', 6, 0, NOW(), NOW()
- FROM DUAL
- WHERE NOT EXISTS (SELECT 1 FROM sys_dict_data WHERE id = 'PL_CERT_DRIVER_QUAL');
- INSERT INTO sys_dict_data (id, dict_label, dict_value, tag_type, dict_type, tenant_no, order_num, del_flag, create_time, update_time)
- SELECT 'PL_CERT_ESCORT_QUAL', '押运员从业资格证', '押运员从业资格证', 'warning', 'pl_cert_name', 'shanxia2.0', 7, 0, NOW(), NOW()
- FROM DUAL
- WHERE NOT EXISTS (SELECT 1 FROM sys_dict_data WHERE id = 'PL_CERT_ESCORT_QUAL');
|