From 7865a1010be2f95faab151d99ecdb095f44c2a08 Mon Sep 17 00:00:00 2001
From: lisy <linlangsur163@163.com>
Date: 星期五, 14 七月 2023 16:30:34 +0800
Subject: [PATCH] 修复了积分商城详情页面的门店列表查询;兑换支付todo

---
 cloud-server-account/src/main/java/com/dsh/account/service/impl/RechargeRecordsServiceImpl.java |  287 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 287 insertions(+), 0 deletions(-)

diff --git a/cloud-server-account/src/main/java/com/dsh/account/service/impl/RechargeRecordsServiceImpl.java b/cloud-server-account/src/main/java/com/dsh/account/service/impl/RechargeRecordsServiceImpl.java
index 83729db..0c946de 100644
--- a/cloud-server-account/src/main/java/com/dsh/account/service/impl/RechargeRecordsServiceImpl.java
+++ b/cloud-server-account/src/main/java/com/dsh/account/service/impl/RechargeRecordsServiceImpl.java
@@ -1,10 +1,35 @@
 package com.dsh.account.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.dsh.account.entity.RechargeRecords;
+import com.dsh.account.entity.TAppUser;
+import com.dsh.account.enums.RechargeRecordEnum;
+import com.dsh.account.feignclient.competition.DeductionCompetitionsClient;
+import com.dsh.account.feignclient.competition.model.PaymentCompetition;
+import com.dsh.account.feignclient.course.CoursePaymentClient;
+import com.dsh.account.feignclient.course.model.TCoursePackagePayment;
+import com.dsh.account.feignclient.other.RechargeConfigClient;
 import com.dsh.account.mapper.RechargeRecordsMapper;
+import com.dsh.account.mapper.TAppUserMapper;
+import com.dsh.account.model.vo.userBenefitDetail.RechargeDetailsVo;
+import com.dsh.account.model.vo.userBenefitDetail.RechargePayRequest;
 import com.dsh.account.service.RechargeRecordsService;
