Kaynağa Gözat

商品分类接口开发,字典表接口

linhui.li 2 hafta önce
ebeveyn
işleme
79c7db13be
24 değiştirilmiş dosya ile 735 ekleme ve 9 silme
  1. 1 0
      pom.xml
  2. 107 0
      py-base/src/main/java/com/poyee/common/dict/controller/DictController.java
  3. 54 0
      py-base/src/main/java/com/poyee/common/dict/domain/DictData.java
  4. 47 0
      py-base/src/main/java/com/poyee/common/dict/domain/DictType.java
  5. 37 0
      py-base/src/main/java/com/poyee/common/dict/dto/DictDataDTO.java
  6. 16 0
      py-base/src/main/java/com/poyee/common/dict/mapper/DictDataMapper.java
  7. 16 0
      py-base/src/main/java/com/poyee/common/dict/mapper/DictTypeMapper.java
  8. 28 0
      py-base/src/main/java/com/poyee/common/dict/query/DictQuery.java
  9. 17 0
      py-base/src/main/java/com/poyee/common/dict/service/IDictDataService.java
  10. 14 0
      py-base/src/main/java/com/poyee/common/dict/service/IDictTypeService.java
  11. 78 0
      py-base/src/main/java/com/poyee/common/dict/service/impl/DictDataServiceImpl.java
  12. 65 0
      py-base/src/main/java/com/poyee/common/dict/service/impl/DictTypeService.java
  13. 54 0
      py-goods/src/main/java/com/poyee/controller/SpuCategoryController.java
  14. 3 1
      py-goods/src/main/java/com/poyee/domain/Spu.java
  15. 20 0
      py-goods/src/main/java/com/poyee/domain/SpuCategory.java
  16. 26 0
      py-goods/src/main/java/com/poyee/dto/SpuCategoryDTO.java
  17. 11 0
      py-goods/src/main/java/com/poyee/dto/SpuDTO.java
  18. 24 0
      py-goods/src/main/java/com/poyee/mapper/SpuCategoryMapper.java
  19. 20 0
      py-goods/src/main/java/com/poyee/service/SpuCategoryService.java
  20. 43 0
      py-goods/src/main/java/com/poyee/service/impl/SpuCategoryServiceImpl.java
  21. 46 0
      py-goods/src/main/resources/mapper/SpuCategoryMapper.xml
  22. 1 0
      py-starter/src/main/java/com/poyee/PoyeeDashboardApplication.java
  23. 7 5
      py-starter/src/main/resources/application-dev.yml
  24. 0 3
      py-starter/src/main/resources/application.yml

+ 1 - 0
pom.xml

@@ -55,6 +55,7 @@
                 <artifactId>py-goods</artifactId>
                 <version>${module.version}</version>
             </dependency>
+<!--            订单管理-->
             <dependency>
                 <groupId>com.poyee</groupId>
                 <artifactId>py-order</artifactId>

+ 107 - 0
py-base/src/main/java/com/poyee/common/dict/controller/DictController.java

