Pārlūkot izejas kodu

呵呵商城拼团/分享减免part2

Aslee 3 gadi atpakaļ
vecāks
revīzija
0ce0845e90
28 mainītis faili ar 485 papildinājumiem un 120 dzēšanām
  1. 7 4
      src/main/java/com/caimei/controller/OrderApi.java
  2. 30 9
      src/main/java/com/caimei/controller/OrderSubmitApi.java
  3. 92 0
      src/main/java/com/caimei/mapper/CollageMapper.java
  4. 18 0
      src/main/java/com/caimei/mapper/CouponMapper.java
  5. 1 8
      src/main/java/com/caimei/mapper/OrderMapper.java
  6. 18 16
      src/main/java/com/caimei/mapper/OrderSubmitMapper.java
  7. 2 0
      src/main/java/com/caimei/mapper/ProductMapper.java
  8. 11 1
      src/main/java/com/caimei/model/po/CmHeheCollagePo.java
  9. 0 5
      src/main/java/com/caimei/model/po/CmHeheCollageProductPo.java
  10. 37 0
      src/main/java/com/caimei/model/po/ReductionUserPo.java
  11. 15 0
      src/main/java/com/caimei/model/vo/CollageDetailsVo.java
  12. 5 0
      src/main/java/com/caimei/model/vo/CouponVo.java
  13. 5 0
      src/main/java/com/caimei/model/vo/OrderProductVo.java
  14. 5 0
      src/main/java/com/caimei/model/vo/OrderVo.java
  15. 5 0
      src/main/java/com/caimei/model/vo/ProductVo.java
  16. 2 1
      src/main/java/com/caimei/service/OrderService.java
  17. 2 1
      src/main/java/com/caimei/service/OrderSubmitService.java
  18. 1 1
      src/main/java/com/caimei/service/ShoppingCartService.java
  19. 37 4
      src/main/java/com/caimei/service/impl/OrderServiceImpl.java
  20. 25 25
      src/main/java/com/caimei/service/impl/OrderSubmitServiceImpl.java
  21. 52 3
      src/main/java/com/caimei/service/impl/PayOrderServiceImpl.java
  22. 15 0
      src/main/java/com/caimei/service/impl/ProductServiceImpl.java
  23. 3 3
      src/main/java/com/caimei/service/impl/ShoppingCartServiceImpl.java
  24. 63 0
      src/main/resources/mapper/CollageMapper.xml
  25. 9 0
      src/main/resources/mapper/CouponMapper.xml
  26. 16 17
      src/main/resources/mapper/OrderMapper.xml
  27. 2 21
      src/main/resources/mapper/OrderSubmitMapper.xml
  28. 7 1
      src/main/resources/mapper/ProductMapper.xml

+ 7 - 4
src/main/java/com/caimei/controller/OrderApi.java

@@ -166,7 +166,7 @@ public class OrderApi {
      */
     @ApiOperation("分销者订单列表")
     @ApiImplicitParams({
-            @ApiImplicitParam(name = "orderState", required = false, value = "1:待付款,2:待发货,3:已发货,4:退货款"),
+            @ApiImplicitParam(name = "orderState", required = false, value = "1:待付款,2:待发货,3:已发货,4:退货款,5:待分享"),
             @ApiImplicitParam(name = "orderType", required = true, value = "0:全部订单,1:用户订单,2:自身订单"),
             @ApiImplicitParam(name = "userId", required = true, value = "分销者用户id"),
             @ApiImplicitParam(name = "searchWord", required = false, value = "搜索关键词"),
@@ -200,12 +200,15 @@ public class OrderApi {
      * 拼团详情数据
      */
     @ApiOperation("拼团详情数据")
-    @ApiImplicitParam(name = "orderId", required = false, value = "订单id")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "collageId", required = false, value = "拼团id"),
+            @ApiImplicitParam(name = "userId", required = false, value = "用户id")
+    })
     @GetMapping("/collage/details")
-    public ResponseJson<CollageDetailsVo> collageDetails(Integer collageId) {
+    public ResponseJson<CollageDetailsVo> collageDetails(Integer collageId, Integer userId) {
         if (collageId == null) {
             return ResponseJson.error("参数异常,拼团id不能为空", null);
         }
-        return orderService.collageDetails(collageId);
+        return orderService.collageDetails(collageId, userId);
     }
 }

+ 30 - 9
src/main/java/com/caimei/controller/OrderSubmitApi.java

@@ -39,11 +39,12 @@ public class OrderSubmitApi {
             @ApiImplicitParam(name = "cartIds", value = "购物车ID串用逗号隔开", required = false),
             @ApiImplicitParam(name = "productId", value = "立即购买商品ID", required = false),
             @ApiImplicitParam(name = "productCount", value = "立即购买商品数量", required = false),
-            @ApiImplicitParam(name = "heUserId", value = "分销者用户id", required = false)
+            @ApiImplicitParam(name = "heUserId", value = "分销者用户id", required = false),
+            @ApiImplicitParam(name = "collageFlag", value = "是否拼团购买:0不拼团,1拼团", required = false)
     })
     @GetMapping("/confirm")
