Files
BMS/bms-back/sql/20261012_channel_product_sync.sql

126 lines
9.6 KiB
SQL
Raw Permalink 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.
-- ============================================================
-- 老系统 Oracle 渠道/产品 主数据镜像表 + 每日定时同步
-- 日期:2026-10-12
-- 数据源(WEISHI_USER,只读账号):
-- TAB_SERVICE_CHANNEL 服务渠道(ID/CHANNEL_CODE 均唯一,381 行)
-- TAB_LINE_PRODUCT 线路产品(ID/LINE_CODE 均唯一,527 行)
-- TAB_PRODUCT_CHANNEL 产品-渠道关系(GUID 唯一;同产品+渠道可多行,按国家/重量区分,1554 行)
-- 同步策略:按源主键 upsert(ON DUPLICATE KEY UPDATE),可重复执行;不删除源端已消失数据
-- ============================================================
-- 1. 服务渠道(TAB_SERVICE_CHANNEL 镜像)
CREATE TABLE IF NOT EXISTS `srv_service_channel` (
`id` varchar(50) NOT NULL COMMENT '老系统渠道ID(源主键 TAB_SERVICE_CHANNEL.ID)',
`channel_code` varchar(64) NOT NULL COMMENT '渠道编码',
`channel_name` varchar(200) NOT NULL COMMENT '渠道名称',
`service_code` varchar(32) DEFAULT NULL COMMENT '所属服务商编码(TAB_SERVICE_INFO.SERVICE_CODE)',
`service_name` varchar(200) DEFAULT NULL COMMENT '所属服务商名称',
`bl_open` char(1) DEFAULT NULL COMMENT '是否启用(1启用 0停用)',
`bl_multiple` char(1) DEFAULT NULL COMMENT '是否支持多票(1是 0否)',
`cargo_type` varchar(255) DEFAULT NULL COMMENT '货物类型',
`pay_type` varchar(255) DEFAULT NULL COMMENT '付款方式',
`shipper_name` varchar(255) DEFAULT NULL COMMENT '发货人名称',
`shipper_id` varchar(255) DEFAULT NULL COMMENT '发货人ID',
`query_type` varchar(20) DEFAULT NULL COMMENT '轨迹查询类型',
`trajectory_code` varchar(60) DEFAULT NULL COMMENT '轨迹编码',
`final_service_name` varchar(255) DEFAULT NULL COMMENT '末端服务商名称',
`des_port` varchar(500) DEFAULT NULL COMMENT '目的港/目的地区域',
`weight_type` char(1) DEFAULT NULL COMMENT '重量类型',
`dim_divisor` int(11) DEFAULT NULL COMMENT '体积除数(抛货系数)',
`weight_rule` varchar(500) DEFAULT NULL COMMENT '计重规则',
`shipment_type` varchar(32) DEFAULT NULL COMMENT '发货类型',
`data_from` varchar(60) DEFAULT NULL COMMENT '数据来源',
`remarks` text DEFAULT NULL COMMENT '备注',
`create_name` varchar(60) DEFAULT NULL COMMENT '源-创建人姓名',
`create_man_code` varchar(40) DEFAULT NULL COMMENT '源-创建人工号',
`create_date` datetime DEFAULT NULL COMMENT '源-创建时间',
`modifier` varchar(60) DEFAULT NULL COMMENT '源-修改人姓名',
`modifier_code` varchar(40) DEFAULT NULL COMMENT '源-修改人工号',
`modify_date` datetime DEFAULT NULL COMMENT '源-修改时间',
`gmt_create` datetime DEFAULT NULL COMMENT '源-GMT创建时间',
`gmt_modified` datetime DEFAULT NULL COMMENT '源-GMT修改时间',
`sync_time` datetime DEFAULT NULL COMMENT '最近一次同步时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_channel_code` (`channel_code`),
KEY `idx_service_code` (`service_code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='服务渠道镜像表(Oracle TAB_SERVICE_CHANNEL)';
-- 2. 线路产品(TAB_LINE_PRODUCT 镜像)
CREATE TABLE IF NOT EXISTS `srv_line_product` (
`id` varchar(50) NOT NULL COMMENT '老系统产品ID(源主键 TAB_LINE_PRODUCT.ID)',
`line_code` varchar(64) NOT NULL COMMENT '产品编码(线路编码)',
`line_name` varchar(200) NOT NULL COMMENT '产品名称(线路名称)',
`product_type` varchar(20) DEFAULT NULL COMMENT '产品类型',
`line_type` varchar(50) DEFAULT NULL COMMENT '线路类型(如 国际小包)',
`bl_cargo` char(1) DEFAULT NULL COMMENT '是否可收货(1是 0否)',
`cargo_name` varchar(100) DEFAULT NULL COMMENT '货物名称',
`product_storage` text DEFAULT NULL COMMENT '仓储服务名称',
`product_first` text DEFAULT NULL COMMENT '头程服务名称',
`product_clearance` text DEFAULT NULL COMMENT '清关服务名称',
`product_storage_code` varchar(1000) DEFAULT NULL COMMENT '仓储服务编码串',
`product_first_code` varchar(1000) DEFAULT NULL COMMENT '头程服务编码串',
`product_clearance_code` varchar(1000) DEFAULT NULL COMMENT '清关服务编码串',
`bl_open` char(1) DEFAULT NULL COMMENT '是否启用(1启用 0停用)',
`bl_section` char(1) DEFAULT NULL COMMENT '是否分段(1是 0否)',
`disp_code` varchar(60) DEFAULT NULL COMMENT '派送商编码',
`disp_name` varchar(100) DEFAULT NULL COMMENT '派送商名称',
`fee_class` varchar(100) DEFAULT NULL COMMENT '费用类别',
`shipper_id` varchar(64) DEFAULT NULL COMMENT '发货人ID',
`shipment_rule` char(1) DEFAULT NULL COMMENT '发货规则',
`weight` decimal(12,2) DEFAULT NULL COMMENT '限重(kg)',
`cargo_type` varchar(64) DEFAULT NULL COMMENT '货物类型编码',
`product_category` varchar(100) DEFAULT NULL COMMENT '产品分类',
`volume_basis` decimal(12,2) DEFAULT NULL COMMENT '体积基数(抛货系数)',
`weight_type` char(1) DEFAULT NULL COMMENT '重量类型',
`service_type` char(1) DEFAULT NULL COMMENT '服务类型',
`shipment_type` varchar(32) DEFAULT NULL COMMENT '发货类型',
`tax_amount` decimal(12,3) DEFAULT NULL COMMENT '税费金额',
`tax_currency` varchar(16) DEFAULT NULL COMMENT '税费币种',
`battery_type` varchar(64) DEFAULT NULL COMMENT '电池类型',
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
`create_name` varchar(60) DEFAULT NULL COMMENT '源-创建人姓名',
`create_man_code` varchar(40) DEFAULT NULL COMMENT '源-创建人工号',
`create_date` datetime DEFAULT NULL COMMENT '源-创建时间',
`modifier` varchar(60) DEFAULT NULL COMMENT '源-修改人姓名',
`modifier_code` varchar(40) DEFAULT NULL COMMENT '源-修改人工号',
`modify_date` datetime DEFAULT NULL COMMENT '源-修改时间',
`gmt_create` datetime DEFAULT NULL COMMENT '源-GMT创建时间',
`gmt_modified` datetime DEFAULT NULL COMMENT '源-GMT修改时间',
`sync_time` datetime DEFAULT NULL COMMENT '最近一次同步时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_line_code` (`line_code`),
KEY `idx_line_type` (`line_type`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='线路产品镜像表(Oracle TAB_LINE_PRODUCT)';
-- 3. 产品-渠道关系(TAB_PRODUCT_CHANNEL 镜像)
-- 注意:(product_id, channel_code) 在源端不唯一(同产品同渠道按国家/重量区间多行),主键用源 GUID
CREATE TABLE IF NOT EXISTS `srv_product_channel` (
`guid` varchar(64) NOT NULL COMMENT '老系统关系GUID(源主键 TAB_PRODUCT_CHANNEL.GUID)',
`product_id` varchar(64) NOT NULL COMMENT '产品ID(srv_line_product.id)',
`channel_code` varchar(64) NOT NULL COMMENT '渠道编码(srv_service_channel.channel_code)',
`channel_name` varchar(200) NOT NULL COMMENT '渠道名称',
`priority` int(11) NOT NULL COMMENT '优先级(数字越小越优先)',
`is_enabled` char(1) NOT NULL COMMENT '是否启用(1启用 0停用)',
`line_code` varchar(2000) DEFAULT NULL COMMENT '线路编码(源端可能为逗号串)',
`line_name` varchar(2000) DEFAULT NULL COMMENT '线路名称(源端可能为逗号串)',
`country_code` varchar(16) DEFAULT NULL COMMENT '国家编码',
`start_weight` decimal(14,3) DEFAULT NULL COMMENT '起始重量(kg)',
`end_weight` decimal(14,3) DEFAULT NULL COMMENT '截止重量(kg)',
`order_count` int(11) DEFAULT NULL COMMENT '下单量',
`order_count_ratio` decimal(12,2) DEFAULT NULL COMMENT '下单量占比',
`sync_time` datetime DEFAULT NULL COMMENT '最近一次同步时间',
PRIMARY KEY (`guid`),
KEY `idx_product_id` (`product_id`),
KEY `idx_channel_code` (`channel_code`),
KEY `idx_enabled_priority` (`is_enabled`, `priority`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='产品-渠道关系镜像表(Oracle TAB_PRODUCT_CHANNEL)';
-- 4. 定时任务:每天 00:30 同步(供应商同步 00:00 之后),禁止并发,放弃错过执行
INSERT INTO sys_job (job_name, job_group, invoke_target, cron_expression,
misfire_policy, concurrent, status, create_by, create_time, remark)
SELECT '老系统渠道产品资料每日同步', 'DEFAULT', 'channelMasterSyncTask.syncFromOracle()', '0 30 0 * * ?',
'3', '1', '0', 'admin', NOW(),
'每天00:30从Oracle(WEISHI_USER,只读账号)全量同步TAB_SERVICE_CHANNEL/TAB_LINE_PRODUCT/TAB_PRODUCT_CHANNEL到srv_service_channel/srv_line_product/srv_product_channel;按源主键upsert,可重复执行'
FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM sys_job WHERE invoke_target = 'channelMasterSyncTask.syncFromOracle()');