@@ -0,0 +1,107 @@
+package com.poyee.common.dict.controller;
+
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.poyee.base.controller.BaseController;
+import com.poyee.base.dto.Result;
+import com.poyee.common.dict.domain.DictData;
+import com.poyee.common.dict.domain.DictType;
+import com.poyee.common.dict.query.DictQuery;
+import com.poyee.common.dict.service.IDictDataService;
+import com.poyee.common.dict.service.IDictTypeService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ * 字典表
+ * </p>
+ *
+ * @author poyi
+ * @since 2024-10-22
+ */
+@RestController
+@RequestMapping("/dict")
+@Slf4j
+@Api(tags = "字典表管理")
+public class DictController extends BaseController {
+
+    @Resource
+    private IDictDataService dictDataService;
+    @Resource
+    private IDictTypeService dictTypeService;
+
+
+    @ApiOperation(value = "字典表type列表")
+    @PostMapping("/type/list")
+    public Result listDictType(@RequestBody DictType dictType) {
+        Page<DictType> pageInfo = dictTypeService.page(dictType);
+        return Result.success(pageInfo);
+    }
+
+    @ApiOperation(value = "字典表type新增")
+    @PostMapping("/type/add")
+    public Result addDictType(@RequestBody DictType dictType) {
+        dictTypeService.save(dictType);
+        return Result.success();
+    }
+
+    @ApiOperation(value = "字典表修改,删除即修改状态为0")
+    @PostMapping("/type/update")
+    public Result updateDictType(@RequestBody DictType dictType) {
+        dictTypeService.updateById(dictType);
+        return Result.success();
+    }
+
+
+    @ApiOperation(value = "字典表Data列表")
+    @PostMapping("/data/list")
+
+    public Result listDictData(@RequestBody DictData dictData) {
+        Page<DictData> dictDataPage = new Page<>(dictData.getPageNo(), dictData.getPageSize());
+        Page<DictData> pageInfo = dictDataService.page(dictDataPage);
+        return Result.success(pageInfo);
+    }
+
+    @ApiOperation(value = "字典表Data新增")
+    @PostMapping("/data/add")
+    public Result addDictData(@RequestBody DictData dictData) {
+        dictDataService.save(dictData);
+        dictDataService.delDataCache(dictData.getDictType());
+        return Result.success();
+    }
+
+    @ApiOperation(value = "字典表data修改,删除即修改状态为0")
+    @PostMapping("/data/update")
+    public Result updateDictData(@RequestBody DictData dictData) {
+        dictDataService.updateById(dictData);
+        DictData data = dictDataService.getById(dictData.getId());
+        dictDataService.delDataCache(data.getDictType());
+        return Result.success();
+    }
+
+
+    @ApiOperation(value = "字典表Data查询")
+    @PostMapping("/data/search")
+    public Result getDictDataList(@RequestBody DictQuery dictQuery) {
+        List<DictData> dictDataList = dictDataService.selectDictData(dictQuery.getDictType(), dictQuery.getDictLabel(), dictQuery.getStatus(), dictQuery.isUserCache());
+        return Result.success(dictDataList);
+    }
+
+    @ApiOperation(value = "字典表Data查询,多type,用逗号拼接")
+    @PostMapping("/data/search/types")
+    public Result batchQueryData(@RequestBody DictQuery dictQuery) {
+        Map<String, List<DictData>> typeData = dictDataService.selectByTypes(dictQuery.getDictType());
+        return Result.success(typeData);
+    }
+
+}

+ 54 - 0
py-base/src/main/java/com/poyee/common/dict/domain/DictData.java

@@ -0,0 +1,54 @@
+package com.poyee.common.dict.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.poyee.base.dto.BaseReq;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author poyi
+ * @since 2024-10-22
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+@Accessors(chain = true)
+@TableName("sys_dict_data")
+@ApiModel("字典数据")
+public class DictData extends BaseReq {
+
+
+    @ApiModelProperty(value = "id,修改必传", example = "1")
+    @TableId(type = IdType.AUTO)
+    private Integer id;
+    @ApiModelProperty(value = "type,新增必传,修改不可传", example = "1")
+    private String dictType;
+
+    @ApiModelProperty(value = "子类型,新增必传", example = "1")
+    private String dictLabel;
+
+    @ApiModelProperty(value = "值,新增必传", example = "1")
+
+    private String dictValue;
+    @ApiModelProperty(value = "状态,新增必传,建议默认0,1代表可用", example = "0")
+    private Integer status;
+    @ApiModelProperty(value = "排序值", example = "0")
+    private Integer dictSort;
+    @ApiModelProperty(value = "json配置", example = "")
+    private String propConfig;
+    @ApiModelProperty(value = "备注", example = "")
+    private String remark;
+    @ApiModelProperty(value = "多语言配置")
+    private String translations;
+    private Integer isDefault;
+
+
+}

+ 47 - 0
py-base/src/main/java/com/poyee/common/dict/domain/DictType.java

