商品规格 key 的迁移
This commit is contained in:
@@ -26,11 +26,9 @@ public interface ProductErrorCodeConstants {
|
||||
|
||||
// ========== PRODUCT ATTR + ATTR_VALUE 模块 ==========
|
||||
ErrorCode PRODUCT_ATTR_VALUE_NOT_EXIST = new ErrorCode(1003003000, "商品属性值不存在");
|
||||
ErrorCode PRODUCT_ATTR_KEY_NOT_EXIST = new ErrorCode(1003003001, "商品属性值不存在");
|
||||
ErrorCode PRODUCT_ATTR_EXISTS = new ErrorCode(1003003002, "商品规格已经存在");
|
||||
ErrorCode PRODUCT_ATTR_STATUS_EQUALS = new ErrorCode(1003003003, "商品规格已经是该状态");
|
||||
ErrorCode PRODUCT_ATTR_KEY_NOT_EXIST = new ErrorCode(1003003001, "商品属性键不存在");
|
||||
ErrorCode PRODUCT_ATTR_KEY_EXISTS = new ErrorCode(1003003002, "商品规格键已经存在");
|
||||
ErrorCode PRODUCT_ATTR_VALUE_EXISTS = new ErrorCode(1003003004, "商品规格值已经存在");
|
||||
ErrorCode PRODUCT_ATTR_VALUE_STATUS_EQUALS = new ErrorCode(1003003005, "商品规格值已经是该状态");
|
||||
|
||||
// ========== PRODUCT BRAND模块 ==========
|
||||
ErrorCode PRODUCT_BRAND_NAME_EXIST = new ErrorCode(1003004000,"商品品牌的名字已经存在");
|
||||
|
||||
@@ -0,0 +1,63 @@
|
||||
package cn.iocoder.mall.productservice.rpc.attr;
|
||||
|
||||
import cn.iocoder.common.framework.vo.CommonResult;
|
||||
import cn.iocoder.common.framework.vo.PageResult;
|
||||
import cn.iocoder.mall.productservice.rpc.attr.dto.ProductAttrKeyCreateReqDTO;
|
||||
import cn.iocoder.mall.productservice.rpc.attr.dto.ProductAttrKeyPageReqDTO;
|
||||
import cn.iocoder.mall.productservice.rpc.attr.dto.ProductAttrKeyRespDTO;
|
||||
import cn.iocoder.mall.productservice.rpc.attr.dto.ProductAttrKeyUpdateReqDTO;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 商品规格 Rpc 接口
|
||||
*/
|
||||
public interface ProductAttrRpc {
|
||||
|
||||
/**
|
||||
* 创建商品规格键
|
||||
*
|
||||
* @param createDTO 创建商品规格键 DTO
|
||||
* @return 商品规格键编号
|
||||
*/
|
||||
CommonResult<Integer> createProductAttrKey(ProductAttrKeyCreateReqDTO createDTO);
|
||||
|
||||
/**
|
||||
* 更新商品规格键
|
||||
*
|
||||
* @param updateDTO 更新商品规格键 DTO
|
||||
*/
|
||||
CommonResult<Boolean> updateProductAttrKey(ProductAttrKeyUpdateReqDTO updateDTO);
|
||||
|
||||
/**
|
||||
* 删除商品规格键
|
||||
*
|
||||
* @param productAttrKeyId 商品规格键编号
|
||||
*/
|
||||
CommonResult<Boolean> deleteProductAttrKey(Integer productAttrKeyId);
|
||||
|
||||
/**
|
||||
* 获得商品规格键
|
||||
*
|
||||
* @param productAttrKeyId 商品规格键编号
|
||||
* @return 商品规格键
|
||||
*/
|
||||
CommonResult<ProductAttrKeyRespDTO> getProductAttrKey(Integer productAttrKeyId);
|
||||
|
||||
/**
|
||||
* 获得商品规格键列表
|
||||
*
|
||||
* @param productAttrKeyIds 商品规格键编号列表
|
||||
* @return 商品规格键列表
|
||||
*/
|
||||
CommonResult<List<ProductAttrKeyRespDTO>> listProductAttrKeys(List<Integer> productAttrKeyIds);
|
||||
|
||||
/**
|
||||
* 获得商品规格键分页
|
||||
*
|
||||
* @param pageDTO 商品规格键分页查询
|
||||
* @return 商品规格键分页结果
|
||||
*/
|
||||
CommonResult<PageResult<ProductAttrKeyRespDTO>> pageProductAttrKey(ProductAttrKeyPageReqDTO pageDTO);
|
||||
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
package cn.iocoder.mall.productservice.rpc.attr.dto;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
import javax.validation.constraints.NotEmpty;
|
||||
import javax.validation.constraints.NotNull;
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* 商品规格键创建 Request DTO
|
||||
*/
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
public class ProductAttrKeyCreateReqDTO implements Serializable {
|
||||
|
||||
/**
|
||||
* 规格键名称
|
||||
*/
|
||||
@NotEmpty(message = "规格键名称不能为空")
|
||||
private String name;
|
||||
/**
|
||||
* 状态
|
||||
*/
|
||||
@NotNull(message = "状态不能为空")
|
||||
private Integer status;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
package cn.iocoder.mall.productservice.rpc.attr.dto;
|
||||
|
||||
import cn.iocoder.common.framework.vo.PageParam;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
/**
|
||||
* 商品规格键分页 Request DTO
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Accessors(chain = true)
|
||||
public class ProductAttrKeyPageReqDTO extends PageParam {
|
||||
|
||||
/**
|
||||
* 规格键名称
|
||||
*/
|
||||
private String name;
|
||||
/**
|
||||
* 状态
|
||||
*/
|
||||
private Integer status;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
package cn.iocoder.mall.productservice.rpc.attr.dto;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 商品规格键 Response DTO
|
||||
*/
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
public class ProductAttrKeyRespDTO implements Serializable {
|
||||
|
||||
/**
|
||||
* 规格键编号
|
||||
*/
|
||||
private Integer id;
|
||||
/**
|
||||
* 规格键名称
|
||||
*/
|
||||
private String name;
|
||||
/**
|
||||
* 状态
|
||||
*/
|
||||
private Integer status;
|
||||
/**
|
||||
* 创建时间
|
||||
*/
|
||||
private Date createTime;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
package cn.iocoder.mall.productservice.rpc.attr.dto;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
import javax.validation.constraints.NotEmpty;
|
||||
import javax.validation.constraints.NotNull;
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* 商品规格键更新 Request DTO
|
||||
*/
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
public class ProductAttrKeyUpdateReqDTO implements Serializable {
|
||||
|
||||
/**
|
||||
* 规格键编号
|
||||
*/
|
||||
@NotNull(message = "规格键编号不能为空")
|
||||
private Integer id;
|
||||
/**
|
||||
* 规格键名称
|
||||
*/
|
||||
@NotEmpty(message = "规格键名称不能为空")
|
||||
private String name;
|
||||
/**
|
||||
* 状态
|
||||
*/
|
||||
@NotNull(message = "状态不能为空")
|
||||
private Integer status;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
package cn.iocoder.mall.productservice.convert.attr;
|
||||
|
||||
import cn.iocoder.common.framework.vo.PageResult;
|
||||
import cn.iocoder.mall.productservice.dal.mysql.dataobject.attr.ProductAttrKeyDO;
|
||||
import cn.iocoder.mall.productservice.rpc.attr.dto.ProductAttrKeyCreateReqDTO;
|
||||
import cn.iocoder.mall.productservice.rpc.attr.dto.ProductAttrKeyPageReqDTO;
|
||||
import cn.iocoder.mall.productservice.rpc.attr.dto.ProductAttrKeyRespDTO;
|
||||
import cn.iocoder.mall.productservice.rpc.attr.dto.ProductAttrKeyUpdateReqDTO;
|
||||
import cn.iocoder.mall.productservice.service.attr.bo.ProductAttrKeyBO;
|
||||
import cn.iocoder.mall.productservice.service.attr.bo.ProductAttrKeyCreateBO;
|
||||
import cn.iocoder.mall.productservice.service.attr.bo.ProductAttrKeyPageBO;
|
||||
import cn.iocoder.mall.productservice.service.attr.bo.ProductAttrKeyUpdateBO;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import org.mapstruct.Mapper;
|
||||
import org.mapstruct.factory.Mappers;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Mapper
|
||||
public interface ProductAttrConvert {
|
||||
|
||||
ProductAttrConvert INSTANCE = Mappers.getMapper(ProductAttrConvert.class);
|
||||
|
||||
ProductAttrKeyDO convert(ProductAttrKeyCreateBO bean);
|
||||
|
||||
ProductAttrKeyBO convert(ProductAttrKeyDO bean);
|
||||
|
||||
ProductAttrKeyDO convert(ProductAttrKeyUpdateBO bean);
|
||||
|
||||
List<ProductAttrKeyBO> convertList(List<ProductAttrKeyDO> list);
|
||||
|
||||
PageResult<ProductAttrKeyBO> convertPage(IPage<ProductAttrKeyDO> page);
|
||||
|
||||
ProductAttrKeyCreateBO convert(ProductAttrKeyCreateReqDTO bean);
|
||||
|
||||
ProductAttrKeyUpdateBO convert(ProductAttrKeyUpdateReqDTO bean);
|
||||
|
||||
ProductAttrKeyRespDTO convert(ProductAttrKeyBO bean);
|
||||
|
||||
List<ProductAttrKeyRespDTO> convertList02(List<ProductAttrKeyBO> list);
|
||||
|
||||
ProductAttrKeyPageBO convert(ProductAttrKeyPageReqDTO bean);
|
||||
|
||||
PageResult<ProductAttrKeyRespDTO> convertPage(PageResult<ProductAttrKeyBO> page);
|
||||
|
||||
}
|
||||
@@ -1,10 +1,25 @@
|
||||
package cn.iocoder.mall.productservice.dal.mysql.mapper.attr;
|
||||
|
||||
import cn.iocoder.mall.mybatis.core.query.QueryWrapperX;
|
||||
import cn.iocoder.mall.productservice.dal.mysql.dataobject.attr.ProductAttrKeyDO;
|
||||
import cn.iocoder.mall.productservice.service.attr.bo.ProductAttrKeyPageBO;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
@Repository
|
||||
public interface ProductAttrKeyMapper extends BaseMapper<ProductAttrKeyDO> {
|
||||
|
||||
default IPage<ProductAttrKeyDO> selectPage(ProductAttrKeyPageBO pageBO) {
|
||||
return selectPage(new Page<>(pageBO.getPageNo(), pageBO.getPageSize()),
|
||||
new QueryWrapperX<ProductAttrKeyDO>().likeIfPresent("name", pageBO.getName())
|
||||
.eqIfPresent("status", pageBO.getStatus()));
|
||||
}
|
||||
|
||||
default ProductAttrKeyDO selectByName(String name) {
|
||||
return selectOne(new QueryWrapper<ProductAttrKeyDO>().eq("name", name));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,87 @@
|
||||
package cn.iocoder.mall.productservice.manager.attr;
|
||||
|
||||
import cn.iocoder.common.framework.vo.PageResult;
|
||||
import cn.iocoder.mall.productservice.convert.attr.ProductAttrConvert;
|
||||
import cn.iocoder.mall.productservice.rpc.attr.dto.ProductAttrKeyCreateReqDTO;
|
||||
import cn.iocoder.mall.productservice.rpc.attr.dto.ProductAttrKeyPageReqDTO;
|
||||
import cn.iocoder.mall.productservice.rpc.attr.dto.ProductAttrKeyRespDTO;
|
||||
import cn.iocoder.mall.productservice.rpc.attr.dto.ProductAttrKeyUpdateReqDTO;
|
||||
import cn.iocoder.mall.productservice.service.attr.ProductAttrService;
|
||||
import cn.iocoder.mall.productservice.service.attr.bo.ProductAttrKeyBO;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 商品规格 Manager
|
||||
*/
|
||||
@Service
|
||||
public class ProductAttrManager {
|
||||
|
||||
@Autowired
|
||||
private ProductAttrService productAttrService;
|
||||
|
||||
/**
|
||||
* 创建商品规格键
|
||||
*
|
||||
* @param createDTO 创建商品规格键 DTO
|
||||
* @return 商品规格键
|
||||
*/
|
||||
public Integer createProductAttrKey(ProductAttrKeyCreateReqDTO createDTO) {
|
||||
ProductAttrKeyBO productAttrKeyBO = productAttrService.createProductAttrKey(ProductAttrConvert.INSTANCE.convert(createDTO));
|
||||
return productAttrKeyBO.getId();
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新商品规格键
|
||||
*
|
||||
* @param updateDTO 更新商品规格键 DTO
|
||||
*/
|
||||
public void updateProductAttrKey(ProductAttrKeyUpdateReqDTO updateDTO) {
|
||||
productAttrService.updateProductAttrKey(ProductAttrConvert.INSTANCE.convert(updateDTO));
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除商品规格键
|
||||
*
|
||||
* @param productAttrKeyId 商品规格键编号
|
||||
*/
|
||||
public void deleteProductAttrKey(Integer productAttrKeyId) {
|
||||
productAttrService.deleteProductAttrKey(productAttrKeyId);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获得商品规格键
|
||||
*
|
||||
* @param productAttrKeyId 商品规格键编号
|
||||
* @return 商品规格键
|
||||
*/
|
||||
public ProductAttrKeyRespDTO getProductAttrKey(Integer productAttrKeyId) {
|
||||
ProductAttrKeyBO productAttrKeyBO = productAttrService.getProductAttrKey(productAttrKeyId);
|
||||
return ProductAttrConvert.INSTANCE.convert(productAttrKeyBO);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获得商品规格键列表
|
||||
*
|
||||
* @param productAttrKeyIds 商品规格键编号列表
|
||||
* @return 商品规格键列表
|
||||
*/
|
||||
public List<ProductAttrKeyRespDTO> listProductAttrKeys(List<Integer> productAttrKeyIds) {
|
||||
List<ProductAttrKeyBO> productAttrKeyBOs = productAttrService.listProductAttrKeys(productAttrKeyIds);
|
||||
return ProductAttrConvert.INSTANCE.convertList02(productAttrKeyBOs);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获得商品规格键分页
|
||||
*
|
||||
* @param pageDTO 商品规格键分页查询
|
||||
* @return 商品规格键分页结果
|
||||
*/
|
||||
public PageResult<ProductAttrKeyRespDTO> pageProductAttrKey(ProductAttrKeyPageReqDTO pageDTO) {
|
||||
PageResult<ProductAttrKeyBO> pageResultBO = productAttrService.pageProductAttrKey(ProductAttrConvert.INSTANCE.convert(pageDTO));
|
||||
return ProductAttrConvert.INSTANCE.convertPage(pageResultBO);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,58 @@
|
||||
package cn.iocoder.mall.productservice.rpc.attr;
|
||||
|
||||
import cn.iocoder.common.framework.vo.CommonResult;
|
||||
import cn.iocoder.common.framework.vo.PageResult;
|
||||
import cn.iocoder.mall.productservice.manager.attr.ProductAttrManager;
|
||||
import cn.iocoder.mall.productservice.rpc.attr.dto.ProductAttrKeyCreateReqDTO;
|
||||
import cn.iocoder.mall.productservice.rpc.attr.dto.ProductAttrKeyPageReqDTO;
|
||||
import cn.iocoder.mall.productservice.rpc.attr.dto.ProductAttrKeyRespDTO;
|
||||
import cn.iocoder.mall.productservice.rpc.attr.dto.ProductAttrKeyUpdateReqDTO;
|
||||
import org.apache.dubbo.config.annotation.DubboService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import static cn.iocoder.common.framework.vo.CommonResult.success;
|
||||
|
||||
/**
|
||||
* 商品规格 Rpc 实现类
|
||||
*/
|
||||
@DubboService
|
||||
public class ProductAttrRpcImpl implements ProductAttrRpc {
|
||||
|
||||
@Autowired
|
||||
private ProductAttrManager productAttrManager;
|
||||
|
||||
@Override
|
||||
public CommonResult<Integer> createProductAttrKey(ProductAttrKeyCreateReqDTO createDTO) {
|
||||
return success(productAttrManager.createProductAttrKey(createDTO));
|
||||
}
|
||||
|
||||
@Override
|
||||
public CommonResult<Boolean> updateProductAttrKey(ProductAttrKeyUpdateReqDTO updateDTO) {
|
||||
productAttrManager.updateProductAttrKey(updateDTO);
|
||||
return success(true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CommonResult<Boolean> deleteProductAttrKey(Integer productAttrKeyId) {
|
||||
productAttrManager.deleteProductAttrKey(productAttrKeyId);
|
||||
return success(true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CommonResult<ProductAttrKeyRespDTO> getProductAttrKey(Integer productAttrKeyId) {
|
||||
return success(productAttrManager.getProductAttrKey(productAttrKeyId));
|
||||
}
|
||||
|
||||
@Override
|
||||
public CommonResult<List<ProductAttrKeyRespDTO>> listProductAttrKeys(List<Integer> productAttrKeyIds) {
|
||||
return success(productAttrManager.listProductAttrKeys(productAttrKeyIds));
|
||||
}
|
||||
|
||||
@Override
|
||||
public CommonResult<PageResult<ProductAttrKeyRespDTO>> pageProductAttrKey(ProductAttrKeyPageReqDTO pageDTO) {
|
||||
return success(productAttrManager.pageProductAttrKey(pageDTO));
|
||||
}
|
||||
|
||||
}
|
||||
@@ -7,7 +7,7 @@ import cn.iocoder.mall.productservice.rpc.brand.dto.ProductBrandCreateReqDTO;
|
||||
import cn.iocoder.mall.productservice.rpc.brand.dto.ProductBrandPageReqDTO;
|
||||
import cn.iocoder.mall.productservice.rpc.brand.dto.ProductBrandRespDTO;
|
||||
import cn.iocoder.mall.productservice.rpc.brand.dto.ProductBrandUpdateReqDTO;
|
||||
import org.apache.dubbo.config.annotation.Service;
|
||||
import org.apache.dubbo.config.annotation.DubboService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
|
||||
import java.util.List;
|
||||
@@ -17,7 +17,7 @@ import static cn.iocoder.common.framework.vo.CommonResult.success;
|
||||
/**
|
||||
* 商品品牌 Rpc 实现类
|
||||
*/
|
||||
@Service(version = "${dubbo.provider.ProductBrandRpc.version}")
|
||||
@DubboService
|
||||
public class ProductBrandRpcImpl implements ProductBrandRpc {
|
||||
|
||||
@Autowired
|
||||
|
||||
@@ -16,7 +16,7 @@ import static cn.iocoder.common.framework.vo.CommonResult.success;
|
||||
/**
|
||||
* 商品分类 Rpc 实现类
|
||||
*/
|
||||
@DubboService(version = "${dubbo.provider.ProductCategoryRpc.version}")
|
||||
@DubboService
|
||||
public class ProductCategoryRpcImpl implements ProductCategoryRpc {
|
||||
|
||||
@Autowired
|
||||
|
||||
@@ -7,7 +7,7 @@ import cn.iocoder.mall.productservice.rpc.spu.dto.ProductSpuAndSkuCreateReqDTO;
|
||||
import cn.iocoder.mall.productservice.rpc.spu.dto.ProductSpuAndSkuUpdateReqDTO;
|
||||
import cn.iocoder.mall.productservice.rpc.spu.dto.ProductSpuPageReqDTO;
|
||||
import cn.iocoder.mall.productservice.rpc.spu.dto.ProductSpuRespDTO;
|
||||
import org.apache.dubbo.config.annotation.Service;
|
||||
import org.apache.dubbo.config.annotation.DubboService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
|
||||
import java.util.List;
|
||||
@@ -17,7 +17,7 @@ import static cn.iocoder.common.framework.vo.CommonResult.success;
|
||||
/**
|
||||
* 商品 SPU Rpc 实现类
|
||||
*/
|
||||
@Service(version = "${dubbo.provider.ProductSpuRpc.version}")
|
||||
@DubboService
|
||||
public class ProductSpuRpcImpl implements ProductSpuRpc {
|
||||
|
||||
@Autowired
|
||||
|
||||
@@ -3,23 +3,32 @@ package cn.iocoder.mall.productservice.service.attr;
|
||||
import cn.iocoder.common.framework.enums.CommonStatusEnum;
|
||||
import cn.iocoder.common.framework.exception.util.ServiceExceptionUtil;
|
||||
import cn.iocoder.common.framework.util.CollectionUtils;
|
||||
import cn.iocoder.common.framework.vo.PageResult;
|
||||
import cn.iocoder.mall.productservice.convert.attr.ProductAttrConvert;
|
||||
import cn.iocoder.mall.productservice.dal.mysql.dataobject.attr.ProductAttrKeyDO;
|
||||
import cn.iocoder.mall.productservice.dal.mysql.dataobject.attr.ProductAttrValueDO;
|
||||
import cn.iocoder.mall.productservice.dal.mysql.mapper.attr.ProductAttrKeyMapper;
|
||||
import cn.iocoder.mall.productservice.dal.mysql.mapper.attr.ProductAttrValueMapper;
|
||||
import cn.iocoder.mall.productservice.service.attr.bo.ProductAttrKeyValueBO;
|
||||
import cn.iocoder.mall.productservice.service.attr.bo.*;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.validation.Valid;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static cn.iocoder.mall.productservice.enums.ProductErrorCodeConstants.PRODUCT_ATTR_KEY_NOT_EXIST;
|
||||
import static cn.iocoder.mall.productservice.enums.ProductErrorCodeConstants.PRODUCT_ATTR_VALUE_NOT_EXIST;
|
||||
import static cn.iocoder.mall.productservice.enums.ProductErrorCodeConstants.*;
|
||||
|
||||
/**
|
||||
* 商品规格 Service
|
||||
*
|
||||
* 包括商品键和值
|
||||
*/
|
||||
@Service
|
||||
@Valid
|
||||
public class ProductAttrService {
|
||||
|
||||
@Autowired
|
||||
@@ -54,11 +63,97 @@ public class ProductAttrService {
|
||||
}
|
||||
}
|
||||
// 返回成功
|
||||
Map<Integer, ProductAttrKeyDO> attrKeyMap = CollectionUtils.convertMap(attrKeys, ProductAttrKeyDO::getId, attrKeyDO -> attrKeyDO); // ProductAttrDO 的映射,方便查找。
|
||||
Map<Integer, ProductAttrKeyDO> attrKeyMap = CollectionUtils.convertMap(attrKeys,
|
||||
ProductAttrKeyDO::getId, attrKeyDO -> attrKeyDO); // ProductAttrDO 的映射,方便查找。
|
||||
return attrValues.stream().map(attrValueDO -> new ProductAttrKeyValueBO()
|
||||
.setAttrKeyId(attrValueDO.getAttrId()).setAttrKeyName(attrKeyMap.get(attrValueDO.getAttrId()).getName())
|
||||
.setAttrValueId(attrValueDO.getId()).setAttrValueName(attrValueDO.getName()))
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建商品规格键
|
||||
*
|
||||
* @param createBO 创建商品规格键 BO
|
||||
* @return 商品规格键
|
||||
*/
|
||||
public ProductAttrKeyBO createProductAttrKey(@Valid ProductAttrKeyCreateBO createBO) {
|
||||
// 校验规格键的名字是否重复
|
||||
if (productAttrKeyMapper.selectByName(createBO.getName()) != null) {
|
||||
throw ServiceExceptionUtil.exception(PRODUCT_ATTR_KEY_EXISTS);
|
||||
}
|
||||
// 插入到数据库
|
||||
ProductAttrKeyDO productAttrKeyDO = ProductAttrConvert.INSTANCE.convert(createBO);
|
||||
productAttrKeyMapper.insert(productAttrKeyDO);
|
||||
// 返回
|
||||
return ProductAttrConvert.INSTANCE.convert(productAttrKeyDO);
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新商品规格键
|
||||
*
|
||||
* @param updateBO 更新商品规格键 BO
|
||||
*/
|
||||
public void updateProductAttrKey(@Valid ProductAttrKeyUpdateBO updateBO) {
|
||||
// 校验规格键的名字是否重复
|
||||
ProductAttrKeyDO attrKeyDOByName = productAttrKeyMapper.selectByName(updateBO.getName());
|
||||
if (attrKeyDOByName != null && !attrKeyDOByName.getId().equals(updateBO.getId())) {
|
||||
throw ServiceExceptionUtil.exception(PRODUCT_ATTR_KEY_EXISTS);
|
||||
}
|
||||
// 校验更新的商品规格键是否存在
|
||||
if (productAttrKeyMapper.selectById(updateBO.getId()) == null) {
|
||||
throw ServiceExceptionUtil.exception(PRODUCT_ATTR_KEY_NOT_EXIST);
|
||||
}
|
||||
// 更新到数据库
|
||||
ProductAttrKeyDO updateObject = ProductAttrConvert.INSTANCE.convert(updateBO);
|
||||
productAttrKeyMapper.updateById(updateObject);
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除商品规格键
|
||||
*
|
||||
* @param productAttrKeyId 商品规格键编号
|
||||
*/
|
||||
public void deleteProductAttrKey(Integer productAttrKeyId) {
|
||||
// 校验删除的商品规格键是否存在
|
||||
if (productAttrKeyMapper.selectById(productAttrKeyId) == null) {
|
||||
throw ServiceExceptionUtil.exception(PRODUCT_ATTR_KEY_NOT_EXIST);
|
||||
}
|
||||
// 标记删除
|
||||
productAttrKeyMapper.deleteById(productAttrKeyId);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获得商品规格键
|
||||
*
|
||||
* @param productAttrKeyId 商品规格键编号
|
||||
* @return 商品规格键
|
||||
*/
|
||||
public ProductAttrKeyBO getProductAttrKey(Integer productAttrKeyId) {
|
||||
ProductAttrKeyDO productAttrKeyDO = productAttrKeyMapper.selectById(productAttrKeyId);
|
||||
return ProductAttrConvert.INSTANCE.convert(productAttrKeyDO);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获得商品规格键列表
|
||||
*
|
||||
* @param productAttrKeyIds 商品规格键编号列表
|
||||
* @return 商品规格键列表
|
||||
*/
|
||||
public List<ProductAttrKeyBO> listProductAttrKeys(List<Integer> productAttrKeyIds) {
|
||||
List<ProductAttrKeyDO> productAttrKeyDOs = productAttrKeyMapper.selectBatchIds(productAttrKeyIds);
|
||||
return ProductAttrConvert.INSTANCE.convertList(productAttrKeyDOs);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获得商品规格键分页
|
||||
*
|
||||
* @param pageBO 商品规格键分页查询
|
||||
* @return 商品规格键分页结果
|
||||
*/
|
||||
public PageResult<ProductAttrKeyBO> pageProductAttrKey(ProductAttrKeyPageBO pageBO) {
|
||||
IPage<ProductAttrKeyDO> productAttrKeyDOPage = productAttrKeyMapper.selectPage(pageBO);
|
||||
return ProductAttrConvert.INSTANCE.convertPage(productAttrKeyDOPage);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
package cn.iocoder.mall.productservice.service.attr.bo;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 商品规格键 BO
|
||||
*/
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
public class ProductAttrKeyBO {
|
||||
|
||||
/**
|
||||
* 规格键编号
|
||||
*/
|
||||
private Integer id;
|
||||
/**
|
||||
* 规格键名称
|
||||
*/
|
||||
private String name;
|
||||
/**
|
||||
* 状态
|
||||
*/
|
||||
private Integer status;
|
||||
/**
|
||||
* 创建时间
|
||||
*/
|
||||
private Date createTime;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
package cn.iocoder.mall.productservice.service.attr.bo;
|
||||
|
||||
import cn.iocoder.common.framework.enums.CommonStatusEnum;
|
||||
import cn.iocoder.common.framework.validator.InEnum;
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
import javax.validation.constraints.NotEmpty;
|
||||
import javax.validation.constraints.NotNull;
|
||||
|
||||
/**
|
||||
* 商品规格键创建 BO
|
||||
*/
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
public class ProductAttrKeyCreateBO {
|
||||
|
||||
/**
|
||||
* 规格键名称
|
||||
*/
|
||||
@NotEmpty(message = "规格键名称不能为空")
|
||||
private String name;
|
||||
/**
|
||||
* 状态
|
||||
*/
|
||||
@NotNull(message = "状态不能为空")
|
||||
@InEnum(value = CommonStatusEnum.class, message = "修改状态必须是 {value}")
|
||||
private Integer status;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
package cn.iocoder.mall.productservice.service.attr.bo;
|
||||
|
||||
import cn.iocoder.common.framework.vo.PageParam;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
/**
|
||||
* 商品规格键分页 BO
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Accessors(chain = true)
|
||||
public class ProductAttrKeyPageBO extends PageParam {
|
||||
|
||||
/**
|
||||
* 规格键名称,模糊匹配
|
||||
*/
|
||||
private String name;
|
||||
/**
|
||||
* 状态
|
||||
*/
|
||||
private Integer status;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
package cn.iocoder.mall.productservice.service.attr.bo;
|
||||
|
||||
import cn.iocoder.common.framework.enums.CommonStatusEnum;
|
||||
import cn.iocoder.common.framework.validator.InEnum;
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
import javax.validation.constraints.NotEmpty;
|
||||
import javax.validation.constraints.NotNull;
|
||||
|
||||
/**
|
||||
* 商品规格键更新 BO
|
||||
*/
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
public class ProductAttrKeyUpdateBO {
|
||||
|
||||
/**
|
||||
* 规格键编号
|
||||
*/
|
||||
@NotNull(message = "规格键编号不能为空")
|
||||
private Integer id;
|
||||
/**
|
||||
* 规格键名称
|
||||
*/
|
||||
@NotEmpty(message = "规格键名称不能为空")
|
||||
private String name;
|
||||
/**
|
||||
* 状态
|
||||
*/
|
||||
@NotNull(message = "状态不能为空")
|
||||
@InEnum(value = CommonStatusEnum.class, message = "修改状态必须是 {value}")
|
||||
private Integer status;
|
||||
|
||||
}
|
||||
@@ -34,12 +34,7 @@ dubbo:
|
||||
provider:
|
||||
filter: -exception
|
||||
validation: true # 开启 Provider 参数校验
|
||||
ProductCategoryRpc:
|
||||
version: 1.0.0
|
||||
ProductBrandRpc:
|
||||
version: 1.0.0
|
||||
ProductSpuRpc:
|
||||
version: 1.0.0
|
||||
version: 1.0.0 # 服务的版本号
|
||||
# Dubbo 服务消费者的配置
|
||||
consumer:
|
||||
ErrorCodeRpc:
|
||||
|
||||
Reference in New Issue
Block a user