From 9d909e5f8048b74ac56d8f853758cfccfea61759 Mon Sep 17 00:00:00 2001
From: puzhibing <393733352@qq.com>
Date: 星期二, 28 十一月 2023 15:23:55 +0800
Subject: [PATCH] 后台1

---
 cloud-server-account/src/main/java/com/dsh/account/service/impl/TAppUserServiceImpl.java |  309 +++++++++++++++++++++++++++++++++++++++++++--------
 1 files changed, 260 insertions(+), 49 deletions(-)

diff --git a/cloud-server-account/src/main/java/com/dsh/account/service/impl/TAppUserServiceImpl.java b/cloud-server-account/src/main/java/com/dsh/account/service/impl/TAppUserServiceImpl.java
index e5a6145..bb4fc3d 100644
--- a/cloud-server-account/src/main/java/com/dsh/account/service/impl/TAppUserServiceImpl.java
+++ b/cloud-server-account/src/main/java/com/dsh/account/service/impl/TAppUserServiceImpl.java
@@ -1,7 +1,6 @@
 package com.dsh.account.service.impl;
 
 
-import com.alibaba.fastjson.JSONObject;
 import com.alipay.api.AlipayApiException;
 import com.alipay.api.AlipayClient;
 import com.alipay.api.DefaultAlipayClient;
@@ -19,15 +18,10 @@
 import com.dsh.account.dto.*;
 import com.dsh.account.entity.*;
 import com.dsh.account.enums.RechargeRecordEnum;
-import com.dsh.account.feignclient.activity.IntroduceRewardsClient;
-import com.dsh.account.feignclient.activity.MerChandiseClient;
-import com.dsh.account.feignclient.activity.MerChandiseStoreClient;
-import com.dsh.account.feignclient.activity.UserConponClient;
+import com.dsh.account.feignclient.activity.*;
 import com.dsh.account.feignclient.activity.model.*;
 import com.dsh.account.feignclient.competition.DeductionCompetitionsClient;
 import com.dsh.account.feignclient.competition.model.BillingDataRequestVo;
-import com.dsh.account.feignclient.competition.model.PaymentCompetition;
-import com.dsh.account.feignclient.competition.model.PurchaseRecordVo;
 import com.dsh.account.feignclient.course.CoursePackageClient;
 import com.dsh.account.feignclient.course.CoursePackageConfigClient;
 import com.dsh.account.feignclient.course.CoursePaymentClient;
@@ -37,7 +31,6 @@
 import com.dsh.account.feignclient.other.RechargeConfigClient;
 import com.dsh.account.feignclient.other.SiteClient;
 import com.dsh.account.feignclient.other.StoreClient;
-import com.dsh.account.feignclient.other.model.SiteBooking;
 import com.dsh.account.feignclient.other.model.Store;
 import com.dsh.account.feignclient.other.model.StoreDetailOfCourse;
 import com.dsh.account.feignclient.other.model.TImgConfig;
@@ -46,7 +39,6 @@
 import com.dsh.account.model.AppUserByNameAndPhoneDTO;
 import com.dsh.account.model.dto.Coupon;
 import com.dsh.account.model.query.appUserQuery.QueryAppUser;
-import com.dsh.account.model.vo.DetailsListVo;
 import com.dsh.account.model.vo.QueryAppUserVO;
 import com.dsh.account.model.vo.classDetails.CourseVenue;
 import com.dsh.account.model.vo.classDetails.ExerciseVideo;
@@ -156,9 +148,6 @@
     private CoursePackageConfigClient cpconClient;
 
     @Resource
-    private PayMoneyUtil payMoneyUtil;
-
-    @Resource
     private SiteClient stClient;
     @Autowired
     private TAppUserMapper appUserMapper;
@@ -182,6 +171,16 @@
     private TAppUserService appUserService;
     @Resource
     private MerChandiseClient merChandiseClient;
