소스 검색

商品结算

plf 4 년 전
부모
커밋
ff65c59a44

+ 54 - 0
src/main/java/com/caimei/controller/OrderSubmitApi.java

@@ -0,0 +1,54 @@
+package com.caimei.controller;
+
+import com.caimei.model.ResponseJson;
+import com.caimei.service.OrderSubmitService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Map;
+
+/**
+ * Description
+ *
+ * @author : Charles
+ * @date : 2020/3/21
+ */
+@Api(tags = "订单结算")
+@Slf4j
+@RestController
+@RequestMapping("/order")
+public class OrderSubmitApi {
+
+    private OrderSubmitService orderSubmitService;
+
+    @Autowired
+    public void setOrderSubmitService(OrderSubmitService orderSubmitService) {
+        this.orderSubmitService = orderSubmitService;
+    }
+
+    /**
+     * 商品结算(普通商品和二手商品通用接口)
+     * <p>
+     * 返回参数:shopList:按照供应商分类的商品信息
+     * invoice:发票信息(目前你应该用不到,适用crm端)
+     * userMoney:用户余额
+     * postage:邮费(-1到付,0包邮,大于0具体金额)
+     */
+    @ApiOperation("商品结算")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "productIds", value = "组织商品ID串用逗号隔开。", required = true),
+            @ApiImplicitParam(name = "count", value = "立即购买商品数量,购物车count为null。"),
+            @ApiImplicitParam(name = "userId", value = "机构用户id。", required = true)
+    })
+    @GetMapping("/confirm")
+    public ResponseJson<Map<String, Object>> orderConfirm(String productIds, Integer count, Integer userId) {
+        return orderSubmitService.orderConfirm(productIds, count, userId);
+    }
+}

+ 25 - 0
src/main/java/com/caimei/controller/ShoppingCartApi.java

@@ -1,5 +1,6 @@
 package com.caimei.controller;
 
+import com.alibaba.fastjson.JSONObject;
 import com.caimei.model.ResponseJson;
 import com.caimei.model.dto.CartDto;
 import com.caimei.service.ShoppingCartService;
@@ -65,4 +66,28 @@ public class ShoppingCartApi {
         }
         return shoppingCartService.shoppingInfo(userId);
     }
+
+    /**
+     * 更新购物车商品数量
+     */
+    @ApiOperation("更新购物车商品数量")
+    @ApiImplicitParam(name = "params", value = "cartId:购物车id;productCount:商品数量", required = true)
+    @PostMapping("/update")
+    public void updateNumber(@RequestBody Map<String, Integer> params) {
+        Integer cartId = params.get("cartId");
+        Integer productCount = params.get("productCount");
+        shoppingCartService.updateNumber(cartId, productCount);
+    }
+
+    /**
+     * 删除购物车商品
+     */
+    @ApiOperation("删除购物车商品")
+    @ApiImplicitParam(name = "cartIds", value = "购物车id,以','隔开", required = true)
+    @PostMapping("/delete")
+    public ResponseJson<String> deleteCart(@RequestBody String cartIds) {
+        JSONObject jsonObject = JSONObject.parseObject(cartIds);
+        cartIds = jsonObject.getString("cartIds");
+        return shoppingCartService.deleteCart(cartIds);
+    }
 }

+ 59 - 0
src/main/java/com/caimei/mapper/OrderSubmitMapper.java

@@ -0,0 +1,59 @@
+package com.caimei.mapper;
+
+import com.caimei.model.po.CmUserInvoiceInfoPo;
+import com.caimei.model.vo.CartProductVo;
+import com.caimei.model.vo.ShopVo;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * Description
+ *
+ * @author : plf
+ * @date : 2021/3/24
+ */
+@Mapper
+public interface OrderSubmitMapper {
+    /**
+     * 查询商品结算供应商
+     *
+     * @param productIds
+     * @return
+     */
+    List<ShopVo> findShopByproductIds(@Param("productIds") String[] productIds);
+
+    /**
+     * 查询商品购物车信息
+     *
+     * @param shopId
+     * @param productIds
+     * @return
+     */
+    List<CartProductVo> findProductListByCart(@Param("shopId") Integer shopId, @Param("productIds") String[] productIds);
+
+    /**
+     * 查询商品信息
+     *
+     * @param productId
+     * @return
+     */
+    CartProductVo findCartByProductId(String productId);
+
+    /**
+     * 查询用户发票信息
+     *
+     * @param userId
+     * @return
+     */
+    CmUserInvoiceInfoPo findUserInvoice(Integer userId);
+
+    /**
+     * 查询供应商信息
+     *
+     * @param shopId
+     * @return
+     */
+    ShopVo getShop(Integer shopId);
+}

