规格代码相关改版

This commit is contained in:
Chopper
2021-06-23 16:46:52 +08:00
parent a5fa7cadcd
commit 7851e8af39
25 changed files with 122 additions and 879 deletions

View File

@@ -1,42 +0,0 @@
package cn.lili.modules.goods.entity.dos;
import cn.lili.base.BaseEntity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.persistence.Entity;
import javax.persistence.Table;
/**
* 规格值
*
* @author pikachu
* @date 2020-02-18 15:18:56
*/
@Data
@Entity
@Table(name = "li_spec_values")
@TableName("li_spec_values")
@ApiModel(value = "规格值")
public class SpecValues extends BaseEntity {
private static final long serialVersionUID = 1L;
/**
* 规格项id
*/
@TableField(value = "spec_id")
@ApiModelProperty(value = "规格项id")
private String specId;
/**
* 规格值名字
*/
@TableField(value = "spec_value")
@ApiModelProperty(value = "规格值名字")
private String specValue;
}

View File

@@ -1,11 +1,13 @@
package cn.lili.modules.goods.entity.dos;
import cn.lili.base.BaseEntity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import javax.validation.constraints.NotEmpty;
@@ -34,9 +36,19 @@ public class Specification extends BaseEntity {
/**
* 所属卖家 0属于平台
* <p>
* 店铺自定义规格暂时废弃 2021-06-23 后续推出新配置方式
*/
@ApiModelProperty(hidden = true)
private String storeId;
/**
* 规格值名字
*/
@TableField(value = "spec_value")
@Column(columnDefinition = "TEXT")
@ApiModelProperty(value = "规格值名字, 《,》分割")
private String specValue;
}

View File

@@ -1,34 +0,0 @@
package cn.lili.modules.goods.entity.dto;
import cn.lili.common.utils.StringUtils;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* 规格搜索参数
*
* @author paulG
* @date 2020/12/19
**/
@Data
public class SpecificationSearchParams {
@ApiModelProperty(value = "规格id")
private String specId;
@ApiModelProperty(value = "绑定分类")
private String categoryPath;
@ApiModelProperty(value = "未删除 ")
private Boolean deleteFlag;
public <T> QueryWrapper<T> queryWrapper() {
QueryWrapper<T> queryWrapper = new QueryWrapper<>();
queryWrapper.eq(StringUtils.isNotEmpty(specId), "spec_id", specId);
queryWrapper.eq(deleteFlag != null, "delete_flag", deleteFlag);
return queryWrapper;
}
}

View File

@@ -1,25 +0,0 @@
package cn.lili.modules.goods.entity.vos;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* 分类规格VO
*
* @author pikachu
* @date 2020-02-26 23:24:13
*/
@Data
public class CategorySpecificationVO {
/**
* 规格id
*/
@ApiModelProperty(value = "规格id", required = true)
private String id;
/**
* 规格名称
*/
@ApiModelProperty(value = "规格名称", required = true)
private String name;
}

View File

@@ -1,32 +0,0 @@
package cn.lili.modules.goods.entity.vos;
import com.baomidou.mybatisplus.annotation.TableField;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
* 规格值VO
*
* @author paulG
* @date 2020-02-26 23:24:13
*/
@Data
public class GoodsSpecValueVO {
/**
* 规格值名字
*/
@TableField(value = "name")
@ApiModelProperty(value = "规格值名字")
private String name;
/**
* 规格值名字
*/
@TableField(value = "value")
@ApiModelProperty(value = "规格值")
private List<String> value;
}

View File