@@ -0,0 +1,47 @@
+package com.poyee.common.dict.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.poyee.base.dto.BaseReq;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author poyi
+ * @since 2024-10-22
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+@Accessors(chain = true)
+@TableName("sys_dict_type")
+@ApiModel("字典类型")
+public class DictType extends BaseReq {
+
+    @TableId(type = IdType.AUTO)
+    @ApiModelProperty(value = "id,修改必传", example = "1")
+    private Integer id;
+    @ApiModelProperty(value = "type,新增必传,修改不可传", example = "1")
+
+    private String dictType;
+    @ApiModelProperty(value = "名称,新增必传", example = "1")
+    private String dictName;
+    @ApiModelProperty(value = "状态,新增必传,建议默认0,1代表可用", example = "0")
+    private Integer status;
+    @ApiModelProperty(value =  "json配置", example = "")
+    private String propConfig;
+    @ApiModelProperty(value = "备注", example = "")
+    private String remark;
+    @ApiModelProperty(value = "国际化信息", example = "")
+    private String translations;
+
+
+}

+ 37 - 0
py-base/src/main/java/com/poyee/common/dict/dto/DictDataDTO.java

@@ -0,0 +1,37 @@
+package com.poyee.common.dict.dto;
+
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author poyi
+ * @since 2024-10-22
+ */
+@Data
+@Accessors(chain = true)
+public class DictDataDTO implements Serializable {
+
+    @ApiModelProperty(value = "type,新增必传,修改不可传", example = "1")
+    private String dictType;
+    @ApiModelProperty(value = "子类型,新增必传", example = "1")
+    private String dictLabel;
+    @ApiModelProperty(value ="值,新增必传", example = "1")
+    private String dictValue;
+    @ApiModelProperty(value = "状态,新增必传,建议默认0,1代表可用", example = "0")
+    private Integer status;
+    @ApiModelProperty(value = "排序值", example = "0")
+    private Integer dictSort;
+    @ApiModelProperty(value = "json配置", example = "")
+    private String propConfig;
+    @ApiModelProperty(value = "备注", example = "")
+    private String remark;
+
+}

+ 16 - 0
py-base/src/main/java/com/poyee/common/dict/mapper/DictDataMapper.java

@@ -0,0 +1,16 @@
+package com.poyee.common.dict.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.poyee.common.dict.domain.DictData;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author poyi
+ * @since 2024-10-22
+ */
+public interface DictDataMapper extends BaseMapper<DictData> {
+
+}

+ 16 - 0
py-base/src/main/java/com/poyee/common/dict/mapper/DictTypeMapper.java

@@ -0,0 +1,16 @@
+package com.poyee.common.dict.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.poyee.common.dict.domain.DictType;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author poyi
+ * @since 2024-10-22
+ */
+public interface DictTypeMapper extends BaseMapper<DictType> {
+
+}

+ 28 - 0
py-base/src/main/java/com/poyee/common/dict/query/DictQuery.java

@@ -0,0 +1,28 @@
+package com.poyee.common.dict.query;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.poyee.base.dto.BaseReq;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * app-拼团详情
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+@JsonIgnoreProperties(ignoreUnknown = true)
+@Accessors(chain = true)
+public class DictQuery extends BaseReq {
+    @ApiModelProperty(value = "类型type", example = "1")
+    private String dictType;
+    @ApiModelProperty(value = "类型label", example = "1")
+    private String dictLabel;
+    @ApiModelProperty(value = "是否使用缓存", example = "true")
+    private boolean userCache;
+
+    private Integer status;
+    protected String keyword;
+
+}

+ 17 - 0
py-base/src/main/java/com/poyee/common/dict/service/IDictDataService.java

@@ -0,0 +1,17 @@
+package com.poyee.common.dict.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.poyee.common.dict.domain.DictData;
+import com.poyee.common.dict.dto.DictDataDTO;
+
+import java.util.List;
+import java.util.Map;
+
+public interface IDictDataService extends IService<DictData> {
+
+    Map<String, List<DictData>> selectByTypes(String dictTypes);
+
+    void delDataCache( String dictType);
+
+    List<DictData> selectDictData(String dictType, String dictLabel, Integer status, boolean userCache);
+}

+ 14 - 0
py-base/src/main/java/com/poyee/common/dict/service/IDictTypeService.java

