fix: 补齐异步办理恢复表并校正初始化文档

This commit is contained in:
MiFaZhan
2026-10-29 18:07:50 +08:00
parent 57e03233f8
commit b60695b0e5
3 changed files with 81 additions and 4 deletions
+74 -2
View File
@@ -5388,8 +5388,7 @@ SELECT `dept_id`, `dept_name`, `parent_id`, `ancestors`
-- 口令为字面值(不使用环境变量)。改口令须同步修改:
-- docker-compose.yml 的 MYSQL_ROOT_PASSWORD
-- config/*/config.yaml 各服务 database link 的口令
-- config/*/config.yaml 各服务 database link 的口令
-- 口令算法:md5( hex(md5(明文)) + md5(salt) ),见 iotlcm-admin-svr utils.go
-- 口令算法:MD5(CONCAT(MD5(明文), salt));前端先 MD5 明文,后端再将该值与原始 salt 拼接后 MD5。
CREATE USER IF NOT EXISTS 'u_iotlcm'@'%'
IDENTIFIED WITH mysql_native_password BY 'Iotlcm2026Default';
@@ -5404,3 +5403,76 @@ FLUSH PRIVILEGES;
-- 种子账号口令统一重置为部署口令(登录后请逐个修改)
UPDATE `sys_user` SET `password` = MD5(CONCAT(MD5('Iotlcm2026Default'), `salt`));
-- ============================================================
-- worker-svr v1.0.4 的 APN 异步办理恢复表(来源:iotlcm-database
-- feat/data-operation-reconcile-20261015:SQL/20261015_data_operation_sub_batch.sql,bf5f7fd)
-- 新库初始化阶段先建表,后启动 worker;旧库单独执行原迁移,不覆盖已有记录。
-- ============================================================
-- APN异步任务:先执行迁移,再部署配套chan/proxy/worker;禁止混版直接发送办理请求。
-- apnAsyncProtocolVersion=0仅阻断网络办理请求,worker恢复器仍会访问本脚本创建的四张表;故必须先迁移。
-- 升级前排空旧路由与在途请求、逐批核实旧同步processing批次:可能已送上游却无operationId者不得自动重投。
-- 所有chan/proxy/worker实例均升级且旧实例退出后才显式开启门禁;能力probe成功不证明下一次办理必达同一实例。
-- 本脚本只创建全新四表,不负责升级此前未部署的试验版表结构;若已存在同名表须先核对列与排序规则。
-- 仅适用于首次创建四表;CREATE IF NOT EXISTS不升级未部署的旧试验结构。
-- 若发现同名旧表,须停止启用并单独核验冻结请求/明细/active归属,禁止清空或重置jobId和补查次数。
-- worker数据库连接须保持写入与读取一致的loc/parseTime约定(与现有生产配置一致)。
CREATE TABLE IF NOT EXISTS `data_operation_parent` (
`batch_no` varchar(64) NOT NULL,
`ready` tinyint NOT NULL DEFAULT 0,
`finalize_token` varchar(64) DEFAULT NULL,
`finalize_until` datetime(3) DEFAULT NULL,
`recovery_attempt_at` datetime(3) DEFAULT NULL,
`last_reason` varchar(1024) DEFAULT NULL,
`updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
PRIMARY KEY (`batch_no`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='APN父批准备屏障及可恢复汇总租约';
CREATE TABLE IF NOT EXISTS `data_operation_sub_batch` (
`id` bigint NOT NULL AUTO_INCREMENT,
`batch_no` varchar(64) NOT NULL,
`batch_type` int NOT NULL,
`chan_key` varchar(128) NOT NULL,
`operation_id` varchar(64) CHARACTER SET ascii COLLATE ascii_bin NOT NULL,
`detail_ids` json NOT NULL,
`request_data` json NOT NULL COMMENT '首发前冻结请求,恢复不能重新构建',
`job_id` varchar(128) DEFAULT NULL,
`status` varchar(24) NOT NULL DEFAULT 'prepared' COMMENT 'prepared/submitting/accepted/uncertain/review/done',
`poll_count` tinyint unsigned NOT NULL DEFAULT 0,
`next_check_at` datetime(3) DEFAULT NULL,
`submitted_at` datetime(3) DEFAULT NULL,
`lease_token` varchar(64) DEFAULT NULL,
`lease_until` datetime(3) DEFAULT NULL,
`last_reason` varchar(1024) DEFAULT NULL,
`created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
`updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
PRIMARY KEY (`id`),
UNIQUE KEY `uk_data_operation_id` (`operation_id`),
KEY `idx_data_sub_due` (`status`,`next_check_at`,`lease_until`),
KEY `idx_data_sub_batch` (`batch_no`,`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='APN异步子批及恢复状态';
CREATE TABLE IF NOT EXISTS `data_operation_sub_detail` (
`detail_id` bigint NOT NULL,
`operation_id` varchar(64) CHARACTER SET ascii COLLATE ascii_bin NOT NULL,
`batch_no` varchar(64) NOT NULL,
`iccid` varchar(64) NOT NULL,
PRIMARY KEY (`detail_id`),
UNIQUE KEY `uk_data_sub_batch_card` (`batch_no`,`iccid`),
KEY `idx_data_sub_detail_operation` (`operation_id`),
KEY `idx_data_sub_detail_batch` (`batch_no`),
KEY `idx_data_sub_detail_card` (`iccid`,`batch_no`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='明细唯一提交意图映射';
-- queued与active分离:新准备意图不抢已提交请求的owner,未知active不能自动释放。
CREATE TABLE IF NOT EXISTS `data_operation_card_claim` (
`tenant_id` varchar(64) NOT NULL,
`iccid` varchar(64) NOT NULL,
`batch_id` bigint NOT NULL DEFAULT 0 COMMENT '最新queued批次序',
`operation_id` varchar(64) CHARACTER SET ascii COLLATE ascii_bin NOT NULL DEFAULT '' COMMENT '最新queued意图',
`active_batch_id` bigint NOT NULL DEFAULT 0,
`active_operation_id` varchar(64) CHARACTER SET ascii COLLATE ascii_bin NOT NULL DEFAULT '',
`updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
PRIMARY KEY (`tenant_id`,`iccid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='APN卡持久化提交顺序屏障';