商品模块代码提交
This commit is contained in:
parent
312f280f1f
commit
cc4616df01
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -198,6 +198,9 @@ public class ProductDTO implements Serializable {
|
|||
*/
|
||||
private List<ProdSkuDTO> skuList;
|
||||
|
||||
/**
|
||||
* 套餐列表
|
||||
*/
|
||||
private List<ProductGroupVo> proGroupVo;
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -65,7 +65,13 @@ public class ProdSku implements Serializable {
|
|||
* 规格详情
|
||||
*/
|
||||
private String specInfo;
|
||||
/**
|
||||
* 商品封面图
|
||||
*/
|
||||
private String coverImg;
|
||||
/**
|
||||
* 重量
|
||||
*/
|
||||
private BigDecimal weight;
|
||||
/**
|
||||
* 销量
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
Loading…
Reference in New Issue