@@ -0,0 +1,14 @@
+package com.poyee.common.dict.service;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.poyee.base.dto.BaseReq;
+import com.poyee.common.dict.domain.DictType;
+
+public interface IDictTypeService extends IService<DictType> {
+    LambdaQueryWrapper<DictType> buildQueryWrapper(BaseReq baseQuery);
+
+    void sort(LambdaQueryWrapper<DictType> queryWrapper);
+    Page<DictType> page(DictType dictType);
+}

+ 78 - 0
py-base/src/main/java/com/poyee/common/dict/service/impl/DictDataServiceImpl.java

@@ -0,0 +1,78 @@
+package com.poyee.common.dict.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.poyee.common.dict.domain.DictData;
+import com.poyee.common.dict.mapper.DictDataMapper;
+import com.poyee.common.dict.service.IDictDataService;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.cache.annotation.CacheEvict;
+import org.springframework.cache.annotation.Cacheable;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * <p>
+ * 服务实现类
+ * </p>
+ *
+ * @author poyi
+ * @since 2024-10-22
+ */
+@Service
+@Slf4j
+public class DictDataServiceImpl extends ServiceImpl<DictDataMapper, DictData> implements IDictDataService {
+
+
+    @Cacheable(cacheNames = "dict_data_list#7200", key = "{#dictType}", unless = "#result == null", condition = "#userCache")
+    public List<DictData> selectDataByCache( String dictType, boolean userCache) {
+        return this.lambdaQuery().eq(DictData::getDictType, dictType).list();
+    }
+
+    @CacheEvict(cacheNames = "dict_data_list#7200", key = "{#dictType}")
+    public void delDataCache(String dictType) {
+        log.debug("清空字典表缓存,dictType:{}", dictType);
+    }
+
+
+    @Override
+    public List<DictData> selectDictData(String dictType, String dictLabel, Integer status, boolean userCache) {
+        List<DictData> dictDataList = selectDataByCache(dictType, userCache);
+        if (CollectionUtils.isEmpty(dictDataList)) {
+            return dictDataList;
+        }
+        List<DictData> list = dictDataList.stream().filter(d -> checkDictCondition(dictLabel, status, d)).collect(Collectors.toList());
+        return list;
+    }
+
+    private boolean checkDictCondition(String dictLabel, Integer status, DictData dictData) {
+        if (StringUtils.isNotEmpty(dictLabel) && !dictLabel.equals(dictData.getDictLabel())) {
+            return false;
+        }
+        return status == null || Objects.equals(status, dictData.getStatus());
+    }
+
+    /**
+     * 批量查询字典表数据
+     *
+     * @param dictTypes 多个逗号拼接的type
+     * @return
+     */
+    @Override
+    public Map<String, List<DictData>> selectByTypes(String dictTypes) {
+        if (StringUtils.isBlank(dictTypes)) {
+            return Collections.emptyMap();
+        }
+        String[] split = dictTypes.split(",");
+        Map<String, List<DictData>> typeData = new HashMap<>(split.length);
+        for (String s : split) {
+            String type = s.trim();
+            List<DictData> dictData = selectDictData(type, null, 1, true);
+            typeData.put(type, dictData);
+        }
+        return typeData;
+    }
+}

+ 65 - 0
py-base/src/main/java/com/poyee/common/dict/service/impl/DictTypeService.java

