diff --git a/src/main/java/com/qs/serve/common/model/enums/SystemModule.java b/src/main/java/com/qs/serve/common/model/enums/SystemModule.java
index 4b753330..1950ace7 100644
--- a/src/main/java/com/qs/serve/common/model/enums/SystemModule.java
+++ b/src/main/java/com/qs/serve/common/model/enums/SystemModule.java
@@ -12,6 +12,7 @@ import lombok.Getter;
public enum SystemModule {
QUESTION("qms","问卷"),
+ BASE("bms","基础档案"),
GOODS("goods","商品"),
SYSTEM("sys","系统"),
UMS("ums","手机用户");
diff --git a/src/main/java/com/qs/serve/common/util/ValidateTools.java b/src/main/java/com/qs/serve/common/util/ValidateTools.java
new file mode 100644
index 00000000..9f53dedd
--- /dev/null
+++ b/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方法中校验工具类
+ *
+ * 只要在实体中加上相应的validate的相关注解即可
+ *
+ *
+ * @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 实体泛型
+ */
+ public static String validStr(T t) {
+ // 构造返回信息
+ StringBuilder validMessage = new StringBuilder();
+ // 检查实体T
+ Set> set = VALIDATOR.validate(t);
+ // 循环set,获取检查结果
+ for (ConstraintViolation vo : set) {
+ validMessage.append(vo.getMessage()).append(";");
+ }
+ return validMessage.toString();
+ }
+ /**
+ * 校验实体抛出异常
+ *
+ * @param t 实体
+ * @param 实体泛型
+ */
+ public static void valid(T t) {
+ String validStr = validStr(t);
+ // 抛出业务异常
+ if (StringUtils.isNotBlank(validStr)) {
+ throw new BusinessException(validStr,500);
+ }
+ }
+ /**
+ * 校验集合抛出异常
+ *
+ * @param list 列表
+ * @param 实体泛型
+ */
+ public static void valid(List 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);
+ }
+ }
+}
diff --git a/src/main/java/com/qs/serve/modules/bms/controller/BmsRegionController.java b/src/main/java/com/qs/serve/modules/bms/controller/BmsRegionController.java
new file mode 100644
index 00000000..d2b03cab
--- /dev/null
+++ b/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> getPage(BmsRegion param){
+ PageUtil.startPage();
+ LambdaQueryWrapper regionWrapper = new LambdaQueryWrapper<>(param);
+ List list = bmsRegionService.list(regionWrapper);
+ return R.byPageHelperList(list);
+ }
+
+ /**
+ * 树查询
+ * @param param
+ * @return
+ */
+ @GetMapping("/tree")
+ @PreAuthorize("hasRole('bms:region:query')")
+ public R> 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 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);
+ }
+
+}
+
diff --git a/src/main/java/com/qs/serve/modules/bms/controller/BmsSupplierController.java b/src/main/java/com/qs/serve/modules/bms/controller/BmsSupplierController.java
new file mode 100644
index 00000000..7ca6325c
--- /dev/null
+++ b/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> getPage(BmsSupplier param){
+ PageUtil.startPage();
+ LambdaQueryWrapper supplierWrapper = new LambdaQueryWrapper<>(param);
+ List 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 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();
+ }
+
+}
+
diff --git a/src/main/java/com/qs/serve/modules/bms/entity/BmsRegion.java b/src/main/java/com/qs/serve/modules/bms/entity/BmsRegion.java
new file mode 100644
index 00000000..9a73c182
--- /dev/null
+++ b/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;
+
+}
+
diff --git a/src/main/java/com/qs/serve/modules/bms/entity/BmsSupplier.java b/src/main/java/com/qs/serve/modules/bms/entity/BmsSupplier.java
new file mode 100644
index 00000000..31aed9da
--- /dev/null
+++ b/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;
+
+}
+
diff --git a/src/main/java/com/qs/serve/modules/bms/entity/vo/BmsRegionBatchBo.java b/src/main/java/com/qs/serve/modules/bms/entity/vo/BmsRegionBatchBo.java
new file mode 100644
index 00000000..a9e57794
--- /dev/null
+++ b/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 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;
+ }
+
+}
diff --git a/src/main/java/com/qs/serve/modules/bms/entity/vo/BmsRegionTreeVo.java b/src/main/java/com/qs/serve/modules/bms/entity/vo/BmsRegionTreeVo.java
new file mode 100644
index 00000000..af3f4ef2
--- /dev/null
+++ b/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;
+
+}
diff --git a/src/main/java/com/qs/serve/modules/bms/mapper/BmsRegionMapper.java b/src/main/java/com/qs/serve/modules/bms/mapper/BmsRegionMapper.java
new file mode 100644
index 00000000..bb62c17d
--- /dev/null
+++ b/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 {
+
+}
+
diff --git a/src/main/java/com/qs/serve/modules/bms/mapper/BmsSupplierMapper.java b/src/main/java/com/qs/serve/modules/bms/mapper/BmsSupplierMapper.java
new file mode 100644
index 00000000..d3af0e7e
--- /dev/null
+++ b/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 {
+
+}
+
diff --git a/src/main/java/com/qs/serve/modules/bms/service/BmsRegionService.java b/src/main/java/com/qs/serve/modules/bms/service/BmsRegionService.java
new file mode 100644
index 00000000..4aeb4b24
--- /dev/null
+++ b/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 {
+
+ List getTree(BmsRegion param);
+
+ void flushLevel(BmsRegion param);
+
+ void flushAllLevel();
+
+ void updateLevel(String id,Integer level);
+
+}
+
diff --git a/src/main/java/com/qs/serve/modules/bms/service/BmsSupplierService.java b/src/main/java/com/qs/serve/modules/bms/service/BmsSupplierService.java
new file mode 100644
index 00000000..b11ea221
--- /dev/null
+++ b/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 {
+
+}
+
diff --git a/src/main/java/com/qs/serve/modules/bms/service/impl/BmsRegionServiceImpl.java b/src/main/java/com/qs/serve/modules/bms/service/impl/BmsRegionServiceImpl.java
new file mode 100644
index 00000000..432d663b
--- /dev/null
+++ b/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 implements BmsRegionService {
+
+ @Override
+ public List getTree(BmsRegion param) {
+ LambdaQueryWrapper regionWrapper = new LambdaQueryWrapper<>(param);
+ List list = this.list(regionWrapper);
+ List 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 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);
+ }
+}
+
diff --git a/src/main/java/com/qs/serve/modules/bms/service/impl/BmsSupplierServiceImpl.java b/src/main/java/com/qs/serve/modules/bms/service/impl/BmsSupplierServiceImpl.java
new file mode 100644
index 00000000..e74dd955
--- /dev/null
+++ b/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 implements BmsSupplierService {
+
+}
+
diff --git a/src/main/java/com/qs/serve/modules/goods/controller/GoodsBrandController.java b/src/main/java/com/qs/serve/modules/goods/controller/GoodsBrandController.java
new file mode 100644
index 00000000..0f3d14f5
--- /dev/null
+++ b/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> getPage(GoodsBrand param){
+ PageUtil.startPage();
+ LambdaQueryWrapper brandWrapper = new LambdaQueryWrapper<>(param);
+ List 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 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);
+ }
+
+}
+
diff --git a/src/main/java/com/qs/serve/modules/goods/controller/GoodsCategoryController.java b/src/main/java/com/qs/serve/modules/goods/controller/GoodsCategoryController.java
index f09cd424..364b291f 100644
--- a/src/main/java/com/qs/serve/modules/goods/controller/GoodsCategoryController.java
+++ b/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.enums.BizType;
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.TreeUtil;
+import com.qs.serve.modules.bms.entity.vo.BmsRegionTreeVo;
+import com.qs.serve.modules.goods.entity.bo.GoodsCategoryTreeVo;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.security.access.prepost.PreAuthorize;
@@ -17,9 +21,10 @@ import com.qs.serve.modules.goods.service.GoodsCategoryService;
import javax.validation.Valid;
import java.util.List;
+import java.util.stream.Collectors;
/**
- * 商品 分类 后台接口
+ * 商品 分类
* @author YenHex
* @since 2022-10-09
*/
@@ -45,6 +50,27 @@ public class GoodsCategoryController {
return R.byPageHelperList(list);
}
+ /**
+ * 树查询
+ * @param param
+ * @return
+ */
+ @GetMapping("/tree")
+ @PreAuthorize("hasRole('goods:category:query')")
+ public R> getTree(GoodsCategory param){
+ LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(param);
+ List list = goodsCategoryService.list(lqw);
+ List 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查询
* @param id
diff --git a/src/main/java/com/qs/serve/modules/goods/controller/GoodsSeriesController.java b/src/main/java/com/qs/serve/modules/goods/controller/GoodsSeriesController.java
new file mode 100644
index 00000000..4765b380
--- /dev/null
+++ b/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> getPage(GoodsSeries param){
+ PageUtil.startPage();
+ LambdaQueryWrapper seriesWrapper = new LambdaQueryWrapper<>(param);
+ List 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 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);
+ }
+
+}
+
diff --git a/src/main/java/com/qs/serve/modules/goods/controller/GoodsSkuController.java b/src/main/java/com/qs/serve/modules/goods/controller/GoodsSkuController.java
index cb3ce39b..1966286b 100644
--- a/src/main/java/com/qs/serve/modules/goods/controller/GoodsSkuController.java
+++ b/src/main/java/com/qs/serve/modules/goods/controller/GoodsSkuController.java
@@ -19,14 +19,14 @@ import javax.validation.Valid;
import java.util.List;
/**
- * 商品 sku 后台接口
+ * 商品 sku
* @author YenHex
* @since 2022-10-09
*/
-@Slf4j
-@AllArgsConstructor
-@RestController
-@RequestMapping("goods/sku")
+//@Slf4j
+//@AllArgsConstructor
+//@RestController
+//@RequestMapping("goods/sku")
public class GoodsSkuController {
private GoodsSkuService goodsSkuService;
diff --git a/src/main/java/com/qs/serve/modules/goods/controller/GoodsSkuSpecValueController.java b/src/main/java/com/qs/serve/modules/goods/controller/GoodsSkuSpecValueController.java
index 06432242..1c3b6913 100644
--- a/src/main/java/com/qs/serve/modules/goods/controller/GoodsSkuSpecValueController.java
+++ b/src/main/java/com/qs/serve/modules/goods/controller/GoodsSkuSpecValueController.java
@@ -19,14 +19,14 @@ import javax.validation.Valid;
import java.util.List;
/**
- * 商品 sku规格值 后台接口
+ * 商品 sku规格值
* @author YenHex
* @since 2022-10-09
*/
-@Slf4j
-@AllArgsConstructor
-@RestController
-@RequestMapping("goods/skuSpecValue")
+//@Slf4j
+//@AllArgsConstructor
+//@RestController
+//@RequestMapping("goods/skuSpecValue")
public class GoodsSkuSpecValueController {
private GoodsSkuSpecValueService goodsSkuSpecValueService;
diff --git a/src/main/java/com/qs/serve/modules/goods/controller/GoodsSpecController.java b/src/main/java/com/qs/serve/modules/goods/controller/GoodsSpecController.java
index efa91284..1277fcac 100644
--- a/src/main/java/com/qs/serve/modules/goods/controller/GoodsSpecController.java
+++ b/src/main/java/com/qs/serve/modules/goods/controller/GoodsSpecController.java
@@ -19,14 +19,14 @@ import javax.validation.Valid;
import java.util.List;
/**
- * 商品 规格 后台接口
+ * 商品 规格
* @author YenHex
* @since 2022-10-09
*/
-@Slf4j
-@AllArgsConstructor
-@RestController
-@RequestMapping("goods/spec")
+//@Slf4j
+//@AllArgsConstructor
+//@RestController
+//@RequestMapping("goods/spec")
public class GoodsSpecController {
private GoodsSpecService goodsSpecService;
diff --git a/src/main/java/com/qs/serve/modules/goods/controller/GoodsSpecValueController.java b/src/main/java/com/qs/serve/modules/goods/controller/GoodsSpecValueController.java
index eb7ff548..3244335c 100644
--- a/src/main/java/com/qs/serve/modules/goods/controller/GoodsSpecValueController.java
+++ b/src/main/java/com/qs/serve/modules/goods/controller/GoodsSpecValueController.java
@@ -19,14 +19,14 @@ import javax.validation.Valid;
import java.util.List;
/**
- * 商品 规格值 后台接口
+ * 商品 规格值
* @author YenHex
* @since 2022-10-09
*/
-@Slf4j
-@AllArgsConstructor
-@RestController
-@RequestMapping("goods/specValue")
+//@Slf4j
+//@AllArgsConstructor
+//@RestController
+//@RequestMapping("goods/specValue")
public class GoodsSpecValueController {
private GoodsSpecValueService goodsSpecValueService;
diff --git a/src/main/java/com/qs/serve/modules/goods/controller/GoodsSpuController.java b/src/main/java/com/qs/serve/modules/goods/controller/GoodsSpuController.java
index 896aea12..645059d4 100644
--- a/src/main/java/com/qs/serve/modules/goods/controller/GoodsSpuController.java
+++ b/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.SystemModule;
import com.qs.serve.common.util.PageUtil;
+import com.qs.serve.modules.goods.entity.bo.GoodsSpuBatchTasteBo;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.security.access.prepost.PreAuthorize;
@@ -19,7 +20,7 @@ import javax.validation.Valid;
import java.util.List;
/**
- * 商品 spu 后台接口
+ * 商品 spu
* @author YenHex
* @since 2022-10-09
*/
@@ -58,8 +59,6 @@ public class GoodsSpuController {
return R.ok(goodsSpu);
}
-
-
/**
* 根据ID更新
* @param param
@@ -99,5 +98,18 @@ public class GoodsSpuController {
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();
+ }
+
}
diff --git a/src/main/java/com/qs/serve/modules/goods/controller/GoodsSpuSpecController.java b/src/main/java/com/qs/serve/modules/goods/controller/GoodsSpuSpecController.java
index f52026d5..0271d7ed 100644
--- a/src/main/java/com/qs/serve/modules/goods/controller/GoodsSpuSpecController.java
+++ b/src/main/java/com/qs/serve/modules/goods/controller/GoodsSpuSpecController.java
@@ -19,14 +19,14 @@ import javax.validation.Valid;
import java.util.List;
/**
- * 商品 spu规格 后台接口
+ * 商品 spu规格
* @author YenHex
* @since 2022-10-09
*/
-@Slf4j
-@AllArgsConstructor
-@RestController
-@RequestMapping("goods/spuSpec")
+//@Slf4j
+//@AllArgsConstructor
+//@RestController
+//@RequestMapping("goods/spuSpec")
public class GoodsSpuSpecController {
private GoodsSpuSpecService goodsSpuSpecService;
diff --git a/src/main/java/com/qs/serve/modules/goods/entity/GoodsBrand.java b/src/main/java/com/qs/serve/modules/goods/entity/GoodsBrand.java
new file mode 100644
index 00000000..b61c5f68
--- /dev/null
+++ b/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;
+
+}
+
diff --git a/src/main/java/com/qs/serve/modules/goods/entity/GoodsCategory.java b/src/main/java/com/qs/serve/modules/goods/entity/GoodsCategory.java
index c5d237ae..f91da197 100644
--- a/src/main/java/com/qs/serve/modules/goods/entity/GoodsCategory.java
+++ b/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字")
private String enable;
+ @NotBlank(message = "编码不能为空")
+ private String code;
+
/** 父分类编号 */
@Length(max = 32,message = "父分类编号长度不能超过32字")
private String parentId;
diff --git a/src/main/java/com/qs/serve/modules/goods/entity/GoodsSeries.java b/src/main/java/com/qs/serve/modules/goods/entity/GoodsSeries.java
new file mode 100644
index 00000000..b78efacf
--- /dev/null
+++ b/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;
+
+}
+
diff --git a/src/main/java/com/qs/serve/modules/goods/entity/GoodsSpu.java b/src/main/java/com/qs/serve/modules/goods/entity/GoodsSpu.java
index 3ce72692..01b59da6 100644
--- a/src/main/java/com/qs/serve/modules/goods/entity/GoodsSpu.java
+++ b/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.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
+import com.qs.serve.common.framework.mybatis.handler.meta.SplitStringTypeHandler;
import lombok.Data;
+import org.apache.ibatis.type.JdbcType;
import org.hibernate.validator.constraints.Length;
import org.springframework.format.annotation.DateTimeFormat;
@@ -20,7 +22,7 @@ import javax.validation.constraints.NotBlank;
* @since 2022-10-09
*/
@Data
-@TableName("goods_spu")
+@TableName(value = "goods_spu",autoResultMap = true)
public class GoodsSpu implements Serializable {
private static final long serialVersionUID = 1L;
@@ -39,20 +41,23 @@ public class GoodsSpu implements Serializable {
@Length(max = 200,message = "商品名字长度不能超过200字")
private String name;
+ private Long brandId;
+
+ private Long seriesId;
+
/** 一级分类ID */
@NotNull(message = "一级分类ID不能为空")
- private Long categoryFirst;
+ private String categoryFirst;
/** 二级分类ID */
- private Long categorySecond;
+ private String categorySecond;
/** 三级分类ID */
- private Long categoryThird;
+ private String categoryThird;
/** 商品图片 */
- @NotBlank(message = "商品图片不能为空")
- @Length(max = 1024,message = "商品图片长度不能超过1024字")
- private String picUrls;
+ @TableField(typeHandler = SplitStringTypeHandler.class,jdbcType= JdbcType.VARCHAR)
+ private String[] picUrls;
/** 是否上架(1是 0否) */
@NotBlank(message = "是否上架(1是 0否)不能为空")
diff --git a/src/main/java/com/qs/serve/modules/goods/entity/bo/GoodSkuInfoVo.java b/src/main/java/com/qs/serve/modules/goods/entity/bo/GoodSkuInfoVo.java
new file mode 100644
index 00000000..1cdfc86f
--- /dev/null
+++ b/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 skuList;
+
+
+
+ //规格列表
+ public static class SpecInfo{
+ Integer sort;
+ String specName;
+ List specValues;
+ }
+
+ public static class SpecValue{
+ String specValueId;
+ String specValue;
+ }
+
+ public static class SkuVo{
+ //....
+
+ List skuSpecValueInfos;
+ }
+
+ public static class SkuComboValue{
+
+ }
+
+}
diff --git a/src/main/java/com/qs/serve/modules/goods/entity/bo/GoodsCategoryTreeVo.java b/src/main/java/com/qs/serve/modules/goods/entity/bo/GoodsCategoryTreeVo.java
new file mode 100644
index 00000000..56cb64fc
--- /dev/null
+++ b/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;
+
+}
diff --git a/src/main/java/com/qs/serve/modules/goods/entity/bo/GoodsSpuBatchTasteBo.java b/src/main/java/com/qs/serve/modules/goods/entity/bo/GoodsSpuBatchTasteBo.java
new file mode 100644
index 00000000..9208a098
--- /dev/null
+++ b/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 tasteProducts;
+
+}
diff --git a/src/main/java/com/qs/serve/modules/goods/entity/bo/GoodsSpuTasteBo.java b/src/main/java/com/qs/serve/modules/goods/entity/bo/GoodsSpuTasteBo.java
new file mode 100644
index 00000000..0c8ff7de
--- /dev/null
+++ b/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;
+
+}
diff --git a/src/main/java/com/qs/serve/modules/goods/entity/dto/GoodSkuSpecValueDto.java b/src/main/java/com/qs/serve/modules/goods/entity/dto/GoodSkuSpecValueDto.java
new file mode 100644
index 00000000..a0446bc9
--- /dev/null
+++ b/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;
+
+}
diff --git a/src/main/java/com/qs/serve/modules/goods/mapper/GoodsBrandMapper.java b/src/main/java/com/qs/serve/modules/goods/mapper/GoodsBrandMapper.java
new file mode 100644
index 00000000..4bce7bf7
--- /dev/null
+++ b/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 {
+
+}
+
diff --git a/src/main/java/com/qs/serve/modules/goods/mapper/GoodsSeriesMapper.java b/src/main/java/com/qs/serve/modules/goods/mapper/GoodsSeriesMapper.java
new file mode 100644
index 00000000..392ce9f0
--- /dev/null
+++ b/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 {
+
+}
+
diff --git a/src/main/java/com/qs/serve/modules/goods/service/GoodsBrandService.java b/src/main/java/com/qs/serve/modules/goods/service/GoodsBrandService.java
new file mode 100644
index 00000000..f29939b6
--- /dev/null
+++ b/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 getByCode(String code);
+}
+
diff --git a/src/main/java/com/qs/serve/modules/goods/service/GoodsCategoryService.java b/src/main/java/com/qs/serve/modules/goods/service/GoodsCategoryService.java
index 7de86236..b9a7e995 100644
--- a/src/main/java/com/qs/serve/modules/goods/service/GoodsCategoryService.java
+++ b/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 getByCode(String code);
+
}
diff --git a/src/main/java/com/qs/serve/modules/goods/service/GoodsSeriesService.java b/src/main/java/com/qs/serve/modules/goods/service/GoodsSeriesService.java
new file mode 100644
index 00000000..2ba8164b
--- /dev/null
+++ b/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 getByCode(String code);
+
+}
+
diff --git a/src/main/java/com/qs/serve/modules/goods/service/GoodsSkuService.java b/src/main/java/com/qs/serve/modules/goods/service/GoodsSkuService.java
index d2f2eaba..8cdc163a 100644
--- a/src/main/java/com/qs/serve/modules/goods/service/GoodsSkuService.java
+++ b/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 getByCode(String code);
+
}
diff --git a/src/main/java/com/qs/serve/modules/goods/service/GoodsSkuSpecValueService.java b/src/main/java/com/qs/serve/modules/goods/service/GoodsSkuSpecValueService.java
index ac4211ba..8ae5a058 100644
--- a/src/main/java/com/qs/serve/modules/goods/service/GoodsSkuSpecValueService.java
+++ b/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 getByIds(Long skuId,Long specValueId);
+
+ void initSkuSpecValue(Long spuId,Long skuId,Long specValueId);
+
}
diff --git a/src/main/java/com/qs/serve/modules/goods/service/GoodsSpecValueService.java b/src/main/java/com/qs/serve/modules/goods/service/GoodsSpecValueService.java
index 83a7e589..1fdb530e 100644
--- a/src/main/java/com/qs/serve/modules/goods/service/GoodsSpecValueService.java
+++ b/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 getBySpec(Long specId,String value);
+ GoodsSpecValue initSpecValue(Long specId,String value);
}
diff --git a/src/main/java/com/qs/serve/modules/goods/service/GoodsSpuService.java b/src/main/java/com/qs/serve/modules/goods/service/GoodsSpuService.java
index e19dd148..b5e2ff58 100644
--- a/src/main/java/com/qs/serve/modules/goods/service/GoodsSpuService.java
+++ b/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.qs.serve.modules.goods.entity.GoodsSpu;
+import com.qs.serve.modules.goods.entity.bo.GoodsSpuBatchTasteBo;
+import org.springframework.web.bind.annotation.RequestBody;
/**
* spu 服务接口
@@ -10,5 +12,9 @@ import com.qs.serve.modules.goods.entity.GoodsSpu;
*/
public interface GoodsSpuService extends IService {
+ GoodsSpu getByCode(String code);
+
+ void saveBatchTasteSpu(GoodsSpuBatchTasteBo batchTasteBo);
+
}
diff --git a/src/main/java/com/qs/serve/modules/goods/service/impl/GoodsBrandServiceImpl.java b/src/main/java/com/qs/serve/modules/goods/service/impl/GoodsBrandServiceImpl.java
new file mode 100644
index 00000000..54f55094
--- /dev/null
+++ b/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 implements GoodsBrandService {
+
+ @Override
+ public GoodsBrand getByCode(String code) {
+ LambdaQueryWrapper lqw = new LambdaQueryWrapper<>();
+ lqw.eq(GoodsBrand::getCode,code);
+ return getOne(lqw,false);
+ }
+}
+
diff --git a/src/main/java/com/qs/serve/modules/goods/service/impl/GoodsCategoryServiceImpl.java b/src/main/java/com/qs/serve/modules/goods/service/impl/GoodsCategoryServiceImpl.java
index 2e098aed..6f195822 100644
--- a/src/main/java/com/qs/serve/modules/goods/service/impl/GoodsCategoryServiceImpl.java
+++ b/src/main/java/com/qs/serve/modules/goods/service/impl/GoodsCategoryServiceImpl.java
@@ -1,5 +1,6 @@
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 lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@@ -18,5 +19,12 @@ import com.qs.serve.modules.goods.mapper.GoodsCategoryMapper;
@AllArgsConstructor
public class GoodsCategoryServiceImpl extends ServiceImpl implements GoodsCategoryService {
+ @Override
+ public GoodsCategory getByCode(String code) {
+ LambdaQueryWrapper lqw = new LambdaQueryWrapper<>();
+ lqw.eq(GoodsCategory::getCode,code);
+ return this.getOne(lqw,false);
+ }
+
}
diff --git a/src/main/java/com/qs/serve/modules/goods/service/impl/GoodsSeriesServiceImpl.java b/src/main/java/com/qs/serve/modules/goods/service/impl/GoodsSeriesServiceImpl.java
new file mode 100644
index 00000000..f18a1fa4
--- /dev/null
+++ b/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 implements GoodsSeriesService {
+
+ @Override
+ public GoodsSeries getByCode(String code) {
+ LambdaQueryWrapper lqw = new LambdaQueryWrapper<>();
+ lqw.eq(GoodsSeries::getCode,code);
+ return getOne(lqw,false);
+ }
+}
+
diff --git a/src/main/java/com/qs/serve/modules/goods/service/impl/GoodsSkuServiceImpl.java b/src/main/java/com/qs/serve/modules/goods/service/impl/GoodsSkuServiceImpl.java
index 303b9e2d..c2dd30f5 100644
--- a/src/main/java/com/qs/serve/modules/goods/service/impl/GoodsSkuServiceImpl.java
+++ b/src/main/java/com/qs/serve/modules/goods/service/impl/GoodsSkuServiceImpl.java
@@ -1,5 +1,6 @@
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 lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@@ -18,5 +19,12 @@ import com.qs.serve.modules.goods.mapper.GoodsSkuMapper;
@AllArgsConstructor
public class GoodsSkuServiceImpl extends ServiceImpl implements GoodsSkuService {
+ @Override
+ public GoodsSku getByCode(String code) {
+ LambdaQueryWrapper lqw = new LambdaQueryWrapper<>();
+ lqw.eq(GoodsSku::getSkuCode,code);
+ return getOne(lqw,false);
+ }
+
}
diff --git a/src/main/java/com/qs/serve/modules/goods/service/impl/GoodsSkuSpecValueServiceImpl.java b/src/main/java/com/qs/serve/modules/goods/service/impl/GoodsSkuSpecValueServiceImpl.java
index 76360bc5..8df6884b 100644
--- a/src/main/java/com/qs/serve/modules/goods/service/impl/GoodsSkuSpecValueServiceImpl.java
+++ b/src/main/java/com/qs/serve/modules/goods/service/impl/GoodsSkuSpecValueServiceImpl.java
@@ -1,5 +1,6 @@
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 lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@@ -18,5 +19,25 @@ import com.qs.serve.modules.goods.mapper.GoodsSkuSpecValueMapper;
@AllArgsConstructor
public class GoodsSkuSpecValueServiceImpl extends ServiceImpl implements GoodsSkuSpecValueService {
+ @Override
+ public GoodsSkuSpecValue getByIds(Long skuId, Long specValueId) {
+ LambdaQueryWrapper 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);
+ }
+ }
}
diff --git a/src/main/java/com/qs/serve/modules/goods/service/impl/GoodsSpecValueServiceImpl.java b/src/main/java/com/qs/serve/modules/goods/service/impl/GoodsSpecValueServiceImpl.java
index d97bcdb6..bd5d7b18 100644
--- a/src/main/java/com/qs/serve/modules/goods/service/impl/GoodsSpecValueServiceImpl.java
+++ b/src/main/java/com/qs/serve/modules/goods/service/impl/GoodsSpecValueServiceImpl.java
@@ -1,5 +1,6 @@
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 lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@@ -18,5 +19,24 @@ import com.qs.serve.modules.goods.mapper.GoodsSpecValueMapper;
@AllArgsConstructor
public class GoodsSpecValueServiceImpl extends ServiceImpl implements GoodsSpecValueService {
+ @Override
+ public GoodsSpecValue getBySpec(Long specId, String value) {
+ LambdaQueryWrapper 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;
+ }
}
diff --git a/src/main/java/com/qs/serve/modules/goods/service/impl/GoodsSpuServiceImpl.java b/src/main/java/com/qs/serve/modules/goods/service/impl/GoodsSpuServiceImpl.java
index 9b3d2abc..283a76cc 100644
--- a/src/main/java/com/qs/serve/modules/goods/service/impl/GoodsSpuServiceImpl.java
+++ b/src/main/java/com/qs/serve/modules/goods/service/impl/GoodsSpuServiceImpl.java
@@ -1,13 +1,21 @@
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.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.extern.slf4j.Slf4j;
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 java.util.ArrayList;
+import java.util.List;
+
/**
* spu 服务实现类
* @author YenHex
@@ -18,5 +26,101 @@ import com.qs.serve.modules.goods.mapper.GoodsSpuMapper;
@AllArgsConstructor
public class GoodsSpuServiceImpl extends ServiceImpl 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 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 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());
+ }
+
}
diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml
index 79aa56a4..850ccb5a 100644
--- a/src/main/resources/application-dev.yml
+++ b/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:
port: 7400
@@ -11,7 +27,7 @@ spring:
#username: sa
#password: 123456Aa
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
password: 123456
redis:
@@ -19,19 +35,6 @@ spring:
host: 127.0.0.1
port: 6379
password:
- #工作流配置
+#工作流配置
flowable:
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