初始化天卡开放平台后端项目

包含完整功能模块:
- 设备激活(直销激活码模式 + 代销免激活码模式)
- 微信支付 + 天卡订单
- 天卡池管理 + 异步橘视厅SDK激活
- 第三方合作伙伴接口(代销模式)
  - 签名鉴权(appKey/appSecret + nonce防重放)
  - 天卡消耗(事务 + 幂等 + 并发控制)
  - 媒资接口(三级授权过滤)
  - 审计日志
- 定价策略(3层:门店 > 渠道 > 平台)
- 分账(微信分账 + 分润规则)
- Docker部署(含Redis容器)
This commit is contained in:
zhaogd
2026-07-26 12:34:13 +08:00
commit 30198c7191
349 changed files with 28837 additions and 0 deletions

146
db/mysql.sql Normal file
View File

@@ -0,0 +1,146 @@
-- ============================================================
-- 天卡 OpenAPI 数据库 DDL 脚本
-- 数据库: MySQL 8.0+
-- 字符集: utf8mb4
-- 说明: 字段命名与 Entity/Service 代码严格对齐
-- 通用字段: created_at/updated_at/delete_flag
-- 状态值: 大写英文枚举字符串
-- ============================================================
-- -----------------------------------------------------------
-- 1. 合作伙伴表
-- Entity: OpenApiPartnerEntity
-- 对应 Service 列名: partner_id, app_key, name, status, delete_flag, created_at
-- -----------------------------------------------------------
CREATE TABLE IF NOT EXISTS `open_api_partner` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`partner_id` VARCHAR(64) NOT NULL COMMENT '合作伙伴ID',
`app_key` VARCHAR(64) NOT NULL COMMENT '应用Key',
`app_secret` VARCHAR(128) NOT NULL COMMENT '应用密钥',
`name` VARCHAR(100) DEFAULT NULL COMMENT '合作伙伴名称',
`status` VARCHAR(20) NOT NULL DEFAULT 'ACTIVE' COMMENT '状态:ACTIVE/DISABLED',
`api_permissions` TEXT DEFAULT NULL COMMENT 'API权限(JSON)',
`rate_limit` INT NOT NULL DEFAULT 100 COMMENT '速率限制(每秒请求数)',
`delete_flag` VARCHAR(10) NOT NULL DEFAULT 'UNDEL' COMMENT '删除标记:UNDEL/DEL',
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_app_key` (`app_key`),
UNIQUE KEY `uk_partner_id` (`partner_id`),
KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='开放API合作伙伴';
-- -----------------------------------------------------------
-- 2. 天卡池表
-- Entity: DayCardPoolEntity
-- 对应 Service 列名: card_code, partner_id, status, order_no, device_id, delete_flag, created_at, updated_at
-- 对应 Mapper XML: selectOneForUpdateSkipLocked (status, delete_flag, partner_id)
-- 状态枚举: UNUSED/RESERVED/USED
-- -----------------------------------------------------------
CREATE TABLE IF NOT EXISTS `day_card_pool` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`card_code` VARCHAR(128) NOT NULL COMMENT '卡密(导入的激活码)',
`third_party_ref` VARCHAR(128) DEFAULT NULL COMMENT '第三方引用标识',
`third_card_no` VARCHAR(128) DEFAULT NULL COMMENT '传第三方的唯一卡号',
`card_type` VARCHAR(20) NOT NULL DEFAULT 'DAY' COMMENT '卡类型:DAY',
`partner_id` BIGINT DEFAULT NULL COMMENT '所属合作伙伴ID',
`status` VARCHAR(20) NOT NULL DEFAULT 'UNUSED' COMMENT '状态:UNUSED/RESERVED/USED',
`order_no` VARCHAR(32) DEFAULT NULL COMMENT '关联订单号',
`device_id` BIGINT DEFAULT NULL COMMENT '关联设备ID',
`import_batch_id` BIGINT DEFAULT NULL COMMENT '导入批次ID',
`expire_at` DATETIME DEFAULT NULL COMMENT '卡过期时间',
`used_at` DATETIME DEFAULT NULL COMMENT '使用时间',
`delete_flag` VARCHAR(10) NOT NULL DEFAULT 'UNDEL' COMMENT '删除标记:UNDEL/DEL',
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_card_code` (`card_code`),
KEY `idx_partner_status` (`partner_id`, `status`),
KEY `idx_order_no` (`order_no`),
KEY `idx_device_id` (`device_id`),
KEY `idx_import_batch_id` (`import_batch_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='天卡池';
-- -----------------------------------------------------------
-- 3. 天卡订单表
-- Entity: DayCardOrderEntity
-- 对应 Service 列名: order_no, partner_id, device_id, status, amount, pay_no, pay_amount, pay_time, expire_time, cancel_time, delete_flag, created_at, updated_at
-- 状态枚举: CREATED/PAYING/PAID/PAY_FAILED/CANCELLED
-- MediaServiceImpl SQL: device_id, status, expire_time
-- -----------------------------------------------------------
CREATE TABLE IF NOT EXISTS `day_card_order` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`order_no` VARCHAR(32) NOT NULL COMMENT '订单号',
`partner_id` BIGINT DEFAULT NULL COMMENT '合作伙伴ID',
`device_id` BIGINT DEFAULT NULL COMMENT '设备ID',
`card_no` VARCHAR(128) DEFAULT NULL COMMENT '卡号(支付后写入,关联day_card_pool.card_code)',
`status` VARCHAR(20) NOT NULL DEFAULT 'CREATED' COMMENT '订单状态:CREATED/PAYING/PAID/PAY_FAILED/CANCELLED',
`amount` DECIMAL(10,2) NOT NULL DEFAULT 0.00 COMMENT '订单金额(元)',
`pay_no` VARCHAR(64) DEFAULT NULL COMMENT '支付流水号',
`pay_amount` DECIMAL(10,2) DEFAULT NULL COMMENT '实际支付金额(元)',
`pay_time` DATETIME DEFAULT NULL COMMENT '支付时间',
`expire_time` DATETIME DEFAULT NULL COMMENT '订单过期时间(15分钟)',
`cancel_time` DATETIME DEFAULT NULL COMMENT '取消时间',
`delete_flag` VARCHAR(10) NOT NULL DEFAULT 'UNDEL' COMMENT '删除标记:UNDEL/DEL',
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_order_no` (`order_no`),
KEY `idx_device_status` (`device_id`, `status`),
KEY `idx_status_expire` (`status`, `expire_time`),
KEY `idx_partner_status` (`partner_id`, `status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='天卡订单表';
-- -----------------------------------------------------------
-- 4. 天卡导入批次表
-- Entity: DayCardImportBatchEntity
-- 状态枚举: PROCESSING/SUCCEEDED/PARTIAL_FAILED/FAILED
-- -----------------------------------------------------------
CREATE TABLE IF NOT EXISTS `day_card_import_batch` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`batch_no` VARCHAR(64) NOT NULL COMMENT '批次号',
`partner_id` BIGINT DEFAULT NULL COMMENT '合作伙伴ID',
`status` VARCHAR(20) NOT NULL DEFAULT 'PROCESSING' COMMENT '状态:PROCESSING/SUCCEEDED/PARTIAL_FAILED/FAILED',
`total_count` INT NOT NULL DEFAULT 0 COMMENT '总数量',
`success_count` INT NOT NULL DEFAULT 0 COMMENT '成功数量',
`fail_count` INT NOT NULL DEFAULT 0 COMMENT '失败数量',
`result_report_url` VARCHAR(500) DEFAULT NULL COMMENT '结果报告URL',
`remark` VARCHAR(500) DEFAULT NULL COMMENT '备注',
`created_by` BIGINT DEFAULT NULL COMMENT '创建人',
`delete_flag` VARCHAR(10) NOT NULL DEFAULT 'UNDEL' COMMENT '删除标记:UNDEL/DEL',
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_batch_no` (`batch_no`),
KEY `idx_partner_id` (`partner_id`),
KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='天卡导入批次';
-- -----------------------------------------------------------
-- 5. 天卡设备激活码表
-- Entity: DayCardActivationCodeEntity
-- 用途: 管理后台按门店生成激活码,App 端 init 时输入激活码完成设备注册绑定
-- 状态枚举: ACTIVE/DISABLED
-- -----------------------------------------------------------
CREATE TABLE IF NOT EXISTS `day_card_activation_code` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`code` VARCHAR(32) NOT NULL COMMENT '激活码(唯一)',
`channel_org_id` BIGINT NOT NULL COMMENT '渠道组织ID',
`store_org_id` BIGINT NOT NULL COMMENT '门店组织ID',
`status` VARCHAR(16) NOT NULL DEFAULT 'ACTIVE' COMMENT '状态:ACTIVE/DISABLED',
`max_device_count` INT NOT NULL DEFAULT 0 COMMENT '最大可激活设备数(0=不限)',
`activated_count` INT NOT NULL DEFAULT 0 COMMENT '已激活设备数',
`remark` VARCHAR(255) DEFAULT NULL COMMENT '备注',
`delete_flag` VARCHAR(10) NOT NULL DEFAULT 'UNDEL' COMMENT '删除标记:UNDEL/DEL',
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_code` (`code`),
KEY `idx_store_org_id` (`store_org_id`),
KEY `idx_channel_org_id` (`channel_org_id`),
KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='天卡设备激活码';