feat(tplus): 新增同步暂存与任务管理迁移和环境配置
This commit is contained in:
1 parent
823d9f02ec
commit
78bef43c06
29 files changed
+1326
-5
No files matched your search
+3
-1
@@ -1,4 +1,4 @@
|
||||
-- V10: 客户评级落库(2026-10-23)
|
||||
-- V13: 客户评级落库(2026-10-23,原文件误标为 V10)
|
||||
-- 评级计算器从独立工具页并入客户管理(行内弹窗),评分保存为客户档案属性;
|
||||
-- 两列可空(null=未评分,存量客户无需回填),人工维护字段,T+ 同步不覆盖。
|
||||
-- 对应迁移:alembic/versions/c3a9e1d7b2f4_v13_客户评级落库.py
|
||||
@@ -8,3 +8,5 @@ ALTER TABLE `customers`
|
||||
ADD COLUMN `rating_score` TINYINT COMMENT '评级总分(0-100,评级计算器保存;null=未评分;人工维护字段,T+ 同步不覆盖)' AFTER `remark`;
|
||||
ALTER TABLE `customers`
|
||||
ADD COLUMN `rating_time` DATETIME COMMENT '最近评级时间(评级计算器保存评分时刷新;人工维护字段)' AFTER `rating_score`;
|
||||
|
||||
UPDATE alembic_version SET version_num='c3a9e1d7b2f4' WHERE version_num='7f4f7b918bc4';
|
||||
@@ -0,0 +1,83 @@
|
||||
-- V14: T+ 只读同步批次、错误、staging 和增量水位。
|
||||
-- 对应 Alembic:backend/alembic/versions/d4e5f6a7b8c9_tplus_sync_staging.py
|
||||
|
||||
ALTER TABLE personnel ADD COLUMN source_updated_at DATETIME COMMENT 'T+ 源数据更新时间(未确认时可为空)' AFTER synced_at;
|
||||
ALTER TABLE products ADD COLUMN source_updated_at DATETIME COMMENT 'T+ 源数据更新时间(未确认时可为空)' AFTER synced_at;
|
||||
ALTER TABLE customers ADD COLUMN source_updated_at DATETIME COMMENT 'T+ 源数据更新时间(未确认时可为空)' AFTER synced_at;
|
||||
ALTER TABLE businesses ADD COLUMN source_updated_at DATETIME COMMENT 'T+ 源数据更新时间(未确认时可为空)' AFTER synced_at;
|
||||
ALTER TABLE shipments ADD COLUMN source_updated_at DATETIME COMMENT 'T+ 源数据更新时间(未确认时可为空)' AFTER synced_at;
|
||||
ALTER TABLE receipts ADD COLUMN source_updated_at DATETIME COMMENT 'T+ 源数据更新时间(未确认时可为空)' AFTER synced_at;
|
||||
|
||||
CREATE TABLE tplus_sync_batches (
|
||||
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键ID',
|
||||
batch_no VARCHAR(32) NOT NULL COMMENT '同步批次号',
|
||||
sync_mode VARCHAR(16) NOT NULL COMMENT '同步模式:FULL全量 INCREMENTAL增量',
|
||||
status VARCHAR(16) NOT NULL COMMENT '状态:RUNNING/SUCCEEDED/PARTIAL/FAILED',
|
||||
source_database VARCHAR(128) COMMENT 'T+ 源数据库名',
|
||||
started_at DATETIME NOT NULL 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 '批次错误摘要',
|
||||
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)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='T+ 同步批次表(记录读取范围、结果和对账统计)';
|
||||
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 TABLE tplus_sync_errors (
|
||||
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键ID',
|
||||
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)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='T+ 同步错误表(记录失败行和重试信息)';
|
||||
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 AUTO_INCREMENT COMMENT '主键ID',
|
||||
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)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='T+ 原始同步 staging 表(映射确认前只保存原始行,不直接改业务表)';
|
||||
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 AUTO_INCREMENT COMMENT '主键ID',
|
||||
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)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='T+ 增量同步水位表';
|
||||
|
||||
UPDATE alembic_version SET version_num='d4e5f6a7b8c9' WHERE alembic_version.version_num = 'c3a9e1d7b2f4';
|
||||
@@ -0,0 +1,14 @@
|
||||
-- T+ 任务管理扩展;对应 e5f607a8b9c0,不修改工资业务数据。
|
||||
ALTER TABLE tplus_sync_batches ADD COLUMN entity_types_json JSON COMMENT '请求读取的实体类型;历史批次可为空';
|
||||
ALTER TABLE tplus_sync_batches ADD COLUMN skipped_record_count INT NOT NULL DEFAULT 0 COMMENT '重复快照跳过条数';
|
||||
ALTER TABLE tplus_sync_batches ADD COLUMN parent_batch_no VARCHAR(32) COMMENT '重试来源批次号,保留原批次记录';
|
||||
ALTER TABLE tplus_sync_batches ADD COLUMN request_key VARCHAR(36) COMMENT '请求幂等键,空值用于历史和直接CLI任务';
|
||||
ALTER TABLE tplus_sync_batches ADD COLUMN requested_by BIGINT UNSIGNED COMMENT '请求用户ID,CLI任务为空,无物理外键';
|
||||
ALTER TABLE tplus_sync_batches ADD COLUMN audit_result_json JSON COMMENT '关联核验结果,只含系统字典和汇总';
|
||||
ALTER TABLE tplus_sync_batches MODIFY COLUMN started_at DATETIME NULL COMMENT '开始执行时间(排队时为空)';
|
||||
ALTER TABLE tplus_sync_batches MODIFY COLUMN sync_mode VARCHAR(16) NOT NULL COMMENT '任务方式:FULL全量 AUDIT关联核验 INCREMENTAL预留';
|
||||
ALTER TABLE tplus_sync_batches MODIFY COLUMN status VARCHAR(16) NOT NULL COMMENT '状态:QUEUED/RUNNING/SUCCEEDED/PARTIAL/FAILED';
|
||||
ALTER TABLE tplus_sync_batches ADD CONSTRAINT uk_tplus_sync_batches_request_key UNIQUE (request_key);
|
||||
CREATE INDEX idx_tplus_sync_batches_parent_status ON tplus_sync_batches (parent_batch_no, status);
|
||||
UPDATE tplus_sync_batches SET skipped_record_count=GREATEST(0, source_record_count-staged_record_count-failed_record_count) WHERE status='SUCCEEDED' AND sync_mode='FULL';
|
||||
UPDATE alembic_version SET version_num='e5f607a8b9c0' WHERE version_num='d4e5f6a7b8c9';
|
||||
Reference in new issue
Block a user