package com.hongqiang.shop.modules.entity; import java.math.BigDecimal; import java.util.Date; import java.util.HashSet; import java.util.Iterator; import java.util.Set; import java.util.TreeSet; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.OneToMany; import javax.persistence.OneToOne; import javax.persistence.Table; import javax.persistence.Transient; import org.apache.commons.codec.digest.DigestUtils; import org.apache.commons.lang.builder.HashCodeBuilder; import com.hongqiang.shop.common.utils.DateUtils; import com.hongqiang.shop.common.utils.Setting; import com.hongqiang.shop.common.utils.SettingUtils; //购物车 @Entity @Table(name="hq_cart") public class Cart extends BaseEntity { private static final long serialVersionUID = -6565967051825794561L; public static final int TIMEOUT = 604800; public static final Integer MAX_PRODUCT_COUNT = Integer.valueOf(100); public static final String ID_COOKIE_NAME = "cartId"; public static final String KEY_COOKIE_NAME = "cartKey"; private String key; private Member member; private Set<CartItem> cartItems = new HashSet<CartItem>(); @Column(name="cart_key", nullable=false, updatable=false) public String getKey() { return this.key; } public void setKey(String key) { this.key = key; } @OneToOne(fetch=FetchType.LAZY) public Member getMember() { return this.member; } public void setMember(Member member) { this.member = member; } @OneToMany(mappedBy="cart", fetch=FetchType.LAZY, cascade={javax.persistence.CascadeType.REMOVE}) public Set<CartItem> getCartItems() { return this.cartItems; } public void setCartItems(Set<CartItem> cartItems) { this.cartItems = cartItems; } @Transient public int getPoint() { int i = 0; Object localObject; if (getCartItems() != null) { Iterator<CartItem> localIterator = getCartItems().iterator(); while (localIterator.hasNext()) { localObject = (CartItem)localIterator.next(); if (localObject == null) continue; i = (int)(i + ((CartItem)localObject).getPoint()); } } Iterator<Promotion> localIterator = getPromotions().iterator(); while (localIterator.hasNext()) { localObject = (Promotion)localIterator.next(); i = ((Promotion)localObject).calculatePoint(Integer.valueOf(i)).intValue(); } return i; } @Transient public int getWeight() { int i = 0; if (getCartItems() != null) { Iterator<CartItem> localIterator = getCartItems().iterator(); while (localIterator.hasNext()) { CartItem localCartItem = (CartItem)localIterator.next(); if (localCartItem == null) continue; i += localCartItem.getWeight(); } } return i; } @Transient public int getQuantity() { int i = 0; if (getCartItems() != null) { Iterator<CartItem> localIterator = getCartItems().iterator(); while (localIterator.hasNext()) { CartItem localCartItem = (CartItem)localIterator.next(); if ((localCartItem == null) || (localCartItem.getQuantity() == null)) continue; i += localCartItem.getQuantity().intValue(); } } return i; } @Transient public BigDecimal getPrice() { BigDecimal localBigDecimal = new BigDecimal(0); if (getCartItems() != null) { Iterator<CartItem> localIterator = getCartItems().iterator(); while (localIterator.hasNext()) { CartItem localCartItem = (CartItem)localIterator.next(); if ((localCartItem == null) || (localCartItem.getSubtotal() == null)) continue; localBigDecimal = localBigDecimal.add(localCartItem.getSubtotal()); } } return localBigDecimal; } @Transient public BigDecimal getAmount() { Setting localSetting = SettingUtils.get(); BigDecimal localBigDecimal = getPrice(); Iterator<Promotion> localIterator = getPromotions().iterator(); while (localIterator.hasNext()) { Promotion localPromotion = (Promotion)localIterator.next(); localBigDecimal = localPromotion.calculatePrice(localBigDecimal); } return localSetting.setScale(localBigDecimal); } @Transient public BigDecimal getDiscount() { BigDecimal localBigDecimal = getPrice().subtract(getAmount()); return localBigDecimal.compareTo(new BigDecimal(0)) > 0 ? localBigDecimal : new BigDecimal(0); } @Transient public Set<GiftItem> getGiftItems() { HashSet<GiftItem> localHashSet = new HashSet<GiftItem>(); Iterator<Promotion> localIterator1 = getPromotions().iterator(); while (localIterator1.hasNext()) { Promotion localPromotion = (Promotion)localIterator1.next(); if (localPromotion.getGiftItems() == null) continue; Iterator<GiftItem> localIterator2 = localPromotion.getGiftItems().iterator(); while (localIterator2.hasNext()) { GiftItem localGiftItem = null; GiftItem localGiftItem1 = (GiftItem)localIterator2.next(); for (GiftItem giftItem : localHashSet) { if (giftItem.getGift().equals(localGiftItem1.getGift())) { localGiftItem = giftItem; break; } } if (localGiftItem != null) { localGiftItem.setQuantity(Integer.valueOf(localGiftItem.getQuantity().intValue() + localGiftItem1.getQuantity().intValue())); } else { localHashSet.add(localGiftItem1); } } } return localHashSet; } @Transient public Set<Promotion> getPromotions() { HashSet<Promotion> localHashSet = new HashSet<Promotion>(); if (getCartItems() != null) { Iterator<CartItem> localObject2 = getCartItems().iterator(); while (localObject2.hasNext()) { CartItem localObject1 = (CartItem)(localObject2).next(); if ((localObject1 == null) || (((CartItem)localObject1).getProduct() == null)) continue; localHashSet.addAll(((CartItem)localObject1).getProduct().getValidPromotions()); } } Set<Promotion> localObject1 = new TreeSet<Promotion>(); Iterator<Promotion> localIterator = localHashSet.iterator(); while (localIterator.hasNext()) { Promotion localObject2 = (Promotion)localIterator.next(); if (!key(localObject2)) continue; localObject1.add(localObject2); } return localObject1; } @Transient private boolean key(Promotion paramPromotion) { if ((paramPromotion == null) || (!paramPromotion.hasBegun()) || (paramPromotion.hasEnded())) return false; if ((paramPromotion.getMemberRanks() == null) || (getMember() == null) || (getMember().getMemberRank() == null) || (!paramPromotion.getMemberRanks().contains(getMember().getMemberRank()))) return false; BigDecimal localBigDecimal = new BigDecimal(0); if (getCartItems() != null) { Iterator<CartItem> localIterator = getCartItems().iterator(); while (localIterator.hasNext()) { CartItem localCartItem = (CartItem)localIterator.next(); if (localCartItem == null) continue; Product localProduct = localCartItem.getProduct(); if (localProduct == null) continue; if ((localProduct.getPromotions() != null) && (localProduct.getPromotions().contains(paramPromotion))) { localBigDecimal = localBigDecimal.add(localCartItem.getSubtotal()); } else if ((localProduct.getProductCategory() != null) && (localProduct.getProductCategory().getPromotions().contains(paramPromotion))) { localBigDecimal = localBigDecimal.add(localCartItem.getSubtotal()); } else { if ((localProduct.getBrand() == null) || (!localProduct.getBrand().getPromotions().contains(paramPromotion))) continue; localBigDecimal = localBigDecimal.add(localCartItem.getSubtotal()); } } } return ((paramPromotion.getStartPrice() == null) || (paramPromotion.getStartPrice().compareTo(localBigDecimal) <= 0)) && ((paramPromotion.getEndPrice() == null) || (paramPromotion.getEndPrice().compareTo(localBigDecimal) >= 0)); } @Transient public boolean isValid(Coupon coupon) { if ((coupon == null) || (!coupon.getIsEnabled().booleanValue()) || (!coupon.hasBegun()) || (coupon.hasExpired())) return false; return ((coupon.getStartPrice() == null) || (coupon.getStartPrice().compareTo(getAmount()) <= 0)) && ((coupon.getEndPrice() == null) || (coupon.getEndPrice().compareTo(getAmount()) >= 0)); } @Transient public CartItem getCartItem(Product product) { if ((product != null) && (getCartItems() != null)) { Iterator<CartItem> localIterator = getCartItems().iterator(); while (localIterator.hasNext()) { CartItem localCartItem = (CartItem)localIterator.next(); if ((localCartItem != null) && (localCartItem.getProduct() == product)) return localCartItem; } } return null; } @Transient public boolean contains(Product product) { if ((product != null) && (getCartItems() != null)) { Iterator<CartItem> localIterator = getCartItems().iterator(); while (localIterator.hasNext()) { CartItem localCartItem = (CartItem)localIterator.next(); if ((localCartItem != null) && (localCartItem.getProduct() == product)) return true; } } return false; } @Transient public String getToken() { HashCodeBuilder localHashCodeBuilder = new HashCodeBuilder(17, 37).append(getKey()); if (getCartItems() != null) { Iterator<CartItem> localIterator = getCartItems().iterator(); while (localIterator.hasNext()) { CartItem localCartItem = (CartItem)localIterator.next(); localHashCodeBuilder.append(localCartItem.getProduct()).append(localCartItem.getQuantity()).append(localCartItem.getUnitPrice()); } } return DigestUtils.md5Hex(String.valueOf(localHashCodeBuilder.toHashCode())); } @Transient public boolean getIsLowStock() { if (getCartItems() != null) { Iterator<CartItem> localIterator = getCartItems().iterator(); while (localIterator.hasNext()) { CartItem localCartItem = (CartItem)localIterator.next(); if ((localCartItem != null) && (localCartItem.getIsLowStock())) return true; } } return false; } @Transient public boolean hasExpired() { return new Date().after(DateUtils.addSeconds(getUpdateDate(), 604800)); } @Transient public boolean isCouponAllowed() { Iterator<Promotion> localIterator = getPromotions().iterator(); while (localIterator.hasNext()) { Promotion localPromotion = (Promotion)localIterator.next(); if ((localPromotion != null) && (!localPromotion.getIsCouponAllowed().booleanValue())) return false; } return true; } @Transient public boolean isEmpty() { return (getCartItems() == null) || (getCartItems().isEmpty()); } }