From a0dd7e4a251536f9622fe47d35c0f6c8506f5b95 Mon Sep 17 00:00:00 2001
From: lisy <linlangsur163@163.com>
Date: 星期三, 19 七月 2023 17:01:49 +0800
Subject: [PATCH] course:开始上课的已报名课程支付功能完善

---
 cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackagePaymentServiceImpl.java |  292 ++++++++++++++++++++++++++++++++++++++++++++-------------
 1 files changed, 223 insertions(+), 69 deletions(-)

diff --git a/cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackagePaymentServiceImpl.java b/cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackagePaymentServiceImpl.java
index 72d255f..7ac9917 100644
--- a/cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackagePaymentServiceImpl.java
+++ b/cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackagePaymentServiceImpl.java
@@ -1,9 +1,13 @@
 package com.dsh.course.service.impl;
 
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.dsh.course.entity.*;
+import com.dsh.course.feignclient.account.AppUserClient;
 import com.dsh.course.feignclient.account.CoachClient;
+import com.dsh.course.feignclient.account.model.AppUser;
 import com.dsh.course.feignclient.account.model.Coach;
 import com.dsh.course.feignclient.activity.BenefitVideoClient;
 import com.dsh.course.feignclient.activity.CouponClient;
@@ -26,7 +30,6 @@
 import com.dsh.course.util.*;
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
@@ -78,11 +81,18 @@
     @Resource
     private TCoursePackageDiscountMapper tcpdMapper;
 
+
+    @Resource
+    private CoursePackagePaymentConfigMapper cpConfigMapper;
+
     @Resource
     private CouponClient client;
 
-    @Autowired
+    @Resource
     private PayMoneyUtil payMoneyUtil;
