From fad7c5f58ebcafb901fe22e05d782c1074822a01 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E5=BF=A0=E6=9E=97?= <170083662@qq.com> Date: Wed, 15 Jul 2026 17:07:42 +0800 Subject: [PATCH] =?UTF-8?q?fix(cart):=20=E4=BF=AE=E5=A4=8D=E8=B4=AD?= =?UTF-8?q?=E7=89=A9=E8=BD=A6=E5=90=8C=E4=B8=80=E5=95=86=E5=93=81=E9=87=8D?= =?UTF-8?q?=E5=A4=8D=E6=98=BE=E7=A4=BA=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 后端新增 ShopCartService.addToCart 方法,按 user_id+goods_id+sku_id 判重合并数量 - 修改 ShopCartController.save 调用为 addToCart,避免重复插入购物车记录 - sku_id 为 null 或 0 时,判重逻辑支持 null-safe 匹配 - 提供历史数据清理脚本 sql/shop_cart_merge_duplicates.sql 合并重复购物车数据 - 更新文档记录购物车合并逻辑及相关接口说明 - 编译通过,后端服务需重启生效 --- .workbuddy/memory/2026-07-15.md | 12 ++++++++++++ .workbuddy/memory/MEMORY.md | 1 + 2 files changed, 13 insertions(+) diff --git a/.workbuddy/memory/2026-07-15.md b/.workbuddy/memory/2026-07-15.md index 07698f6..9efa2bc 100644 --- a/.workbuddy/memory/2026-07-15.md +++ b/.workbuddy/memory/2026-07-15.md @@ -187,3 +187,15 @@ - 微信支付(1):未付款 `payStatus=false`,正常进入 statusFilter=0 - 修复:`getCardStatus` 第 30 行去掉 `&& !isOffline` 条件,改为 `if (!payStatus && !isCod) return { text: '待付款' }`。保留 `!isCod`(货到付款的特殊兜底,虽然正常流程不会走到这里);清理掉不再使用的 `isOffline` 变量 - 决策依据:用户认可"线下付款订单出现在待付款 Tab"是合理的,因此只改前端文案判断,不动后端 SQL + +## 修复购物车同一商品并列显示(应合并数量) +- 现象:购物车页面同一商品并列显示多行,本应合并数量到一行 +- 根因:后端 `ShopCartController.save()` 直接调用 MyBatis-Plus 默认 `shopCartService.save()`,每次加购都 INSERT 新行,没有"同用户+商品+SKU已存在则累加数量"逻辑 +- 后端修复(`/Users/gxwebsoft/JAVA/guilixu-java`,3 个文件): + 1. `ShopCartService.java` — 接口新增 `boolean addToCart(ShopCart shopCart)` 方法 + 2. `ShopCartServiceImpl.java` — 实现 `addToCart`:按 user_id+goods_id+sku_id 查询是否已存在(skuId 为 null/0 时匹配 IS NULL 或 =0),存在则累加 cart_num 后 updateById,不存在才 save;引入 `QueryWrapper` + 3. `ShopCartController.java` — `save()` 接口从 `shopCartService.save(shopCart)` 改为 `shopCartService.addToCart(shopCart)` +- 注意:`ShopCart.userId` 是 `Integer` 类型(不是 Long),`goodsId` 是 Long +- 历史数据清理:提供 `sql/shop_cart_merge_duplicates.sql`,按 (user_id,goods_id,sku_id) 分组合并 cart_num 并删除重复行(sku_id 可能为 NULL,用 `<=>` null-safe 匹配);执行前先备份 +- 编译验证:Maven compile 成功 +- 后端需重启服务才生效 diff --git a/.workbuddy/memory/MEMORY.md b/.workbuddy/memory/MEMORY.md index c2ad52b..52fec7e 100644 --- a/.workbuddy/memory/MEMORY.md +++ b/.workbuddy/memory/MEMORY.md @@ -39,6 +39,7 @@ - 门店中心:`src/pages/store/center/index.tsx` - 购物车 API:`src/api/shop/shopCart/index.ts`(批量删除接口 `/shop/shop-cart/batch` 后端期望直接接收 `ArrayList` 即 `[1,2,3]`,不要用 `{ ids }` 包裹) - 购物车 Context:`src/contexts/CartContext.tsx` +- 购物车合并加购:后端 `ShopCartServiceImpl.addToCart()` 按 user_id+goods_id+sku_id 判重,已存在则累加 cart_num,不存在才新增;skuId 为 null/0(单规格)匹配 IS NULL 或 =0。`ShopCart.userId` 是 Integer(非 Long)。历史重复数据清理脚本 `sql/shop_cart_merge_duplicates.sql` ## 订阅消息 - 模板 ID:`sh1K9iK7vZjebUNFu6OsMsnsJxm4whThWGrhN7I4zVg`(交易提醒)