fa88

fa88 pushed to master at fa88/foodie-server

  • 27615dd632 Merge branch 'test'
  • 4df9dd34b7 feat: 消息列表回填订单缩略图 orderImage(#671 补充) 外卖消息取 pos_order.food 快照第一行的 image 键(App 下单传入,键名已按线上 真实数据确认);闪送消息批查寄件凭证(SENDER)取 sortOrder 最小一张。解析 非法/无凭证时留空,前端降级不显示。无表结构变更。
  • d09a6c9a1b feat: 推送消息增加订单指针,消息列表反查订单回填商家名/地址(#671) push_message 加 dd_id/push_type 两列,PushEventListener 入库时从 body JSON 解析订单指针(所有推送通道零调用方改动);getPushMessageList 分页后按类型 批量反查 pos_order(商家名+收货地址)与 flash_delivery_order(取件/收件地址) 回填展示字段。正文 ,NO: 后缀保留不动;SQL 迁移见 updatesql/sql.md 2026-09-24 段。
  • 6eb29ca198 fix: /pay/switch 组内切换走 retry 路径,修复 PAYMENT_ATTEMPT_EXISTS 死锁 线上事故:订单 5(Apple Pay)→2(信用卡) 切换,payType 已回写但 OMG create 发现旧激活尝试直接拒绝(OmgPaymentBusinessException: PAYMENT_ATTEMPT_EXISTS), 且该异常非 ServiceException 落入 catch-all 显示通用失败文案,用户重试同方式 仍死锁。 - createPayment OMG 路径改走 OmgPaymentRetryService.retry:先向网关核实旧 尝试未付再替换重建(PAID 拒绝防双付;无尝试/已失败回落 create) - 控制器补 OmgPaymentBusinessException 翻译:按 getMessageKey 输出渠道 业务文案 + 错误码,不再落通用文案误导排障 - 测试:OMG 路径用例改断言 retry 路径(含组内切换场景);8/8 通过 - 已知基线红(createRejectsUnsupportedPayType)与本次无关
  • 50f57fc855 chore: /pay/switch 兜底 catch 补异常日志(线上排障埋点) 线上出现 500 通用文案(no.pay.switch.failed),前端确认 payType 已实际 回写——故障点在 createPayment 渠道拉起环节的原始异常,原 catch-all 无日志导致根因不可见。补 logger.error 留痕,非行为修复。
  • View comparison for these 22 commits »

21 hours ago

fa88 pushed to test-202609v2 at fa88/foodie-server

21 hours ago

fa88 pushed to test-202609v2 at fa88/foodie-server

  • dd6c79b1e6 docs: 新增 032 自部署地图集成规格(spec + 质量清单) spec-kit specify 产物:6 个用户故事(P1 闪送距离切换/外卖后端权威计价, P2 选址切换/多站点路线,P3 商家同步/ETA 折算与旧服务退场)、11 条 FR、 5 条成功标准。按用户要求未建分支,随当前分支提交。

21 hours ago

fa88 pushed to test-202609v2 at fa88/foodie-server

  • 68d8b8de38 Merge branch 'test-202609v1' into test-202609v2
  • b07cb1c1f3 Merge branch 'test' into test-202609v1
  • 4df9dd34b7 feat: 消息列表回填订单缩略图 orderImage(#671 补充) 外卖消息取 pos_order.food 快照第一行的 image 键(App 下单传入,键名已按线上 真实数据确认);闪送消息批查寄件凭证(SENDER)取 sortOrder 最小一张。解析 非法/无凭证时留空,前端降级不显示。无表结构变更。
  • d09a6c9a1b feat: 推送消息增加订单指针,消息列表反查订单回填商家名/地址(#671) push_message 加 dd_id/push_type 两列,PushEventListener 入库时从 body JSON 解析订单指针(所有推送通道零调用方改动);getPushMessageList 分页后按类型 批量反查 pos_order(商家名+收货地址)与 flash_delivery_order(取件/收件地址) 回填展示字段。正文 ,NO: 后缀保留不动;SQL 迁移见 updatesql/sql.md 2026-09-24 段。
  • 6eb29ca198 fix: /pay/switch 组内切换走 retry 路径,修复 PAYMENT_ATTEMPT_EXISTS 死锁 线上事故:订单 5(Apple Pay)→2(信用卡) 切换,payType 已回写但 OMG create 发现旧激活尝试直接拒绝(OmgPaymentBusinessException: PAYMENT_ATTEMPT_EXISTS), 且该异常非 ServiceException 落入 catch-all 显示通用失败文案,用户重试同方式 仍死锁。 - createPayment OMG 路径改走 OmgPaymentRetryService.retry:先向网关核实旧 尝试未付再替换重建(PAID 拒绝防双付;无尝试/已失败回落 create) - 控制器补 OmgPaymentBusinessException 翻译:按 getMessageKey 输出渠道 业务文案 + 错误码,不再落通用文案误导排障 - 测试:OMG 路径用例改断言 retry 路径(含组内切换场景);8/8 通过 - 已知基线红(createRejectsUnsupportedPayType)与本次无关
  • View comparison for these 6 commits »

23 hours ago

fa88 pushed to test-202609v1 at fa88/foodie-server

  • b07cb1c1f3 Merge branch 'test' into test-202609v1
  • 4df9dd34b7 feat: 消息列表回填订单缩略图 orderImage(#671 补充) 外卖消息取 pos_order.food 快照第一行的 image 键(App 下单传入,键名已按线上 真实数据确认);闪送消息批查寄件凭证(SENDER)取 sortOrder 最小一张。解析 非法/无凭证时留空,前端降级不显示。无表结构变更。
  • d09a6c9a1b feat: 推送消息增加订单指针,消息列表反查订单回填商家名/地址(#671) push_message 加 dd_id/push_type 两列,PushEventListener 入库时从 body JSON 解析订单指针(所有推送通道零调用方改动);getPushMessageList 分页后按类型 批量反查 pos_order(商家名+收货地址)与 flash_delivery_order(取件/收件地址) 回填展示字段。正文 ,NO: 后缀保留不动;SQL 迁移见 updatesql/sql.md 2026-09-24 段。
  • 6eb29ca198 fix: /pay/switch 组内切换走 retry 路径,修复 PAYMENT_ATTEMPT_EXISTS 死锁 线上事故:订单 5(Apple Pay)→2(信用卡) 切换,payType 已回写但 OMG create 发现旧激活尝试直接拒绝(OmgPaymentBusinessException: PAYMENT_ATTEMPT_EXISTS), 且该异常非 ServiceException 落入 catch-all 显示通用失败文案,用户重试同方式 仍死锁。 - createPayment OMG 路径改走 OmgPaymentRetryService.retry:先向网关核实旧 尝试未付再替换重建(PAID 拒绝防双付;无尝试/已失败回落 create) - 控制器补 OmgPaymentBusinessException 翻译:按 getMessageKey 输出渠道 业务文案 + 错误码,不再落通用文案误导排障 - 测试:OMG 路径用例改断言 retry 路径(含组内切换场景);8/8 通过 - 已知基线红(createRejectsUnsupportedPayType)与本次无关
  • 50f57fc855 chore: /pay/switch 兜底 catch 补异常日志(线上排障埋点) 线上出现 500 通用文案(no.pay.switch.failed),前端确认 payType 已实际 回写——故障点在 createPayment 渠道拉起环节的原始异常,原 catch-all 无日志导致根因不可见。补 logger.error 留痕,非行为修复。
  • View comparison for these 5 commits »

1 day ago

fa88 pushed to test at fa88/foodie-server

  • 4df9dd34b7 feat: 消息列表回填订单缩略图 orderImage(#671 补充) 外卖消息取 pos_order.food 快照第一行的 image 键(App 下单传入,键名已按线上 真实数据确认);闪送消息批查寄件凭证(SENDER)取 sortOrder 最小一张。解析 非法/无凭证时留空,前端降级不显示。无表结构变更。

1 day ago

fa88 pushed to test at fa88/foodie-server

  • d09a6c9a1b feat: 推送消息增加订单指针,消息列表反查订单回填商家名/地址(#671) push_message 加 dd_id/push_type 两列,PushEventListener 入库时从 body JSON 解析订单指针(所有推送通道零调用方改动);getPushMessageList 分页后按类型 批量反查 pos_order(商家名+收货地址)与 flash_delivery_order(取件/收件地址) 回填展示字段。正文 ,NO: 后缀保留不动;SQL 迁移见 updatesql/sql.md 2026-09-24 段。

1 day ago

fa88 pushed to test at fa88/foodie-server

  • 6eb29ca198 fix: /pay/switch 组内切换走 retry 路径,修复 PAYMENT_ATTEMPT_EXISTS 死锁 线上事故:订单 5(Apple Pay)→2(信用卡) 切换,payType 已回写但 OMG create 发现旧激活尝试直接拒绝(OmgPaymentBusinessException: PAYMENT_ATTEMPT_EXISTS), 且该异常非 ServiceException 落入 catch-all 显示通用失败文案,用户重试同方式 仍死锁。 - createPayment OMG 路径改走 OmgPaymentRetryService.retry:先向网关核实旧 尝试未付再替换重建(PAID 拒绝防双付;无尝试/已失败回落 create) - 控制器补 OmgPaymentBusinessException 翻译:按 getMessageKey 输出渠道 业务文案 + 错误码,不再落通用文案误导排障 - 测试:OMG 路径用例改断言 retry 路径(含组内切换场景);8/8 通过 - 已知基线红(createRejectsUnsupportedPayType)与本次无关

1 day ago

fa88 pushed to test at fa88/foodie-server

  • 50f57fc855 chore: /pay/switch 兜底 catch 补异常日志(线上排障埋点) 线上出现 500 通用文案(no.pay.switch.failed),前端确认 payType 已实际 回写——故障点在 createPayment 渠道拉起环节的原始异常,原 catch-all 无日志导致根因不可见。补 logger.error 留痕,非行为修复。

1 day ago

fa88 pushed to test-202609v2 at fa88/foodie-server

  • ab54a56521 feat: 闪送线下转账送达后展示骑手启用银行卡(方案A) - 详情视图新增 riderBankCard 三要素(户名/银行名/账号),仅寄件人视角 且 payType=6 已送达/已完成时返回(FlashDeliveryRiderBankCardView) - 闸门就绪度:骑手维度线下转账在骑手身份已知时要求启用卡, 用户下单(骑手未定)保持放行 - 抢单过滤统一走闸门(传 riderId + isReady 过滤),顺带修复原 CSV 分支绕过平台开关的不一致 - 骑手收款方式接口传 riderId:无卡骑手线下转账 ready=false - docs:台湾二维码/TWQR 讨论记录(生成放 App 端,后端只出三要素) - TDD:闸门+1、闪送+5 用例;全量 746/746 通过

1 day ago

fa88 pushed to test-202609v2 at fa88/foodie-server

  • b062ada3be feat: 现金纳入平台支付方式开关矩阵(031 US7 扩展) - platformGroupsOf 不再剔除 CASH:平台设置矩阵商家维度新增现金行, 缺行=开,保存走既有 upsert,无 SQL 变更 - isUsableForOrder 现金分支增加平台开关:平台关现金时用户自取/堂食 现金单被拒、商家设置页可用列表不返回现金;商家建单与骑手闪送不受影响 - 测试:新增 platformDisabledCashBlocksUserDiningCash;矩阵行数 7→8; 闸门 18/18、全量 742/742 通过

1 day ago

fa88 pushed to test-202609v2 at fa88/foodie-server

  • 7c913c7648 Merge branch 'test-202609v1' into test-202609v2 i18n 冲突按 v2 结构为基、v1 侧逐 key 追加(pay.switch 等 5 组 新 key 并入,闪送改名快送随 v1 生效,v1/v2 key 集全校验无丢失); messages_vi.properties 维持 v2 线无 vi 包的删除态。 Auth.session() 属性恢复供 v2 商家端注解编译——会话校验已由 单设备登录在 AuthAspect 对全部新格式 token 统一强制,属性仅作标注。 合并后全量 742 测试通过。
  • 50d2db3730 chore: 清理 i18n 重复 key no.user.not.vip 六个语言文件各有一处历史重复(两父分支均已存在): 删第一处第三人称文案(此用户未开通会员),保留生效的 第二人称文案(您不是会员),运行时字符串零变化。 i18n 契约测试 18 用例通过。
  • 00dcc4c45c Merge branch 'test' into test-202609v1 冲突解决:闪送下单 DataIntegrityViolationException 兜底取并集—— 外层保留 test 的 order_no 撞号换号重试,内层幂等复查沿用 v1 的 FOR UPDATE selectOne + lockOrder 锁单;适配对应单测桩。 合并后全量 614 测试通过。
  • 91b0c3e1f9 feat: 推送消息已读改为显式接口(新增单条/全部已读) - 新增 GET /system/message/readMessage?id=x 单条置已读(按 id+user_id 过滤防越权) - 新增 GET /system/message/readAllMessage 全部置已读(清角标) - getPushMessageList 摘除进入列表即全部置已读的副作用,恢复纯查询 - 测试:列表断言只查不改(never update);单条/全部已读各 1 用例,共 4 用例通过
  • f818d84198 feat: OMG支付成功补推用户消息;闪送改名快送;单设备登录 - OMG 支付成功回调/补单查询首次确认支付后,按用户语言推"支付成功"(先入消息中心再 iOS 推送,重复回调不重推) - 推送文案:i18n 中"闪送/閃送"统一改为"快送";商家出餐推送内容去掉多余的订单号尾巴(保留统一 ,NO: 拼接) - 用户/骑手/商家 App 单设备登录(Auth/AuthAspect 重构 + 会话校验,含文档与测试)
  • View comparison for these 7 commits »

1 day ago

fa88 pushed to test-202609v1 at fa88/foodie-server

  • 50d2db3730 chore: 清理 i18n 重复 key no.user.not.vip 六个语言文件各有一处历史重复(两父分支均已存在): 删第一处第三人称文案(此用户未开通会员),保留生效的 第二人称文案(您不是会员),运行时字符串零变化。 i18n 契约测试 18 用例通过。
  • 00dcc4c45c Merge branch 'test' into test-202609v1 冲突解决:闪送下单 DataIntegrityViolationException 兜底取并集—— 外层保留 test 的 order_no 撞号换号重试,内层幂等复查沿用 v1 的 FOR UPDATE selectOne + lockOrder 锁单;适配对应单测桩。 合并后全量 614 测试通过。
  • 91b0c3e1f9 feat: 推送消息已读改为显式接口(新增单条/全部已读) - 新增 GET /system/message/readMessage?id=x 单条置已读(按 id+user_id 过滤防越权) - 新增 GET /system/message/readAllMessage 全部置已读(清角标) - getPushMessageList 摘除进入列表即全部置已读的副作用,恢复纯查询 - 测试:列表断言只查不改(never update);单条/全部已读各 1 用例,共 4 用例通过
  • f818d84198 feat: OMG支付成功补推用户消息;闪送改名快送;单设备登录 - OMG 支付成功回调/补单查询首次确认支付后,按用户语言推"支付成功"(先入消息中心再 iOS 推送,重复回调不重推) - 推送文案:i18n 中"闪送/閃送"统一改为"快送";商家出餐推送内容去掉多余的订单号尾巴(保留统一 ,NO: 拼接) - 用户/骑手/商家 App 单设备登录(Auth/AuthAspect 重构 + 会话校验,含文档与测试)
  • 526407c415 feat: 新增待支付订单更换支付方式接口 POST /pay/switch(#661) - PayMethodSwitchService:校验归属/主订单/可支付状态/方式取值, 到付现金仅堂食自取;先回写 payType 再路由拉起支付 (2/5→OMG create、3→LINE Pay create、1/4→线下直接成功) - 原渠道接口与下单流程零改动;同方式跳过回写 - 旧渠道未完结尝试依赖 payStatus 守卫+补偿任务收口(边界见 docs) - i18n:no.pay.switch.* 5 key ×6 语言文件 - 测试:PayMethodSwitchServiceTest 8 用例;docs/issue-pay-method-switch.md 记录
  • View comparison for these 6 commits »

1 day ago

fa88 pushed to test at fa88/foodie-server

  • 91b0c3e1f9 feat: 推送消息已读改为显式接口(新增单条/全部已读) - 新增 GET /system/message/readMessage?id=x 单条置已读(按 id+user_id 过滤防越权) - 新增 GET /system/message/readAllMessage 全部置已读(清角标) - getPushMessageList 摘除进入列表即全部置已读的副作用,恢复纯查询 - 测试:列表断言只查不改(never update);单条/全部已读各 1 用例,共 4 用例通过

2 days ago

fa88 pushed to test at fa88/foodie-server

  • f818d84198 feat: OMG支付成功补推用户消息;闪送改名快送;单设备登录 - OMG 支付成功回调/补单查询首次确认支付后,按用户语言推"支付成功"(先入消息中心再 iOS 推送,重复回调不重推) - 推送文案:i18n 中"闪送/閃送"统一改为"快送";商家出餐推送内容去掉多余的订单号尾巴(保留统一 ,NO: 拼接) - 用户/骑手/商家 App 单设备登录(Auth/AuthAspect 重构 + 会话校验,含文档与测试)

2 days ago

fa88 pushed to test at fa88/foodie-server

  • 526407c415 feat: 新增待支付订单更换支付方式接口 POST /pay/switch(#661) - PayMethodSwitchService:校验归属/主订单/可支付状态/方式取值, 到付现金仅堂食自取;先回写 payType 再路由拉起支付 (2/5→OMG create、3→LINE Pay create、1/4→线下直接成功) - 原渠道接口与下单流程零改动;同方式跳过回写 - 旧渠道未完结尝试依赖 payStatus 守卫+补偿任务收口(边界见 docs) - i18n:no.pay.switch.* 5 key ×6 语言文件 - 测试:PayMethodSwitchServiceTest 8 用例;docs/issue-pay-method-switch.md 记录

2 days ago

fa88 pushed to test at fa88/foodie-server

  • ee1538b40e feat: 闪送订单编号改为98+毫秒时间戳+2位序列(17位纯数字) - generateOrderNo():98 + 13位毫秒时间戳 + 2位同毫秒原子递增序列, 与外卖订单(99+时间戳)风格同构,替代原 FD+UUID 前24位(26位十六进制串) - 撞号兜底:插入冲突按约束名区分,uk_flash_order_no 冲突换号重插一次, userId+clientRequestId 幂等收口行为不变 - updatesql/sql.md:order_no 唯一索引(待手动执行,含执行前查重语句) - specs/024-flash-delivery/spec.md:2026-09-22 订单编号规则调整变更记录 - 实体 orderNo 字段注释同步更新;存量旧单号保持不变 - 测试:+3(格式与同毫秒唯一性/撞号换号重试/幂等回退回归)

3 days ago

fa88 pushed to test-202609v2 at fa88/foodie-server

  • c682267528 merge: 合并 test-202609v1 到 test-202609v2 冲突解决(两分支并行演进的融合): - UserOrderController: 取 v2 的 applyTabFilter 抽取版(逻辑与 v1 内联版一致); 现金硬闸门保持 v1 放宽(堂食/自取放行,交由 031 PaymentMethodGateService 按商家勾选管控),避免旧闸门拦截 US7 现金下单 - InfoUserController/LineCallbackController: v2 的 LINE 三端架构为基, 移植 v1 的 029 设备信任(deviceConfirm 分支仅限用户端,业务线 state 为 LINE 授权状态非 deviceId) oauthDeviceConfirm 适配 v2 约定:line_user 命名、bindingProviders 查找、findOauthBindingUser、canOauthLogin - i18n: 以 v2 结构为基(默认包 zh_TW、无 vi),追加 v1 新增的 4 个 key(no.oauth.device.*、no.unifiedorder.*)×5 语言文件 - feature.json/CLAUDE.md: 取 v2(031 指针) - messages_vi.properties: 保持 v2 的删除 - 测试适配: DeviceTrustFlowTest/LineCallbackDeviceTrustTest 按 v2 渠道桩调整; InfoUserControllerTest/LineCallbackControllerTest 注入 deviceTrustService 桩 验证: ruoyi-admin 722 tests 全部通过
  • 58bb0dd4d8 Merge branch 'test' into test-202609v1
  • 09f462dc55 feat: 新增按骑手用户id查询经纬度接口 GET /system/position/getRiderposition?riderId=xxx:免权限(@Anonymous+@Auth 仅登录校验), getOne(qw,false) 兼容历史重复行;无定位记录时 data 为 null。
  • a496b9cacd fix: 骑手定位上传兼容重复行与并发插入(一人一条) setRiderposition 的 getOne 默认 throwEx=true,rider_id 存在历史重复行时直接 500 (selectOne found: 5)。改为 getOne(qw,false) 取第一条继续更新;插入分支捕获 DuplicateKeyException 转按骑手更新,配合 updatesql/sql.md 新增 rider_id 唯一索引 (清理历史重复后手动执行)从 DB 层保证每个骑手仅一条定位记录。
  • f4907bf64c feat: 统一订单列表闪送条目返回 orderVersion(030 T024)
  • View comparison for these 14 commits »

3 days ago

fa88 pushed to test-202609v1 at fa88/foodie-server

  • 58bb0dd4d8 Merge branch 'test' into test-202609v1
  • 09f462dc55 feat: 新增按骑手用户id查询经纬度接口 GET /system/position/getRiderposition?riderId=xxx:免权限(@Anonymous+@Auth 仅登录校验), getOne(qw,false) 兼容历史重复行;无定位记录时 data 为 null。
  • a496b9cacd fix: 骑手定位上传兼容重复行与并发插入(一人一条) setRiderposition 的 getOne 默认 throwEx=true,rider_id 存在历史重复行时直接 500 (selectOne found: 5)。改为 getOne(qw,false) 取第一条继续更新;插入分支捕获 DuplicateKeyException 转按骑手更新,配合 updatesql/sql.md 新增 rider_id 唯一索引 (清理历史重复后手动执行)从 DB 层保证每个骑手仅一条定位记录。
  • f4907bf64c feat: 统一订单列表闪送条目返回 orderVersion(030 T024)
  • 3568789cf5 feat: 统一订单列表来源筛选扩堂食/自取(030 T023) source 新增 dinein(堂食 type=2)/pickup(自取 type=1);takeaway 收窄为仅外送单(type=0),all 不限 type 照常混排。 外卖路按查询源过滤 type 并以查询源做游标推进(dinein/pickup 单选翻页同秒 id 决胜),单选时跳过闪送路; 单选查询的游标编码为 dinein/pickup,混排游标仍只产生 takeaway/flash。契约与 030 文档同步。
  • View comparison for these 7 commits »

3 days ago

fa88 pushed to test at fa88/foodie-server

  • 09f462dc55 feat: 新增按骑手用户id查询经纬度接口 GET /system/position/getRiderposition?riderId=xxx:免权限(@Anonymous+@Auth 仅登录校验), getOne(qw,false) 兼容历史重复行;无定位记录时 data 为 null。

3 days ago