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