| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278 |
- #!/usr/bin/env python3
- """生成图数据库格式的 mock 数据 SQL"""
- # 47个要素定义 - 与模板占位符完全匹配
- ELEMENTS = [
- # 文本型 - basicInfo 命名空间
- (1, 'basicInfo.projectCode', '项目编号', 'text', 'basicInfo', 'projectCode', True),
- (2, 'basicInfo.requestLevel', '申请级别', 'text', 'basicInfo', 'requestLevel', True),
- (3, 'basicInfo.applyAt', '申请日期', 'text', 'basicInfo', 'applyAt', False),
- (4, 'basicInfo.reviewObjectCertificateGetAt', '证书获取日期', 'text', 'basicInfo', 'reviewObjectCertificateGetAt', False),
- (5, 'basicInfo.reviewObjectCertificate2GetAt', '二次证书获取日期', 'text', 'basicInfo', 'reviewObjectCertificate2GetAt', False),
- (6, 'basicInfo.reviewCategory', '申请类别', 'text', 'basicInfo', 'reviewCategory', True),
- (7, 'basicInfo.reviewUnit', '评审单位', 'text', 'basicInfo', 'reviewUnit', True),
- # 文本型 - project 命名空间
- (8, 'project.reviewObject', '评审对象', 'text', 'project', 'reviewObject', True),
- (9, 'project.reviewObjectAlias', '评审对象简称', 'text', 'project', 'reviewObjectAlias', True),
- (10, 'project.resultScore', '评审得分', 'text', 'project', 'resultScore', True),
- (11, 'project.resultLevel', '评审级别', 'text', 'project', 'resultLevel', True),
- (12, 'project.workStartAt', '评审开始日期', 'text', 'project', 'workStartAt', True),
- (13, 'project.workEndAt', '评审结束日期', 'text', 'project', 'workEndAt', True),
- (14, 'project.createdAt', '报告日期', 'text', 'project', 'createdAt', True),
- (15, 'project.reviewPeriod', '评审周期', 'text', 'project', 'reviewPeriod', False),
- (16, 'project.closingMeetingAt', '末次评审会议时间', 'text', 'project', 'closingMeetingAt', False),
- # 段落型 - 章节1.1 评审对象概况
- (17, 'project.reviewObjectSummary', '评审对象概况', 'paragraph', 'project', 'reviewObjectSummary', True),
- (18, 'project.reviewObjectDescription', '评审对象描述', 'paragraph', 'project', 'reviewObjectDescription', True),
- (19, 'project.reviewObjectSelfAssessmentProcess', '评审对象自评过程', 'paragraph', 'project', 'reviewObjectSelfAssessmentProcess', False),
- (20, 'project.reviewRange', '复审范围', 'paragraph', 'project', 'reviewRange', False),
- (21, 'project.reviewRangeShort', '复审范围简称', 'paragraph', 'project', 'reviewRangeShort', False),
- # 段落型 - 章节1.2.1 目标职责
- (22, 'project.target', '目标', 'paragraph', 'project', 'target', True),
- (23, 'project.duty', '组织机构和职责', 'paragraph', 'project', 'duty', True),
- (24, 'project.fullParticipation', '全员参与', 'paragraph', 'project', 'fullParticipation', False),
- (25, 'project.safetyInvestment', '安全生产投入', 'paragraph', 'project', 'safetyInvestment', False),
- (26, 'project.safetyCulture', '安全文化建设', 'paragraph', 'project', 'safetyCulture', False),
- # 段落型 - 章节1.2.2 制度化管理
- (27, 'project.systematicManagement', '制度化管理', 'paragraph', 'project', 'systematicManagement', False),
- # 段落型 - 章节1.2.3 教育培训
- (28, 'project.trainingManagement', '教育培训管理', 'paragraph', 'project', 'trainingManagement', False),
- (29, 'project.employeeTraining', '人员教育培训', 'paragraph', 'project', 'employeeTraining', False),
- # 段落型 - 章节1.2.4 现场管理
- (30, 'project.assetManagement', '设备设施管理', 'paragraph', 'project', 'assetManagement', False),
- (31, 'project.jobSafety', '作业安全', 'paragraph', 'project', 'jobSafety', False),
- (32, 'project.positionQualified', '岗位达标', 'paragraph', 'project', 'positionQualified', False),
- (33, 'project.partner', '相关方', 'paragraph', 'project', 'partner', False),
- (34, 'project.occupationalHealth', '职业健康', 'paragraph', 'project', 'occupationalHealth', False),
- # 段落型 - 章节1.2.5 安全风险管控及隐患排查治理
- (35, 'project.riskAssessment', '风险辨识与评价', 'paragraph', 'project', 'riskAssessment', False),
- (36, 'project.majorHazardManagement', '重大危险源管理', 'paragraph', 'project', 'majorHazardManagement', False),
- (37, 'project.hazardInspection', '隐患排查', 'paragraph', 'project', 'hazardInspection', False),
- (38, 'project.changeManagement', '变更管理', 'paragraph', 'project', 'changeManagement', False),
- (39, 'project.earlyWarning', '预测预警', 'paragraph', 'project', 'earlyWarning', False),
- # 段落型 - 章节1.2.6 应急救援
- (40, 'project.emergencyResponse', '应急救援', 'paragraph', 'project', 'emergencyResponse', False),
- # 段落型 - 章节1.2.7 事故管理
- (41, 'project.incidentManagement', '事故管理', 'paragraph', 'project', 'incidentManagement', False),
- # 段落型 - 章节1.2.8 持续改进
- (42, 'project.continuousImprovement', '持续改进', 'paragraph', 'project', 'continuousImprovement', False),
- # 段落型 - 章节1.3 安全生产标准化建设
- (43, 'project.safetyStandardizationStatus', '安全生产标准化建设和持续运行情况', 'paragraph', 'project', 'safetyStandardizationStatus', False),
- # 段落型 - 章节1.4 安全生产管理亮点
- (44, 'project.safetyHighlight', '安全生产管理亮点', 'paragraph', 'project', 'safetyHighlight', False),
- # 段落型 - 其他
- (45, 'project.workProcess', '现场复审工作过程', 'paragraph', 'project', 'workProcess', False),
- (46, 'project.moreWorkReference', '工作依据', 'paragraph', 'project', 'moreWorkReference', False),
- # 表格型
- (47, '+expert_list', '专家组成员表', 'table', None, 'expert_list', True),
- ]
- # 要素值 - 与模板占位符匹配
- VALUES = {
- # 文本型
- 'basicInfo.projectCode': 'BZ-0092-2024',
- 'basicInfo.requestLevel': '一级',
- 'basicInfo.applyAt': '2024年7月8日',
- 'basicInfo.reviewObjectCertificateGetAt': '2019年12月9日',
- 'basicInfo.reviewObjectCertificate2GetAt': '2015年4月7日',
- 'basicInfo.reviewCategory': '电力勘测设计企业',
- 'basicInfo.reviewUnit': '湖北安源安全环保科技有限公司',
- 'project.reviewObject': '中国电建集团成都勘测设计研究院有限公司',
- 'project.reviewObjectAlias': '成都院',
- 'project.resultScore': '93.33',
- 'project.resultLevel': '一级',
- 'project.workStartAt': '2024年7月13日',
- 'project.workEndAt': '2024年10月17日',
- 'project.createdAt': '2024年11月',
- 'project.reviewPeriod': '2023年7月8日-2024年7月8日',
- 'project.closingMeetingAt': '2024年10月17日',
- # 段落型 - 章节1.1
- 'project.reviewObjectSummary': '中国电建集团成都勘测设计研究院有限公司(简称:成都院)成立于2005年,是世界500强企业中国电力建设集团的核心成员企业。作为国家级高新技术企业,成都院以水利水电、新能源和基础设施为核心业务,在水电工程领域承担了金沙江、大渡河、雅砻江等重大河流的规划勘测设计工作,创造了多项"中国第一"和"世界之最"。成都院拥有注册资本50亿元人民币,专业技术人员规模近3000人,累计获得4443项专利和100项行业资质认证,展现了雄厚的技术研发实力。',
- 'project.reviewObjectDescription': '中国电建集团成都勘测设计研究院有限公司(简称:成都院)是中国电力建设集团核心成员企业,作为国内领先的清洁能源工程服务商,成都院在水利水电、新能源及基础设施领域具有突出优势。成都院深度参与了国家西部大开发和"西电东送"战略,承担了包括两河口水电站、杨房沟水电站、乌东德水电站等重大工程的勘测设计工作,其中两河口水电站拥有世界最高土石坝的纪录。',
- 'project.reviewObjectSelfAssessmentProcess': '成都院于2024年3月启动安全生产标准化复审自评工作,成立了以总经理为组长的自评工作领导小组,制定了详细的自评工作方案。自评工作历时3个月,覆盖公司本部及所有在建项目,共发现问题隐患127项,已全部完成整改。',
- # 段落型 - 章节1.2.1 目标职责
- 'project.target': '成都院制定并发布《QHSE"十四五"规划》(安质〔2023〕1号),明确了总体安全生产目标,包括7项安全管理及事故控制目标,总体目标为公司"十四五"规划的子规划,安全生产与职业健康工作目标纳入总体生产经营目标。成都院发布《关于印发<成都院2024年安全生产与职业健康、能源节约与生态环境保护工作目标和重点>的通知》(蓉设安质〔2024〕18号),明确了2024年安全生产与职业健康目标,包括9项安全管理目标和10项事故控制目标。',
- 'project.duty': '成都院建立了完善的安全生产组织机构体系,设立了安全生产委员会作为最高决策机构,下设安全质量环保部作为专职管理部门。公司各级领导班子成员均签订了安全生产责任书,明确了"党政同责、一岗双责"的安全生产责任制。各部门、各项目部均配备了专(兼)职安全管理人员,形成了横向到边、纵向到底的安全管理网络。',
- 'project.fullParticipation': '成都院建立了全员参与的安全生产管理机制,通过安全生产责任制的层层签订,将安全责任落实到每一位员工。公司定期组织安全生产培训和应急演练,提高全员安全意识和应急处置能力。建立了安全隐患举报奖励制度,鼓励员工积极参与安全管理。',
- 'project.safetyInvestment': '成都院严格执行安全生产费用提取和使用制度,按照规定比例提取安全生产费用,专款专用。2024年度安全生产投入总额达到2500万元,主要用于安全设施设备更新、安全培训教育、应急救援物资储备等方面。',
- 'project.safetyCulture': '成都院积极推进安全文化建设,将安全理念融入企业文化体系。通过开展"安全生产月"、"安全知识竞赛"等活动,营造浓厚的安全文化氛围。建立了安全文化展示厅,展示公司安全发展历程和典型案例。',
- # 段落型 - 章节1.2.2 制度化管理
- 'project.systematicManagement': '成都院建立了完善的安全生产规章制度体系,涵盖安全生产责任制、安全生产管理制度、安全操作规程等方面。公司定期对制度进行评审和修订,确保制度的适用性和有效性。建立了制度执行情况检查机制,确保各项制度落实到位。',
- # 段落型 - 章节1.2.3 教育培训
- 'project.trainingManagement': '成都院建立了完善的安全教育培训管理制度,制定了年度培训计划,明确了培训内容、培训对象和培训要求。公司设立了专门的培训管理部门,配备了专职培训管理人员,建立了培训档案管理系统。',
- 'project.employeeTraining': '成都院严格执行三级安全教育培训制度,新员工入职必须完成公司级、部门级、班组级三级安全教育培训。特种作业人员全部持证上岗,证书有效期内复审率达到100%。2024年度共组织各类安全培训156次,培训人员达到8500人次。',
- # 段落型 - 章节1.2.4 现场管理
- 'project.assetManagement': '成都院建立了完善的设备设施管理制度,对所有生产设备设施实行台账管理。定期开展设备设施安全检查和维护保养,确保设备设施处于良好状态。特种设备全部按规定进行检验检测,检验合格率达到100%。',
- 'project.jobSafety': '成都院严格执行作业安全管理制度,对高风险作业实行作业许可制度。建立了作业风险分析和控制措施制度,作业前必须进行风险辨识和安全交底。配备了完善的个人防护用品,确保作业人员安全。',
- 'project.positionQualified': '成都院建立了岗位达标管理制度,明确了各岗位的安全生产职责和能力要求。定期开展岗位达标考核,考核结果与绩效挂钩。2024年度岗位达标率达到98%以上。',
- 'project.partner': '成都院建立了相关方安全管理制度,对承包商、供应商等相关方实行准入管理。签订安全生产协议,明确双方安全责任。定期对相关方进行安全检查和评价,不合格的相关方及时清退。',
- 'project.occupationalHealth': '成都院建立了职业健康管理制度,定期开展职业病危害因素检测和员工职业健康体检。配备了完善的职业病防护设施和个人防护用品。建立了职业健康档案,实行动态管理。',
- # 段落型 - 章节1.2.5 安全风险管控
- 'project.riskAssessment': '成都院建立了安全风险辨识与评价制度,定期开展全面的风险辨识和评价工作。建立了风险分级管控清单,明确了各级风险的管控措施和责任人。对重大风险实行挂牌督办,确保风险可控。',
- 'project.majorHazardManagement': '成都院建立了重大危险源管理制度,对辨识出的重大危险源实行登记建档、定期检测、评估监控。制定了重大危险源应急预案,定期开展应急演练。',
- 'project.hazardInspection': '成都院建立了隐患排查治理制度,实行分级排查、分类治理。建立了隐患排查治理信息系统,实现隐患的闭环管理。2024年度共排查隐患1256项,整改率达到100%。',
- 'project.changeManagement': '成都院建立了变更管理制度,对人员、设备、工艺、环境等方面的变更实行审批管理。变更前进行风险评估,变更后进行验收确认,确保变更安全可控。',
- 'project.earlyWarning': '成都院建立了安全预测预警机制,利用信息化手段对安全生产状况进行实时监控和分析。建立了安全生产预警指标体系,及时发布预警信息,采取预防措施。',
- # 段落型 - 章节1.2.6 应急救援
- 'project.emergencyResponse': '成都院建立了完善的应急救援体系,制定了综合应急预案和专项应急预案。配备了应急救援物资和装备,建立了应急救援队伍。定期开展应急演练,提高应急处置能力。2024年度共组织应急演练32次。',
- # 段落型 - 章节1.2.7 事故管理
- 'project.incidentManagement': '成都院建立了事故管理制度,明确了事故报告、调查、处理和统计分析的程序和要求。建立了事故案例库,定期开展事故案例学习和警示教育。复审期内未发生生产安全事故。',
- # 段落型 - 章节1.2.8 持续改进
- 'project.continuousImprovement': '成都院建立了安全生产持续改进机制,定期开展安全生产绩效评估和管理评审。根据评估结果制定改进措施,持续提升安全生产管理水平。建立了安全生产标准化建设长效机制,确保标准化工作持续有效运行。',
- # 段落型 - 章节1.3
- 'project.safetyStandardizationStatus': '成都院自2015年首次通过电力勘测设计企业一级安全生产标准化评审以来,始终坚持标准化建设不放松,持续完善安全生产管理体系。公司将安全生产标准化建设纳入年度工作计划,定期开展自评和整改,确保标准化工作持续有效运行。',
- # 段落型 - 章节1.4
- 'project.safetyHighlight': '成都院在安全生产管理方面形成了多项亮点:一是建立了智慧安全管理平台,实现了安全管理信息化、智能化;二是创新了"安全+党建"工作模式,将安全工作与党建工作深度融合;三是建立了安全生产标准化建设长效机制,确保标准化工作持续有效运行。',
- }
- def escape_sql(s):
- if s is None:
- return 'NULL'
- return "'" + s.replace("'", "''") + "'"
- def generate_sql():
- lines = []
- lines.append("-- 灵越智报 Mock 数据 (图数据库格式)")
- lines.append("-- 生成时间: 2026-03-02")
- lines.append("")
-
- # 项目节点
- lines.append("-- 项目节点")
- lines.append("INSERT INTO nodes (id, node_type, node_key, name, status, created_by) VALUES")
- lines.append("(10, 'PROJECT', 'PRJ-2024-001', '成都院2024年复审报告', 'draft', 1)")
- lines.append("ON CONFLICT (id) DO NOTHING;")
- lines.append("")
-
- # 要素定义节点
- lines.append("-- 要素定义节点 (47个)")
- for i, elem in enumerate(ELEMENTS):
- elem_id, elem_key, elem_name, elem_type, namespace, field_name, required = elem
- node_id = 700 + elem_id
- lines.append(f"INSERT INTO nodes (id, node_type, node_key, name, created_by) VALUES ({node_id}, 'ELEMENT', {escape_sql(elem_key)}, {escape_sql(elem_name)}, 1) ON CONFLICT (id) DO NOTHING;")
- lines.append("")
-
- # 要素定义属性
- lines.append("-- 要素定义属性")
- for elem in ELEMENTS:
- elem_id, elem_key, elem_name, elem_type, namespace, field_name, required = elem
- node_id = 700 + elem_id
- lines.append(f"INSERT INTO node_properties (node_id, prop_key, prop_value) VALUES ({node_id}, 'element_type', {escape_sql(elem_type)}) ON CONFLICT (node_id, prop_key) DO NOTHING;")
- if namespace:
- lines.append(f"INSERT INTO node_properties (node_id, prop_key, prop_value) VALUES ({node_id}, 'namespace', {escape_sql(namespace)}) ON CONFLICT (node_id, prop_key) DO NOTHING;")
- if field_name:
- lines.append(f"INSERT INTO node_properties (node_id, prop_key, prop_value) VALUES ({node_id}, 'field_name', {escape_sql(field_name)}) ON CONFLICT (node_id, prop_key) DO NOTHING;")
- lines.append(f"INSERT INTO node_properties (node_id, prop_key, prop_value) VALUES ({node_id}, 'required', {'true' if required else 'false'}) ON CONFLICT (node_id, prop_key) DO NOTHING;")
- lines.append("")
-
- # 要素值节点
- lines.append("-- 要素值节点 (47个)")
- for elem in ELEMENTS:
- elem_id, elem_key, elem_name, elem_type, namespace, field_name, required = elem
- value_node_id = 800 + elem_id
- value_key = f"PRJ-2024-001:{elem_key}"
- lines.append(f"INSERT INTO nodes (id, node_type, node_key, name, created_by) VALUES ({value_node_id}, 'VALUE', {escape_sql(value_key)}, {escape_sql(elem_name + '值')}, 1) ON CONFLICT (id) DO NOTHING;")
- lines.append("")
-
- # 要素值属性
- lines.append("-- 要素值属性")
- for elem in ELEMENTS:
- elem_id, elem_key, elem_name, elem_type, namespace, field_name, required = elem
- value_node_id = 800 + elem_id
- value_text = VALUES.get(elem_key)
- is_filled = 'true' if value_text else 'false'
- lines.append(f"INSERT INTO node_properties (node_id, prop_key, prop_value) VALUES ({value_node_id}, 'is_filled', '{is_filled}') ON CONFLICT (node_id, prop_key) DO NOTHING;")
- if value_text:
- lines.append(f"INSERT INTO node_properties (node_id, prop_key, prop_value) VALUES ({value_node_id}, 'value_text', {escape_sql(value_text)}) ON CONFLICT (node_id, prop_key) DO NOTHING;")
- lines.append(f"INSERT INTO node_properties (node_id, prop_key, prop_value) VALUES ({value_node_id}, 'fill_source', 'rule') ON CONFLICT (node_id, prop_key) DO NOTHING;")
- lines.append("")
-
- # HAS_ELEMENT 关系
- lines.append("-- HAS_ELEMENT 关系")
- for i, elem in enumerate(ELEMENTS):
- elem_id = elem[0]
- node_id = 700 + elem_id
- lines.append(f"INSERT INTO edges (edge_type, from_node_id, to_node_id, sort_order) VALUES ('HAS_ELEMENT', 10, {node_id}, {i+1}) ON CONFLICT (edge_type, from_node_id, to_node_id) DO NOTHING;")
- lines.append("")
-
- # HAS_VALUE 关系
- lines.append("-- HAS_VALUE 关系")
- for elem in ELEMENTS:
- elem_id = elem[0]
- value_node_id = 800 + elem_id
- lines.append(f"INSERT INTO edges (edge_type, from_node_id, to_node_id) VALUES ('HAS_VALUE', 10, {value_node_id}) ON CONFLICT (edge_type, from_node_id, to_node_id) DO NOTHING;")
- lines.append("")
-
- # FOR_ELEMENT 关系
- lines.append("-- FOR_ELEMENT 关系")
- for elem in ELEMENTS:
- elem_id = elem[0]
- elem_node_id = 700 + elem_id
- value_node_id = 800 + elem_id
- lines.append(f"INSERT INTO edges (edge_type, from_node_id, to_node_id) VALUES ('FOR_ELEMENT', {value_node_id}, {elem_node_id}) ON CONFLICT (edge_type, from_node_id, to_node_id) DO NOTHING;")
- lines.append("")
-
- # 附件节点
- lines.append("-- 附件节点")
- lines.append("INSERT INTO nodes (id, node_type, node_key, name, created_by) VALUES (400, 'ATTACHMENT', 'ATT-001', '01-复审通知', 1) ON CONFLICT (id) DO NOTHING;")
- lines.append("INSERT INTO nodes (id, node_type, node_key, name, created_by) VALUES (401, 'ATTACHMENT', 'ATT-002', '02-评审报告原文', 1) ON CONFLICT (id) DO NOTHING;")
- lines.append("INSERT INTO nodes (id, node_type, node_key, name, created_by) VALUES (402, 'ATTACHMENT', 'ATT-003', '03-安全标准化达标证书', 1) ON CONFLICT (id) DO NOTHING;")
- lines.append("")
-
- # 附件属性
- lines.append("-- 附件属性")
- for att_id, name, size in [(400, '复审通知.docx', 102400), (401, '评审报告.pdf', 512000), (402, '达标证书.pdf', 256000)]:
- lines.append(f"INSERT INTO node_properties (node_id, prop_key, prop_value) VALUES ({att_id}, 'file_name', '{name}') ON CONFLICT (node_id, prop_key) DO NOTHING;")
- lines.append(f"INSERT INTO node_properties (node_id, prop_key, prop_value) VALUES ({att_id}, 'parse_status', 'completed') ON CONFLICT (node_id, prop_key) DO NOTHING;")
- lines.append(f"INSERT INTO node_properties (node_id, prop_key, prop_number) VALUES ({att_id}, 'file_size', {size}) ON CONFLICT (node_id, prop_key) DO NOTHING;")
- lines.append("")
-
- # HAS_ATTACHMENT 关系
- lines.append("-- HAS_ATTACHMENT 关系")
- lines.append("INSERT INTO edges (edge_type, from_node_id, to_node_id, sort_order) VALUES ('HAS_ATTACHMENT', 10, 400, 1) ON CONFLICT (edge_type, from_node_id, to_node_id) DO NOTHING;")
- lines.append("INSERT INTO edges (edge_type, from_node_id, to_node_id, sort_order) VALUES ('HAS_ATTACHMENT', 10, 401, 2) ON CONFLICT (edge_type, from_node_id, to_node_id) DO NOTHING;")
- lines.append("INSERT INTO edges (edge_type, from_node_id, to_node_id, sort_order) VALUES ('HAS_ATTACHMENT', 10, 402, 3) ON CONFLICT (edge_type, from_node_id, to_node_id) DO NOTHING;")
- lines.append("")
-
- # 实体节点
- lines.append("-- 实体节点")
- entities = [
- (500, 'ORG:成都院', '中国电建集团成都勘测设计研究院有限公司', 'ORG', '评审对象'),
- (501, 'ORG:成都院简称', '成都院', 'ORG', '评审对象简称'),
- (502, 'CODE:BZ-0092-2024', 'BZ-0092-2024', 'CODE', '项目编号'),
- (503, 'DATE:开始', '2024年7月13日', 'DATE', '评审开始日期'),
- (504, 'DATE:结束', '2024年10月17日', 'DATE', '评审结束日期'),
- (505, 'NUMBER:得分', '93.33', 'NUMBER', '评审得分'),
- (506, 'DATE:申请', '2024年7月8日', 'DATE', '申请日期'),
- (507, 'DATE:证书', '2019年12月9日', 'DATE', '证书获取日期'),
- ]
- for ent_id, ent_key, ent_text, ent_type, label in entities:
- lines.append(f"INSERT INTO nodes (id, node_type, node_key, name, created_by) VALUES ({ent_id}, 'ENTITY', {escape_sql(ent_key)}, {escape_sql(ent_text)}, 1) ON CONFLICT (id) DO NOTHING;")
- lines.append("")
-
- # 实体属性
- lines.append("-- 实体属性")
- for ent_id, ent_key, ent_text, ent_type, label in entities:
- lines.append(f"INSERT INTO node_properties (node_id, prop_key, prop_value) VALUES ({ent_id}, 'entity_type', '{ent_type}') ON CONFLICT (node_id, prop_key) DO NOTHING;")
- lines.append(f"INSERT INTO node_properties (node_id, prop_key, prop_value) VALUES ({ent_id}, 'business_label', {escape_sql(label)}) ON CONFLICT (node_id, prop_key) DO NOTHING;")
- lines.append(f"INSERT INTO node_properties (node_id, prop_key, prop_number) VALUES ({ent_id}, 'confidence', 0.95) ON CONFLICT (node_id, prop_key) DO NOTHING;")
- lines.append("")
-
- # HAS_ENTITY 关系
- lines.append("-- HAS_ENTITY 关系")
- for ent_id, _, _, _, _ in entities:
- lines.append(f"INSERT INTO edges (edge_type, from_node_id, to_node_id) VALUES ('HAS_ENTITY', 400, {ent_id}) ON CONFLICT (edge_type, from_node_id, to_node_id) DO NOTHING;")
- lines.append("")
-
- # 更新序列
- lines.append("-- 更新序列")
- lines.append("SELECT setval('nodes_id_seq', (SELECT COALESCE(MAX(id), 1) FROM nodes));")
- lines.append("SELECT setval('edges_id_seq', (SELECT COALESCE(MAX(id), 1) FROM edges));")
- lines.append("SELECT setval('node_properties_id_seq', (SELECT COALESCE(MAX(id), 1) FROM node_properties));")
- lines.append("")
-
- lines.append("SELECT '47个要素 Mock 数据导入完成' AS result;")
-
- return '\n'.join(lines)
- if __name__ == '__main__':
- print(generate_sql())
|