1. 商品分类业务实现

1.1 实现商品分类列表

1.1.1 前端页面分析

在这里插入图片描述

1.1.2 ItemCatController

@RestController
@CrossOrigin
@RequestMapping("/itemCat")
public class ItemCatController {

    @Autowired
    private ItemCatService itemCatService;

    /**
     * 实现三级商品分类查询
     * URL:  /itemCat/findItemCatList/3
     * 请求参数: type=level    请求级别
     * 返回值:  SysResult对象
     */
    @GetMapping("/findItemCatList/{type}")
    public SysResult findItemCatList(@PathVariable Integer type){
        //要求实现数据的嵌套
        List<ItemCat> catList = itemCatService.findItemCatList(type);
        return SysResult.success(catList);
    }
}

1.1.3 ItemCatService

@Service
public class ItemCatServiceImpl implements ItemCatService{

    @Autowired
    private ItemCatMapper itemCatMapper;


    /**
     * 问题分析:
     *      1.提高程序的效率  减少数据库交互的次数
     *      2.查询的方法最好单独的抽取
     * 问题: 如何有效的存储父子关系
     * 数据结构: Map<parentId,子级>
     * 说明:
     *      Map<0,List<ItemCat>>   map.get(0)
     *      Map<1,List<电子书刊,英文书籍>>
     *      Map<24,List<少儿,0-2岁....>>
     * @return
     */

    //1.封装一个Map集合
    public Map<Integer,List<ItemCat>> getMap(){
        Map<Integer,List<ItemCat>> map = new HashMap<Integer,List<ItemCat>>();
        //1.查询所有的数据信息
        List<ItemCat> list = itemCatMapper.selectList(null);
        //2.将List集合封装到Map集合中
        for (ItemCat itemCat : list){
            //规则: 判断map中是否有key
            // 没有key  该子级是第一个父级元素的孩子,应该声明父级并且将子级最为第一个子级保存
            // 有key    我找到父级的子级序列 将子级追加到序列中即可.
            if(map.containsKey(itemCat.getParentId())){
                //获取父级的所有已知子级
                map.get(itemCat.getParentId()).add(itemCat);
            }else{
                //没有父级
                List<ItemCat> initList = new ArrayList<>();
                initList.add(itemCat);
                map.put(itemCat.getParentId(),initList);
            }
        }
        return map;
    }


    @Override
    public List<ItemCat> findItemCatList(Integer type) {
        //获取数据封装后的结果
        Map<Integer,List<ItemCat>> map = getMap();
        if(type == 1){ //获取一级商品分类信息

            return map.get(0);
        }

        if(type == 2){

            return getLevel2(map);
        }

        return getLevel3(map);
    }

    private List<ItemCat> getLevel2(Map<Integer, List<ItemCat>> map) {
        //1.获取1级商品分类信息
        List<ItemCat> list = map.get(0);

        //2.封装2级菜单信息
        for(ItemCat itemCat : list){ //遍历的是1级
            //获取2级集合信息
            List<ItemCat> twoList = map.get(itemCat.getId());
            itemCat.setChildren(twoList);
        }
        return list;
    }

    private List<ItemCat> getLevel3(Map<Integer, List<ItemCat>> map) {
        //1.获取2级商品分类信息  1级里边套二级
        List<ItemCat> list = getLevel2(map);
        for (ItemCat itemCat1 : list){
            //获取2级商品分类信息
            List<ItemCat> list2 = itemCat1.getChildren();
            //根据2级查询3级信息
            for(ItemCat itemCat2 : list2){
                List<ItemCat> list3 = map.get(itemCat2.getId());
                itemCat2.setChildren(list3);
            }
            //将3级已经封装完成 将2级封装到1级中
            itemCat1.setChildren(list2);
        }
        return list;
    }
}

1.1.4 页面效果展现

在这里插入图片描述

1.1.5 商品层级标签显示问题

说明: 个别的不能显示二三级的标签,则修改如下代码
修改v-if 为 v-else-if 的结构
在这里插入图片描述

1.2 商品分类状态修改

1.2.1 页面分析

  1. 页面html分析
    在这里插入图片描述
  2. 页面JS分析
    在这里插入图片描述

1.2.2 接口文档

在这里插入图片描述

1.2.3 编辑ItemCatController

