商品模块代码提交

This commit is contained in:
谭凯凯 2025-02-18 14:51:09 +08:00 committed by Tankaikai
parent 312f280f1f
commit cc4616df01
6 changed files with 92 additions and 22 deletions

View File

@ -30,7 +30,6 @@ public class UProductController {
@GetMapping("/miniApp/home/queryProduct")
@OperationLog("小程序点餐-首页-商品列表")
public CzgResult<MiniAppHomeProductVo> queryProductForMiniAppHome(MiniHomeProductParam param) {
String msg = "{\"温度\":[\"\",\"少冰\"],\"甜度\":[\"少糖\",\"正常糖\"],\"尺码\":[]}";
MiniAppHomeProductVo data = uProductService.queryProductForMiniAppHome(param);
return CzgResult.success(data);
}

View File

@ -198,6 +198,9 @@ public class ProductDTO implements Serializable {
*/
private List<ProdSkuDTO> skuList;
/**
* 套餐列表
*/
private List<ProductGroupVo> proGroupVo;
/**

View File

@ -65,7 +65,13 @@ public class ProdSku implements Serializable {
* 规格详情
*/
private String specInfo;
/**
* 商品封面图
*/
private String coverImg;
/**
* 重量
*/
private BigDecimal weight;
/**
* 销量

View File

@ -5,7 +5,6 @@ import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalTime;
import java.util.ArrayList;
import java.util.List;
@ -18,23 +17,53 @@ public class ProductGroupVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 套餐内商品总数
*/
private Integer count;
//选几个
/**
* 可选套餐几选几固定套餐没有值
*/
private Integer number;
//类别
/**
* 可选套餐名称
*/
private String title;
//食物
/**
* 套餐内商品列表
*/
private List<Food> goods = new ArrayList<>();
@Data
public static class Food {
/**
* 商品ID
*/
private Integer proId;
/**
* 商品名称
*/
private String proName;
/**
* skuId
*/
private Integer skuId;
/**
* sku名称
*/
private String skuName;
/**
* 商品单价
*/
private BigDecimal price;
/**
* 商品数量
*/
private String number;
private LocalTime unitName;
/**
* 单位名称
*/
private String unitName;
}
}

View File

@ -23,12 +23,14 @@ import com.mybatisflex.core.query.QueryWrapper;
import com.mybatisflex.core.update.UpdateChain;
import com.mybatisflex.spring.service.impl.ServiceImpl;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import static com.czg.product.entity.table.ProductTableDef.PRODUCT;
import static com.czg.product.entity.table.ShopProdCategoryTableDef.SHOP_PROD_CATEGORY;
@ -41,6 +43,7 @@ import static com.czg.product.entity.table.ShopProdUnitTableDef.SHOP_PROD_UNIT;
* @author Tankaikai tankaikai@aliyun.com
* @since 1.0 2025-02-16
*/
@Slf4j
@AllArgsConstructor
@Service
public class ProductServiceImpl extends ServiceImpl<ProductMapper, Product> implements ProductService {
@ -49,6 +52,9 @@ public class ProductServiceImpl extends ServiceImpl<ProductMapper, Product> impl
private QueryWrapper buildQueryWrapper(ProductDTO param) {
QueryWrapper queryWrapper = PageUtil.buildSortQueryWrapper();
if (ObjUtil.isNotNull(param.getId())) {
queryWrapper.like(Product::getId, param.getId());
}
if (StrUtil.isNotEmpty(param.getName())) {
queryWrapper.like(Product::getName, param.getName());
}
@ -72,8 +78,7 @@ public class ProductServiceImpl extends ServiceImpl<ProductMapper, Product> impl
return queryWrapper;
}
@Override
public Page<ProductDTO> getProductPage(ProductDTO param) {
private QueryWrapper buildFullQueryWrapper(ProductDTO param) {
QueryWrapper queryWrapper = buildQueryWrapper(param);
queryWrapper.select(PRODUCT.DEFAULT_COLUMNS)
.select(SHOP_PROD_UNIT.NAME.as(ProductDTO::getUnitName))
@ -83,20 +88,30 @@ public class ProductServiceImpl extends ServiceImpl<ProductMapper, Product> impl
.leftJoin(SHOP_PROD_UNIT).on(SHOP_PROD_UNIT.ID.eq(PRODUCT.UNIT_ID))
.leftJoin(SHOP_PROD_CATEGORY).on(SHOP_PROD_CATEGORY.ID.eq(PRODUCT.CATEGORY_ID))
.leftJoin(SHOP_PROD_SPEC).on(SHOP_PROD_SPEC.ID.eq(PRODUCT.SPEC_ID));
return queryWrapper;
}
@Override
public Page<ProductDTO> getProductPage(ProductDTO param) {
QueryWrapper queryWrapper = buildFullQueryWrapper(param);
return super.pageAs(PageUtil.buildPage(), queryWrapper, ProductDTO.class);
}
@Override
public List<ProductDTO> getProductList(ProductDTO param) {
QueryWrapper queryWrapper = buildQueryWrapper(param);
//queryWrapper.eq(Product::getStatus, StatusEnum.ENABLED.value());
QueryWrapper queryWrapper = buildFullQueryWrapper(param);
return super.listAs(queryWrapper, ProductDTO.class);
}
@Override
public ProductDTO getProductById(Long id) {
Long shopId = StpKit.USER.getLoginIdAsLong();
return super.getOneAs(query().eq(Product::getId, id).eq(Product::getShopId, shopId), ProductDTO.class);
ProductDTO param = new ProductDTO();
param.setId(id);
QueryWrapper queryWrapper = buildFullQueryWrapper(param);
ProductDTO dto = super.getOneAs(queryWrapper, ProductDTO.class);
List<ProdSkuDTO> skuList = prodSkuMapper.selectListByQueryAs(query().eq(ProdSku::getProductId, id).eq(ProdSku::getIsDel, DeleteEnum.NORMAL.value()), ProdSkuDTO.class);
dto.setSkuList(skuList);
return dto;
}
@Override
@ -109,6 +124,8 @@ public class ProductServiceImpl extends ServiceImpl<ProductMapper, Product> impl
}
Product entity = BeanUtil.copyProperties(dto, Product.class);
entity.setImages(JSON.toJSONString(dto.getImages()));
entity.setGroupSnap("[]");
//套餐
if (ProductTypeEnum.PACKAGE.value().equals(dto.getType())) {
//套餐内容
@ -146,6 +163,8 @@ public class ProductServiceImpl extends ServiceImpl<ProductMapper, Product> impl
throw new CzgException("商品已存在");
}
Product entity = BeanUtil.copyProperties(dto, Product.class);
entity.setImages(JSON.toJSONString(dto.getImages()));
entity.setGroupSnap("[]");
//套餐
if (ProductTypeEnum.PACKAGE.value().equals(dto.getType())) {
//套餐内容
@ -157,20 +176,34 @@ public class ProductServiceImpl extends ServiceImpl<ProductMapper, Product> impl
entity.setShopId(shopId);
super.save(entity);
List<ProdSkuDTO> skuList = dto.getSkuList();
// 商品SKU-ID列表
List<Long> skuIdList = prodSkuMapper.selectListByQueryAs(query().select(ProdSku::getId).eq(ProdSku::getProductId, dto.getId()), Long.class);
dto.setSkuList(skuList);
if (CollUtil.isNotEmpty(skuList)) {
List<ProdSku> prodSkuList = new ArrayList<>();
for (ProdSkuDTO prodSkuDTO : skuList) {
ProdSku prodSku = BeanUtil.copyProperties(prodSkuDTO, ProdSku.class);
prodSku.setShopId(entity.getShopId());
prodSku.setProductId(entity.getId());
prodSku.setRealSalesNumber(BigDecimal.ZERO);
prodSku.setIsPauseSale(YesNoEnum.NO.value());
prodSku.setIsGrounding(YesNoEnum.YES.value());
prodSku.setIsDel(DeleteEnum.NORMAL.value());
prodSkuList.add(prodSku);
if (prodSku.getId() == null) {
prodSku.setShopId(entity.getShopId());
prodSku.setProductId(entity.getId());
prodSku.setRealSalesNumber(BigDecimal.ZERO);
prodSku.setIsPauseSale(YesNoEnum.NO.value());
prodSku.setIsGrounding(YesNoEnum.YES.value());
prodSku.setIsDel(DeleteEnum.NORMAL.value());
prodSkuMapper.insert(prodSku);
} else {
prodSkuMapper.update(prodSku);
}
}
prodSkuMapper.insertBatch(prodSkuList);
// 实际提交的商品SKU-ID列表
List<Long> list = skuList.stream().map(ProdSkuDTO::getId).filter(Objects::nonNull).distinct().toList();
skuIdList.removeAll(list);
}
// 逻辑删除无用的SKU数据
UpdateChain.of(ProdSku.class)
.set(ProdSku::getIsDel, DeleteEnum.DELETED.value())
.in(Product::getId, skuIdList)
.eq(Product::getShopId, shopId)
.update();
return true;
}

View File

@ -92,7 +92,7 @@ public class UProductServiceImpl extends ServiceImpl<ProductMapper, Product> imp
private List<MiniAppHomeProductInfoVo> buildProductList(QueryWrapper queryWrapper) {
List<ProductDTO> dtoList = productMapper.selectListByQueryAs(queryWrapper, ProductDTO.class);
List<Long> prodIdList = dtoList.stream().map(ProductDTO::getId).distinct().toList();
List<ProdSkuDTO> skuList = prodSkuMapper.selectListByQueryAs(query().in(ProdSku::getProductId, prodIdList), ProdSkuDTO.class);
List<ProdSkuDTO> skuList = prodSkuMapper.selectListByQueryAs(query().in(ProdSku::getProductId, prodIdList).eq(ProdSku::getIsDel, DeleteEnum.NORMAL.value()), ProdSkuDTO.class);
Map<Long, List<ProdSkuDTO>> collect = skuList.stream().collect(Collectors.groupingBy(ProdSkuDTO::getProductId));
List<MiniAppHomeProductInfoVo> products = new ArrayList<>();
for (ProductDTO dto : dtoList) {