商品新增(在shop-web模块)
分析:需要对多张表格进行插入,有些数据需要手动封装,如状态等。
1、将controller层的参数对象改成我们的自定义对象Goods(里边设计到八张表的操作)
2、在goodsServiceImpl实现类中实现添加的方法(需要分别添加三个对象)
注意:在添加的方法中有if-else判断,是在处理添加时有没有规格选项的问题,因为页面上可以选择是否气启用规格选项。
注意:在添加属性时,有几个属性需要手动添加,如创建时间,初始状态等。具体需要对比数据库。
/**
* 增加
*/
@Override
public void add(Goods goods) {
//将goods保存到数据库
TbGoods tbGoods = goods.getGoods();
tbGoods.setAuditStatus("0");
goodsMapper.insert(tbGoods);
//将goodsDesc保存到数据库
TbGoodsDesc goodsDesc = goods.getGoodsDesc();
goodsDesc.setGoodsId(goods.getGoods().getId());
goodsDescMapper.insert(goodsDesc);
//将item保存到数据库
if ("1".equals(goods.getGoods().getIsEnableSpec())){
List<TbItem> itemList = goods.getItemList();
for (TbItem item : itemList) {
String title = goods.getGoods().getGoodsName();
Map<String, String> maps = JSON.parseObject(item.getSpec(), Map.class);
for (String key : maps.keySet()) {
title += " " + maps.get(key);
}
item.setTitle(title);
item.setSellPoint(goods.getGoods().getCaption());
List<Map> imgMaps = JSON.parseArray(goodsDesc.getItemImages(), Map.class);
if (imgMaps.size() > 0) {
item.setImage(imgMaps.get(0).get("url").toString());
}
item.setCategoryid(goods.getGoods().getCategory3Id());
item.setCreateTime(new Date());
item.setUpdateTime(new Date());
item.setGoodsId(goods.getGoods().getId());
item.setSellerId(goods.getGoods().getSellerId());
item.setCategory(itemCatMapper.selectByPrimaryKey(goods.getGoods().getCategory3Id()).getName());
item.setBrand(brandMapper.selectByPrimaryKey(goods.getGoods().getBrandId()).getName());
item.setSeller(sellerMapper.selectByPrimaryKey(goods.getGoods().getSellerId()).getName());
itemMapper.insert(item);
}
}else {
TbItem item = new TbItem();
item.setSellPoint(goods.getGoods().getCaption());
List<Map> imgMaps = JSON.parseArray(goodsDesc.getItemImages(), Map.class);
if (imgMaps.size() > 0) {
item.setImage(imgMaps.get(0).get("url").toString());
}
item.setCategoryid(goods.getGoods().getCategory3Id());
item.setCreateTime(new Date());
item.setUpdateTime(new Date());
item.setGoodsId(goods.getGoods().getId());
item.setSellerId(goods.getGoods().getSellerId());
item.setCategory(itemCatMapper.selectByPrimaryKey(goods.getGoods().getCategory3Id()).getName());
item.setBrand(brandMapper.selectByPrimaryKey(goods.getGoods().getBrandId()).getName());
item.setSeller(sellerMapper.selectByPrimaryKey(goods.getGoods().getSellerId()).getName());
item.setStatus("0");
item.setTitle(tbGoods.getGoodsName());
item.setNum(9999);
item.setPrice(goods.getGoods().getPrice());
item.setIsDefault("1");
itemMapper.insert(item);
}
}
是否启用默认
在页面中有一个单选按钮,可以选择时候选择启用规格。
1、在html中对应位置添加:
2、在添加商品信息时,在goodsServiceImpl实现类中判断是否有规格选项的添加(已经在上文中添加)
商家显示商品列表(在shop-web模块)
注意:商家显示商品列表只需要显示自己的全部(即进行搜索所有商品时需要添加根据sellerId搜索的条件)
1、在页面绑定模型
2、在init方法中引用findAll方法
3、在goodsController控制器中改造findAll方法,变成根据商家sellerId进行所有所有商品
注意:只能在controller中添加,不能再impl实现类中添加,因为两个web模块使用的是同一个serviceImol模块。
**使用安全框架的方法来获取当前操作的商家名称**
String sellerId = SecurityContextHolder.getContext().getAuthentication().getName();
商家显示商品时状态信息的中文显示问题
分析:显示在页面的状态是数字,因为我们的状态码在数据库中的形式就是数字。我们需要将数字转成具体的中文文字信息。
1、在js文件的controller定义一个数组
2、在页面进行数组引用
商家提交审核
分析:商家填写的商品信息最 基本的有这样几个状态,草稿、未审核、审核通过、审核未通过等等。在添加商品信息时,默认将状态设置成了0,即草稿状态。现在需要提交审核,只需要将状态该成1(未审核)即可。
一、前端部分
1、在复选框的位置添加动态添加进selectIds数组的方法
2、在页面提交审核的位置绑定修改状态的方法,传入固定值为1
3、在js文件中定义对应方法(需要在改变状态的方法中,手动放入selectIds)
二、后端部分
1、在controller层定义updateStatus方法
2、在impl实现类调用方法实现更改功能
运营商显示商品列表(在manager-web模块)
1、在页面绑定模型
2、在init方法中定义一个搜索对象(运营商需要看到所有商家的所有没有被审核的商品)
商品分类中文处理
在分类列表中,因为存入数据库的是id值,所以也只能显示id。现在需要显示具体的分类名称。需要定义一个新的方法生成名称数组,在页面调用显示。
1、在js文件controller定义方法
2、在页面中使用这个数组,将显示的id替换成对应的具体名称
运营商审核商家(manager-web模块)
一、前端部分
(为了避免以前的方法过于累赘,所以这个模块使用的所有有关goods的js和controller重新创建)
1、在左上部分的按钮上绑定对应方法
2、定义更新状态的方法,和shop-web使用的是同一套service,所以引入文件,在js的controller定义方法即可。
运营商审核页面的模糊搜索
1、页面绑定模型,调用reloadList方法即可。
需要将goodsServiceImpl中的findPage拼接条件进行调整(中间的两个其实没有用,可以删除)
逻辑删除(三个部分)
一、前端部分
1、在页面绑定删除方法
2、在复选框添加动态添加到selectIds的方法
二、后端部分
1、改造删除方法,在impl层将物理删除改为逻辑删除
三、查询改造
在查询时添加条件,不显示逻辑删除的结果。只显示isDelete为null的(因为为1代表已经删除)
注意:这个方法可以在serviceImpl中添加,因为manager和shop共用service,并且删除的数据两个web都不需要看到,所以在这里添加。
注解式事务
在impl实现类添加@Transactional注解即可