Pārlūkot izejas kodu

Merge remote-tracking branch 'remotes/origin/developer' into developerA

# Conflicts:
#	src/main/java/com/caimei365/order/controller/PayNonOrderApi.java
#	src/main/java/com/caimei365/order/mapper/PayOrderMapper.java
#	src/main/java/com/caimei365/order/service/PayNonOrderService.java
#	src/main/resources/mapper/PayOrderMapper.xml
Aslee 3 gadi atpakaļ
vecāks
revīzija
7fa0e3e4d6

+ 8 - 0
src/main/java/com/caimei365/order/controller/PayNonOrderApi.java

@@ -471,4 +471,12 @@ public class PayNonOrderApi {
         }
         return payNonOrderService.authVipCheck(vipRecordId);
     }
+    @ApiOperation("bug测试")
+    @GetMapping("/check/bug")
+    public ResponseJson bugCheck(Integer userId) {
+        if (null == userId) {
+            return ResponseJson.error("userId不能为空!", null);
+        }
+        return payNonOrderService.bugCheck(userId);
+    }
 }

+ 2 - 0
src/main/java/com/caimei365/order/mapper/OrderClubMapper.java

@@ -214,4 +214,6 @@ public interface OrderClubMapper {
     Integer getLatestOrderId(Integer userId);
 
     Integer findUserId(Integer orderId);
+
+    void insertCouponRecord(CouponRecordPo couponRecordPo);
 }

+ 7 - 0
src/main/java/com/caimei365/order/mapper/PayOrderMapper.java

@@ -3,6 +3,7 @@ package com.caimei365.order.mapper;
 import com.caimei365.order.model.bo.VipRecordBo;
 import com.caimei365.order.model.po.*;
 import com.caimei365.order.model.vo.BankCodeVo;
+import com.caimei365.order.model.vo.CouponCheckVo;
 import com.caimei365.order.model.vo.OrderPayLinkVo;
 import com.caimei365.order.model.vo.OrderVo;
 import org.apache.ibatis.annotations.Mapper;
