|
@@ -1,10 +1,15 @@
|
|
|
package cn.iocoder.yudao.module.product.controller.app.spu;
|
|
|
|
|
|
+import cn.hutool.core.collection.CollUtil;
|
|
|
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
|
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
|
|
+import cn.iocoder.yudao.module.member.api.level.MemberLevelApi;
|
|
|
+import cn.iocoder.yudao.module.member.api.level.dto.MemberLevelRespDTO;
|
|
|
+import cn.iocoder.yudao.module.member.api.user.MemberUserApi;
|
|
|
+import cn.iocoder.yudao.module.member.api.user.dto.MemberUserRespDTO;
|
|
|
import cn.iocoder.yudao.module.product.controller.app.spu.vo.AppProductSpuDetailRespVO;
|
|
|
-import cn.iocoder.yudao.module.product.controller.app.spu.vo.AppProductSpuPageRespVO;
|
|
|
import cn.iocoder.yudao.module.product.controller.app.spu.vo.AppProductSpuPageReqVO;
|
|
|
+import cn.iocoder.yudao.module.product.controller.app.spu.vo.AppProductSpuPageRespVO;
|
|
|
import cn.iocoder.yudao.module.product.convert.spu.ProductSpuConvert;
|
|
|
import cn.iocoder.yudao.module.product.dal.dataobject.sku.ProductSkuDO;
|
|
|
import cn.iocoder.yudao.module.product.dal.dataobject.spu.ProductSpuDO;
|
|
@@ -23,10 +28,12 @@ import org.springframework.web.bind.annotation.RestController;
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
|
import javax.validation.Valid;
|
|
|
+import java.util.Collections;
|
|
|
import java.util.List;
|
|
|
|
|
|
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
|
|
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
|
|
|
+import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
|
|
|
import static cn.iocoder.yudao.module.product.enums.ErrorCodeConstants.SPU_NOT_ENABLE;
|
|
|
import static cn.iocoder.yudao.module.product.enums.ErrorCodeConstants.SPU_NOT_EXISTS;
|
|
|
|
|
@@ -41,6 +48,11 @@ public class AppProductSpuController {
|
|
|
@Resource
|
|
|
private ProductSkuService productSkuService;
|
|
|
|
|
|
+ @Resource
|
|
|
+ private MemberLevelApi memberLevelApi;
|
|
|
+ @Resource
|
|
|
+ private MemberUserApi memberUserApi;
|
|
|
+
|
|
|
@GetMapping("/list")
|
|
|
@Operation(summary = "获得商品 SPU 列表")
|
|
|
@Parameters({
|
|
@@ -51,14 +63,32 @@ public class AppProductSpuController {
|
|
|
@RequestParam("recommendType") String recommendType,
|
|
|
@RequestParam(value = "count", defaultValue = "10") Integer count) {
|
|
|
List<ProductSpuDO> list = productSpuService.getSpuList(recommendType, count);
|
|
|
- return success(ProductSpuConvert.INSTANCE.convertListForGetSpuList(list));
|
|
|
+ if (CollUtil.isEmpty(list)) {
|
|
|
+ return success(Collections.emptyList());
|
|
|
+ }
|
|
|
+
|
|
|
+ // 拼接返回
|
|
|
+ List<AppProductSpuPageRespVO> voList = ProductSpuConvert.INSTANCE.convertListForGetSpuList(list);
|
|
|
+ // 处理 vip 价格
|
|
|
+ MemberLevelRespDTO memberLevel = getMemberLevel();
|
|
|
+ voList.forEach(vo -> vo.setVipPrice(calculateVipPrice(vo.getPrice(), memberLevel)));
|
|
|
+ return success(voList);
|
|
|
}
|
|
|
|
|
|
@GetMapping("/page")
|
|
|
@Operation(summary = "获得商品 SPU 分页")
|
|
|
public CommonResult<PageResult<AppProductSpuPageRespVO>> getSpuPage(@Valid AppProductSpuPageReqVO pageVO) {
|
|
|
PageResult<ProductSpuDO> pageResult = productSpuService.getSpuPage(pageVO);
|
|
|
- return success(ProductSpuConvert.INSTANCE.convertPageForGetSpuPage(pageResult));
|
|
|
+ if (CollUtil.isEmpty(pageResult.getList())) {
|
|
|
+ return success(PageResult.empty(pageResult.getTotal()));
|
|
|
+ }
|
|
|
+
|
|
|
+ // 拼接返回
|
|
|
+ PageResult<AppProductSpuPageRespVO> voPageResult = ProductSpuConvert.INSTANCE.convertPageForGetSpuPage(pageResult);
|
|
|
+ // 处理 vip 价格
|
|
|
+ MemberLevelRespDTO memberLevel = getMemberLevel();
|
|
|
+ voPageResult.getList().forEach(vo -> vo.setVipPrice(calculateVipPrice(vo.getPrice(), memberLevel)));
|
|
|
+ return success(voPageResult);
|
|
|
}
|
|
|
|
|
|
@GetMapping("/get-detail")
|
|
@@ -74,10 +104,40 @@ public class AppProductSpuController {
|
|
|
throw exception(SPU_NOT_ENABLE);
|
|
|
}
|
|
|
|
|
|
- // 查询商品 SKU
|
|
|
+ // 拼接返回
|
|
|
List<ProductSkuDO> skus = productSkuService.getSkuListBySpuId(spu.getId());
|
|
|
- // 拼接
|
|
|
- return success(ProductSpuConvert.INSTANCE.convertForGetSpuDetail(spu, skus));
|
|
|
+ AppProductSpuDetailRespVO detailVO = ProductSpuConvert.INSTANCE.convertForGetSpuDetail(spu, skus);
|
|
|
+ // 处理 vip 价格
|
|
|
+ MemberLevelRespDTO memberLevel = getMemberLevel();
|
|
|
+ detailVO.setVipPrice(calculateVipPrice(detailVO.getPrice(), memberLevel));
|
|
|
+ return success(detailVO);
|
|
|
+ }
|
|
|
+
|
|
|
+ private MemberLevelRespDTO getMemberLevel() {
|
|
|
+ Long userId = getLoginUserId();
|
|
|
+ if (userId == null) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ MemberUserRespDTO user = memberUserApi.getUser(userId);
|
|
|
+ if (user.getLevelId() == null || user.getLevelId() <= 0) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ return memberLevelApi.getMemberLevel(user.getLevelId());
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 计算会员 VIP 优惠价格
|
|
|
+ *
|
|
|
+ * @param price 原价
|
|
|
+ * @param memberLevel 会员等级
|
|
|
+ * @return 优惠价格
|
|
|
+ */
|
|
|
+ public Integer calculateVipPrice(Integer price, MemberLevelRespDTO memberLevel) {
|
|
|
+ if (memberLevel == null || memberLevel.getDiscountPercent() == null) {
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ Integer newPrice = price * memberLevel.getDiscountPercent() / 100;
|
|
|
+ return price - newPrice;
|
|
|
}
|
|
|
|
|
|
}
|