+import com.dsh.account.util.DateTimeHelper;
+import com.dsh.account.util.PayMoneyUtil;
+import com.dsh.account.util.ResultUtil;
+import com.dsh.account.util.UUIDUtil;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
+
+import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
 
 /**
  * <p>
@@ -17,4 +42,266 @@
 @Service
 public class RechargeRecordsServiceImpl extends ServiceImpl<RechargeRecordsMapper, RechargeRecords> implements RechargeRecordsService {
 
+    @Resource
+    private RechargeRecordsMapper rereMapper;
+
+
+    @Resource
+    private TAppUserMapper tappMapper;
+
+    @Autowired
+    private CoursePaymentClient cpClient;
+
+    @Autowired
+    private DeductionCompetitionsClient deducClient;
+
+    @Autowired
+    private PayMoneyUtil payMoneyUtil;
+
+
+    @Resource
+    private RechargeConfigClient reconMapper;
+
+
+    @Override
+    public RechargeDetailsVo getAppUserRechargeRecord(String yearMonth, Integer recordId, Integer appUserId) {
+        RechargeDetailsVo vo = new RechargeDetailsVo();
+        List<RechargeDetailsVo.RechargesDetail> details = new ArrayList<>();
+        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("MM-dd HH:mm");
+
+        Date monthStart = null;
+        Date monthEnd = null;
+        if (StringUtils.hasText(yearMonth)) {
+            monthStart = DateTimeHelper.getCurrentIdetMouthStart(yearMonth);
+            monthEnd = DateTimeHelper.getCurrentIdeaMouthEnd(yearMonth);
+        } else {
+            monthStart = DateTimeHelper.getCurrentMouthStart();
+            monthEnd = DateTimeHelper.getCurrentMouthEnd();
+        }
+
+        TAppUser tAppUser = tappMapper.selectById(appUserId);
+        if (null != tAppUser){
+            vo.setWpGold(tAppUser.getPlayPaiCoins());
+        }else {
+            vo.setWpGold(0);
+        }
+//            1.赛事报名
+        List<PaymentCompetition> playPaiFGoldPayRecord = deducClient.getPlayPaiFGoldPayRecord(appUserId);
+        if (playPaiFGoldPayRecord.size() > 0 ){
+            for (PaymentCompetition competition : playPaiFGoldPayRecord) {
+                RechargeDetailsVo.RechargesDetail consumeDetail = new RechargeDetailsVo.RechargesDetail();
+                consumeDetail.setConsumeName(RechargeRecordEnum.EVENT_REGISTRATION.getMsg() );
+                consumeDetail.setConsumeTime(simpleDateFormat.format(competition.getInsertTime()));
+                consumeDetail.setConsumeAmount("-" + competition.getAmount());
+                details.add(consumeDetail);
+            }
+        }
+//            2.课包购买
+        List<TCoursePackagePayment> appuserCourseList = cpClient.getAppuserCourseList(appUserId);
+        if (appuserCourseList.size() > 0){
+            for (TCoursePackagePayment tCoursePackagePayment : appuserCourseList) {
+                RechargeDetailsVo.RechargesDetail consumeDetail = new RechargeDetailsVo.RechargesDetail();
+                consumeDetail.setConsumeName(RechargeRecordEnum.COURSE_PACKAGE_PURCHASE.getMsg() );
+                consumeDetail.setConsumeTime(simpleDateFormat.format(tCoursePackagePayment.getInsertTime()));
+                consumeDetail.setConsumeAmount("-" + tCoursePackagePayment.getPlayPaiCoin());
+                details.add(consumeDetail);
+            }
+        }
+//            3.场地预约
+//            4.智慧球场
+
+//            5.充值
+        List<RechargeRecords> rechargeRecords = this.baseMapper.selectList(new QueryWrapper<RechargeRecords>()
+                .eq("payStatus", 2)
+                .eq("appUserId", appUserId)
+                .between("insertTime", monthStart, monthEnd));
+        if (rechargeRecords.size() > 0) {
+            for (RechargeRecords rechargeRecord : rechargeRecords) {
+                RechargeDetailsVo.RechargesDetail consumeDetail = new RechargeDetailsVo.RechargesDetail();
+                consumeDetail.setConsumeName(RechargeRecordEnum.RECHARGE.name() + ":" + rechargeRecord.getPlayPaiCoins());
+                consumeDetail.setConsumeTime(simpleDateFormat.format(rechargeRecord.getInsertTime()));
+                consumeDetail.setConsumeAmount("+" + rechargeRecord.getAmount());
+                details.add(consumeDetail);
+            }
+        }
+        vo.setDetailList(details);
+        return vo;
+    }
+
+    @Override
+    public ResultUtil rechargeCenPayment(Integer userIdFormRedis, RechargePayRequest request) {
+        TAppUser tAppUser = tappMapper.selectById(userIdFormRedis);
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
+        String code = sdf.format(new Date()) + UUIDUtil.getNumberRandom(5);
+        RechargeRecords rechargeRecords = new RechargeRecords();
+        rechargeRecords.setCode(code);
+        rechargeRecords.setAppUserId(userIdFormRedis);
+        rechargeRecords.setAmount(request.getPayAmount());
+        List<Map<String, Object>> rechargeConfig = reconMapper.getRechargeConfig();
+        if (rechargeConfig.size() > 0){
+            for (Map<String, Object> stringObjectMap : rechargeConfig) {
+                Object o = stringObjectMap.get("money");
+                if (o.equals(request.getPayAmount())){
+                    if (tAppUser.getIsVip() == 1){
+                        rechargeRecords.setPlayPaiCoins((Integer) stringObjectMap.get("MemberCoins"));
+                    }else {
+                        rechargeRecords.setPlayPaiCoins((Integer) stringObjectMap.get("usersCoins"));
+                    }
+                }
+            }
+        }
+        rechargeRecords.setPayStatus(1);
+        rechargeRecords.setState(1);
+        rechargeRecords.setInsertTime(new Date());
+        this.baseMapper.insert(rechargeRecords);
+        try {
+            switch (request.getPayType()){
+                case 1:
+                    return WeChatPayment(code,request.getPayAmount());
+                case 2:
+                    return AlipayPayment(code,request.getPayAmount());
+                default:
+                    break;
+            }
+        }catch (Exception e){
+            ResultUtil.runErr();
+        }
+        return ResultUtil.success();
+    }
+
+
+
+    private ResultUtil AlipayPayment(String code,BigDecimal amount) {
+        ResultUtil alipay = payMoneyUtil.alipay("玩湃币充值", "", "", code, amount.toString(),
+                "/base/recharge/alipayRechargeCallback");
+        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);
+
+                            RechargeRecords records = rereMapper.selectOne(new QueryWrapper<RechargeRecords>()
+                                    .eq("code",code));
+                            if(records.getPayStatus() == 2){
+                                break;
+                            }
+                            ResultUtil<Map<String, String>> resultUtil = payMoneyUtil.queryALIOrder(code);
+                            if(resultUtil.getCode() == 200 && records.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){
+                                    records.setState(3);
+                                    rereMapper.deleteById(records.getId());
+                                    break;
+                                }
+                                if("TRADE_SUCCESS".equals(s)){
+                                    records.setPayStatus(2);
+                                    records.setOrderNumber(tradeNo);
+                                    rereMapper.updateById(records);
+                                    break;
+                                }
+                                if("WAIT_BUYER_PAY".equals(s)){
+                                    num++;
+                                }
+                            }
+                        }
+                    }catch (Exception e){
+                        e.printStackTrace();
+                    }
+                }
+            }).start();
+        }
+        return alipay;
+    }
+
+    private ResultUtil WeChatPayment(String code,BigDecimal amount) throws Exception {
+        ResultUtil weixinpay = payMoneyUtil.weixinpay("玩湃币充值", "", code, amount.toString(),
+                "/base/recharge/wechatRechargeCallback", "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);
+                            RechargeRecords records = rereMapper.selectOne(new QueryWrapper<RechargeRecords>()
+                                    .eq("code",code));
+                            if(records.getPayStatus() == 2){
+                                break;
+                            }
+                            ResultUtil<Map<String, String>> resultUtil = payMoneyUtil.queryWXOrder(code, "");
+                            if(resultUtil.getCode() == 200 && records.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){
+                                    records.setState(3);
+                                    rereMapper.deleteById(records.getId());
+                                    break;
+                                }
+                                if("SUCCESS".equals(s)){
+                                    records.setPayStatus(2);
+                                    records.setOrderNumber(transaction_id);
+                                    rereMapper.updateById(records);
+                                    break;
+                                }
+                                if("USERPAYING".equals(s)){
+                                    num++;
+                                }
+                            }
+                        }
+                    }catch (Exception e){
+                        e.printStackTrace();
+                    }
+                }
+            }).start();
+        }
+        return weixinpay;
+
+    }
+
+    @Override
+    public ResultUtil addRechargeCallbackPay(String code, String orderNumber) {
+        RechargeRecords rechargeRecords = this.baseMapper.selectOne(new QueryWrapper<RechargeRecords>()
+                .eq("code", code));
+        if (rechargeRecords.getPayStatus() == 2){
+            return  ResultUtil.success();
+        }
+        rechargeRecords.setPayStatus(2);
+        rechargeRecords.setPayTime(new Date());
+        rechargeRecords.setOrderNumber(orderNumber);
+        this.baseMapper.updateById(rechargeRecords);
+
+        TAppUser tAppUser = tappMapper.selectById(rechargeRecords.getAppUserId());
+        tAppUser.setPlayPaiCoins(null == tAppUser.getPlayPaiCoins()? rechargeRecords.getPlayPaiCoins(): tAppUser.getPlayPaiCoins() +rechargeRecords.getPlayPaiCoins() );
+        tappMapper.updateById(tAppUser);
+        return null;
+    }
+
 }

--
Gitblit v1.7.1