@@ -18,18 +18,10 @@ public class SpecValueVO implements Serializable {
private static final long serialVersionUID = -4433579132929428572L;
@TableField(value = "spec_name_id")
@ApiModelProperty(value = "规格项ID")
private String specNameId;
@TableField(value = "spec_name")
@ApiModelProperty(value = "规格项名字")
private String specName;
@TableField(value = "spec_value_id")
@ApiModelProperty(value = "规格值")
private String specValueId;
@TableField(value = "spec_value")
@ApiModelProperty(value = "规格值")
private String specValue;
@@ -43,18 +35,5 @@ public class SpecValueVO implements Serializable {
* 规格图片
*/
@ApiModelProperty(value = "规格的图片")
private List<SpecImages> specImage;
@Data
public static class SpecImages implements Serializable {
private static final long serialVersionUID = 1816357809660916086L;
private String url;
private String name;
private String status;
}
private List<String> specImage;
}

View File

@@ -1,35 +0,0 @@
package cn.lili.modules.goods.entity.vos;
import cn.lili.modules.goods.entity.dos.Specification;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 规格VO
*
* @author Chopper
* @date 2020-02-26 23:24:13
*/
@Data
@NoArgsConstructor
public class SpecificationVO extends Specification {
private static final long serialVersionUID = 5504602856844228350L;
@ApiModelProperty(value = "规格项名称")
private String specValue;
@ApiModelProperty(value = "分类path")
private String categoryPath;
public SpecificationVO(String specName, String storeId, String categoryPath) {
this.setSpecName(specName);
this.setStoreId(storeId);
this.categoryPath = categoryPath;
}
}

View File

@@ -1,7 +1,7 @@
package cn.lili.modules.goods.mapper;
import cn.lili.modules.goods.entity.dos.CategorySpecification;
import cn.lili.modules.goods.entity.vos.CategorySpecificationVO;
import cn.lili.modules.goods.entity.dos.Specification;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Select;
@@ -20,8 +20,8 @@ public interface CategorySpecificationMapper extends BaseMapper<CategorySpecific
* @param categoryId 分类id
* @return 分类绑定规格列表
*/
@Select("select s.id, s.spec_name as `name` from " +
@Select("select s.* from " +
"li_specification s INNER join li_category_specification cs on s.id = cs.specification_id and cs.category_id = #{categoryId} " +
"where s.delete_flag = 0")
List<CategorySpecificationVO> getCategorySpecList(String categoryId);
List<Specification> getCategorySpecList(String categoryId);
}

View File

@@ -1,15 +0,0 @@
package cn.lili.modules.goods.mapper;
import cn.lili.modules.goods.entity.dos.SpecValues;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* 规格项数据处理层
*
* @author pikachu
* @date 2020-02-18 15:18:56
*/
public interface SpecValuesMapper extends BaseMapper<SpecValues> {
}

View File

@@ -2,14 +2,7 @@ package cn.lili.modules.goods.mapper;
import cn.lili.modules.goods.entity.dos.Specification;
import cn.lili.modules.goods.entity.vos.SpecificationVO;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import java.util.List;
/**
* 规格数据处理层
@@ -19,11 +12,4 @@ import java.util.List;
*/
public interface SpecificationMapper extends BaseMapper<Specification> {
/**
* 查询规格信息列表
* @return
*/
@Select("SELECT s.id, s.spec_name,s.create_time ,GROUP_CONCAT(sv.spec_value SEPARATOR ',') AS spec_value" +
" FROM li_specification s LEFT JOIN li_spec_values sv ON s.id = sv.spec_id ${ew.customSqlSegment} ")
List<SpecificationVO> findSpecList(@Param(Constants.WRAPPER) Wrapper queryWrapper);
}

View File

@@ -1,7 +1,7 @@
package cn.lili.modules.goods.service;
import cn.lili.modules.goods.entity.dos.CategorySpecification;
import cn.lili.modules.goods.entity.vos.CategorySpecificationVO;
import cn.lili.modules.goods.entity.dos.Specification;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
@@ -19,15 +19,8 @@ public interface CategorySpecificationService extends IService<CategorySpecifica
* @param categoryId 分类id
* @return 分类规格关联信息
*/
List<CategorySpecificationVO> getCategorySpecList(String categoryId);
List<Specification> getCategorySpecList(String categoryId);
/***
* 根据分类id查询规格信息
*
* @param categoryId 分类id
* @return 分类规格关联信息
*/
List<CategorySpecification> getCategorySpecList(String[] categoryId);
/**
* 通过分类ID删除关联规格

View File

@@ -1,63 +0,0 @@
package cn.lili.modules.goods.service;
import cn.lili.common.vo.PageVO;
import cn.lili.modules.goods.entity.dos.SpecValues;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
/**
* 规格项接口
*
* @author pikachu
* @date 2020-02-18 15:18:56
*/
public interface SpecValuesService extends IService<SpecValues> {
/**
* 保存规格值
*
* @param specId 规格Id
* @param valueList 规格值集合
*/
List<SpecValues> saveSpecValue(String specId, String[] valueList);
/**
* 保存规格值
*
* @param specId 规格Id
* @param valueList 规格值集合
*/
List<SpecValues> addSpecValue(String specId, String[] valueList);
/**
* 根据规格id查询规格值信息
*
* @param specIds 规格值ids
* @return
*/
List<SpecValues> getSpecValues(List<String> specIds);
/**
* 根据值获取规格值信息
* 如果不存在则自动创建
*
* @param specValue 规格值
* @param specId 规格ID
* @return 规格值信息
*/
SpecValues getSpecValues(String specValue, String specId);
/**
* 分页获取规格值
*
* @param specId 规格项ID
* @param specVal 规格值
* @param pageVo 分页参数
* @return 规格值列表
*/
IPage<SpecValues> queryByParams(String specId, String specVal, PageVO pageVo);
}

View File

@@ -1,12 +1,7 @@
package cn.lili.modules.goods.service;
import cn.lili.common.vo.PageVO;
import cn.lili.modules.goods.entity.dos.Specification;
import cn.lili.modules.goods.entity.dto.SpecificationSearchParams;
import cn.lili.modules.goods.entity.vos.GoodsSpecValueVO;
import cn.lili.modules.goods.entity.vos.SpecificationVO;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
@@ -19,64 +14,6 @@ import java.util.List;
*/
public interface SpecificationService extends IService<Specification> {
/**
* 查询规格信息列表
*
* @param specName 规格名
* @return 规格列表
*/
List<SpecificationVO> getSpecList(String specName);
/**
* 根据分类id获取规格信息
*
* @param categoryId 分类id
* @return 商品规格值列表
*/
List<GoodsSpecValueVO> getGoodsSpecValue(String categoryId);
/**
* 获取规格详情
*
* @param id 规格ID
* @return 规格详情
*/
Specification getSpecification(String id);
/**
* 获取规格分页
*
* @param searchParams 搜索参数
* @param pageVo 分页参数
* @return 规格分页
*/
IPage<SpecificationVO> getSpecificationPage(SpecificationSearchParams searchParams, PageVO pageVo);
/**
* 获取规格分页
*
* @param searchParams 搜索参数
* @param pageVo 分页参数
* @return 规格分页
*/
IPage<Specification> getSpecificationByPage(SpecificationSearchParams searchParams, PageVO pageVo);
/**
* 添加规格
*
* @param specificationVO 规格信息
* @return 是否添加成功
*/
Specification addSpecification(SpecificationVO specificationVO);
/**
* 修改规格
*
* @param specificationVO 规格信息
* @return 是否修改成功
*/
boolean updateSpecification(SpecificationVO specificationVO);
/**
* 删除规格
*

View File

@@ -1,17 +1,14 @@
package cn.lili.modules.goods.serviceimpl;
import cn.lili.modules.goods.entity.dos.CategorySpecification;
import cn.lili.modules.goods.entity.vos.CategorySpecificationVO;
import cn.lili.modules.goods.entity.dos.Specification;
import cn.lili.modules.goods.mapper.CategorySpecificationMapper;
import cn.lili.modules.goods.service.CategorySpecificationService;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Arrays;
import java.util.List;
/**
@@ -25,17 +22,12 @@ import java.util.List;
public class CategorySpecificationServiceImpl extends ServiceImpl<CategorySpecificationMapper, CategorySpecification> implements CategorySpecificationService {
@Override
public List<CategorySpecificationVO> getCategorySpecList(String categoryId) {
public List<Specification> getCategorySpecList(String categoryId) {
return this.baseMapper.getCategorySpecList(categoryId);
}
@Override
public List<CategorySpecification> getCategorySpecList(String[] categoryId) {
return this.list(new LambdaQueryWrapper<CategorySpecification>().in(CategorySpecification::getCategoryId, Arrays.asList(categoryId)));
}
@Override
public void deleteByCategoryId(String categoryId) {
this.baseMapper.delete(new LambdaQueryWrapper<CategorySpecification>().eq(CategorySpecification::getCategoryId,categoryId));
this.baseMapper.delete(new LambdaQueryWrapper<CategorySpecification>().eq(CategorySpecification::getCategoryId, categoryId));
}
}

View File

@@ -12,12 +12,17 @@ import cn.lili.common.rocketmq.tags.GoodsTagsEnum;
import cn.lili.common.security.context.UserContext;
import cn.lili.common.utils.PageUtil;
import cn.lili.config.rocketmq.RocketmqCustomProperties;
import cn.lili.modules.goods.entity.dos.*;
import cn.lili.modules.goods.entity.dos.Goods;
import cn.lili.modules.goods.entity.dos.GoodsParams;
import cn.lili.modules.goods.entity.dos.GoodsSku;
import cn.lili.modules.goods.entity.dto.GoodsSearchParams;
import cn.lili.modules.goods.entity.dto.GoodsSkuStockDTO;
import cn.lili.modules.goods.entity.enums.GoodsAuthEnum;
import cn.lili.modules.goods.entity.enums.GoodsStatusEnum;
import cn.lili.modules.goods.entity.vos.*;
import cn.lili.modules.goods.entity.vos.GoodsSkuSpecVO;
import cn.lili.modules.goods.entity.vos.GoodsSkuVO;
import cn.lili.modules.goods.entity.vos.GoodsVO;
import cn.lili.modules.goods.entity.vos.SpecValueVO;
import cn.lili.modules.goods.mapper.GoodsSkuMapper;
import cn.lili.modules.goods.service.*;
import cn.lili.modules.member.entity.dos.FootPrint;
@@ -39,7 +44,6 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.*;
import java.util.stream.Collectors;
/**
* 商品sku业务层实现
@@ -63,9 +67,6 @@ public class GoodsSkuServiceImpl extends ServiceImpl<GoodsSkuMapper, GoodsSku> i
//规格
@Autowired
private SpecificationService specificationService;
//规格项
@Autowired
private SpecValuesService specValuesService;
//缓存
@Autowired
private StringRedisTemplate stringRedisTemplate;
@@ -320,29 +321,29 @@ public class GoodsSkuServiceImpl extends ServiceImpl<GoodsSkuMapper, GoodsSku> i
JSONObject jsonObject = JSONUtil.parseObj(goodsSku.getSpecs());
List<SpecValueVO> specValueVOS = new ArrayList<>();
List<String> goodsGalleryList = new ArrayList<>();
for (Map.Entry<String, Object> entry : jsonObject.entrySet()) {
SpecValueVO s = new SpecValueVO();
if (entry.getKey().equals("images")) {
s.setSpecName(entry.getKey());
if (entry.getValue().toString().contains("url")) {
List<SpecValueVO.SpecImages> specImages = JSONUtil.toList(JSONUtil.parseArray(entry.getValue()), SpecValueVO.SpecImages.class);
s.setSpecImage(specImages);
goodsGalleryList = specImages.stream().map(SpecValueVO.SpecImages::getUrl).collect(Collectors.toList());
}
} else {
SpecificationVO specificationVO = new SpecificationVO();
specificationVO.setSpecName(entry.getKey());
specificationVO.setStoreId(goodsSku.getStoreId());
specificationVO.setCategoryPath(goodsSku.getCategoryPath());
Specification specification = specificationService.addSpecification(specificationVO);
s.setSpecNameId(specification.getId());
SpecValues specValues = specValuesService.getSpecValues(entry.getValue().toString(), specification.getId());
s.setSpecValueId(specValues.getId());
s.setSpecName(entry.getKey());
s.setSpecValue(entry.getValue().toString());
}
specValueVOS.add(s);
}
// for (Map.Entry<String, Object> entry : jsonObject.entrySet()) {
// SpecValueVO s = new SpecValueVO();
// if (entry.getKey().equals("images")) {
// s.setSpecName(entry.getKey());
// if (entry.getValue().toString().contains("url")) {
// List<SpecValueVO.SpecImages> specImages = JSONUtil.toList(JSONUtil.parseArray(entry.getValue()), SpecValueVO.SpecImages.class);
// s.setSpecImage(specImages);
// goodsGalleryList = specImages.stream().map(SpecValueVO.SpecImages::getUrl).collect(Collectors.toList());
// }
// } else {
// SpecificationVO specificationVO = new SpecificationVO();
// specificationVO.setSpecName(entry.getKey());
// specificationVO.setStoreId(goodsSku.getStoreId());
// specificationVO.setCategoryPath(goodsSku.getCategoryPath());
// Specification specification = specificationService.addSpecification(specificationVO);
// s.setSpecNameId(specification.getId());
// SpecValues specValues = specValuesService.getSpecValues(entry.getValue().toString(), specification.getId());
// s.setSpecValueId(specValues.getId());
// s.setSpecName(entry.getKey());
// s.setSpecValue(entry.getValue().toString());
// }
// specValueVOS.add(s);
// }
goodsSkuVO.setGoodsGalleryList(goodsGalleryList);
goodsSkuVO.setSpecList(specValueVOS);
return goodsSkuVO;
@@ -619,20 +620,8 @@ public class GoodsSkuServiceImpl extends ServiceImpl<GoodsSkuMapper, GoodsSku> i
} else {
//设置商品名称
goodsName.append(" ").append(m.getValue());
//规格简短信息
simpleSpecs.append(" ").append(m.getValue());
//保存规格项
SpecificationVO specificationVO = new SpecificationVO(m.getKey(), goods.getStoreId(), goods.getCategoryPath());
Specification specification = specificationService.addSpecification(specificationVO);
//保存规格值
SpecValues specValues = specValuesService.getSpecValues(m.getValue().toString(), specification.getId());
//添加属性索引
EsGoodsAttribute attribute = new EsGoodsAttribute(0, specification.getId(), m.getKey(), specValues.getId(), m.getValue().toString());
attributes.add(attribute);
}
}
}

View File

@@ -1,113 +0,0 @@
package cn.lili.modules.goods.serviceimpl;
import cn.hutool.core.util.StrUtil;
import cn.lili.common.utils.PageUtil;
import cn.lili.common.vo.PageVO;
import cn.lili.modules.goods.entity.dos.SpecValues;
import cn.lili.modules.goods.entity.dos.Specification;
import cn.lili.modules.goods.mapper.SpecValuesMapper;
import cn.lili.modules.goods.service.SpecValuesService;
import cn.lili.modules.goods.service.SpecificationService;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.List;
/**
* 规格项接口实现
*
* @author pikachu
* @date 2020-02-18 16:18:56
*/
@Service
@Transactional
public class SpecValuesServiceImpl extends ServiceImpl<SpecValuesMapper, SpecValues> implements SpecValuesService {
//规格
@Autowired
private SpecificationService specificationService;
@Override
public List<SpecValues> saveSpecValue(String specId, String[] valueList) {
//校验是否存在
Specification specification = specificationService.getById(specId);
List<SpecValues> res = new ArrayList<>();
if (specification != null) {
//先删除原有规格值
QueryWrapper<SpecValues> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("spec_id", specId);
this.remove(queryWrapper);
//添加新的规格值
for (String value : valueList) {
SpecValues specValues = new SpecValues();
specValues.setSpecValue(value);
specValues.setSpecId(specification.getId());
this.save(specValues);
res.add(specValues);
}
return res;
}
return res;
}
@Override
public List<SpecValues> addSpecValue(String specId, String[] valueList) {
List<SpecValues> specValuesList = new ArrayList<>();
for (String value : valueList) {
QueryWrapper<SpecValues> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("spec_id", specId);
queryWrapper.eq("spec_value", value);
if (this.getOne(queryWrapper) == null) {
SpecValues specValues = new SpecValues();
specValues.setSpecValue(value);
specValues.setSpecId(specId);
this.save(specValues);
specValuesList.add(specValues);
}
}
return specValuesList;
}
@Override
public List<SpecValues> getSpecValues(List<String> specIds) {
LambdaQueryWrapper<SpecValues> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.in(SpecValues::getSpecValue, specIds);
return this.list(queryWrapper);
}
@Override
public SpecValues getSpecValues(String specValue, String specId) {
LambdaQueryWrapper<SpecValues> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(SpecValues::getSpecValue, specValue);
queryWrapper.eq(SpecValues::getSpecId, specId);
SpecValues specValues = this.getOne(queryWrapper);
if (specValues == null) {
specValues = new SpecValues();
specValues.setSpecValue(specValue);
specValues.setSpecId(specId);
this.save(specValues);
}
return specValues;
}
@Override
public IPage<SpecValues> queryByParams(String specId, String specVal, PageVO pageVo) {
LambdaQueryWrapper<SpecValues> queryWrapper = new LambdaQueryWrapper<>();
if (StrUtil.isNotEmpty(specId)) {
queryWrapper.eq(SpecValues::getSpecId, specId);
}
if (StrUtil.isNotEmpty(specVal)) {
queryWrapper.like(SpecValues::getSpecValue, specVal);
}
return this.page(PageUtil.initPage(pageVo), queryWrapper);
}
}

View File

@@ -1,36 +1,22 @@
package cn.lili.modules.goods.serviceimpl;
import cn.hutool.core.text.CharSequenceUtil;
import cn.hutool.core.util.StrUtil;
import cn.lili.common.enums.ResultCode;
import cn.lili.common.exception.ServiceException;
import cn.lili.common.utils.PageUtil;
import cn.lili.common.utils.StringUtils;
import cn.lili.common.vo.PageVO;
import cn.lili.modules.goods.entity.dos.Category;
import cn.lili.modules.goods.entity.dos.CategorySpecification;
import cn.lili.modules.goods.entity.dos.SpecValues;
import cn.lili.modules.goods.entity.dos.Specification;
import cn.lili.modules.goods.entity.dto.SpecificationSearchParams;
import cn.lili.modules.goods.entity.vos.CategorySpecificationVO;
import cn.lili.modules.goods.entity.vos.GoodsSpecValueVO;
import cn.lili.modules.goods.entity.vos.SpecificationVO;
import cn.lili.modules.goods.mapper.SpecificationMapper;
import cn.lili.modules.goods.service.CategorySpecificationService;
import cn.lili.modules.goods.service.SpecValuesService;
import cn.lili.modules.goods.service.SpecificationService;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 商品规格业务层实现
@@ -45,111 +31,11 @@ public class SpecificationServiceImpl extends ServiceImpl<SpecificationMapper, S
//分类-规格绑定
@Autowired
private CategorySpecificationService categorySpecificationService;
//规格值
@Autowired
private SpecValuesService specValuesService;
private CategoryServiceImpl categoryService;
@Override
public List<SpecificationVO> getSpecList(String specId) {
QueryWrapper queryWrapper = new QueryWrapper();
queryWrapper.eq(StringUtils.isNotEmpty(specId), "s.spec_id", specId);
queryWrapper.orderByDesc("s.create_time");
return this.baseMapper.findSpecList(queryWrapper);
}
@Override
public List<GoodsSpecValueVO> getGoodsSpecValue(String categoryId) {
List<CategorySpecificationVO> categorySpecificationVOS = categorySpecificationService.getCategorySpecList(categoryId);
Map<String, Object> map = new HashMap<>();
if (!categorySpecificationVOS.isEmpty()) {
//循环组织查询规格值数据
List<String> valueId = new ArrayList<>();
for (CategorySpecificationVO categorySpecification : categorySpecificationVOS) {
map.put(categorySpecification.getId(), categorySpecification.getName());
valueId.add(categorySpecification.getId());
}
//使用valueId去查询规格值
List<SpecValues> specValues = specValuesService.getSpecValues(valueId);
//循环组织数据
List<GoodsSpecValueVO> goodsSpecValueVOS = new ArrayList<>();
for (Map.Entry<String, Object> m : map.entrySet()) {
GoodsSpecValueVO goodsSpecValueVO = new GoodsSpecValueVO();
goodsSpecValueVO.setName(m.getValue().toString());
List<String> list = new ArrayList<>();
for (SpecValues spec : specValues) {
if (spec.getSpecId().equals(m.getKey())) {
list.add(spec.getSpecValue());
}
}
goodsSpecValueVO.setValue(list);
goodsSpecValueVOS.add(goodsSpecValueVO);
}
return goodsSpecValueVOS;
}
return new ArrayList<>();
}
@Override
public Specification getSpecification(String id) {
Specification specification = this.getById(id);
if (specification == null) {
throw new ServiceException("当前商品已下架");
}
return specification;
}
@Override
public IPage<SpecificationVO> getSpecificationPage(SpecificationSearchParams searchParams, PageVO pageVo) {
List<SpecificationVO> specList = this.getSpecList(searchParams.getSpecId());
IPage<SpecificationVO> page = new Page<>(pageVo.getPageNumber(), pageVo.getPageSize(), specList.size());
page.setRecords(PageUtil.listToPage(pageVo, specList));
return page;
}
@Override
public IPage<Specification> getSpecificationByPage(SpecificationSearchParams searchParams, PageVO pageVo) {
List<String> specIds = new ArrayList<>();
if (StrUtil.isNotEmpty(searchParams.getCategoryPath())) {
String categoryPath = searchParams.getCategoryPath();
List<CategorySpecification> categorySpecList = categorySpecificationService.getCategorySpecList(categoryPath.split(","));
categorySpecList.forEach(i -> specIds.add(i.getSpecificationId()));
}
QueryWrapper<Specification> queryWrapper = searchParams.queryWrapper();
queryWrapper.in("id", specIds);
return this.page(PageUtil.initPage(pageVo), queryWrapper);
}
@Override
public Specification addSpecification(SpecificationVO specificationVO) {
Specification specification = this.getOne(new LambdaQueryWrapper<Specification>().eq(Specification::getSpecName, specificationVO.getSpecName()));
if (specification == null) {
this.save(specificationVO);
specification = specificationVO;
}
CategorySpecification categorySpecification = categorySpecificationService.getOne(new LambdaQueryWrapper<CategorySpecification>().eq(CategorySpecification::getSpecificationId, specification.getId()));
if (categorySpecification == null) {
categorySpecification = new CategorySpecification();
categorySpecification.setSpecificationId(specification.getId());
String categoryPath = specificationVO.getCategoryPath();
if (CharSequenceUtil.isNotEmpty(categoryPath)) {
categorySpecification.setCategoryId(categoryPath.substring(categoryPath.lastIndexOf(",") + 1));
categorySpecificationService.save(categorySpecification);
}
}
if (CharSequenceUtil.isNotEmpty(specificationVO.getSpecValue())) {
specValuesService.saveSpecValue(specificationVO.getId(), new String[]{specificationVO.getSpecValue()});
}
return specification;
}
@Override
public boolean updateSpecification(SpecificationVO specificationVO) {
this.getSpecification(specificationVO.getId());
return this.updateById(specificationVO);
}
@Override
public boolean deleteSpecification(List<String> ids) {
@@ -157,12 +43,23 @@ public class SpecificationServiceImpl extends ServiceImpl<SpecificationMapper, S
//如果此规格绑定分类则不允许删除
List<CategorySpecification> list = categorySpecificationService.list(new QueryWrapper<CategorySpecification>().eq("specification_id", id));
if (!list.isEmpty()) {
throw new ServiceException(ResultCode.SPEC_DELETE_ERROR);
List<String> categoryIds = new ArrayList<>();
list.forEach(item -> {
categoryIds.add(item.getCategoryId());
});
//返回包含分类的信息
LambdaQueryWrapper<Category> queryWrapper = new LambdaQueryWrapper();
queryWrapper.in(Category::getId, categoryIds);
List<Category> categories = categoryService.list(queryWrapper);
StringBuffer stringBuffer = new StringBuffer("包含的分类有-");
categories.stream().forEach(item -> {
stringBuffer.append(item.getName());
stringBuffer.append(",");
});
throw new ServiceException(ResultCode.SPEC_DELETE_ERROR, stringBuffer.toString());
}
//删除规格
this.removeById(id);
//删除规格值
specValuesService.remove(new QueryWrapper<SpecValues>().eq("spec_id", id));
}
return true;
}