Files
gxwebsoft 8d8080c7bf feat(shopZone): 新增专区折扣系数功能及购物车链路支持
- HomeSection 模型增加 discountRate 字段,默认 1.00 表示不打折
- zoneEdit 组件新增折扣系数输入框,支持设置 0.01~1 之间的折扣率
- 后端 guilixu-java 增加专区折扣逻辑,成交价=市场价×折扣系数,保证后端价格计算安全
- 小程序 guilixu-taro 频道详情和商品详情支持专区折扣展示和传参
- 购物车新增 sectionId 字段,支持专区折扣价计算,完善购物车加购与价格计算逻辑
- 提供对应迁移 SQL 脚本更新数据库结构(专区折扣率与购物车 section_id)
- 修复历史订单商品支付状态,补偿专区销量统计数据
- MEMORY 文档补充详细开发与设计说明,明确双后端接口调度和业务逻辑划分
2026-08-18 10:53:15 +08:00

4.3 KiB
Raw Permalink Blame History

2026-08-18 工作日志

专区商城价 = 市场价 × 折扣系数 功能(已实现)

客户要求:专区的商城价显示为市场价的 0.78(并按此价成交)。已与用户确认:展示+成交价都按系数、每专区单独配(默认1.00)、基数=市场价 salePrice。

后端 guilixu-java(仅此,商城走 guilixu-java

  • ShopHomeSection + ShopHomeSectionParam 增加 discountRate(BigDecimal, 默认1.00)。
  • 迁移 SQLguilixu-admin/zone-discount-rate-10606.sqlALTER TABLE shop_home_section ADD discount_rate DECIMAL(10,2) NOT NULL DEFAULT 1.00)。需在生产库执行。
  • OrderCreateRequest.OrderGoodsItem 增加 sectionId(每商品项携带专区ID)。
  • OrderBusinessService 两处价格解析(①validateAndCalculateTotal 算总额 ②createOrder 落库订单商品价)都加了专区折扣逻辑:若 item.sectionId 命中且商品 section_ids 含它、且专区 discountRate≠1,则 actualPrice = goods.getSalePrice() × rate(保留两位小数,HALF_UP)。后端不信任前端传价,按 sectionId 重算,防篡改。

后台 guilixu-admin

  • src/api/shop/shopZone/model/index.tsHomeSection 增加 discountRate?: number
  • src/views/special/zone/components/zoneEdit.vue:表单加「折扣系数」输入框(a-input-number0.01~1,默认1,提示"专区商城价=市场价×系数"),表单默认值 discountRate: 1

小程序 guilixu-taro(仅「专区→立即购买」链路打通)

  • src/api/shop/shopHomeSection/index.ts 增加 getHomeSection(id)
  • src/api/shop/shopHomeSection/model/index.tsHomeSection 增加 discountRate?
  • section-detail.tsx:进入时 getHomeSection 取折扣系数并展示(价格=市场价×系数,划线价显示市场价),跳转详情带 sectionId+discountRate
  • product-detail.tsx:读 sectionId/discountRate,按系数展示;立即购买时把系数写入 buy_now 存储并带参跳结算。
  • src/api/shop/shopOrder/model/index.tsOrderGoodsItem 增加 sectionId?
  • checkout.tsx:增加 getItemDisplayPrice/getItemSectionId,按系数估价并随下单提交 sectionId

⚠️ 已知限制

  • 购物车链路不支持专区折扣:服务端 shop_cart 表无 sectionId 字段,从专区「加入购物车」再结算会走原价(仅「立即购买」享受折扣)。若要购物车也生效,需给 shop_cart 表加 section_id 并在下单时透传——后续需求。
  • 未执行迁移 SQL、未重新部署后端、未构建发布前端,需按环境操作。

验证

  • 前端 tsc --noEmit 因环境配置(taro 缺 @tarojs/taro 类型、admin 大量既存错误)未完整跑通,但本次改动文件未产生任何新报错。
  • 后端 Maven 不在本环境,未编译;改动为标准 Java,已逐行核对。

购物车链路打通专区折扣(补充实现)

用户要求把"购物车也支持专区折扣"补上。在「立即购买」已实现基础上,打通购物车链路:

  • 后端 guilixu-javaShopCart 实体加 sectionId(真实列)+discountRate(exist=false 关联字段)ShopCartMapper.xml 的 selectSql 增加 LEFT JOIN shop_home_section hs ON a.section_id = hs.section_id 并选 hs.discount_rate AS discount_ratesection_id 为 NULL 时不影响普通商品);ShopCartServiceImpl.addToCart 在"已存在累加"分支若本次新传 sectionId 非空则刷新 existCart.sectionId(让专区加购覆盖普通加购的 null)。迁移SQL:zone-cart-section-id-10606.sqlALTER TABLE shop_cart ADD section_id INT NULL)。
  • 小程序 guilixu-taroCartContext.addItem 增可选 sectionId 参数并透传给加购接口;refresh 映射带 sectionId/discountRateCartItem 接口加两字段;calcPricediscountRate≠1 时用 salePrice×ratesection-detail/product-detail 加购调用传 sectionIdcart.tsx 单价展示用折扣价;checkout.tsxgetItemDisplayPrice 折扣分支改读顶层 salePrice(购物车项 product 为空,否则算不出折扣价)。
  • 下单成交价仍由 OrderBusinessServicesectionId 重算,购物车项带 sectionId 后自动生效,无需改下单逻辑。
  • 验证:taro tsc --noEmit 对本次改动 5 个文件零新报错。