306 lines
24 KiB
SQL
306 lines
24 KiB
SQL
-- 商户业务消息中心、多推送供应商适配和业务 Transactional Outbox。
|
||
-- 本脚本只新增独立表及表内索引,不修改 wallet_transaction、third_push_conf、third_push_record、
|
||
-- third_push_record_user 或其他既有表,不回填历史消息,也不创建跨库外键。
|
||
|
||
-- 每个接收人持久化一条消息快照。本人消息和关系消息共用收件箱,但通过 recipient_type 明确来源。
|
||
CREATE TABLE `pjcloudx_thirdparty`.`third_app_message`
|
||
(
|
||
`id` bigint(20) NOT NULL COMMENT '消息主键,由应用使用雪花算法生成',
|
||
`event_id` varchar(128) NOT NULL COMMENT '跨服务业务事件幂等ID,由来源Outbox稳定生成',
|
||
`event_code` varchar(64) NOT NULL COMMENT '固定业务事件编码,例如WALLET_PAYMENT或MEAL_VERIFIED',
|
||
`recipient_user_id` bigint(20) NOT NULL COMMENT '消息接收用户ID,App只能查询当前登录用户的数据',
|
||
`subject_user_id` bigint(20) NOT NULL COMMENT '事件主体用户ID,本人消息与接收人相同,关系消息为被监护人',
|
||
`recipient_type` varchar(16) NOT NULL COMMENT '接收类型,OWNER本人或RELATION关系人',
|
||
`relation_id` bigint(20) DEFAULT NULL COMMENT '生成关系消息时命中的关系记录ID,本人消息为空',
|
||
`relation_code` varchar(64) DEFAULT NULL COMMENT '关系类型编码快照,本人消息为空',
|
||
`relation_name` varchar(64) DEFAULT NULL COMMENT '关系类型名称快照,本人消息为空',
|
||
`subject_user_name` varchar(128) DEFAULT NULL COMMENT '事件主体用户姓名快照,用于关系消息展示',
|
||
`source_service` varchar(32) NOT NULL COMMENT '来源服务编码,首期为WALLET或HARDWARE',
|
||
`source_biz_type` varchar(64) NOT NULL COMMENT '来源业务类型快照,例如钱包业务类型或预约核销',
|
||
`source_biz_id` varchar(128) NOT NULL COMMENT '来源业务ID快照,例如钱包biz_id或硬件订单ID',
|
||
`source_mch_id` bigint(20) DEFAULT NULL COMMENT '事件来源商户ID快照,无法解析时为空且仅生成本人收件箱',
|
||
`source_mch_name` varchar(128) DEFAULT NULL COMMENT '事件来源商户名称快照,避免历史消息随商户改名变化',
|
||
`title` varchar(128) NOT NULL COMMENT '服务端固定模板渲染后的消息标题',
|
||
`content` varchar(2000) NOT NULL COMMENT '服务端固定模板渲染后的消息正文',
|
||
`payload_json` text DEFAULT NULL COMMENT '消息详情快照JSON,仅保存展示所需的非敏感字段',
|
||
`deep_link_path` varchar(256) DEFAULT NULL COMMENT 'App内部跳转路径,首期统一进入消息详情页',
|
||
`deep_link_params_json` varchar(1000) DEFAULT NULL COMMENT 'App内部跳转参数JSON,不保存鉴权信息',
|
||
`read_status` char(1) NOT NULL DEFAULT '0' COMMENT '已读状态,0未读,1已读',
|
||
`read_time` datetime DEFAULT NULL COMMENT '用户首次标记已读时间,未读时为空',
|
||
`occurred_time` datetime NOT NULL COMMENT '业务事件实际发生时间,不使用异步投递完成时间替代',
|
||
`create_by` varchar(64) DEFAULT NULL COMMENT '创建人,系统事件统一为system',
|
||
`create_time` datetime DEFAULT NULL COMMENT '消息创建时间',
|
||
`update_by` varchar(64) DEFAULT NULL COMMENT '更新人',
|
||
`update_time` datetime DEFAULT NULL COMMENT '最近更新时间',
|
||
`del_flag` char(1) DEFAULT '0' COMMENT '逻辑删除标记,0有效,1删除;用户端不提供删除操作',
|
||
`tenant_id` bigint(20) NOT NULL COMMENT '租户ID',
|
||
PRIMARY KEY (`id`),
|
||
UNIQUE KEY `uk_third_app_message_event_user` (`tenant_id`, `event_id`, `recipient_user_id`),
|
||
KEY `idx_third_app_message_inbox` (`tenant_id`, `recipient_user_id`, `read_status`, `occurred_time`, `del_flag`),
|
||
KEY `idx_third_app_message_mch_event` (`tenant_id`, `source_mch_id`, `event_code`, `occurred_time`, `del_flag`)
|
||
) ENGINE = InnoDB
|
||
DEFAULT CHARSET = utf8mb4
|
||
COLLATE = utf8mb4_general_ci
|
||
COMMENT = 'App业务消息收件箱';
|
||
|
||
-- 商户按事件独立配置本人Push与关系消息。不存在配置时由业务按两个开关均关闭处理。
|
||
CREATE TABLE `pjcloudx_thirdparty`.`third_app_push_policy`
|
||
(
|
||
`id` bigint(20) NOT NULL COMMENT '策略主键,由应用使用雪花算法生成',
|
||
`mch_id` bigint(20) NOT NULL COMMENT '商户ID,父店和子店互不继承策略',
|
||
`event_code` varchar(64) NOT NULL COMMENT '固定业务事件编码',
|
||
`owner_push_enabled` char(1) NOT NULL DEFAULT '0' COMMENT '本人系统Push开关,0关闭,1开启;不影响本人收件箱',
|
||
`relation_message_enabled` char(1) NOT NULL DEFAULT '0' COMMENT '关系消息开关,0关闭,1开启;关闭时不生成关系收件箱或Push',
|
||
`create_by` varchar(64) DEFAULT NULL COMMENT '创建人',
|
||
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
|
||
`update_by` varchar(64) DEFAULT NULL COMMENT '更新人',
|
||
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
|
||
`del_flag` char(1) DEFAULT '0' COMMENT '逻辑删除标记,0有效,1删除',
|
||
`tenant_id` bigint(20) NOT NULL COMMENT '租户ID',
|
||
PRIMARY KEY (`id`),
|
||
UNIQUE KEY `uk_third_app_push_policy` (`tenant_id`, `mch_id`, `event_code`),
|
||
KEY `idx_third_app_push_policy_mch` (`tenant_id`, `mch_id`, `del_flag`)
|
||
) ENGINE = InnoDB
|
||
DEFAULT CHARSET = utf8mb4
|
||
COLLATE = utf8mb4_general_ci
|
||
COMMENT = '商户App业务消息策略';
|
||
|
||
-- 商户关系消息策略允许的关系类型。关系编码来自UPMS关系类型协议,不在本表复制关系定义。
|
||
CREATE TABLE `pjcloudx_thirdparty`.`third_app_push_policy_relation`
|
||
(
|
||
`id` bigint(20) NOT NULL COMMENT '策略关系主键,由应用使用雪花算法生成',
|
||
`policy_id` bigint(20) NOT NULL COMMENT '商户事件策略ID',
|
||
`relation_code` varchar(64) NOT NULL COMMENT '允许接收该事件的UPMS关系类型编码',
|
||
`create_by` varchar(64) DEFAULT NULL COMMENT '创建人',
|
||
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
|
||
`update_by` varchar(64) DEFAULT NULL COMMENT '更新人',
|
||
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
|
||
`del_flag` char(1) DEFAULT '0' COMMENT '逻辑删除标记,0有效,1删除',
|
||
`tenant_id` bigint(20) NOT NULL COMMENT '租户ID',
|
||
PRIMARY KEY (`id`),
|
||
UNIQUE KEY `uk_third_app_policy_relation` (`tenant_id`, `policy_id`, `relation_code`),
|
||
KEY `idx_third_app_policy_relation_code` (`tenant_id`, `relation_code`, `del_flag`)
|
||
) ENGINE = InnoDB
|
||
DEFAULT CHARSET = utf8mb4
|
||
COLLATE = utf8mb4_general_ci
|
||
COMMENT = '商户App业务消息关系范围';
|
||
|
||
-- 用户业务Push总开关。没有持久化记录时按开启处理,只有用户修改后才落库。
|
||
CREATE TABLE `pjcloudx_thirdparty`.`third_app_user_push_setting`
|
||
(
|
||
`id` bigint(20) NOT NULL COMMENT '设置主键,由应用使用雪花算法生成',
|
||
`user_id` bigint(20) NOT NULL COMMENT '设置所属用户ID',
|
||
`push_enabled` char(1) NOT NULL DEFAULT '1' COMMENT '业务系统Push总开关,0关闭,1开启;不影响已生成收件箱消息',
|
||
`create_by` varchar(64) DEFAULT NULL COMMENT '创建人',
|
||
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
|
||
`update_by` varchar(64) DEFAULT NULL COMMENT '更新人',
|
||
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
|
||
`del_flag` char(1) DEFAULT '0' COMMENT '逻辑删除标记,0有效,1删除',
|
||
`tenant_id` bigint(20) NOT NULL COMMENT '租户ID',
|
||
PRIMARY KEY (`id`),
|
||
UNIQUE KEY `uk_third_app_user_push_setting` (`tenant_id`, `user_id`)
|
||
) ENGINE = InnoDB
|
||
DEFAULT CHARSET = utf8mb4
|
||
COLLATE = utf8mb4_general_ci
|
||
COMMENT = 'App用户业务Push总设置';
|
||
|
||
-- 用户本人事件Push开关。没有持久化记录的事件按开启处理。
|
||
CREATE TABLE `pjcloudx_thirdparty`.`third_app_user_event_setting`
|
||
(
|
||
`id` bigint(20) NOT NULL COMMENT '事件设置主键,由应用使用雪花算法生成',
|
||
`user_id` bigint(20) NOT NULL COMMENT '设置所属用户ID',
|
||
`event_code` varchar(64) NOT NULL COMMENT '固定业务事件编码',
|
||
`push_enabled` char(1) NOT NULL DEFAULT '1' COMMENT '本人事件系统Push开关,0关闭,1开启;不影响本人收件箱',
|
||
`create_by` varchar(64) DEFAULT NULL COMMENT '创建人',
|
||
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
|
||
`update_by` varchar(64) DEFAULT NULL COMMENT '更新人',
|
||
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
|
||
`del_flag` char(1) DEFAULT '0' COMMENT '逻辑删除标记,0有效,1删除',
|
||
`tenant_id` bigint(20) NOT NULL COMMENT '租户ID',
|
||
PRIMARY KEY (`id`),
|
||
UNIQUE KEY `uk_third_app_user_event_setting` (`tenant_id`, `user_id`, `event_code`),
|
||
KEY `idx_third_app_user_event_user` (`tenant_id`, `user_id`, `del_flag`)
|
||
) ENGINE = InnoDB
|
||
DEFAULT CHARSET = utf8mb4
|
||
COLLATE = utf8mb4_general_ci
|
||
COMMENT = 'App用户本人事件Push设置';
|
||
|
||
-- 监护人按具体关系记录和事件主动订阅。新关系记录不会继承旧关系订阅。
|
||
CREATE TABLE `pjcloudx_thirdparty`.`third_app_relation_subscription`
|
||
(
|
||
`id` bigint(20) NOT NULL COMMENT '订阅主键,由应用使用雪花算法生成',
|
||
`relation_id` bigint(20) NOT NULL COMMENT 'UPMS具体关系记录ID,关系重建后必须重新订阅',
|
||
`subscriber_user_id` bigint(20) NOT NULL COMMENT '订阅用户ID,通常为监护人',
|
||
`subject_user_id` bigint(20) NOT NULL COMMENT '被订阅事件主体用户ID,通常为被监护人',
|
||
`relation_code` varchar(64) NOT NULL COMMENT '订阅时的关系类型编码快照',
|
||
`event_code` varchar(64) NOT NULL COMMENT '固定业务事件编码',
|
||
`enabled` char(1) NOT NULL DEFAULT '0' COMMENT '订阅开关,0关闭时不生成关系收件箱或Push,1开启',
|
||
`create_by` varchar(64) DEFAULT NULL COMMENT '创建人',
|
||
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
|
||
`update_by` varchar(64) DEFAULT NULL COMMENT '更新人',
|
||
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
|
||
`del_flag` char(1) DEFAULT '0' COMMENT '逻辑删除标记,0有效,1删除',
|
||
`tenant_id` bigint(20) NOT NULL COMMENT '租户ID',
|
||
PRIMARY KEY (`id`),
|
||
UNIQUE KEY `uk_third_app_relation_subscription` (`tenant_id`, `relation_id`, `event_code`),
|
||
KEY `idx_third_app_relation_subscriber` (`tenant_id`, `subscriber_user_id`, `enabled`, `del_flag`),
|
||
KEY `idx_third_app_relation_subject` (`tenant_id`, `subject_user_id`, `event_code`, `enabled`, `del_flag`)
|
||
) ENGINE = InnoDB
|
||
DEFAULT CHARSET = utf8mb4
|
||
COLLATE = utf8mb4_general_ci
|
||
COMMENT = 'App关系事件订阅';
|
||
|
||
-- 供应商无关的设备绑定。同一逻辑设备可以同时保存多个供应商令牌以支持后续故障切换。
|
||
CREATE TABLE `pjcloudx_thirdparty`.`third_push_device_binding`
|
||
(
|
||
`id` bigint(20) NOT NULL COMMENT '设备绑定主键,由应用使用雪花算法生成',
|
||
`user_id` bigint(20) NOT NULL COMMENT '当前绑定用户ID,账号切换时必须解绑旧用户',
|
||
`client_device_id` varchar(128) NOT NULL COMMENT 'App生成并持久化的逻辑设备ID,同一安装保持稳定',
|
||
`provider_code` varchar(32) NOT NULL COMMENT '推送供应商编码,首期为JPUSH',
|
||
`provider_registration_id` varchar(256) NOT NULL COMMENT '供应商设备令牌或Registration ID,属于敏感投递标识',
|
||
`app_code` varchar(64) NOT NULL COMMENT '客户端应用编码,用于同供应商多应用隔离',
|
||
`platform` varchar(16) NOT NULL COMMENT '客户端平台,ANDROID或IOS;H5不建立绑定',
|
||
`enabled` char(1) NOT NULL DEFAULT '1' COMMENT '绑定有效状态,0停用,1有效',
|
||
`last_active_time` datetime DEFAULT NULL COMMENT 'App最近成功上报绑定或活跃时间',
|
||
`unbind_time` datetime DEFAULT NULL COMMENT '退出登录、账号切换或令牌失效后的解绑时间',
|
||
`create_by` varchar(64) DEFAULT NULL COMMENT '创建人',
|
||
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
|
||
`update_by` varchar(64) DEFAULT NULL COMMENT '更新人',
|
||
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
|
||
`del_flag` char(1) DEFAULT '0' COMMENT '逻辑删除标记,0有效,1删除',
|
||
`tenant_id` bigint(20) NOT NULL COMMENT '租户ID',
|
||
PRIMARY KEY (`id`),
|
||
UNIQUE KEY `uk_third_push_provider_token` (`provider_code`, `app_code`, `provider_registration_id`),
|
||
UNIQUE KEY `uk_third_push_user_device_provider` (`tenant_id`, `user_id`, `client_device_id`, `provider_code`),
|
||
KEY `idx_third_push_device_user` (`tenant_id`, `user_id`, `enabled`, `provider_code`, `del_flag`)
|
||
) ENGINE = InnoDB
|
||
DEFAULT CHARSET = utf8mb4
|
||
COLLATE = utf8mb4_general_ci
|
||
COMMENT = '通用推送设备绑定';
|
||
|
||
-- 一条收件箱消息最多一条系统Push投递任务;被策略跳过也记录原因,便于商户排查。
|
||
CREATE TABLE `pjcloudx_thirdparty`.`third_push_delivery`
|
||
(
|
||
`id` bigint(20) NOT NULL COMMENT '投递任务主键,由应用使用雪花算法生成',
|
||
`message_id` bigint(20) NOT NULL COMMENT 'App业务消息ID,一条消息最多一个系统Push任务',
|
||
`recipient_user_id` bigint(20) NOT NULL COMMENT '系统Push目标用户ID',
|
||
`source_mch_id` bigint(20) DEFAULT NULL COMMENT '消息来源商户ID快照,用于PC数据范围查询',
|
||
`event_code` varchar(64) NOT NULL COMMENT '固定业务事件编码',
|
||
`status` varchar(16) NOT NULL COMMENT '投递状态,PENDING、PROCESSING、RETRY、SUCCESS、SKIPPED或FAILED',
|
||
`skip_reason` varchar(64) DEFAULT NULL COMMENT '跳过原因编码,例如MERCHANT_DISABLED、USER_DISABLED或NO_DEVICE',
|
||
`attempt_count` int(11) NOT NULL DEFAULT 0 COMMENT '已执行供应商调用次数,跨供应商累计,最多8次',
|
||
`next_retry_time` datetime DEFAULT NULL COMMENT '下次允许重试时间,非RETRY状态为空',
|
||
`final_provider_code` varchar(32) DEFAULT NULL COMMENT '最终受理消息的供应商编码,未成功时为空',
|
||
`provider_message_id` varchar(128) DEFAULT NULL COMMENT '供应商返回的消息ID,供应商未返回时为空',
|
||
`success_time` datetime DEFAULT NULL COMMENT '供应商明确受理时间',
|
||
`last_error` varchar(2000) DEFAULT NULL COMMENT '最近一次失败诊断,不保存密钥、令牌或完整请求报文',
|
||
`create_by` varchar(64) DEFAULT NULL COMMENT '创建人',
|
||
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
|
||
`update_by` varchar(64) DEFAULT NULL COMMENT '更新人',
|
||
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
|
||
`del_flag` char(1) DEFAULT '0' COMMENT '逻辑删除标记,0有效,1删除',
|
||
`tenant_id` bigint(20) NOT NULL COMMENT '租户ID',
|
||
PRIMARY KEY (`id`),
|
||
UNIQUE KEY `uk_third_push_delivery_message` (`message_id`),
|
||
KEY `idx_third_push_delivery_scan` (`tenant_id`, `status`, `next_retry_time`, `del_flag`),
|
||
KEY `idx_third_push_delivery_mch_time` (`tenant_id`, `source_mch_id`, `create_time`, `del_flag`)
|
||
) ENGINE = InnoDB
|
||
DEFAULT CHARSET = utf8mb4
|
||
COLLATE = utf8mb4_general_ci
|
||
COMMENT = 'App业务消息Push投递任务';
|
||
|
||
-- 供应商调用尝试日志。主供应商明确失败后切备用供应商时,每次调用分别保存一行。
|
||
CREATE TABLE `pjcloudx_thirdparty`.`third_push_delivery_attempt`
|
||
(
|
||
`id` bigint(20) NOT NULL COMMENT '尝试日志主键,由应用使用雪花算法生成',
|
||
`delivery_id` bigint(20) NOT NULL COMMENT 'Push投递任务ID',
|
||
`attempt_no` int(11) NOT NULL COMMENT '投递任务内递增的供应商调用序号',
|
||
`provider_code` varchar(32) NOT NULL COMMENT '本次调用的推送供应商编码',
|
||
`result_status` varchar(16) NOT NULL COMMENT '调用结果,ACCEPTED、RETRYABLE_FAILED或PERMANENT_FAILED',
|
||
`provider_message_id` varchar(128) DEFAULT NULL COMMENT '供应商返回的消息ID,未受理时为空',
|
||
`error_code` varchar(64) DEFAULT NULL COMMENT '供应商错误码或系统错误分类,不保存密钥和令牌',
|
||
`error_message` varchar(2000) DEFAULT NULL COMMENT '脱敏后的失败诊断信息',
|
||
`started_time` datetime NOT NULL COMMENT '本次供应商调用开始时间',
|
||
`finished_time` datetime DEFAULT NULL COMMENT '本次供应商调用完成时间',
|
||
`create_by` varchar(64) DEFAULT NULL COMMENT '创建人',
|
||
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
|
||
`update_by` varchar(64) DEFAULT NULL COMMENT '更新人',
|
||
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
|
||
`del_flag` char(1) DEFAULT '0' COMMENT '逻辑删除标记,0有效,1删除',
|
||
`tenant_id` bigint(20) NOT NULL COMMENT '租户ID',
|
||
PRIMARY KEY (`id`),
|
||
UNIQUE KEY `uk_third_push_delivery_attempt` (`delivery_id`, `attempt_no`),
|
||
KEY `idx_third_push_attempt_time` (`tenant_id`, `create_time`, `del_flag`)
|
||
) ENGINE = InnoDB
|
||
DEFAULT CHARSET = utf8mb4
|
||
COLLATE = utf8mb4_general_ci
|
||
COMMENT = 'Push供应商调用尝试日志';
|
||
|
||
-- 钱包流水与通知事件同事务落库。一条钱包流水仅生成一条Outbox明细,多钱包由event_group_key异步聚合。
|
||
CREATE TABLE `pjcloudx_wallet`.`wallet_message_outbox`
|
||
(
|
||
`id` bigint(20) NOT NULL COMMENT 'Outbox主键,同时作为聚合事件ID来源,由应用使用雪花算法生成',
|
||
`wallet_transaction_id` bigint(20) NOT NULL COMMENT 'wallet_transaction流水ID,保证每条新流水只写一次Outbox',
|
||
`event_group_key` varchar(256) NOT NULL COMMENT '按租户、用户、业务类型、业务ID和来源商户生成的聚合键',
|
||
`event_code` varchar(64) NOT NULL COMMENT '映射后的固定消息事件编码',
|
||
`subject_user_id` bigint(20) NOT NULL COMMENT '钱包所有人用户ID,也是本人消息接收人',
|
||
`source_mch_id` bigint(20) DEFAULT NULL COMMENT '来源商户ID快照,订单类取实际商户,账户类取当前食堂,无法解析时为空',
|
||
`source_mch_name` varchar(128) DEFAULT NULL COMMENT '来源商户名称快照,无法解析时为空',
|
||
`source_scene` varchar(32) NOT NULL DEFAULT 'WALLET' COMMENT '来源场景,WALLET普通钱包变化或ORDER钱包订单',
|
||
`source_biz_type` varchar(64) NOT NULL COMMENT 'WalletBizEnum持久化编码快照',
|
||
`source_biz_id` varchar(128) NOT NULL COMMENT '钱包流水biz_id快照',
|
||
`wallet_id` bigint(20) NOT NULL COMMENT '发生变化的钱包ID',
|
||
`wallet_name` varchar(128) DEFAULT NULL COMMENT '钱包名称或别名快照,用于多钱包明细展示',
|
||
`amount` int(11) NOT NULL COMMENT '本次钱包变动金额,单位分,收入为正、支出为负',
|
||
`balance` int(11) NOT NULL COMMENT '本次变动后的钱包余额,单位分',
|
||
`occurred_time` datetime NOT NULL COMMENT '钱包流水发生时间',
|
||
`status` varchar(16) NOT NULL DEFAULT 'PENDING' COMMENT '处理状态,PENDING、PROCESSING、RETRY、SUCCESS或FAILED',
|
||
`attempt_count` int(11) NOT NULL DEFAULT 0 COMMENT '向Thirdparty提交事件的累计尝试次数,最多8次',
|
||
`next_retry_time` datetime DEFAULT NULL COMMENT '下次允许重试时间,首次处理和终态为空',
|
||
`processed_time` datetime DEFAULT NULL COMMENT 'Thirdparty幂等接收成功时间',
|
||
`last_error` varchar(2000) DEFAULT NULL COMMENT '最近一次失败诊断,不保存敏感凭证',
|
||
`create_by` varchar(64) DEFAULT NULL COMMENT '创建人',
|
||
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
|
||
`update_by` varchar(64) DEFAULT NULL COMMENT '更新人',
|
||
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
|
||
`del_flag` char(1) DEFAULT '0' COMMENT '逻辑删除标记,0有效,1删除',
|
||
`tenant_id` bigint(20) NOT NULL COMMENT '租户ID',
|
||
PRIMARY KEY (`id`),
|
||
UNIQUE KEY `uk_wallet_message_outbox_transaction` (`wallet_transaction_id`),
|
||
KEY `idx_wallet_message_outbox_group` (`tenant_id`, `event_group_key`, `status`, `create_time`, `del_flag`),
|
||
KEY `idx_wallet_message_outbox_scan` (`tenant_id`, `status`, `next_retry_time`, `create_time`, `del_flag`)
|
||
) ENGINE = InnoDB
|
||
DEFAULT CHARSET = utf8mb4
|
||
COLLATE = utf8mb4_general_ci
|
||
COMMENT = '钱包业务消息Transactional Outbox';
|
||
|
||
-- 用餐核销状态和事件快照同事务落库;订单重复核销或异步重试不会生成重复消息。
|
||
CREATE TABLE `pjcloudx_hardware`.`hard_message_outbox`
|
||
(
|
||
`id` bigint(20) NOT NULL COMMENT 'Outbox主键,由应用使用雪花算法生成',
|
||
`event_code` varchar(64) NOT NULL COMMENT '固定消息事件编码,首期仅MEAL_VERIFIED',
|
||
`order_id` bigint(20) NOT NULL COMMENT '发生核销的硬件预约订单ID',
|
||
`subject_user_id` bigint(20) NOT NULL COMMENT '实际用餐用户ID,也是本人消息接收人',
|
||
`source_mch_id` bigint(20) NOT NULL COMMENT '订单实际所属商户ID',
|
||
`source_mch_name` varchar(128) DEFAULT NULL COMMENT '订单商户名称快照',
|
||
`meal_name` varchar(256) DEFAULT NULL COMMENT '餐段、菜谱或核销内容摘要快照',
|
||
`occurred_time` datetime NOT NULL COMMENT '核销成功时间',
|
||
`status` varchar(16) NOT NULL DEFAULT 'PENDING' COMMENT '处理状态,PENDING、PROCESSING、RETRY、SUCCESS或FAILED',
|
||
`attempt_count` int(11) NOT NULL DEFAULT 0 COMMENT '向Thirdparty提交事件的累计尝试次数,最多8次',
|
||
`next_retry_time` datetime DEFAULT NULL COMMENT '下次允许重试时间,首次处理和终态为空',
|
||
`processed_time` datetime DEFAULT NULL COMMENT 'Thirdparty幂等接收成功时间',
|
||
`last_error` varchar(2000) DEFAULT NULL COMMENT '最近一次失败诊断,不保存敏感凭证',
|
||
`create_by` varchar(64) DEFAULT NULL COMMENT '创建人',
|
||
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
|
||
`update_by` varchar(64) DEFAULT NULL COMMENT '更新人',
|
||
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
|
||
`del_flag` char(1) DEFAULT '0' COMMENT '逻辑删除标记,0有效,1删除',
|
||
`tenant_id` bigint(20) NOT NULL COMMENT '租户ID',
|
||
PRIMARY KEY (`id`),
|
||
UNIQUE KEY `uk_hard_message_outbox_order_event` (`tenant_id`, `event_code`, `order_id`),
|
||
KEY `idx_hard_message_outbox_scan` (`tenant_id`, `status`, `next_retry_time`, `create_time`, `del_flag`)
|
||
) ENGINE = InnoDB
|
||
DEFAULT CHARSET = utf8mb4
|
||
COLLATE = utf8mb4_general_ci
|
||
COMMENT = '硬件核销消息Transactional Outbox';
|