完成的商品搜索和条件功能

This commit is contained in:
YunaiV
2020-08-04 19:42:54 +08:00
parent f3316d14c7
commit b83262af5f
240 changed files with 246 additions and 859 deletions

View File

@@ -0,0 +1,38 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>product</artifactId>
<groupId>cn.iocoder.mall</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>product-service-api</artifactId>
<dependencies>
<!-- Mall 相关 -->
<dependency>
<groupId>cn.iocoder.mall</groupId>
<artifactId>common-framework</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!-- 工具类相关 -->
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId> <!-- use mapstruct-jdk8 for Java 8 or higher -->
</dependency>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-jdk8</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>
</project>

View File

@@ -0,0 +1,26 @@
package cn.iocoder.mall.product.api;
import cn.iocoder.common.framework.enums.CommonStatusEnum;
import cn.iocoder.common.framework.validator.InEnum;
import cn.iocoder.mall.product.api.bo.ProductAttrBO;
import cn.iocoder.mall.product.api.bo.ProductAttrPageBO;
import cn.iocoder.mall.product.api.bo.ProductAttrSimpleBO;
import cn.iocoder.mall.product.api.bo.ProductAttrValueBO;
import cn.iocoder.mall.product.api.dto.*;
import java.util.List;
public interface ProductAttrService {
ProductAttrPageBO getProductAttrPage(ProductAttrPageDTO productAttrPageDTO);
/**
* 获得规格属性数组
*
* 注意,该方法过滤了禁用的规格
*
* @return 规格属性数组
*/
List<ProductAttrSimpleBO> getProductAttrList();
}

View File

@@ -0,0 +1,19 @@
package cn.iocoder.mall.product.api;
/**
* 商品收藏
* @author xiaofeng
* @date 2019/07/01 23:13
* @version 1.0
*/
public interface ProductSpuCollectionService {
/**
* 商品收藏
* @param spuId
* @param hasCollectionType 1 商品收藏 2 取消收藏
* @param userId
* @return
*/
boolean productSpuCollection(Integer spuId,Integer hasCollectionType,Integer userId);
}

View File

@@ -0,0 +1,35 @@
package cn.iocoder.mall.product.api;
import cn.iocoder.mall.product.api.bo.*;
import cn.iocoder.mall.product.api.dto.ProductSpuAddDTO;
import cn.iocoder.mall.product.api.dto.ProductSpuPageDTO;
import cn.iocoder.mall.product.api.dto.ProductSpuSearchListDTO;
import cn.iocoder.mall.product.api.dto.ProductSpuUpdateDTO;
import java.util.Collection;
import java.util.List;
public interface ProductSpuService {
ProductSpuDetailBO getProductSpuDetail(Integer id);
/**
* 增量获得商品列表,按照 lastId 递增获得
*
* @param lastId 最后查询的编号
* @param limit 大小
* @return 商品列表
*/
List<ProductSpuDetailBO> getProductSpuDetailListForSync(Integer lastId, Integer limit);
List<ProductSpuBO> getProductSpuSearchList(ProductSpuSearchListDTO productSpuSearchListDTO);
List<ProductSpuBO> getProductSpuList(Collection<Integer> ids);
ProductSkuBO getProductSku(Integer id);
List<ProductSkuDetailBO> getProductSkuDetailList(Collection<Integer> ids);
Boolean updateProductSpuSort(Integer adminId, Integer spuId, Integer sort);
}

View File

