diff --git a/pjcloud-canteen/pjcloud-canteen-api/src/main/java/com/bsd/pjcloud/canteen/api/feign/RemoteCanteenSpuService.java b/pjcloud-canteen/pjcloud-canteen-api/src/main/java/com/bsd/pjcloud/canteen/api/feign/RemoteCanteenSpuService.java index d13d7849d..9481d8795 100644 --- a/pjcloud-canteen/pjcloud-canteen-api/src/main/java/com/bsd/pjcloud/canteen/api/feign/RemoteCanteenSpuService.java +++ b/pjcloud-canteen/pjcloud-canteen-api/src/main/java/com/bsd/pjcloud/canteen/api/feign/RemoteCanteenSpuService.java @@ -50,6 +50,12 @@ public interface RemoteCanteenSpuService { @GetMapping("/canteenSpu/ad/getCanteenSpuList") R getCanteenSpuList(@RequestParam(value = "categoryId",required = false)String categoryId); + /** + * 获取菜品详情(含详情富文本、套餐组成) + */ + @GetMapping("/canteenSpu/ad/getCanteenSpuDetails") + R getCanteenSpuDetails(@RequestParam("id") Long id); + /** * 扣减菜品库存 diff --git a/pjcloud-canteen/pjcloud-canteen-api/src/main/java/com/bsd/pjcloud/canteen/vo/ADCanteenSpuListVO.java b/pjcloud-canteen/pjcloud-canteen-api/src/main/java/com/bsd/pjcloud/canteen/vo/ADCanteenSpuListVO.java index d7460b143..71236c187 100644 --- a/pjcloud-canteen/pjcloud-canteen-api/src/main/java/com/bsd/pjcloud/canteen/vo/ADCanteenSpuListVO.java +++ b/pjcloud-canteen/pjcloud-canteen-api/src/main/java/com/bsd/pjcloud/canteen/vo/ADCanteenSpuListVO.java @@ -24,6 +24,18 @@ public class ADCanteenSpuListVO { @Schema(description="商品名称") private String name; + /** + * 商品简介 + */ + @Schema(description = "商品简介") + private String introduction; + + /** + * 商品详情 + */ + @Schema(description = "商品详情") + private String description; + /** * 商品分类编号 @@ -82,4 +94,16 @@ public class ADCanteenSpuListVO { @Schema(description="餐段类型") private String categoryType; + + /** + * 商品类型:1单品 2套餐 + */ + @Schema(description = "商品类型:1单品 2套餐") + private Integer spuType; + + /** + * 套餐组成(仅套餐时有值) + */ + @Schema(description = "套餐组成") + private java.util.List comboItems; } diff --git a/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/controller/CanteenSpuController.java b/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/controller/CanteenSpuController.java index 2a4f36ab3..73c6afa22 100644 --- a/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/controller/CanteenSpuController.java +++ b/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/controller/CanteenSpuController.java @@ -15,8 +15,10 @@ import com.bsd.pjcloud.canteen.entity.CanteenOnlineSpuEntity; import com.bsd.pjcloud.canteen.entity.CanteenStockEntity; import com.bsd.pjcloud.canteen.mapper.CanteenStockMapper; import com.bsd.pjcloud.canteen.service.CanteenStockService; +import com.bsd.pjcloud.canteen.vo.ADCanteenSpuListVO; import com.bsd.pjcloud.canteen.vo.erp.CanteenSpuSimpleVO; import com.bsd.pjcloud.canteen.vo.erp.CanteenSpuStockVO; +import com.bsd.pjcloud.common.core.util.BeanUtils; import com.bsd.pjcloud.common.core.util.R; import com.bsd.pjcloud.common.log.annotation.SysLog; import com.bsd.pjcloud.canteen.entity.CanteenSpuEntity; @@ -33,6 +35,7 @@ import lombok.RequiredArgsConstructor; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; +import java.util.Collections; import java.util.List; import java.util.Objects; @@ -242,6 +245,30 @@ public class CanteenSpuController { return canteenSpuService.getCanteenSpuList(categoryId); } + /** + * 获取菜品详情(含详情富文本、套餐组成) + */ + @GetMapping("/ad/getCanteenSpuDetails") + public R getCanteenSpuDetails(@RequestParam("id") Long id) { + CanteenSpuEntity detail = canteenSpuService.getDetail(id); + if (detail == null) { + return R.failed("商品不存在"); + } + ADCanteenSpuListVO vo = BeanUtils.toBean(detail, ADCanteenSpuListVO.class); + vo.setIntroduction(detail.getIntroduction()); + vo.setDescription(detail.getDescription()); + int type = detail.getSpuType() == null ? 1 : detail.getSpuType(); + vo.setSpuType(type); + if (type == 2) { + vo.setComboItems(canteenSpuService.loadComboItemVos(Collections.singletonList(id)) + .getOrDefault(id, Collections.emptyList())); + } + else { + vo.setComboItems(Collections.emptyList()); + } + return R.ok(vo); + } + @PostMapping("/ad/updateSkuStock") @SysLog("更新菜品库存") diff --git a/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/service/impl/CanteenSpuServiceImpl.java b/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/service/impl/CanteenSpuServiceImpl.java index d82b1a93b..f3fc32eb2 100644 --- a/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/service/impl/CanteenSpuServiceImpl.java +++ b/pjcloud-canteen/pjcloud-canteen-biz/src/main/java/com/bsd/pjcloud/canteen/service/impl/CanteenSpuServiceImpl.java @@ -92,11 +92,31 @@ public class CanteenSpuServiceImpl extends ServiceImpl canteenCategoryEntities = canteenCategoryMapper.selectList(new LambdaQueryWrapper().in(CanteenCategoryEntity::getId, cIds)); Map> listMap = canteenCategoryEntities.stream().collect(Collectors.groupingBy(CanteenCategoryEntity::getId)); - bean.forEach(item -> { - if (null != listMap.get(item.getCategoryId()).get(0).getCategoryType()) { + List comboIds = canteenSpuEntities.stream() + .filter(e -> Objects.equals(e.getSpuType(), 2) && e.getId() != null) + .map(CanteenSpuEntity::getId) + .distinct() + .collect(Collectors.toList()); + Map> comboMap = loadComboItemVos(comboIds); + + for (int i = 0; i < bean.size() && i < canteenSpuEntities.size(); i++) { + ADCanteenSpuListVO item = bean.get(i); + CanteenSpuEntity entity = canteenSpuEntities.get(i); + item.setIntroduction(entity.getIntroduction()); + item.setDescription(entity.getDescription()); + int type = entity.getSpuType() == null ? 1 : entity.getSpuType(); + item.setSpuType(type); + if (type == 2) { + item.setComboItems(comboMap.getOrDefault(entity.getId(), Collections.emptyList())); + } + else { + item.setComboItems(Collections.emptyList()); + } + if (item.getCategoryId() != null && listMap.get(item.getCategoryId()) != null + && listMap.get(item.getCategoryId()).get(0).getCategoryType() != null) { item.setCategoryType(listMap.get(item.getCategoryId()).get(0).getCategoryType()); } - }); + } return R.ok(bean); } @@ -321,8 +341,8 @@ public class CanteenSpuServiceImpl extends ServiceImpl items = entity.getComboItems(); - if (CollUtil.isEmpty(items) || items.stream().filter(i -> i.getChildSpuId() != null).count() < 2) { - throw new IllegalArgumentException("套餐至少选择 2 个组成菜品"); + if (CollUtil.isEmpty(items) || items.stream().filter(i -> i.getChildSpuId() != null).count() < 1) { + throw new IllegalArgumentException("套餐至少选择 1 个组成菜品"); } Set childIds = new HashSet<>(); for (CanteenSpuComboItemEntity item : items) {