From 8f99e785b6952d03851b98f4a073751053c57050 Mon Sep 17 00:00:00 2001 From: Guoqs <123456@jsowell.com> Date: Wed, 11 Mar 2026 18:12:35 +0800 Subject: [PATCH] =?UTF-8?q?update=20=E6=93=8D=E4=BD=9C=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/万车充小程序未分账补分账SOP.md | 125 +++++++++++++++++++++++++++++ 1 file changed, 125 insertions(+) diff --git a/doc/万车充小程序未分账补分账SOP.md b/doc/万车充小程序未分账补分账SOP.md index 47b04ea83..035053143 100644 --- a/doc/万车充小程序未分账补分账SOP.md +++ b/doc/万车充小程序未分账补分账SOP.md @@ -178,3 +178,128 @@ - 使用默认路径:`jsowellTask.importAdapayUnsplitRecordAndCompleteFields()` - 指定路径:`jsowellTask.importAdapayUnsplitRecordAndCompleteFields('doc/万车充小程序-未分账明细.xlsx')` + +## 7. 完整执行流程(落地版) + +以下流程是当前代码已支持、可直接按顺序执行的标准操作。 + +### 7.1 执行前检查 + +1. 使用 JDK8。 +2. 编译通过: + +```bash +mvn -pl jsowell-quartz -am -DskipTests compile +``` + +3. 确认 Excel 文件就绪: + +- 默认路径:`doc/万车充小程序-未分账明细.xlsx` +- 或你自己的绝对路径/相对路径 + +### 7.2 第一步:导入并补齐缺失字段 + +执行任务方法(任选其一): + +1. 默认路径: + +```text +jsowellTask.importAdapayUnsplitRecordAndCompleteFields() +``` + +2. 指定路径: + +```text +jsowellTask.importAdapayUnsplitRecordAndCompleteFields('doc/万车充小程序-未分账明细.xlsx') +``` + +本步骤会自动完成: + +1. Excel -> `adapay_unsplit_record` 导入(`insertOrUpdateSelective`,可重复执行) +2. 自动补齐 `order_code / due_refund_amount / settle_amount / pile_type` +3. 输出导入统计与补齐统计日志 + +### 7.3 第二步:导入后校验 + +建议执行以下 SQL: + +```sql +-- 总量 +SELECT COUNT(*) AS total_cnt +FROM adapay_unsplit_record; + +-- 核心补齐字段缺失情况 +SELECT COUNT(*) AS missing_cnt +FROM adapay_unsplit_record +WHERE order_code IS NULL + OR settle_amount IS NULL + OR due_refund_amount IS NULL + OR pile_type IS NULL; +``` + +`missing_cnt` 理想结果应接近 `0`(少量异常数据可人工排查)。 + +### 7.4 第三步:执行未分账处理(分账到 memberId=0) + +执行任务方法(任选其一): + +1. 使用默认 appId(`Constants.DEFAULT_APP_ID`)+ pageSize=500: + +```text +jsowellTask.processUnsplitRecordToDefaultMember() +``` + +2. 指定 appId 和分页大小: + +```text +jsowellTask.processUnsplitRecordToDefaultMember('你的wechatAppId', 200) +``` + +建议先用 `200` 小批量试跑,再提升到 `500`。 + +本步骤会自动完成: + +1. 分页读取 `queryList()` 的待分账记录 +2. 先查汇付最新确认信息,计算实时剩余可分账金额 +3. 取 `min(数据库待分账金额, 汇付实时剩余金额)` 作为本次 `confirmAmt` +4. 调 `PaymentConfirm` 分账,分账对象固定 `memberId=0` +5. 回写结果: + - 成功:更新 `confirmed_split_amount`,`split_flag=SUCCESS` + - 失败:`split_flag=FAILED` + +### 7.5 第四步:循环执行直到待分账清零 + +每轮执行后,建议跑以下 SQL: + +```sql +-- 按当前业务口径,仍待处理数量 +SELECT COUNT(*) AS remain_cnt +FROM adapay_unsplit_record +WHERE (settle_amount > confirmed_split_amount - payment_revoke_amount) + OR (due_refund_amount > refund_amount); + +-- 分账结果分布 +SELECT split_flag, COUNT(*) AS cnt +FROM adapay_unsplit_record +GROUP BY split_flag; +``` + +当 `remain_cnt = 0` 可视为本次补分账完成。 + +### 7.6 失败重试与回滚 + +1. 失败重试:重新执行 `processUnsplitRecordToDefaultMember(...)` 即可。 +2. 回滚(如金额或目标账户异常): + - 按 `paymentId` 查询对应 `payment_confirm_id` + - 调 `createConfirmReverse(paymentConfirmId, wechatAppId)` 撤销 + - 重新执行正确参数的分账流程 + +## 8. 一键操作建议(便于下次复用) + +按下面顺序执行,基本可覆盖同类任务: + +1. `jsowellTask.importAdapayUnsplitRecordAndCompleteFields('文件路径')` +2. 校验 `missing_cnt` +3. `jsowellTask.processUnsplitRecordToDefaultMember('appId', 200)` +4. 查看 `remain_cnt` +5. 若 `remain_cnt > 0`,重复第 3-4 步,最后切 `pageSize=500` 提速