@@ -0,0 +1,64 @@
package cn.iocoder.mall.product.api;
import cn.iocoder.common.framework.vo.CommonResult;
import cn.iocoder.mall.product.api.bo.UserProductSpuCollectionsBO;
import cn.iocoder.mall.product.api.bo.UserProductSpuCollectionsPageBO;
import cn.iocoder.mall.product.api.dto.UserProductSpuCollectionsAddDTO;
import cn.iocoder.mall.product.api.dto.UserProductSpuCollectionsPageDTO;
import cn.iocoder.mall.product.api.dto.UserProductSpuCollectionsUpdateDTO;
/**
* UserProductSpuCollectionsService
* @author xiaofeng
* @date 2019/07/01 20:27
* @version 1.0
*/
public interface UserProductSpuCollectionsService {
/**
* 添加商品收藏
* @return
*/
int addUserSkuCollections(UserProductSpuCollectionsAddDTO userProductSpuCollectionsAddDTO);
/**
* 获取用户商品收藏
* @param userId 用户ID
* @param spuId 商品ID
* @return
*/
UserProductSpuCollectionsBO getUserSpuCollectionsByUserIdAndSpuId(Integer userId, Integer spuId);
/**
* 取消商品收藏
* @param userProductSpuCollectionsUpdateDTO
* @return
*/
int updateUserProductSpuCollections(UserProductSpuCollectionsUpdateDTO userProductSpuCollectionsUpdateDTO);
/**
* 获取用户收藏列表数据
* @param userProductSpuCollectionsPageDTO
* @return
*/
CommonResult<UserProductSpuCollectionsPageBO> getUserProductSpuCollectionsPage(
UserProductSpuCollectionsPageDTO userProductSpuCollectionsPageDTO);
/**
* 删除收藏数据
* @param userId
* @param spuId
* @return
*/
CommonResult<Boolean> deleteUserProductSpuCollections(Integer userId, Integer spuId);
/**
* 检验用户商品是否收藏
* @param spuId
* @param userId
* @return
*/
CommonResult<Boolean> hasUserSpuFavorite(Integer spuId, Integer userId);
}

View File

@@ -0,0 +1,33 @@
package cn.iocoder.mall.product.api.bo;
import lombok.Data;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.util.Date;
/**
* 商品规格 VO
*/
@Data
@Accessors(chain = true)
public class ProductAttrBO implements Serializable {
/**
* 规格编号
*/
private Integer id;
/**
* 规格名
*/
private String name;
/**
* 状态
*/
private Integer status;
/**
* 创建时间
*/
private Date createTime;
}

View File

@@ -0,0 +1,29 @@
package cn.iocoder.mall.product.api.bo;
import lombok.Data;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.util.List;
/**
* 商品规格精简 VO
*/
@Data
@Accessors(chain = true)
public class ProductAttrSimpleBO implements Serializable {
/**
* 规格编号
*/
private Integer id;
/**
* 规格名
*/
private String name;
/**
* 规格值数组
*/
private List<ProductAttrValueSimpleBO> values;
}

View File

@@ -0,0 +1,37 @@
package cn.iocoder.mall.product.api.bo;
import lombok.Data;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.util.Date;
/**
* 商品规格值 VO
*/
@Data
@Accessors(chain = true)
public class ProductAttrValueBO implements Serializable {
/**
* 规格值编号
*/
private Integer id;
/**
* 规格编号
*/
private Integer attrId;
/**
* 规格值名
*/
private String name;
/**
* 状态
*/
private Integer status;
/**
* 创建时间
*/
private Date createTime;
}

View File

@@ -0,0 +1,33 @@
package cn.iocoder.mall.product.api.bo;
import lombok.Data;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.util.Date;
/**
* 商品规格值 VO
*/
@Data
@Accessors(chain = true)
public class ProductAttrValueDetailBO implements Serializable {
/**
* 规格值编号
*/
private Integer id;
/**
* 规格值名
*/
private String name;
/**
* 状态
*/
private Integer status;
/**
* 创建时间
*/
private Date createTime;
}

View File

@@ -0,0 +1,24 @@
package cn.iocoder.mall.product.api.bo;
import lombok.Data;
import lombok.experimental.Accessors;
import java.io.Serializable;
/**
* 商品规格值 VO
*/
@Data
@Accessors(chain = true)
public class ProductAttrValueSimpleBO implements Serializable {
/**
* 规格值编号
*/
private Integer id;
/**
* 规格值名
*/
private String name;
}

View File