+
+    @Autowired
+    private PayMoneyUtil payMoneyUtil;
+
+    @Resource
+    private UserCouponPaymentClient userCouponPaymentClient;
+
+
+
+
 
     // 对数据进行分页处理的方法
     private static Page<Goods> getPage(List<Goods> dataList, Pageable pageable) {
@@ -1281,9 +1280,6 @@
     @Override
     @Transactional
     public synchronized ResultUtil productRedemptionOperation(Integer userIdFormRedis, GoodsExchangeVo exchangeType) {
-        System.out.println("exchangeType:--->");
-
-
         ReturnModel returnModel = new ReturnModel();
         Long returnId = null;
         //如果是兑换优惠卷
@@ -1295,7 +1291,7 @@
             queryIds.add(coupon.getId());
             queryIds.add(userIdFormRedis);
             Integer counts = userConponClient.queryCounts(queryIds);
-            if (coupon.getQuantityIssued() - counts == 0) {
+            if (coupon.getQuantityIssued().compareTo(counts) == 0) {
                 return new ResultUtil(0, "当前数量不足");
             }
             //查询该用户是否超出限领数量
@@ -1304,40 +1300,56 @@
             if (usercounts == coupon.getPickUpQuantity()) {
                 return new ResultUtil<>(0, "限领数量已达最大");
             }
-//            userConponClient.queryCouponById(exchangeType.getGoodId());
-            UserCoupon userCoupon = new UserCoupon();
-            userCoupon.setCouponId(exchangeType.getGoodId());
-            userCoupon.setUserId(userIdFormRedis);
-            userCoupon.setStatus(1);
-            userCoupon.setInsertTime(new Date());
-            userConponClient.insertToAppuserCoupon(userCoupon);
-            //扣积分
-            TAppUser user = appUserService.getById(userIdFormRedis);
-            if (user.getIntegral() < coupon.getIntegral().intValue()) {
-                return new ResultUtil<>(0, "当前用户积分不足");
+
+            SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
+            String code = sdf.format(new Date()) + UUIDUtil.getNumberRandom(5);
+            //生成支付订单
+            UserCouponPayment userCouponPayment = new UserCouponPayment();
+            userCouponPayment.setCouponId(exchangeType.getGoodId());
+            userCouponPayment.setUserId(userIdFormRedis);
+            userCouponPayment.setStatus(1);
+            userCouponPayment.setCode(code);
+            userCouponPayment.setPayType(coupon.getRedemptionMethod());
+            userCouponPayment.setIntegral(coupon.getIntegral().intValue());
+            userCouponPayment.setCash(coupon.getCash().doubleValue());
+            userCouponPayment.setCashPayType(exchangeType.getPayType());
+            userCouponPayment.setInsertTime(new Date());
+
+            //积分兑换
+            if(coupon.getRedemptionMethod() == 1){
+                UserCoupon userCoupon = new UserCoupon();
+                userCoupon.setCouponId(exchangeType.getGoodId());
+                userCoupon.setUserId(userIdFormRedis);
+                userCoupon.setStatus(1);
+                userCoupon.setInsertTime(new Date());
+                userConponClient.insertToAppuserCoupon(userCoupon);
+                //扣积分
+                TAppUser user = appUserService.getById(userIdFormRedis);
+                if (user.getIntegral() < coupon.getIntegral().intValue()) {
+                    return new ResultUtil<>(0, "当前用户积分不足");
+                }
+                user.setIntegral(user.getIntegral() - coupon.getIntegral().intValue());
+                appUserService.updateById(user);
+
+                userCouponPayment.setStatus(2);
+                userCouponPayment.setPaymentTime(new Date());
+                userCouponPaymentClient.addUserCouponPayment(userCouponPayment);
+                return ResultUtil.success(returnId);
             }
-            user.setIntegral(user.getIntegral() - coupon.getIntegral().intValue());
-            appUserService.updateById(user);
-
-            //记录
-//            UserPointsMerchandise pointsMerchandise = new UserPointsMerchandise();
-//            pointsMerchandise.setPointsMerchandiseId(exchangeType.getGoodId());
-//            pointsMerchandise.setUserId(userIdFormRedis);
-//            pointsMerchandise.setStatus(1);
-//            pointsMerchandise.setState(1);
-//            pointsMerchandise.setPayStatus(1);
-////            if (merchandise.getUseScope() == 3){
-////                if (exchangeType.getGoodsType() == 2){
-////                    CoursePackage coursePackage = cpageClient.queryCoursePackageById(merchandise.getCoursePackageId());
-////                    pointsMerchandise.setStoreId(coursePackage.getStoreId());
-////                }else {
-////                    pointsMerchandise.setStoreId(exchangeType.getStoreId());
-////                }
-////            }
-////            pointsMerchandise.setCode(code);
-//            returnId = mcClient.saveDetailsUserPointMercase(pointsMerchandise);
-
-            return ResultUtil.success(returnId);
+            //积分+现金
+            if(coupon.getRedemptionMethod() == 1){
+                userCouponPaymentClient.addUserCouponPayment(userCouponPayment);
+                try {
+                    if(exchangeType.getPayType() == 1){
+                        return weChatPaymentCoupon("购买优惠券", userCouponPayment);
+                    }
+                    if(exchangeType.getPayType() == 2){
+                        return aliPaymentCoupon("购买优惠券", userCouponPayment);
+                    }
+                } catch (Exception e) {
+                    e.printStackTrace();
+                }
+            }
         }
 
 
@@ -1558,6 +1570,205 @@
 
     }
 
+
+    /**
+     * 优惠券微信支付
+     * @param body
+     * @param userCouponPayment
+     * @return
+     * @throws Exception
+     */
+    public ResultUtil weChatPaymentCoupon(String body, UserCouponPayment userCouponPayment) throws Exception {
+        String code = userCouponPayment.getCode();
+        Double cash = userCouponPayment.getCash();
+        ResultUtil weixinpay = payMoneyUtil.weixinpay(body, "", code, cash.toString(), "/base/coupon/weChatPaymentCouponCallback", "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);
+                            UserCouponPayment userCouponPayment1 = userCouponPaymentClient.getUserCouponPayment(code);
+                            if (userCouponPayment1.getStatus() == 2) {
+                                break;
+                            }
+                            ResultUtil<Map<String, String>> resultUtil = payMoneyUtil.queryWXOrder(code, "");
+                            if (resultUtil.getCode() == 200 && userCouponPayment1.getStatus() == 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) {
+                                    //有待支付的订单,这里不处理
+                                    userCouponPayment1.setStatus(-1);
+                                    userCouponPaymentClient.updateUserCouponPayment(userCouponPayment1);
+                                    break;
+                                }
+                                if ("SUCCESS".equals(s)) {
+                                    userCouponPayment1.setStatus(2);
+                                    userCouponPayment1.setPaymentTime(new Date());
+                                    userCouponPayment1.setOrderNumber(transaction_id);
+                                    userCouponPaymentClient.updateUserCouponPayment(userCouponPayment1);
+
+                                    UserCoupon userCoupon = new UserCoupon();
+                                    userCoupon.setCouponId(userCouponPayment1.getCouponId());
+                                    userCoupon.setUserId(userCouponPayment1.getUserId());
+                                    userCoupon.setStatus(1);
+                                    userCoupon.setInsertTime(new Date());
+                                    userConponClient.insertToAppuserCoupon(userCoupon);
+
+                                    if(null != userCouponPayment1.getIntegral() && 0 != userCouponPayment1.getIntegral()){
+                                        //扣积分
+                                        TAppUser user = appUserService.getById(userCouponPayment1.getUserId());
+                                        user.setIntegral(user.getIntegral() - userCouponPayment1.getIntegral().intValue());
+                                        appUserService.updateById(user);
+                                    }
+                                    break;
+                                }
+                                if ("USERPAYING".equals(s)) {
+                                    num++;
+                                }
+                            }
+                        }
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                    }
+                }
+            }).start();
+        }
+        return weixinpay;
+    }
+
+
+    /**
+     * 优惠券支付宝支付
+     *
+     * @param uid
+     * @param paymentPrice
+     * @param paymentCourseVo
+     * @return
+     * @throws Exception
+     */
+    public ResultUtil aliPaymentCoupon(String body, UserCouponPayment userCouponPayment) throws Exception {
+        String code = userCouponPayment.getCode();
+        Double cash = userCouponPayment.getCash();
+
+        ResultUtil alipay = payMoneyUtil.alipay(body, body, "", code, cash.toString(), "/base/coupon/aliPaymentCouponCallback");
+        if (alipay.getCode() == 200) {
+            new Thread(new Runnable() {
+                @Override
+                public void run() {
+                    try {
+                        Thread.sleep(1000);
+
+                        int num = 1;
+                        int wait = 0;
+                        while (num <= 10) {
+                            int min = 5000;
+                            wait += (min * num);
+                            Thread.sleep(wait);
+                            UserCouponPayment userCouponPayment1 = userCouponPaymentClient.getUserCouponPayment(code);
+                            if (userCouponPayment1.getStatus() == 2) {
+                                break;
+                            }
+                            AlipayTradeQueryResponse alipayTradeQueryResponse = payMoneyUtil.queryALIOrder(code);
+                            if (null != alipayTradeQueryResponse) {
+                                /**
+                                 * WAIT_BUYER_PAY(交易创建,等待买家付款)、
+                                 * TRADE_CLOSED(未付款交易超时关闭,或支付完成后全额退款)、
+                                 * TRADE_SUCCESS(交易支付成功)、
+                                 * TRADE_FINISHED(交易结束,不可退款)
+                                 */
+                                String s = alipayTradeQueryResponse.getTradeStatus();
+
+                                String tradeNo = alipayTradeQueryResponse.getTradeNo();
+                                if ("TRADE_CLOSED".equals(s) || "TRADE_FINISHED".equals(s) || num == 10) {
+                                    //有待支付的订单,这里不处理
+                                    userCouponPayment1.setStatus(-1);
+                                    userCouponPaymentClient.updateUserCouponPayment(userCouponPayment1);
+                                    break;
+                                }
+                                if ("TRADE_SUCCESS".equals(s)) {
+                                    userCouponPayment1.setStatus(2);
+                                    userCouponPayment1.setPaymentTime(new Date());
+                                    userCouponPayment1.setOrderNumber(tradeNo);
+                                    userCouponPaymentClient.updateUserCouponPayment(userCouponPayment1);
+
+                                    UserCoupon userCoupon = new UserCoupon();
+                                    userCoupon.setCouponId(userCouponPayment1.getCouponId());
+                                    userCoupon.setUserId(userCouponPayment1.getUserId());
+                                    userCoupon.setStatus(1);
+                                    userCoupon.setInsertTime(new Date());
+                                    userConponClient.insertToAppuserCoupon(userCoupon);
+
+                                    if(null != userCouponPayment1.getIntegral() && 0 != userCouponPayment1.getIntegral()){
+                                        //扣积分
+                                        TAppUser user = appUserService.getById(userCouponPayment1.getUserId());
+                                        user.setIntegral(user.getIntegral() - userCouponPayment1.getIntegral().intValue());
+                                        appUserService.updateById(user);
+                                    }
+                                    break;
+                                }
+                                if ("WAIT_BUYER_PAY".equals(s)) {
+                                    num++;
+                                }
+                            }
+                        }
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                    }
+                }
+            }).start();
+        }
+        return alipay;
+    }
+
+    /**
+     * 支付回调
+     * @param code
+     * @param orderNumber
+     * @return
+     */
+    @Override
+    public ResultUtil paymentCouponCallback(String code, String orderNumber) {
+        UserCouponPayment userCouponPayment1 = userCouponPaymentClient.getUserCouponPayment(code);
+        if (userCouponPayment1.getStatus() == 2) {
+            return ResultUtil.success();
+        }
+        userCouponPayment1.setStatus(2);
+        userCouponPayment1.setPaymentTime(new Date());
+        userCouponPayment1.setOrderNumber(orderNumber);
+        userCouponPaymentClient.updateUserCouponPayment(userCouponPayment1);
+
+        UserCoupon userCoupon = new UserCoupon();
+        userCoupon.setCouponId(userCouponPayment1.getCouponId());
+        userCoupon.setUserId(userCouponPayment1.getUserId());
+        userCoupon.setStatus(1);
+        userCoupon.setInsertTime(new Date());
+        userConponClient.insertToAppuserCoupon(userCoupon);
+
+        if(null != userCouponPayment1.getIntegral() && 0 != userCouponPayment1.getIntegral()){
+            //扣积分
+            TAppUser user = appUserService.getById(userCouponPayment1.getUserId());
+            user.setIntegral(user.getIntegral() - userCouponPayment1.getIntegral().intValue());
+            appUserService.updateById(user);
+        }
+        return ResultUtil.success();
+    }
+
     public boolean dealAppUserIntegral(Integer appUserId, TAppUser appUser, Integer points) {
         try {
             if (ToolUtil.isEmpty(appUser.getIntegral()) || (ToolUtil.isNotEmpty(appUser.getIntegral()) && appUser.getIntegral() < points)) {

--
Gitblit v1.7.1