У меня есть класс корзины покупок, который выглядит следующим образом:
Код: Выделить всё
@Entity
@Table(name = "cart")
public class Cart extends NameEntity {
@OneToMany(mappedBy = "cart",cascade = {CascadeType.ALL},orphanRemoval = true)
private List items = new ArrayList();
public void addItem(Item item) {
item.setCart(this);
this.items.add(item);
}
public BigDecimal getTotal() {
if (items.isEmpty())
return BigDecimal.ZERO;
double total = 0;
for (Item item : items) {
total += item.getCount() *
item.getProduct().getPrice().doubleValue();
}
return BigDecimal.valueOf(total);
}
public Item get(Integer id) {
for (Item item : items) {
if (Objects.equals(item.getId(), id))
return item;
}
throw new NoSuchElementException("暂未找到钙元素");
}
public void removeItem(Item item) {
this.items.remove(item);
}
Код: Выделить всё
@Entity
@Table(name = "buy_item")
public class Item extends IDEntity {
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "cart_id",nullable = false)
private Cart cart;
@OneToOne(fetch = FetchType.LAZY,optional = false)
@JoinColumn(name = "product_id",unique = true)
private Product product;
private int count;
@CreationTimestamp
@Column(name = "order_time")
private LocalDateTime orderTime;
}
Моя логика покупок в корзине покупок выглядит следующим образом:
Код: Выделить всё
@PostMapping("/buy/{id}")
public String pay(@PathVariable("id") Integer itemId,
@SessionAttribute(name = "user") User user)
{
User u = userRepo.findById(user.getId()).orElseThrow();
Item item = itemRepo.findById(itemId).orElseThrow();
Cart cart = u.getCart();
cart.removeItem(item);
OrderInfo orderInfo = itemToOrderInfo(item);
Order order = new Order();
order.setState(OrderState.PACKING);
order.setShippingAddress(u.getProfile().getAddress());
order.addOrderInfo(orderInfo);
u.addOrder(order);
orderRepo.save(order);
cartRepo.save(cart);
return "redirect:/order/list";
}
1. Для получения корзины покупок пользователя;
2. Удалить купленные товары в корзине;
3. Для формирования заказа;
4. Сохранить заказ;
5. Чтобы сохранить корзину.
Однако я обнаружил, что товары в моей корзине все еще существуют. Что я могу попробовать дальше?