@@ -0,0 +1,91 @@
package cn.iocoder.mall.product.api.bo;
import lombok.Data;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.util.List;
/**
* 商品 Sku 明细 BO包括 Spu 明细)
*/
@Data
@Accessors(chain = true)
public class ProductSkuDetailBO implements Serializable {
/**
* sku 编号
*/
private Integer id;
/**
* SPU 信息
*/
private Spu spu;
/**
* 图片地址
*/
private String picURL;
/**
* 规格值数组
*/
private List<ProductAttrAndValuePairBO> attrs;
/**
* 价格,单位:分
*/
private Integer price;
/**
* 库存数量
*/
private Integer quantity;
@Data
@Accessors(chain = true)
public static class Spu implements Serializable {
/**
* SPU 编号
*/
private Integer id;
// ========== 基本信息 =========
/**
* SPU 名字
*/
private String name;
/**
* 卖点
*/
private String sellPoint;
/**
* 描述
*/
private String description;
/**
* 分类编号
*/
private Integer cid;
/**
* 商品主图地址
*
* 数组,以逗号分隔
*
* 建议尺寸800*800像素你可以拖拽图片调整顺序最多上传15张
*/
private List<String> picUrls;
// ========== 其他信息 =========
/**
* 是否上架商品(是否可见)。
*
* true 为已上架
* false 为已下架
*/
private Boolean visible;
/**
* 排序字段
*/
private Integer sort;
}
}

View File

@@ -0,0 +1,105 @@
package cn.iocoder.mall.product.api.bo;
import lombok.Data;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.util.List;
/**
* 商品 Spu 明细 BO包括 Sku 明细)
*/
@Data
@Accessors(chain = true)
public class ProductSpuDetailBO implements Serializable {
/**
* SPU 编号
*/
private Integer id;
// ========== 基本信息 =========
/**
* SPU 名字
*/
private String name;
/**
* 卖点
*/
private String sellPoint;
/**
* 描述
*/
private String description;
/**
* 分类编号
*/
private Integer cid;
/**
* 分类名
*/
private String categoryName;
/**
* 商品主图地址
*
* 数组,以逗号分隔
*
* 建议尺寸800*800像素你可以拖拽图片调整顺序最多上传15张
*/
private List<String> picUrls;
// ========== 其他信息 =========
/**
* 是否上架商品(是否可见)。
*
* true 为已上架
* false 为已下架
*/
private Boolean visible;
/**
* 排序字段
*/
private Integer sort;
// ========== SKU =========
/**
* SKU 数组
*/
private List<Sku> skus;
/**
* 商品 Sku 明细 BO
*/
@Data
@Accessors(chain = true)
public static class Sku implements Serializable {
/**
* sku 编号
*/
private Integer id;
/**
* 商品编号
*/
private Integer spuId;
/**
* 图片地址
*/
private String picURL;
/**
* 规格值数组
*/
private List<ProductAttrAndValuePairBO> attrs;
/**
* 价格,单位:分
*/
private Integer price;
/**
* 库存数量
*/
private Integer quantity;
}
}

View File

@@ -0,0 +1,74 @@
package cn.iocoder.mall.product.api.bo;
import lombok.Data;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.util.Date;
/**
* 用户_商品_收藏记录表
* @author xiaofeng
* @date 2019-07-01 20:23:30
*/
@Data
@Accessors(chain = true)
public class UserProductSpuCollectionsBO implements Serializable {
/**
* id自增长
*/
private Integer id;
/**
* 用户id
*/
private Integer userId;
/**
* 用户名称
*/
private String nickname;
/**
* 商品id
*/
private Integer spuId;
/**
* 商品名字
*/
private String spuName;
/**
* 图片名字
*/
private String spuImage;
/**
* 卖点
*/
private String sellPoint;
/**
* 价格,单位:分
*/
private Integer price;
/**
* 创建时间
*/
private Date createTime;
/**
* 更新时间
*/
private Date updateTime;
/**
* 删除状态
*/
private Integer deleted;
}

View File

@@ -0,0 +1,30 @@
package cn.iocoder.mall.product.api.bo;
import lombok.Data;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.util.List;
/**
* 商品收藏分页
* @author xiaofeng
* @date 2019/07/06 18:37
* @version 1.0
*/
@Data
@Accessors(chain = true)
public class UserProductSpuCollectionsPageBO implements Serializable {
/**
* 返回的数据列表
*/
private List<UserProductSpuCollectionsBO> list;
/**
* 总量
*/
private Integer total;
}