+ 13 - 4
src/main/java/com/caimei/mapper/ProductMapper.java

@@ -1,6 +1,10 @@
 package com.caimei.mapper;
 
-import com.caimei.model.po.*;
+import com.caimei.model.po.ProductDetailInfoPo;
+import com.caimei.model.po.ProductImagePo;
+import com.caimei.model.po.PromotionsPo;
+import com.caimei.model.po.RelatedParametersPo;
+import com.caimei.model.vo.CartProductVo;
 import com.caimei.model.vo.ClubVo;
 import com.caimei.model.vo.LadderPriceVo;
 import com.caimei.model.vo.ProductVo;
@@ -24,18 +28,20 @@ public interface ProductMapper {
      * @param name
      * @return
      */
-    List<ClubVo> findClubList(@Param("organizeId") Integer organizeId,@Param("name") String name);
+    List<ClubVo> findClubList(@Param("organizeId") Integer organizeId, @Param("name") String name);
 
     /**
      * 查询组织商品
+     *
      * @param organizeId
      * @param productName
      * @return
      */
-    List<ProductVo> findProductList(@Param("organizeId") Integer organizeId,@Param("productName") String productName);
+    List<ProductVo> findProductList(@Param("organizeId") Integer organizeId, @Param("productName") String productName);
 
     /**
      * 根据商品Id查询促销活动
+     *
      * @param productId
      * @return
      */
@@ -43,6 +49,7 @@ public interface ProductMapper {
 
     /**
      * 获取阶梯价格
+     *
      * @param productId
      * @return
      */
@@ -50,6 +57,7 @@ public interface ProductMapper {
 
     /**
      * 查询商品
+     *
      * @param productId
      * @return
      */
@@ -57,6 +65,7 @@ public interface ProductMapper {
 
     /**
      * 查询商品图片
+     *
      * @param originalProductId 原采美商品Id
      * @return
      */
@@ -64,6 +73,7 @@ public interface ProductMapper {
 
     /**
      * 商品详细信息
+     *
      * @param originalProductId
      * @return
      */
@@ -80,7 +90,6 @@ public interface ProductMapper {
     String findTypeName(@Param("bigTypeId") Integer bigTypeId, @Param("smallTypeId") Integer smallTypeId, @Param("tinyTypeId") Integer tinyTypeId);
 
     /**
-     *
      * @param brandId
      * @return
      */

+ 35 - 0
src/main/java/com/caimei/mapper/ShoppingCartMapper.java

@@ -2,6 +2,7 @@ package com.caimei.mapper;
 
 import com.caimei.model.dto.CartDto;
 import com.caimei.model.po.CmMallCartPo;
+import com.caimei.model.vo.CartProductVo;
 import com.caimei.model.vo.ShopVo;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
@@ -42,6 +43,7 @@ public interface ShoppingCartMapper {
 
     /**
      * 查询购物车数量
+     *
      * @param userId
      * @return
      */
@@ -49,8 +51,41 @@ public interface ShoppingCartMapper {
 
     /**
      * 查询购物车对应供应商
+     *
      * @param userId
      * @return
      */
     List<ShopVo> findCartShop(Integer userId);
+
+    /**
+     * 查询购物车该供应商下商品
+     *
+     * @param shopId
+     * @param userId
+     * @return
+     */
+    List<CartProductVo> findByShopCartProduct(@Param("shopId") Integer shopId, @Param("userId") Integer userId);
+
+    /**
+     * 查询失效购物车商品
+     *
+     * @param userId
+     * @return
+     */
+    List<CartProductVo> findExpiredGoods(Integer userId);
+
+    /**
+     * 删除购物车
+     *
+     * @param cartId
+     */
+    void deleteCart(String cartId);
+
+    /**
+     * 查询单品满赠商品信息
+     *
+     * @param promotionsId
+     * @return
+     */
+    List<CartProductVo> findProductGifts(Integer promotionsId);
 }

+ 41 - 0
src/main/java/com/caimei/model/po/CmOrganizePromotionsGiftPo.java

@@ -0,0 +1,41 @@
+package com.caimei.model.po;
+
+import java.io.Serializable;
+import java.util.Date;
+import lombok.Data;
+
+/**
+ * cm_organize_promotions_gift
+ * @author 
+ */
+@Data
+public class CmOrganizePromotionsGiftPo implements Serializable {
+    private Integer id;
+
+    /**
+     * 组织赠品商品id
+     */
+    private Integer productId;
+
+    /**
+     * 赠品数量
+     */
+    private Integer number;
+
+    /**
+     * 促销活动id
+     */
+    private Integer promotionsId;
+
+    /**
+     * 添加时间
+     */
+    private Date addTime;
+
+    /**
+     * 修改时间
+     */
+    private Date updateTime;
+
+    private static final long serialVersionUID = 1L;
+}

+ 52 - 0
src/main/java/com/caimei/model/po/CmUserInvoiceInfoPo.java

@@ -0,0 +1,52 @@
+package com.caimei.model.po;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * cm_user_invoiceinfo
+ *
+ * @author
+ */
+@Data
+public class CmUserInvoiceInfoPo implements Serializable {
+    private Long id;
+
+    /**
+     * 用户ID
+     */
+    private Long userId;
+
+    /**
+     * 发票抬头 个人名称或企业名称或者单位名
+     */
+    private String invoiceTitle;
+
+    /**
+     * 企业税号、纳税人识别号
+     */
+    private String corporationTaxNum;
+
+    /**
+     * 注册地址
+     */
+    private String registeredAddress;
+
+    /**
+     * 注册电话
+     */
+    private String registeredPhone;
+
+    /**
+     * 开户银行账户
+     */
+    private String bankAccountNo;
+
+    /**
+     * 开户银行
+     */
+    private String openBank;
+
+    private static final long serialVersionUID = 1L;
+}

+ 0 - 2
src/main/java/com/caimei/model/po/PromotionsPo.java

@@ -1,13 +1,11 @@
 package com.caimei.model.po;
 
-import com.caimei.model.vo.ProductVo;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Data;
 
 import java.io.Serializable;
 import java.math.BigDecimal;
 import java.util.Date;
-import java.util.List;
 
 /**
  * Description

+ 97 - 0
src/main/java/com/caimei/model/vo/CartProductVo.java

@@ -0,0 +1,97 @@
+package com.caimei.model.vo;
+
+import com.caimei.model.po.PromotionsPo;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * Description
+ *
+ * @author : plf
+ * @date : 2021/3/24
+ */
+@Data
+public class CartProductVo implements Serializable {
+    /**
+     * 供应商id
+     */
+    private Integer shopId;
+
+    /**
+     * 商品Id
+     */
+    private Integer productId;
+
+    /**
+     * 原采美商品Id
+     */
+    private Integer originalProductId;
+
+    /**
+     * 商品名称
+     */
+    private String productName;
+
+    /**
+     * 商品图片
+     */
+    private String mainImage;
+
+    /**
+     * 机构价
+     */
+    private BigDecimal price;
+
+    /**
+     * 规格
+     */
+    private String unit;
+
+    /**
+     * 起订量
+     */
+    private Integer minBuyNumber;
+
+    /**
+     * 启用阶梯价格标识 0否 1是
+     */
+    private Integer ladderPriceFlag;
+
+    /**
+     * 是否含税   0不含税,1含税,2未知
+     */
+    private Integer includedTax;
+
+    /**
+     * 发票类型(基于是否含税基础)   1增值税票,2普通票, 3不能开票
+     */
+    private Integer invoiceType;
+
+    /**
+     * 开票税点(基于不含税基础) :增值税默认13%,普通票6%取值范围[0-100]
+     */
+    private BigDecimal clubTaxPoint;
+
+    /**
+     * 展示价格
+     */
+    private BigDecimal retailPrice;
+
+    /**
+     * 商品是否处于活动状态:1是,空或0不是[活动商品和actFlag含义不同]
+     */
+    private Integer actStatus;
+
+    /**
+     * 商品数量
+     */
+    private Integer productCount;
+
+    /**
+     * 促销活动
+     */
+    private PromotionsPo promotion;
+}
+

+ 0 - 4
src/main/java/com/caimei/model/vo/ProductVo.java

@@ -88,10 +88,6 @@ public class ProductVo {
      */
     private String tags;
 
-
-
-
-
     /**
      * 阶梯价格集合
      */

+ 14 - 0
src/main/java/com/caimei/model/vo/ShopVo.java

@@ -4,6 +4,8 @@ import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.List;
 
 /**
  * Description
@@ -30,4 +32,16 @@ public class ShopVo implements Serializable {
      */
     @ApiModelProperty("供应商logo")
     private String logo;
+
+    /**
+     * 购物车该供应商下总价
+     */
+    @ApiModelProperty("购物车该供应商下总价")
+    private BigDecimal shopTotalPrice;
+
+    /**
+     * 供应商下商品信息
+     */
+    @ApiModelProperty("供应商下商品信息")
+    private List<CartProductVo> productList;
 }

+ 24 - 0
src/main/java/com/caimei/service/OrderSubmitService.java

@@ -0,0 +1,24 @@
+package com.caimei.service;
+
+import com.caimei.model.ResponseJson;
+
+import java.util.Map;
+
+/**
+ * Description
+ *
+ * @author : Charles
+ * @date : 2020/3/21
+ */
+public interface OrderSubmitService {
+    /**
+     * 商品结算
+     *
+     * @param productIds 商品ID串用逗号隔开。
+     * @param count      立即购买商品数量,购物车count为null。
+     * @param userId     机构用户id。
+     * @return
+     */
+    ResponseJson<Map<String, Object>> orderConfirm(String productIds, Integer count, Integer userId);
+
+}

+ 26 - 0
src/main/java/com/caimei/service/ShoppingCartService.java

@@ -2,7 +2,9 @@ package com.caimei.service;
 
 import com.caimei.model.ResponseJson;
 import com.caimei.model.dto.CartDto;
+import com.caimei.model.vo.CartProductVo;
 
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -35,4 +37,28 @@ public interface ShoppingCartService {
      * @return
      */
     ResponseJson<Map<String, Object>> shoppingInfo(Integer userId);
+
+    /**
+     * 更新购物车商品数量
+     *
+     * @param cartId
+     * @param productCount
+     */
+    void updateNumber(Integer cartId, Integer productCount);
+
+    /**
+     * 删除购物车商品
+     *
+     * @param cartIds
+     * @return
+     */
+    ResponseJson<String> deleteCart(String cartIds);
+
+    /**
+     * 设置订单价格
+     *
+     * @param product
+     * @return
+     */
+    List<CartProductVo> setProductPrice(CartProductVo product);
 }

+ 95 - 0
src/main/java/com/caimei/service/impl/OrderSubmitServiceImpl.java

@@ -0,0 +1,95 @@
+package com.caimei.service.impl;
+
+import com.caimei.mapper.OrderSubmitMapper;
+import com.caimei.mapper.ProductMapper;
+import com.caimei.model.ResponseJson;
+import com.caimei.model.po.CmUserInvoiceInfoPo;
+import com.caimei.model.po.PromotionsPo;
+import com.caimei.model.vo.CartProductVo;
+import com.caimei.model.vo.ShopVo;
+import com.caimei.service.OrderSubmitService;
+import com.caimei.service.ShoppingCartService;
+import com.caimei.util.MathUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.util.*;
+import java.util.concurrent.atomic.AtomicReference;
+
+/**
+ * Description
+ *
+ * @author : Charles
+ * @date : 2020/3/21
+ */
+@Slf4j
+@Service
+public class OrderSubmitServiceImpl implements OrderSubmitService {
+    @Resource
+    private OrderSubmitMapper orderSubmitMapper;
+    @Resource
+    private ShoppingCartService shoppingCartService;
+
+    @Override
+    public ResponseJson<Map<String, Object>> orderConfirm(String productIds, Integer count, Integer userId) {
+        Map<String, Object> confirmData = new HashMap<>(5);
+        if (userId != null) {
+            log.info("<<<<< 结算订单 >>>>>");
+            //商品总金额
+            AtomicReference<BigDecimal> totalPrice = new AtomicReference<BigDecimal>(BigDecimal.ZERO);
+            String[] productId = productIds.split(",");
+            List<Integer> shopIds = new ArrayList<>();
+            List<CartProductVo> productGifts = new ArrayList<>();
+            List<ShopVo> shopList = orderSubmitMapper.findShopByproductIds(productId);
+            shopList.forEach(shop -> {
+                shopIds.add(shop.getShopId());
+                List<CartProductVo> products = new ArrayList<>();
+                if (null == count) {
+                    //购物车购买
+                    products = orderSubmitMapper.findProductListByCart(shop.getShopId(), productId);
+                } else {
+                    //直接立即购买
+                    products.add(orderSubmitMapper.findCartByProductId(productId[0]));
+                    products.get(0).setProductCount(count);
+                }
+                BigDecimal shopTotalPrice = BigDecimal.ZERO;
+                for (CartProductVo product : products) {
+                    productGifts.addAll(shoppingCartService.setProductPrice(product));
+                    shopTotalPrice = MathUtil.add(shopTotalPrice, product.getRetailPrice());
+                }
+                shop.setShopTotalPrice(shopTotalPrice);
+                shop.setProductList(products);
+                totalPrice.set(MathUtil.add(totalPrice.get(), shopTotalPrice));
+            });
+            //单品满赠
+            if (productGifts.size() > 0) {
+                for (CartProductVo productGift : productGifts) {
+                    if (shopIds.contains(productGift.getShopId())) {
+                        shopList.forEach(shop -> {
+                            if (productGift.getShopId().equals(shop.getShopId())) {
+                                shop.getProductList().add(productGift);
+                            }
+                        });
+                    } else {
+                        ShopVo shop = orderSubmitMapper.getShop(productGift.getShopId());
+                        List<CartProductVo> list = new ArrayList<>();
+                        list.add(productGift);
+                        shop.setProductList(list);
+                        shopList.add(shop);
+                        shopIds.add(shop.getShopId());
+                    }
+                }
+            }
+            confirmData.put("totalPrice", totalPrice);
+            confirmData.put("shopList", shopList);
+            // 发票信息
+            CmUserInvoiceInfoPo invoice = orderSubmitMapper.findUserInvoice(userId);
+            confirmData.put("invoice", invoice);
+            return ResponseJson.success(confirmData);
+        } else {
+            return ResponseJson.error("登录后才能购买", null);
+        }
+    }
+}

+ 1 - 1
src/main/java/com/caimei/service/impl/ProductServiceImpl.java

@@ -177,7 +177,7 @@ public class ProductServiceImpl implements ProductService {
             //阶梯价列表添加税费
             boolean addTaxFlag = (0 == product.getIncludedTax() && (1 == product.getInvoiceType() || 2 == product.getInvoiceType()));
             if (addTaxFlag) {
-                ladderPriceList.stream().forEach(item->{
+                ladderPriceList.forEach(item->{
                     item.setBuyPrice(MathUtil.add(item.getBuyPrice(), MathUtil.div(MathUtil.mul(item.getBuyPrice(), product.getClubTaxPoint()), 100)));
                 });
             }

+ 105 - 2
src/main/java/com/caimei/service/impl/ShoppingCartServiceImpl.java

@@ -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("删除购物车成功");
     }
 }

+ 96 - 0
src/main/resources/mapper/OrderSubmitMapper.xml

@@ -0,0 +1,96 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.caimei.mapper.OrderSubmitMapper">
+    <select id="findShopByproductIds" resultType="com.caimei.model.vo.ShopVo">
+        SELECT
+          s.shopID AS shopId,
+          s.name,
+          s.logo
+        FROM
+          cm_organize_product cop
+          LEFT JOIN product p ON cop.productId = p.productID
+          LEFT JOIN shop s ON p.shopID = s.shopID
+          LEFT JOIN cm_mall_cart cmc ON cop.id = cmc.productID
+        WHERE
+          p.productID IN
+        <foreach item="productId" index="index" collection="productIds" open="(" separator="," close=")">
+            #{productId}
+        </foreach>
+    </select>
+
+    <select id="findProductListByCart" resultType="com.caimei.model.vo.CartProductVo">
+        SELECT
+          cmc.id AS cartId,
+          cmc.productID AS productId,
+          cmc.productCount,
+          cop.productId AS originalProductId,
+          cop.price,
+          cop.minBuyNumber,
+          cop.ladderPriceFlag,
+          cop.includedTax,
+          cop.invoiceType,
+          cop.clubTaxPoint,
+          p.name AS productName,
+          p.mainImage,
+          p.unit
+        FROM
+          cm_organize_product cop
+          LEFT JOIN product p ON cop.productId = p.productID
+          LEFT JOIN cm_mall_cart cmc ON cop.id = cmc.productID
+        WHERE
+          p.productID IN
+        <foreach item="productId" index="index" collection="productIds" open="(" separator="," close=")">
+            #{productId}
+        </foreach>
+          AND p.shopID = #{shopId}
+    </select>
+
+    <select id="findCartByProductId" resultType="com.caimei.model.vo.CartProductVo">
+        SELECT
+          cop.id AS productId,
+          cop.productId AS originalProductId,
+          cop.price,
+          cop.minBuyNumber,
+          cop.ladderPriceFlag,
+          cop.includedTax,
+          cop.invoiceType,
+          cop.clubTaxPoint,
+          p.name AS productName,
+          p.mainImage,
+          p.unit
+        FROM
+          cm_organize_product cop
+          LEFT JOIN product p ON cop.productId = p.productID
+        WHERE
+          p.productID = #{productId}
+    </select>
+
+    <select id="findUserInvoice" resultType="com.caimei.model.po.CmUserInvoiceInfoPo">
+        SELECT
+          id,
+          userId,
+          invoiceTitle,
+          corporationTaxNum,
+          registeredAddress,
+          registeredPhone,
+          bankAccountNo,
+          openBank
+        FROM
+          cm_user_invoiceinfo
+        WHERE
+          userId = #{userId}
+    </select>
+
+    <select id="getShop" resultType="com.caimei.model.vo.ShopVo">
+        SELECT
+          shopID AS shopId,
+          name,
+          logo
+        FROM
+          shop
+        WHERE
+          shopID = #{shopId}
+    </select>
+</mapper>

+ 31 - 32
src/main/resources/mapper/ProductMapper.xml

@@ -5,42 +5,42 @@
 <mapper namespace="com.caimei.mapper.ProductMapper">
     <select id="findClubList" resultType="com.caimei.model.vo.ClubVo">
         SELECT
-          u.userID AS userId,
-          u.name AS clubName,
-          u.userName,
-          u.bindMobile
+        u.userID AS userId,
+        u.name AS clubName,
+        u.userName,
+        u.bindMobile
         FROM
-          USER u
-          LEFT JOIN club c ON u.userID = c.userID
+        USER u
+        LEFT JOIN club c ON u.userID = c.userID
         WHERE
-          u.userOrganizeID = #{organizeId}
-          AND u.clubStatus = 90
-          AND u.validFlag = 1
-          <if test="name != null and name != ''">
-              AND (
-                u.name LIKE CONCAT('%',#{name}, '%')
-                OR u.userName LIKE CONCAT('%',#{name}, '%')
-              )
-          </if>
+        u.userOrganizeID = #{organizeId}
+        AND u.clubStatus = 90
+        AND u.validFlag = 1
+        <if test="name != null and name != ''">
+            AND (
+            u.name LIKE CONCAT('%',#{name}, '%')
+            OR u.userName LIKE CONCAT('%',#{name}, '%')
+            )
+        </if>
     </select>
     <select id="findProductList" resultType="com.caimei.model.vo.ProductVo">
         select
-            cop.id as productId,
-            p.name as productName,
-            p.mainImage,
-            p.unit,
-            cop.price,
-            cop.minBuyNumber,
-            cop.ladderPriceFlag,
-            cop.includedTax,
-            cop.invoiceType,
-            cop.clubTaxPoint
+        cop.id as productId,
+        p.name as productName,
+        p.mainImage,
+        p.unit,
+        cop.price,
+        cop.minBuyNumber,
+        cop.ladderPriceFlag,
+        cop.includedTax,
+        cop.invoiceType,
+        cop.clubTaxPoint
         from cm_organize_product cop
-            left join product p on cop.productId = p.productID
+        left join product p on cop.productId = p.productID
         where cop.organizeId = #{organizeId} and cop.delFlag = 0
-            <if test="productName != null and productName != ''">
-                and p.name like concat('%',#{productName},'%')
-            </if>
+        <if test="productName != null and productName != ''">
+            and p.name like concat('%',#{productName},'%')
+        </if>
     </select>
 
     <select id="findPromotionByProductId" resultType="com.caimei.model.po.PromotionsPo">
@@ -119,7 +119,7 @@
                 LEFT JOIN smalltype s ON s.smallTypeID = #{smallTypeId}
                 LEFT JOIN tinytype t ON t.tinyTypeID = #{tinyTypeId}
         WHERE
-            b.bigTypeID = #{bigTypeId};
+            b.bigTypeID = #{bigTypeId}
     </select>
     <select id="findBrandNameByBrandId" resultType="java.lang.String">
         SELECT name
@@ -129,8 +129,7 @@
         SELECT id, paramsName, paramsContent
         FROM cm_product_related_parameters
         WHERE productId = #{productId}
-          AND delFlag = '0';
-
+        AND delFlag = '0'
     </select>
 
 </mapper>

+ 90 - 1
src/main/resources/mapper/ShoppingCartMapper.xml

@@ -30,7 +30,13 @@
     </insert>
 
     <update id="updateByProductCount">
-        UPDATE cm_mall_cart SET productCount = #{productCount} WHERE id = #{cartId}
+        UPDATE
+          cm_mall_cart
+        SET
+          productCount = #{productCount},
+          addTime = NOW()
+        WHERE
+          id = #{cartId}
     </update>
 
     <select id="getCartQuantity" resultType="integer">
@@ -61,5 +67,88 @@
           AND cop.delFlag = 0
         GROUP BY
           s.shopID
+        ORDER BY
+          MAX(cmc.addTime) DESC
+    </select>
+
+    <select id="findByShopCartProduct" resultType="com.caimei.model.vo.CartProductVo">
+        SELECT
+          cmc.id AS cartId,
+          cmc.productID AS productId,
+          cmc.productCount,
+          cop.productId AS originalProductId,
+          cop.price,
+          cop.minBuyNumber,
+          cop.ladderPriceFlag,
+          cop.includedTax,
+          cop.invoiceType,
+          cop.clubTaxPoint,
+          p.name AS productName,
+          p.shopID AS shopId,
+          p.mainImage,
+          p.unit
+        FROM
+          cm_mall_cart cmc
+          LEFT JOIN cm_organize_product cop ON cmc.productID = cop.id
+          LEFT JOIN product p ON cop.productId = p.productID
+        WHERE
+          cmc.userID = #{userId}
+          AND cmc.delFlag = 0
+          AND cop.status = 1
+          AND cop.delFlag = 0
+          AND p.shopID = #{shopId}
+    </select>
+
+    <select id="findExpiredGoods" resultType="com.caimei.model.vo.CartProductVo">
+        SELECT
+          cmc.id AS cartId,
+          cmc.productID AS productId,
+          cmc.productCount,
+          cop.productId AS originalProductId,
+          cop.price,
+          cop.minBuyNumber,
+          cop.ladderPriceFlag,
+          cop.includedTax,
+          cop.invoiceType,
+          cop.clubTaxPoint,
+          p.name AS productName,
+          p.shopID AS shopId,
+          p.mainImage,
+          p.unit
+        FROM
+          cm_mall_cart cmc
+          LEFT JOIN cm_organize_product cop ON cmc.productID = cop.id
+          LEFT JOIN product p ON cop.productId = p.productID
+        WHERE
+          cmc.userID = #{userId}
+          AND cmc.delFlag = 0
+          AND (cop.status = 0
+          OR cop.delFlag = 1)
+    </select>
+
+    <delete id="deleteCart">
+        DELETE FROM cm_mall_cart WHERE id = #{cartId}
+    </delete>
+
+    <select id="findProductGifts" resultType="com.caimei.model.vo.CartProductVo">
+        SELECT
+          copg.number AS productCount,
+          cop.id AS productId,
+          cop.productId AS originalProductId,
+          cop.price,
+          cop.minBuyNumber,
+          cop.ladderPriceFlag,
+          cop.includedTax,
+          cop.invoiceType,
+          cop.clubTaxPoint,
+          p.name AS productName,
+          p.shopID AS shopId,
+          p.mainImage,
+          p.unit
+        FROM
+          cm_organize_promotions_gift copg
+          LEFT JOIN cm_organize_product cop ON copg.productId = cop.id
+          LEFT JOIN product p ON cop.productId = p.productID
+          AND copg.promotionsId = #{promotionsId}
     </select>
 </mapper>