@@ -0,0 +1,65 @@
+package com.poyee.common.dict.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+import com.poyee.base.dto.BaseReq;
+
+import com.poyee.common.dict.query.DictQuery;
+import com.poyee.common.dict.service.IDictDataService;
+import com.poyee.common.dict.service.IDictTypeService;
+import com.poyee.common.dict.domain.DictType;
+import com.poyee.common.dict.mapper.DictTypeMapper;
+
+import javax.annotation.Resource;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Service;
+import org.springframework.util.Assert;
+
+/**
+ * <p>
+ * 服务实现类
+ * </p>
+ *
+ * @author poyi
+ * @since 2024-10-22
+ */
+@Service
+public class DictTypeService extends ServiceImpl<DictTypeMapper,DictType> implements IDictTypeService {
+
+    @Resource
+    private IDictDataService dictDataService;
+
+
+
+    @Override
+    public LambdaQueryWrapper<DictType> buildQueryWrapper(BaseReq baseQuery) {
+        DictQuery dictQuery = (DictQuery) baseQuery;
+        LambdaQueryWrapper<DictType> queryWrapper = Wrappers.lambdaQuery();
+        queryWrapper.eq(StringUtils.isNotBlank(dictQuery.getDictType()), DictType::getDictType, dictQuery.getDictType());
+        queryWrapper.eq(dictQuery.getStatus() != null, DictType::getStatus, dictQuery.getStatus());
+        if(StringUtils.isNotBlank(dictQuery.getKeyword())){
+            queryWrapper.nested(q -> q.like(DictType::getDictType, dictQuery.getKeyword())
+                    .or()
+                    .like(DictType::getDictName, dictQuery.getKeyword()));
+        }
+        return queryWrapper;
+    }
+
+
+
+
+
+    @Override
+    public void sort(LambdaQueryWrapper<DictType> queryWrapper) {
+        queryWrapper.orderByAsc(DictType::getId);
+    }
+
+    @Override
+    public Page<DictType> page(DictType dictType) {
+        Page<DictType> dictTypePage = new Page<>(dictType.getPageNo(),dictType.getPageSize());
+        return super.page(dictTypePage);
+    }
+}

+ 54 - 0
py-goods/src/main/java/com/poyee/controller/SpuCategoryController.java

@@ -0,0 +1,54 @@
+package com.poyee.controller;
+
+
+import com.poyee.base.dto.Result;
+import com.poyee.domain.SpuCategory;
+import com.poyee.dto.SpuCategoryDTO;
+import com.poyee.service.SpuCategoryService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+@RestController
+@RequestMapping("/system/material/category")
+@Api(tags = "商品分类管理")
+public class SpuCategoryController {
+    @Autowired
+    SpuCategoryService categoryService;
+
+    @PostMapping("/label/query")
+    @ApiOperation(value = "子分类查询接口",notes = "根据分类id查询子分类")
+    public Result<List> query(@RequestBody  SpuCategory category){
+        categoryService.querySubSpuCategory(category.getId());
+        return Result.success();
+    }
+    @GetMapping("/list")
+    @ApiOperation(value = "商品分类查询",notes = "查询商品的分类")
+    public Result<SpuCategoryDTO> list(){
+        List<SpuCategoryDTO> systemMaterialCategoryDTOS = categoryService.querySpuCategory();
+        return Result.success(systemMaterialCategoryDTOS);
+    }
+
+    @PostMapping("/saveOrUpdate")
+    @ApiOperation(value = "创建或更新商品分类",notes = "更新商品分类时,id为必填,否则将创建新的分类")
+    public Result saveOrUpdate(@RequestBody SpuCategory category){
+        int i = categoryService.saveOrUpdateCategory(category);
+        if (i>0){
+            return Result.success();
+        }
+        return Result.error();
+    }
+    @GetMapping("/remove/{id}")
+    @ApiOperation(value = "删除商品分类",notes = "删除大分类")
+    @ApiImplicitParam(name = "id",value = "商品分类id")
+    public Result removeCategory(@PathVariable("id")Long id){
+        int count = categoryService.deleteCategory(id);
+        if (count>0)
+            return Result.success("删除分类成功");
+        return Result.error("删除分类失败");
+    }
+}

+ 3 - 1
py-goods/src/main/java/com/poyee/domain/Spu.java

