From 9219ea4ab016b9eb31caa5d887f4230424e376b4 Mon Sep 17 00:00:00 2001 From: Jerry Yan <792602257@qq.com> Date: Fri, 28 Nov 2025 11:12:21 +0800 Subject: [PATCH] =?UTF-8?q?feat(price):=20=E6=96=B0=E5=A2=9E=E6=A0=B9?= =?UTF-8?q?=E6=8D=AE=E5=95=86=E5=93=81=E7=B1=BB=E5=9E=8B=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E7=AE=80=E5=8C=96=E5=95=86=E5=93=81=E5=88=97=E8=A1=A8=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在 PriceBiz 中新增 listSimpleGoodsByScenic 方法,支持按 productType 查询不同数据源 - 新增对多种商品类型的处理逻辑,包括 VLOG_VIDEO、PHOTO、PHOTO_SET 等 - 为兼容旧逻辑,增加 listAllSimpleGoods 方法轮询所有启用的商品类型 - 在 PriceConfigController 中修改 goodsList 接口,支持 productType 参数并返回简化商品列表 - 引入 SimpleGoodsRespVO 用于简化商品信息响应结构 - 注入 PuzzleTemplateMapper 和 IProductTypeCapabilityManagementService 依赖以支持新功能 --- .../java/com/ycwl/basic/biz/PriceBiz.java | 106 ++++++++++++++++++ .../controller/pc/PriceConfigController.java | 7 +- .../pc/price/resp/SimpleGoodsRespVO.java | 28 +++++ 3 files changed, 139 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/ycwl/basic/model/pc/price/resp/SimpleGoodsRespVO.java diff --git a/src/main/java/com/ycwl/basic/biz/PriceBiz.java b/src/main/java/com/ycwl/basic/biz/PriceBiz.java index f7b88be5..72b1baec 100644 --- a/src/main/java/com/ycwl/basic/biz/PriceBiz.java +++ b/src/main/java/com/ycwl/basic/biz/PriceBiz.java @@ -7,9 +7,14 @@ import com.ycwl.basic.model.pc.face.entity.FaceEntity; import com.ycwl.basic.model.pc.order.entity.OrderEntity; import com.ycwl.basic.model.pc.price.entity.PriceConfigEntity; import com.ycwl.basic.model.pc.price.resp.GoodsListRespVO; +import com.ycwl.basic.model.pc.price.resp.SimpleGoodsRespVO; import com.ycwl.basic.model.pc.scenic.entity.ScenicConfigEntity; import com.ycwl.basic.model.pc.template.resp.TemplateRespVO; import com.ycwl.basic.model.pc.video.entity.MemberVideoEntity; +import com.ycwl.basic.product.capability.ProductTypeCapability; +import com.ycwl.basic.product.service.IProductTypeCapabilityManagementService; +import com.ycwl.basic.puzzle.entity.PuzzleTemplateEntity; +import com.ycwl.basic.puzzle.mapper.PuzzleTemplateMapper; import com.ycwl.basic.repository.FaceRepository; import com.ycwl.basic.repository.MemberRelationRepository; import com.ycwl.basic.repository.PriceRepository; @@ -46,6 +51,10 @@ public class PriceBiz { private CouponBiz couponBiz; @Autowired private MemberRelationRepository memberRelationRepository; + @Autowired + private PuzzleTemplateMapper puzzleTemplateMapper; + @Autowired + private IProductTypeCapabilityManagementService productTypeCapabilityManagementService; public List listGoodsByScenic(Long scenicId) { List goodsList = new ArrayList<>(); @@ -70,6 +79,103 @@ public class PriceBiz { return goodsList; } + /** + * 根据景区ID和商品类型查询简化的商品列表 + * + * @param scenicId 景区ID + * @param productType 商品类型(可选,为空时返回所有商品) + * @return 简化的商品列表 + */ + public List listSimpleGoodsByScenic(Long scenicId, String productType) { + List goodsList = new ArrayList<>(); + + // 如果 productType 为空,兼容旧逻辑 + if (productType == null || productType.isEmpty()) { + return listAllSimpleGoods(scenicId); + } + + // 根据 productType 查询不同数据源 + switch (productType) { + case "VLOG_VIDEO": + // 从 template 表查询视频模板 + List templateList = templateRepository.getTemplateListByScenicId(scenicId); + templateList.stream() + .map(template -> new SimpleGoodsRespVO(template.getId(), template.getName(), productType)) + .forEach(goodsList::add); + break; + + case "PHOTO_VLOG": + // TODO + goodsList.add(new SimpleGoodsRespVO(scenicId, "【待实现】pLog视频", productType)); + break; + + case "PHOTO": + goodsList.add(new SimpleGoodsRespVO(scenicId, "单张照片", productType)); + break; + + case "PHOTO_SET": + // 返回固定的照片集条目 + goodsList.add(new SimpleGoodsRespVO(scenicId, "照片集", productType)); + break; + + case "PHOTO_LOG": + // 从 template 表查询pLog模板 + List puzzleList = puzzleTemplateMapper.list(scenicId, null, null); + puzzleList.stream() + .map(template -> new SimpleGoodsRespVO(template.getId(), template.getName(), productType)) + .forEach(goodsList::add); + break; + + case "RECORDING_SET": + // 返回固定的录像集条目 + goodsList.add(new SimpleGoodsRespVO(scenicId, "录像集", productType)); + break; + + case "PHOTO_PRINT": + // 打印类返回单一通用条目 + goodsList.add(new SimpleGoodsRespVO(scenicId, "照片打印", productType)); + break; + case "PHOTO_PRINT_MU": + // 打印类返回单一通用条目 + goodsList.add(new SimpleGoodsRespVO(scenicId, "手机照片打印", productType)); + break; + case "PHOTO_PRINT_FX": + // 打印类返回单一通用条目 + goodsList.add(new SimpleGoodsRespVO(scenicId, "效果图片打印", productType)); + break; + case "MACHINE_PRINT": + // 打印类返回单一通用条目 + goodsList.add(new SimpleGoodsRespVO(scenicId, "一体机打印", productType)); + break; + + default: + // 不支持的 productType,返回空列表 + break; + } + + return goodsList; + } + + /** + * 兼容旧逻辑:返回所有商品 + * 通过查询系统中所有已知的 productType,将结果综合到一起 + */ + private List listAllSimpleGoods(Long scenicId) { + List goodsList = new ArrayList<>(); + + // 从 ProductTypeCapability 服务查询所有已知的商品类型(仅包含启用的) + List capabilities = productTypeCapabilityManagementService.queryAll(false); + + // 轮询每个商品类型,获取对应的商品列表 + for (ProductTypeCapability capability : capabilities) { + String productType = capability.getProductType(); + List typeGoodsList = listSimpleGoodsByScenic(scenicId, productType); + goodsList.addAll(typeGoodsList); + } + + return goodsList; + } + public List queryGoodsList(Integer configId) { PriceConfigEntity priceConfig = priceRepository.getPriceConfig(configId); if (priceConfig == null) { diff --git a/src/main/java/com/ycwl/basic/controller/pc/PriceConfigController.java b/src/main/java/com/ycwl/basic/controller/pc/PriceConfigController.java index 7d36fbb7..74695527 100644 --- a/src/main/java/com/ycwl/basic/controller/pc/PriceConfigController.java +++ b/src/main/java/com/ycwl/basic/controller/pc/PriceConfigController.java @@ -2,6 +2,7 @@ package com.ycwl.basic.controller.pc; import com.ycwl.basic.biz.PriceBiz; import com.ycwl.basic.model.pc.price.resp.GoodsListRespVO; +import com.ycwl.basic.model.pc.price.resp.SimpleGoodsRespVO; import com.ycwl.basic.utils.ApiResponse; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -16,8 +17,10 @@ public class PriceConfigController { private PriceBiz priceBiz; @GetMapping("/goodsList") - public ApiResponse> goodsList(@RequestParam Long scenicId) { - return ApiResponse.success(priceBiz.listGoodsByScenic(scenicId)); + public ApiResponse> goodsList( + @RequestParam Long scenicId, + @RequestParam(required = false) String productType) { + return ApiResponse.success(priceBiz.listSimpleGoodsByScenic(scenicId, productType)); } } \ No newline at end of file diff --git a/src/main/java/com/ycwl/basic/model/pc/price/resp/SimpleGoodsRespVO.java b/src/main/java/com/ycwl/basic/model/pc/price/resp/SimpleGoodsRespVO.java new file mode 100644 index 00000000..7377f310 --- /dev/null +++ b/src/main/java/com/ycwl/basic/model/pc/price/resp/SimpleGoodsRespVO.java @@ -0,0 +1,28 @@ +package com.ycwl.basic.model.pc.price.resp; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 简化的商品响应VO - 仅包含商品ID和名称 + */ +@NoArgsConstructor +@AllArgsConstructor +@Data +public class SimpleGoodsRespVO { + /** + * 商品ID(模板ID或固定值) + */ + private Long goodsId; + + /** + * 商品名称 + */ + private String goodsName; + + /** + * 商品类型 + */ + private String productType; +}