@@ -41,6 +42,8 @@ public interface PayOrderMapper {
      * @param userId 用户Id
      */
     void updateMoneyByUserId(Double userMoney, Double ableUserMoney,Double onlineMoney,Integer userId);
+
+    void updateAbleMoney( Double ableUserMoney,Integer userId);
     /**
      * 根据用户Id更新线上余额
      *
@@ -246,6 +249,10 @@ public interface PayOrderMapper {
 
     Integer findClubType(Integer userId);
 
+    void bugFix(Integer userId);
+
+    List<CouponCheckVo> findCouponOrder();
+
     void deleteAuthVipRoleRelation(int userId);
 
     void insertAuthVipRoleRelation(Integer userId, Integer roleId);

+ 1 - 1
src/main/java/com/caimei365/order/model/po/CouponClubPo.java

@@ -36,7 +36,7 @@ public class CouponClubPo {
 
 
     /**
-     * 领取渠道:1网站 2小程序 3订单退回
+     * 领取渠道:1网站 2小程序 3订单退回,5商品购买转换
      */
     private Integer source;
 

+ 1 - 0
src/main/java/com/caimei365/order/model/po/CouponRecordPo.java

@@ -12,4 +12,5 @@ public class CouponRecordPo implements Serializable {
     private Integer couponId;
     private Integer payStatus;
     private Integer userId;
+    private Integer orderId;//商品兑换优惠券订单id
 }

+ 19 - 0
src/main/java/com/caimei365/order/model/vo/CouponCheckVo.java

@@ -0,0 +1,19 @@
+package com.caimei365.order.model.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class CouponCheckVo implements Serializable {
+
+    //购买的商品id
+    private Integer productId;
+    //下单购买的数量
+    private Integer num;
+    //下单订单id
+    private Integer orderId;
+
+    private Integer userId;
+
+}

+ 2 - 0
src/main/java/com/caimei365/order/service/PayNonOrderService.java

@@ -111,6 +111,8 @@ public interface PayNonOrderService {
 
     ResponseJson vipCheck(Integer recordId);
 
+    ResponseJson bugCheck(Integer userId);
+
     /**
      * 开通认证通会员-微信线上支付
      * @param payVipDto {

+ 2 - 0
src/main/java/com/caimei365/order/service/PayOrderService.java

@@ -114,6 +114,8 @@ public interface PayOrderService {
 
     ResponseJson<JSONObject> bankCode();
 
+    void couponCheck();
+
 //    /**
 //     * 手动临时分账
 //     */

+ 6 - 0
src/main/java/com/caimei365/order/service/impl/PayNonOrderServiceImpl.java

@@ -860,6 +860,12 @@ public class PayNonOrderServiceImpl implements PayNonOrderService {
         return ResponseJson.error("支付失败", null);
     }
 
+    @Override
+    public ResponseJson bugCheck(Integer userId) {
+        payOrderMapper.bugFix(userId);
+        return ResponseJson.success("修好了!");
+    }
+
 
     private ResponseJson<JSONObject> toPayCoupon(PayParamBo payParam, HttpHeaders headers) {
         // 定义支付请求结果

+ 37 - 0
src/main/java/com/caimei365/order/service/impl/PayOrderServiceImpl.java

@@ -6,6 +6,7 @@ import com.caimei365.order.components.OrderCommonService;
 import com.caimei365.order.components.ProductService;
 import com.caimei365.order.components.WeChatService;
 import com.caimei365.order.mapper.BaseMapper;
+import com.caimei365.order.mapper.OrderClubMapper;
 import com.caimei365.order.mapper.OrderCommonMapper;
 import com.caimei365.order.mapper.PayOrderMapper;
 import com.caimei365.order.model.ResponseJson;
@@ -42,6 +43,7 @@ import java.util.*;
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.concurrent.atomic.AtomicReference;
 
+import static org.bouncycastle.asn1.x500.style.RFC4519Style.c;
 import static org.bouncycastle.asn1.x500.style.RFC4519Style.o;
 
 /**
@@ -66,6 +68,8 @@ public class PayOrderServiceImpl implements PayOrderService {
     @Resource
     private WeChatService weChatService;
     @Resource
+    private OrderClubMapper orderClubMapper;
+    @Resource
     private RemoteCallService remoteCallService;
     @Value("${pay.redirect-link}")
     private String redirectLink;
@@ -1396,6 +1400,39 @@ public class PayOrderServiceImpl implements PayOrderService {
         return ResponseJson.success("获取成功", jsonObject);
     }
 
+    @Override
+    public void couponCheck() {
+        log.info("------------查询是否有优惠券商品下单------------------------>");
+        List<CouponCheckVo> checks = payOrderMapper.findCouponOrder();
+        log.info("单号列表------------------------>" + checks);
+        if (null != checks && checks.size() > 0) {
+            checks.forEach(checkVo -> {
+                for (int i = 0; i < checkVo.getNum(); i++) {
+                    insertCoupon(checkVo);
+                }
+            });
+        }
+        log.info("---------------优惠券商品兑换结束--------------------------->");
+    }
+
+    private void insertCoupon(CouponCheckVo check) {
+        Integer couponId = 7174 == check.getProductId() ? 44 : 49;
+        CouponRecordPo couponRecordPo = new CouponRecordPo();
+        couponRecordPo.setOrderId(check.getOrderId());
+        couponRecordPo.setUserId(check.getUserId());
+        couponRecordPo.setCouponId(couponId);
+        //保存已兑换orderid
+        orderClubMapper.insertCouponRecord(couponRecordPo);
+        CouponClubPo couponClubPo = new CouponClubPo();
+        couponClubPo.setSource(5);
+        couponClubPo.setUserId(check.getUserId());
+        couponClubPo.setCouponId(couponId);
+        couponClubPo.setStatus("1");
+        couponClubPo.setDelFlag("0");
+        couponClubPo.setCreateDate(new Date());
+        orderClubMapper.insertCouponClub(couponClubPo);
+        log.info("兑换优惠券订单-------------------->" + couponRecordPo);
+    }
 //    /**
 //     * 手动临时分账异步通知回调
 //     *

+ 23 - 15
src/main/java/com/caimei365/order/service/impl/SubmitServiceImpl.java

@@ -975,34 +975,42 @@ public class SubmitServiceImpl implements SubmitService {
                 if (3 != orderParamBo.getCartType()) {
                     // 部收款待发货
                     mainOrder.setStatus(21);
+                    //非协销下单,直接扣
+                    // 线上+线下只够部分抵扣,线上线下可用都置为0
+                    payOrderMapper.updateMoneyByUserId(0d, 0d, 0d, orderParamBo.getUserId());
+                    log.info("【提交订单】>>>>>更新用户余额,抵扣后剩余:[userMoney:" + 0 + "] ,ableUserMoney:" + 0);
+                }else{
+                    //协销下单,只扣可用余额
+                    payOrderMapper.updateAbleMoney(0d, orderParamBo.getUserId());
                 }
                 mainOrder.setReceiptStatus(2);
-                // 线上+线下只够部分抵扣,线上线下可用都置为0
-                payOrderMapper.updateMoneyByUserId(0d, 0d, 0d, orderParamBo.getUserId());
-                log.info("【提交订单】>>>>>更新用户余额,抵扣后剩余:[userMoney:" + 0 + "] ,ableUserMoney:" + 0);
             } else {
                 // 全部用余额抵扣, 直接变成支付完成
                 balancePayFee.set(payTotalFee.get());
                 payableAmount.set(0d);
+                Double availableMoney = MathUtil.sub(orderParamBo.getAbleUserMoney(), balancePayFee).doubleValue();
                 if (3 != orderParamBo.getCartType()) {
                     // 已收款待发货
                     mainOrder.setStatus(31);
+                    //非协销下单,直接扣
+                    // 线上余额全付
+                    if (MathUtil.compare(orderParamBo.getOnlineMoney(), balancePayFee) > 0) {
+                        Double onlineMoney = MathUtil.sub(orderParamBo.getOnlineMoney(), balancePayFee).doubleValue();
+                        payOrderMapper.updateOnlineMoneyByUserId(onlineMoney, availableMoney, orderParamBo.getUserId());
+                        log.info("【提交订单】>>>>>更新用户余额,抵扣后剩余:[userMoney:" + availableMoney + "] ,ableUserMoney:" + availableMoney);
+                    } else {
+                        //线上余额不够,线上全抵
+                        Double userMoney = MathUtil.sub(orderParamBo.getUserMoney(), MathUtil.sub(balancePayFee, orderParamBo.getOnlineMoney())).doubleValue();
+                        //更新线上/线下余额  线上置为0,全部抵扣
+                        payOrderMapper.updateMoneyByUserId(userMoney, MathUtil.sub(orderParamBo.getAbleUserMoney(), balancePayFee).doubleValue(), 0d, orderParamBo.getUserId());
+                    }
+                }else{
+                    //协销下单,只扣可用余额,确认订单在扣usermoney和onlinemoney
+                    payOrderMapper.updateAbleMoney(availableMoney, orderParamBo.getUserId());
                 }
                 mainOrder.setReceiptStatus(3);
                 mainOrder.setPayFlag(1);
                 isPaySuccessFlag = true;
-                // 线上余额全付
-                if (MathUtil.compare(orderParamBo.getOnlineMoney(), balancePayFee) > 0) {
-                    Double onlineMoney = MathUtil.sub(orderParamBo.getOnlineMoney(), balancePayFee).doubleValue();
-                    Double availableMoney = MathUtil.sub(orderParamBo.getAbleUserMoney(), balancePayFee).doubleValue();
-                    payOrderMapper.updateOnlineMoneyByUserId(onlineMoney, availableMoney, orderParamBo.getUserId());
-                    log.info("【提交订单】>>>>>更新用户余额,抵扣后剩余:[userMoney:" + availableMoney + "] ,ableUserMoney:" + availableMoney);
-                } else {
-                    //线上余额不够,线上全抵
-                    Double userMoney = MathUtil.sub(orderParamBo.getUserMoney(), MathUtil.sub(balancePayFee, orderParamBo.getOnlineMoney())).doubleValue();
-                    //更新线上/线下余额  线上置为0,全部抵扣
-                    payOrderMapper.updateMoneyByUserId(userMoney, MathUtil.sub(orderParamBo.getAbleUserMoney(), balancePayFee).doubleValue(), 0d, orderParamBo.getUserId());
-                }
             }
             // 支付时间
             mainOrder.setPayTime(curDateStr);

+ 8 - 0
src/main/java/com/caimei365/order/task/DelayedSplittingTask.java

@@ -30,4 +30,12 @@ public class DelayedSplittingTask {
     public void delayedSplitting() {
         payOrderService.delayedSplitting(delayedSplittingUrl);
     }
+
+    /**
+     * 优惠券下单查询,下了对应商品,送优惠券  2分钟一次
+     */
+    @Scheduled(cron = "0 0/2 * * * ?")
+    public void couponCheck() {
+        payOrderService.couponCheck();
+    }
 }

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

@@ -119,6 +119,10 @@
         INSERT INTO cm_coupon_club(userId, couponId, orderId, returnedId, source, status, createDate, useDate, delFlag)
         VALUES (#{userId},#{couponId},#{orderId},#{returnedId},#{source},#{status},#{createDate},#{useDate},#{delFlag})
     </insert>
+    <insert id="insertCouponRecord">
+        INSERT INTO cm_coupon_buyrecord(couponId,payStatus,userId,orderId,delflag)
+        values (#{couponId},1,#{userId},#{orderId},0)
+    </insert>
     <select id="countMainOrderByOrderId" resultType="java.lang.Integer">
         SELECT COUNT(*) FROM cm_order WHERE orderID = #{orderId}
     </select>

+ 18 - 0
src/main/resources/mapper/PayOrderMapper.xml

@@ -32,6 +32,11 @@
             onlineMoney   = #{onlineMoney}
         WHERE userID = #{userId}
     </update>
+    <update id="updateAbleMoney">
+        UPDATE USER
+        SET ableUserMoney = #{ableUserMoney}
+        WHERE userID = #{userId}
+    </update>
     <delete id="deleteAuthVipRoleRelation">
         DELETE FROM auth_role_user WHERE user_id = #{userId}
     </delete>
@@ -129,6 +134,9 @@
         set payStatus = 1
         where id = #{recordId}
     </update>
+    <update id="bugFix">
+        UPDATE USER SET userMoney = ableUserMoney WHERE userId = #{userId}
+    </update>
     <update id="updateAuthVipInfo">
         UPDATE auth_vip_user set authUserId=#{userId}, beginTime=#{beginTime}, endTime=#{endTime}, delFlag=#{delFlag}, updateTime=#{updateTime}
         WHERE authUserId = #{userId}
@@ -325,6 +333,16 @@
     <select id="findClubType" resultType="java.lang.Integer">
         SELECT firstClubType FROM club WHERE userId = #{userId}
     </select>
+    <select id="findCouponOrder" resultType="com.caimei365.order.model.vo.CouponCheckVo">
+        SELECT cop.num,co.userId,cop.orderId,cop.productId
+        FROM cm_order_product cop
+        LEFT JOIN cm_order co ON cop.orderId = co.orderId
+        LEFT JOIN cm_coupon_buyrecord ccb ON ccb.orderId = co.orderId
+        WHERE  cop.productId IN (7174,7175)
+          AND co.receiptStatus = 3
+          AND co.delflag = 0
+          AND cop.orderId NOT IN (SELECT orderId FROM cm_coupon_buyrecord WHERE orderId IS NOT NULL)
+    </select>
     <select id="getAuthVipRecord" resultType="com.caimei365.order.model.bo.VipRecordBo">
         SELECT id, authUserId as userId, packageId, price, payStatus FROM auth_vip_history WHERE id = #{vipRecordId};
     </select>