View File

@@ -0,0 +1,22 @@
package cn.iocoder.mall.product.api.dto;
import lombok.Data;
import lombok.experimental.Accessors;
import javax.validation.constraints.NotNull;
/**
* 商品规格分页 DTO
*/
@Data
@Accessors(chain = true)
public class ProductAttrPageDTO {
private String name;
@NotNull(message = "页码不能为空")
private Integer pageNo;
@NotNull(message = "每页条数不能为空")
private Integer pageSize;
}

View File

@@ -0,0 +1,20 @@
package cn.iocoder.mall.product.api.dto;
import lombok.Data;
import lombok.experimental.Accessors;
/**
* 商品 Spu 搜索列表 DTO
*/
@Data
@Accessors(chain = true)
public class ProductSpuSearchListDTO {
/**
* 商品名
*
* 模糊匹配
*/
private String name;
}

View File

@@ -0,0 +1,75 @@
package cn.iocoder.mall.product.api.dto;
import lombok.Data;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.util.Date;
/**
* 添加商品收藏参数
* @author xiaofeng
* @date 2019/07/01 20:38
* @version 1.0
*/
@Data
@Accessors(chain = true)
public class UserProductSpuCollectionsAddDTO implements Serializable {
/**
* id自增长
*/
private Integer id;
/**
* 用户id
*/
private Integer userId;
/**
* 用户名称
*/
private String nickname;
/**
* 商品id
*/
private Integer spuId;
/**
* 商品名字
*/
private String spuName;
/**
* 图片名字
*/
private String spuImage;
/**
* 卖点
*/
private String sellPoint;
/**
* 价格,单位:分
*/
private Integer price;
/**
* 创建时间
*/
private Date createTime;
/**
* 更新时间
*/
private Date updateTime;
/**
* 删除状态
*/
private Integer deleted;
}

View File

@@ -0,0 +1,35 @@
package cn.iocoder.mall.product.api.dto;
import lombok.Data;
import lombok.experimental.Accessors;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
/**
* 商品收藏分页参数
* @author xiaofeng
* @date 2019/07/06 18:40
* @version 1.0
*/
@Data
@Accessors(chain = true)
public class UserProductSpuCollectionsPageDTO implements Serializable {
/**
* 用户ID
*/
private Integer userId;
/**
* 当前页
*/
@NotNull(message = "页码不能为空")
private Integer pageNo;
/**
* 每页显示的条数
*/
@NotNull(message = "每页条数不能为空")
private Integer pageSize;
}

View File

@@ -0,0 +1,35 @@
package cn.iocoder.mall.product.api.dto;
import lombok.Data;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.util.Date;
/**
* 更新商品收藏参数
* @author xiaofeng
* @date 2019/07/01 20:38
* @version 1.0
*/
@Data
@Accessors(chain = true)
public class UserProductSpuCollectionsUpdateDTO implements Serializable {
/**
* id自增长
*/
private Integer id;
/**
* 更新时间
*/
private Date updateTime;
/**
* 删除状态
*/
private Integer deleted;
}

View File

@@ -0,0 +1,56 @@
package cn.iocoder.mall.product.api.message;
import lombok.Data;
import lombok.experimental.Accessors;
/**
* 商品收藏或取消收藏时发送消息
* @author xiaofeng
* @date 2019/07/01 22:33
* @version 1.0
*/
@Data
@Accessors(chain = true)
public class ProductSpuCollectionMessage {
public static final String TOPIC = "ProductSpuCollection";
/**
* SPU 编号
*/
private Integer spuId;
/**
* 用户ID
*/
private Integer userId;
// ========== 基本信息 =========
/**
* SPU 名字
*/
private String spuName;
/**
* 商品图片
*/
private String spuImage;
/**
* 卖点
*/
private String sellPoint;
/**
* 价格,单位:分
*/
private Integer price;
/**
* 1 收藏 2 取消
*/
private Integer hasCollectionType;
}