Browse Source

添加品牌、系列

mssql
Yen 3 years ago
parent
commit
17aae6ae05
  1. 1
      src/main/java/com/qs/serve/common/model/enums/SystemModule.java
  2. 85
      src/main/java/com/qs/serve/common/util/ValidateTools.java
  3. 150
      src/main/java/com/qs/serve/modules/bms/controller/BmsRegionController.java
  4. 103
      src/main/java/com/qs/serve/modules/bms/controller/BmsSupplierController.java
  5. 77
      src/main/java/com/qs/serve/modules/bms/entity/BmsRegion.java
  6. 77
      src/main/java/com/qs/serve/modules/bms/entity/BmsSupplier.java
  7. 34
      src/main/java/com/qs/serve/modules/bms/entity/vo/BmsRegionBatchBo.java
  8. 32
      src/main/java/com/qs/serve/modules/bms/entity/vo/BmsRegionTreeVo.java
  9. 14
      src/main/java/com/qs/serve/modules/bms/mapper/BmsRegionMapper.java
  10. 14
      src/main/java/com/qs/serve/modules/bms/mapper/BmsSupplierMapper.java
  11. 25
      src/main/java/com/qs/serve/modules/bms/service/BmsRegionService.java
  12. 14
      src/main/java/com/qs/serve/modules/bms/service/BmsSupplierService.java
  13. 92
      src/main/java/com/qs/serve/modules/bms/service/impl/BmsRegionServiceImpl.java
  14. 22
      src/main/java/com/qs/serve/modules/bms/service/impl/BmsSupplierServiceImpl.java
  15. 103
      src/main/java/com/qs/serve/modules/goods/controller/GoodsBrandController.java
  16. 28
      src/main/java/com/qs/serve/modules/goods/controller/GoodsCategoryController.java
  17. 103
      src/main/java/com/qs/serve/modules/goods/controller/GoodsSeriesController.java
  18. 10
      src/main/java/com/qs/serve/modules/goods/controller/GoodsSkuController.java
  19. 10
      src/main/java/com/qs/serve/modules/goods/controller/GoodsSkuSpecValueController.java
  20. 10
      src/main/java/com/qs/serve/modules/goods/controller/GoodsSpecController.java
  21. 10
      src/main/java/com/qs/serve/modules/goods/controller/GoodsSpecValueController.java
  22. 18
      src/main/java/com/qs/serve/modules/goods/controller/GoodsSpuController.java
  23. 10
      src/main/java/com/qs/serve/modules/goods/controller/GoodsSpuSpecController.java
  24. 83
      src/main/java/com/qs/serve/modules/goods/entity/GoodsBrand.java
  25. 3
      src/main/java/com/qs/serve/modules/goods/entity/GoodsCategory.java
  26. 83
      src/main/java/com/qs/serve/modules/goods/entity/GoodsSeries.java
  27. 19
      src/main/java/com/qs/serve/modules/goods/entity/GoodsSpu.java
  28. 39
      src/main/java/com/qs/serve/modules/goods/entity/bo/GoodSkuInfoVo.java
  29. 49
      src/main/java/com/qs/serve/modules/goods/entity/bo/GoodsCategoryTreeVo.java
  30. 18
      src/main/java/com/qs/serve/modules/goods/entity/bo/GoodsSpuBatchTasteBo.java
  31. 76
      src/main/java/com/qs/serve/modules/goods/entity/bo/GoodsSpuTasteBo.java
  32. 12
      src/main/java/com/qs/serve/modules/goods/entity/dto/GoodSkuSpecValueDto.java
  33. 14
      src/main/java/com/qs/serve/modules/goods/mapper/GoodsBrandMapper.java
  34. 14
      src/main/java/com/qs/serve/modules/goods/mapper/GoodsSeriesMapper.java
  35. 14
      src/main/java/com/qs/serve/modules/goods/service/GoodsBrandService.java
  36. 2
      src/main/java/com/qs/serve/modules/goods/service/GoodsCategoryService.java
  37. 16
      src/main/java/com/qs/serve/modules/goods/service/GoodsSeriesService.java
  38. 2
      src/main/java/com/qs/serve/modules/goods/service/GoodsSkuService.java
  39. 4
      src/main/java/com/qs/serve/modules/goods/service/GoodsSkuSpecValueService.java
  40. 2
      src/main/java/com/qs/serve/modules/goods/service/GoodsSpecValueService.java
  41. 6
      src/main/java/com/qs/serve/modules/goods/service/GoodsSpuService.java
  42. 30
      src/main/java/com/qs/serve/modules/goods/service/impl/GoodsBrandServiceImpl.java
  43. 8
      src/main/java/com/qs/serve/modules/goods/service/impl/GoodsCategoryServiceImpl.java
  44. 30
      src/main/java/com/qs/serve/modules/goods/service/impl/GoodsSeriesServiceImpl.java
  45. 8
      src/main/java/com/qs/serve/modules/goods/service/impl/GoodsSkuServiceImpl.java
  46. 21
      src/main/java/com/qs/serve/modules/goods/service/impl/GoodsSkuSpecValueServiceImpl.java
  47. 20
      src/main/java/com/qs/serve/modules/goods/service/impl/GoodsSpecValueServiceImpl.java
  48. 108
      src/main/java/com/qs/serve/modules/goods/service/impl/GoodsSpuServiceImpl.java
  49. 31
      src/main/resources/application-dev.yml

1
src/main/java/com/qs/serve/common/model/enums/SystemModule.java

