feat(tplus): 新增同步暂存与任务管理迁移和环境配置

This commit is contained in:
liuwenxin committed 2026-10-28 11:41:38 +08:00
1 parent 823d9f02ec
commit 78bef43c06
29 files changed
+1326 -5

No files matched your search

+95 -1
View File
@@ -16,6 +16,10 @@
SET NAMES utf8mb4;
-- 删除顺序遵循外键依赖:先删子表
DROP TABLE IF EXISTS `tplus_sync_watermarks`;
DROP TABLE IF EXISTS `tplus_sync_records`;
DROP TABLE IF EXISTS `tplus_sync_errors`;
DROP TABLE IF EXISTS `tplus_sync_batches`;
DROP TABLE IF EXISTS `performance_ledgers`;
DROP TABLE IF EXISTS `settlement_items`;
DROP TABLE IF EXISTS `adjustment_orders`;
@@ -282,6 +286,7 @@ CREATE TABLE personnel (
t_plus_id VARCHAR(64) COMMENT 'T+ 系统内部标识',
sync_batch_no VARCHAR(32) COMMENT '同步批次号(同步模块写入)',
synced_at DATETIME COMMENT '最近同步时间',
source_updated_at DATETIME COMMENT 'T+ 源数据更新时间(未确认时可为空)',
CONSTRAINT pk_personnel PRIMARY KEY (id),
CONSTRAINT fk_personnel_business_role_id FOREIGN KEY(business_role_id) REFERENCES business_roles (id) ON DELETE RESTRICT,
CONSTRAINT fk_personnel_manager_id FOREIGN KEY(manager_id) REFERENCES personnel (id) ON DELETE RESTRICT
@@ -346,6 +351,7 @@ CREATE TABLE products (
t_plus_id VARCHAR(64) COMMENT 'T+ 系统内部标识',
sync_batch_no VARCHAR(32) COMMENT '同步批次号(同步模块写入)',
synced_at DATETIME COMMENT '最近同步时间',
source_updated_at DATETIME COMMENT 'T+ 源数据更新时间(未确认时可为空)',
CONSTRAINT pk_products PRIMARY KEY (id),
CONSTRAINT uk_products_name_spec UNIQUE (product_name, spec_model)
)CHARSET=utf8mb4 ENGINE=InnoDB COMMENT='产品表(类别锚定折算阈值参数;T+同步不覆盖产品类别)' COLLATE utf8mb4_general_ci;
@@ -374,6 +380,7 @@ CREATE TABLE customers (
t_plus_id VARCHAR(64) COMMENT 'T+ 系统内部标识',
sync_batch_no VARCHAR(32) COMMENT '同步批次号(同步模块写入)',
synced_at DATETIME COMMENT '最近同步时间',
source_updated_at DATETIME COMMENT 'T+ 源数据更新时间(未确认时可为空)',
CONSTRAINT pk_customers PRIMARY KEY (id),
CONSTRAINT uk_customers_company_owner UNIQUE (company_name, owner_name),
CONSTRAINT fk_customers_owner_personnel_id FOREIGN KEY(owner_personnel_id) REFERENCES personnel (id) ON DELETE RESTRICT
@@ -518,6 +525,7 @@ CREATE TABLE businesses (
t_plus_id VARCHAR(64) COMMENT 'T+ 系统内部标识',
sync_batch_no VARCHAR(32) COMMENT '同步批次号(同步模块写入)',
synced_at DATETIME COMMENT '最近同步时间',
source_updated_at DATETIME COMMENT 'T+ 源数据更新时间(未确认时可为空)',
CONSTRAINT pk_businesses PRIMARY KEY (id),
CONSTRAINT uk_businesses_business_no UNIQUE (business_no),
CONSTRAINT fk_businesses_customer_id FOREIGN KEY(customer_id) REFERENCES customers (id) ON DELETE RESTRICT,
@@ -602,6 +610,7 @@ CREATE TABLE shipments (
t_plus_id VARCHAR(64) COMMENT 'T+ 系统内部标识',
sync_batch_no VARCHAR(32) COMMENT '同步批次号(同步模块写入)',
synced_at DATETIME COMMENT '最近同步时间',
source_updated_at DATETIME COMMENT 'T+ 源数据更新时间(未确认时可为空)',
CONSTRAINT pk_shipments PRIMARY KEY (id),
CONSTRAINT uk_shipments_shipment_no UNIQUE (shipment_no),
CONSTRAINT fk_shipments_business_id FOREIGN KEY(business_id) REFERENCES businesses (id) ON DELETE RESTRICT
@@ -656,6 +665,7 @@ CREATE TABLE receipts (
t_plus_id VARCHAR(64) COMMENT 'T+ 系统内部标识',
sync_batch_no VARCHAR(32) COMMENT '同步批次号(同步模块写入)',
synced_at DATETIME COMMENT '最近同步时间',
source_updated_at DATETIME COMMENT 'T+ 源数据更新时间(未确认时可为空)',
CONSTRAINT pk_receipts PRIMARY KEY (id),
CONSTRAINT uk_receipts_receipt_batch_no UNIQUE (receipt_batch_no),
CONSTRAINT fk_receipts_business_id FOREIGN KEY(business_id) REFERENCES businesses (id) ON DELETE RESTRICT,
@@ -880,6 +890,90 @@ CREATE INDEX idx_performance_ledgers_month_personnel_type ON performance_ledgers
CREATE INDEX idx_performance_ledgers_personnel_id ON performance_ledgers (personnel_id);
-- ---------------------------------------------------------------------------
-- T+ 同步批次、错误、原始 staging 与增量水位表(V14)
-- ---------------------------------------------------------------------------
CREATE TABLE tplus_sync_batches (
id BIGINT UNSIGNED NOT NULL COMMENT '主键ID' AUTO_INCREMENT,
batch_no VARCHAR(32) NOT NULL COMMENT '同步批次号',
sync_mode VARCHAR(16) NOT NULL COMMENT '任务方式:FULL全量 AUDIT关联核验 INCREMENTAL预留',
status VARCHAR(16) NOT NULL COMMENT '状态:QUEUED/RUNNING/SUCCEEDED/PARTIAL/FAILED',
source_database VARCHAR(128) COMMENT 'T+ 源数据库名',
started_at DATETIME COMMENT '开始执行时间(排队时为空)',
finished_at DATETIME COMMENT '结束时间',
watermark_from DATETIME COMMENT '增量起始水位',
watermark_to DATETIME COMMENT '本批次结束水位',
source_record_count INT NOT NULL DEFAULT 0 COMMENT '源记录数',
staged_record_count INT NOT NULL DEFAULT 0 COMMENT '写入 staging 的记录数',
failed_record_count INT NOT NULL DEFAULT 0 COMMENT '失败记录数',
error_message TEXT COMMENT '批次错误摘要',
entity_types_json JSON COMMENT '请求读取的实体类型;历史批次可为空',
skipped_record_count INT NOT NULL DEFAULT 0 COMMENT '重复快照跳过条数',
parent_batch_no VARCHAR(32) COMMENT '重试来源批次号,保留原批次记录',
request_key VARCHAR(36) COMMENT '请求幂等键,空值用于历史和直接CLI任务',
requested_by BIGINT UNSIGNED COMMENT '请求用户ID,CLI任务为空,无物理外键',
audit_result_json JSON COMMENT '关联核验结果,只含系统字典和汇总',
create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
update_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
CONSTRAINT pk_tplus_sync_batches PRIMARY KEY (id),
CONSTRAINT uk_tplus_sync_batches_batch_no UNIQUE (batch_no),
CONSTRAINT uk_tplus_sync_batches_request_key UNIQUE (request_key)
)CHARSET=utf8mb4 ENGINE=InnoDB COMMENT='T+ 同步批次表(记录读取范围、结果和对账统计)' COLLATE=utf8mb4_general_ci;
CREATE INDEX idx_tplus_sync_batches_status ON tplus_sync_batches (status);
CREATE INDEX idx_tplus_sync_batches_started_at ON tplus_sync_batches (started_at);
CREATE INDEX idx_tplus_sync_batches_parent_status ON tplus_sync_batches (parent_batch_no, status);
CREATE TABLE tplus_sync_errors (
id BIGINT UNSIGNED NOT NULL COMMENT '主键ID' AUTO_INCREMENT,
batch_no VARCHAR(32) NOT NULL COMMENT '同步批次号',
entity_type VARCHAR(32) NOT NULL COMMENT '业务实体类型',
source_table VARCHAR(128) NOT NULL COMMENT 'T+ 源表',
source_id VARCHAR(64) COMMENT 'T+ 源主键',
source_line_no VARCHAR(64) COMMENT 'T+ 明细行号或明细主键',
error_code VARCHAR(32) NOT NULL COMMENT '错误编码',
error_message TEXT NOT NULL COMMENT '错误说明',
retry_count INT NOT NULL DEFAULT 0 COMMENT '已重试次数',
create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
update_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
CONSTRAINT pk_tplus_sync_errors PRIMARY KEY (id)
)CHARSET=utf8mb4 ENGINE=InnoDB COMMENT='T+ 同步错误表(记录失败行和重试信息)' COLLATE=utf8mb4_general_ci;
CREATE INDEX idx_tplus_sync_errors_batch_no ON tplus_sync_errors (batch_no);
CREATE INDEX idx_tplus_sync_errors_entity_type ON tplus_sync_errors (entity_type);
CREATE TABLE tplus_sync_records (
id BIGINT UNSIGNED NOT NULL COMMENT '主键ID' AUTO_INCREMENT,
batch_no VARCHAR(32) NOT NULL COMMENT '同步批次号',
entity_type VARCHAR(32) NOT NULL COMMENT '业务实体类型',
source_table VARCHAR(128) NOT NULL COMMENT 'T+ 源表',
source_id VARCHAR(64) NOT NULL COMMENT 'T+ 源主键',
source_no VARCHAR(64) COMMENT 'T+ 原始编号',
source_line_no VARCHAR(64) COMMENT 'T+ 明细行号或明细主键',
source_updated_at DATETIME COMMENT 'T+ 源数据更新时间',
row_hash VARCHAR(64) NOT NULL COMMENT '原始行 SHA-256',
state VARCHAR(16) NOT NULL DEFAULT 'PENDING' COMMENT '状态:PENDING/APPLIED/SKIPPED/ERROR',
payload_json JSON NOT NULL COMMENT '原始行 JSON',
create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
update_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
CONSTRAINT pk_tplus_sync_records PRIMARY KEY (id),
CONSTRAINT uk_tplus_sync_records_entity_source_hash UNIQUE (entity_type, source_id, row_hash)
)CHARSET=utf8mb4 ENGINE=InnoDB COMMENT='T+ 原始同步 staging 表(映射确认前只保存原始行,不直接改业务表)' COLLATE=utf8mb4_general_ci;
CREATE INDEX idx_tplus_sync_records_batch_no ON tplus_sync_records (batch_no);
CREATE INDEX idx_tplus_sync_records_source_no ON tplus_sync_records (source_no);
CREATE INDEX idx_tplus_sync_records_state ON tplus_sync_records (state);
CREATE TABLE tplus_sync_watermarks (
id BIGINT UNSIGNED NOT NULL COMMENT '主键ID' AUTO_INCREMENT,
entity_type VARCHAR(32) NOT NULL COMMENT '业务实体类型',
last_source_updated_at DATETIME COMMENT '最近源更新时间',
last_source_id VARCHAR(64) COMMENT '同一时间点的最后源主键',
status VARCHAR(16) NOT NULL DEFAULT 'READY' COMMENT '状态:READY/BLOCKED',
create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
update_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
CONSTRAINT pk_tplus_sync_watermarks PRIMARY KEY (id),
CONSTRAINT uk_tplus_sync_watermarks_entity_type UNIQUE (entity_type)
)CHARSET=utf8mb4 ENGINE=InnoDB COMMENT='T+ 增量同步水位表' COLLATE=utf8mb4_general_ci;
ALTER TABLE approval_orders MODIFY order_type TINYINT NOT NULL COMMENT '审批对象类型:1二次分配方案 2月度结算 3调整单';
-- 公司信息单行(system_settings 恒为一行,id=1 由迁移保底)
@@ -893,4 +987,4 @@ CREATE TABLE alembic_version (
CONSTRAINT alembic_version_pkc PRIMARY KEY (version_num)
)CHARSET=utf8mb4 ENGINE=InnoDB COLLATE utf8mb4_general_ci;
INSERT INTO alembic_version (version_num) VALUES ('c3a9e1d7b2f4');
INSERT INTO alembic_version (version_num) VALUES ('e5f607a8b9c0');