在线商城
This commit is contained in:
1 parent
d5630ecfb1
commit
09f65b264a
7 files changed
+78
-6
No files matched your search
+5
@@ -2,6 +2,8 @@ package com.bsd.pjcloud.supermarket.entity;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
import com.baomidou.mybatisplus.extension.activerecord.Model;
|
||||
import com.bsd.pjcloud.common.core.util.MoneyDeserializer;
|
||||
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import com.bsd.pjcloud.common.core.util.TenantTable;
|
||||
import lombok.Data;
|
||||
@@ -87,11 +89,13 @@ public class ShopSkuEntity extends Model<ShopSkuEntity> {
|
||||
* 进价/单位分
|
||||
*/
|
||||
@Schema(description="进价/单位分")
|
||||
@JsonDeserialize(using = MoneyDeserializer.class) // 元 -> 分
|
||||
private Integer purchasePrice;
|
||||
/**
|
||||
* 零售价/单位分
|
||||
*/
|
||||
@Schema(description="零售价/单位分")
|
||||
@JsonDeserialize(using = MoneyDeserializer.class) // 元 -> 分
|
||||
private Integer retailPrice;
|
||||
/**
|
||||
* spuID
|
||||
@@ -102,6 +106,7 @@ public class ShopSkuEntity extends Model<ShopSkuEntity> {
|
||||
* 促销价
|
||||
*/
|
||||
@Schema(description="促销价")
|
||||
@JsonDeserialize(using = MoneyDeserializer.class) // 元 -> 分
|
||||
private Integer promotionPrice;
|
||||
/**
|
||||
* 库存
|
||||
|
||||
+22
@@ -0,0 +1,22 @@
|
||||
package com.bsd.pjcloud.supermarket.vo;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
import java.math.BigDecimal;
|
||||
|
||||
@Data
|
||||
public class ShopSpuPageVo {
|
||||
@Schema(description = "商品ID")
|
||||
private Long id;
|
||||
|
||||
@Schema(description = "商品名称")
|
||||
private String productName;
|
||||
|
||||
@Schema(description = "最低价")
|
||||
private BigDecimal minPrice;
|
||||
|
||||
@Schema(description = "总销量")
|
||||
private Integer totalSales;
|
||||
|
||||
// 可扩展其他字段
|
||||
}
|
||||
+11
@@ -37,4 +37,15 @@ public class ShopSpuListAppVo {
|
||||
@Schema(description="商品分类编号")
|
||||
private Long categoryId;
|
||||
|
||||
/**
|
||||
* 最低价(元)
|
||||
*/
|
||||
@Schema(description="最低价(元)")
|
||||
private java.math.BigDecimal minPrice;
|
||||
|
||||
/**
|
||||
* 总库存
|
||||
*/
|
||||
@Schema(description="总库存")
|
||||
private Double totalStock;
|
||||
}
|
||||
+30
-4
@@ -34,15 +34,41 @@ public class AppShopSpuController {
|
||||
@Operation(summary = "APP商品分页", description = "移动端商品分页")
|
||||
public R<IPage<ShopSpuListAppVo>> page(
|
||||
@ParameterObject Page page,
|
||||
@RequestParam(required = false) Integer categoryId,
|
||||
@RequestParam(required = false) String keyword
|
||||
@RequestParam(required = false) Long categoryId,
|
||||
@RequestParam(required = false) String keyword,
|
||||
@RequestParam(required = false) String merchantId
|
||||
) {
|
||||
LambdaQueryWrapper<ShopSpuEntity> wrapper = Wrappers.lambdaQuery();
|
||||
wrapper.eq(categoryId != null, ShopSpuEntity::getCategoryId, categoryId);
|
||||
wrapper.like(StrUtil.isNotBlank(keyword), ShopSpuEntity::getProductName, keyword);
|
||||
wrapper.like(cn.hutool.core.util.StrUtil.isNotBlank(keyword), ShopSpuEntity::getProductName, keyword);
|
||||
wrapper.eq(ShopSpuEntity::getStatus, 0); // 只查上架
|
||||
if (cn.hutool.core.util.StrUtil.isNotBlank(merchantId)) {
|
||||
wrapper.apply("FIND_IN_SET({0}, merchant_ids)", merchantId.trim());
|
||||
}
|
||||
IPage<ShopSpuEntity> spuPage = shopSpuService.page(page, wrapper);
|
||||
IPage<ShopSpuListAppVo> voPage = spuPage.convert(spu -> BeanUtils.toBean(spu, ShopSpuListAppVo.class));
|
||||
List<Long> spuIds = spuPage.getRecords().stream().map(ShopSpuEntity::getId).collect(java.util.stream.Collectors.toList());
|
||||
List<ShopSkuEntity> skuList = spuIds.isEmpty() ? List.of() : shopSkuService.list(
|
||||
Wrappers.<ShopSkuEntity>lambdaQuery().in(ShopSkuEntity::getSpuId, spuIds)
|
||||
);
|
||||
java.util.Map<Long, List<ShopSkuEntity>> skuMap = skuList.stream().collect(java.util.stream.Collectors.groupingBy(ShopSkuEntity::getSpuId));
|
||||
IPage<ShopSpuListAppVo> voPage = spuPage.convert(spu -> {
|
||||
ShopSpuListAppVo vo = com.bsd.pjcloud.common.core.util.BeanUtils.toBean(spu, ShopSpuListAppVo.class);
|
||||
List<ShopSkuEntity> skus = skuMap.getOrDefault(spu.getId(), List.of());
|
||||
vo.setMinPrice(skus.stream()
|
||||
.map(ShopSkuEntity::getRetailPrice)
|
||||
.filter(java.util.Objects::nonNull)
|
||||
.map(price -> new java.math.BigDecimal(price).divide(new java.math.BigDecimal(100)))
|
||||
.min(java.math.BigDecimal::compareTo)
|
||||
.orElse(java.math.BigDecimal.ZERO));
|
||||
vo.setTotalStock(
|
||||
skus.stream()
|
||||
.map(ShopSkuEntity::getStock)
|
||||
.filter(java.util.Objects::nonNull)
|
||||
.mapToDouble(Double::doubleValue)
|
||||
.sum()
|
||||
);
|
||||
return vo;
|
||||
});
|
||||
return R.ok(voPage);
|
||||
}
|
||||
|
||||
|
||||
+6
@@ -3,14 +3,17 @@ package com.bsd.pjcloud.supermarket.controller;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import cn.hutool.core.util.ArrayUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.bsd.pjcloud.common.core.util.R;
|
||||
import com.bsd.pjcloud.common.log.annotation.SysLog;
|
||||
import com.bsd.pjcloud.common.security.util.SecurityUtils;
|
||||
import com.bsd.pjcloud.supermarket.entity.ShopSpuEntity;
|
||||
import com.bsd.pjcloud.supermarket.vo.ShopSpuPageVo;
|
||||
import com.bsd.pjcloud.supermarket.entity.ShopSkuEntity;
|
||||
import com.bsd.pjcloud.supermarket.service.ShopSpuService;
|
||||
import com.bsd.pjcloud.supermarket.service.ShopSkuService;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import com.bsd.pjcloud.common.excel.annotation.ResponseExcel;
|
||||
import io.swagger.v3.oas.annotations.security.SecurityRequirement;
|
||||
@@ -23,6 +26,8 @@ import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.stream.Collectors;
|
||||
import java.math.BigDecimal;
|
||||
|
||||
/**
|
||||
* 商品spu
|
||||
@@ -38,6 +43,7 @@ import java.util.Objects;
|
||||
public class ShopSpuController {
|
||||
|
||||
private final ShopSpuService shopSpuService;
|
||||
private final ShopSkuService shopSkuService;
|
||||
|
||||
/**
|
||||
* 分页查询
|
||||
|
||||
+2
-1
@@ -1,6 +1,7 @@
|
||||
package com.bsd.pjcloud.supermarket.service;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.github.yulichang.extension.mapping.base.MPJDeepService;
|
||||
import com.bsd.pjcloud.supermarket.entity.ShopSkuEntity;
|
||||
@@ -21,5 +22,5 @@ public interface ShopSpuService extends MPJDeepService<ShopSpuEntity> {
|
||||
* @param wrapper
|
||||
* @return
|
||||
*/
|
||||
Object pageScope(Page page, LambdaQueryWrapper<ShopSpuEntity> wrapper);
|
||||
IPage<ShopSpuEntity> pageScope(Page page, LambdaQueryWrapper<ShopSpuEntity> wrapper);
|
||||
}
|
||||
+2
-1
@@ -1,6 +1,7 @@
|
||||
package com.bsd.pjcloud.supermarket.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.bsd.pjcloud.common.data.datascope.DataScope;
|
||||
@@ -69,7 +70,7 @@ public class ShopSpuServiceImpl extends ServiceImpl<ShopSpuMapper, ShopSpuEntity
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object pageScope(Page page, LambdaQueryWrapper<ShopSpuEntity> wrapper) {
|
||||
public IPage<ShopSpuEntity> pageScope(Page page, LambdaQueryWrapper<ShopSpuEntity> wrapper) {
|
||||
return baseMapper.selectPageByScope(page, wrapper, DataScope.of());
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user