Revert "feat: 空镜素材分类&数据入库"

This reverts commit 91e5cdefbb.
This commit is contained in:
小鱼开发
2026-05-15 15:45:55 +08:00
parent 91e5cdefbb
commit 17455b405c
7 changed files with 7 additions and 8509 deletions
-739
View File
@@ -1,739 +0,0 @@
-- ========================================================
-- 空镜素材分类 Seed 数据
-- 生成时间: 2026-05-14
-- 分类数: 9 一级 + 27 二级 + 182 三级 = 218 条
-- 方案: 一级/二级=完整拼音, 三级=首字母缩写
-- ========================================================
BEGIN;
-- 清空现有分类(可选,首次执行可注释掉)
-- TRUNCATE TABLE broll_categories RESTART IDENTITY CASCADE;
-- === 网红开篇 ===
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('wanghong', '网红开篇', NULL, 1, 0, 'active', NOW(), NOW())
RETURNING id;
-- 网红开篇 / 恶搞开篇
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('wanghong-egao', '恶搞开篇', 1, 2, 1, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('wanghong-egao-xjhm', '吸睛画面-恶搞开篇', 2, 3, 1, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('wanghong-egao-gdeg', '工地恶搞-恶搞开篇', 2, 3, 2, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('wanghong-egao-gxtlsg', '搞笑涂料施工-恶搞开篇', 2, 3, 3, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('wanghong-egao-blcc', '暴力拆除-恶搞开篇', 2, 3, 4, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('wanghong-egao-xj', '炫技-恶搞开篇', 2, 3, 5, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('wanghong-egao-tzeg', '贴砖恶搞-恶搞开篇', 2, 3, 6, 'active', NOW(), NOW())
RETURNING id;
-- 网红开篇 / 施工翻车镜
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('wanghong-fanche', '施工翻车镜', 1, 2, 2, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('wanghong-fanche-qtdl', '墙体掉落-施工翻车镜', 9, 3, 1, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('wanghong-fanche-qmkl', '墙面开裂-施工翻车镜', 9, 3, 2, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('wanghong-fanche-qmkg', '墙面空鼓-施工翻车镜', 9, 3, 3, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('wanghong-fanche-sgcw', '水管错位-施工翻车镜', 9, 3, 4, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('wanghong-fanche-dxlj', '电线乱接-施工翻车镜', 9, 3, 5, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('wanghong-fanche-fsfcls', '防水翻车漏水-施工翻车镜', 9, 3, 6, 'active', NOW(), NOW())
RETURNING id;
-- === 前期准备类 ===
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('zhunbei', '前期准备类', NULL, 1, 10, 'active', NOW(), NOW())
RETURNING id;
-- 前期准备类 / 合同签署镜
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('zhunbei-hetong', '合同签署镜', 16, 2, 1, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('zhunbei-hetong-htqs', '合同签署', 17, 3, 1, 'active', NOW(), NOW())
RETURNING id;
-- 前期准备类 / 量房勘测镜
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('zhunbei-liangfang', '量房勘测镜', 16, 2, 2, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('zhunbei-liangfang-jcsccc', '卷尺实测尺寸-量房勘测', 19, 3, 1, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('zhunbei-liangfang-shhxct', '手绘户型草图-量房勘测', 19, 3, 2, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('zhunbei-liangfang-jgspycl', '激光水平仪测量-量房勘测', 19, 3, 3, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('zhunbei-liangfang-dnhxtzz', '电脑户型图制作-量房勘测', 19, 3, 4, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('zhunbei-liangfang-sjsrh', '设计师入户-量房勘测', 19, 3, 5, 'active', NOW(), NOW())
RETURNING id;
-- 前期准备类 / 毛坯基础镜
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('zhunbei-maopi', '毛坯基础镜', 16, 2, 3, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('zhunbei-maopi-wsysjg', '卧室原始结构-毛坯基础', 25, 3, 1, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('zhunbei-maopi-ysmcym', '原始门窗原貌-毛坯基础', 25, 3, 2, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('zhunbei-maopi-cwysmpzt', '厨卫原始毛坯状态-毛坯基础', 25, 3, 3, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('zhunbei-maopi-dmyssnjc', '地面原始水泥基层-毛坯基础', 25, 3, 4, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('zhunbei-maopi-ktysqm', '客厅原始墙面-毛坯基础', 25, 3, 5, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('zhunbei-maopi-qrdxystx', '强弱电箱原始特写-毛坯基础', 25, 3, 6, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('zhunbei-maopi-mpqwgjqj', '毛坯全屋广角全景-毛坯基础', 25, 3, 7, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('zhunbei-maopi-ytysjgkj', '阳台原始结构空镜-毛坯基础', 25, 3, 8, 'active', NOW(), NOW())
RETURNING id;
-- 前期准备类 / 翻新基础镜
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('zhunbei-fanxin', '翻新基础镜', 16, 2, 4, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('zhunbei-fanxin-wsyszt', '卧室原始状态-翻新基础', 34, 3, 1, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('zhunbei-fanxin-cwyszt', '厨卫原始状态-翻新基础', 34, 3, 2, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('zhunbei-fanxin-ktyszt', '客厅原始状态-翻新基础', 34, 3, 3, 'active', NOW(), NOW())
RETURNING id;
-- 前期准备类 / 现场交底镜
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('zhunbei-jiaodi', '现场交底镜', 16, 2, 5, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('zhunbei-jiaodi-qmdwdx', '墙面点位弹线-现场交底', 38, 3, 1, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('zhunbei-jiaodi-kgczdw', '开关插座定位-现场交底', 38, 3, 2, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('zhunbei-jiaodi-kgysjdjt', '开工仪式简单镜头-现场交底', 38, 3, 3, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('zhunbei-jiaodi-sgfaxcjj', '施工方案现场讲解-现场交底', 38, 3, 4, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('zhunbei-jiaodi-jygzsfdj', '甲乙工长三方对接-现场交底', 38, 3, 5, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('zhunbei-jiaodi-gpsdwbj', '给排水点位标记-现场交底', 38, 3, 6, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('zhunbei-jiaodi-zxhthd', '装修合同核对-现场交底', 38, 3, 7, 'active', NOW(), NOW())
RETURNING id;
-- === 拆改改造类 ===
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('chaigai', '拆改改造类', NULL, 1, 20, 'active', NOW(), NOW())
RETURNING id;
-- 拆改改造类 / 墙体拆除镜
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('chaigai-chaiqiang', '墙体拆除镜', 46, 2, 1, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('chaigai-chaiqiang-qgjsgtx', '切割机施工特写-墙体拆除', 47, 3, 1, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('chaigai-chaiqiang-dbcc', '地板拆除-墙体拆除', 47, 3, 2, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('chaigai-chaiqiang-qtcc', '墙体拆除-墙体拆除', 47, 3, 3, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('chaigai-chaiqiang-qmbccc', '墙面表层铲除-墙体拆除', 47, 3, 4, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('chaigai-chaiqiang-jbqttzxb', '局部墙体剔凿修补-墙体拆除', 47, 3, 5, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('chaigai-chaiqiang-jzljssdl', '建筑垃圾实时掉落-墙体拆除', 47, 3, 6, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('chaigai-chaiqiang-cghxcqm', '拆改后现场全貌-墙体拆除', 47, 3, 7, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('chaigai-chaiqiang-gzcc', '柜子拆除-墙体拆除', 47, 3, 8, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('chaigai-chaiqiang-mdkkqg', '门洞扩宽切割-墙体拆除', 47, 3, 9, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('chaigai-chaiqiang-fqtcc', '非墙体拆除-墙体拆除', 47, 3, 10, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('chaigai-chaiqiang-pcccgz', '飘窗拆除改造-墙体拆除', 47, 3, 11, 'active', NOW(), NOW())
RETURNING id;
-- 拆改改造类 / 工地清运镜
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('chaigai-qingyun', '工地清运镜', 46, 2, 2, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('chaigai-qingyun-gdzwqszl', '工地杂物清扫整理-工地清运', 59, 3, 1, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('chaigai-qingyun-sgdmqscc', '施工地面清扫除尘-工地清运', 59, 3, 2, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('chaigai-qingyun-dzljbycc', '袋装垃圾搬运出场-工地清运', 59, 3, 3, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('chaigai-qingyun-zxljjzdf', '装修垃圾集中堆放-工地清运', 59, 3, 4, 'active', NOW(), NOW())
RETURNING id;
-- 拆改改造类 / 新建砌筑镜
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('chaigai-zhuqi', '新建砌筑镜', 46, 2, 3, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('chaigai-zhuqi-xqhzcfqz', '新墙红砖错缝砌筑-新建砌筑', 64, 3, 1, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('chaigai-zhuqi-xjqtczzp', '新建墙体垂直找平-新建砌筑', 64, 3, 2, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('chaigai-zhuqi-xjqtljjsg', '新旧墙体拉结筋施工-新建砌筑', 64, 3, 3, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('chaigai-zhuqi-snsjjb', '水泥砂浆搅拌-新建砌筑', 64, 3, 4, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('chaigai-zhuqi-qqwgztzs', '砌墙完工整体展示-新建砌筑', 64, 3, 5, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('chaigai-zhuqi-hzxcmf', '红砖现场码放-新建砌筑', 64, 3, 6, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('chaigai-zhuqi-qtzgddj', '轻体砖隔断搭建-新建砌筑', 64, 3, 7, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('chaigai-zhuqi-mtglazgd', '门头过梁安装固定-新建砌筑', 64, 3, 8, 'active', NOW(), NOW())
RETURNING id;
-- === 水电隐蔽类 ===
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('shuidian', '水电隐蔽类', NULL, 1, 30, 'active', NOW(), NOW())
RETURNING id;
-- 水电隐蔽类 / 水路施工镜
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('shuidian-shuilu', '水路施工镜', 73, 2, 1, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('shuidian-shuilu-xsgdgztz', '下水管道改造调整-水路施工', 74, 3, 1, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('shuidian-shuilu-wsjlrsgpb', '卫生间冷热水管排布-水路施工', 74, 3, 2, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('shuidian-shuilu-cwdlywck', '厨卫地漏原位查看-水路施工', 74, 3, 3, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('shuidian-shuilu-cfsgzdps', '厨房水管走顶铺设-水路施工', 74, 3, 4, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('shuidian-shuilu-xgsmtsg', '悬挂式马桶施工-水路施工', 74, 3, 5, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('shuidian-shuilu-sgbwmbgfh', '水管保温棉包裹防护-水路施工', 74, 3, 6, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('shuidian-shuilu-sgkkgdgy', '水管卡扣固定工艺-水路施工', 74, 3, 7, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('shuidian-shuilu-sgdj', '水管对接-水路施工', 74, 3, 8, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('shuidian-shuilu-sgps', '水管铺设-水路施工', 74, 3, 9, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('shuidian-shuilu-rsqglyldj', '热水器管路预留对接-水路施工', 74, 3, 10, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('shuidian-shuilu-ytxysgdw', '阳台洗衣水管定位-水路施工', 74, 3, 11, 'active', NOW(), NOW())
RETURNING id;
-- 水电隐蔽类 / 电路施工镜
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('shuidian-dianlu', '电路施工镜', 73, 2, 2, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('shuidian-dianlu-zyktzg', '中央空调装管-电路施工', 86, 3, 1, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('shuidian-dianlu-dddxylzx', '吊顶灯线预留走线-电路施工', 86, 3, 2, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('shuidian-dianlu-dmxgkccl', '地面线管开槽处理-电路施工', 86, 3, 3, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('shuidian-dianlu-qmxckcsg', '墙面线槽开槽施工-电路施工', 86, 3, 4, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('shuidian-dianlu-dhndxzl', '底盒内电线整理-电路施工', 86, 3, 5, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('shuidian-dianlu-dhahymaz', '底盒暗盒预埋安装-电路施工', 86, 3, 6, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('shuidian-dianlu-rdwxddpb', '弱电网线单独排布-电路施工', 86, 3, 7, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('shuidian-dianlu-qrdxhfgrxbzpbm', '强弱电信号防干扰锡箔纸屏蔽膜-电路施工', 86, 3, 8, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('shuidian-dianlu-qrdgfcps', '强弱电管分槽铺设-电路施工', 86, 3, 9, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('shuidian-dianlu-dgdj', '电管对接-电路施工', 86, 3, 10, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('shuidian-dianlu-dgps', '电管铺设-电路施工', 86, 3, 11, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('shuidian-dianlu-dxnbxlzl', '电箱内部线路整理-电路施工', 86, 3, 12, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('shuidian-dianlu-dxcgbxtx', '电线穿管布线特写-电路施工', 86, 3, 13, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('shuidian-dianlu-zxcldf', '装修材料堆放-电路施工', 86, 3, 14, 'active', NOW(), NOW())
RETURNING id;
-- 水电隐蔽类 / 水电验收镜
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('shuidian-yanshou', '水电验收镜', 73, 2, 3, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('shuidian-yanshou-qrdjjcy', '强弱电间距查验-水电验收', 101, 3, 1, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('shuidian-yanshou-sdwgqwhs', '水电完工全屋环视-水电验收', 101, 3, 2, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('shuidian-yanshou-sgdycscz', '水管打压测试操作-水电验收', 101, 3, 3, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('shuidian-yanshou-gxzxpzlc', '管线走向拍照留存-水电验收', 101, 3, 4, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('shuidian-yanshou-xltdjcjc', '线路通电检测检查-水电验收', 101, 3, 5, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('shuidian-yanshou-ybgcxgfg', '隐蔽工程线管覆盖-水电验收', 101, 3, 6, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('shuidian-yanshou-ybgcxjxj', '隐蔽工程细节巡检-水电验收', 101, 3, 7, 'active', NOW(), NOW())
RETURNING id;
-- === 泥瓦工艺类 ===
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('niwa', '泥瓦工艺类', NULL, 1, 40, 'active', NOW(), NOW())
RETURNING id;
-- 泥瓦工艺类 / 包管找平镜
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('niwa-baoguan', '包管找平镜', 109, 2, 1, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('niwa-baoguan-cwxsgdbg', '厨卫下水管道包裹-包管找平', 110, 3, 1, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('niwa-baoguan-dmzlpsgcl', '地面自流平施工处理-包管找平', 110, 3, 2, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('niwa-baoguan-qmqwsnsjzp', '墙面全屋水泥砂浆找平-包管找平', 110, 3, 3, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('niwa-baoguan-gdgymjz', '管道隔音棉加装-包管找平', 110, 3, 4, 'active', NOW(), NOW())
RETURNING id;
-- 泥瓦工艺类 / 瓷砖铺贴镜
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('niwa-cizhuan', '瓷砖铺贴镜', 109, 2, 2, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('niwa-cizhuan-xskczpt', '下水口瓷砖铺贴-瓷砖铺贴', 115, 3, 1, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('niwa-cizhuan-cwqdtfpt', '厨卫墙地通缝铺贴-瓷砖铺贴', 115, 3, 2, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('niwa-cizhuan-dzgpsggy', '地砖干铺施工工艺-瓷砖铺贴', 115, 3, 3, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('niwa-cizhuan-qzdw', '墙砖定位-瓷砖铺贴', 115, 3, 4, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('niwa-cizhuan-qmlmjgcl', '墙面拉毛加固处理-瓷砖铺贴', 115, 3, 5, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('niwa-cizhuan-znfaz', '止逆阀安装-瓷砖铺贴', 115, 3, 6, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('niwa-cizhuan-sz', '沙子-瓷砖铺贴', 115, 3, 7, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('niwa-cizhuan-czwgzs', '瓷砖完工展示-瓷砖铺贴', 115, 3, 8, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('niwa-cizhuan-czkk', '瓷砖开孔-瓷砖铺贴', 115, 3, 9, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('niwa-cizhuan-czzpqdpgd', '瓷砖找平器调平固定-瓷砖铺贴', 115, 3, 10, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('niwa-cizhuan-czpsycl', '瓷砖泡水预处理-瓷砖铺贴', 115, 3, 11, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('niwa-cizhuan-zmwkdw', '砖面挖孔定位-瓷砖铺贴', 115, 3, 12, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('niwa-cizhuan-ctsmksaz', '窗台石门槛石安装-瓷砖铺贴', 115, 3, 13, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('niwa-cizhuan-tqz', '贴墙砖-瓷砖铺贴', 115, 3, 14, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('niwa-cizhuan-pdz', '铺地砖-瓷砖铺贴', 115, 3, 15, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('niwa-cizhuan-ptwccpbh', '铺贴完成成品保护-瓷砖铺贴', 115, 3, 16, 'active', NOW(), NOW())
RETURNING id;
-- 泥瓦工艺类 / 防水施工镜
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('niwa-fangshui', '防水施工镜', 109, 2, 3, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('niwa-fangshui-wsjjcql', '卫生间基层清理-防水施工', 132, 3, 1, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('niwa-fangshui-cwbssyxs', '厨卫闭水试验蓄水-防水施工', 132, 3, 2, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('niwa-fangshui-qmdmfstlts', '墙面地面防水涂料涂刷-防水施工', 132, 3, 3, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('niwa-fangshui-qmfssfts', '墙面防水上翻涂刷-防水施工', 132, 3, 4, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('niwa-fangshui-lxsscyqr', '楼下渗水查验确认-防水施工', 132, 3, 5, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('niwa-fangshui-ggyhjgcl', '管根圆弧加固处理-防水施工', 132, 3, 6, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('niwa-fangshui-fstcwgtx', '防水涂层完工特写-防水施工', 132, 3, 7, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('niwa-fangshui-ythwfssg', '阳台户外防水施工-防水施工', 132, 3, 8, 'active', NOW(), NOW())
RETURNING id;
-- === 木工定制类 ===
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('mugong', '木工定制类', NULL, 1, 50, 'active', NOW(), NOW())
RETURNING id;
-- 木工定制类 / 吊顶造型镜
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('mugong-diaoding', '吊顶造型镜', 141, 2, 1, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('mugong-diaoding-zyktfkyl', '中央空调风口预留-吊顶造型', 142, 3, 1, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('mugong-diaoding-sypddfbsg', '双眼皮吊顶封板施工-吊顶造型', 142, 3, 2, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('mugong-diaoding-ddwgzs', '吊顶完工展示-吊顶造型', 142, 3, 3, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('mugong-diaoding-ddspdq', '吊顶水平对齐-吊顶造型', 142, 3, 4, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('mugong-diaoding-ddsgbpnz', '吊顶石膏板批腻子-吊顶造型', 142, 3, 5, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('mugong-diaoding-ddzjzbfl', '吊顶转角整板防裂-吊顶造型', 142, 3, 6, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('mugong-diaoding-ddzxcqjaz', '吊顶造型裁切及安装-吊顶造型', 142, 3, 7, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('mugong-diaoding-dddyfxqdt', '吊顶钉眼防锈漆点涂-吊顶造型', 142, 3, 8, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('mugong-diaoding-mlgjckjgd', '木龙骨基础框架固定-吊顶造型', 142, 3, 9, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('mugong-diaoding-sgbgd', '石膏板固定-吊顶造型', 142, 3, 10, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('mugong-diaoding-sgbkk', '石膏板开孔-吊顶造型', 142, 3, 11, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('mugong-diaoding-sgbcq', '石膏板裁切-吊顶造型', 142, 3, 12, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('mugong-diaoding-qglggjdj', '轻钢龙骨骨架搭建-吊顶造型', 142, 3, 13, 'active', NOW(), NOW())
RETURNING id;
-- 木工定制类 / 柜体木作镜
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('mugong-muti', '柜体木作镜', 141, 2, 2, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('mugong-muti-qwdzgtdd', '全屋定制柜体打底-柜体木作', 156, 3, 1, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('mugong-muti-mzfbtp', '木作封边贴皮-柜体木作', 156, 3, 2, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('mugong-muti-hbbcxcdf', '环保板材现场堆放-柜体木作', 156, 3, 3, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('mugong-muti-ytcwgjczz', '阳台储物柜基层制作-柜体木作', 156, 3, 4, 'active', NOW(), NOW())
RETURNING id;
-- 木工定制类 / 隔音防潮镜
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('mugong-gechao', '隔音防潮镜', 141, 2, 3, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('mugong-gechao-qmfcmpsfh', '墙面防潮膜铺设防护-隔音防潮', 161, 3, 1, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('mugong-gechao-qmgymtc', '墙面隔音棉填充-隔音防潮', 161, 3, 2, 'active', NOW(), NOW())
RETURNING id;
-- === 油漆墙面类 ===
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('youqi', '油漆墙面类', NULL, 1, 60, 'active', NOW(), NOW())
RETURNING id;
-- 油漆墙面类 / 墙面基层镜
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('youqi-jiceng', '墙面基层镜', 164, 2, 1, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('youqi-jiceng-qwqmccdb', '全屋墙面铲除大白-墙面基层', 165, 3, 1, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('youqi-jiceng-qwpgdybnz', '全屋批刮第一遍腻子-墙面基层', 165, 3, 2, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('youqi-jiceng-qgsg', '墙固施工-墙面基层', 165, 3, 3, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('youqi-jiceng-qmlfgwfl', '墙面裂缝挂网防裂-墙面基层', 165, 3, 4, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('youqi-jiceng-qmyyjzzcl', '墙面阴阳角找直处理-墙面基层', 165, 3, 5, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('youqi-jiceng-nzgtjxdm', '腻子干透精细打磨-墙面基层', 165, 3, 6, 'active', NOW(), NOW())
RETURNING id;
-- 油漆墙面类 / 成品保护镜
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('youqi-baohu', '成品保护镜', 164, 2, 2, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('youqi-baohu-dmdzdmbh', '地面地砖地膜保护-成品保护', 172, 3, 1, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('youqi-baohu-kgmbbhtm', '开关面板保护贴膜-成品保护', 172, 3, 2, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('youqi-baohu-gtcpbhbg', '柜体成品保护包裹-成品保护', 172, 3, 3, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('youqi-baohu-mcmtbgfh', '门窗门套包裹防护-成品保护', 172, 3, 4, 'active', NOW(), NOW())
RETURNING id;
-- 油漆墙面类 / 面漆涂刷镜
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('youqi-mianqi', '面漆涂刷镜', 164, 2, 3, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('youqi-mianqi-rjqxb', '乳胶漆修补-面漆涂刷', 177, 3, 1, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('youqi-mianqi-rjqxgzs', '乳胶漆效果展示-面漆涂刷', 177, 3, 2, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('youqi-mianqi-rjqdp', '乳胶漆调配-面漆涂刷', 177, 3, 3, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('youqi-mianqi-qmdqjyts', '墙面底漆均匀涂刷-面漆涂刷', 177, 3, 4, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('youqi-mianqi-qmcsmqts', '墙面纯色面漆涂刷-面漆涂刷', 177, 3, 5, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('youqi-mianqi-bjqysqsg', '背景墙艺术漆施工-面漆涂刷', 177, 3, 6, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('youqi-mianqi-mcbjjxst', '门窗边角精细刷涂-面漆涂刷', 177, 3, 7, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('youqi-mianqi-dmrjqgtsg', '顶面乳胶漆滚涂施工-面漆涂刷', 177, 3, 8, 'active', NOW(), NOW())
RETURNING id;
-- === 安装收尾类 ===
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('anzhuang', '安装收尾类', NULL, 1, 70, 'active', NOW(), NOW())
RETURNING id;
-- 安装收尾类 / 主材安装镜
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('anzhuang-zhucai', '主材安装镜', 186, 2, 1, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('anzhuang-zhucai-qwdbpssg', '全屋地板铺设施工-主材安装', 187, 3, 1, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('anzhuang-zhucai-qwkgmbaz', '全屋开关面板安装-主材安装', 187, 3, 2, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('anzhuang-zhucai-wyjjjcaz', '卫浴洁具进场安装-主材安装', 187, 3, 3, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('anzhuang-zhucai-cwjcddaz', '厨卫集成吊顶安装-主材安装', 187, 3, 4, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('anzhuang-zhucai-snfmazgd', '室内房门安装固定-主材安装', 187, 3, 5, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('anzhuang-zhucai-cggtxczz', '橱柜柜体现场组装-主材安装', 187, 3, 6, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('anzhuang-zhucai-djtdsdaz', '灯具筒灯射灯安装-主材安装', 187, 3, 7, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('anzhuang-zhucai-ygymwjaz', '衣柜移门五金安装-主材安装', 187, 3, 8, 'active', NOW(), NOW())
RETURNING id;
-- 安装收尾类 / 收尾细节镜
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('anzhuang-shouwei', '收尾细节镜', 186, 2, 2, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('anzhuang-shouwei-qwwjts', '全屋五金调试-收尾细节', 196, 3, 1, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('anzhuang-shouwei-cpxcxb', '成品瑕疵修补-收尾细节', 196, 3, 2, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('anzhuang-shouwei-gtmftz', '柜体门缝调整-收尾细节', 196, 3, 3, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('anzhuang-shouwei-mcfxmfcl', '门窗缝隙密封处理-收尾细节', 196, 3, 4, 'active', NOW(), NOW())
RETURNING id;
-- 安装收尾类 / 美缝开荒镜
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('anzhuang-meifeng', '美缝开荒镜', 186, 2, 3, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('anzhuang-meifeng-qwjckhbj', '全屋基础开荒保洁-美缝开荒', 201, 3, 1, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('anzhuang-meifeng-dmcljjql', '地面残留胶迹清理-美缝开荒', 201, 3, 2, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('anzhuang-meifeng-smfj', '撕美缝胶-美缝开荒', 201, 3, 3, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('anzhuang-meifeng-bljsbdjxj', '玻璃胶收边打胶细节-美缝开荒', 201, 3, 4, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('anzhuang-meifeng-czfxqlqh', '瓷砖缝隙清理清灰-美缝开荒', 201, 3, 5, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('anzhuang-meifeng-mfkf', '美缝扩缝-美缝开荒', 201, 3, 6, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('anzhuang-meifeng-mfsg', '美缝施工-美缝开荒', 201, 3, 7, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('anzhuang-meifeng-mfjc', '美缝检查-美缝开荒', 201, 3, 8, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('anzhuang-meifeng-mcblqj', '门窗玻璃清洁-美缝开荒', 201, 3, 9, 'active', NOW(), NOW())
RETURNING id;
-- === 软装完工&验收类 ===
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('ruanzhuang', '软装完工&验收类', NULL, 1, 80, 'active', NOW(), NOW())
RETURNING id;
-- 软装完工&验收类 / 全屋验收镜
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('ruanzhuang-quanyan', '全屋验收镜', 211, 2, 1, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('ruanzhuang-quanyan-qmqmxjcy', '墙面漆面细节查验-全屋验收', 212, 3, 1, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('ruanzhuang-quanyan-gtkhscdjc', '柜体开合顺畅度检查-全屋验收', 212, 3, 2, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('ruanzhuang-quanyan-tjxazys', '踢脚线安装验收-软装进场', 212, 3, 3, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('ruanzhuang-quanyan-yshgqzqr', '验收合格签字确认-全屋验收', 212, 3, 4, 'active', NOW(), NOW())
RETURNING id;
-- 软装完工&验收类 / 软装进场镜
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('ruanzhuang-ruanchang', '软装进场镜', 211, 2, 2, 'active', NOW(), NOW())
RETURNING id;
INSERT INTO broll_categories (slug, name, parent_id, level, sort_order, status, created_at, updated_at)
VALUES ('ruanzhuang-ruanchang-clgdclaz', '窗帘轨道窗帘安装-软装进场', 217, 3, 1, 'active', NOW(), NOW())
RETURNING id;
COMMIT;
-235
View File
@@ -1,235 +0,0 @@
#!/usr/bin/env python3
"""
空镜素材批量入库脚本
====================
扫描本地素材目录,用 ffprobe 探测时长,生成 INSERT SQL。
用法:
cd python-api
python scripts/seed_materials.py
输出:
scripts/seed_materials.sql
"""
import json
import os
import subprocess
from collections import OrderedDict
from concurrent.futures import ProcessPoolExecutor, as_completed
from pathlib import Path
from pypinyin import lazy_pinyin
# ========== 配置 ==========
# 素材根目录
MATERIALS_DIR = "/Users/0fun/Downloads/装修素材空镜库"
# 七牛云 CDN 前缀
CDN_PREFIX = "https://media.liche.cn/meijiaka-zy/materials"
# 输出 SQL 文件
OUTPUT_SQL = Path(__file__).parent / "seed_materials.sql"
# 中间结果缓存(避免重复探测)
CACHE_FILE = Path(__file__).parent / ".seed_materials_cache.json"
# 并发进程数
MAX_WORKERS = 8
# 分类拼音映射(和 seed_categories.sql 保持一致)
LV1_PINYIN = {
'前期准备类': 'zhunbei',
'拆改改造类': 'chaigai',
'水电隐蔽类': 'shuidian',
'泥瓦工艺类': 'niwa',
'木工定制类': 'mugong',
'油漆墙面类': 'youqi',
'安装收尾类': 'anzhuang',
'软装完工&验收类': 'ruanzhuang',
'网红开篇': 'wanghong',
}
LV2_PINYIN = {
'合同签署镜': 'hetong', '毛坯基础镜': 'maopi', '现场交底镜': 'jiaodi',
'翻新基础镜': 'fanxin', '量房勘测镜': 'liangfang', '墙体拆除镜': 'chaiqiang',
'工地清运镜': 'qingyun', '新建砌筑镜': 'zhuqi', '吊顶造型镜': 'diaoding',
'柜体木作镜': 'muti', '隔音防潮镜': 'gechao', '水电验收镜': 'yanshou',
'水路施工镜': 'shuilu', '电路施工镜': 'dianlu', '墙面基层镜': 'jiceng',
'成品保护镜': 'baohu', '面漆涂刷镜': 'mianqi', '包管找平镜': 'baoguan',
'瓷砖铺贴镜': 'cizhuan', '防水施工镜': 'fangshui', '主材安装镜': 'zhucai',
'收尾细节镜': 'shouwei', '美缝开荒镜': 'meifeng', '全屋验收镜': 'quanyan',
'软装进场镜': 'ruanchang', '恶搞开篇': 'egao', '施工翻车镜': 'fanche',
}
def initial_slug(text: str) -> str:
"""生成场景描述的首字母缩写"""
if '-' in text:
text = text.split('-')[0]
py = lazy_pinyin(text)
initials = [p[0] for p in py if p]
return ''.join(initials).lower()
def get_category_slug(lv1: str, lv2: str, lv3: str) -> str:
"""根据分类生成三级 slug"""
return f"{LV1_PINYIN[lv1]}-{LV2_PINYIN[lv2]}-{initial_slug(lv3)}"
def probe_duration(filepath: str) -> float:
"""用 ffprobe 探测视频时长(秒)"""
try:
result = subprocess.run(
["ffprobe", "-i", filepath, "-show_entries", "format=duration", "-v", "quiet", "-of", "csv=p=0"],
capture_output=True,
text=True,
timeout=10,
)
if result.returncode == 0 and result.stdout.strip():
return round(float(result.stdout.strip()), 2)
except Exception:
pass
# fallback: 用 grep 解析
try:
result = subprocess.run(
["ffprobe", "-i", filepath],
capture_output=True,
text=True,
timeout=10,
)
for line in result.stderr.splitlines():
if "Duration:" in line:
# Duration: 00:00:08.03, start: ...
parts = line.split("Duration:")[1].split(",")[0].strip()
h, m, s = parts.split(":")
return round(float(h) * 3600 + float(m) * 60 + float(s), 2)
except Exception:
pass
return 0.0
def scan_files() -> list[dict]:
"""扫描素材目录,收集文件信息"""
files = []
base = Path(MATERIALS_DIR)
for lv1 in sorted(os.listdir(base)):
lv1_path = base / lv1
if not lv1_path.is_dir() or lv1.startswith("."):
continue
for lv2 in sorted(os.listdir(lv1_path)):
lv2_path = lv1_path / lv2
if not lv2_path.is_dir() or lv2.startswith("."):
continue
for lv3 in sorted(os.listdir(lv2_path)):
lv3_path = lv2_path / lv3
if not lv3_path.is_dir() or lv3.startswith("."):
continue
for mp4 in sorted(os.listdir(lv3_path)):
if not mp4.endswith(".mp4"):
continue
filepath = lv3_path / mp4
files.append({
"lv1": lv1,
"lv2": lv2,
"lv3": lv3,
"filename": mp4,
"filepath": str(filepath),
"category_slug": get_category_slug(lv1, lv2, lv3),
"url": f"{CDN_PREFIX}/{mp4}",
})
return files
def main():
print("=" * 60)
print("空镜素材批量入库脚本")
print("=" * 60)
# 1. 扫描文件
print("\n[1/4] 扫描素材目录...")
files = scan_files()
print(f" 发现 {len(files)} 个 MP4 文件")
# 2. 加载缓存
cache = {}
if CACHE_FILE.exists():
with open(CACHE_FILE, "r", encoding="utf-8") as f:
cache = json.load(f)
print(f" 加载缓存: {len(cache)}")
# 3. 探测时长(多进程)
print(f"\n[2/4] 探测视频时长({MAX_WORKERS} 进程)...")
to_probe = [f for f in files if f["filepath"] not in cache]
print(f" 待探测: {len(to_probe)} 个,已缓存: {len(cache)}")
if to_probe:
completed = 0
with ProcessPoolExecutor(max_workers=MAX_WORKERS) as executor:
futures = {executor.submit(probe_duration, f["filepath"]): f for f in to_probe}
for future in as_completed(futures):
f = futures[future]
try:
duration = future.result()
except Exception:
duration = 0.0
cache[f["filepath"]] = duration
f["duration"] = duration
completed += 1
if completed % 100 == 0:
print(f" 进度: {completed}/{len(to_probe)}")
# 保存缓存
with open(CACHE_FILE, "w", encoding="utf-8") as f:
json.dump(cache, f, ensure_ascii=False, indent=2)
print(f" 缓存已保存: {CACHE_FILE}")
# 补全已缓存的时长
for f in files:
f["duration"] = cache.get(f["filepath"], 0.0)
# 4. 生成 SQL
print(f"\n[3/4] 生成 INSERT SQL...")
zero_duration = sum(1 for f in files if f["duration"] <= 0)
print(f" 时长为 0 的文件: {zero_duration}")
sql_lines = [
"-- ========================================================",
"-- 空镜素材 Seed 数据",
f"-- 生成时间: 2026-05-14",
f"-- 素材数: {len(files)}",
"-- ========================================================",
"",
"BEGIN;",
"",
]
for f in files:
sql_lines.append(
f"INSERT INTO broll_materials (category_id, title, url, duration, usage_count, status, created_at, updated_at)"
f"\nSELECT id, '{f['filename']}', '{f['url']}', {f['duration']}, 0, 'active', NOW(), NOW()"
f"\nFROM broll_categories WHERE slug = '{f['category_slug']}' AND level = 3;"
)
sql_lines.extend([
"",
"COMMIT;",
"",
])
# 5. 写入文件
print(f"\n[4/4] 写入文件...")
with open(OUTPUT_SQL, "w", encoding="utf-8") as f:
f.write("\n".join(sql_lines))
print(f" 输出: {OUTPUT_SQL}")
print(f" 总行数: {len(sql_lines)}")
print(f" INSERT 语句: {len(files)}")
print(f"\n{'=' * 60}")
print("完成!")
print(f"{'=' * 60}")
if __name__ == "__main__":
main()
File diff suppressed because it is too large Load Diff