/**
     * 需求: 实现商品分类状态更新
     * URL地址: /itemCat/status/{id}/{status}
     * 参数:  id/status
     * 返回值: SysResult对象
     */
    @PutMapping("/status/{id}/{status}")
    public SysResult updateStatus(ItemCat itemCat){

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

1.2.4 编辑ItemCatService

	@Override
    @Transactional
    public void updateStatus(ItemCat itemCat) { //1.id status

        itemCatMapper.updateById(itemCat);
    }

1.3 级联选择器

在这里插入图片描述

1.3 商品分类新增

1.3.1 页面分析

在这里插入图片描述

1.3.2 商品新增业务接口

在这里插入图片描述

1.3.3 编辑ItemCatController

 /**
     * 业务说明: 商品分类新增
     * URL地址:   /itemCat/saveItemCat
     * 请求参数:  整个form表单  JSON串
     * 返回值:    SysResult对象
     */
    @PostMapping("/saveItemCat")
    public SysResult saveItemCat(@RequestBody ItemCat itemCat){

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

1.3.4 编辑ItemCatService

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

1.3.5 条件的判断

在这里插入图片描述

1.4 商品分类删除

1.4.1 页面分析

在这里插入图片描述

1.4.2 业务接口

在这里插入图片描述

1.4.3 编辑ItemCatController

  /**
     * 删除商品分类信息
     * URL: /itemCat/deleteItemCat
     * 参数: id,level
     * 返回值: SysResult
     */
    @DeleteMapping("/deleteItemCat")
    public SysResult deleteItemCat(Integer id,Integer level){

        itemCatService.deleteItemCat(id,level);
        return SysResult.success();
    }

1.4.4 编辑ItemCatService

 @Override
    @Transactional
    public void deleteItemCat(Integer id, Integer level) {
        if(level == 3){
            //如果是三级商品分类菜单则直接删除
            itemCatMapper.deleteById(id);
        }

        if(level == 2){
            //先删除3级菜单
            QueryWrapper<ItemCat> queryWrapper = new QueryWrapper<>();
            queryWrapper.eq("parent_id",id);
            itemCatMapper.delete(queryWrapper);
            //先删除2级菜单
            itemCatMapper.deleteById(id);
        }

        if(level == 1) {
            //1.查询二级分类信息 parent_id=一级ID
            QueryWrapper<ItemCat> queryWrapper = new QueryWrapper<>();
            queryWrapper.eq("parent_id", id);
            //获取主键信息(第一列信息)
            List<Object> twoIdList = itemCatMapper.selectObjs(queryWrapper);
            //2.先删除3级
            for (Object twoId : twoIdList) {
                QueryWrapper<ItemCat> queryWrapper2 = new QueryWrapper<>();
                queryWrapper2.eq("parent_id", twoId);
                itemCatMapper.delete(queryWrapper2);
                //将2级删除
                Integer intTwoId = (Integer) twoId;
                itemCatMapper.deleteById(intTwoId);
            }
            //3.删除一级商品分类信息
            itemCatMapper.deleteById(id);
        }
    }

2. 商品列表展现

2.1 实现商品列表页面跳转

在这里插入图片描述

2.2 POJO 介绍

在这里插入图片描述

2.3 编辑商品的层级代码

在这里插入图片描述

2.4 商品列表展现

2.4.1 页面分析

在这里插入图片描述

2.4.2 业务接口说明

在这里插入图片描述

2.4.3 编辑ItemController

 /**
     * 业务说明: 实现商品列表分页查询
     * URL: /item/getItemList
     * 参数: queryItemInfo  分页对象接收
     * 返回值: SysResult(分页对象)
     */
    @GetMapping("/getItemList")
    public SysResult getItemList(PageResult pageResult){

        pageResult = itemService.findItemByPage(pageResult);
        return SysResult.success(pageResult);
    }

2.4.4 编辑ItemService

@Service
public class ItemServiceImpl implements ItemService{

    @Autowired
    private ItemMapper itemMapper;

    @Override
    public PageResult findItemByPage(PageResult pageResult) {
        IPage<Item> page =
                new Page<>(pageResult.getPageNum(), pageResult.getPageSize());
        QueryWrapper<Item> queryWrapper = new QueryWrapper<>();
        boolean flag = StringUtils.hasLength(pageResult.getQuery());
        queryWrapper.like(flag,"title",pageResult.getQuery());
        //经过程序分页,其中的数据全部获取
        page = itemMapper.selectPage(page,queryWrapper);
        long total = page.getTotal();
        List<Item> itemList = page.getRecords();
        return pageResult.setTotal(total).setRows(itemList);
    }
}

2.4.5 页面结构分析

在这里插入图片描述

2.5 格式化商品价格

分析: 数据库中价格存储采用 int 类型 页面展现时需要展现小数
问题: int 与小数之间如何进行转化?
策略: 1个数据扩大100倍 ,同时再缩小100倍 数据值的大小 不变!!!
代码的解决方案: 采用Vue中的过滤器实现该功能.

2.5.1 定义过滤器

在这里插入图片描述

2.5.2 使用过滤器

在这里插入图片描述

2.6 商品修改操作实现

2.6.1 页面分析

在这里插入图片描述

2.6.2 页面JS分析

在这里插入图片描述

2.6.3 编辑ItemController

 /**
     *  url: /item/updateItem
     *  参数: updateItem: { id: ''  title: '', sellPoint: '', price:  '',  num:  ''}
     *  返回值: SysResult对象
     */
    @PutMapping("updateItem")
    public SysResult updateItem(@RequestBody Item item){

        itemService.updateItem(item);
        return SysResult.success();
    }

2.6.4 编辑ItemService

@Override
    public void updateItem(Item item) {

        itemMapper.updateById(item);
    }

3. 虚拟机安装问题

3.1 VT-X 虚拟化异常

大部分计算机 开机重启 F2 百度 计算机型号 BIOS进入
设置: CPU设置 VT-X 虚拟化 由禁用改为启用 F10保存退出.
在这里插入图片描述

3.2 Linux IP命令

命令: ifconfig
命令: ip addr

3.2.1 IP异常说明

如果通过指令发现IP地址出现如下问题 则需要重启Linux 网卡
在这里插入图片描述

3.2.2 重置Linux IP

命令: ip addr
如果没有IP展现则执行如下的命令

service NetworkManager stop 
chkconfig  NetworkManager  off    永久关闭 Manager网卡
service  network restart		  重启network网卡

3.2.3 修改IP

说明: 将虚拟机中的IP改为与Linux 一样的网段 如图所示
在这里插入图片描述
2).修改DHCP
在这里插入图片描述

3.2.4 远程测试

1).检查Windows IP
在这里插入图片描述
2). 检查Linux IP
在这里插入图片描述
3).检查网络是否畅通
在这里插入图片描述

4). Linux中万能取消组合键 ctrl + c

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