Order order=orderService.findOrderById(oid); List<Goods>goodsList=order.getGoodsList(); for (Goods goods:goodsList) { if(goods.getId()==gid){ System.out.println(gid+"----------------------------------------+++++++++++++++++++++++++++++++"); goodsList.remove(goods); break; } } order.setGoodsList(goodsList); orderService.save(order); System.out.println(orderService.findOrderById(oid).getGoodsList()); if(order.getGoodsList().size()==0){ orderService.deleteOrderById(oid); return Result.success(true); } order.setGoodsList(goodsList); return Result.success(true); }这段代码报不能删除
时间: 2023-06-18 22:04:06 浏览: 157
这段代码报错的原因可能是在对 `goodsList` 进行遍历删除时,使用了 `remove` 方法,这样会改变集合的大小,导致遍历出现问题。可以考虑使用迭代器或者倒序遍历来避免这个问题,例如:
```
Iterator<Goods> iterator = goodsList.iterator();
while (iterator.hasNext()) {
Goods goods = iterator.next();
if (goods.getId() == gid) {
iterator.remove();
break;
}
}
```
或者:
```
for (int i = goodsList.size() - 1; i >= 0; i--) {
Goods goods = goodsList.get(i);
if (goods.getId() == gid) {
goodsList.remove(i);
break;
}
}
```
另外,注意在删除商品后要判断 `goodsList` 是否为空,可以改为 `if (goodsList.isEmpty())`。最后,不需要再次设置 `order.setGoodsList(goodsList)`,因为已经在删除商品时修改了 `order` 的 `goodsList`。
相关问题
List<Orders> orderList = orderService.selectOrderByUserId(userId);用LambdaQueryWrapper<Employee> queryWrapper = new LambdaQueryWrapper();实现
LambdaQueryWrapper<Orders> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(Orders::getUserId, userId);
List<Orders> orderList = orderService.list(queryWrapper);
public Result<?> save(@RequestBody Order order) { // order.setFlow(order.getFlow()); order.setUserId(getUser().getId()); order.setOrderNo(DateUtil.format(new Date(), "yyyyMMddHHmmss") + RandomUtil.randomNumbers(6)); order.setCreateTime(DateUtil.now()); String cartsStr = order.getCarts(); List<Cart> carts = JSONUtil.toBean(cartsStr, new TypeReference<List<Cart>>() { }, true); orderService.save(order); for (Cart cart : carts) { Integer count = cart.getCount(); Long goodsId = cart.getGoodsId(); // 扣库存 Goods goods = goodsService.getById(goodsId); if(goods.getStore() - cart.getCount() < 0) { throw new CustomException("-1", "库存不足"); } goods.setStore(goods.getStore() - cart.getCount()); goods.setSales(goods.getSales() + cart.getCount()); goodsService.updateById(goods); OrderGoods orderGoods = new OrderGoods(); orderGoods.setOrderId(order.getId()); orderGoods.setGoodsId(goodsId); orderGoods.setCount(count); orderGoodsService.save(orderGoods); } if (order.getType() == 1) { // 1表示购物车,0表示直接购买 // 提交订单时清空个人的购物车商品 cartService.remove(Wrappers.<Cart>lambdaUpdate().eq(Cart::getUserId, getUser().getId())); } return Result.success(order); // return Result.success(orderService.save(order)); }
这段代码看起来像是一个在后端处理用户订单的方法,其中对应着的请求体就是包含着商品信息的订单对象。这个方法接收这个订单对象之后,处理了其中一些信息,比如设置了用户id、订单编号、创建时间等等。然后这个方法又把这个订单对象保存到数据库中,之后又遍历了一下其中的商品信息,通过商品id来寻找对应的商品,然后扣除相应的库存和增加相应的销量。最后还会把这些订单中的商品信息保存到数据库中,之后,如果这个订单是属于购物车类型的话,就会清空当前用户的购物车里面的商品。最后这个方法会通过返回一个包含订单信息的Result对象来告诉调用者这个方法是否执行成功。
阅读全文