功能:新增收款码档案和收益补算功能

- 新增店员收款码档案管理(上传二维码和确认收款码)
- 提现请求新增收款码快照用于审计追踪
- 新增收益补算服务用于历史订单数据补录
- 新增收益补算日志表用于审计追踪
- 优化收益创建逻辑,根据解冻时间设置正确的初始状态
- 更新提现流程,要求店员确认收款码后才能提现
- 新增数据库迁移脚本 V7-V9
This commit is contained in:
irving
2025-10-13 22:13:01 -04:00
parent 8faa23e9c3
commit 5438a8e1f0
24 changed files with 669 additions and 10 deletions

View File

@@ -0,0 +1,22 @@
-- Clerk payee QR profile and withdrawal snapshot
CREATE TABLE IF NOT EXISTS `play_clerk_payee_profile` (
`id` varchar(32) NOT NULL COMMENT 'UUID',
`tenant_id` varchar(32) NOT NULL COMMENT '租户ID',
`clerk_id` varchar(32) NOT NULL COMMENT '店员ID',
`channel` varchar(32) NOT NULL DEFAULT 'ALIPAY_QR' COMMENT '收款渠道例如ALIPAY_QR',
`qr_code_url` varchar(512) NOT NULL COMMENT '收款二维码地址',
`display_name` varchar(64) DEFAULT NULL COMMENT '收款码显示名称',
`last_confirmed_at` datetime DEFAULT NULL COMMENT '最近确认时间',
`created_by` varchar(32) DEFAULT NULL,
`created_time` datetime DEFAULT CURRENT_TIMESTAMP,
`updated_by` varchar(32) DEFAULT NULL,
`updated_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`deleted` tinyint(1) NOT NULL DEFAULT '0' COMMENT '逻辑删除 1已删除 0未删除',
`version` int NOT NULL DEFAULT '1' COMMENT '数据版本',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE KEY `uk_clerk_payee` (`tenant_id`, `clerk_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=DYNAMIC COMMENT='店员提现收款码档案';
ALTER TABLE `play_withdrawal_request`
ADD COLUMN `payee_snapshot` text COMMENT '提现时的收款码快照JSON';

View File

@@ -0,0 +1,23 @@
-- Ensure each active tenant has a default freeze policy (7 days)
INSERT INTO `play_freeze_policy` (`id`, `tenant_id`, `clerk_id`, `freeze_hours`, `created_by`, `created_time`, `updated_by`, `updated_time`, `deleted`, `version`)
SELECT
REPLACE(UUID(), '-', ''),
t.`tenant_id`,
NULL,
168,
'migration_v8_default_freeze',
NOW(),
'migration_v8_default_freeze',
NOW(),
0,
1
FROM `sys_tenant` t
WHERE (t.`deleted` IS NULL OR t.`deleted` = 0)
AND NOT EXISTS (
SELECT 1
FROM `play_freeze_policy` p
WHERE p.`tenant_id` = t.`tenant_id`
AND p.`clerk_id` IS NULL
AND (p.`deleted` IS NULL OR p.`deleted` = 0)
);

View File

@@ -0,0 +1,27 @@
-- Audit log for earnings backfill executions
CREATE TABLE IF NOT EXISTS `play_earnings_backfill_log` (
`id` varchar(32) NOT NULL COMMENT 'UUID',
`tenant_id` varchar(32) NOT NULL COMMENT '租户ID',
`operator_id` varchar(32) DEFAULT NULL COMMENT '操作人ID',
`operator_name` varchar(64) DEFAULT NULL COMMENT '操作人名称',
`backfill_begin_time` datetime DEFAULT NULL COMMENT '查询起始时间',
`backfill_end_time` datetime DEFAULT NULL COMMENT '查询结束时间',
`clerk_ids` text COMMENT '指定店员ID集合(JSON)',
`dry_run` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否试运行',
`orders_checked` int NOT NULL DEFAULT '0' COMMENT '检查订单数',
`created_count` int NOT NULL DEFAULT '0' COMMENT '新增收益条目数',
`skipped_existing` int NOT NULL DEFAULT '0' COMMENT '跳过已存在收益条目数',
`warning_count` int NOT NULL DEFAULT '0' COMMENT '警告数量',
`warnings` text COMMENT '警告明细(JSON)',
`comment` varchar(255) DEFAULT NULL COMMENT '备注',
`created_time` datetime DEFAULT CURRENT_TIMESTAMP,
`created_by` varchar(32) DEFAULT NULL,
`updated_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`updated_by` varchar(32) DEFAULT NULL,
`deleted` tinyint(1) NOT NULL DEFAULT '0' COMMENT '逻辑删除 1已删除 0未删除',
`version` int NOT NULL DEFAULT '1' COMMENT '数据版本',
PRIMARY KEY (`id`) USING BTREE,
KEY `idx_backfill_tenant_time` (`tenant_id`, `created_time`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=DYNAMIC COMMENT='收益补算执行记录';