+
+    @Resource
+    private AppUserClient appuClient;
 
 
     /**
@@ -174,7 +184,7 @@
             uvdmapper.updateById(userVideoDetails);
             return "SUCCESS";
         }
-        return null;
+        return "ERROR";
     }
 
     @Override
@@ -289,26 +299,61 @@
     }
 
     @Override
-    public ResultUtil ContinuationOrpaymentCourse(Integer userIdFormRedis, ClasspaymentRequest request) {
+    public ResultUtil ContinuationOrpaymentCourse(Integer ids, ClasspaymentRequest request) {
+        AppUser userIdFormRedis = appuClient.queryAppUser(ids);
         TCoursePackagePayment tCoursePackagePayment = this.baseMapper.selectById(request.getCoursePayId());
         String code = "";
+        BigDecimal money = tCoursePackagePayment.getCashPayment();
+        Integer wpGold = tCoursePackagePayment.getPlayPaiCoin();
         if (tCoursePackagePayment.getPayStatus() == 1){
+//            待支付的订单
             code = tCoursePackagePayment.getCode();
+            tCoursePackagePayment.setPayType(request.getPayType());
+            if (request.getUseConpon() == 1){
+                tCoursePackagePayment.setUserCouponId(Long.valueOf(request.getUseConpon()));
+            }
+            this.baseMapper.updateById(tCoursePackagePayment);
         }else {
+//            续课的订单
+//            查询是否续课优惠
+
+            CoursePackagePaymentConfig paymentConfig = cpConfigMapper.selectOne(new QueryWrapper<CoursePackagePaymentConfig>()
+                    .eq("coursePackageId", request.getLessonId())
+                    .eq("classHours", request.getCourseHoursNum()));
+            TCoursePackageDiscount coursePackageDiscount = tcpdMapper.selectOne(new QueryWrapper<TCoursePackageDiscount>()
+                    .eq("coursePackageId", request.getLessonId())
+                    .eq("type", 2)
+                    .eq("auditStatus", 1)
+                    .eq("coursePackagePaymentConfigId", paymentConfig.getCoursePackageId()));
+            if (ToolUtil.isNotEmpty(coursePackageDiscount)){
+                String content = coursePackageDiscount.getContent();
+                JSONObject jsonObject = JSON.parseObject(content);
+                if (userIdFormRedis.getIsVip() == 1){
+                    Double jsonObjectDouble = jsonObject.getDouble("num1");
+                    money = BigDecimal.valueOf(jsonObjectDouble);
+                }else {
+                    Double jsonObjectDouble = jsonObject.getDouble("num2");
+                    money = BigDecimal.valueOf(jsonObjectDouble);
+                }
+            }
             TCoursePackagePayment newPayment = new TCoursePackagePayment();
             SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
             newPayment.setCode(sdf.format(new Date()) + UUIDUtil.getNumberRandom(5));
-            newPayment.setAppUserId(userIdFormRedis);
+            newPayment.setAppUserId(userIdFormRedis.getId());
             newPayment.setStudentId(request.getStuId());
             newPayment.setCoursePackageId(request.getLessonId());
             newPayment.setClassHours(tCoursePackagePayment.getClassHours());
             newPayment.setOriginalPrice(tCoursePackagePayment.getOriginalPrice());
             newPayment.setTotalClassHours(tCoursePackagePayment.getTotalClassHours());
             newPayment.setLaveClassHours(tCoursePackagePayment.getTotalClassHours());
+            if (request.getUseConpon() == 1){
+                newPayment.setUserCouponId(Long.valueOf(request.getUseConpon()));
+            }
             newPayment.setAbsencesNumber(0);
             newPayment.setPayUserType(1);
             newPayment.setPayStatus(1);
             newPayment.setStatus(1);
+            newPayment.setPayType(request.getPayType());
             newPayment.setState(1);
             newPayment.setInsertTime(new Date());
             this.baseMapper.insert(newPayment);
@@ -316,13 +361,47 @@
         }
         switch (request.getPayType()){
             case 1:
-                WeChatPayment(code,request);
-                break;
+                if (request.getUseConpon() == 1){
+                    Coupon coupon = client.queryCouponById(request.getConponId());
+                    if (coupon.getType() == 1){
+                        Map<String, Object> couponRules = client.getCouponRules(coupon.getId());
+                        Double conditionalAmount = (Double) couponRules.get("conditionalAmount");
+                        Double deductionAmount = (Double) couponRules.get("deductionAmount");
+                        if (money.compareTo(BigDecimal.valueOf(conditionalAmount)) >= 0){
+                            money = BigDecimal.valueOf(deductionAmount);
+                        }
+                    }
+                    if (coupon.getType() == 2){
+                        Map<String, Object> couponRules = client.getCouponRules(coupon.getId());
+                        Object amount = couponRules.get("deductionAmount");
+                        money = BigDecimal.valueOf((Double) amount);
+                    }
+                }
+                try {
+                    return WeChatPayment(code,money);
+                }catch (Exception e){
+                    return ResultUtil.runErr();
+                }
             case 2:
-                AlipayPayment(code,request);
-                break;
+                if (request.getUseConpon() == 1){
+                    Coupon coupon = client.queryCouponById(request.getConponId());
+                    if (coupon.getType() == 1){
+                        Map<String, Object> couponRules = client.getCouponRules(coupon.getId());
+                        Double conditionalAmount = (Double) couponRules.get("conditionalAmount");
+                        Double deductionAmount = (Double) couponRules.get("deductionAmount");
+                        if (money.compareTo(BigDecimal.valueOf(conditionalAmount)) >= 0){
+                            money = BigDecimal.valueOf(deductionAmount);
+                        }
+                    }
+                    if (coupon.getType() == 2){
+                        Map<String, Object> couponRules = client.getCouponRules(coupon.getId());
+                        Object amount = couponRules.get("deductionAmount");
+                        money = BigDecimal.valueOf((Double) amount);
+                    }
+                }
+                return AlipayPayment(code,money);
             case 3:
-                PlaypaiGoldPayment(code,request);
+                PlaypaiGoldPayment(userIdFormRedis,code,wpGold);
                 break;
             default:
                 break;
@@ -331,73 +410,135 @@
     }
 
 
-    public void WeChatPayment(String code, ClasspaymentRequest request){
-
+    public ResultUtil WeChatPayment(String code, BigDecimal request) throws Exception {
+        TCoursePackagePaymentMapper baseMapper1 = this.baseMapper;
+        ResultUtil weixinpay = payMoneyUtil.weixinpay("课包续费", "", code, request.toString(),
+                "/base/coursePackage/wechatRegisteredCoursesCallback", "APP", "");
+        if(weixinpay.getCode() == 200){
+            new Thread(new Runnable() {
+                @Override
+                public void run() {
+                    try {
+                        int num = 1;
+                        int wait = 0;
+                        while (num <= 10){
+                            int min = 5000;
+                            wait += (min * num);
+                            Thread.sleep(wait);
+                            TCoursePackagePayment coursePackagePayment = baseMapper1.getCoursePackagePaymentByCode(code);
+                            if(coursePackagePayment.getPayStatus() == 2){
+                                break;
+                            }
+                            ResultUtil<Map<String, String>> resultUtil = payMoneyUtil.queryWXOrder(code, "");
+                            if(resultUtil.getCode() == 200 && coursePackagePayment.getPayStatus() == 1){
+                                /**
+                                 * SUCCESS—支付成功,
+                                 * REFUND—转入退款,
+                                 * NOTPAY—未支付,
+                                 * CLOSED—已关闭,
+                                 * REVOKED—已撤销(刷卡支付),
+                                 * USERPAYING--用户支付中,
+                                 * PAYERROR--支付失败(其他原因,如银行返回失败)
+                                 */
+                                Map<String, String> data1 = resultUtil.getData();
+                                String s = data1.get("trade_state");
+                                String transaction_id = data1.get("transaction_id");
+                                if("REFUND".equals(s) || "NOTPAY".equals(s) || "CLOSED".equals(s) || "REVOKED".equals(s) || "PAYERROR".equals(s) || num == 10){
+                                    coursePackagePayment.setState(3);
+                                    baseMapper1.deleteById(coursePackagePayment.getId());
+                                    break;
+                                }
+                                if("SUCCESS".equals(s)){
+                                    coursePackagePayment.setPayStatus(2);
+                                    coursePackagePayment.setOrderNumber(transaction_id);
+                                    baseMapper1.updateById(coursePackagePayment);
+                                    break;
+                                }
+                                if("USERPAYING".equals(s)){
+                                    num++;
+                                }
+                            }
+                        }
+                    }catch (Exception e){
+                        e.printStackTrace();
+                    }
+                }
+            }).start();
+        }
+        return weixinpay;
     }
 
 