-    public ResponseJson<Map<String, Object>> orderConfirm(Integer userId, String cartIds, Integer productId, Integer productCount, Integer heUserId) {
-        return orderSubmitService.orderConfirm(userId, cartIds, productId, productCount, heUserId);
+    public ResponseJson<Map<String, Object>> orderConfirm(Integer userId, String cartIds, Integer productId, Integer productCount, Integer heUserId, Integer collageFlag) {
+        return orderSubmitService.orderConfirm(userId, cartIds, productId, productCount, heUserId, collageFlag);
     }
 
     /**
@@ -134,13 +135,33 @@ public class OrderSubmitApi {
      * 分享减免
      */
     @ApiOperation("分享减免")
-    @ApiImplicitParams({
-            @ApiImplicitParam(name = "userId", value = "机构用户id", required = true),
-            @ApiImplicitParam(name = "reductionId", value = "分享减免活动id", required = true),
-            @ApiImplicitParam(name = "shareType", value = "分享渠道:1微信好友,2微信朋友圈", required = true),
-    })
     @PostMapping("/reduction/share")
-    public ResponseJson<Integer> shareReduction(Integer userId, Integer reductionId, Integer shareType) {
+    public ResponseJson<Integer> shareReduction(@RequestBody String params) {
+        // 校验传入参数的正确性
+        Integer userId = null;
+        Integer reductionId = null;
+        Integer shareType = null;
+        try {
+            JSONObject paramsMap = JSON.parseObject(params);
+            if (null == paramsMap) {
+                return ResponseJson.error("数据异常,参数不能为空", null);
+            }
+            userId = paramsMap.getInteger("userId");
+            if (null == userId) {
+                return ResponseJson.error("机构用户Id异常", null);
+            }
+            reductionId = paramsMap.getInteger("reductionId");
+            if (null == reductionId) {
+                return ResponseJson.error("分享减免id异常", null);
+            }
+            shareType = paramsMap.getInteger("shareType");
+            if (null == shareType) {
+                return ResponseJson.error("分享渠道异常", null);
+            }
+        } catch (Exception e) {
+            log.error("<<<<< 系统异常 >>>>>" + e);
+            return ResponseJson.error("数据异常", null);
+        }
         return orderSubmitService.shareReduction(userId, reductionId, shareType);
     }
 }

+ 92 - 0
src/main/java/com/caimei/mapper/CollageMapper.java

@@ -0,0 +1,92 @@
+package com.caimei.mapper;
+
+import com.caimei.model.po.*;
+import com.caimei.model.vo.CollageDetailsVo;
+import com.caimei.model.vo.CouponVo;
+import com.caimei.model.vo.ProductVo;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * Description
+ *
+ * @author : Aslee
+ * @date : 2021/12/23
+ */
+@Mapper
+public interface CollageMapper {
+
+    /**
+     * 查找拼团商品
+     * @param productID
+     * @return
+     */
+    CmHeheCollageProductPo findCollageProduct(Integer productID);
+
+    /**
+     * 新增拼团记录
+     * @param collage
+     */
+    void insertCollage(CmHeheCollagePo collage);
+
+    /**
+     * 获取拼团中的拼团
+     */
+    CmHeheCollagePo findCollage(Integer collageId);
+
+    /**
+     * 查找已拼成成员数量
+     */
+    Integer findCollageMemberNum(Integer collageId);
+
+    /**
+     * 插入拼团成员
+     * @param collageMember
+     */
+    void insertCollageMember(CmHeheCollageMemberPo collageMember);
+
+    /**
+     * 根据订单id查询拼团数据
+     * @param orderId
+     * @return
+     */
+    CmHeheCollagePo getCollageByOrderId(Integer orderId);
+
+    /**
+     * 拼主支付订单,实际建立拼团
+     * @param collage
+     */
+    void createCollage(CmHeheCollagePo collage);
+
+
+    /**
+     * 拼团详情
+     * @param collageId   拼团id
+     * @return
+     */
+    CollageDetailsVo getCollageDetails(Integer collageId);
+
+    /**
+     * 拼团完成
+     * @param collage
+     */
+    void completeCollage(CmHeheCollagePo collage);
+
+    /**
+     * 查找拼团未支付订单
+     * @param collageId
+     * @return
+     */
+    List<Integer> findNoPayCollageOrderIds(Integer collageId);
+
+    /**
+     * 查询拼团成员订单id
+     * @param collageId
+     * @param userId
+     * @return
+     */
+    Integer getMemberOrderId(@Param("collageId") Integer collageId,@Param("userId") Integer userId);
+}

+ 18 - 0
src/main/java/com/caimei/mapper/CouponMapper.java

@@ -6,7 +6,9 @@ import com.caimei.model.po.ReceiveCouponPo;
 import com.caimei.model.vo.*;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
+import org.springframework.web.bind.annotation.PostMapping;
 
+import java.math.BigDecimal;
 import java.util.Date;
 import java.util.List;
 
@@ -138,4 +140,20 @@ public interface CouponMapper {
      * @param couponSharePo
      */
     void insertCouponShare(CouponSharePo couponSharePo);
+
+    /**
+     * 根据优惠券id查询优惠券金额
+     * @param couponId
+     * @return
+     */
+    BigDecimal getCouponAmount(Integer couponId);
+
+    /**
+     * 获取用户手机号
+     * @param shareUserId
+     * @return
+     */
+    String getUserMobile(Integer shareUserId);
+
+    void updateSmsSendCount(@Param("markId") int markId, @Param("count") int count);
 }

+ 1 - 8
src/main/java/com/caimei/mapper/OrderMapper.java

@@ -188,7 +188,7 @@ public interface OrderMapper {
      *
      * @param orderId
      */
-    void cancelOrder(Integer orderId);
+    void cancelOrder(@Param("orderId") Integer orderId, @Param("reason") String reason);
 
     /**
      * 查询相关商品名称订单
@@ -292,11 +292,4 @@ public interface OrderMapper {
      * @param receiveCouponId
      */
     void revertCoupon(Integer receiveCouponId);
-
-    /**
-     * 拼团详情
-     * @param collageId   拼团id
-     * @return
-     */
-    CollageDetailsVo getCollageDetails(Integer collageId);
 }

+ 18 - 16
src/main/java/com/caimei/mapper/OrderSubmitMapper.java

@@ -155,31 +155,33 @@ public interface OrderSubmitMapper {
     void insertCouponOrderRecord(CouponOrderRecordPo orderRecord);
 
     /**
-     * 查找拼团商品
-     * @param productID
+     * 查找当前分享减免活动
      * @return
      */
-    CmHeheCollageProductPo findCollageProduct(Integer productID);
+    ReductionVo findCurrentReduction();
 
     /**
-     * 新增拼团记录
-     * @param collage
+     *查询已分享次数
+     * @return
      */
-    void insertCollage(CmHeheCollagePo collage);
-
-    CmHeheCollagePo findCollage(Integer collageId);
-
-    Integer findCollageMemberNum(Integer collageId);
-
-    void insertCollageMember(CmHeheCollageMemberPo collageMember);
-
-    ReductionVo findCurrentReduction();
-
     Integer findShareNum(@Param("userId") Integer userId, @Param("reductionId") Integer reductionId);
 
-    Integer insertReductionUser(@Param("userId") Integer userId, @Param("reductionId") Integer reductionId, @Param("shareType") Integer shareType);
+    /**
+     * 保存分享记录
+     * @return
+     */
+    void insertReductionUser(ReductionUserPo reductionUserPo);
 
+    /**
+     * 查找分享减免记录
+     * @return
+     */
     ReductionVo findReduction(Integer reductionUserId);
 
+    /**
+     * 分享减免关联订单id
+     * @return
+     */
     void updateReductionUserId(@Param("reductionUserId") Integer reductionUserId,@Param("orderId") Long orderId);
+
 }

+ 2 - 0
src/main/java/com/caimei/mapper/ProductMapper.java

@@ -217,4 +217,6 @@ public interface ProductMapper {
      * @return
      */
     CmHeheCollageProductPo findCollageProduct(Integer productID);
+
+    Integer findProductBuyNum(@Param("productId") Integer productId, @Param("userId") Integer userId);
 }

+ 11 - 1
src/main/java/com/caimei/model/po/CmHeheCollagePo.java

@@ -31,7 +31,7 @@ public class CmHeheCollagePo implements Serializable {
     private Integer memberNum;
 
     /**
-     * 拼团状态:1拼团中,已拼成
+     * 拼团状态:0拼团中(拼主未支付) 1拼团中,2已拼成
      */
     private Integer status;
 
@@ -44,4 +44,14 @@ public class CmHeheCollagePo implements Serializable {
      * 结束时间
      */
     private Date endTime;
+
+    /**
+     * 拼成时间
+     */
+    private Date completeTime;
+
+    /**
+     * 拼主标识:0不是,1是
+     */
+    private Integer launchFlag;
 }

+ 0 - 5
src/main/java/com/caimei/model/po/CmHeheCollageProductPo.java

@@ -37,9 +37,4 @@ public class CmHeheCollageProductPo implements Serializable {
      * 拼团人数
      */
     private Integer memberNum;
-
-    /**
-     * 商品状态:0已下架,1已上架
-     */
-    private Integer status;
 }

+ 37 - 0
src/main/java/com/caimei/model/po/ReductionUserPo.java

@@ -0,0 +1,37 @@
+package com.caimei.model.po;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * ReductionVo
+ *
+ * @author : Aslee
+ * @date : 2021/12/20
+ */
+@Data
+public class ReductionUserPo implements Serializable {
+    /**
+     * 分享减免id
+     */
+    private Integer reductionId;
+
+    /**
+     * 机构用户id
+     */
+    private Integer userId;
+
+    /**
+     * 分享类型
+     */
+    private Integer shareType;
+
+    /**
+     * 分享减免用户id
+     */
+    private Integer reductionUserId;
+
+    private static final long serialVersionUID = 1L;
+}

+ 15 - 0
src/main/java/com/caimei/model/vo/CollageDetailsVo.java

@@ -19,6 +19,16 @@ public class CollageDetailsVo implements Serializable {
      */
     private Integer collageId;
 
+    /**
+     * 商品id
+     */
+    private Integer productId;
+
+    /**
+     * 订单id
+     */
+    private Integer orderId;
+
     /**
      * 商品图片
      */
@@ -58,4 +68,9 @@ public class CollageDetailsVo implements Serializable {
      * 拼团结束时间
      */
     private Date endTime;
+
+    /**
+     * 规格
+     */
+    private String unit;
 }

+ 5 - 0
src/main/java/com/caimei/model/vo/CouponVo.java

@@ -45,6 +45,11 @@ public class CouponVo implements Serializable {
      */
     private Integer noThresholdFlag;
 
+    /**
+     * 永久可领取标识:true是,false否
+     */
+    private Boolean permanentFlag;
+
     /**
      * 劵类型 1活动券 2专享券 3新人券 4好友分享券 5好友消费券
      */

+ 5 - 0
src/main/java/com/caimei/model/vo/OrderProductVo.java

@@ -254,5 +254,10 @@ public class OrderProductVo implements Serializable {
      */
     private String includedTaxFlag;
 
+    /**
+     * 拼团价标识,1拼团价
+     */
+    private Integer collagePriceFlag;
+
     private static final long serialVersionUID = 1L;
 }

+ 5 - 0
src/main/java/com/caimei/model/vo/OrderVo.java

@@ -254,5 +254,10 @@ public class OrderVo implements Serializable {
      */
     private Integer collageStatus;
 
+    /**
+     * 分享减免金额
+     */
+    private BigDecimal reductionAmount;
+
     private static final long serialVersionUID = 1L;
 }

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

@@ -24,6 +24,11 @@ public class ProductVo implements Serializable {
      */
     private String recommend;
 
+    /**
+     * 市场价
+     */
+    private BigDecimal normalPrice;
+
     /**
      * 售价
      */

+ 2 - 1
src/main/java/com/caimei/service/OrderService.java

@@ -126,8 +126,9 @@ public interface OrderService {
 
     /**
      * 拼团详情
+     *
      * @param collageId
      * @return
      */
-    ResponseJson<CollageDetailsVo> collageDetails(Integer collageId);
+    ResponseJson<CollageDetailsVo> collageDetails(Integer collageId, Integer userId);
 }

+ 2 - 1
src/main/java/com/caimei/service/OrderSubmitService.java

@@ -21,9 +21,10 @@ public interface OrderSubmitService {
      * @param productId    立即购买商品ID
      * @param productCount 立即购买商品数量
      * @param heUserId       用户id。
+     * @param collageFlag
      * @return
      */
-    ResponseJson<Map<String, Object>> orderConfirm(Integer userId, String cartIds, Integer productId, Integer productCount, Integer heUserId);
+    ResponseJson<Map<String, Object>> orderConfirm(Integer userId, String cartIds, Integer productId, Integer productCount, Integer heUserId, Integer collageFlag);
 
     /**
      * 提交订单

+ 1 - 1
src/main/java/com/caimei/service/ShoppingCartService.java

@@ -56,7 +56,7 @@ public interface ShoppingCartService {
     /**
      * 设置活动价格阶梯
      */
-    void setPrice(CartProductVo product, Integer userId);
+    void setPrice(CartProductVo product, Integer userId, Integer collageFlag);
 
     /**
      * 再次购买,一键加入购物车

+ 37 - 4
src/main/java/com/caimei/service/impl/OrderServiceImpl.java

@@ -1,12 +1,15 @@
 package com.caimei.service.impl;
 
 import com.alibaba.fastjson.JSONArray;
+import com.caimei.mapper.CollageMapper;
 import com.caimei.mapper.OrderMapper;
+import com.caimei.mapper.ProductMapper;
 import com.caimei.model.ResponseJson;
 import com.caimei.model.po.CmPayShopRecordPo;
 import com.caimei.model.po.UserSearchHistoryPo;
 import com.caimei.model.vo.*;
 import com.caimei.service.OrderService;
+import com.caimei.service.ProductService;
 import com.caimei.service.ShoppingCartService;
 import com.caimei.util.MathUtil;
 import com.caimei.util.ProductUtils;
@@ -35,7 +38,11 @@ public class OrderServiceImpl implements OrderService {
     @Resource
     private OrderMapper orderMapper;
     @Resource
-    private ShoppingCartService shoppingCartService;
+    private CollageMapper collageMapper;
+    @Resource
+    private ProductMapper productMapper;
+    @Resource
+    private ProductService productService;
     @Value("${caimei.oldapi}")
     private String domain;
 
@@ -62,6 +69,21 @@ public class OrderServiceImpl implements OrderService {
             if ("7".equals(order.getStatus()) && batchList != null && batchList.size() > 0) {
                 order.setStatus("77");
             }
+            //部分付款/已付款订单,设置拼团状态
+            if ((order.getStatus().startsWith("2") || order.getStatus().startsWith("3")) && null != order.getCollageStatus()) {
+                if (1 == order.getCollageStatus()) {
+                    // 拼团中
+                    order.setStatus("81");
+                } else if (2 == order.getCollageStatus()) {
+                    if (order.getStatus().endsWith("1") || order.getStatus().endsWith("2")) {
+                        // 拼团成功,待发货
+                        order.setStatus("82");
+                    } else if (order.getStatus().endsWith("3")) {
+                        // 拼团成功,已发货
+                        order.setStatus("83");
+                    }
+                }
+            }
             List<ShopOrderVo> shopOrderList = orderMapper.findAllShopOrder(order.getOrderId());
             for (ShopOrderVo shopOrder : shopOrderList) {
                 List<OrderProductVo> orderProductList = orderMapper.findOrderProduct(shopOrder.getShopOrderId());
@@ -73,6 +95,9 @@ public class OrderServiceImpl implements OrderService {
                         orderProduct.setPrice(MathUtil.add(orderProduct.getPrice(), valueTax));
                         orderProduct.setDiscountPrice(MathUtil.add(orderProduct.getPrice(), orderProduct.getAddedValueTax()));
                     }
+                    if (order.getStatus().startsWith("8")) {
+                        orderProduct.setCollagePriceFlag(1);
+                    }
                 }
                 shopOrder.setOrderProductList(orderProductList);
                 shopOrder.setShopLogo(ProductUtils.getImageURL("shopLogo", shopOrder.getShopLogo(), 0, domain));
@@ -265,7 +290,7 @@ public class OrderServiceImpl implements OrderService {
             return ResponseJson.error("订单异常", null);
         }
         order.setStatus("6");
-        orderMapper.cancelOrder(orderId);
+        orderMapper.cancelOrder(orderId,"用户主动取消订单");
         Integer receiveCouponId = orderMapper.findOrderCoupon(orderId);
         //取消订单回退优惠券
         orderMapper.revertCoupon(receiveCouponId);
@@ -378,8 +403,16 @@ public class OrderServiceImpl implements OrderService {
     }
 
     @Override
-    public ResponseJson<CollageDetailsVo> collageDetails(Integer collageId) {
-        CollageDetailsVo collageDetails = orderMapper.getCollageDetails(collageId);
+    public ResponseJson<CollageDetailsVo> collageDetails(Integer collageId, Integer userId) {
+        CollageDetailsVo collageDetails = collageMapper.getCollageDetails(collageId);
+        if (null != userId && userId > 0) {
+            Integer orderId = collageMapper.getMemberOrderId(collageId, userId);
+            collageDetails.setOrderId(orderId);
+            ProductDetailsVo product = productMapper.findProductByProductId(collageDetails.getProductId());
+            productService.setProductDetails(product, userId);
+            collageDetails.setPrice(product.getPrice());
+            collageDetails.setUnit(product.getUnit());
+        }
         return ResponseJson.success(collageDetails);
     }
 

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

@@ -1,5 +1,6 @@
 package com.caimei.service.impl;
 
+import com.caimei.mapper.CollageMapper;
 import com.caimei.mapper.CouponMapper;
 import com.caimei.mapper.OrderSubmitMapper;
 import com.caimei.mapper.ProductMapper;
@@ -42,11 +43,13 @@ public class OrderSubmitServiceImpl implements OrderSubmitService {
     private ProductMapper productMapper;
     @Resource
     private CouponMapper couponMapper;
+    @Resource
+    private CollageMapper collageMapper;
     @Value("${caimei.oldapi}")
     private String domain;
 
     @Override
-    public ResponseJson<Map<String, Object>> orderConfirm(Integer userId, String cartIds, Integer productId, Integer productCount, Integer heUserId) {
+    public ResponseJson<Map<String, Object>> orderConfirm(Integer userId, String cartIds, Integer productId, Integer productCount, Integer heUserId, Integer collageFlag) {
         Map<String, Object> confirmData = new HashMap<>(5);
         log.info("<<<<< 结算订单 >>>>>");
         //商品总金额
@@ -74,7 +77,7 @@ public class OrderSubmitServiceImpl implements OrderSubmitService {
             }
             BigDecimal shopTotalPrice = BigDecimal.ZERO;
             for (CartProductVo product : shopProducts) {
-                shoppingCartService.setPrice(product, userId);
+                shoppingCartService.setPrice(product, userId, collageFlag);
                 shopTotalPrice = MathUtil.add(shopTotalPrice, MathUtil.mul(product.getProductCount(), product.getPrice()));
             }
             shop.setShopTotalPrice(shopTotalPrice);
@@ -125,10 +128,12 @@ public class OrderSubmitServiceImpl implements OrderSubmitService {
         });
         // 可参与的分享减免活动
         ReductionVo currentReduction = orderSubmitMapper.findCurrentReduction();
+        confirmData.put("reduction", null);
         if (null != currentReduction) {
-            // 查询分享次数
+            // 查询分享次数
             Integer shareNum = orderSubmitMapper.findShareNum(userId, currentReduction.getReductionId());
-            if (shareNum < currentReduction.getShareNum()) {
+            if ((null == collageFlag || 0 == collageFlag) && shareNum < currentReduction.getShareNum() && MathUtil.compare(totalPrice.get(), currentReduction.getTouchPrice()) > 0) {
+                // 有剩余分享次数且订单金额大于分享条件金额
                 confirmData.put("reduction", currentReduction);
             }
         }
@@ -335,7 +340,7 @@ public class OrderSubmitServiceImpl implements OrderSubmitService {
         // 处理分享减免
         BigDecimal reductionAmount = BigDecimal.ZERO;
         Integer reductionUserId = (Integer) discountInfo.get("reductionUserId");
-        if (null != reductionUserId) {
+        if (null != reductionUserId && 0 != reductionUserId) {
             // 分享减免活动
             ReductionVo reductionVo = orderSubmitMapper.findReduction(reductionUserId);
             if (null != reductionVo) {
@@ -534,29 +539,23 @@ public class OrderSubmitServiceImpl implements OrderSubmitService {
             CmHeheCollageMemberPo collageMember = new CmHeheCollageMemberPo();
             collageMember.setUserId(userId);
             collageMember.setOrderId(order.getOrderID());
-            if (collageId == null) {
+            if (collageId == null || collageId == 0) {
                 // 拼团发起者,构建拼团记录
                 CmHeheCollagePo collage = new CmHeheCollagePo();
                 CmOrderProductPo orderProductPo = orderProductList.get(0);
-                CmHeheCollageProductPo collageProduct = orderSubmitMapper.findCollageProduct(orderProductPo.getProductID());
+                CmHeheCollageProductPo collageProduct = collageMapper.findCollageProduct(orderProductPo.getProductID());
                 collage.setProductId(collageProduct.getProductId());
                 collage.setMemberNum(collageProduct.getMemberNum());
                 collage.setPrice(collageProduct.getPrice());
-                collage.setStatus(1);
-                Date startTime = new Date();
-                collage.setStartTime(startTime);
-                Calendar calendar = Calendar.getInstance();
-                calendar.setTime(startTime);
-                calendar.add(Calendar.DAY_OF_MONTH, 1);
-                collage.setEndTime(calendar.getTime());
-                orderSubmitMapper.insertCollage(collage);
+                collage.setStatus(0);
+                collageMapper.insertCollage(collage);
                 collageId = collage.getId();
                 collageMember.setLaunchFlag(1);
             } else {
-                // 已拼人数
-                Integer memberNum = orderSubmitMapper.findCollageMemberNum(collageId);
-                CmHeheCollagePo collage = orderSubmitMapper.findCollage(collageId);
-                if (collage != null && 2 != collage.getStatus() && memberNum < collage.getMemberNum()) {
+                // 已拼且已支付人数
+                Integer memberNum = collageMapper.findCollageMemberNum(collageId);
+                CmHeheCollagePo collage = collageMapper.findCollage(collageId);
+                if (collage != null && memberNum < collage.getMemberNum()) {
                     // 参加拼团
                     collageMember.setLaunchFlag(0);
                 } else {
@@ -566,7 +565,7 @@ public class OrderSubmitServiceImpl implements OrderSubmitService {
                 }
             }
             collageMember.setCollageId(collageId);
-            orderSubmitMapper.insertCollageMember(collageMember);
+            collageMapper.insertCollageMember(collageMember);
         }
 
         /**
@@ -593,17 +592,18 @@ public class OrderSubmitServiceImpl implements OrderSubmitService {
 
     @Override
     public ResponseJson<Integer> shareReduction(Integer userId, Integer reductionId, Integer shareType) {
-        if (null == userId || null == reductionId || null == shareType) {
-            return ResponseJson.error("参数异常", null);
-        }
         // 可参与的分享减免活动
         ReductionVo currentReduction = orderSubmitMapper.findCurrentReduction();
         if (null != currentReduction) {
             // 查询分享次数
             Integer shareNum = orderSubmitMapper.findShareNum(userId, currentReduction.getReductionId());
             if (shareNum <= currentReduction.getShareNum()) {
-                Integer reductionUserId = orderSubmitMapper.insertReductionUser(userId, reductionId, shareType);
-                return ResponseJson.success("分享成功", reductionUserId);
+                ReductionUserPo reductionUserPo = new ReductionUserPo();
+                reductionUserPo.setUserId(userId);
+                reductionUserPo.setReductionId(reductionId);
+                reductionUserPo.setShareType(shareType);
+                orderSubmitMapper.insertReductionUser(reductionUserPo);
+                return ResponseJson.success("分享成功", reductionUserPo.getReductionUserId());
             } else {
                 return ResponseJson.error("分享次数超限", null);
             }

+ 52 - 3
src/main/java/com/caimei/service/impl/PayOrderServiceImpl.java

@@ -2,14 +2,13 @@ package com.caimei.service.impl;
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
-import com.caimei.mapper.CouponMapper;
-import com.caimei.mapper.OrderMapper;
-import com.caimei.mapper.PayOrderMapper;
+import com.caimei.mapper.*;
 import com.caimei.model.ResponseJson;
 import com.caimei.model.dto.PaymentDto;
 import com.caimei.model.po.*;
 import com.caimei.model.vo.*;
 import com.caimei.service.PayOrderService;
+import com.caimei.util.HttpRequest;
 import com.caimei.util.MathUtil;
 import com.caimei.util.PayUtils;
 import lombok.extern.slf4j.Slf4j;
@@ -38,10 +37,15 @@ public class PayOrderServiceImpl implements PayOrderService {
     private OrderMapper orderMapper;
     @Resource
     private CouponMapper couponMapper;
+    @Resource
+    private CollageMapper collageMapper;
 
     @Value("${caimei.delayedSplittingUrl}")
     private String delayedSplittingUrl;
 
+    @Value("${caimei.userUrl}")
+    private String userUrl;
+
     /**
      * 商户标识
      */
@@ -223,8 +227,53 @@ public class PayOrderServiceImpl implements PayOrderService {
                 couponIds.forEach(couponId->{
                     couponShare.setShareCouponId(couponId);
                     couponMapper.insertCouponShare(couponShare);
+                    BigDecimal couponAmount = couponMapper.getCouponAmount(couponId);
+                    HashMap<String, Object> map = new HashMap<>();
+                    String mobile = couponMapper.getUserMobile(couponShare.getShareUserId());
+                    String content = "恭喜您邀请的好友已成功消费一笔订单,现赠送" + couponAmount + "元优惠券到您的领券中心,请赶紧登录呵呵商城小程序领取下单吧。退订回T";
+                    map.put("type", 3);
+                    map.put("mobile", mobile);
+                    map.put("content", content);
+                    String url = userUrl + "/tools/sms/send";
+                    try {
+                        String result = HttpRequest.sendPost(url, map);
+                        log.info("【呵呵好友消费券派送】mobile:" + mobile + ",result:" + result);
+                        // 保存短信发送条数+count
+                        couponMapper.updateSmsSendCount(19, 1);
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                    }
                 });
             }
+            // 拼团数据更新
+            CmHeheCollagePo collage = collageMapper.getCollageByOrderId(orderId);
+            if (null != collage) {
+                if (1 == collage.getLaunchFlag()) {
+                    // 拼团发起人支付订单,正式建立拼团
+                    collage.setStatus(1);
+                    Date startTime = new Date();
+                    collage.setStartTime(startTime);
+                    Calendar calendar = Calendar.getInstance();
+                    calendar.setTime(startTime);
+                    calendar.add(Calendar.DAY_OF_MONTH, 1);
+                    collage.setEndTime(calendar.getTime());
+                    collageMapper.createCollage(collage);
+                } else {
+                    // 已拼且已支付人数
+                    Integer memberNum = collageMapper.findCollageMemberNum(collage.getId());
+                    if (memberNum + 1 == collage.getMemberNum()) {
+                        // 拼团成功
+                        collage.setStatus(2);
+                        collage.setCompleteTime(new Date());
+                        collageMapper.completeCollage(collage);
+                        // 关闭其它未支付拼团订单
+                        List<Integer> orderIdList = collageMapper.findNoPayCollageOrderIds(collage.getId());
+                        orderIdList.forEach(noPayOrderId->{
+                            orderMapper.cancelOrder(noPayOrderId, "拼团完成关闭其它未支付拼团订单");
+                        });
+                    }
+                }
+            }
         } else {
             //部分支付
             if ("11".equals(order.getStatus()) || "21".equals(order.getStatus())) {

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

@@ -79,12 +79,22 @@ public class ProductServiceImpl implements ProductService {
                 product.setPrice(1 == ladder.getBuyNum() ? ladder.getBuyPrice() : product.getPrice());
             }
         } else if (collageProduct != null) {
+            product.setNormalPrice(product.getPrice());
+            product.setPrice(collageProduct.getPrice());
             product.setCollageStatus(1);
             product.setCollageProduct(collageProduct);
+            if (collageProduct.getUnlimitedFlag() == 0) {
+                // 设置拼团商品可购买数量
+                Integer productBuyNum = productMapper.findProductBuyNum(product.getProductId(), userId);
+                collageProduct.setLimitedNum(collageProduct.getLimitedNum() - productBuyNum);
+            }
         }
         Integer discount = productMapper.findProductDiscount(product.getProductId(), userId);
         if (null != discount && discount > 0) {
             product.setPrice(MathUtil.div(MathUtil.mul(product.getPrice(), discount), 100));
+            if (null != product.getNormalPrice()) {
+                product.setNormalPrice(MathUtil.div(MathUtil.mul(product.getNormalPrice(), discount), 100));
+            }
         }
         //税费
         boolean addTaxFlag = ("0".equals(product.getIncludedTax()) && ("1".equals(product.getInvoiceType()) || "2".equals(product.getInvoiceType())));
@@ -92,6 +102,11 @@ public class ProductServiceImpl implements ProductService {
             BigDecimal addedValueTax = MathUtil.div(MathUtil.mul(product.getPrice(), product.getClubTaxPoint()), BigDecimal.valueOf(100), 2);
             BigDecimal price = MathUtil.add(product.getPrice(), addedValueTax);
             product.setPrice(price);
+            if (null != product.getNormalPrice()) {
+                addedValueTax = MathUtil.div(MathUtil.mul(product.getNormalPrice(), product.getClubTaxPoint()), BigDecimal.valueOf(100), 2);
+                price = MathUtil.add(product.getNormalPrice(), addedValueTax);
+                product.setNormalPrice(price);
+            }
         }
         // 正在进行的全商城商品优惠券数量
         Integer allCount = productMapper.findAllProductCouponCount();

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

@@ -68,7 +68,7 @@ public class ShoppingCartServiceImpl implements ShoppingCartService {
             BigDecimal shopTotalPrice = BigDecimal.ZERO;
             List<CartProductVo> productList = shoppingCartMapper.findByShopCartProduct(shop.getShopId(), userId);
             for (CartProductVo product : productList) {
-                setPrice(product, userId);
+                setPrice(product, userId, null);
                 shopTotalPrice = MathUtil.add(shopTotalPrice, MathUtil.mul(product.getProductCount(), product.getPrice()));
             }
             shop.setShopTotalPrice(shopTotalPrice);
@@ -88,7 +88,7 @@ public class ShoppingCartServiceImpl implements ShoppingCartService {
      * 设置活动价格阶梯
      */
     @Override
-    public void setPrice(CartProductVo product, Integer userId) {
+    public void setPrice(CartProductVo product, Integer userId, Integer collageFlag) {
         //税费
         boolean addTaxFlag = ("0".equals(product.getIncludedTax()) && ("1".equals(product.getInvoiceType()) || "2".equals(product.getInvoiceType())));
         // 活动id
@@ -107,7 +107,7 @@ public class ShoppingCartServiceImpl implements ShoppingCartService {
                 }
             }
             product.setLadderList(ladderList);
-        } else if (null != collageProduct) {
+        } else if (null != collageProduct && null != collageFlag && 1 == collageFlag) {
             product.setCollageStatus(1);
             product.setPrice(collageProduct.getPrice());
         }

+ 63 - 0
src/main/resources/mapper/CollageMapper.xml

@@ -0,0 +1,63 @@
+<?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.CollageMapper">
+    <update id="createCollage">
+        update cm_hehe_collage
+        set status    = #{status},
+            startTime = #{startTime},
+            endTime   = #{endTime}
+        where id = #{id}
+    </update>
+    <update id="completeCollage">
+        update cm_hehe_collage
+        set status       = #{status},
+            completeTime = #{completeTime}
+        where id = #{id}
+    </update>
+
+    <insert id="insertCollage" useGeneratedKeys="true" keyProperty="id" keyColumn="id" parameterType="com.caimei.model.po.CmHeheCollagePo">
+        insert into cm_hehe_collage (productId, price, memberNum, status, startTime, completeTime, endTime)
+        values (#{productId}, #{price}, #{memberNum}, #{status}, null, null, null)
+    </insert>
+    <insert id="insertCollageMember">
+        insert into cm_hehe_collage_member (collageId, userId, orderId, launchFlag) values (#{collageId}, #{userId}, #{orderId}, #{launchFlag})
+    </insert>
+
+    <select id="findCollageProduct" resultType="com.caimei.model.po.CmHeheCollageProductPo">
+        select chcp.productid, chcp.price, chcp.limitednum, chcp.unlimitedflag, chcp.membernum, chcp.status
+        from cm_hehe_collage_product chcp
+        where chcp.productId = #{productID} and chcp.status = 1
+    </select>
+    <select id="findCollage" resultType="com.caimei.model.po.CmHeheCollagePo">
+        select id, productId, price, memberNum, status, startTime, completeTime, endTime
+        from cm_hehe_collage where id = #{collageId} and status = 1
+    </select>
+    <select id="findCollageMemberNum" resultType="java.lang.Integer">
+        select count(*) from cm_hehe_collage_member chcm left join cm_order co on chcm.orderId = co.orderID
+        where collageId = #{collageId} and co.receiptStatus = 3
+    </select>
+    <select id="getCollageByOrderId" resultType="com.caimei.model.po.CmHeheCollagePo">
+        select chc.id,chcm.launchFlag,chc.memberNum from cm_hehe_collage chc left join cm_hehe_collage_member chcm on chc.id = chcm.collageId
+        where chcm.orderId = #{orderId}
+    </select>
+    <select id="getCollageDetails" resultType="com.caimei.model.vo.CollageDetailsVo">
+        select chc.id as collageId,chc.productId, p.mainImage as productImage,p.name as productName,chc.price,chp.price as normalPrice,
+               chc.memberNum,count(chcm.id) as existNum,(chc.memberNum-count(chcm.id)) as needNum,
+               chc.endTime
+        from cm_hehe_collage chc
+                 left join cm_hehe_collage_member chcm on chc.id = chcm.collageId
+                 left join cm_hehe_collage_product chcp on chc.productId = chcp.productId
+                 left join product p on chcp.productId = p.productID
+                 left join cm_hehe_product chp on p.productID = chp.productId
+        where chc.id = #{collageId}
+    </select>
+    <select id="findNoPayCollageOrderIds" resultType="java.lang.Integer">
+        select co.orderID from cm_hehe_collage_member chcm left join cm_order co on chcm.orderId = co.orderID
+        where co.receiptStatus = 1 and chcm.collageId = #{collageId}
+    </select>
+    <select id="getMemberOrderId" resultType="java.lang.Integer">
+        select orderId from cm_hehe_collage_member where collageId = #{collageId} and userId = #{userId}
+    </select>
+</mapper>

+ 9 - 0
src/main/resources/mapper/CouponMapper.xml

@@ -15,6 +15,9 @@
         insert into cm_hehe_coupon_share (shareUserId, receiveUserId, type, shareCouponId, createTime)
         values (#{shareUserId}, #{receiveUserId}, 2, #{shareCouponId}, NOW())
     </insert>
+    <update id="updateSmsSendCount">
+        UPDATE cm_sms_statistics SET sendNum = (sendNum + #{count}) WHERE markId = #{markId}
+    </update>
     <select id="getCouponCount" resultType="java.lang.Integer">
         select count(*) from cm_hehe_coupon
         where couponType = #{couponType}
@@ -214,5 +217,11 @@
         select id, shareUserId, receiveUserId, shareCouponId
         from cm_hehe_coupon_share where receiveUserId = #{receiveUserId} and type = 1
     </select>
+    <select id="getCouponAmount" resultType="java.math.BigDecimal">
+        select couponAmount from cm_hehe_coupon where id = #{couponId}
+    </select>
+    <select id="getUserMobile" resultType="java.lang.String">
+        select mobile from cm_hehe_user where userId = #{shareUserId}
+    </select>
 
 </mapper>

+ 16 - 17
src/main/resources/mapper/OrderMapper.xml

@@ -36,7 +36,8 @@
           co.couponAmount,
           co.paySuccessCounter,
           co.closeReason,
-          if(chc.id is not null,true,false) as collageFlag,
+          co.reductionAmount,
+          if(chcm.id is not null,true,false) as collageFlag,
           chc.id as collageId,
           chc.status as collageStatus
     </sql>
@@ -52,16 +53,16 @@
             AND co.userID = #{userId}
         </if>
         <if test="orderState == 1 ">
-            AND co.status IN(11,12,13,21,22,23) AND chcm.id is null
+            AND co.status IN(11,12,13,21,22,23)
         </if>
         <if test="orderState == 2 ">
             AND co.status IN(11,12,21,22,31,32)
         </if>
         <if test="orderState == 3 ">
-            AND co.status IN(12,13,22,23,32,33) AND chcm.id is null
+            AND co.status IN(12,13,22,23,32,33)
         </if>
         <if test="orderState == 4 ">
-            AND co.refundType IN(1,2) AND chcm.id is null
+            AND co.refundType IN(1,2)
         </if>
         <if test="orderState == 5">
             AND chcm.id is not null and chc.status = 1
@@ -186,6 +187,8 @@
           <include refid="cm_Order_List"></include>
         FROM
           cm_order co
+        left join cm_hehe_collage_member chcm on co.orderID = chcm.orderId
+        left join cm_hehe_collage chc on chcm.collageId = chc.id
         WHERE
           co.orderID = #{orderID}
           AND co.delFlag = '0'
@@ -373,7 +376,7 @@
         SET
           STATUS = 6,
           updateDate = NOW(),
-          closeReason = '用户主动取消订单',
+          closeReason = #{reason},
           closeTime = NOW()
         WHERE
           orderID = #{orderId}
@@ -384,7 +387,9 @@
           <include refid="cm_Order_List"></include>
         FROM
           cm_order co
-          LEFT JOIN cm_order_product cop ON co.orderID = cop.orderID
+        LEFT JOIN cm_order_product cop ON co.orderID = cop.orderID
+        left join cm_hehe_collage_member chcm on co.orderID = chcm.orderId
+        left join cm_hehe_collage chc on chcm.collageId = chc.id
         WHERE
           co.userID = #{userId}
           AND co.delFlag = '0'
@@ -489,6 +494,8 @@
         FROM
           cm_order co
           LEFT JOIN cm_order_product cop ON co.orderID = cop.orderID
+        left join cm_hehe_collage_member chcm on co.orderID = chcm.orderId
+        left join cm_hehe_collage chc on chcm.collageId = chc.id
         WHERE
           co.delFlag = '0'
           AND co.orderType = 2
@@ -517,6 +524,9 @@
         <if test="orderState == 4 ">
             AND co.refundType IN(1,2)
         </if>
+        <if test="orderState == 5">
+            AND chcm.id is not null and chc.status = 1
+        </if>
         <if test="searchWord != null and searchWord != ''">
             AND cop.name LIKE CONCAT('%',#{searchWord},'%')
         </if>
@@ -545,15 +555,4 @@
     <select id="findOrderCoupon" resultType="java.lang.Integer">
         select receiveCouponId from cm_hehe_coupon_order_record where orderId = #{orderId}
     </select>
-    <select id="getCollageDetails" resultType="com.caimei.model.vo.CollageDetailsVo">
-        select chc.id as collageId, p.mainImage as productImage,p.name as productName,chc.price,chp.price as normalPrice,
-               chc.memberNum,count(chcm.id) as existNum,(chc.memberNum-count(chcm.id)) as needNum,
-               chc.endTime
-        from cm_hehe_collage chc
-            left join cm_hehe_collage_member chcm on chc.id = chcm.collageId
-            left join cm_hehe_collage_product chcp on chc.productId = chcp.productId
-            left join product p on chcp.productId = p.productID
-            left join cm_hehe_product chp on p.productID = chp.productId
-        where chc.id = #{collageId}
-    </select>
 </mapper>

+ 2 - 21
src/main/resources/mapper/OrderSubmitMapper.xml

@@ -1530,14 +1530,7 @@
         INSERT INTO cm_hehe_coupon_order_record (orderId, receiveCouponId, couponType, couponAmount, touchPrice, createDate)
         VALUES (#{orderId}, #{receiveCouponId}, #{couponType}, #{couponAmount}, #{touchPrice}, #{createDate})
     </insert>
-    <insert id="insertCollage" useGeneratedKeys="true" keyProperty="id" keyColumn="id" parameterType="com.caimei.model.po.CmHeheCollagePo">
-        insert into cm_hehe_collage (productId, price, memberNum, status, startTime, completeTime, endTime)
-        values (#{productId}, #{price}, #{memberNum}, #{status}, #{startTime}, #{completeTime}, #{endTime})
-    </insert>
-    <insert id="insertCollageMember">
-        insert into cm_hehe_collage_member (collageId, userId, orderId, launchFlag) values (#{collageId}, #{userId}, #{orderId}, #{launchFlag})
-    </insert>
-    <insert id="insertReductionUser" useGeneratedKeys="true" keyColumn="id">
+    <insert id="insertReductionUser" keyColumn="id" keyProperty="reductionUserId" parameterType="com.caimei.model.po.ReductionUserPo" useGeneratedKeys="true">
         insert into cm_hehe_reduction_user (userId, reductionId, shareType, shareTime)
         values (#{userId}, #{reductionId}, #{shareType}, NOW())
     </insert>
@@ -1599,18 +1592,6 @@
             #{cartId}
         </foreach>
     </select>
-    <select id="findCollageProduct" resultType="com.caimei.model.po.CmHeheCollageProductPo">
-        select chcp.productid, chcp.price, chcp.limitednum, chcp.unlimitedflag, chcp.membernum, chcp.status
-        from cm_hehe_collage_product chcp
-        where chcp.productId = #{productID} and chcp.status = 1
-    </select>
-    <select id="findCollage" resultType="com.caimei.model.po.CmHeheCollagePo">
-        select id, productId, price, memberNum, status, startTime, completeTime, endTime
-        from cm_hehe_collage where id = #{collageId} and status = 1
-    </select>
-    <select id="findCollageMemberNum" resultType="java.lang.Integer">
-        select count(*) from cm_hehe_collage_member where collageId = #{collageId}
-    </select>
     <select id="findCurrentReduction" resultType="com.caimei.model.vo.ReductionVo">
         select id as reductionId, reducedAmount, touchPrice, shareNum
         from cm_hehe_reduction where NOW() <![CDATA[  >=  ]]> startTime and NOW() <![CDATA[  <=  ]]> endTime
@@ -1622,7 +1603,7 @@
           and reductionId = #{reductionId}
     </select>
     <select id="findReduction" resultType="com.caimei.model.vo.ReductionVo">
-        select chr.id as reductionId, reducedAmount, touchPrice from cm_hehe_reduction chr
+        select chr.id as reductionId, reducedAmount, chhtouchPrice from cm_hehe_reduction chr
             left join cm_hehe_reduction_user chru on chr.id = chru.reductionId
         where chru.id = #{reductionUserId} and chru.orderId is null
     </select>

+ 7 - 1
src/main/resources/mapper/ProductMapper.xml

@@ -312,9 +312,15 @@
         limit 1
     </select>
     <select id="findCollageProduct" resultType="com.caimei.model.po.CmHeheCollageProductPo">
-        select chcp.productid, chcp.price, chcp.limitednum, chcp.unlimitedflag, chcp.membernum, chcp.status
+        select chcp.productId, chcp.price, chcp.limitedNum, chcp.unlimitedFlag, chcp.memberNum
         from cm_hehe_collage_product chcp
         where chcp.productId = #{productID} and chcp.status = 1
     </select>
+    <select id="findProductBuyNum" resultType="java.lang.Integer">
+        select count(cop.num) from cm_hehe_collage_member chcm
+            left join cm_hehe_collage chc on chcm.collageId = chc.id
+            left join cm_order_product cop on chcm.orderId = cop.orderID
+        where chc.productId = #{productId} and chcm.userId = #{userId}
+    </select>
 
 </mapper>