feat(tplus): 新增同步暂存与任务管理迁移和环境配置
This commit is contained in:
1 parent
823d9f02ec
commit
78bef43c06
29 files changed
+1326
-5
No files matched your search
+95
-1
@@ -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');
|
||||
Reference in new issue
Block a user