# 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() 不为空,否则整个任务跳过