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; +}