diff --git a/.workbuddy/memory/2026-08-01.md b/.workbuddy/memory/2026-08-01.md new file mode 100644 index 0000000..7fd817b --- /dev/null +++ b/.workbuddy/memory/2026-08-01.md @@ -0,0 +1,29 @@ +# 2026-08-01 工作记录 + +## 销量累加方式后台可配置功能 +- 用户需求:商品详情页缺销量字段(实际是销量为0时隐藏)、下单后销量不累计;希望后台可配置「销量累加方式」:默认支付累加、可选下单累加。 +- 确认项:1) 销量为0展示「销量:0」;2) 用户已加 `shop_order.sales_accumulated` 字段;3) 取消订单回滚销量;4) 退款不扣减销量(本次预留结构,不实现);5) 列表页不显示已售0。 + +### 后端改动(guilixu-java) +- `ShopGoodsMapper.addSaleCount`:改为 `GREATEST(IFNULL(sales,0)+saleCount, 0)`,支持负数回滚且不为负。 +- `ShopOrder` 实体新增 `salesAccumulated` 字段(Integer,用户已加表字段)。 +- `ShopSettingService` 新增 `getSalesAccumulateType()`(默认10=支付累加,20=下单累加),读取 order 分类下 `salesAccumulateType`。 +- `ShopOrderServiceImpl.updateGoodsSales(order, rollback)`:改造支持幂等(按 salesAccumulated 标记)+ 回滚(delta 取负)。`updateSingleGoodsSales` 接收 delta。 +- `handlePaymentSuccess`:仅当配置=10 时才累加销量。 +- 新增公开方法 `accumulateSalesOnOrderCreated(order)`(配置=20时下单累加)、`handlePaidSuccess(order)`(复用 handlePaymentSuccess,供非微信支付路径触发)、`rollbackSalesOnCancel(order)`。 +- `OrderBusinessService.createOrder`:保存订单商品后调 `accumulateSalesOnOrderCreated`;货到付款、余额支付分支补调 `handlePaidSuccess`(修复此前非微信支付不累加销量的 bug)。 +- `ShopOrderServiceImpl.confirmOfflinePayment`:确认线下收款成功后调 `handlePaymentSuccess`(覆盖线下付款场景)。 +- `OrderCancelServiceImpl.cancelOrder`:已累加销量时调 `rollbackSalesOnCancel` 回滚。 + +### 前端改动(xinlong-shop-taro) +- `pages/shop/product-detail.tsx`:销量展示去掉 `>0` 判断,改为 `{product.sales || 0}` 始终显示。列表页(首页/分类/卡片)保持原逻辑(销量为0不显示)。 + +### 后台管理(guilixu-admin) +- `views/shop/shopSetting/components/order.vue`:新增「销量累加方式」单选(10支付/20下单),默认值10,load 解析 salesAccumulateType。保存复用 batchSaveShopSetting。 + +### 配置初始化 +- 新增 `guilixu-java/sql/sales_accumulate_config.sql`(可选,代码默认已是10),并补充 `UPDATE shop_goods SET sales=0 WHERE sales IS NULL`。 +- 注意:数据库字段名需与实体 `salesAccumulated` 对应(下划线 `sales_accumulated`,MyBatis-Plus 默认映射)。 + +### 编译 +- `mvn -o compile` 通过(exit 0)。 diff --git a/src/pages/shop/product-detail.tsx b/src/pages/shop/product-detail.tsx index f1f419e..e06a4c3 100644 --- a/src/pages/shop/product-detail.tsx +++ b/src/pages/shop/product-detail.tsx @@ -327,9 +327,7 @@ const ProductDetailPage: React.FC = () => { )} - {Number(product.sales) > 0 && ( - 销量: {product.sales} - )} + 销量: {product.sales || 0} 库存: {product.stock || 0} {product.unitName && ( 单位: {product.unitName}