瀏覽代碼

保存订单使用优惠券

chao 3 年之前
父節點
當前提交
1bc4baac1a

+ 4 - 3
src/main/java/com/caimei365/order/controller/OrderSubmitApi.java

@@ -32,12 +32,13 @@ public class OrderSubmitApi {
      * 生成订单
      *
      * @param submitDto {
+     *                  "clubId": 10708,            //机构ID
      *                  "unionId":"",               //微信unionId
-     *                  "cartType":3,               //购买类型:(1自主下单, 3协销下单)
+     *                  "addressId": 2732,          //地址ID
      *                  "orderSource": 2,           //订单来源:1WWW、2CRM、4客服[适用后台下单]、5外单[适用后台下单]、6小程序[采美,星范]、7呵呵商城小程序、8维沙小程序
+     *                  "cartType":3,               //购买类型:(1自主下单, 3协销下单)
      *                  "serviceProviderId": 1378,  //协销ID(小程序忽略)
-     *                  "clubUserId": 10708,        //机构用户ID
-     *                  "addressId": 2732,          //地址ID
+     *                  "clubCouponId": ""          //优惠券Id
      *                  "orderInfo": [              //【订单商品】
      *                      { "shopId":1001,                         // 供应商Id
      *                          "note":备注,

+ 4 - 1
src/main/java/com/caimei365/order/mapper/OrderClubMapper.java

@@ -171,5 +171,8 @@ public interface OrderClubMapper {
      * 保存分享码使用记录
      */
     void insertOrderShareCodeRecord(OrderShareCodeRecordVo codeRecord);
-
+    /**
+     * 修改优惠券使用情况
+     */
+    void updateCouponClubStatus(Integer clubCouponId, Integer orderId);
 }

+ 9 - 0
src/main/java/com/caimei365/order/mapper/SubmitMapper.java

@@ -3,6 +3,7 @@ package com.caimei365.order.mapper;
 import com.caimei365.order.model.bo.OrderParamBo;
 import com.caimei365.order.model.po.*;
 import com.caimei365.order.model.vo.AddressVo;
+import com.caimei365.order.model.vo.CouponVo;
 import com.caimei365.order.model.vo.LadderPriceVo;
 import com.caimei365.order.model.vo.PromotionsVo;
 import org.apache.ibatis.annotations.Mapper;
@@ -92,4 +93,12 @@ public interface SubmitMapper {
      * 保存 订单用户地址
      */
     void insertOrderUserInfo(OrderUserInfoPo userInfo);
+    /**
+     * 根据clubCouponId获取优惠券
+     */
+    CouponVo getClubCouponById(Integer clubCouponId);
+    /**
+     * 保存订单优惠记录
+     */
+    void insertCouponOrderRecord(CouponOrderRecordPo orderRecord);
 }

+ 5 - 1
src/main/java/com/caimei365/order/model/bo/OrderParamBo.java

@@ -3,6 +3,7 @@ package com.caimei365.order.model.bo;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.caimei365.order.model.po.InvoicePo;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import java.io.Serializable;
@@ -100,5 +101,8 @@ public class OrderParamBo implements Serializable {
      * 收货地址Id
      */
     private Integer addressId;
-
+    /**
+     * 优惠券Id
+     */
+    private Integer clubCouponId;
 }

+ 5 - 0
src/main/java/com/caimei365/order/model/dto/SubmitDto.java

@@ -44,6 +44,11 @@ public class SubmitDto implements Serializable {
      */
     @ApiModelProperty("协销Id")
     private Integer serviceProviderId;
+    /**
+     * 优惠券Id
+     */
+    @ApiModelProperty("优惠券Id")
+    private Integer clubCouponId;
     /**
      * 订单商品数据:[
      *            { "shopId":1001,    // 供应商ID

+ 42 - 0
src/main/java/com/caimei365/order/model/po/CouponOrderRecordPo.java

@@ -0,0 +1,42 @@
+package com.caimei365.order.model.po;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * Description
+ *
+ * @author : Charles
+ * @date : 2021/8/30
+ */
+@Data
+public class CouponOrderRecordPo implements Serializable {
+    private Integer id;
+    /**
+     * 订单id
+     */
+    private Integer orderId;
+    /**
+     * 用户领券id(对应cm_coupon_club)
+     */
+    private Integer clubCouponId;
+    /**
+     * 劵类型 0活动券 1品类券 2用户专享券 3店铺券 4新用户券
+     */
+    private Integer couponType;
+    /**
+     * 优惠券金额(面值)
+     */
+    private Double couponAmount;
+    /**
+     * 优惠满减条件金额
+     */
+    private Double touchPrice;
+    /**
+     * 创建时间
+     */
+    private Date createDate;
+}
+

+ 4 - 0
src/main/java/com/caimei365/order/model/po/OrderPo.java

@@ -198,4 +198,8 @@ public class OrderPo implements Serializable {
      * 订单备注
      */
     private String note;
+    /**
+     * 优惠券金额(面值)
+     */
+    private Double couponAmount;
 }

+ 2 - 3
src/main/java/com/caimei365/order/model/vo/CouponVo.java

@@ -4,7 +4,6 @@ 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;
 
@@ -29,12 +28,12 @@ public class CouponVo implements Serializable {
     /**
      * 优惠券金额(面值)
      */
-    private BigDecimal couponAmount;
+    private Double couponAmount;
 
     /**
      * 优惠满减条件金额
      */
-    private BigDecimal touchPrice;
+    private Double touchPrice;
 
     /**
      * 使用开始时间(有效期)

+ 43 - 11
src/main/java/com/caimei365/order/service/impl/SubmitServiceImpl.java

@@ -3,10 +3,7 @@ package com.caimei365.order.service.impl;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.caimei365.order.components.ProductService;
-import com.caimei365.order.mapper.BaseMapper;
-import com.caimei365.order.mapper.CartClubMapper;
-import com.caimei365.order.mapper.CartSellerMapper;
-import com.caimei365.order.mapper.SubmitMapper;
+import com.caimei365.order.mapper.*;
 import com.caimei365.order.model.ResponseJson;
 import com.caimei365.order.model.dto.RechargeDto;
 import com.caimei365.order.model.po.*;
@@ -55,6 +52,8 @@ public class SubmitServiceImpl implements SubmitService {
     @Resource
     private ProductService productService;
     @Resource
+    private OrderClubMapper orderClubMapper;
+    @Resource
     private CartClubMapper cartClubMapper;
     @Resource
     private CartSellerMapper cartSellerMapper;
@@ -64,12 +63,13 @@ public class SubmitServiceImpl implements SubmitService {
      * 生成订单
      *
      * @param submitDto {
+     *                  "clubId": 10708,            //机构ID
      *                  "unionId":"",               //微信unionId
-     *                  "cartType":3,               //购买类型:(1自主下单, 3协销下单)
+     *                  "addressId": 2732,          //地址ID
      *                  "orderSource": 2,           //订单来源:1WWW、2CRM、4客服[适用后台下单]、5外单[适用后台下单]、6小程序[采美,星范]、7呵呵商城小程序、8维沙小程序
-     *                  "serviceProviderId": 1378,  //协销Id(小程序忽略
-     *                  "clubUserId": 10708,        //机构用户Id
-     *                  "addressId": 2732,          //地址Id
+     *                  "cartType":3,               //购买类型:(1自主下单, 3协销下单
+     *                  "serviceProviderId": 1378,  //协销ID(小程序忽略)
+     *                  "clubCouponId": ""          //优惠券Id
      *                  "orderInfo": [              //【订单商品】
      *                      { "shopId":1001,                         // 供应商Id
      *                          "note":备注,
@@ -81,7 +81,6 @@ public class SubmitServiceImpl implements SubmitService {
      *                  ],
      *                  "payInfo": {                //【订单金额】
      *                      "orderShouldPayFee": 609.11,
-     *                      
      *                      "balancePayFlag": 0,
      *                      "clauseId": "2",
      *                      "postage": "15",
@@ -264,6 +263,7 @@ public class SubmitServiceImpl implements SubmitService {
         }
         orderParamBo.setBuyUserId(buyUserId);
         orderParamBo.setAddressId(submitDto.getAddressId());
+        orderParamBo.setClubCouponId(submitDto.getClubCouponId());
         /*
          * 保存订单
          */
@@ -766,7 +766,23 @@ public class SubmitServiceImpl implements SubmitService {
         mainOrder.setPresentCount(presentCount.get());
         //促销赠品数量
         mainOrder.setPromotionalGiftsCount(promotionalGiftsCount.get());
-
+        /*
+         * 处理优惠券
+         */
+        Double couponAmount = 0d;
+        CouponVo coupon = null;
+        if (null != orderParamBo.getClubCouponId() && orderParamBo.getClubCouponId() > 0) {
+            coupon = submitMapper.getClubCouponById(orderParamBo.getClubCouponId());
+            if (null == coupon) {
+                // 设置手动回滚事务
+                TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+                return ResponseJson.error("优惠券使用异常!", null);
+            }
+            couponAmount = coupon.getCouponAmount();
+        }
+        mainOrder.setCouponAmount(couponAmount);
+        // 订单总额 = 商品费 - 优惠券金额
+        payTotalFee.set(MathUtil.sub(productTotalFee.get(), couponAmount).doubleValue());
         /*
          * 计算运费
          */
@@ -791,7 +807,6 @@ public class SubmitServiceImpl implements SubmitService {
             // 采美豆抵扣运费,订单总额 = 商品费
             payTotalFee.set(productTotalFee.get());
         }
-
         // 商品总额
         mainOrder.setProductTotalFee(productTotalFee.get());
         mainOrder.setOrderTotalFee(productTotalFee.get());
@@ -1183,6 +1198,23 @@ public class SubmitServiceImpl implements SubmitService {
             productService.updateUserBeans(beansHistory, beans,"【提交订单】");
         }
 
+        /*
+         * 保存优惠券使用情况
+         */
+        if (null != orderParamBo.getClubCouponId() && orderParamBo.getClubCouponId() > 0) {
+            // 修改优惠券使用情况
+            if (3 != orderParamBo.getCartType()) {
+                // 自主订单立即确认,协销订单待确认 ,确认订单时才真正使用优惠券
+                orderClubMapper.updateCouponClubStatus(orderParamBo.getClubCouponId(), mainOrder.getOrderId());
+            }
+            CouponOrderRecordPo orderRecord = new CouponOrderRecordPo();
+            BeanUtils.copyProperties(coupon, orderRecord);
+            orderRecord.setOrderId(mainOrder.getOrderId());
+            orderRecord.setCreateDate(date);
+            // 保存订单优惠记录
+            submitMapper.insertCouponOrderRecord(orderRecord);
+        }
+
         /*
          * 删除购物车
          */

+ 5 - 0
src/main/resources/mapper/OrderClubMapper.xml

@@ -95,6 +95,11 @@
         SET shareCode = #{shareCode}, expiredTime = #{expiredTime}, delFlag = #{delFlag}
         WHERE id = #{id}
     </update>
+    <update id="updateCouponClubStatus">
+        UPDATE cm_coupon_club SET
+        status = 2, useDate = NOW(), orderId = #{orderId}
+        WHERE id = #{clubCouponId}
+    </update>
     <delete id="deleteOrderSearchHistory">
         DELETE FROM user_order_history WHERE userId=#{userId}
     </delete>

+ 27 - 3
src/main/resources/mapper/SubmitMapper.xml

@@ -63,6 +63,10 @@
         VALUES (#{orderId}, #{clubId}, #{userId}, #{name}, #{receiver}, #{mobile},
                 #{addressId}, #{townId}, #{province}, #{city}, #{town}, #{address})
     </insert>
+    <insert id="insertCouponOrderRecord" parameterType="com.caimei365.order.model.po.CouponOrderRecordPo">
+        INSERT INTO cm_coupon_order_record (orderId, clubCouponId, couponType, couponAmount, touchPrice, createDate)
+        VALUES (#{orderId}, #{clubCouponId}, #{couponType}, #{couponAmount}, #{touchPrice}, #{createDate})
+    </insert>
     <update id="updateUserMoney">
         UPDATE USER SET userMoney = #{userMoney}, ableUserMoney = #{ableUserMoney}
         WHERE userID = #{userId}
@@ -134,7 +138,27 @@
         WHERE a.addressID = #{addressId}
         LIMIT 1
     </select>
-
-
-
+    <select id="getClubCouponById" resultType="com.caimei365.order.model.vo.CouponVo">
+        SELECT
+            a.id AS clubCouponId,
+            cc.id AS couponId,
+            cc.couponAmount,
+            cc.touchPrice,
+            cc.startDate,
+            cc.endDate,
+            cc.couponType,
+            cc.userId,
+            cc.shopId,
+            cc.productType,
+            cc.categoryType
+        FROM cm_coupon_club a
+        LEFT JOIN cm_coupon cc ON a.couponId = cc.id
+        WHERE cc.delFlag = 0
+        AND a.delFlag = 0
+        AND a.id = #{clubCouponId}
+        AND a.status = 1
+        AND NOW() BETWEEN cc.startDate
+        AND cc.endDate
+        AND cc.status != 2
+    </select>
 </mapper>