integrated_crm_app/integrated_crm_app_schema.sql
yumoqing 2b921a209d sync: local modifications to integrated_crm_app
- Updated app/integrated_crm_app.py, build.sh, conf/config.json
- Added config.ini, schema.sql, send_email.py, test_db_conn.py
- Added full wwwroot/ with bricks framework, all module frontends, login/main UI
2026-04-28 18:54:07 +08:00

715 lines
38 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- Module: appbase
-- Module: rbac
-- Module: customer_management
-- Table from customer_handover.json
CREATE TABLE IF NOT EXISTS `customer_handover` (
`id` VARCHAR(32) NOT NULL COMMENT '主键 - UUID格式',
`customer_id` VARCHAR(32) NOT NULL COMMENT '被交接的客户ID',
`from_owner_id` VARCHAR(32) NOT NULL COMMENT '原客户负责人ID',
`to_owner_id` VARCHAR(32) NOT NULL COMMENT '新客户负责人ID',
`handover_reason` VARCHAR(100) NOT NULL COMMENT '交接触发原因resignation=离职, position_change=岗位调整',
`current_stage` VARCHAR(20) NOT NULL DEFAULT 'preparation' COMMENT '交接流程阶段preparation=准备, review=审核, confirmation=确认, completed=完成',
`reviewer_id` VARCHAR(32) COMMENT '负责审核交接清单的人员ID',
`prepared_at` TIMESTAMP COMMENT '原负责人完成交接清单准备的时间',
`reviewed_at` TIMESTAMP COMMENT '审核人完成审核的时间',
`confirmed_at` TIMESTAMP COMMENT '接手人确认接收的时间',
`completed_at` TIMESTAMP COMMENT '整个交接流程完成的时间',
`created_at` TIMESTAMP NOT NULL COMMENT '交接流程创建时间',
`updated_at` TIMESTAMP NOT NULL COMMENT '最后更新时间',
`notes` TEXT COMMENT '交接过程中的备注信息',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='客户交接表';
CREATE INDEX `idx_handover_customer` ON `customer_handover` (`customer_id`);
CREATE INDEX `idx_handover_from_owner` ON `customer_handover` (`from_owner_id`);
CREATE INDEX `idx_handover_to_owner` ON `customer_handover` (`to_owner_id`);
CREATE INDEX `idx_handover_stage` ON `customer_handover` (`current_stage`);
CREATE INDEX `idx_handover_created` ON `customer_handover` (`created_at`);
-- Table from customer_handover_items.json
CREATE TABLE IF NOT EXISTS `customer_handover_items` (
`id` VARCHAR(32) NOT NULL COMMENT '主键 - UUID格式',
`handover_id` VARCHAR(32) NOT NULL COMMENT '关联的交接记录ID',
`item_type` VARCHAR(50) NOT NULL COMMENT '交接项目类型basic_info=基本信息, opportunities=未结商机, contracts=历史合同, service_tickets=服务工单, payment_issues=回款问题',
`item_id` VARCHAR(32) COMMENT '关联的具体记录ID如商机ID、合同ID等',
`item_description` TEXT NOT NULL COMMENT '项目详细描述或补充说明',
`is_completed` VARCHAR(1) NOT NULL DEFAULT '0' COMMENT '是否已完成交接1=是, 0=否',
`created_at` TIMESTAMP NOT NULL COMMENT '项目创建时间',
`updated_at` TIMESTAMP NOT NULL COMMENT '最后更新时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='客户交接项目明细表';
CREATE INDEX `idx_handover_items_handover` ON `customer_handover_items` (`handover_id`);
CREATE INDEX `idx_handover_items_type` ON `customer_handover_items` (`item_type`);
CREATE INDEX `idx_handover_items_item_id` ON `customer_handover_items` (`item_id`);
-- Table from customer_pool.json
CREATE TABLE IF NOT EXISTS `customer_pool` (
`id` VARCHAR(32) NOT NULL COMMENT '主键 - UUID格式',
`customer_id` VARCHAR(32) NOT NULL COMMENT '回收到公海的客户ID',
`original_owner_id` VARCHAR(32) NOT NULL COMMENT '客户原来的负责人ID',
`recycle_reason` VARCHAR(100) NOT NULL COMMENT '回收原因inactive_days=未跟进天数超限, manual=手动回收',
`inactive_days` INT COMMENT '触发回收的未跟进天数',
`recycled_at` TIMESTAMP NOT NULL COMMENT '客户被回收到公海的时间',
`assigned_to` VARCHAR(32) COMMENT '分配给的新负责人ID如果已分配',
`assigned_at` TIMESTAMP COMMENT '客户被分配的时间',
`pool_status` VARCHAR(20) NOT NULL DEFAULT 'available' COMMENT '公海状态available=可领取, assigned=已分配, claimed=已认领',
`created_at` TIMESTAMP NOT NULL COMMENT '记录创建时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='客户公海池表';
CREATE UNIQUE INDEX `idx_pool_customer` ON `customer_pool` (`customer_id`);
CREATE INDEX `idx_pool_original_owner` ON `customer_pool` (`original_owner_id`);
CREATE INDEX `idx_pool_assigned_to` ON `customer_pool` (`assigned_to`);
CREATE INDEX `idx_pool_status` ON `customer_pool` (`pool_status`);
CREATE INDEX `idx_pool_recycled` ON `customer_pool` (`recycled_at`);
-- Table from customers.json
CREATE TABLE IF NOT EXISTS `customers` (
`id` VARCHAR(32) NOT NULL COMMENT '主键 - UUID格式',
`customer_name` VARCHAR(255) NOT NULL COMMENT '客户公司名称或个人姓名',
`customer_type` VARCHAR(20) NOT NULL COMMENT '客户类型individual=个人, enterprise=企业',
`phone` VARCHAR(20) COMMENT '客户手机号码',
`email` VARCHAR(255) COMMENT '客户邮箱地址',
`tax_id` VARCHAR(50) COMMENT '企业统一社会信用代码或税号',
`industry` VARCHAR(100) COMMENT '客户所属行业',
`customer_level` VARCHAR(20) NOT NULL DEFAULT 'potential' COMMENT '客户分级important=重要, normal=普通, potential=潜在',
`address` TEXT COMMENT '客户详细地址',
`owner_id` VARCHAR(32) NOT NULL COMMENT '当前负责该客户的销售人员ID',
`region` VARCHAR(100) COMMENT '客户所在区域',
`last_follow_up` TIMESTAMP COMMENT '最后一次跟进时间',
`created_at` TIMESTAMP NOT NULL COMMENT '客户档案创建时间',
`updated_at` TIMESTAMP NOT NULL COMMENT '最后更新时间',
`status` VARCHAR(20) NOT NULL DEFAULT 'active' COMMENT '客户状态active=活跃, inactive=非活跃, in_pool=公海',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='客户档案表';
CREATE UNIQUE INDEX `idx_customers_phone` ON `customers` (`phone`);
CREATE UNIQUE INDEX `idx_customers_tax_id` ON `customers` (`tax_id`);
CREATE INDEX `idx_customers_owner` ON `customers` (`owner_id`);
CREATE INDEX `idx_customers_name` ON `customers` (`customer_name`);
CREATE INDEX `idx_customers_level` ON `customers` (`customer_level`);
CREATE INDEX `idx_customers_status` ON `customers` (`status`);
CREATE INDEX `idx_customers_last_follow` ON `customers` (`last_follow_up`);
-- Module: opportunity_management
-- Table from opportunities.json
CREATE TABLE IF NOT EXISTS `opportunities` (
`id` VARCHAR(32) NOT NULL COMMENT '主键 - UUID格式',
`customer_id` VARCHAR(32) NOT NULL COMMENT '关联客户管理模块的客户ID',
`customer_name` VARCHAR(255) NOT NULL COMMENT '客户名称,必填字段',
`opportunity_name` VARCHAR(255) NOT NULL COMMENT '商机标题或项目名称',
`estimated_amount` DECIMAL(15,2) NOT NULL COMMENT '预估成交金额,必填字段',
`current_stage` VARCHAR(50) NOT NULL COMMENT '当前所处的销售阶段,必填字段',
`expected_close_date` DATE NOT NULL COMMENT '预计成交日期,必填字段',
`source_type` VARCHAR(20) NOT NULL DEFAULT 'manual' COMMENT 'manual=手动录入, lead=线索转化',
`owner_id` VARCHAR(32) NOT NULL COMMENT '负责该商机的销售人员ID',
`owner_name` VARCHAR(100) NOT NULL COMMENT '负责该商机的销售人员姓名',
`region` VARCHAR(100) COMMENT '商机所属区域,用于分析筛选',
`description` TEXT COMMENT '商机详细描述信息',
`probability` FLOAT(5,2) NOT NULL DEFAULT '0.00' COMMENT '基于历史转化率计算的成交概率百分比',
`predicted_revenue` DECIMAL(15,2) NOT NULL DEFAULT '0.00' COMMENT '基于成交概率计算的预测收入',
`created_at` TIMESTAMP NOT NULL,
`updated_at` TIMESTAMP NOT NULL,
`status` VARCHAR(20) NOT NULL DEFAULT 'active' COMMENT 'active=活跃, won=已成交, lost=已丢失, closed=已关闭',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='商机表';
CREATE INDEX `idx_opportunities_customer` ON `opportunities` (`customer_id`);
CREATE INDEX `idx_opportunities_owner` ON `opportunities` (`owner_id`);
CREATE INDEX `idx_opportunities_stage` ON `opportunities` (`current_stage`);
CREATE INDEX `idx_opportunities_region` ON `opportunities` (`region`);
CREATE INDEX `idx_opportunities_status` ON `opportunities` (`status`);
CREATE INDEX `idx_opportunities_expected_close` ON `opportunities` (`expected_close_date`);
-- Table from opportunity_predictions.json
CREATE TABLE IF NOT EXISTS `opportunity_predictions` (
`id` VARCHAR(32) NOT NULL COMMENT '主键 - UUID格式',
`opportunity_id` VARCHAR(32) NOT NULL COMMENT '关联的商机ID',
`predicted_amount` DECIMAL(15,2) NOT NULL DEFAULT '0.00' COMMENT '基于历史转化率计算的预测成交金额',
`confidence_level` DECIMAL(5,4) NOT NULL DEFAULT '0.0000' COMMENT '预测的置信度0-1',
`prediction_date` DATE NOT NULL COMMENT '预测生成日期',
`actual_amount` DECIMAL(15,2) COMMENT '实际成交金额(成交后更新)',
`deviation_rate` DECIMAL(5,4) COMMENT '预测与实际的偏差率',
`created_at` TIMESTAMP NOT NULL COMMENT '记录创建时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='商机预测表';
CREATE UNIQUE INDEX `idx_predictions_opportunity` ON `opportunity_predictions` (`opportunity_id`, `prediction_date`);
CREATE INDEX `idx_predictions_date` ON `opportunity_predictions` (`prediction_date`);
-- Table from opportunity_stage_history.json
CREATE TABLE IF NOT EXISTS `opportunity_stage_history` (
`id` VARCHAR(32) NOT NULL COMMENT '主键 - UUID格式',
`opportunity_id` VARCHAR(32) NOT NULL COMMENT '关联的商机ID',
`from_stage` VARCHAR(50) COMMENT '变更前的销售阶段',
`to_stage` VARCHAR(50) NOT NULL COMMENT '变更后的销售阶段',
`change_reason` TEXT NOT NULL COMMENT '阶段变更的原因说明,必填字段',
`changed_by_id` VARCHAR(32) NOT NULL COMMENT '执行阶段变更的用户ID',
`changed_by_name` VARCHAR(100) NOT NULL COMMENT '执行阶段变更的用户姓名',
`changed_at` TIMESTAMP NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='商机阶段变更历史表';
CREATE INDEX `idx_stage_history_opportunity` ON `opportunity_stage_history` (`opportunity_id`);
CREATE INDEX `idx_stage_history_changed_by` ON `opportunity_stage_history` (`changed_by_id`);
CREATE INDEX `idx_stage_history_changed_at` ON `opportunity_stage_history` (`changed_at`);
-- Table from sales_stages.json
CREATE TABLE IF NOT EXISTS `sales_stages` (
`id` VARCHAR(32) NOT NULL COMMENT '主键 - UUID格式',
`stage_name` VARCHAR(100) NOT NULL COMMENT '销售阶段名称,如\'\'、\'\'',
`stage_order` INT NOT NULL COMMENT '阶段在销售漏斗中的顺序,从小到大',
`conversion_rate` FLOAT(5,2) NOT NULL DEFAULT '0.00' COMMENT '该阶段到下一阶段的历史平均转化率',
`is_won_stage` VARCHAR(5) NOT NULL DEFAULT 'no' COMMENT 'yes=成交阶段, no=非成交阶段',
`is_lost_stage` VARCHAR(5) NOT NULL DEFAULT 'no' COMMENT 'yes=丢失阶段, no=非丢失阶段',
`created_at` TIMESTAMP NOT NULL,
`updated_at` TIMESTAMP NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='销售阶段配置表';
CREATE UNIQUE INDEX `idx_sales_stages_order` ON `sales_stages` (`stage_order`);
CREATE UNIQUE INDEX `idx_sales_stages_name` ON `sales_stages` (`stage_name`);
-- Module: contract_management
-- Table from contract.json
CREATE TABLE IF NOT EXISTS `contract` (
`id` VARCHAR(32) NOT NULL COMMENT '合同ID主键',
`contract_number` VARCHAR(50) NOT NULL COMMENT '合同编号,唯一标识',
`title` VARCHAR(200) NOT NULL COMMENT '合同标题',
`party_a` VARCHAR(100) NOT NULL COMMENT '甲方(我方)',
`party_b` VARCHAR(100) NOT NULL COMMENT '乙方(对方)',
`contract_type` VARCHAR(32) NOT NULL COMMENT '合同类型引用appcodes表的id',
`status` VARCHAR(20) NOT NULL DEFAULT 'draft' COMMENT '合同状态draft-草稿, active-生效, expired-过期, terminated-终止',
`amount` DECIMAL(15,2) COMMENT '合同金额',
`start_date` DATE NOT NULL COMMENT '合同开始日期',
`end_date` DATE NOT NULL COMMENT '合同结束日期',
`sign_date` DATE COMMENT '签署日期',
`owner_id` VARCHAR(32) NOT NULL COMMENT '合同负责人引用users表的id',
`org_id` VARCHAR(32) NOT NULL COMMENT '所属组织引用organization表的id',
`ai_compliance_result` TEXT COMMENT 'AI合规检查结果',
`ai_key_dates` TEXT COMMENT 'AI提取的关键时点JSON数据',
`payment_terms` TEXT COMMENT '付款节点规则,如\'30%+50%+20%\'',
`credit_period` INT COMMENT '账期天数',
`penalty_clause` TEXT COMMENT '违约金相关条款',
`opportunity_id` VARCHAR(32) COMMENT '关联的商机ID',
`customer_id` VARCHAR(32) COMMENT '关联的客户ID',
`tax_rate` DECIMAL(5,4) DEFAULT '0.1300' COMMENT '税率默认13%',
`created_at` TIMESTAMP NOT NULL COMMENT '创建时间',
`updated_at` TIMESTAMP NOT NULL COMMENT '更新时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='合同表';
CREATE UNIQUE INDEX `idx_contract_number` ON `contract` (`contract_number`);
CREATE INDEX `idx_contract_org` ON `contract` (`org_id`);
CREATE INDEX `idx_contract_status` ON `contract` (`status`);
-- Table from contract_ai_config.json
CREATE TABLE IF NOT EXISTS `contract_ai_config` (
`id` VARCHAR(32) NOT NULL COMMENT 'AI配置ID',
`ai_service_url` VARCHAR(500) NOT NULL COMMENT 'AI服务URL地址',
`api_key` VARCHAR(255) NOT NULL COMMENT 'API密钥',
`org_id` VARCHAR(32) NOT NULL COMMENT '所属组织',
`created_at` TIMESTAMP NOT NULL COMMENT '创建时间',
`updated_at` TIMESTAMP NOT NULL COMMENT '更新时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='AI配置表';
CREATE UNIQUE INDEX `idx_ai_config_org` ON `contract_ai_config` (`org_id`);
-- Table from contract_attachment.json
CREATE TABLE IF NOT EXISTS `contract_attachment` (
`id` VARCHAR(32) NOT NULL COMMENT '附件ID主键',
`contract_id` VARCHAR(32) NOT NULL COMMENT '关联的合同ID引用contract表的id',
`file_name` VARCHAR(255) NOT NULL COMMENT '文件名',
`file_path` VARCHAR(500) NOT NULL COMMENT '文件存储路径',
`file_size` INT NOT NULL COMMENT '文件大小(字节)',
`file_type` VARCHAR(50) NOT NULL COMMENT '文件类型MIME类型',
`version` INT NOT NULL DEFAULT '1' COMMENT '文件版本号',
`description` VARCHAR(200) COMMENT '附件描述',
`uploaded_by` VARCHAR(32) NOT NULL COMMENT '上传人引用users表的id',
`org_id` VARCHAR(32) NOT NULL COMMENT '所属组织',
`created_at` TIMESTAMP NOT NULL COMMENT '上传时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='合同附件表';
CREATE INDEX `idx_attachment_contract` ON `contract_attachment` (`contract_id`);
CREATE INDEX `idx_attachment_org` ON `contract_attachment` (`org_id`);
CREATE INDEX `idx_attachment_version` ON `contract_attachment` (`file_name`, `version`);
-- Table from contract_milestones.json
CREATE TABLE IF NOT EXISTS `contract_milestones` (
`id` VARCHAR(32) NOT NULL COMMENT '主键 - UUID格式',
`contract_id` VARCHAR(32) NOT NULL COMMENT '关联的合同ID',
`milestone_name` VARCHAR(100) NOT NULL COMMENT '里程碑名称,如\'\'、\'\'、\'\'',
`milestone_type` VARCHAR(20) NOT NULL COMMENT '里程碑类型payment=付款, delivery=交付, acceptance=验收',
`planned_date` DATE NOT NULL COMMENT '计划完成日期',
`actual_date` DATE COMMENT '实际完成日期',
`amount` DECIMAL(15,2) COMMENT '该里程碑关联的金额',
`status` VARCHAR(20) NOT NULL DEFAULT 'pending' COMMENT '状态pending=待处理, completed=已完成, overdue=已逾期',
`description` TEXT COMMENT '里程碑详细描述',
`created_at` TIMESTAMP NOT NULL COMMENT '创建时间',
`updated_at` TIMESTAMP NOT NULL COMMENT '最后更新时间',
`reminder_sent` VARCHAR(1) NOT NULL DEFAULT '0' COMMENT '逾期提醒是否已发送1=是, 0=否',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='合同里程碑管理表';
CREATE INDEX `idx_milestones_contract` ON `contract_milestones` (`contract_id`);
CREATE INDEX `idx_milestones_status` ON `contract_milestones` (`status`);
CREATE INDEX `idx_milestones_planned` ON `contract_milestones` (`planned_date`);
-- Table from contract_versions.json
CREATE TABLE IF NOT EXISTS `contract_versions` (
`id` VARCHAR(32) NOT NULL COMMENT '主键 - UUID格式',
`contract_id` VARCHAR(32) NOT NULL COMMENT '关联的合同ID',
`version_number` VARCHAR(20) NOT NULL COMMENT '版本号如v1.0, v1.1等',
`content` TEXT NOT NULL COMMENT '合同完整内容或差异内容',
`diff_content` TEXT COMMENT '与上一版本的差异内容HTML格式',
`modified_by` VARCHAR(32) NOT NULL COMMENT '修改人用户ID',
`modified_reason` TEXT COMMENT '版本修改原因',
`created_at` TIMESTAMP NOT NULL COMMENT '版本创建时间',
`is_current` VARCHAR(1) NOT NULL DEFAULT '0' COMMENT '是否为当前生效版本1=是, 0=否',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='合同版本管理表';
CREATE INDEX `idx_contract_versions_contract` ON `contract_versions` (`contract_id`);
CREATE UNIQUE INDEX `idx_contract_versions_version` ON `contract_versions` (`contract_id`, `version_number`);
CREATE INDEX `idx_contract_versions_current` ON `contract_versions` (`contract_id`, `is_current`);
-- Table from order_payments.json
CREATE TABLE IF NOT EXISTS `order_payments` (
`id` VARCHAR(32) NOT NULL COMMENT '主键 - UUID格式',
`order_id` VARCHAR(32) NOT NULL COMMENT '关联的订单ID',
`payment_amount` DECIMAL(15,2) NOT NULL COMMENT '本次付款金额',
`payment_date` DATE NOT NULL COMMENT '付款日期',
`payment_method` VARCHAR(50) COMMENT '付款方式',
`payment_reference` VARCHAR(100) COMMENT '付款凭证号或参考号',
`status` VARCHAR(20) NOT NULL DEFAULT 'pending' COMMENT '状态pending=待确认, confirmed=已确认, rejected=已拒绝',
`notes` TEXT COMMENT '付款备注',
`created_at` TIMESTAMP NOT NULL COMMENT '创建时间',
`confirmed_at` TIMESTAMP COMMENT '付款确认时间',
`confirmed_by` VARCHAR(32) COMMENT '付款确认人ID',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='订单付款记录表';
CREATE INDEX `idx_payments_order` ON `order_payments` (`order_id`);
CREATE INDEX `idx_payments_status` ON `order_payments` (`status`);
CREATE INDEX `idx_payments_date` ON `order_payments` (`payment_date`);
-- Table from orders.json
CREATE TABLE IF NOT EXISTS `orders` (
`id` VARCHAR(32) NOT NULL COMMENT '主键 - UUID格式',
`order_number` VARCHAR(50) NOT NULL COMMENT '订单编号,唯一标识',
`contract_id` VARCHAR(32) NOT NULL COMMENT '关联的合同ID',
`customer_id` VARCHAR(32) NOT NULL COMMENT '客户ID',
`order_type` VARCHAR(20) NOT NULL COMMENT '订单类型advance=预付款, progress=进度款, final=尾款, other=其他',
`delivery_batch` VARCHAR(100) COMMENT '交付批次,如\'Q3季度服务交付\'',
`acceptance_deadline` DATE COMMENT '验收截止日期',
`amount` DECIMAL(15,2) NOT NULL COMMENT '该订单的金额',
`paid_amount` DECIMAL(15,2) NOT NULL DEFAULT '0.00' COMMENT '已支付金额',
`tax_rate` DECIMAL(5,4) NOT NULL DEFAULT '0.1300' COMMENT '税率',
`credit_period` INT COMMENT '账期天数要求',
`status` VARCHAR(20) NOT NULL DEFAULT 'active' COMMENT '状态active=活跃, completed=完成, cancelled=取消',
`description` TEXT COMMENT '订单详细描述',
`created_at` TIMESTAMP NOT NULL COMMENT '创建时间',
`updated_at` TIMESTAMP NOT NULL COMMENT '最后更新时间',
`owner_id` VARCHAR(32) NOT NULL COMMENT '订单负责人ID',
`org_id` VARCHAR(32) NOT NULL COMMENT '所属组织ID',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='订单表';
CREATE UNIQUE INDEX `idx_orders_number` ON `orders` (`order_number`);
CREATE INDEX `idx_orders_contract` ON `orders` (`contract_id`);
CREATE INDEX `idx_orders_customer` ON `orders` (`customer_id`);
CREATE INDEX `idx_orders_status` ON `orders` (`status`);
CREATE INDEX `idx_orders_owner` ON `orders` (`owner_id`);
-- Module: financial_management
-- Table from financial_vouchers.json
CREATE TABLE IF NOT EXISTS `financial_vouchers` (
`id` VARCHAR(64) NOT NULL COMMENT '主键',
`voucher_number` VARCHAR(64) COMMENT '凭证编号',
`voucher_type` VARCHAR(32) COMMENT '凭证类型: receipt(收款), payment(支出)',
`contract_id` VARCHAR(64) COMMENT '关联合同ID',
`order_id` VARCHAR(64) NOT NULL COMMENT '关联订单ID可为空用于合同级凭证',
`amount` DECIMAL(15,2) COMMENT '凭证金额',
`voucher_date` DATE COMMENT '凭证日期',
`description` VARCHAR(500) COMMENT '凭证描述,包含合同编号和订单编号',
`reference_id` VARCHAR(64) COMMENT '引用的收款或支出记录ID',
`org_id` VARCHAR(64) COMMENT '组织ID用于多租户隔离',
`created_at` TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='财务凭证';
CREATE INDEX `idx_vouchers_contract_id` ON `financial_vouchers` (`contract_id`);
CREATE INDEX `idx_vouchers_order_id` ON `financial_vouchers` (`order_id`);
CREATE UNIQUE INDEX `idx_vouchers_voucher_number` ON `financial_vouchers` (`voucher_number`, `org_id`);
CREATE INDEX `idx_vouchers_org_id` ON `financial_vouchers` (`org_id`);
CREATE INDEX `idx_vouchers_type` ON `financial_vouchers` (`voucher_type`);
-- Table from payments.json
CREATE TABLE IF NOT EXISTS `payments` (
`id` VARCHAR(64) NOT NULL COMMENT '主键',
`payment_number` VARCHAR(64) COMMENT '支出编号',
`contract_id` VARCHAR(64) COMMENT '关联合同ID必须是已核销收款的合同',
`vendor_id` VARCHAR(64) COMMENT '供应商ID',
`payment_amount` DECIMAL(15,2) COMMENT '支出金额',
`payment_date` DATE COMMENT '实际支出日期',
`payment_method` VARCHAR(32) COMMENT '支出方式: bank_transfer, cash, check, other',
`payment_status` VARCHAR(32) COMMENT '状态: pending(待处理), processed(已处理), verified(已核销)',
`description` VARCHAR(500) NOT NULL COMMENT '备注信息',
`approved_by` VARCHAR(64) NOT NULL COMMENT '审批人ID',
`created_by` VARCHAR(64) COMMENT '财务人员ID',
`org_id` VARCHAR(64) COMMENT '组织ID用于多租户隔离',
`created_at` TIMESTAMP COMMENT '创建时间',
`updated_at` TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='支出记录';
CREATE INDEX `idx_payments_contract_id` ON `payments` (`contract_id`);
CREATE UNIQUE INDEX `idx_payments_payment_number` ON `payments` (`payment_number`, `org_id`);
CREATE INDEX `idx_payments_org_id` ON `payments` (`org_id`);
CREATE INDEX `idx_payments_status` ON `payments` (`payment_status`);
-- Table from receipt_allocations.json
CREATE TABLE IF NOT EXISTS `receipt_allocations` (
`id` VARCHAR(64) NOT NULL COMMENT '主键',
`receipt_id` VARCHAR(64) COMMENT '关联的收款记录ID',
`order_id` VARCHAR(64) COMMENT '关联的订单ID',
`receivable_id` VARCHAR(64) COMMENT '关联的应收记录ID',
`allocated_amount` DECIMAL(15,2) COMMENT '分配给该订单的金额',
`allocation_percentage` DECIMAL(5,4) NOT NULL COMMENT '分配比例0-1之间',
`contract_id` VARCHAR(64) COMMENT '关联合同ID',
`org_id` VARCHAR(64) COMMENT '组织ID用于多租户隔离',
`created_at` TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='收款分配';
CREATE INDEX `idx_allocations_receipt_id` ON `receipt_allocations` (`receipt_id`);
CREATE INDEX `idx_allocations_order_id` ON `receipt_allocations` (`order_id`);
CREATE INDEX `idx_allocations_receivable_id` ON `receipt_allocations` (`receivable_id`);
CREATE INDEX `idx_allocations_org_id` ON `receipt_allocations` (`org_id`);
-- Table from receipts.json
CREATE TABLE IF NOT EXISTS `receipts` (
`id` VARCHAR(64) NOT NULL COMMENT '主键',
`receipt_number` VARCHAR(64) COMMENT '收款编号',
`customer_id` VARCHAR(64) COMMENT '客户ID',
`total_amount` DECIMAL(15,2) COMMENT '本次收款总金额',
`receipt_date` DATE COMMENT '实际收款日期',
`receipt_method` VARCHAR(32) COMMENT '收款方式: bank_transfer, cash, check, other',
`receipt_status` VARCHAR(32) COMMENT '状态: pending(待处理), processed(已处理), verified(已核销)',
`description` VARCHAR(500) NOT NULL COMMENT '备注信息',
`created_by` VARCHAR(64) COMMENT '财务人员ID',
`org_id` VARCHAR(64) COMMENT '组织ID用于多租户隔离',
`created_at` TIMESTAMP COMMENT '创建时间',
`updated_at` TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='收款记录';
CREATE INDEX `idx_receipts_customer_id` ON `receipts` (`customer_id`);
CREATE UNIQUE INDEX `idx_receipts_receipt_number` ON `receipts` (`receipt_number`, `org_id`);
CREATE INDEX `idx_receipts_org_id` ON `receipts` (`org_id`);
CREATE INDEX `idx_receipts_status` ON `receipts` (`receipt_status`);
-- Table from receivables.json
CREATE TABLE IF NOT EXISTS `receivables` (
`id` VARCHAR(64) NOT NULL COMMENT '主键',
`order_id` VARCHAR(64) COMMENT '关联的订单ID',
`contract_id` VARCHAR(64) COMMENT '关联合同ID',
`customer_id` VARCHAR(64) COMMENT '客户ID',
`receivable_amount` DECIMAL(15,2) COMMENT '订单应收金额',
`received_amount` DECIMAL(15,2) COMMENT '已收款金额默认为0',
`receivable_date` DATE COMMENT '应收日期',
`due_date` DATE NOT NULL COMMENT '账期到期日期',
`credit_period` INT NOT NULL COMMENT '账期天数',
`status` VARCHAR(32) COMMENT '状态: pending(待收), partial(部分收款), completed(已完成), overdue(逾期)',
`sales_owner_id` VARCHAR(64) NOT NULL COMMENT '负责该订单跟进的销售ID',
`org_id` VARCHAR(64) COMMENT '组织ID用于多租户隔离',
`created_at` TIMESTAMP COMMENT '创建时间',
`updated_at` TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='应收记录';
CREATE INDEX `idx_receivables_order_id` ON `receivables` (`order_id`);
CREATE INDEX `idx_receivables_contract_id` ON `receivables` (`contract_id`);
CREATE INDEX `idx_receivables_customer_id` ON `receivables` (`customer_id`);
CREATE INDEX `idx_receivables_status` ON `receivables` (`status`);
CREATE INDEX `idx_receivables_org_id` ON `receivables` (`org_id`);
CREATE INDEX `idx_receivables_due_date` ON `receivables` (`due_date`);
-- Module: workflow_approval
-- Table from approval_instance.json
CREATE TABLE IF NOT EXISTS `approval_instance` (
`id` VARCHAR(32) NOT NULL COMMENT '主键UUID',
`workflow_id` VARCHAR(32) NOT NULL COMMENT '关联的工作流定义',
`module_type` VARCHAR(50) NOT NULL COMMENT 'customer/opportunity/contract/financial',
`module_record_id` VARCHAR(32) NOT NULL COMMENT '关联的具体业务记录ID',
`current_step_id` VARCHAR(32) COMMENT '当前待审批的步骤',
`status` VARCHAR(20) NOT NULL COMMENT 'pending/approved/rejected/cancelled',
`initiator_id` VARCHAR(32) NOT NULL COMMENT '审批发起人用户ID',
`title` VARCHAR(200) NOT NULL COMMENT '审批标题',
`description` VARCHAR(1000) COMMENT '审批详细描述',
`org_id` VARCHAR(32) NOT NULL COMMENT '多租户组织隔离',
`created_at` TIMESTAMP NOT NULL COMMENT '创建时间',
`completed_at` TIMESTAMP COMMENT '完成时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='审批实例';
CREATE INDEX `idx_instance_workflow` ON `approval_instance` (`workflow_id`);
CREATE INDEX `idx_instance_module` ON `approval_instance` (`module_type`, `module_record_id`);
CREATE INDEX `idx_instance_status` ON `approval_instance` (`status`);
CREATE INDEX `idx_instance_org` ON `approval_instance` (`org_id`);
-- Table from approval_step.json
CREATE TABLE IF NOT EXISTS `approval_step` (
`id` VARCHAR(32) NOT NULL COMMENT '主键UUID',
`workflow_id` VARCHAR(32) NOT NULL COMMENT '关联的工作流',
`step_name` VARCHAR(100) NOT NULL COMMENT '审批步骤名称',
`step_order` INT NOT NULL COMMENT '步骤执行顺序',
`approver_type` VARCHAR(20) NOT NULL COMMENT 'role/user/department/dynamic',
`approver_value` VARCHAR(100) COMMENT '角色ID/用户ID/部门ID/动态表达式',
`approval_type` VARCHAR(20) NOT NULL COMMENT 'single/multiple/sequential/parallel',
`timeout_hours` INT COMMENT '审批超时时间(小时)',
`description` VARCHAR(500) COMMENT '步骤描述',
`org_id` VARCHAR(32) NOT NULL COMMENT '多租户组织隔离',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='审批步骤';
CREATE INDEX `idx_step_workflow` ON `approval_step` (`workflow_id`);
CREATE INDEX `idx_step_order` ON `approval_step` (`workflow_id`, `step_order`);
-- Table from approval_task.json
CREATE TABLE IF NOT EXISTS `approval_task` (
`id` VARCHAR(32) NOT NULL COMMENT '主键UUID',
`instance_id` VARCHAR(32) NOT NULL COMMENT '关联的审批实例',
`step_id` VARCHAR(32) NOT NULL COMMENT '关联的审批步骤',
`approver_id` VARCHAR(32) NOT NULL COMMENT '具体审批人用户ID',
`status` VARCHAR(20) NOT NULL COMMENT 'pending/approved/rejected',
`decision` VARCHAR(1000) COMMENT '审批意见',
`org_id` VARCHAR(32) NOT NULL COMMENT '多租户组织隔离',
`assigned_at` TIMESTAMP NOT NULL COMMENT '任务分配时间',
`completed_at` TIMESTAMP COMMENT '任务完成时间',
`due_at` TIMESTAMP COMMENT '任务截止时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='审批任务';
CREATE INDEX `idx_task_instance` ON `approval_task` (`instance_id`);
CREATE INDEX `idx_task_approver` ON `approval_task` (`approver_id`);
CREATE INDEX `idx_task_status` ON `approval_task` (`status`);
-- Table from approval_workflow.json
CREATE TABLE IF NOT EXISTS `approval_workflow` (
`id` VARCHAR(32) NOT NULL COMMENT '主键UUID',
`workflow_name` VARCHAR(100) NOT NULL COMMENT '审批工作流名称',
`module_type` VARCHAR(50) NOT NULL COMMENT '关联的模块类型(customer/opportunity/contract/financial)',
`trigger_condition` VARCHAR(500) COMMENT 'JSON格式的触发条件表达式',
`description` VARCHAR(500) COMMENT '工作流描述',
`org_id` VARCHAR(32) NOT NULL COMMENT '多租户组织隔离',
`created_at` TIMESTAMP NOT NULL COMMENT '创建时间',
`updated_at` TIMESTAMP NOT NULL COMMENT '更新时间',
`is_active` VARCHAR(1) NOT NULL COMMENT 'Y/N',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='审批工作流';
CREATE INDEX `idx_workflow_org` ON `approval_workflow` (`org_id`);
CREATE INDEX `idx_workflow_module` ON `approval_workflow` (`module_type`);
CREATE UNIQUE INDEX `uk_workflow_name_org` ON `approval_workflow` (`workflow_name`, `org_id`);
-- Module: unified_dashboard
-- Table from dashboard_config.json
CREATE TABLE IF NOT EXISTS `dashboard_config` (
`id` VARCHAR(32) NOT NULL COMMENT '主键UUID',
`dashboard_name` VARCHAR(100) COMMENT '仪表板显示名称',
`dashboard_type` VARCHAR(50) COMMENT 'sales/finance/customer/executive',
`config_json` VARCHAR(2000) COMMENT '仪表板布局和组件配置',
`is_default` VARCHAR(1) COMMENT 'Y/N',
`org_id` VARCHAR(32) COMMENT '多租户组织隔离',
`created_by` VARCHAR(32) COMMENT '创建用户ID',
`created_at` TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='仪表板配置';
CREATE INDEX `idx_dashboard_org` ON `dashboard_config` (`org_id`);
CREATE INDEX `idx_dashboard_type` ON `dashboard_config` (`dashboard_type`);
CREATE UNIQUE INDEX `uk_dashboard_name_org` ON `dashboard_config` (`dashboard_name`, `org_id`);
-- Table from report_template.json
CREATE TABLE IF NOT EXISTS `report_template` (
`id` VARCHAR(32) NOT NULL COMMENT '主键UUID',
`template_name` VARCHAR(100) COMMENT '报表模板名称',
`report_type` VARCHAR(50) COMMENT 'sales/finance/customer/contract',
`sql_query` VARCHAR(2000) COMMENT '报表数据查询SQL',
`columns_config` VARCHAR(1000) NOT NULL COMMENT 'JSON格式的列配置',
`filters_config` VARCHAR(1000) NOT NULL COMMENT 'JSON格式的过滤器配置',
`chart_config` VARCHAR(1000) NOT NULL COMMENT 'JSON格式的图表配置',
`org_id` VARCHAR(32) COMMENT '多租户组织隔离',
`created_by` VARCHAR(32) COMMENT '创建用户ID',
`created_at` TIMESTAMP COMMENT '创建时间',
`is_active` VARCHAR(1) COMMENT 'Y/N',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='报表模板';
CREATE INDEX `idx_template_org` ON `report_template` (`org_id`);
CREATE INDEX `idx_template_type` ON `report_template` (`report_type`);
-- Table from user_dashboard.json
CREATE TABLE IF NOT EXISTS `user_dashboard` (
`id` VARCHAR(32) NOT NULL COMMENT '主键UUID',
`user_id` VARCHAR(32) COMMENT '关联用户',
`dashboard_config_id` VARCHAR(32) COMMENT '关联的仪表板配置',
`layout_json` VARCHAR(2000) NOT NULL COMMENT '用户自定义布局',
`is_favorite` VARCHAR(1) COMMENT 'Y/N',
`org_id` VARCHAR(32) COMMENT '多租户组织隔离',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户仪表板';
CREATE UNIQUE INDEX `idx_user_dashboard_user` ON `user_dashboard` (`user_id`, `dashboard_config_id`);
CREATE INDEX `idx_user_dashboard_org` ON `user_dashboard` (`org_id`);
-- Module: rbac (from xlsx)
-- Module: appbase (from xlsx)
-- Module: rbac (from xlsx)
CREATE TABLE IF NOT EXISTS `audit_log` (
`id` VARCHAR(255) NOT NULL,
`permid` VARCHAR(255),
`userid` VARCHAR(255),
`params_kw` TEXT,
`exe_date` DATE,
`exe_timestamp` TIMESTAMP,
`remote_ip` VARCHAR(255),
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='审计日志';
CREATE INDEX `idx1` ON `audit_log` (`index:permid`);
CREATE INDEX `idx2` ON `audit_log` (`index:userid`);
CREATE TABLE IF NOT EXISTS `organization` (
`id` VARCHAR(255) NOT NULL,
`orgname` VARCHAR(255),
`orgabbr` VARCHAR(255),
`alias_name` VARCHAR(255),
`contactor` VARCHAR(255),
`contactor_phone` VARCHAR(255),
`province_id` VARCHAR(255),
`city_id` VARCHAR(255),
`distinct_id` VARCHAR(255),
`emailaddress` VARCHAR(255),
`address` VARCHAR(255),
`main_business` VARCHAR(255),
`orgcode` VARCHAR(255) COMMENT '个人客户存身份证',
`license_img` VARCHAR(255) COMMENT '个人客户存身份证照片',
`id_img` VARCHAR(255) COMMENT '个人客户存身份证背面照片',
`parentid` VARCHAR(255),
`org_type` VARCHAR(255) COMMENT '0:业主机构1:分销商2:公司客户3:个人客户4供应商',
`sitename` VARCHAR(255),
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='机构';
CREATE INDEX `idx1` ON `organization` (`unique:orgname`);
CREATE TABLE IF NOT EXISTS `orgtypes` (
`id` VARCHAR(255) NOT NULL,
`orgid` VARCHAR(255),
`orgtypeid` VARCHAR(255),
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='机构拥有角色';
CREATE TABLE IF NOT EXISTS `permission` (
`id` VARCHAR(255) NOT NULL,
`name` VARCHAR(255),
`description` VARCHAR(255),
`parentid` VARCHAR(255),
`path` VARCHAR(255),
`icon` VARCHAR(255),
`permtype` VARCHAR(255),
`need_audit` VARCHAR(255),
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='权限';
CREATE INDEX `idx1` ON `permission` (`unique:path`);
CREATE TABLE IF NOT EXISTS `role` (
`id` VARCHAR(255) NOT NULL,
`orgtypeid` VARCHAR(255) DEFAULT '0',
`name` VARCHAR(255),
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT=' 角色';
CREATE TABLE IF NOT EXISTS `rolepermission` (
`id` VARCHAR(255) NOT NULL,
`roleid` VARCHAR(255),
`permid` VARCHAR(255),
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='角色权限表';
CREATE TABLE IF NOT EXISTS `userapp` (
`id` VARCHAR(255) NOT NULL,
`userid` VARCHAR(255) DEFAULT '0',
`appname` VARCHAR(255),
`apikey` VARCHAR(255),
`enabled_date` DATE,
`expired_date` DATE,
`allowed_ips` VARCHAR(255),
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户应用';
CREATE TABLE IF NOT EXISTS `userdepartment` (
`id` VARCHAR(255) NOT NULL,
`userid` VARCHAR(255) COMMENT '一个用户可以属于多个部门',
`depid` VARCHAR(255),
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户部门表';
CREATE TABLE IF NOT EXISTS `userrole` (
`id` VARCHAR(255) NOT NULL,
`userid` VARCHAR(255),
`roleid` VARCHAR(255),
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户角色';
-- Module: appbase (from xlsx)
CREATE TABLE IF NOT EXISTS `appcodes` (
`id` VARCHAR(255) NOT NULL,
`name` VARCHAR(255),
`hierarchy_flg` VARCHAR(255) COMMENT '0:无层次',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='应用编码表';
CREATE TABLE IF NOT EXISTS `appcodes_kv` (
`id` VARCHAR(255) NOT NULL,
`parentid` VARCHAR(255),
`k` VARCHAR(255),
`v` VARCHAR(255),
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='编码键值表';
CREATE INDEX `idx1` ON `appcodes_kv` (`unique:parentid`, `k`);
CREATE INDEX `idx2` ON `appcodes_kv` (`index:parentid`);
CREATE TABLE IF NOT EXISTS `params` (
`id` VARCHAR(255) NOT NULL,
`params_name` VARCHAR(255),
`params_value` VARCHAR(255),
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='参数表';
CREATE TABLE IF NOT EXISTS `svgicon` (
`id` VARCHAR(255) NOT NULL,
`icon` TEXT,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='图标';