CGB2103-day15
1.完成商品分类业务2.实现商品列表功能3.提前安装VMware虚拟机
·
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 页面分析
- 页面html分析
- 页面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
更多推荐
已为社区贡献16条内容
所有评论(0)