v1.0.51: 部署配套 - ①config/database.php 支持 env 注入(DB_HOST/PORT/NAME/USER/PASS/CHARSET,缺省回落本地开发);②新增sql/schema_v1.0.51_base.sql全量业务库基准schema(仓库原仅增量迁移,27表按代码反推重建,含source_channels种子);③新增deploy/容器化编排(php8.2-fpm+nginx+mysql8.0,web暴露宿主8081,DB仅内网,对齐license_server既有compose风格):Dockerfile/nginx/default.conf/mysql初始化(01导入基准+字典/02种子超管角色与admin账号及12个迁移版本标记)/.env.example;④.gitignore防护.env与运行产物. 已在服务器106.55.169.92用一次性mysql:8.0容器验证:27表+字典(3632区域/12来源渠道)+admin/超管+cert版本标记全部导入成功

Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
qianqiuwanzi
2026-09-17 15:30:19 +08:00
parent c86f08c325
commit 43bd11db0b
9 changed files with 744 additions and 9 deletions
+522
View File
@@ -0,0 +1,522 @@
-- ============================================================
-- SuperLink 基准建库脚本(Fresh Install Base Schema) v1.0.51
-- 用途:全新部署时一次性建立全部业务表(当前形态,含历次迁移结果)。
-- 由仓库"增量迁移缺失基准 schema"这一现状补建:主业务表定义从
-- api 代码字段白名单 + INSERT/SELECT 语句反推,字典/属性/计划等表
-- 直接采用迁移文件中的 CREATE TABLE 原文。
-- 约定:v1.0.16 后所有业务表时间字段为 DATE;id 一律 INT UNSIGNED AUTO_INCREMENT;
-- 字符集 utf8mb4 / 排序 utf8mb4_unicode_ci。
-- 执行顺序:本文件 → dict_seed.sql → 系统初始数据(admin)。
-- ============================================================
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ------------------------------------------------------------
-- 0) 数据字典(定义见 migration_v1.0.16 / v1.0.18,数据由 dict_seed.sql 注入)
-- ------------------------------------------------------------
CREATE TABLE IF NOT EXISTS `data_dict_country` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`code` VARCHAR(50) NOT NULL COMMENT '国家/地区编码',
`name` VARCHAR(100) NOT NULL COMMENT '国家/地区中文名',
`sort_order` INT NOT NULL DEFAULT 0 COMMENT '排序',
`is_active` TINYINT(1) UNSIGNED NOT NULL DEFAULT 1 COMMENT '启用状态',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_code` (`code`),
KEY `idx_name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='国家地区编码字典';
CREATE TABLE IF NOT EXISTS `data_dict_area` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`code` VARCHAR(50) NOT NULL COMMENT '行政区划编码',
`name` VARCHAR(100) NOT NULL COMMENT '行政区划名称',
`parent_code` VARCHAR(50) DEFAULT NULL COMMENT '上级行政区划编码',
`sort_order` INT NOT NULL DEFAULT 0 COMMENT '排序',
`is_active` TINYINT(1) UNSIGNED NOT NULL DEFAULT 1 COMMENT '启用状态',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_code` (`code`),
KEY `idx_parent` (`parent_code`),
KEY `idx_name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='行政区划编码字典';
CREATE TABLE IF NOT EXISTS `data_dict_industry` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`code` VARCHAR(50) NOT NULL COMMENT '行业编码',
`name` VARCHAR(100) NOT NULL COMMENT '行业名称',
`parent_code` VARCHAR(50) DEFAULT NULL COMMENT '上级行业编码',
`sort_order` INT NOT NULL DEFAULT 0 COMMENT '排序',
`is_active` TINYINT(1) UNSIGNED NOT NULL DEFAULT 1 COMMENT '启用状态',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_code` (`code`),
KEY `idx_parent` (`parent_code`),
KEY `idx_name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='招标行业分类字典';
CREATE TABLE IF NOT EXISTS `data_dict_certificate` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`code` VARCHAR(50) NULL DEFAULT NULL COMMENT '证书类型枚举编码',
`name` VARCHAR(100) NOT NULL COMMENT '证书类型名称',
`sort_order` INT NOT NULL DEFAULT 0 COMMENT '排序',
`is_active` TINYINT(1) UNSIGNED NOT NULL DEFAULT 1 COMMENT '启用状态',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_code` (`code`),
KEY `idx_name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='证书类型枚举字典';
CREATE TABLE IF NOT EXISTS `data_dict_company_type` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`code` VARCHAR(50) NULL DEFAULT NULL COMMENT '企业类型编码',
`name` VARCHAR(100) NOT NULL COMMENT '企业类型名称',
`sort_order` INT NOT NULL DEFAULT 0 COMMENT '排序',
`is_active` TINYINT(1) UNSIGNED NOT NULL DEFAULT 1 COMMENT '启用状态',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_code` (`code`),
KEY `idx_name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='企业类型字典(对应 companies.legal_form)';
CREATE TABLE IF NOT EXISTS `source_channels` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`name` VARCHAR(50) NOT NULL COMMENT '渠道名称',
`sort_order` INT NOT NULL DEFAULT 0 COMMENT '排序',
`is_active` TINYINT(1) UNSIGNED NOT NULL DEFAULT 1 COMMENT '启用状态',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='来源渠道字典';
-- 来源渠道默认数据
INSERT INTO `source_channels` (`name`, `sort_order`) VALUES
('展会', 1), ('SNS/社交媒体', 2), ('竞价广告', 3), ('搜索引擎自然流量', 4),
('行业媒体/门户', 5), ('转介绍', 6), ('电话销售', 7), ('邮件营销', 8),
('地推', 9), ('代理商/渠道', 10), ('官网咨询', 11), ('其他', 99);
-- 企业类型字典默认数据
INSERT INTO `data_dict_company_type` (`code`, `name`, `sort_order`) VALUES
('llc', '有限责任公司', 1), ('joint_stock', '股份有限公司', 2), ('partnership', '合伙企业', 3),
('sole_proprietorship', '个人独资企业', 4), ('state_owned', '国有企业', 5), ('collective', '集体所有制企业', 6),
('foreign_invested', '外商投资企业', 7), ('joint_venture', '中外合资企业', 8), ('other', '其他', 99);
-- ------------------------------------------------------------
-- 1) 客户主体:企业
-- ------------------------------------------------------------
CREATE TABLE IF NOT EXISTS `companies` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`display_name` VARCHAR(191) NOT NULL DEFAULT '' COMMENT '显示名称',
`name_zh` VARCHAR(191) DEFAULT NULL COMMENT '中文名',
`business_role` VARCHAR(50) DEFAULT NULL COMMENT '业务类型',
`country` VARCHAR(100) DEFAULT NULL COMMENT '国家/地区',
`registration_number` VARCHAR(100) DEFAULT NULL COMMENT '统一社会信用代码/注册号',
`address` VARCHAR(255) DEFAULT NULL COMMENT '地址',
`legal_form` VARCHAR(50) DEFAULT NULL COMMENT '企业类型(公司)',
`legal_representative` VARCHAR(100) DEFAULT NULL COMMENT '法定代表人',
`business_scope` TEXT DEFAULT NULL COMMENT '经营范围',
`established_date` DATE DEFAULT NULL COMMENT '成立日期',
`registered_capital` VARCHAR(50) DEFAULT NULL COMMENT '注册资本',
`industry` VARCHAR(100) DEFAULT NULL COMMENT '行业',
`industry_subdivision` VARCHAR(100) DEFAULT NULL COMMENT '行业细分',
`latest_employee_count` INT DEFAULT NULL COMMENT '最新员工数',
`latest_annual_revenue` VARCHAR(50) DEFAULT NULL COMMENT '年营收',
`is_listed` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否上市 0/1',
`stock_code` VARCHAR(30) DEFAULT NULL COMMENT '股票代码',
`website` VARCHAR(255) DEFAULT NULL COMMENT '官网',
`source_channel` VARCHAR(50) DEFAULT NULL COMMENT '来源渠道',
`source_detail` VARCHAR(255) DEFAULT NULL COMMENT '来源详情',
`is_active` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '有效 0/1',
`is_incomplete` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '完整度不达标标记',
`created_at` DATE DEFAULT NULL COMMENT '创建日期',
`updated_at` DATE DEFAULT NULL COMMENT '更新日期',
PRIMARY KEY (`id`),
KEY `idx_is_active` (`is_active`),
KEY `idx_source_channel` (`source_channel`),
KEY `idx_name_zh` (`name_zh`),
KEY `idx_industry` (`industry`),
KEY `idx_created_at` (`created_at`),
KEY `idx_incomplete` (`is_incomplete`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='企业表';
-- ------------------------------------------------------------
-- 2) 客户主体:人员
-- ------------------------------------------------------------
CREATE TABLE IF NOT EXISTS `persons` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`union_id` VARCHAR(64) DEFAULT NULL COMMENT '外部/统一ID(去重线索)',
`full_name` VARCHAR(100) DEFAULT NULL COMMENT '姓名',
`gender` VARCHAR(20) DEFAULT NULL COMMENT '性别(男/女/未知)',
`nationality` VARCHAR(50) DEFAULT NULL COMMENT '国籍',
`id_type` VARCHAR(30) DEFAULT NULL COMMENT '证件类型',
`id_number` VARCHAR(100) DEFAULT NULL COMMENT '身份证号码',
`education` VARCHAR(30) DEFAULT NULL COMMENT '学历',
`graduated_from` VARCHAR(191) DEFAULT NULL COMMENT '毕业院校',
`hometown` VARCHAR(100) DEFAULT NULL COMMENT '家乡',
`work_location` VARCHAR(100) DEFAULT NULL COMMENT '工作所在地',
`source_channel` VARCHAR(50) DEFAULT NULL COMMENT '来源渠道',
`source_detail` VARCHAR(255) DEFAULT NULL COMMENT '来源详情',
`is_active` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '有效 0/1',
`is_incomplete` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '完整度不达标标记',
`created_at` DATE DEFAULT NULL COMMENT '创建日期',
`updated_at` DATE DEFAULT NULL COMMENT '更新日期',
PRIMARY KEY (`id`),
KEY `idx_is_active` (`is_active`),
KEY `idx_full_name` (`full_name`),
KEY `idx_source_channel` (`source_channel`),
KEY `idx_work_location` (`work_location`),
KEY `idx_incomplete` (`is_incomplete`),
KEY `idx_created_at` (`created_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='人员表';
-- ------------------------------------------------------------
-- 3) 社媒/联系方式(多态归属:owner_type='company'|'person',platform 可为 phone/email/社媒名)
-- ------------------------------------------------------------
CREATE TABLE IF NOT EXISTS `social_accounts` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`owner_type` VARCHAR(20) NOT NULL COMMENT '归属类型 company/person',
`owner_id` INT UNSIGNED NOT NULL COMMENT '归属主体ID',
`platform` VARCHAR(30) NOT NULL COMMENT '平台:phone/email/wechat/weibo/douyin/...',
`account_id` VARCHAR(191) NOT NULL COMMENT '账号号/手机/邮箱',
`profile_url` VARCHAR(500) DEFAULT NULL COMMENT '主页链接',
`remark` VARCHAR(255) DEFAULT NULL COMMENT '备注',
`is_primary` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否常用 1/0',
`is_defult` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否常用(备用字段)1/0',
`is_active` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '有效 0/1',
`is_incomplete`TINYINT(1) NOT NULL DEFAULT 0 COMMENT '完整度标记',
`created_at` DATE DEFAULT NULL COMMENT '创建日期',
PRIMARY KEY (`id`),
KEY `idx_owner` (`owner_type`, `owner_id`),
KEY `idx_platform` (`platform`),
KEY `idx_account` (`account_id`),
KEY `idx_incomplete` (`is_incomplete`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='社媒账号/联系方式表';
-- ------------------------------------------------------------
-- 4) 媒体商业属性(一人/一账号的多条商业评估)
-- ------------------------------------------------------------
CREATE TABLE IF NOT EXISTS `media_commercial_attributes` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`social_account_id` INT UNSIGNED NOT NULL COMMENT '关联 social_accounts.id',
`account_level` VARCHAR(50) DEFAULT NULL COMMENT '账号等级',
`content_categories` VARCHAR(255) DEFAULT NULL COMMENT '内容领域',
`follower_count` INT DEFAULT NULL COMMENT '粉丝数',
`avg_read_count` INT DEFAULT NULL COMMENT '平均阅读',
`certification_type` VARCHAR(50) DEFAULT NULL COMMENT '认证类型',
`special_requirements` TEXT DEFAULT NULL COMMENT '特殊要求',
`media_remark` TEXT DEFAULT NULL COMMENT '评估备注',
`is_incomplete` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '完整度标记',
`created_at` DATE DEFAULT NULL COMMENT '创建日期',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_social_account` (`social_account_id`),
KEY `idx_incomplete` (`is_incomplete`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='媒体商业属性表';
-- ------------------------------------------------------------
-- 5) 需求(企业需求线索)
-- ------------------------------------------------------------
CREATE TABLE IF NOT EXISTS `company_needs` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`company_id` INT UNSIGNED DEFAULT NULL COMMENT '关联企业',
`contact_person` VARCHAR(100) DEFAULT NULL COMMENT '联系人',
`contact_phone` VARCHAR(50) DEFAULT NULL COMMENT '联系电话',
`contact_email` VARCHAR(100) DEFAULT NULL COMMENT '联系邮箱',
`need_category` VARCHAR(100) DEFAULT NULL COMMENT '需求类别',
`target_product_category` VARCHAR(100) DEFAULT NULL COMMENT '目标产品品类',
`application_scenario` VARCHAR(255) DEFAULT NULL COMMENT '应用场景',
`description` TEXT DEFAULT NULL COMMENT '需求描述',
`status` VARCHAR(30) DEFAULT NULL COMMENT '状态',
`is_valid` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '有效 0/1',
`is_active` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '启用 0/1',
`created_at` DATE DEFAULT NULL COMMENT '创建日期',
`updated_at` DATE DEFAULT NULL COMMENT '更新日期',
PRIMARY KEY (`id`),
KEY `idx_company` (`company_id`),
KEY `idx_category` (`need_category`),
KEY `idx_is_valid` (`is_valid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='需求表';
-- ------------------------------------------------------------
-- 6) 人员工作履历
-- ------------------------------------------------------------
CREATE TABLE IF NOT EXISTS `person_work_experiences` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`person_id` INT UNSIGNED NOT NULL COMMENT '关联人员',
`company_id` INT UNSIGNED DEFAULT NULL COMMENT '任职企业',
`position` VARCHAR(191) DEFAULT NULL COMMENT '职位',
`department` VARCHAR(100) DEFAULT NULL COMMENT '部门',
`job_level` VARCHAR(50) DEFAULT NULL COMMENT '职级',
`start_date` DATE DEFAULT NULL COMMENT '开始时间',
`end_date` DATE DEFAULT NULL COMMENT '结束时间',
`is_current` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否现任 1/0',
`created_at` DATE DEFAULT NULL COMMENT '创建日期',
PRIMARY KEY (`id`),
KEY `idx_person` (`person_id`),
KEY `idx_company` (`company_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='人员工作履历表';
-- ------------------------------------------------------------
-- 7) 企业产品(类别 + 定位 + 系列)
-- ------------------------------------------------------------
CREATE TABLE IF NOT EXISTS `company_products` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`company_id` INT UNSIGNED NOT NULL COMMENT '关联企业',
`category_name` VARCHAR(100) NOT NULL COMMENT '产品类别名',
`category_description` VARCHAR(255) DEFAULT NULL COMMENT '类别说明',
`positioning` TEXT DEFAULT NULL COMMENT '产品基本定位(商业定位介绍)',
`series` VARCHAR(200) DEFAULT NULL COMMENT '包含系列',
`is_core` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否核心产品',
`is_active` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '启用 0/1',
`created_at` DATE DEFAULT NULL COMMENT '创建日期',
PRIMARY KEY (`id`),
KEY `idx_company` (`company_id`),
KEY `idx_core` (`is_core`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='企业产品表';
-- 产品参数 EAV(定义见 migration_v1.0.18)
CREATE TABLE IF NOT EXISTS `company_products_attr` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`industry` VARCHAR(100) NOT NULL,
`attr_name` VARCHAR(50) NOT NULL,
`attr_type` ENUM('string','number','boolean','date') NOT NULL DEFAULT 'string',
`unit` VARCHAR(20) DEFAULT NULL,
`sort_order` INT NOT NULL DEFAULT 0,
`is_active` TINYINT(1) UNSIGNED NOT NULL DEFAULT 1,
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `uk_industry_attr` (`industry`, `attr_name`),
KEY `idx_industry` (`industry`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='产品参数属性定义表(EAV)';
CREATE TABLE IF NOT EXISTS `company_products_attr_value` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`product_id` INT UNSIGNED NOT NULL,
`attr_id` INT UNSIGNED NOT NULL,
`value_string` TEXT DEFAULT NULL,
`value_number` DECIMAL(20,4) DEFAULT NULL,
`value_boolean` TINYINT(1) DEFAULT NULL,
`value_date` DATE DEFAULT NULL,
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `uk_product_attr` (`product_id`, `attr_id`),
KEY `idx_product` (`product_id`),
KEY `idx_attr` (`attr_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='产品参数值表(EAV)';
-- ------------------------------------------------------------
-- 8) 企业文档
-- ------------------------------------------------------------
CREATE TABLE IF NOT EXISTS `company_documents` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`company_id` INT UNSIGNED DEFAULT NULL COMMENT '关联企业',
`doc_name` VARCHAR(255) NOT NULL COMMENT '文档名称',
`storage_path` VARCHAR(500) DEFAULT NULL COMMENT '存储路径',
`file_type` VARCHAR(30) DEFAULT NULL COMMENT '文件类型(pdf/word/xlsx/图片)',
`is_current` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否现行 1/0',
`document_source` VARCHAR(100) DEFAULT NULL COMMENT '文档来源',
`tags` VARCHAR(255) DEFAULT NULL COMMENT '标签',
`publish_date` DATE DEFAULT NULL COMMENT '发布日期',
`created_at` DATE DEFAULT NULL COMMENT '创建日期',
`update_time` DATETIME DEFAULT NULL COMMENT '更新时间',
`is_active` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '有效 0/1',
PRIMARY KEY (`id`),
KEY `idx_company` (`company_id`),
KEY `idx_file_type` (`file_type`),
KEY `idx_active` (`is_active`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='企业文档表';
-- ------------------------------------------------------------
-- 9) 财务与资质
-- ------------------------------------------------------------
CREATE TABLE IF NOT EXISTS `company_financials` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`company_id` INT UNSIGNED NOT NULL COMMENT '关联企业',
`fiscal_year` INT NOT NULL COMMENT '财年',
`employee_count` INT DEFAULT NULL,
`total_revenue` DECIMAL(20,2) DEFAULT NULL,
`net_profit` DECIMAL(20,2) DEFAULT NULL,
`total_assets` DECIMAL(20,2) DEFAULT NULL,
`total_liabilities` DECIMAL(20,2) DEFAULT NULL,
`owner_equity` DECIMAL(20,2) DEFAULT NULL,
`gross_margin` DECIMAL(10,4) DEFAULT NULL,
`net_margin` DECIMAL(10,4) DEFAULT NULL,
`debt_ratio` DECIMAL(10,4) DEFAULT NULL,
`financial_report_url` VARCHAR(500) DEFAULT NULL,
`data_source` VARCHAR(100) DEFAULT '手动录入',
`created_at` DATE DEFAULT NULL COMMENT '创建日期',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_company_year` (`company_id`, `fiscal_year`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='企业年度财务明细表';
CREATE TABLE IF NOT EXISTS `company_certifications` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`company_id` INT UNSIGNED NOT NULL COMMENT '关联企业',
`certification_type_id` INT UNSIGNED DEFAULT NULL COMMENT '证书类型(字典)',
`certificate_number` VARCHAR(100) DEFAULT NULL COMMENT '证书编号',
`level` VARCHAR(50) DEFAULT NULL COMMENT '级别',
`issuing_authority` VARCHAR(200) DEFAULT NULL COMMENT '颁证机构',
`issue_date` DATE DEFAULT NULL COMMENT '发证日期',
`expiry_date` DATE DEFAULT NULL COMMENT '有效期至',
`created_at` DATE DEFAULT NULL COMMENT '创建日期',
PRIMARY KEY (`id`),
KEY `idx_company` (`company_id`),
KEY `idx_cert_type` (`certification_type_id`),
CONSTRAINT `fk_company_cert_dict` FOREIGN KEY (`certification_type_id`)
REFERENCES `data_dict_certificate` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='企业资质认证表';
CREATE TABLE IF NOT EXISTS `company_relations` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`company_id` INT UNSIGNED DEFAULT NULL COMMENT '企业A',
`related_company_id` INT UNSIGNED DEFAULT NULL COMMENT '关联企业B',
`related_company_name` VARCHAR(191) DEFAULT NULL COMMENT '关联企业名称',
`relation_type` VARCHAR(50) DEFAULT NULL COMMENT '关系类型',
`established_date` DATE DEFAULT NULL COMMENT '关系建立日期',
`note` VARCHAR(255) DEFAULT NULL COMMENT '备注',
`is_active` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '有效 0/1',
`created_at` DATE DEFAULT NULL COMMENT '创建日期',
`updated_at` DATE DEFAULT NULL COMMENT '更新日期',
PRIMARY KEY (`id`),
KEY `idx_company` (`company_id`),
KEY `idx_related` (`related_company_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='企业关联关系表';
-- ------------------------------------------------------------
-- 10) 硬数据碎片(preliminary_data,v1.0.48 重构后形态)
-- ------------------------------------------------------------
CREATE TABLE IF NOT EXISTS `preliminary_data` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`source_type` VARCHAR(20) DEFAULT NULL COMMENT '碎片类型 company/person/product/need/mixed',
`company_name` VARCHAR(191) DEFAULT NULL COMMENT '企业名(核心)',
`person_name` VARCHAR(100) DEFAULT NULL COMMENT '联系人(核心)',
`contact_phone` VARCHAR(50) DEFAULT NULL COMMENT '联系电话(核心)',
`contact_email` VARCHAR(100) DEFAULT NULL COMMENT '联系邮箱(核心)',
`industry` VARCHAR(100) DEFAULT NULL COMMENT '行业',
`registration_number` VARCHAR(100) DEFAULT NULL COMMENT '注册号(重要)',
`business_role` VARCHAR(50) DEFAULT NULL COMMENT '业务类型(重要)',
`country` VARCHAR(100) DEFAULT NULL COMMENT '国家/地区(重要)',
`address` VARCHAR(255) DEFAULT NULL COMMENT '地址(重要)',
`work_location` VARCHAR(100) DEFAULT NULL COMMENT '工作所在地(重要)',
`id_number` VARCHAR(100) DEFAULT NULL COMMENT '身份证号码(重要)',
`platform` VARCHAR(50) DEFAULT NULL COMMENT '社媒平台(核心)',
`account_id` VARCHAR(200) DEFAULT NULL COMMENT '社媒账号ID(核心)',
`profile_url` VARCHAR(500) DEFAULT NULL COMMENT '主页链接(重要)',
`source_channel` VARCHAR(50) DEFAULT NULL COMMENT '来源渠道',
`source_detail` VARCHAR(255) DEFAULT NULL COMMENT '来源详情',
`converted_type` VARCHAR(20) DEFAULT NULL COMMENT '转换目标类型 companies/persons/...',
`converted_id` VARCHAR(64) DEFAULT NULL COMMENT '转换后目标表ID(非空=已转换/已处理)',
`recorded_by` INT UNSIGNED DEFAULT NULL COMMENT '录入用户',
`label` VARCHAR(50) DEFAULT NULL COMMENT '标签',
`remark` TEXT DEFAULT NULL COMMENT '备注',
`is_active` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '有效 0/1',
`created_at` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '录入时间',
`processed_at` DATETIME DEFAULT NULL COMMENT '处理时间',
PRIMARY KEY (`id`),
KEY `idx_source_type` (`source_type`),
KEY `idx_converted` (`converted_id`),
KEY `idx_is_active` (`is_active`),
KEY `idx_channel` (`source_channel`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='硬数据碎片表';
-- ------------------------------------------------------------
-- 11) 渠道新增计划(定义见 migration_v1.0.18,补 cost 列)
-- ------------------------------------------------------------
CREATE TABLE IF NOT EXISTS `channel_plans` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`channel_type` VARCHAR(50) NOT NULL COMMENT '渠道类别(= source_channel 枚举)',
`source_detail` VARCHAR(255) DEFAULT NULL COMMENT '来源详情',
`industry` VARCHAR(100) DEFAULT NULL COMMENT '所属行业',
`cost` DECIMAL(12,2) DEFAULT NULL COMMENT '计划成本/投入',
`start_date` DATE DEFAULT NULL COMMENT '时间窗口开始',
`end_date` DATE DEFAULT NULL COMMENT '时间窗口结束',
`remark` VARCHAR(255) DEFAULT NULL COMMENT '备注说明',
`status` ENUM('待启动','已执行','错过') NOT NULL DEFAULT '待启动' COMMENT '状态反馈',
`is_active` TINYINT(1) UNSIGNED NOT NULL DEFAULT 1 COMMENT '启用状态',
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
KEY `idx_channel_type` (`channel_type`),
KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='渠道新增计划表';
-- ------------------------------------------------------------
-- 12) 系统:用户 / 角色 / 日志 / 登录尝试 / 迁移版本
-- ------------------------------------------------------------
CREATE TABLE IF NOT EXISTS `system_users` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`username` VARCHAR(50) NOT NULL COMMENT '登录账号',
`password` VARCHAR(190) NOT NULL COMMENT '密码(bcrypt)',
`real_name` VARCHAR(100) DEFAULT NULL COMMENT '真实姓名',
`role_id` INT UNSIGNED DEFAULT NULL COMMENT '角色',
`is_active` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '启用 0/1',
`last_login_time` DATETIME DEFAULT NULL COMMENT '最后登录时间',
`last_login_ip` VARCHAR(45) DEFAULT NULL COMMENT '最后登录IP',
`created_at` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_username` (`username`),
KEY `idx_role` (`role_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='系统用户表';
CREATE TABLE IF NOT EXISTS `system_roles` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`role_name` VARCHAR(50) NOT NULL COMMENT '角色名',
`permissions` TEXT DEFAULT NULL COMMENT '权限集(JSON 数组)',
`is_active` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '启用 0/1',
`created_at` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
KEY `idx_active` (`is_active`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='系统角色表';
CREATE TABLE IF NOT EXISTS `system_logs` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`user_id` INT UNSIGNED DEFAULT NULL COMMENT '操作用户ID',
`username` VARCHAR(50) DEFAULT NULL COMMENT '操作账号',
`action` VARCHAR(50) DEFAULT NULL COMMENT '操作动作',
`module` VARCHAR(50) DEFAULT NULL COMMENT '操作模块',
`target_table` VARCHAR(50) DEFAULT NULL COMMENT '目标表',
`target_id` INT UNSIGNED DEFAULT NULL COMMENT '目标ID',
`content` TEXT DEFAULT NULL COMMENT '操作内容(JSON)',
`ip` VARCHAR(45) DEFAULT NULL COMMENT '来源IP',
`created_at` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (`id`),
KEY `idx_user` (`user_id`),
KEY `idx_module` (`module`),
KEY `idx_created` (`created_at`),
KEY `idx_target` (`target_table`, `target_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='系统操作日志表';
CREATE TABLE IF NOT EXISTS `system_login_attempts` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`username` VARCHAR(50) NOT NULL DEFAULT '',
`ip` VARCHAR(45) NOT NULL DEFAULT '',
`success` TINYINT NOT NULL DEFAULT 0,
`attempt_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
KEY `idx_ip_user_time` (`ip`, `username`, `attempt_time`),
KEY `idx_attempt_time` (`attempt_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='登录尝试记录(限流/防爆破)';
CREATE TABLE IF NOT EXISTS `schema_versions` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`version` VARCHAR(64) NOT NULL,
`applied_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
`checksum` CHAR(32) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `uk_version` (`version`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='数据库迁移版本表';
-- ------------------------------------------------------------
-- 13) 文档链接(competitor_data / 归档)
-- ------------------------------------------------------------
CREATE TABLE IF NOT EXISTS `document_links` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`company_id` INT UNSIGNED DEFAULT NULL COMMENT '关联企业',
`doc_name` VARCHAR(255) DEFAULT NULL COMMENT '文档名称',
`url` VARCHAR(500) DEFAULT NULL COMMENT '链接',
`file_type` VARCHAR(30) DEFAULT NULL COMMENT '类型',
`source` VARCHAR(100) DEFAULT NULL COMMENT '来源',
`publish_date` DATE DEFAULT NULL COMMENT '发布日期',
`created_at` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`is_active` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '有效 0/1',
PRIMARY KEY (`id`),
KEY `idx_company` (`company_id`),
KEY `idx_active` (`is_active`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='文档链接表';
SET FOREIGN_KEY_CHECKS = 1;