@@ -16,8 +16,10 @@ public class Spu extends BaseReq {
 
     @TableId(value = "id",type = IdType.AUTO)
     private Long id;
-    @ApiModelProperty("商品列表")
+    @ApiModelProperty("商品分类")
     private String category;
+    @ApiModelProperty("商品子分类")
+    private String subCategory;
     @ApiModelProperty("商品名称")
     private String spuName;
     @ApiModelProperty("商品数量")

+ 20 - 0
py-goods/src/main/java/com/poyee/domain/SpuCategory.java

@@ -0,0 +1,20 @@
+package com.poyee.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+@Data
+@TableName("spu_category")
+public class SpuCategory {
+
+    @TableId(value = "id",type = IdType.AUTO)
+    private Long id;
+    private String categoryName;
+    private Integer isCascade;
+    private String subLabel;
+    private Integer sort;
+    private Long parentId;
+
+}

+ 26 - 0
py-goods/src/main/java/com/poyee/dto/SpuCategoryDTO.java

@@ -0,0 +1,26 @@
+package com.poyee.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.apache.ibatis.type.Alias;
+
+@Data
+@ApiModel("素材大分类")
+@Alias("spuCategoryDto")
+public class SpuCategoryDTO {
+    @ApiModelProperty("分类id")
+    private Long id;
+    @ApiModelProperty("分类名称")
+    private String categoryName;
+    @ApiModelProperty("是否级联")
+    private Integer isCascade;
+    @ApiModelProperty("子分类标签,json格式")
+    private String subLabel;
+    @ApiModelProperty("排序")
+    private Integer sort;
+    @ApiModelProperty("父类id")
+    private Long parentId;
+
+
+}

+ 11 - 0
py-goods/src/main/java/com/poyee/dto/SpuDTO.java

@@ -7,6 +7,8 @@ import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.poyee.base.dto.BaseDto;
 
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import org.springframework.format.annotation.DateTimeFormat;
 
@@ -14,19 +16,28 @@ import java.util.Date;
 
 @Data
 @TableName("spu")
+@ApiModel("商品信息")
 public class SpuDTO extends BaseDto {
 
     @TableId(value = "id",type = IdType.AUTO)
     private Long id;
     @TableField("category")
+    @ApiModelProperty("商品分类")
     private String category;
+    @ApiModelProperty("商品子分类")
+    @TableField("sub_category")
+    private String subCategory;
     @TableField("spu_name")
+    @ApiModelProperty("商品名称")
     private String spuName;
     @TableField("num")
+    @ApiModelProperty("商品数量")
     private Long num;
     @TableField("main_image")
+    @ApiModelProperty("主图")
     private String mainImage;
     @TableField("carousel_image")
+    @ApiModelProperty("轮播图")
     private String carouselImage;
     @TableField
     private Integer status;

+ 24 - 0
py-goods/src/main/java/com/poyee/mapper/SpuCategoryMapper.java

@@ -0,0 +1,24 @@
+package com.poyee.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.poyee.domain.SpuCategory;
+import com.poyee.dto.SpuCategoryDTO;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+
+//商品子分类查询
+@Mapper
+public interface SpuCategoryMapper extends BaseMapper<SpuCategory> {
+
+    int createCategory(SpuCategory category);
+
+    int updateCategory(SpuCategory category);
+
+    List<SpuCategoryDTO> querySpuCategory();
+
+
+    List<SpuCategoryDTO> getSpuSubCategory(Long categoryId);
+
+}

+ 20 - 0
py-goods/src/main/java/com/poyee/service/SpuCategoryService.java

@@ -0,0 +1,20 @@
+package com.poyee.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.poyee.domain.SpuCategory;
+import com.poyee.dto.SpuCategoryDTO;
+
+import java.util.List;
+
+public interface SpuCategoryService extends IService<SpuCategory> {
+
+
+
+    int saveOrUpdateCategory(SpuCategory materialCategory);
+
+    List<SpuCategoryDTO> querySpuCategory();
+
+    List<SpuCategoryDTO> querySubSpuCategory(Long id);
+
+    int deleteCategory(Long id);
+}

+ 43 - 0
py-goods/src/main/java/com/poyee/service/impl/SpuCategoryServiceImpl.java

@@ -0,0 +1,43 @@
+package com.poyee.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.poyee.domain.SpuCategory;
+import com.poyee.dto.SpuCategoryDTO;
+import com.poyee.mapper.SpuCategoryMapper;
+import com.poyee.service.SpuCategoryService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service
+public class SpuCategoryServiceImpl extends ServiceImpl<SpuCategoryMapper, SpuCategory> implements SpuCategoryService {
+
+    @Autowired
+    private SpuCategoryMapper mapper;
+    @Override
+    public int saveOrUpdateCategory(SpuCategory spuCategory) {
+        int count;
+        if (spuCategory.getId()==null){
+            count=getBaseMapper().createCategory(spuCategory);
+        }else {
+            count=getBaseMapper().updateCategory(spuCategory);
+        }
+        return count;
+    }
+
+    @Override
+    public List<SpuCategoryDTO> querySpuCategory() {
+        return getBaseMapper().querySpuCategory();
+    }
+
+    @Override
+    public List<SpuCategoryDTO> querySubSpuCategory(Long id) {
+        return mapper.getSpuSubCategory(id);
+    }
+
+    @Override
+    public int deleteCategory(Long id) {
+        return getBaseMapper().deleteById(id);
+    }
+}

+ 46 - 0
py-goods/src/main/resources/mapper/SpuCategoryMapper.xml

@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.poyee.mapper.SpuCategoryMapper">
+
+    <sql id="spuCategoryQuery">
+        select id,category_name categoryName,is_cascade isCascade, sub_label subLabel,sort,parent_id parentId from sys_material_category
+    </sql>
+    <select id="querySpuCategory" resultType="spuCategoryDto">
+        <include refid="spuCategoryQuery"></include>
+    </select>
+    <select id="getSpuSubCategory" resultType="spuCategoryDto">
+        <include refid="spuCategoryQuery"></include>
+        <where>
+            parent_id=#{id}
+        </where>
+    </select>
+    <insert id="createCategory" parameterType="com.poyee.domain.SpuCategory">
+        insert into spu_category (category_name,is_cascade,sub_label,sort,parent_id)
+        values (#{categoryName},#{isCascade},#{subLabel},#{sort},#{parentId})
+    </insert>
+
+    <update id="updateCategory">
+        update sys_material_category
+        <trim prefix="set" suffixOverrides=",">
+            <if test="categoryName!=null and categoryName!=''">
+                category_name=#{categoryName},
+            </if>
+            <if test="isCascade!=null">
+                is_cascade=#{isCascade},
+            </if>
+            <if test="subLabel!=null and subLabel!=''">
+                sub_label=#{subLabel},
+            </if>
+            <if test="sort!=null">
+                sort=#{sort},
+            </if>
+            <if test="parentId!=null">
+                parent_id=#{parentId},
+            </if>
+
+        </trim>
+        where id=#{id}
+    </update>
+</mapper>

+ 1 - 0
py-starter/src/main/java/com/poyee/PoyeeDashboardApplication.java

@@ -1,6 +1,7 @@
 package com.poyee;
 
 import lombok.extern.slf4j.Slf4j;
+
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;

+ 7 - 5
py-starter/src/main/resources/application-dev.yml

@@ -51,11 +51,12 @@ spring:
     sentinel:
       master: ${SENTINEL_MASTER:poyee-master}
       nodes: ${SENTINEL_NODES:192.168.50.8:26379}
-    pool:
-      max-active: 1000  # 连接池最大连接数(使用负值表示没有限制)
-      max-wait: -1ms    # 连接池最大阻塞等待时间(使用负值表示没有限制)
-      max-idle: 10      # 连接池中的最大空闲连接
-      min-idle: 5       # 连接池中的最小空闲连接
+    lettuce:
+      pool:
+        max-active: 1000  # 连接池最大连接数(使用负值表示没有限制)
+        max-wait: -1ms    # 连接池最大阻塞等待时间(使用负值表示没有限制)
+        max-idle: 10      # 连接池中的最大空闲连接
+        min-idle: 5       # 连接池中的最小空闲连接
 
 mybatis-plus:
   configuration:
@@ -64,6 +65,7 @@ mybatis-plus:
   global-config:
     db-config:
       column-underline: false
+  mapper-locations: classpath*:mapper/**/*Mapper.xml
 
 
 # knife4j 配置

+ 0 - 3
py-starter/src/main/resources/application.yml

@@ -1,6 +1,3 @@
-poyee:
-  profile: c://tmp/
-
 spring:
   profiles:
     active: dev