Commit 29dc0508 authored by Junling Bu's avatar Junling Bu
Browse files

feat[litemall-admin-api, litemall-db]: 如果订单或购物车存在商品,则拒绝管理员修改商品

parent e54cba0c
...@@ -48,6 +48,10 @@ public class AdminGoodsController { ...@@ -48,6 +48,10 @@ public class AdminGoodsController {
private LitemallCategoryService categoryService; private LitemallCategoryService categoryService;
@Autowired @Autowired
private LitemallBrandService brandService; private LitemallBrandService brandService;
@Autowired
private LitemallCartService cartService;
@Autowired
private LitemallOrderGoodsService orderGoodsService;
@Autowired @Autowired
private QCodeService qCodeService; private QCodeService qCodeService;
...@@ -142,16 +146,21 @@ public class AdminGoodsController { ...@@ -142,16 +146,21 @@ public class AdminGoodsController {
return null; return null;
} }
/* /**
* 编辑商品
* <p>
* TODO * TODO
* 目前商品修改的逻辑是 * 目前商品修改的逻辑是
* 1. 更新litemall_goods表 * 1. 更新litemall_goods表
* 2. 逻辑删除litemall_goods_specification、litemall_goods_attribute、litemall_product * 2. 逻辑删除litemall_goods_specification、litemall_goods_attribute、litemall_goods_product
* 3. 添加litemall_goods_specification、litemall_goods_attribute、litemall_product * 3. 添加litemall_goods_specification、litemall_goods_attribute、litemall_goods_product
* *
* 这里商品三个表的数据采用删除再跟新的策略是因为 * 这里商品三个表的数据采用删除再添加的策略是因为
* 商品编辑页面,管理员可以添加删除商品规格、添加删除商品属性,因此这里仅仅更新表是不可能的, * 商品编辑页面,支持管理员添加删除商品规格、添加删除商品属性,因此这里仅仅更新是不可能的,
* 因此这里只能删除所有旧的数据,然后添加新的数据 * 只能删除三个表旧的数据,然后添加新的数据。
* 但是这里又会引入新的问题,就是存在订单商品货品ID指向了失效的商品货品表。
* 因此这里会拒绝管理员编辑商品,如果订单或购物车中存在商品。
* 所以这里可能需要重新设计。
*/ */
@PostMapping("/update") @PostMapping("/update")
public Object update(@LoginAdmin Integer adminId, @RequestBody GoodsAllinone goodsAllinone) { public Object update(@LoginAdmin Integer adminId, @RequestBody GoodsAllinone goodsAllinone) {
...@@ -169,6 +178,16 @@ public class AdminGoodsController { ...@@ -169,6 +178,16 @@ public class AdminGoodsController {
LitemallGoodsSpecification[] specifications = goodsAllinone.getSpecifications(); LitemallGoodsSpecification[] specifications = goodsAllinone.getSpecifications();
LitemallGoodsProduct[] products = goodsAllinone.getProducts(); LitemallGoodsProduct[] products = goodsAllinone.getProducts();
Integer id = goods.getId();
// 检查是否存在购物车商品或者订单商品
// 如果存在则拒绝修改商品。
if(orderGoodsService.checkExist(id)){
return ResponseUtil.fail(404, "商品已经在购物车中,不能修改");
}
if(cartService.checkExist(id)){
return ResponseUtil.fail(404, "商品已经在订单中,不能修改");
}
// 开启事务管理 // 开启事务管理
DefaultTransactionDefinition def = new DefaultTransactionDefinition(); DefaultTransactionDefinition def = new DefaultTransactionDefinition();
def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED); def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
......
...@@ -111,4 +111,10 @@ public class LitemallCartService { ...@@ -111,4 +111,10 @@ public class LitemallCartService {
public void deleteById(Integer id) { public void deleteById(Integer id) {
cartMapper.logicalDeleteByPrimaryKey(id); cartMapper.logicalDeleteByPrimaryKey(id);
} }
public boolean checkExist(Integer goodsId) {
LitemallCartExample example = new LitemallCartExample();
example.or().andGoodsIdEqualTo(goodsId).andCheckedEqualTo(true);
return cartMapper.countByExample(example) != 0;
}
} }
...@@ -47,4 +47,10 @@ public class LitemallOrderGoodsService { ...@@ -47,4 +47,10 @@ public class LitemallOrderGoodsService {
long count = orderGoodsMapper.countByExample(example); long count = orderGoodsMapper.countByExample(example);
return (short) count; return (short) count;
} }
public boolean checkExist(Integer goodsId) {
LitemallOrderGoodsExample example = new LitemallOrderGoodsExample();
example.or().andGoodsIdEqualTo(goodsId).andDeletedEqualTo(false);
return orderGoodsMapper.countByExample(example) != 0;
}
} }
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment