From eadaa8c4ddb4f5988a8489c2e7833beb8eb037f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E5=BF=A0=E6=9E=97?= <170083662@qq.com> Date: Sat, 18 Apr 2026 10:58:38 +0800 Subject: [PATCH] =?UTF-8?q?docs(memory):=20=E8=A1=A5=E5=85=85=E5=88=86?= =?UTF-8?q?=E9=94=80=E4=BD=A3=E9=87=91=E8=A7=A3=E5=86=BB=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=E5=88=86=E6=9E=90=E4=B8=8E=E6=8E=92=E6=9F=A5=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 DealerCommissionUnfreeze10584Task 解冻规则详解 - 说明送水套餐与非送水套餐的不同解冻触发条件 - 解析“已送达”与“已完成”状态区别及影响 - 列出常见未解冻原因及排查优先级 - 增加长期记忆文件中分销佣金解冻相关业务规则和状态流转说明 - 添加2026-04-18排查解冻任务未触发的问题及可能原因 - 更新专家历史记录,新增高级开发工程师吴八哥信息 - 新增生产环境 application-test.yml 配置文件示例 --- .workbuddy/expert-history.json | 13 +++- .workbuddy/memory/2026-04-16.md | 20 ++++++ .workbuddy/memory/2026-04-18.md | 13 ++++ .workbuddy/memory/MEMORY.md | 32 ++++++++++ src/main/resources/application-test.yml | 85 +++++++++++++++++++++++++ 5 files changed, 162 insertions(+), 1 deletion(-) create mode 100644 .workbuddy/memory/2026-04-18.md create mode 100644 src/main/resources/application-test.yml diff --git a/.workbuddy/expert-history.json b/.workbuddy/expert-history.json index f9fa735..9071aad 100644 --- a/.workbuddy/expert-history.json +++ b/.workbuddy/expert-history.json @@ -33,7 +33,18 @@ "usedAt": 1776000797914, "industryId": "all" } + ], + "d11a5ebd8e064cc19ff4a85b8d931dac": [ + { + "expertId": "SeniorDeveloper", + "name": "吴八哥", + "profession": "高级开发工程师", + "avatarUrl": "https://acc-1258344699.cos.accelerate.myqcloud.com/workbuddy/experts/avatars/02-Engineering/SeniorDeveloper/SeniorDeveloper.png", + "promptUrl": "https://acc-1258344699.cos.accelerate.myqcloud.com/workbuddy/experts/experts/02-Engineering/SeniorDeveloper/SeniorDeveloper_zh.md", + "usedAt": 1776443595917, + "industryId": "02-Engineering" + } ] }, - "lastUpdated": 1776017699886 + "lastUpdated": 1776444657438 } \ No newline at end of file diff --git a/.workbuddy/memory/2026-04-16.md b/.workbuddy/memory/2026-04-16.md index 2d3b551..deb77d4 100644 --- a/.workbuddy/memory/2026-04-16.md +++ b/.workbuddy/memory/2026-04-16.md @@ -50,6 +50,26 @@ import com.wechat.pay.java.service.payments.model.Transaction; --- +--- + +## 分销佣金解冻任务分析(DealerCommissionUnfreeze10584Task) + +**订单号**:2038841514750459904 + +### 解冻规则 +- **送水套餐**(shop_order.form_id IN 水票模板的 goods_id):该订单关联的水票第一条送水订单 deliveryStatus=40(已完成)才触发解冻 +- **非送水套餐**(form_id 不在水票模板中):shop_order.order_status=1 即触发解冻 + +### "已送达"≠"已完成"的关键区别 +- deliveryStatus=30(送达待确认):配送员拍照确认送达,此时**不触发解冻** +- deliveryStatus=40(已完成):需用户手动确认收货 OR 超时24h自动确认后才到达此状态 + +### 常见未解冻原因(按排查优先级) +1. 送水订单停在 deliveryStatus=30(送达待确认),未到 40(已完成) +2. shop_order.form_id 在水票模板里,走的是"送水套餐"逻辑,但没有找到对应的 glt_user_ticket 记录 +3. glt_user_ticket 记录缺失或 order_no 字段为空 +4. 已有 flowType=50 的解冻 marker(说明已解冻) + ### 次要原因 `RSAAutoCertificateConfig` 每次回调都重新 `build()`,SDK 内部会发一次 `serial=test` 的探测验签,网络问题或并发场景下可能导致首次回调失败。**已优化**:添加 `notifyConfigCache`(ConcurrentHashMap)按 mchId 缓存 config,避免重复初始化。 diff --git a/.workbuddy/memory/2026-04-18.md b/.workbuddy/memory/2026-04-18.md new file mode 100644 index 0000000..d8ab728 --- /dev/null +++ b/.workbuddy/memory/2026-04-18.md @@ -0,0 +1,13 @@ +# 2026-04-18 工作日志 + +## 排查解冻任务未触发问题 +- 用户反馈:GltTicketOrder订单已完成配送,但部分订单未触发解冻(freezeMoney未转到money) +- 完整梳理了资金流转链路:结算→冻结→解冻 +- 识别出5个可能原因: + 1. GltTicketOrder.userTicketId为NULL(解冻任务硬性过滤条件) + 2. GltUserTicket.orderNo缺失导致关联断裂 + 3. isFirstTicketOrderFinished()"第一条"逻辑阻断后续订单解冻 + 4. loadWaterFormIds()返回空集导致整个解冻任务跳过 + 5. 配送员提成orderNo格式不匹配(非bug,配送员提成本身不经过冻结) +- 提供了5条排查SQL和修复建议 +- 关键文件:DealerCommissionUnfreeze10584Task.java、GltTicketOrderServiceImpl.java diff --git a/.workbuddy/memory/MEMORY.md b/.workbuddy/memory/MEMORY.md index e69de29..6343d2e 100644 --- a/.workbuddy/memory/MEMORY.md +++ b/.workbuddy/memory/MEMORY.md @@ -0,0 +1,32 @@ +# MEMORY.md - 长期记忆 + +## 项目概况 +- 后端:/Users/gxwebsoft/JAVA/java-10584(Spring Boot + MyBatis-Plus) +- 后台管理:/Users/gxwebsoft/VUE/mp-10584 +- 小程序端:/Users/gxwebsoft/VUE/template-10584 +- 多租户架构(tenantId 隔离),主力租户 10584 + +## 技术栈 +- 后端:Spring Boot + MyBatis-Plus + FastJSON 2.x +- 前端:Nuxt/Vue3 + TypeScript + Ant Design Vue4 + Tailwind +- 小程序:Uni-app/Taro +- 开发环境:Mac + Node.js v22 + JetBrains + Docker + pnpm + +## 业务规则备忘 + +### 分销佣金解冻规则(10584) +- 结算:DealerOrderSettlement10584Task 每10秒,佣金先入 freezeMoney +- 解冻:DealerCommissionUnfreeze10584Task 每20秒,freezeMoney→money +- 送水套餐解冻条件:同一userTicketId下第一条送水订单deliveryStatus=40 +- 非送水套餐解冻条件:ShopOrder.orderStatus=1 且 payStatus=true +- 幂等标记:ShopDealerCapital(flowType=50, comments="佣金解冻(capitalId=xxx)") +- 配送员提成:直接入money(不经过冻结),orderNo格式="gltTicketOrder:"+id + +### 送水订单状态流转 +- 10(待配送)→20(配送中)→30(待客户确认)→40(已完成) +- delivered()配送员确认送达时就会同步ShopOrder.orderStatus=1 +- confirmReceive()/autoConfirmTimeout()也会同步 + +### 已知排查问题 +- 解冻任务可能因 userTicketId为空、GltUserTicket.orderNo缺失、"第一条未完成"阻断等原因未触发 +- 解冻任务依赖 loadWaterFormIds() 不为空,否则整个任务跳过 diff --git a/src/main/resources/application-test.yml b/src/main/resources/application-test.yml new file mode 100644 index 0000000..185951d --- /dev/null +++ b/src/main/resources/application-test.yml @@ -0,0 +1,85 @@ +# 生产环境配置 + +# 数据源配置 +spring: + datasource: + url: jdbc:mysql://47.107.249.41:13306/modules?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai + username: modules + password: tYmmMGh5wpwXR3ae + driver-class-name: com.mysql.cj.jdbc.Driver + type: com.alibaba.druid.pool.DruidDataSource + druid: + remove-abandoned: true + + # redis + redis: + database: 0 + host: 47.107.249.41 + port: 16379 + password: redis_t74P8C + +# 日志配置 +logging: + file: + name: websoft-modules.log + level: + root: WARN + com.gxwebsoft: ERROR + com.baomidou.mybatisplus: ERROR + +socketio: + host: 0.0.0.0 #IP地址 + +# MQTT配置 +mqtt: + enabled: false # 启用MQTT服务 + host: tcp://132.232.214.96:1883 + username: swdev + password: Sw20250523 + client-id-prefix: hjm_car_ + topic: /SW_GPS/# + qos: 2 + connection-timeout: 10 + keep-alive-interval: 20 + auto-reconnect: true + +# 框架配置 +config: + # 文件服务器 + file-server: https://file-s209.shoplnk.cn + # 生产环境接口 + server-url: https://glt-server.websoft.top/api + # 业务模块接口 + api-url: https://glt-api.websoft.top/api + upload-path: /www/wwwroot/file.ws + + # 阿里云OSS云存储 + endpoint: https://oss-cn-shenzhen.aliyuncs.com + accessKeyId: LTAI4GKGZ9Z2Z8JZ77c3GNZP + accessKeySecret: BiDkpS7UXj72HWwDWaFZxiXjNFBNCM + bucketName: oss-gxwebsoft + bucketDomain: https://oss.wsdns.cn + aliyunDomain: https://oss-gxwebsoft.oss-cn-shenzhen.aliyuncs.com + +# 生产环境证书配置 +certificate: + load-mode: VOLUME # 生产环境从Docker挂载卷加载 + cert-root-path: /www/wwwroot/file.ws + +# 支付配置缓存 +payment: + cache: + # 支付配置缓存键前缀,生产环境使用 Payment:1* 格式 + key-prefix: "Payment:1" + # 缓存过期时间(小时) + expire-hours: 24 +# 阿里云翻译配置 +aliyun: + translate: + access-key-id: LTAI5tEsyhW4GCKbds1qsopg + access-key-secret: zltFlQrYVAoq2KMFDWgLa3GhkMNeyO + endpoint: mt.cn-hangzhou.aliyuncs.com +wechatpay: + transfer: + scene-id: 1005 + scene-report-infos-json: '[{"info_type":"岗位类型","info_content":"配送员"},{"info_type":"报酬说明","info_content":"12月份配送费"}]'