docs(memory): 补充分销佣金解冻任务分析与排查日志
- 新增 DealerCommissionUnfreeze10584Task 解冻规则详解 - 说明送水套餐与非送水套餐的不同解冻触发条件 - 解析“已送达”与“已完成”状态区别及影响 - 列出常见未解冻原因及排查优先级 - 增加长期记忆文件中分销佣金解冻相关业务规则和状态流转说明 - 添加2026-04-18排查解冻任务未触发的问题及可能原因 - 更新专家历史记录,新增高级开发工程师吴八哥信息 - 新增生产环境 application-test.yml 配置文件示例
This commit is contained in:
@@ -33,7 +33,18 @@
|
|||||||
"usedAt": 1776000797914,
|
"usedAt": 1776000797914,
|
||||||
"industryId": "all"
|
"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
|
||||||
}
|
}
|
||||||
@@ -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,避免重复初始化。
|
`RSAAutoCertificateConfig` 每次回调都重新 `build()`,SDK 内部会发一次 `serial=test` 的探测验签,网络问题或并发场景下可能导致首次回调失败。**已优化**:添加 `notifyConfigCache`(ConcurrentHashMap)按 mchId 缓存 config,避免重复初始化。
|
||||||
|
|||||||
13
.workbuddy/memory/2026-04-18.md
Normal file
13
.workbuddy/memory/2026-04-18.md
Normal file
@@ -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
|
||||||
@@ -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() 不为空,否则整个任务跳过
|
||||||
|
|||||||
85
src/main/resources/application-test.yml
Normal file
85
src/main/resources/application-test.yml
Normal file
@@ -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月份配送费"}]'
|
||||||
Reference in New Issue
Block a user