2021-09-06 商品分类业务实现

商品分类业务实现

优化的策略: 数据库只查询一次,就可以获取商品分类三级嵌套结构

列表业务实现

封装Map,key为父级ID,value为子集列表,

  • 判断!!!
  • 如果没有存在key,将自己作为第一个元素存储;
  • 如果已经存在key,将自己追加到value集合中

封装Map集合,根据数据结构动态根据level查询子级.

private Map<Integer, List<ItemCat>> getMap() {
        HashMap<Integer,List<ItemCat>> map=new HashMap<>();
        List<ItemCat> list = itemMapper.selectList(null);
        //遍历所有的数据,按照parent_id为key,value为itemcat-list存为map集合
        for (ItemCat itemCats:list) {
            int parentId=itemCats.getParentId();
            if (map.containsKey(parentId)){
                map.get(parentId).add(itemCats);
            }
            else {
                ArrayList<ItemCat> objects = new ArrayList<>();
                objects.add(itemCats);
                map.put(parentId, objects);
            }
        }
        return map;
    }

private List<ItemCat> getTwoList(Map<Integer, List<ItemCat>> map) {
        //获取一级列表
        List<ItemCat> onelist = map.get(0);
        for (ItemCat oneItemCat:onelist) {
            int parentId=oneItemCat.getId();
            List<ItemCat> twolist = map.get(parentId);
            oneItemCat.setChildren(twolist);
        }
       return onelist;
    }

 private List<ItemCat> getThreeList(Map<Integer, List<ItemCat>> map) {
        List<ItemCat> oneList = getTwoList(map);
        for (ItemCat oneItemCat:oneList) {
            List<ItemCat> twoList = oneItemCat.getChildren();
            if(twoList==null||twoList.size()==0){
                continue;
            }
            for (ItemCat twoItemCat:twoList
                 ) {
                List<ItemCat> threeList = map.get(twoItemCat.getId());
                twoItemCat.setChildren(threeList);
            }
        }
        return oneList;
    }
 public List<ItemCat> findItemCatList(Integer level) {
        Map<Integer,List<ItemCat>> map= getMap();
        if(level==1){
            return map.get(0);
        }
            if(level==2){
                return getTwoList(map);
            }
            return getThreeList(map);
    }

商品分类状态修改

业务分析

说明: 当用户点击状态码时,应该实现数据的修改操作.

<el-table-column prop="status" label="状态">
          <!-- 定义作用域插槽 展现数据     scope.row展现行级元素 -->
          <template slot-scope="scope">
            <el-switch v-model="scope.row.status" active-color="#13ce66" inactive-color="#ff4949"
              @change="updateStatus(scope.row)"></el-switch>
          </template>
        </el-table-column>


	 //根据ID修改状态信息
      async updateStatus(itemCat) {
        const {
          data: result
        } = await this.$http.put(`/itemCat/status/${itemCat.id}/${itemCat.status}`)
        if (result.status !== 200) return this.$message.error("修改状态失败")
        this.$message.success("状态修改成功")
      },

 /**
     * 业务需求: ItemCat状态修改
     * URL地址: /itemCat/status/{id}/{status}
     * 参数:    id/status
     * 返回值:  SysResult对象
     */
    @PutMapping("/status/{id}/{status}")
    public SysResult updateStatus(ItemCat itemCat){

        itemCatService.updateStatus(itemCat);
        return SysResult.success();
    }

  @Override
    @Transactional //事务控制
    public void updateStatus(ItemCat itemCat) {

        itemCatMapper.updateById(itemCat);
    }

商品分类新增

: 商品分类实现中,需要添加一级/二级/三级分类信息. 但是父级下拉框中勾选1-2级菜单. 因为三级菜单不能当作父级. 当用户编辑完成之后,点击确定实现商品分类入库.

js代码

//动态获取商品分类信息  type=2表示获取2级商品分类信息
        const {
          data: result
        } = await this.$http.get("/itemCat/findItemCatList/2")
        if (result.status !== 200) return this.$message.error("获取商品分类列表失败!!")
        this.parentItemCatList = result.data
      },
 

//新增商品分类JS
       async addItemCatForm() {
        //先将整个表单进行校验
        this.$refs.itemCatFormRef.validate(async validate => {
          if (!validate) return
          const {
            data: result
          } = await this.$http.post("/itemCat/saveItemCat", this.itemCatForm)
          if (result.status !== 200) return this.$message.error("新增商品分类失败")
          this.$message.success("新增商品分类成功!!!")
          //新增成功,则刷新分类列表信息
          this.findItemCatList();
          this.addItemCatDialogVisible = false
        })

/**
     * 业务分析: 完成商品分类新增
     * 请求类型: POST请求
     * URL: /itemCat/saveItemCat
     * 参数: 利用ItemCat对象接收 JSON
     * 返回值: SysResult对象
     */
    @PostMapping("/saveItemCat")
    public SysResult saveItemCat(@RequestBody ItemCat itemCat){

        itemCatService.saveItemCat(itemCat);
        return SysResult.success();
    }

    @Override
    @Transactional
    public void saveItemCat(ItemCat itemCat) {
        itemCat.setStatus(true) ;
        itemCatMapper.insert(itemCat);
    }

商品分类修改操作

由于有层级关系,所有修改只能修改名称

修改按钮js

 <el-table-column label="操作">
          <!-- 定义作用域插槽 定义标签等级-->
          <template slot-scope="scope">
            <el-button type="success" icon="el-icon-edit" @click="updateItemCatBtn(scope.row)">编辑</el-button>
            <el-button type="danger" icon="el-icon-delete" @click="deleteItemCatBtn(scope.row)">删除</el-button>
          </template>
        </el-table-column>


     //由于有层级关系,所有修改只能修改名称
      updateItemCatBtn(itemCat) {
        this.updateItemCatForm = itemCat
        this.updateItemCatDialogVisible = true
      },

修改确定!!

 @PutMapping("/updateItemCat")
    public SysResult updateItemCat(@RequestBody ItemCat itemCat){

        itemCatService.updateItemCat(itemCat);
        return SysResult.success();
    }
 @Override
    @Transactional
    public void updateItemCat(ItemCat itemCat) {

        itemCatMapper.updateById(itemCat);
    }

商品分类删除操作

业务说明

规则:
1.如果删除的商品分类是三级,则可以直接删除.
2.如果删除的商品分类是二级,则先删除三级,在删除二级.
3.如果删除的商品分类是一级,则先删除三级/二级/一级
注意事务的控制.

@Override
@Transactional
public void deleteItemCat(ItemCat itemCat) {
    if(itemCat.getLevel()==3){
        itemMapper.deleteById(itemCat.getId());
    }
    if (itemCat.getLevel()==2){
        QueryWrapper<ItemCat> objectQueryWrapper = new QueryWrapper<>();
        objectQueryWrapper.eq("parent_id", itemCat.getId())
                .or().eq("id",itemCat.getId());
        itemMapper.delete(objectQueryWrapper);
    }
    if (itemCat.getLevel()==1){
        QueryWrapper<ItemCat> objectQueryWrapper = new QueryWrapper<>();
        objectQueryWrapper.eq("parent_id", itemCat.getId());
        List<Object> twolist = itemMapper.selectObjs(objectQueryWrapper);
        objectQueryWrapper.clear();

        objectQueryWrapper.in(twolist.size()>0,"parent_id", twolist)
                .or().eq("parent_id", itemCat.getId())
                .or().eq("id",itemCat.getId());
     itemMapper.delete(objectQueryWrapper);
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值