|
@@ -1,14 +1,24 @@
|
|
|
package com.caimei.service.impl;
|
|
|
|
|
|
+import com.caimei.mapper.ProductMapper;
|
|
|
import com.caimei.mapper.ShoppingCartMapper;
|
|
|
import com.caimei.model.ResponseJson;
|
|
|
import com.caimei.model.dto.CartDto;
|
|
|
import com.caimei.model.po.CmMallCartPo;
|
|
|
+import com.caimei.model.po.PromotionsPo;
|
|
|
+import com.caimei.model.vo.CartProductVo;
|
|
|
+import com.caimei.model.vo.LadderPriceVo;
|
|
|
import com.caimei.model.vo.ShopVo;
|
|
|
import com.caimei.service.ShoppingCartService;
|
|
|
+import com.caimei.util.MathUtil;
|
|
|
+import com.caimei.util.ProductUtils;
|
|
|
+import org.springframework.beans.factory.annotation.Value;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
+import org.springframework.util.StringUtils;
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
|
+import java.math.BigDecimal;
|
|
|
+import java.util.ArrayList;
|
|
|
import java.util.HashMap;
|
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
@@ -23,6 +33,10 @@ import java.util.Map;
|
|
|
public class ShoppingCartServiceImpl implements ShoppingCartService {
|
|
|
@Resource
|
|
|
private ShoppingCartMapper shoppingCartMapper;
|
|
|
+ @Resource
|
|
|
+ private ProductMapper productMapper;
|
|
|
+ @Value("${caimei.oldapi}")
|
|
|
+ private String domain;
|
|
|
|
|
|
@Override
|
|
|
public ResponseJson<Integer> addShoppingCart(CartDto cart) {
|
|
@@ -48,8 +62,97 @@ public class ShoppingCartServiceImpl implements ShoppingCartService {
|
|
|
Map<String, Object> map = new HashMap<>(3);
|
|
|
List<ShopVo> shopList = shoppingCartMapper.findCartShop(userId);
|
|
|
shopList.forEach(shop -> {
|
|
|
-
|
|
|
+ BigDecimal shopTotalPrice = BigDecimal.ZERO;
|
|
|
+ List<CartProductVo> productList = shoppingCartMapper.findByShopCartProduct(shop.getShopId(), userId);
|
|
|
+ for (CartProductVo product : productList) {
|
|
|
+ setProductPrice(product);
|
|
|
+ shopTotalPrice = MathUtil.add(shopTotalPrice, product.getRetailPrice());
|
|
|
+ }
|
|
|
+ shop.setShopTotalPrice(shopTotalPrice);
|
|
|
+ shop.setProductList(productList);
|
|
|
});
|
|
|
- return null;
|
|
|
+ map.put("shopList", shopList);
|
|
|
+ //失效商品
|
|
|
+ List<CartProductVo> products = shoppingCartMapper.findExpiredGoods(userId);
|
|
|
+ map.put("products", products);
|
|
|
+ return ResponseJson.success(map);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 设置订单价格
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public List<CartProductVo> setProductPrice(CartProductVo product) {
|
|
|
+ List<CartProductVo> productGifts = new ArrayList<>();
|
|
|
+ //商品是否含税
|
|
|
+ boolean addTaxFlag = (0 == product.getIncludedTax() && (1 == product.getInvoiceType() || 2 == product.getInvoiceType()));
|
|
|
+ // 设置图片
|
|
|
+ product.setMainImage(ProductUtils.getImageURL("product", product.getMainImage(), 0, domain));
|
|
|
+ // 设置商品展示价格
|
|
|
+ PromotionsPo activity = productMapper.findPromotionByProductId(product.getProductId());
|
|
|
+ if (null != activity) {
|
|
|
+ product.setActStatus(1);
|
|
|
+ product.setPromotion(activity);
|
|
|
+ product.setLadderPriceFlag(0);
|
|
|
+ // 活动价
|
|
|
+ if (activity.getMode() == 1) {
|
|
|
+ product.setRetailPrice(activity.getTouchPrice());
|
|
|
+ } else {
|
|
|
+ BigDecimal totalPrice = MathUtil.mul(product.getProductCount(), product.getPrice());
|
|
|
+ if (addTaxFlag) {
|
|
|
+ BigDecimal addedValueTax = MathUtil.div(MathUtil.mul(product.getRetailPrice(), product.getClubTaxPoint()), 100);
|
|
|
+ totalPrice = MathUtil.add(totalPrice, addedValueTax);
|
|
|
+ }
|
|
|
+ if (MathUtil.compare(totalPrice, activity.getTouchPrice()) > -1) {
|
|
|
+ if (activity.getMode() == 2) {
|
|
|
+ BigDecimal retailPrice = MathUtil.sub(product.getPrice(), activity.getReducedPrice());
|
|
|
+ product.setRetailPrice(retailPrice);
|
|
|
+ } else {
|
|
|
+ productGifts = shoppingCartMapper.findProductGifts(activity.getId());
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ product.setRetailPrice(product.getPrice());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else if (1 == product.getLadderPriceFlag()) {
|
|
|
+ // 启用阶梯价格
|
|
|
+ List<LadderPriceVo> ladderPriceList = productMapper.findLadderPriceByProductId(product.getProductId());
|
|
|
+ ladderPriceList.forEach(ladderPrice -> {
|
|
|
+ if (product.getProductCount() >= ladderPrice.getBuyNum()) {
|
|
|
+ product.setRetailPrice(ladderPrice.getBuyPrice());
|
|
|
+ }
|
|
|
+ //阶梯价列表添加税费
|
|
|
+ if (addTaxFlag) {
|
|
|
+ ladderPrice.setBuyPrice(MathUtil.add(ladderPrice.getBuyPrice(), MathUtil.div(MathUtil.mul(ladderPrice.getBuyPrice(), product.getClubTaxPoint()), 100)));
|
|
|
+ }
|
|
|
+ });
|
|
|
+ product.setMinBuyNumber(ladderPriceList.get(0).getBuyNum());
|
|
|
+ } else {
|
|
|
+ product.setActStatus(0);
|
|
|
+ product.setLadderPriceFlag(0);
|
|
|
+ product.setRetailPrice(product.getPrice());
|
|
|
+ }
|
|
|
+ if (addTaxFlag) {
|
|
|
+ BigDecimal addedValueTax = MathUtil.div(MathUtil.mul(product.getRetailPrice(), product.getClubTaxPoint()), 100);
|
|
|
+ BigDecimal price = MathUtil.add(product.getRetailPrice(), addedValueTax);
|
|
|
+ product.setRetailPrice(price);
|
|
|
+ }
|
|
|
+ return productGifts;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void updateNumber(Integer cartId, Integer productCount) {
|
|
|
+ shoppingCartMapper.updateByProductCount(cartId, productCount);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public ResponseJson<String> deleteCart(String cartIds) {
|
|
|
+ String[] split = cartIds.split(",");
|
|
|
+ for (String cartId : split) {
|
|
|
+ if (!StringUtils.isEmpty(cartId)) {
|
|
|
+ shoppingCartMapper.deleteCart(cartId);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return ResponseJson.success("删除购物车成功");
|
|
|
}
|
|
|
}
|