feat: 接入新华社工商信息同步

This commit is contained in:
wkc
2026-07-29 17:56:27 +08:00
parent 2bcba71259
commit 5d004a66e8
72 changed files with 2610 additions and 59 deletions

View File

@@ -0,0 +1,180 @@
-- 新华社工商信息同步接入
-- MySQL 5.7/8.0 幂等迁移,统一字符集与排序规则。
SET NAMES utf8mb4 COLLATE utf8mb4_general_ci;
CREATE TABLE IF NOT EXISTS `ccdi_enterpriseinfo_query_cache` (
`info_id` bigint NOT NULL AUTO_INCREMENT,
`query_param` varchar(255) COLLATE utf8mb4_general_ci NOT NULL,
`query_result` longtext COLLATE utf8mb4_general_ci NOT NULL,
`query_type` varchar(64) COLLATE utf8mb4_general_ci NOT NULL,
`created_date` datetime NOT NULL,
`valid_date` datetime NOT NULL,
PRIMARY KEY (`info_id`),
UNIQUE KEY `uk_enterpriseinfo_query` (`query_param`,`query_type`),
KEY `idx_enterpriseinfo_valid_date` (`valid_date`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='工商信息原始响应缓存';
ALTER TABLE `ccdi_enterpriseinfo_query_cache`
MODIFY `query_result` LONGTEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
CREATE TABLE IF NOT EXISTS `ccdi_enterprise_shareholder` (
`shareholder_id` bigint NOT NULL AUTO_INCREMENT,
`social_credit_code` varchar(64) COLLATE utf8mb4_general_ci NOT NULL,
`shareholder_seq` int DEFAULT NULL,
`shareholder_name` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL,
`shareholder_type` varchar(100) COLLATE utf8mb4_general_ci DEFAULT NULL,
`shareholder_credit_code` varchar(64) COLLATE utf8mb4_general_ci DEFAULT NULL,
`stock_percent` decimal(12,6) DEFAULT NULL,
`subscribed_capital` decimal(20,6) DEFAULT NULL,
`capital_unit` varchar(32) COLLATE utf8mb4_general_ci DEFAULT NULL,
`cache_info_id` bigint DEFAULT NULL,
`sync_time` datetime DEFAULT NULL,
`create_by` varchar(64) COLLATE utf8mb4_general_ci DEFAULT NULL,
`create_time` datetime DEFAULT NULL,
`update_by` varchar(64) COLLATE utf8mb4_general_ci DEFAULT NULL,
`update_time` datetime DEFAULT NULL,
PRIMARY KEY (`shareholder_id`),
KEY `idx_enterprise_shareholder_credit` (`social_credit_code`),
KEY `idx_enterprise_shareholder_cache` (`cache_info_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='实体库企业完整股东';
CREATE TABLE IF NOT EXISTS `ccdi_project_counterparty_enterprise` (
`counterparty_enterprise_id` bigint NOT NULL AUTO_INCREMENT,
`project_id` bigint NOT NULL,
`counterparty_name` varchar(255) COLLATE utf8mb4_general_ci NOT NULL,
`social_credit_code` varchar(64) COLLATE utf8mb4_general_ci DEFAULT NULL,
`enterprise_name` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL,
`registered_capital` decimal(20,6) DEFAULT NULL,
`registered_capital_unit` varchar(32) COLLATE utf8mb4_general_ci DEFAULT NULL,
`register_date` date DEFAULT NULL,
`establish_date` date DEFAULT NULL,
`industry_code` varchar(100) COLLATE utf8mb4_general_ci DEFAULT NULL,
`industry_name` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL,
`organization_type_code` varchar(100) COLLATE utf8mb4_general_ci DEFAULT NULL,
`organization_type_name` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL,
`region_code` varchar(100) COLLATE utf8mb4_general_ci DEFAULT NULL,
`region_name` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL,
`register_address` varchar(500) COLLATE utf8mb4_general_ci DEFAULT NULL,
`employee_count` int DEFAULT NULL,
`legal_representative` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL,
`cache_info_id` bigint DEFAULT NULL,
`sync_time` datetime DEFAULT NULL,
`create_by` varchar(64) COLLATE utf8mb4_general_ci DEFAULT NULL,
`create_time` datetime DEFAULT NULL,
`update_by` varchar(64) COLLATE utf8mb4_general_ci DEFAULT NULL,
`update_time` datetime DEFAULT NULL,
PRIMARY KEY (`counterparty_enterprise_id`),
UNIQUE KEY `uk_project_counterparty_name` (`project_id`,`counterparty_name`),
KEY `idx_project_counterparty_credit` (`social_credit_code`),
KEY `idx_project_counterparty_cache` (`cache_info_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='项目对手方工商信息';
CREATE TABLE IF NOT EXISTS `ccdi_project_counterparty_shareholder` (
`shareholder_id` bigint NOT NULL AUTO_INCREMENT,
`counterparty_enterprise_id` bigint NOT NULL,
`shareholder_seq` int NOT NULL,
`shareholder_name` varchar(255) COLLATE utf8mb4_general_ci NOT NULL,
`shareholder_type` varchar(100) COLLATE utf8mb4_general_ci DEFAULT NULL,
`shareholder_credit_code` varchar(64) COLLATE utf8mb4_general_ci DEFAULT NULL,
`stock_percent` decimal(12,6) DEFAULT NULL,
`subscribed_capital` decimal(20,6) DEFAULT NULL,
`capital_unit` varchar(32) COLLATE utf8mb4_general_ci DEFAULT NULL,
`create_by` varchar(64) COLLATE utf8mb4_general_ci DEFAULT NULL,
`create_time` datetime DEFAULT NULL,
`update_by` varchar(64) COLLATE utf8mb4_general_ci DEFAULT NULL,
`update_time` datetime DEFAULT NULL,
PRIMARY KEY (`shareholder_id`),
KEY `idx_project_counterparty_shareholder_enterprise` (`counterparty_enterprise_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='项目对手方完整股东';
CREATE TABLE IF NOT EXISTS `sys_api_log` (
`log_id` bigint NOT NULL AUTO_INCREMENT,
`caller_user_id` bigint DEFAULT NULL,
`caller_username` varchar(64) COLLATE utf8mb4_general_ci NOT NULL,
`api_url` text COLLATE utf8mb4_general_ci NOT NULL,
`http_method` varchar(10) COLLATE utf8mb4_general_ci NOT NULL,
`content_type` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL,
`request_headers` longtext COLLATE utf8mb4_general_ci,
`request_params` longtext COLLATE utf8mb4_general_ci,
`response_status` int DEFAULT NULL,
`response_headers` longtext COLLATE utf8mb4_general_ci,
`response_body` longtext COLLATE utf8mb4_general_ci,
`call_status` char(1) COLLATE utf8mb4_general_ci NOT NULL,
`error_msg` longtext COLLATE utf8mb4_general_ci,
`cost_time` bigint NOT NULL,
`call_time` datetime NOT NULL,
PRIMARY KEY (`log_id`),
KEY `idx_api_log_call_time` (`call_time`),
KEY `idx_api_log_caller` (`caller_user_id`),
KEY `idx_api_log_status` (`call_status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='外部接口调用日志';
ALTER TABLE `ccdi_enterprise_shareholder`
CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
ALTER TABLE `ccdi_project_counterparty_enterprise`
CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
ALTER TABLE `ccdi_project_counterparty_shareholder`
CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
ALTER TABLE `sys_api_log`
MODIFY `caller_username` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
MODIFY `api_url` TEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
MODIFY `http_method` VARCHAR(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
MODIFY `call_status` CHAR(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
MODIFY `cost_time` BIGINT NOT NULL,
CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
-- 企业实体扩展字段MySQL 5.7 不支持 ADD COLUMN IF NOT EXISTS使用 information_schema 判定)。
SET @schema_name = DATABASE();
SET @ddl = IF(EXISTS(SELECT 1 FROM information_schema.columns WHERE table_schema=@schema_name AND table_name='ccdi_enterprise_base_info' AND column_name='registered_capital'), 'SELECT 1', 'ALTER TABLE ccdi_enterprise_base_info ADD COLUMN registered_capital DECIMAL(20,6) NULL COMMENT ''注册资本'' AFTER legal_representative');
PREPARE stmt FROM @ddl; EXECUTE stmt; DEALLOCATE PREPARE stmt;
SET @ddl = IF(EXISTS(SELECT 1 FROM information_schema.columns WHERE table_schema=@schema_name AND table_name='ccdi_enterprise_base_info' AND column_name='registered_capital_unit'), 'SELECT 1', 'ALTER TABLE ccdi_enterprise_base_info ADD COLUMN registered_capital_unit VARCHAR(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT ''注册资本单位'' AFTER registered_capital');
PREPARE stmt FROM @ddl; EXECUTE stmt; DEALLOCATE PREPARE stmt;
SET @ddl = IF(EXISTS(SELECT 1 FROM information_schema.columns WHERE table_schema=@schema_name AND table_name='ccdi_enterprise_base_info' AND column_name='register_date'), 'SELECT 1', 'ALTER TABLE ccdi_enterprise_base_info ADD COLUMN register_date DATE NULL COMMENT ''注册日期'' AFTER registered_capital_unit');
PREPARE stmt FROM @ddl; EXECUTE stmt; DEALLOCATE PREPARE stmt;
SET @ddl = IF(EXISTS(SELECT 1 FROM information_schema.columns WHERE table_schema=@schema_name AND table_name='ccdi_enterprise_base_info' AND column_name='region_code'), 'SELECT 1', 'ALTER TABLE ccdi_enterprise_base_info ADD COLUMN region_code VARCHAR(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT ''区域编码'' AFTER register_date');
PREPARE stmt FROM @ddl; EXECUTE stmt; DEALLOCATE PREPARE stmt;
SET @ddl = IF(EXISTS(SELECT 1 FROM information_schema.columns WHERE table_schema=@schema_name AND table_name='ccdi_enterprise_base_info' AND column_name='region_name'), 'SELECT 1', 'ALTER TABLE ccdi_enterprise_base_info ADD COLUMN region_name VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT ''区域名称'' AFTER region_code');
PREPARE stmt FROM @ddl; EXECUTE stmt; DEALLOCATE PREPARE stmt;
SET @ddl = IF(EXISTS(SELECT 1 FROM information_schema.columns WHERE table_schema=@schema_name AND table_name='ccdi_enterprise_base_info' AND column_name='employee_count'), 'SELECT 1', 'ALTER TABLE ccdi_enterprise_base_info ADD COLUMN employee_count INT NULL COMMENT ''从业人数'' AFTER region_name');
PREPARE stmt FROM @ddl; EXECUTE stmt; DEALLOCATE PREPARE stmt;
SET @ddl = IF(EXISTS(SELECT 1 FROM information_schema.columns WHERE table_schema=@schema_name AND table_name='ccdi_enterprise_base_info' AND column_name='cache_info_id'), 'SELECT 1', 'ALTER TABLE ccdi_enterprise_base_info ADD COLUMN cache_info_id BIGINT NULL COMMENT ''工商缓存ID'' AFTER employee_count');
PREPARE stmt FROM @ddl; EXECUTE stmt; DEALLOCATE PREPARE stmt;
SET @ddl = IF(EXISTS(SELECT 1 FROM information_schema.columns WHERE table_schema=@schema_name AND table_name='ccdi_enterprise_base_info' AND column_name='enterprise_sync_time'), 'SELECT 1', 'ALTER TABLE ccdi_enterprise_base_info ADD COLUMN enterprise_sync_time DATETIME NULL COMMENT ''工商同步时间'' AFTER cache_info_id');
PREPARE stmt FROM @ddl; EXECUTE stmt; DEALLOCATE PREPARE stmt;
ALTER TABLE `ccdi_enterprise_base_info` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
-- 只读接口日志菜单。
SET @log_parent_id = (SELECT menu_id FROM sys_menu WHERE menu_type='M' AND menu_name='日志管理' ORDER BY menu_id LIMIT 1);
SET @api_log_menu_id = (SELECT menu_id FROM sys_menu WHERE perms='monitor:apilog:list' ORDER BY menu_id LIMIT 1);
SET @next_menu_id = (SELECT next_id FROM (SELECT COALESCE(MAX(menu_id), 0) + 1 AS next_id FROM sys_menu) t);
SET @api_log_menu_id = COALESCE(@api_log_menu_id, @next_menu_id);
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query, route_name, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
SELECT @api_log_menu_id, '接口日志', @log_parent_id, 3, 'apilog', 'monitor/apilog/index', '', '', 1, 0, 'C', '0', '0', 'monitor:apilog:list', 'form', 'admin', NOW(), '', NULL, '只读外部接口调用日志'
WHERE @log_parent_id IS NOT NULL AND NOT EXISTS (SELECT 1 FROM sys_menu WHERE perms='monitor:apilog:list');
-- 工商刷新和历史补全权限。
SET @enterprise_menu_id = (SELECT menu_id FROM sys_menu WHERE perms='ccdi:enterpriseBaseInfo:list' ORDER BY menu_id LIMIT 1);
SET @project_menu_id = (SELECT menu_id FROM sys_menu WHERE perms='ccdi:project:list' ORDER BY menu_id LIMIT 1);
SET @next_menu_id = (SELECT next_id FROM (SELECT COALESCE(MAX(menu_id), 0) + 1 AS next_id FROM sys_menu) t);
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query, route_name, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
SELECT @next_menu_id, '实体工商刷新', @enterprise_menu_id, 6, '', NULL, '', '', 1, 0, 'F', '0', '0', 'ccdi:enterpriseBaseInfo:refresh', '#', 'admin', NOW(), '', NULL, ''
WHERE @enterprise_menu_id IS NOT NULL AND NOT EXISTS (SELECT 1 FROM sys_menu WHERE perms='ccdi:enterpriseBaseInfo:refresh');
SET @next_menu_id = (SELECT next_id FROM (SELECT COALESCE(MAX(menu_id), 0) + 1 AS next_id FROM sys_menu) t);
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query, route_name, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
SELECT @next_menu_id, '实体工商补全', @enterprise_menu_id, 7, '', NULL, '', '', 1, 0, 'F', '0', '0', 'ccdi:enterpriseBaseInfo:backfill', '#', 'admin', NOW(), '', NULL, ''
WHERE @enterprise_menu_id IS NOT NULL AND NOT EXISTS (SELECT 1 FROM sys_menu WHERE perms='ccdi:enterpriseBaseInfo:backfill');
SET @next_menu_id = (SELECT next_id FROM (SELECT COALESCE(MAX(menu_id), 0) + 1 AS next_id FROM sys_menu) t);
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query, route_name, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
SELECT @next_menu_id, '对手方工商刷新', @project_menu_id, 6, '', NULL, '', '', 1, 0, 'F', '0', '0', 'ccdi:project:counterpartyEnterprise:refresh', '#', 'admin', NOW(), '', NULL, ''
WHERE @project_menu_id IS NOT NULL AND NOT EXISTS (SELECT 1 FROM sys_menu WHERE perms='ccdi:project:counterpartyEnterprise:refresh');
SET @next_menu_id = (SELECT next_id FROM (SELECT COALESCE(MAX(menu_id), 0) + 1 AS next_id FROM sys_menu) t);
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query, route_name, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
SELECT @next_menu_id, '对手方工商补全', @project_menu_id, 7, '', NULL, '', '', 1, 0, 'F', '0', '0', 'ccdi:project:counterpartyEnterprise:backfill', '#', 'admin', NOW(), '', NULL, ''
WHERE @project_menu_id IS NOT NULL AND NOT EXISTS (SELECT 1 FROM sys_menu WHERE perms='ccdi:project:counterpartyEnterprise:backfill');
INSERT IGNORE INTO sys_role_menu (role_id, menu_id)
SELECT 1, menu_id FROM sys_menu
WHERE perms IN ('monitor:apilog:list', 'ccdi:enterpriseBaseInfo:refresh', 'ccdi:enterpriseBaseInfo:backfill',
'ccdi:project:counterpartyEnterprise:refresh', 'ccdi:project:counterpartyEnterprise:backfill');