@ -12,6 +12,7 @@ import lombok.Getter;
public enum SystemModule { public enum SystemModule {
QUESTION("qms","问卷"), QUESTION("qms","问卷"),
BASE("bms","基础档案"),
GOODS("goods","商品"), GOODS("goods","商品"),
SYSTEM("sys","系统"), SYSTEM("sys","系统"),
UMS("ums","手机用户"); UMS("ums","手机用户");

85
src/main/java/com/qs/serve/common/util/ValidateTools.java

@ -0,0 +1,85 @@
package com.qs.serve.common.util;
import com.qs.serve.common.framework.exception.BusinessException;
import lombok.experimental.UtilityClass;
import org.apache.commons.lang3.StringUtils;
import org.hibernate.validator.HibernateValidator;
import org.springframework.util.CollectionUtils;
import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.Validator;
import javax.validation.ValidatorFactory;
import java.util.List;
import java.util.Set;
/**
* validate方法中校验工具类
* <p>
* 只要在实体中加上相应的validate的相关注解即可
* </p>
*
* @author Zed
*/
@UtilityClass
public class ValidateTools {
/**
* 初始化检查器
*/
private static final ValidatorFactory VALIDATOR_FACTORY = Validation.byProvider(HibernateValidator.class).configure().failFast(false).buildValidatorFactory();
private static final Validator VALIDATOR = VALIDATOR_FACTORY.getValidator();
/**
* 校验返回异常信息
*
* @param t 实体
* @param <T> 实体泛型
*/
public static <T> String validStr(T t) {
// 构造返回信息
StringBuilder validMessage = new StringBuilder();
// 检查实体T
Set<ConstraintViolation<T>> set = VALIDATOR.validate(t);
// 循环set,获取检查结果
for (ConstraintViolation<T> vo : set) {
validMessage.append(vo.getMessage()).append(";");
}
return validMessage.toString();
}
/**
* 校验实体抛出异常
*
* @param t 实体
* @param <T> 实体泛型
*/
public static <T> void valid(T t) {
String validStr = validStr(t);
// 抛出业务异常
if (StringUtils.isNotBlank(validStr)) {
throw new BusinessException(validStr,500);
}
}
/**
* 校验集合抛出异常
*
* @param list 列表
* @param <T> 实体泛型
*/
public static <T> void valid(List<T> list) {
if (CollectionUtils.isEmpty(list)) {
throw new BusinessException("数据不存在!",500);
}
// 构造返回信息
StringBuilder validMessageTotal = new StringBuilder();
// 遍历
for (int i = 0; i < list.size(); i++) {
String validStr = validStr(list.get(i));
if (StringUtils.isNotBlank(validStr)) {
String msg = String.format("第%d条数据校验结果:[%s]\n", i + 1, validStr);
validMessageTotal.append(msg);
}
}
// 抛出业务异常
if (StringUtils.isNotBlank(validMessageTotal.toString())) {
throw new BusinessException(validMessageTotal.toString(),500);
}
}
}

150
src/main/java/com/qs/serve/modules/bms/controller/BmsRegionController.java

@ -0,0 +1,150 @@
package com.qs.serve.modules.bms.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.qs.serve.common.model.annotation.SysLog;
import com.qs.serve.common.model.dto.PageVo;
import com.qs.serve.common.model.dto.R;
import com.qs.serve.common.model.enums.BizType;
import com.qs.serve.common.model.enums.SystemModule;
import com.qs.serve.common.util.*;
import com.qs.serve.modules.bms.entity.vo.BmsRegionBatchBo;
import com.qs.serve.modules.bms.entity.vo.BmsRegionTreeVo;
import com.qs.serve.modules.sys.entity.dto.SysDeptTreeNode;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import com.qs.serve.modules.bms.entity.BmsRegion;
import com.qs.serve.modules.bms.service.BmsRegionService;
import javax.validation.Valid;
import java.util.List;
import java.util.stream.Collectors;
/**
* 基础档案 区域档案
* @author YenHex
* @since 2022-10-10
*/
@Slf4j
@AllArgsConstructor
@RestController
@RequestMapping("bms/region")
public class BmsRegionController {
private BmsRegionService bmsRegionService;
/**
* 翻页查询
* @param param
* @return
*/
@GetMapping("/page")
@PreAuthorize("hasRole('bms:region:query')")
public R<PageVo<BmsRegion>> getPage(BmsRegion param){
PageUtil.startPage();
LambdaQueryWrapper<BmsRegion> regionWrapper = new LambdaQueryWrapper<>(param);
List<BmsRegion> list = bmsRegionService.list(regionWrapper);
return R.byPageHelperList(list);
}
/**
* 树查询
* @param param
* @return
*/
@GetMapping("/tree")
@PreAuthorize("hasRole('bms:region:query')")
public R<List<BmsRegionTreeVo>> getTree(BmsRegion param){
return R.ok(bmsRegionService.getTree(param));
}
/**
* 根据ID查询
* @param id
* @return
*/
@GetMapping("/getById/{id}")
@SysLog(module = SystemModule.BASE, title = "区域档案", biz = BizType.QUERY)
@PreAuthorize("hasRole('bms:region:query')")
public R<BmsRegion> getById(@PathVariable("id") String id){
BmsRegion bmsRegion = bmsRegionService.getById(id);
return R.ok(bmsRegion);
}
/**
* 根据ID更新
* @param regionBo
* @return
*/
@PostMapping("/updateById")
@SysLog(module = SystemModule.BASE, title = "区域档案", biz = BizType.UPDATE)
@PreAuthorize("hasRole('bms:region:update')")
public R<?> updateById(@RequestBody @Valid BmsRegionBatchBo.BmsRegionBo regionBo){
BmsRegion param = CopierUtil.copy(regionBo,new BmsRegion());
bmsRegionService.flushLevel(param);
boolean result = bmsRegionService.updateById(param);
return R.isTrue(result);
}
/**
* 新增区域档案
* @param regionBo
* @return
*/
@PostMapping("/save")
@SysLog(module = SystemModule.BASE, title = "区域档案", biz = BizType.INSERT)
@PreAuthorize("hasRole('bms:region:insert')")
public R<?> save(@RequestBody @Valid BmsRegionBatchBo.BmsRegionBo regionBo){
BmsRegion param = CopierUtil.copy(regionBo,new BmsRegion());
if(param.getId()==null){
param.setId(IdUtil.getSnowFlakeId()+"");
}
bmsRegionService.flushLevel(param);
boolean result = bmsRegionService.save(param);
return R.isTrue(result);
}
/**
* (批量)编辑
* @param regionBo
* @return
*/
@PostMapping("/editBatch")
@SysLog(module = SystemModule.BASE, title = "区域档案", biz = BizType.INSERT)
@PreAuthorize("hasRole('bms:region:insert')")
public R<?> editBatch(@RequestBody @Valid BmsRegionBatchBo regionBo){
for (BmsRegionBatchBo.BmsRegionBo bmsRegionBo : regionBo.getRegionList()) {
BmsRegion region = CopierUtil.copy(bmsRegionBo,new BmsRegion());
if(region.getId()==null){
region.setId(IdUtil.getSnowFlakeId()+"");
bmsRegionService.save(region);
}else {
BmsRegion dbRegion = bmsRegionService.getById(region.getId());
if(dbRegion==null){
bmsRegionService.save(region);
}else {
bmsRegionService.updateById(region);
}
}
}
bmsRegionService.flushAllLevel();
return R.ok();
}
/**
* 删除区域档案
* @param id
* @return
*/
@DeleteMapping("/deleteById/{id}")
@SysLog(module = SystemModule.BASE, title = "区域档案", biz = BizType.DELETE)
@PreAuthorize("hasRole('bms:region:delete')")
public R<?> deleteById(@PathVariable("id") String id){
boolean result = bmsRegionService.removeById(id);
return R.isTrue(result);
}
}

103
src/main/java/com/qs/serve/modules/bms/controller/BmsSupplierController.java

@ -0,0 +1,103 @@
package com.qs.serve.modules.bms.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.qs.serve.common.model.annotation.SysLog;
import com.qs.serve.common.model.dto.PageVo;
import com.qs.serve.common.model.dto.R;
import com.qs.serve.common.model.enums.BizType;
import com.qs.serve.common.model.enums.SystemModule;
import com.qs.serve.common.util.PageUtil;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import com.qs.serve.modules.bms.entity.BmsSupplier;
import com.qs.serve.modules.bms.service.BmsSupplierService;
import javax.validation.Valid;
import java.util.List;
/**
* 基础档案 供应商
* @author YenHex
* @since 2022-10-10
*/
@Slf4j
@AllArgsConstructor
@RestController
@RequestMapping("bms/supplier")
public class BmsSupplierController {
private BmsSupplierService bmsSupplierService;
/**
* 翻页查询
* @param param
* @return
*/
@GetMapping("/page")
@PreAuthorize("hasRole('bms:supplier:query')")
public R<PageVo<BmsSupplier>> getPage(BmsSupplier param){
PageUtil.startPage();
LambdaQueryWrapper<BmsSupplier> supplierWrapper = new LambdaQueryWrapper<>(param);
List<BmsSupplier> list = bmsSupplierService.list(supplierWrapper);
return R.byPageHelperList(list);
}
/**
* 根据ID查询
* @param id
* @return
*/
@GetMapping("/getById/{id}")
@SysLog(module = SystemModule.BASE, title = "供应商", biz = BizType.QUERY)
@PreAuthorize("hasRole('bms:supplier:query')")
public R<BmsSupplier> getById(@PathVariable("id") String id){
BmsSupplier bmsSupplier = bmsSupplierService.getById(id);
return R.ok(bmsSupplier);
}
/**
* 根据ID更新
* @param param
* @return
*/
@PostMapping("/updateById")
@SysLog(module = SystemModule.BASE, title = "供应商", biz = BizType.UPDATE)
@PreAuthorize("hasRole('bms:supplier:update')")
public R<?> updateById(@RequestBody @Valid BmsSupplier param){
boolean result = bmsSupplierService.updateById(param);
return R.isTrue(result);
}
/**
* 新增供应商
* @param param
* @return
*/
@PostMapping("/save")
@SysLog(module = SystemModule.BASE, title = "供应商", biz = BizType.INSERT)
@PreAuthorize("hasRole('bms:supplier:insert')")
public R<?> save(@RequestBody @Valid BmsSupplier param){
boolean result = bmsSupplierService.save(param);
return R.isTrue(result);
}
/**
* 删除供应商
* @param id
* @return
*/
@DeleteMapping("/deleteById/{id}")
@SysLog(module = SystemModule.BASE, title = "供应商", biz = BizType.DELETE)
@PreAuthorize("hasRole('bms:supplier:delete')")
public R<?> deleteById(@PathVariable("id") Long id){
bmsSupplierService.removeById(id);
return R.ok();
}
}

77
src/main/java/com/qs/serve/modules/bms/entity/BmsRegion.java

@ -0,0 +1,77 @@
package com.qs.serve.modules.bms.entity;
import java.time.LocalDateTime;
import java.io.Serializable;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import org.hibernate.validator.constraints.Length;
import org.springframework.format.annotation.DateTimeFormat;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.NotBlank;
/**
* 区域档案 实体类
* @author YenHex
* @since 2022-10-10
*/
@Data
@TableName("bms_region")
public class BmsRegion implements Serializable {
private static final long serialVersionUID = 1L;
/** id */
private String id;
/** 名称 */
@Length(max = 20,message = "名称长度不能超过20字")
private String name;
/** 编码 */
@Length(max = 20,message = "编码长度不能超过20字")
private String code;
/** 父级ID */
@Length(max = 32,message = "父级ID长度不能超过32字")
private String pid;
/** 层级 */
private Integer level;
/** 创建时间 */
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;
/** 创建人 */
@TableField(fill = FieldFill.INSERT)
private String createBy;
/** 更新时间 */
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
@TableField(fill = FieldFill.UPDATE)
private LocalDateTime updateTime;
/** 更新人 */
@TableField(fill = FieldFill.UPDATE)
private String updateBy;
/** 租户id */
@JsonIgnore
@JsonProperty
private String tenantId;
/** 删除标识 */
@JsonIgnore
@JsonProperty
private Boolean delFlag;
}

77
src/main/java/com/qs/serve/modules/bms/entity/BmsSupplier.java

@ -0,0 +1,77 @@
package com.qs.serve.modules.bms.entity;
import java.time.LocalDateTime;
import java.io.Serializable;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import org.hibernate.validator.constraints.Length;
import org.springframework.format.annotation.DateTimeFormat;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.NotBlank;
/**
* 供应商 实体类
* @author YenHex
* @since 2022-10-10
*/
@Data
@TableName("bms_supplier")
public class BmsSupplier implements Serializable {
private static final long serialVersionUID = 1L;
/** id */
@TableId(type = IdType.AUTO)
private Long id;
/** 名称 */
@Length(max = 20,message = "名称长度不能超过20字")
private String name;
/** 一级区域ID */
@NotNull(message = "一级区域ID不能为空")
private Long regionFirst;
/** 二级区域ID */
private Long regionSecond;
/** 三级区域ID */
private Long regionThird;
/** 创建时间 */
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;
/** 创建人 */
@TableField(fill = FieldFill.INSERT)
private String createBy;
/** 更新时间 */
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
@TableField(fill = FieldFill.UPDATE)
private LocalDateTime updateTime;
/** 更新人 */
@TableField(fill = FieldFill.UPDATE)
private String updateBy;
/** 租户id */
@JsonIgnore
@JsonProperty
private String tenantId;
/** 删除标识 */
@JsonIgnore
@JsonProperty
private Boolean delFlag;
}

34
src/main/java/com/qs/serve/modules/bms/entity/vo/BmsRegionBatchBo.java

@ -0,0 +1,34 @@
package com.qs.serve.modules.bms.entity.vo;
import lombok.Data;
import org.hibernate.validator.constraints.Length;
import java.util.List;
/**
* @author YenHex
* @since 2022/10/10
*/
@Data
public class BmsRegionBatchBo {
private List<BmsRegionBo> regionList;
@Data
public static class BmsRegionBo{
/** id */
private String id;
/** 名称 */
@Length(max = 20,message = "名称长度不能超过20字")
private String name;
/** 编码 */
@Length(max = 20,message = "编码长度不能超过20字")
private String code;
/** 父级ID */
@Length(max = 32,message = "父级ID长度不能超过32字")
private String pid;
}
}

32
src/main/java/com/qs/serve/modules/bms/entity/vo/BmsRegionTreeVo.java

@ -0,0 +1,32 @@
package com.qs.serve.modules.bms.entity.vo;
import com.qs.serve.common.model.dto.TreeNode;
import lombok.Data;
import org.hibernate.validator.constraints.Length;
/**
* @author YenHex
* @since 2022/10/10
*/
@Data
public class BmsRegionTreeVo extends TreeNode {
/** id */
private String id;
/** 名称 */
@Length(max = 20,message = "名称长度不能超过20字")
private String name;
/** 编码 */
@Length(max = 20,message = "编码长度不能超过20字")
private String code;
/** 父级ID */
@Length(max = 32,message = "父级ID长度不能超过32字")
private String pid;
/** 层级 */
private Integer level;
}

14
src/main/java/com/qs/serve/modules/bms/mapper/BmsRegionMapper.java

@ -0,0 +1,14 @@
package com.qs.serve.modules.bms.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.qs.serve.modules.bms.entity.BmsRegion;
/**
* 区域档案 Mapper
* @author YenHex
* @date 2022-10-10
*/
public interface BmsRegionMapper extends BaseMapper<BmsRegion> {
}

14
src/main/java/com/qs/serve/modules/bms/mapper/BmsSupplierMapper.java

@ -0,0 +1,14 @@
package com.qs.serve.modules.bms.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.qs.serve.modules.bms.entity.BmsSupplier;
/**
* 供应商 Mapper
* @author YenHex
* @date 2022-10-10
*/
public interface BmsSupplierMapper extends BaseMapper<BmsSupplier> {
}

25
src/main/java/com/qs/serve/modules/bms/service/BmsRegionService.java

@ -0,0 +1,25 @@
package com.qs.serve.modules.bms.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.qs.serve.modules.bms.entity.BmsRegion;
import com.qs.serve.modules.bms.entity.vo.BmsRegionTreeVo;
import java.util.List;
/**
* 区域档案 服务接口
* @author YenHex
* @date 2022-10-10
*/
public interface BmsRegionService extends IService<BmsRegion> {
List<BmsRegionTreeVo> getTree(BmsRegion param);
void flushLevel(BmsRegion param);
void flushAllLevel();
void updateLevel(String id,Integer level);
}

14
src/main/java/com/qs/serve/modules/bms/service/BmsSupplierService.java

@ -0,0 +1,14 @@
package com.qs.serve.modules.bms.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.qs.serve.modules.bms.entity.BmsSupplier;
/**
* 供应商 服务接口
* @author YenHex
* @date 2022-10-10
*/
public interface BmsSupplierService extends IService<BmsSupplier> {
}

92
src/main/java/com/qs/serve/modules/bms/service/impl/BmsRegionServiceImpl.java

@ -0,0 +1,92 @@
package com.qs.serve.modules.bms.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.qs.serve.common.model.dto.TreeNode;
import com.qs.serve.common.util.*;
import com.qs.serve.modules.bms.entity.vo.BmsRegionTreeVo;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import com.qs.serve.modules.bms.entity.BmsRegion;
import com.qs.serve.modules.bms.service.BmsRegionService;
import com.qs.serve.modules.bms.mapper.BmsRegionMapper;
import java.util.List;
import java.util.stream.Collectors;
/**
* 区域档案 服务实现类
* @author YenHex
* @since 2022-10-10
*/
@Slf4j
@Service
@AllArgsConstructor
public class BmsRegionServiceImpl extends ServiceImpl<BmsRegionMapper,BmsRegion> implements BmsRegionService {
@Override
public List<BmsRegionTreeVo> getTree(BmsRegion param) {
LambdaQueryWrapper<BmsRegion> regionWrapper = new LambdaQueryWrapper<>(param);
List<BmsRegion> list = this.list(regionWrapper);
List<BmsRegionTreeVo> treeVoList = list.stream().map(region->{
BmsRegionTreeVo treeNode = CopierUtil.copy(region,new BmsRegionTreeVo());
treeNode.setId(region.getId());
treeNode.setParentId(region.getPid());
treeNode.setSort(0);
return treeNode;
}).collect(Collectors.toList());
return TreeUtil.buildByRecursive(treeVoList,TreeUtil.DEFAULT_PID_STRING);
}
@Override
public void flushLevel(BmsRegion param) {
if(StringUtils.hasText(param.getPid())){
BmsRegion parent = this.getById(param.getPid());
if(parent!=null){
if(parent.getLevel()>2){
Assert.throwEx("最高支持3层级");
}
param.setLevel(parent.getLevel()+1);
}else {
param.setPid(null);
param.setLevel(1);
}
}
}
@Override
public void flushAllLevel() {
List<BmsRegionTreeVo> treeVoList = this.getTree(new BmsRegion());
for (BmsRegionTreeVo firstTree : treeVoList) {
if(firstTree.getLevel()==null||firstTree.getLevel()!=1){
this.updateLevel(firstTree.getId(),1);
}
if(CollectionUtil.isNotEmpty(firstTree.getChildren())){
for (TreeNode secondTreeNode : firstTree.getChildren()) {
BmsRegionTreeVo secondTree = (BmsRegionTreeVo)secondTreeNode;
if(secondTree.getLevel()==null||secondTree.getLevel()!=2){
this.updateLevel(secondTree.getId(),2);
}
if(CollectionUtil.isNotEmpty(secondTree.getChildren())){
for (TreeNode thirdTreeNode : secondTree.getChildren()) {
BmsRegionTreeVo thirdTree = (BmsRegionTreeVo)thirdTreeNode;
if(thirdTree.getLevel()==null||thirdTree.getLevel()!=3){
this.updateLevel(thirdTree.getId(),3);
}
}
}
}
}
}
}
@Override
public void updateLevel(String id, Integer level) {
BmsRegion param = new BmsRegion();
param.setId(id);
param.setLevel(level);
this.updateById(param);
}
}

22
src/main/java/com/qs/serve/modules/bms/service/impl/BmsSupplierServiceImpl.java

@ -0,0 +1,22 @@
package com.qs.serve.modules.bms.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import com.qs.serve.modules.bms.entity.BmsSupplier;
import com.qs.serve.modules.bms.service.BmsSupplierService;
import com.qs.serve.modules.bms.mapper.BmsSupplierMapper;
/**
* 供应商 服务实现类
* @author YenHex
* @since 2022-10-10
*/
@Slf4j
@Service
@AllArgsConstructor
public class BmsSupplierServiceImpl extends ServiceImpl<BmsSupplierMapper,BmsSupplier> implements BmsSupplierService {
}

103
src/main/java/com/qs/serve/modules/goods/controller/GoodsBrandController.java

@ -0,0 +1,103 @@
package com.qs.serve.modules.goods.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.qs.serve.common.model.annotation.SysLog;
import com.qs.serve.common.model.dto.PageVo;
import com.qs.serve.common.model.dto.R;
import com.qs.serve.common.model.enums.BizType;
import com.qs.serve.common.model.enums.SystemModule;
import com.qs.serve.common.util.PageUtil;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import com.qs.serve.modules.goods.entity.GoodsBrand;
import com.qs.serve.modules.goods.service.GoodsBrandService;
import javax.validation.Valid;
import java.util.List;
/**
* 商品 品牌 后台接口
* @author YenHex
* @since 2022-10-11
*/
@Slf4j
@AllArgsConstructor
@RestController
@RequestMapping("goods/brand")
public class GoodsBrandController {
private GoodsBrandService goodsBrandService;
/**
* 翻页查询
* @param param
* @return
*/
@GetMapping("/page")
@PreAuthorize("hasRole('goods:brand:query')")
public R<PageVo<GoodsBrand>> getPage(GoodsBrand param){
PageUtil.startPage();
LambdaQueryWrapper<GoodsBrand> brandWrapper = new LambdaQueryWrapper<>(param);
List<GoodsBrand> list = goodsBrandService.list(brandWrapper);
return R.byPageHelperList(list);
}
/**
* 根据ID查询
* @param id
* @return
*/
@GetMapping("/getById/{id}")
@SysLog(module = SystemModule.GOODS, title = "品牌", biz = BizType.QUERY)
@PreAuthorize("hasRole('goods:brand:query')")
public R<GoodsBrand> getById(@PathVariable("id") String id){
GoodsBrand goodsBrand = goodsBrandService.getById(id);
return R.ok(goodsBrand);
}
/**
* 根据ID更新
* @param param
* @return
*/
@PostMapping("/updateById")
@SysLog(module = SystemModule.GOODS, title = "品牌", biz = BizType.UPDATE)
@PreAuthorize("hasRole('goods:brand:update')")
public R<?> updateById(@RequestBody @Valid GoodsBrand param){
boolean result = goodsBrandService.updateById(param);
return R.isTrue(result);
}
/**
* 新增品牌
* @param param
* @return
*/
@PostMapping("/save")
@SysLog(module = SystemModule.GOODS, title = "品牌", biz = BizType.INSERT)
@PreAuthorize("hasRole('goods:brand:insert')")
public R<?> save(@RequestBody @Valid GoodsBrand param){
boolean result = goodsBrandService.save(param);
return R.isTrue(result);
}
/**
* 删除品牌
* @param id
* @return
*/
@DeleteMapping("/deleteById/{id}")
@SysLog(module = SystemModule.GOODS, title = "品牌", biz = BizType.DELETE)
@PreAuthorize("hasRole('goods:brand:delete')")
public R<?> deleteById(@PathVariable("id") String id){
boolean result = goodsBrandService.removeById(id);
return R.isTrue(result);
}
}

28
src/main/java/com/qs/serve/modules/goods/controller/GoodsCategoryController.java

@ -6,7 +6,11 @@ import com.qs.serve.common.model.dto.PageVo;
import com.qs.serve.common.model.dto.R; import com.qs.serve.common.model.dto.R;
import com.qs.serve.common.model.enums.BizType; import com.qs.serve.common.model.enums.BizType;
import com.qs.serve.common.model.enums.SystemModule; import com.qs.serve.common.model.enums.SystemModule;
import com.qs.serve.common.util.CopierUtil;
import com.qs.serve.common.util.PageUtil; import com.qs.serve.common.util.PageUtil;
import com.qs.serve.common.util.TreeUtil;
import com.qs.serve.modules.bms.entity.vo.BmsRegionTreeVo;
import com.qs.serve.modules.goods.entity.bo.GoodsCategoryTreeVo;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.access.prepost.PreAuthorize;
@ -17,9 +21,10 @@ import com.qs.serve.modules.goods.service.GoodsCategoryService;
import javax.validation.Valid; import javax.validation.Valid;
import java.util.List; import java.util.List;
import java.util.stream.Collectors;
/** /**
* 商品 分类 后台接口 * 商品 分类
* @author YenHex * @author YenHex
* @since 2022-10-09 * @since 2022-10-09
*/ */
@ -45,6 +50,27 @@ public class GoodsCategoryController {
return R.byPageHelperList(list); return R.byPageHelperList(list);
} }
/**
* 树查询
* @param param
* @return
*/
@GetMapping("/tree")
@PreAuthorize("hasRole('goods:category:query')")
public R<List<GoodsCategoryTreeVo>> getTree(GoodsCategory param){
LambdaQueryWrapper<GoodsCategory> lqw = new LambdaQueryWrapper<>(param);
List<GoodsCategory> list = goodsCategoryService.list(lqw);
List<GoodsCategoryTreeVo> treeVoList = list.stream().map(cate->{
GoodsCategoryTreeVo treeNode = CopierUtil.copy(cate,new GoodsCategoryTreeVo());
treeNode.setId(cate.getId()+"");
treeNode.setParentId(cate.getParentId());
treeNode.setSort(0);
return treeNode;
}).collect(Collectors.toList());
treeVoList = TreeUtil.buildByRecursive(treeVoList,TreeUtil.DEFAULT_PID_STRING);
return R.ok(treeVoList);
}
/** /**
* 根据ID查询 * 根据ID查询
* @param id * @param id

103
src/main/java/com/qs/serve/modules/goods/controller/GoodsSeriesController.java

@ -0,0 +1,103 @@
package com.qs.serve.modules.goods.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.qs.serve.common.model.annotation.SysLog;
import com.qs.serve.common.model.dto.PageVo;
import com.qs.serve.common.model.dto.R;
import com.qs.serve.common.model.enums.BizType;
import com.qs.serve.common.model.enums.SystemModule;
import com.qs.serve.common.util.PageUtil;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import com.qs.serve.modules.goods.entity.GoodsSeries;
import com.qs.serve.modules.goods.service.GoodsSeriesService;
import javax.validation.Valid;
import java.util.List;
/**
* 商品 系列 后台接口
* @author YenHex
* @since 2022-10-11
*/
@Slf4j
@AllArgsConstructor
@RestController
@RequestMapping("goods/series")
public class GoodsSeriesController {
private GoodsSeriesService goodsSeriesService;
/**
* 翻页查询
* @param param
* @return
*/
@GetMapping("/page")
@PreAuthorize("hasRole('goods:series:query')")
public R<PageVo<GoodsSeries>> getPage(GoodsSeries param){
PageUtil.startPage();
LambdaQueryWrapper<GoodsSeries> seriesWrapper = new LambdaQueryWrapper<>(param);
List<GoodsSeries> list = goodsSeriesService.list(seriesWrapper);
return R.byPageHelperList(list);
}
/**
* 根据ID查询
* @param id
* @return
*/
@GetMapping("/getById/{id}")
@SysLog(module = SystemModule.GOODS, title = "系列", biz = BizType.QUERY)
@PreAuthorize("hasRole('goods:series:query')")
public R<GoodsSeries> getById(@PathVariable("id") String id){
GoodsSeries goodsSeries = goodsSeriesService.getById(id);
return R.ok(goodsSeries);
}
/**
* 根据ID更新
* @param param
* @return
*/
@PostMapping("/updateById")
@SysLog(module = SystemModule.GOODS, title = "系列", biz = BizType.UPDATE)
@PreAuthorize("hasRole('goods:series:update')")
public R<?> updateById(@RequestBody @Valid GoodsSeries param){
boolean result = goodsSeriesService.updateById(param);
return R.isTrue(result);
}
/**
* 新增系列
* @param param
* @return
*/
@PostMapping("/save")
@SysLog(module = SystemModule.GOODS, title = "系列", biz = BizType.INSERT)
@PreAuthorize("hasRole('goods:series:insert')")
public R<?> save(@RequestBody @Valid GoodsSeries param){
boolean result = goodsSeriesService.save(param);
return R.isTrue(result);
}
/**
* 删除系列
* @param id
* @return
*/
@DeleteMapping("/deleteById/{id}")
@SysLog(module = SystemModule.GOODS, title = "系列", biz = BizType.DELETE)
@PreAuthorize("hasRole('goods:series:delete')")
public R<?> deleteById(@PathVariable("id") String id){
boolean result = goodsSeriesService.removeById(id);
return R.isTrue(result);
}
}

10
src/main/java/com/qs/serve/modules/goods/controller/GoodsSkuController.java

@ -19,14 +19,14 @@ import javax.validation.Valid;
import java.util.List; import java.util.List;
/** /**
* 商品 sku 后台接口 * 商品 sku
* @author YenHex * @author YenHex
* @since 2022-10-09 * @since 2022-10-09
*/ */
@Slf4j //@Slf4j
@AllArgsConstructor //@AllArgsConstructor
@RestController //@RestController
@RequestMapping("goods/sku") //@RequestMapping("goods/sku")
public class GoodsSkuController { public class GoodsSkuController {
private GoodsSkuService goodsSkuService; private GoodsSkuService goodsSkuService;

10
src/main/java/com/qs/serve/modules/goods/controller/GoodsSkuSpecValueController.java

@ -19,14 +19,14 @@ import javax.validation.Valid;
import java.util.List; import java.util.List;
/** /**
* 商品 sku规格值 后台接口 * 商品 sku规格值
* @author YenHex * @author YenHex
* @since 2022-10-09 * @since 2022-10-09
*/ */
@Slf4j //@Slf4j
@AllArgsConstructor //@AllArgsConstructor
@RestController //@RestController
@RequestMapping("goods/skuSpecValue") //@RequestMapping("goods/skuSpecValue")
public class GoodsSkuSpecValueController { public class GoodsSkuSpecValueController {
private GoodsSkuSpecValueService goodsSkuSpecValueService; private GoodsSkuSpecValueService goodsSkuSpecValueService;

10
src/main/java/com/qs/serve/modules/goods/controller/GoodsSpecController.java

@ -19,14 +19,14 @@ import javax.validation.Valid;
import java.util.List; import java.util.List;
/** /**
* 商品 规格 后台接口 * 商品 规格
* @author YenHex * @author YenHex
* @since 2022-10-09 * @since 2022-10-09
*/ */
@Slf4j //@Slf4j
@AllArgsConstructor //@AllArgsConstructor
@RestController //@RestController
@RequestMapping("goods/spec") //@RequestMapping("goods/spec")
public class GoodsSpecController { public class GoodsSpecController {
private GoodsSpecService goodsSpecService; private GoodsSpecService goodsSpecService;

10
src/main/java/com/qs/serve/modules/goods/controller/GoodsSpecValueController.java

@ -19,14 +19,14 @@ import javax.validation.Valid;
import java.util.List; import java.util.List;
/** /**
* 商品 规格值 后台接口 * 商品 规格值
* @author YenHex * @author YenHex
* @since 2022-10-09 * @since 2022-10-09
*/ */
@Slf4j //@Slf4j
@AllArgsConstructor //@AllArgsConstructor
@RestController //@RestController
@RequestMapping("goods/specValue") //@RequestMapping("goods/specValue")
public class GoodsSpecValueController { public class GoodsSpecValueController {
private GoodsSpecValueService goodsSpecValueService; private GoodsSpecValueService goodsSpecValueService;

18
src/main/java/com/qs/serve/modules/goods/controller/GoodsSpuController.java

@ -7,6 +7,7 @@ import com.qs.serve.common.model.dto.R;
import com.qs.serve.common.model.enums.BizType; import com.qs.serve.common.model.enums.BizType;
import com.qs.serve.common.model.enums.SystemModule; import com.qs.serve.common.model.enums.SystemModule;
import com.qs.serve.common.util.PageUtil; import com.qs.serve.common.util.PageUtil;
import com.qs.serve.modules.goods.entity.bo.GoodsSpuBatchTasteBo;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.access.prepost.PreAuthorize;
@ -19,7 +20,7 @@ import javax.validation.Valid;
import java.util.List; import java.util.List;
/** /**
* 商品 spu 后台接口 * 商品 spu
* @author YenHex * @author YenHex
* @since 2022-10-09 * @since 2022-10-09
*/ */
@ -58,8 +59,6 @@ public class GoodsSpuController {
return R.ok(goodsSpu); return R.ok(goodsSpu);
} }
/** /**
* 根据ID更新 * 根据ID更新
* @param param * @param param
@ -99,5 +98,18 @@ public class GoodsSpuController {
return R.isTrue(result); return R.isTrue(result);
} }
/**
* (批量)编辑口味品类SPU,建议每次小于50条
* @param param
* @return
*/
@PostMapping("/saveBatchTasteSpu")
@SysLog(module = SystemModule.GOODS, title = "spu", biz = BizType.INSERT)
@PreAuthorize("hasRole('goods:spu:insert')")
public R<?> saveBatchTasteSpu(@RequestBody GoodsSpuBatchTasteBo param){
goodsSpuService.saveBatchTasteSpu(param);
return R.ok();
}
} }

10
src/main/java/com/qs/serve/modules/goods/controller/GoodsSpuSpecController.java

@ -19,14 +19,14 @@ import javax.validation.Valid;
import java.util.List; import java.util.List;
/** /**
* 商品 spu规格 后台接口 * 商品 spu规格
* @author YenHex * @author YenHex
* @since 2022-10-09 * @since 2022-10-09
*/ */
@Slf4j //@Slf4j
@AllArgsConstructor //@AllArgsConstructor
@RestController //@RestController
@RequestMapping("goods/spuSpec") //@RequestMapping("goods/spuSpec")
public class GoodsSpuSpecController { public class GoodsSpuSpecController {
private GoodsSpuSpecService goodsSpuSpecService; private GoodsSpuSpecService goodsSpuSpecService;

83
src/main/java/com/qs/serve/modules/goods/entity/GoodsBrand.java

@ -0,0 +1,83 @@
package com.qs.serve.modules.goods.entity;
import java.time.LocalDateTime;
import java.io.Serializable;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import org.hibernate.validator.constraints.Length;
import org.springframework.format.annotation.DateTimeFormat;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.NotBlank;
/**
* 品牌 实体类
* @author YenHex
* @since 2022-10-11
*/
@Data
@TableName("goods_brand")
public class GoodsBrand implements Serializable {
private static final long serialVersionUID = 1L;
/** PK */
@TableId(type = IdType.AUTO)
private Long id;
/** 编码 */
@NotBlank(message = "编码不能为空")
@Length(max = 20,message = "编码长度不能超过20字")
private String code;
/** 名称 */
@Length(max = 16,message = "名称长度不能超过16字")
private String name;
/** 描述 */
@Length(max = 255,message = "描述长度不能超过255字")
private String description;
/** 图片 */
@Length(max = 255,message = "图片长度不能超过255字")
private String picUrl;
/** 排序 */
private Integer sort;
/** 创建时间 */
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;
/** 最后更新时间 */
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
@TableField(fill = FieldFill.UPDATE)
private LocalDateTime updateTime;
/** 所属租户 */
@JsonIgnore
@JsonProperty
private String tenantId;
/** 逻辑删除标记(0:显示;1:隐藏) */
@JsonIgnore
@JsonProperty
private String delFlag;
/** 创建人 */
@TableField(fill = FieldFill.INSERT)
private String createBy;
/** 更新人 */
@TableField(fill = FieldFill.UPDATE)
private String updateBy;
}

3
src/main/java/com/qs/serve/modules/goods/entity/GoodsCategory.java

@ -34,6 +34,9 @@ public class GoodsCategory implements Serializable {
@Length(max = 2,message = "(1:开启;0:关闭)长度不能超过2字") @Length(max = 2,message = "(1:开启;0:关闭)长度不能超过2字")
private String enable; private String enable;
@NotBlank(message = "编码不能为空")
private String code;
/** 父分类编号 */ /** 父分类编号 */
@Length(max = 32,message = "父分类编号长度不能超过32字") @Length(max = 32,message = "父分类编号长度不能超过32字")
private String parentId; private String parentId;

83
src/main/java/com/qs/serve/modules/goods/entity/GoodsSeries.java

@ -0,0 +1,83 @@
package com.qs.serve.modules.goods.entity;
import java.time.LocalDateTime;
import java.io.Serializable;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import org.hibernate.validator.constraints.Length;
import org.springframework.format.annotation.DateTimeFormat;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.NotBlank;
/**
* 系列 实体类
* @author YenHex
* @since 2022-10-11
*/
@Data
@TableName("goods_series")
public class GoodsSeries implements Serializable {
private static final long serialVersionUID = 1L;
/** PK */
@TableId(type = IdType.AUTO)
private Long id;
/** 编码 */
@NotBlank(message = "编码不能为空")
@Length(max = 20,message = "编码长度不能超过20字")
private String code;
/** 名称 */
@Length(max = 16,message = "名称长度不能超过16字")
private String name;
/** 描述 */
@Length(max = 255,message = "描述长度不能超过255字")
private String description;
/** 图片 */
@Length(max = 255,message = "图片长度不能超过255字")
private String picUrl;
/** 排序 */
private Integer sort;
/** 创建时间 */
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;
/** 最后更新时间 */
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
@TableField(fill = FieldFill.UPDATE)
private LocalDateTime updateTime;
/** 所属租户 */
@JsonIgnore
@JsonProperty
private String tenantId;
/** 逻辑删除标记(0:显示;1:隐藏) */
@JsonIgnore
@JsonProperty
private String delFlag;
/** 创建人 */
@TableField(fill = FieldFill.INSERT)
private String createBy;
/** 更新人 */
@TableField(fill = FieldFill.UPDATE)
private String updateBy;
}

19
src/main/java/com/qs/serve/modules/goods/entity/GoodsSpu.java

@ -7,7 +7,9 @@ import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonProperty;
import com.qs.serve.common.framework.mybatis.handler.meta.SplitStringTypeHandler;
import lombok.Data; import lombok.Data;
import org.apache.ibatis.type.JdbcType;
import org.hibernate.validator.constraints.Length; import org.hibernate.validator.constraints.Length;
import org.springframework.format.annotation.DateTimeFormat; import org.springframework.format.annotation.DateTimeFormat;
@ -20,7 +22,7 @@ import javax.validation.constraints.NotBlank;
* @since 2022-10-09 * @since 2022-10-09
*/ */
@Data @Data
@TableName("goods_spu") @TableName(value = "goods_spu",autoResultMap = true)
public class GoodsSpu implements Serializable { public class GoodsSpu implements Serializable {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@ -39,20 +41,23 @@ public class GoodsSpu implements Serializable {
@Length(max = 200,message = "商品名字长度不能超过200字") @Length(max = 200,message = "商品名字长度不能超过200字")
private String name; private String name;
private Long brandId;
private Long seriesId;
/** 一级分类ID */ /** 一级分类ID */
@NotNull(message = "一级分类ID不能为空") @NotNull(message = "一级分类ID不能为空")
private Long categoryFirst; private String categoryFirst;
/** 二级分类ID */ /** 二级分类ID */
private Long categorySecond; private String categorySecond;
/** 三级分类ID */ /** 三级分类ID */
private Long categoryThird; private String categoryThird;
/** 商品图片 */ /** 商品图片 */
@NotBlank(message = "商品图片不能为空") @TableField(typeHandler = SplitStringTypeHandler.class,jdbcType= JdbcType.VARCHAR)
@Length(max = 1024,message = "商品图片长度不能超过1024字") private String[] picUrls;
private String picUrls;
/** 是否上架(1是 0否) */ /** 是否上架(1是 0否) */
@NotBlank(message = "是否上架(1是 0否)不能为空") @NotBlank(message = "是否上架(1是 0否)不能为空")

39
src/main/java/com/qs/serve/modules/goods/entity/bo/GoodSkuInfoVo.java

@ -0,0 +1,39 @@
package com.qs.serve.modules.goods.entity.bo;
import com.qs.serve.modules.goods.entity.GoodsSku;
import java.util.List;
/**
* @author YenHex
* @since 2022/10/11
*/
public class GoodSkuInfoVo {
private List<GoodsSku> skuList;
//规格列表
public static class SpecInfo{
Integer sort;
String specName;
List<SpecValue> specValues;
}
public static class SpecValue{
String specValueId;
String specValue;
}
public static class SkuVo{
//....
List<SkuComboValue> skuSpecValueInfos;
}
public static class SkuComboValue{
}
}

49
src/main/java/com/qs/serve/modules/goods/entity/bo/GoodsCategoryTreeVo.java

@ -0,0 +1,49 @@
package com.qs.serve.modules.goods.entity.bo;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.qs.serve.common.model.dto.TreeNode;
import lombok.Data;
import org.hibernate.validator.constraints.Length;
import javax.validation.constraints.NotBlank;
/**
* @author YenHex
* @since 2022/10/10
*/
@Data
public class GoodsCategoryTreeVo extends TreeNode {
/** PK */
@TableId(type = IdType.AUTO)
private String id;
/** (1:开启;0:关闭) */
@NotBlank(message = "(1:开启;0:关闭)不能为空")
@Length(max = 2,message = "(1:开启;0:关闭)长度不能超过2字")
private String enable;
@NotBlank(message = "编码不能为空")
private String code;
/** 父分类编号 */
@Length(max = 32,message = "父分类编号长度不能超过32字")
private String parentId;
/** 名称 */
@Length(max = 16,message = "名称长度不能超过16字")
private String name;
/** 描述 */
@Length(max = 255,message = "描述长度不能超过255字")
private String description;
/** 图片 */
@Length(max = 255,message = "图片长度不能超过255字")
private String picUrl;
/** 排序 */
private Integer sort;
}

18
src/main/java/com/qs/serve/modules/goods/entity/bo/GoodsSpuBatchTasteBo.java

@ -0,0 +1,18 @@
package com.qs.serve.modules.goods.entity.bo;
import lombok.Data;
import javax.validation.constraints.NotNull;
import java.util.List;
/**
* @author YenHex
* @since 2022/10/10
*/
@Data
public class GoodsSpuBatchTasteBo {
/** 口味商品数据列表 */
@NotNull
List<GoodsSpuTasteBo> tasteProducts;
}

76
src/main/java/com/qs/serve/modules/goods/entity/bo/GoodsSpuTasteBo.java

@ -0,0 +1,76 @@
package com.qs.serve.modules.goods.entity.bo;
import lombok.Data;
import org.hibernate.validator.constraints.Length;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
/**
* 口味品类
* @author YenHex
* @since 2022/10/10
*/
@Data
public class GoodsSpuTasteBo {
/** 商品编码 */
@NotBlank(message = "商品编码不能为空")
@Length(max = 32,message = "商品编码长度不能超过32字")
private String productCode;
/** 存货编码 */
@NotBlank(message = "SKU编码不能为空")
@Length(max = 32,message = "商品编码长度不能超过32字")
private String invCode;
/** 商品名字 */
@NotBlank(message = "商品名字不能为空")
@Length(max = 200,message = "商品名字长度不能超过200字")
private String name;
/** 分类编码 */
@NotNull(message = "分类编码不能为空")
private String categoryCode;
/** 品牌编码 */
private String brandCode;
/** 系列编码 */
private String seriesCode;
/** 商品组图片 */
private String[] picUrls;
/** 存货商品图片 */
private String invPicUrl;
/** 味道 */
@NotNull(message = "味道不能为空")
private String tasteValue;
/** 包装 */
@NotNull(message = "包装不能为空")
private String packValue;
/** 产品口味 */
private String productTasteValue;
/** 销售价格 */
@NotNull(message = "销售价格不能为空")
private BigDecimal salesPrice;
/** 市场价 */
@NotNull(message = "市场价不能为空")
private BigDecimal marketPrice;
/** 重量(kg) */
@NotNull(message = "重量(kg)不能为空")
private BigDecimal weight;
/** 体积(m³) */
@NotNull(message = "体积(m³)不能为空")
private BigDecimal volume;
}

12
src/main/java/com/qs/serve/modules/goods/entity/dto/GoodSkuSpecValueDto.java

@ -0,0 +1,12 @@
package com.qs.serve.modules.goods.entity.dto;
/**
* @author YenHex
* @since 2022/10/11
*/
public class GoodSkuSpecValueDto {
Integer sort;
Long specValueId;
}

14
src/main/java/com/qs/serve/modules/goods/mapper/GoodsBrandMapper.java

@ -0,0 +1,14 @@
package com.qs.serve.modules.goods.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.qs.serve.modules.goods.entity.GoodsBrand;
/**
* 品牌 Mapper
* @author YenHex
* @date 2022-10-11
*/
public interface GoodsBrandMapper extends BaseMapper<GoodsBrand> {
}

14
src/main/java/com/qs/serve/modules/goods/mapper/GoodsSeriesMapper.java

@ -0,0 +1,14 @@
package com.qs.serve.modules.goods.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.qs.serve.modules.goods.entity.GoodsSeries;
/**
* 系列 Mapper
* @author YenHex
* @date 2022-10-11
*/
public interface GoodsSeriesMapper extends BaseMapper<GoodsSeries> {
}

14
src/main/java/com/qs/serve/modules/goods/service/GoodsBrandService.java

@ -0,0 +1,14 @@
package com.qs.serve.modules.goods.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.qs.serve.modules.goods.entity.GoodsBrand;
/**
* 品牌 服务接口
* @author YenHex
* @date 2022-10-11
*/
public interface GoodsBrandService extends IService<GoodsBrand> {
GoodsBrand getByCode(String code);
}

2
src/main/java/com/qs/serve/modules/goods/service/GoodsCategoryService.java

@ -10,5 +10,7 @@ import com.qs.serve.modules.goods.entity.GoodsCategory;
*/ */
public interface GoodsCategoryService extends IService<GoodsCategory> { public interface GoodsCategoryService extends IService<GoodsCategory> {
GoodsCategory getByCode(String code);
} }

16
src/main/java/com/qs/serve/modules/goods/service/GoodsSeriesService.java

@ -0,0 +1,16 @@
package com.qs.serve.modules.goods.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.qs.serve.modules.goods.entity.GoodsSeries;
/**
* 系列 服务接口
* @author YenHex
* @date 2022-10-11
*/
public interface GoodsSeriesService extends IService<GoodsSeries> {
GoodsSeries getByCode(String code);
}

2
src/main/java/com/qs/serve/modules/goods/service/GoodsSkuService.java

@ -10,5 +10,7 @@ import com.qs.serve.modules.goods.entity.GoodsSku;
*/ */
public interface GoodsSkuService extends IService<GoodsSku> { public interface GoodsSkuService extends IService<GoodsSku> {
GoodsSku getByCode(String code);
} }

4
src/main/java/com/qs/serve/modules/goods/service/GoodsSkuSpecValueService.java

@ -10,5 +10,9 @@ import com.qs.serve.modules.goods.entity.GoodsSkuSpecValue;
*/ */
public interface GoodsSkuSpecValueService extends IService<GoodsSkuSpecValue> { public interface GoodsSkuSpecValueService extends IService<GoodsSkuSpecValue> {
GoodsSkuSpecValue getByIds(Long skuId,Long specValueId);
void initSkuSpecValue(Long spuId,Long skuId,Long specValueId);
} }

2
src/main/java/com/qs/serve/modules/goods/service/GoodsSpecValueService.java

@ -10,5 +10,7 @@ import com.qs.serve.modules.goods.entity.GoodsSpecValue;
*/ */
public interface GoodsSpecValueService extends IService<GoodsSpecValue> { public interface GoodsSpecValueService extends IService<GoodsSpecValue> {
GoodsSpecValue getBySpec(Long specId,String value);
GoodsSpecValue initSpecValue(Long specId,String value);
} }

6
src/main/java/com/qs/serve/modules/goods/service/GoodsSpuService.java

@ -2,6 +2,8 @@ package com.qs.serve.modules.goods.service;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.qs.serve.modules.goods.entity.GoodsSpu; import com.qs.serve.modules.goods.entity.GoodsSpu;
import com.qs.serve.modules.goods.entity.bo.GoodsSpuBatchTasteBo;
import org.springframework.web.bind.annotation.RequestBody;
/** /**
* spu 服务接口 * spu 服务接口
@ -10,5 +12,9 @@ import com.qs.serve.modules.goods.entity.GoodsSpu;
*/ */
public interface GoodsSpuService extends IService<GoodsSpu> { public interface GoodsSpuService extends IService<GoodsSpu> {
GoodsSpu getByCode(String code);
void saveBatchTasteSpu(GoodsSpuBatchTasteBo batchTasteBo);
} }

30
src/main/java/com/qs/serve/modules/goods/service/impl/GoodsBrandServiceImpl.java

@ -0,0 +1,30 @@
package com.qs.serve.modules.goods.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.qs.serve.modules.goods.entity.GoodsSeries;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import com.qs.serve.modules.goods.entity.GoodsBrand;
import com.qs.serve.modules.goods.service.GoodsBrandService;
import com.qs.serve.modules.goods.mapper.GoodsBrandMapper;
/**
* 品牌 服务实现类
* @author YenHex
* @since 2022-10-11
*/
@Slf4j
@Service
@AllArgsConstructor
public class GoodsBrandServiceImpl extends ServiceImpl<GoodsBrandMapper,GoodsBrand> implements GoodsBrandService {
@Override
public GoodsBrand getByCode(String code) {
LambdaQueryWrapper<GoodsBrand> lqw = new LambdaQueryWrapper<>();
lqw.eq(GoodsBrand::getCode,code);
return getOne(lqw,false);
}
}

8
src/main/java/com/qs/serve/modules/goods/service/impl/GoodsCategoryServiceImpl.java

@ -1,5 +1,6 @@
package com.qs.serve.modules.goods.service.impl; package com.qs.serve.modules.goods.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -18,5 +19,12 @@ import com.qs.serve.modules.goods.mapper.GoodsCategoryMapper;
@AllArgsConstructor @AllArgsConstructor
public class GoodsCategoryServiceImpl extends ServiceImpl<GoodsCategoryMapper,GoodsCategory> implements GoodsCategoryService { public class GoodsCategoryServiceImpl extends ServiceImpl<GoodsCategoryMapper,GoodsCategory> implements GoodsCategoryService {
@Override
public GoodsCategory getByCode(String code) {
LambdaQueryWrapper<GoodsCategory> lqw = new LambdaQueryWrapper<>();
lqw.eq(GoodsCategory::getCode,code);
return this.getOne(lqw,false);
}
} }

30
src/main/java/com/qs/serve/modules/goods/service/impl/GoodsSeriesServiceImpl.java

@ -0,0 +1,30 @@
package com.qs.serve.modules.goods.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.qs.serve.modules.goods.entity.GoodsSpu;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import com.qs.serve.modules.goods.entity.GoodsSeries;
import com.qs.serve.modules.goods.service.GoodsSeriesService;
import com.qs.serve.modules.goods.mapper.GoodsSeriesMapper;
/**
* 系列 服务实现类
* @author YenHex
* @since 2022-10-11
*/
@Slf4j
@Service
@AllArgsConstructor
public class GoodsSeriesServiceImpl extends ServiceImpl<GoodsSeriesMapper,GoodsSeries> implements GoodsSeriesService {
@Override
public GoodsSeries getByCode(String code) {
LambdaQueryWrapper<GoodsSeries> lqw = new LambdaQueryWrapper<>();
lqw.eq(GoodsSeries::getCode,code);
return getOne(lqw,false);
}
}

8
src/main/java/com/qs/serve/modules/goods/service/impl/GoodsSkuServiceImpl.java

@ -1,5 +1,6 @@
package com.qs.serve.modules.goods.service.impl; package com.qs.serve.modules.goods.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -18,5 +19,12 @@ import com.qs.serve.modules.goods.mapper.GoodsSkuMapper;
@AllArgsConstructor @AllArgsConstructor
public class GoodsSkuServiceImpl extends ServiceImpl<GoodsSkuMapper,GoodsSku> implements GoodsSkuService { public class GoodsSkuServiceImpl extends ServiceImpl<GoodsSkuMapper,GoodsSku> implements GoodsSkuService {
@Override
public GoodsSku getByCode(String code) {
LambdaQueryWrapper<GoodsSku> lqw = new LambdaQueryWrapper<>();
lqw.eq(GoodsSku::getSkuCode,code);
return getOne(lqw,false);
}
} }

21
src/main/java/com/qs/serve/modules/goods/service/impl/GoodsSkuSpecValueServiceImpl.java

@ -1,5 +1,6 @@
package com.qs.serve.modules.goods.service.impl; package com.qs.serve.modules.goods.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -18,5 +19,25 @@ import com.qs.serve.modules.goods.mapper.GoodsSkuSpecValueMapper;
@AllArgsConstructor @AllArgsConstructor
public class GoodsSkuSpecValueServiceImpl extends ServiceImpl<GoodsSkuSpecValueMapper,GoodsSkuSpecValue> implements GoodsSkuSpecValueService { public class GoodsSkuSpecValueServiceImpl extends ServiceImpl<GoodsSkuSpecValueMapper,GoodsSkuSpecValue> implements GoodsSkuSpecValueService {
@Override
public GoodsSkuSpecValue getByIds(Long skuId, Long specValueId) {
LambdaQueryWrapper<GoodsSkuSpecValue> lqw = new LambdaQueryWrapper<>();
lqw.eq(GoodsSkuSpecValue::getSkuId,skuId);
lqw.eq(GoodsSkuSpecValue::getSpecValueId,specValueId);
return getOne(lqw,false);
}
@Override
public void initSkuSpecValue(Long spuId, Long skuId, Long specValueId) {
GoodsSkuSpecValue skuSpecValue = this.getByIds(skuId,specValueId);
if(skuSpecValue==null){
skuSpecValue = new GoodsSkuSpecValue();
skuSpecValue.setSkuId(skuId);
skuSpecValue.setSpecValueId(specValueId);
skuSpecValue.setSpuId(spuId);
skuSpecValue.setSort(0);
this.save(skuSpecValue);
}
}
} }

20
src/main/java/com/qs/serve/modules/goods/service/impl/GoodsSpecValueServiceImpl.java

@ -1,5 +1,6 @@
package com.qs.serve.modules.goods.service.impl; package com.qs.serve.modules.goods.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -18,5 +19,24 @@ import com.qs.serve.modules.goods.mapper.GoodsSpecValueMapper;
@AllArgsConstructor @AllArgsConstructor
public class GoodsSpecValueServiceImpl extends ServiceImpl<GoodsSpecValueMapper,GoodsSpecValue> implements GoodsSpecValueService { public class GoodsSpecValueServiceImpl extends ServiceImpl<GoodsSpecValueMapper,GoodsSpecValue> implements GoodsSpecValueService {
@Override
public GoodsSpecValue getBySpec(Long specId, String value) {
LambdaQueryWrapper<GoodsSpecValue> lqw = new LambdaQueryWrapper<>();
lqw.eq(GoodsSpecValue::getSpecId,specId);
lqw.eq(GoodsSpecValue::getName,value);
return getOne(lqw,false);
}
@Override
public GoodsSpecValue initSpecValue(Long specId, String value) {
GoodsSpecValue tasteValue = this.getBySpec(specId,value);
if(tasteValue==null){
tasteValue = new GoodsSpecValue();
tasteValue.setSpecId(1L);
tasteValue.setName(value);
this.save(tasteValue);
}
return tasteValue;
}
} }

108
src/main/java/com/qs/serve/modules/goods/service/impl/GoodsSpuServiceImpl.java

@ -1,13 +1,21 @@
package com.qs.serve.modules.goods.service.impl; package com.qs.serve.modules.goods.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.qs.serve.common.util.CopierUtil;
import com.qs.serve.common.util.ValidateTools;
import com.qs.serve.modules.goods.entity.*;
import com.qs.serve.modules.goods.entity.bo.GoodsSpuBatchTasteBo;
import com.qs.serve.modules.goods.entity.bo.GoodsSpuTasteBo;
import com.qs.serve.modules.goods.service.*;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import com.qs.serve.modules.goods.entity.GoodsSpu;
import com.qs.serve.modules.goods.service.GoodsSpuService;
import com.qs.serve.modules.goods.mapper.GoodsSpuMapper; import com.qs.serve.modules.goods.mapper.GoodsSpuMapper;
import java.util.ArrayList;
import java.util.List;
/** /**
* spu 服务实现类 * spu 服务实现类
* @author YenHex * @author YenHex
@ -18,5 +26,101 @@ import com.qs.serve.modules.goods.mapper.GoodsSpuMapper;
@AllArgsConstructor @AllArgsConstructor
public class GoodsSpuServiceImpl extends ServiceImpl<GoodsSpuMapper,GoodsSpu> implements GoodsSpuService { public class GoodsSpuServiceImpl extends ServiceImpl<GoodsSpuMapper,GoodsSpu> implements GoodsSpuService {
private GoodsSeriesService goodsSeriesService;
private GoodsBrandService goodsBrandService;
private GoodsSkuService goodsSkuService;
private GoodsSpuSpecService goodsSpuSpecService;
private GoodsSpecValueService goodsSpecValueService;
private GoodsSkuSpecValueService goodsSkuSpecValueService;
private GoodsCategoryService goodsCategoryService;
@Override
public GoodsSpu getByCode(String code) {
LambdaQueryWrapper<GoodsSpu> lqw = new LambdaQueryWrapper<>();
lqw.eq(GoodsSpu::getSpuCode,code);
return getOne(lqw,false);
}
@Override
public void saveBatchTasteSpu(GoodsSpuBatchTasteBo batchTasteBo) {
for (GoodsSpuTasteBo tasteProduct : batchTasteBo.getTasteProducts()) {
ValidateTools.valid(tasteProduct);
this.editTasteBo(tasteProduct);
}
}
private void editTasteBo(GoodsSpuTasteBo tasteProduct){
GoodsSpu spu = this.getByCode(tasteProduct.getProductCode());
if(spu==null){
spu = new GoodsSpu();
}
spu.setName(tasteProduct.getName());
spu.setSpuCode(tasteProduct.getProductCode());
spu.setPicUrls(tasteProduct.getPicUrls());
//设置分类
GoodsCategory category = goodsCategoryService.getByCode(tasteProduct.getCategoryCode());
if(!category.getParentId().equals("0")){
GoodsCategory categorySecond = goodsCategoryService.getById(category.getParentId());
if(!categorySecond.getParentId().equals("0")){
spu.setCategoryFirst(categorySecond.getParentId());
spu.setCategorySecond(categorySecond.getId()+"");
spu.setCategoryThird(category.getId()+"");
}else {
spu.setCategoryFirst(categorySecond.getId()+"");
spu.setCategorySecond(category.getId()+"");
}
}else {
spu.setCategoryFirst(category.getId()+"");
}
//设置品牌
GoodsBrand goodsBrand = goodsBrandService.getByCode(tasteProduct.getBrandCode());
if(goodsBrand!=null){
spu.setBrandId(goodsBrand.getId());
}
//设置系列
GoodsSeries goodsSeries = goodsSeriesService.getByCode(tasteProduct.getSeriesCode());
if(goodsSeries!=null){
spu.setSeriesId(goodsSeries.getId());
}
spu.setSpecType("1");
if(spu.getId()==null){
this.save(spu);
//保存spu与规格关联
List<GoodsSpuSpec> spuSpecList = new ArrayList<>();
GoodsSpuSpec spuSpec = new GoodsSpuSpec();
spuSpec.setSpuId(spu.getId());
spuSpec.setSpecId(1L);
spuSpec.setSort(1);
spuSpecList.add(spuSpec);
GoodsSpuSpec spuSpec2 = new GoodsSpuSpec();
spuSpec2.setSpuId(spu.getId());
spuSpec2.setSpecId(2L);
spuSpec2.setSort(0);
spuSpecList.add(spuSpec2);
goodsSpuSpecService.saveBatch(spuSpecList);
}else {
this.updateById(spu);
}
//保存SKU
GoodsSku goodsSku = goodsSkuService.getByCode(tasteProduct.getInvCode());
if(goodsSku==null){
goodsSku = CopierUtil.copy(tasteProduct,new GoodsSku());
}
goodsSku.setSkuCode(tasteProduct.getInvCode());
goodsSku.setSpuId(spu.getId());
goodsSku.setPicUrl(tasteProduct.getInvPicUrl());
if(goodsSku.getId()==null){
goodsSkuService.save(goodsSku);
}else {
goodsSkuService.updateById(goodsSku);
}
//保存规格值
GoodsSpecValue tasteValue = goodsSpecValueService.initSpecValue(1L,tasteProduct.getTasteValue());
GoodsSpecValue packValue = goodsSpecValueService.initSpecValue(2L,tasteProduct.getPackValue());
//保存sku与规格值关联
goodsSkuSpecValueService.initSkuSpecValue(spu.getId(), goodsSku.getId(),tasteValue.getId());
goodsSkuSpecValueService.initSkuSpecValue(spu.getId(), goodsSku.getId(),packValue.getId());
}
} }

31
src/main/resources/application-dev.yml

@ -1,3 +1,19 @@
#项目配置
project:
upload:
#上传映射地址
proxy-url: http://183.234.29.228:6021/
#物理存储地址
logical-path: D:\\WebMapPath\\
#腾讯云配置
tencent:
sms:
secret-id: AKIDR3A5mVkSaXFUT3TABanPxc2MtkMu45wb
secret-key: iLkjeKzHwegQ4eE55xX9byXmBLxgwypV
sdkAppId: 1400174031
signName: 柒胜软件
templateId: 341678
#服务配置 #服务配置
server: server:
port: 7400 port: 7400
@ -11,7 +27,7 @@ spring:
#username: sa #username: sa
#password: 123456Aa #password: 123456Aa
driver-class-name: com.mysql.cj.jdbc.Driver driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://192.168.0.9:3333/qs-base-questionnaire?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true url: jdbc:mysql://192.168.0.9:3336/qs-base-questionnaire?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
username: root username: root
password: 123456 password: 123456
redis: redis:
@ -22,16 +38,3 @@ spring:
#工作流配置 #工作流配置
flowable: flowable:
database-schema-update: true database-schema-update: true
project:
upload:
#上传映射地址
proxy-url: http://183.234.29.228:6021/
#物理存储地址
logical-path: D:\\WebMapPath\\
tencent:
sms:
secret-id: AKIDR3A5mVkSaXFUT3TABanPxc2MtkMu45wb
secret-key: iLkjeKzHwegQ4eE55xX9byXmBLxgwypV
sdkAppId: 1400174031
signName: 柒胜软件
templateId: 341678

Loading…
Cancel
Save