-    public ResultUtil AlipayPayment(String code, ClasspaymentRequest request){
-        BigDecimal amount = BigDecimal.ZERO;
-        if (request.getUseConpon() == 1){
-            Coupon coupon = client.queryCouponById(request.getConponId());
-            //TODO: 2023/7/11 课包购买的微信支付
-        }
 
-        ResultUtil alipay = payMoneyUtil.alipay("课包购买", "", "", code, amount.toString(),
-                "/base/coursePackage/alipayNewPaymentCallback");
-//        if(alipay.getCode() == 200){
-//            new Thread(new Runnable() {
-//                @Override
-//                public void run() {
-//                    try {
-//                        int num = 1;
-//                        int wait = 0;
-//                        while (num <= 10){
-//                            int min = 5000;
-//                            wait += (min * num);
-//                            Thread.sleep(wait);
-//                            TCoursePackagePayment coursePackagePayment = couPayClient.getCoursePackagePaymentByCode(code);
-//                            if(coursePackagePayment.getPayStatus() == 2){
-//                                break;
-//                            }
-//                            ResultUtil<Map<String, String>> resultUtil = payMoneyUtil.queryALIOrder(code);
-//                            if(resultUtil.getCode() == 200 && coursePackagePayment.getPayStatus() == 1){
-//                                /**
-//                                 * WAIT_BUYER_PAY(交易创建,等待买家付款)、
-//                                 * TRADE_CLOSED(未付款交易超时关闭,或支付完成后全额退款)、
-//                                 * TRADE_SUCCESS(交易支付成功)、
-//                                 * TRADE_FINISHED(交易结束,不可退款)
-//                                 */
-//                                Map<String, String> data1 = resultUtil.getData();
-//                                String s = data1.get("tradeStatus");
-//                                String tradeNo = data1.get("tradeNo");
-//                                if("TRADE_CLOSED".equals(s) || "TRADE_FINISHED".equals(s) || num == 10){
-//                                    coursePackagePayment.setState(3);
-//                                    couPayClient.delPaymentCoursePackage(coursePackagePayment.getId());
-//                                    break;
-//                                }
-//                                if("TRADE_SUCCESS".equals(s)){
-//                                    coursePackagePayment.setPayStatus(2);
-//                                    coursePackagePayment.setOrderNumber(tradeNo);
-//                                    couPayClient.updatePaymentCoursePackage(coursePackagePayment);
-//                                    break;
-//                                }
-//                                if("WAIT_BUYER_PAY".equals(s)){
-//                                    num++;
-//                                }
-//                            }
-//                        }
-//                    }catch (Exception e){
-//                        e.printStackTrace();
-//                    }
-//                }
-//            }).start();
-//        }
+    public ResultUtil AlipayPayment(String code, BigDecimal request){
+        TCoursePackagePaymentMapper baseMapper1 = this.baseMapper;
+        ResultUtil alipay = payMoneyUtil.alipay("课包购买", "", "", code, request.toString(),
+                "/base/coursePackage/alipayRegisteredCoursesCallback");
+        if(alipay.getCode() == 200){
+            new Thread(new Runnable() {
+                @Override
+                public void run() {
+                    try {
+                        int num = 1;
+                        int wait = 0;
+                        while (num <= 10){
+                            int min = 5000;
+                            wait += (min * num);
+                            Thread.sleep(wait);
+                            TCoursePackagePayment coursePackagePayment = baseMapper1.getCoursePackagePaymentByCode(code);
+                            if(coursePackagePayment.getPayStatus() == 2){
+                                break;
+                            }
+                            ResultUtil<Map<String, String>> resultUtil = payMoneyUtil.queryALIOrder(code);
+                            if(resultUtil.getCode() == 200 && coursePackagePayment.getPayStatus() == 1){
+                                /**
+                                 * WAIT_BUYER_PAY(交易创建,等待买家付款)、
+                                 * TRADE_CLOSED(未付款交易超时关闭,或支付完成后全额退款)、
+                                 * TRADE_SUCCESS(交易支付成功)、
+                                 * TRADE_FINISHED(交易结束,不可退款)
+                                 */
+                                Map<String, String> data1 = resultUtil.getData();
+                                String s = data1.get("tradeStatus");
+                                String tradeNo = data1.get("tradeNo");
+                                if("TRADE_CLOSED".equals(s) || "TRADE_FINISHED".equals(s) || num == 10){
+                                    coursePackagePayment.setState(3);
+                                    baseMapper1.deleteById(coursePackagePayment.getId());
+                                    break;
+                                }
+                                if("TRADE_SUCCESS".equals(s)){
+                                    coursePackagePayment.setPayStatus(2);
+                                    coursePackagePayment.setOrderNumber(tradeNo);
+                                    baseMapper1.updateById(coursePackagePayment);
+                                    break;
+                                }
+                                if("WAIT_BUYER_PAY".equals(s)){
+                                    num++;
+                                }
+                            }
+                        }
+                    }catch (Exception e){
+                        e.printStackTrace();
+                    }
+                }
+            }).start();
+        }
         return alipay;
     }
 
-    public void PlaypaiGoldPayment(String code, ClasspaymentRequest request){
+    public ResultUtil PlaypaiGoldPayment(AppUser appUser,String code, Integer wpGold){
+        TCoursePackagePayment packagePayment = this.baseMapper.selectOne(new QueryWrapper<TCoursePackagePayment>()
+                .eq("code",code ));
+        if (appUser.getPlayPaiCoins() < wpGold){
+            return ResultUtil.error("玩牌币不足!");
+        }
+        packagePayment.setPayStatus(2);
+        packagePayment.setPayUserId(appUser.getId());
+        packagePayment.setPlayPaiCoin(wpGold);
+        this.baseMapper.updateById(packagePayment);
 
+        appUser.setPlayPaiCoins(ToolUtil.isNotEmpty(appUser.getPlayPaiCoins()) ? appUser.getPlayPaiCoins()-wpGold : wpGold);
+        appuClient.updateAppUser(appUser);
+        return ResultUtil.success();
     }
 
 
@@ -476,4 +617,17 @@
         return recordVoList;
     }
 
+    @Override
+    public ResultUtil insertVipPaymentCallback(String code, String orderNumber) {
+        TCoursePackagePayment coursePackagePayment = this.baseMapper.getCoursePackagePaymentByCode(code);
+        if(coursePackagePayment.getPayStatus() != 1){
+            return ResultUtil.success();
+        }
+        coursePackagePayment.setPayStatus(2);
+        coursePackagePayment.setOrderNumber(orderNumber);
+        this.baseMapper.updateById(coursePackagePayment);
+        return ResultUtil.success();
+    }
+
+
 }

--
Gitblit v1.7.1