From e3a2245265516fef78b4737d6fffc939e7c5e0af Mon Sep 17 00:00:00 2001
From: huliguo <2023611923@qq.com>
Date: 星期四, 03 七月 2025 17:56:07 +0800
Subject: [PATCH] bug修改

---
 pt-errand/src/main/java/com/ruoyi/errand/service/impl/VipOrderServiceImpl.java |   64 +++++++++++++++++++------------
 1 files changed, 39 insertions(+), 25 deletions(-)

diff --git a/pt-errand/src/main/java/com/ruoyi/errand/service/impl/VipOrderServiceImpl.java b/pt-errand/src/main/java/com/ruoyi/errand/service/impl/VipOrderServiceImpl.java
index 849a970..c4ced41 100644
--- a/pt-errand/src/main/java/com/ruoyi/errand/service/impl/VipOrderServiceImpl.java
+++ b/pt-errand/src/main/java/com/ruoyi/errand/service/impl/VipOrderServiceImpl.java
@@ -14,11 +14,14 @@
 import com.ruoyi.errand.mapper.VipOrderMapper;
 import com.ruoyi.errand.mapper.VipSettingMapper;
 import com.ruoyi.errand.object.dto.app.VipPaymentDTO;
+import com.ruoyi.errand.object.vo.sys.OrderSysDetailVO;
 import com.ruoyi.errand.service.VipOrderService;
 import com.ruoyi.errand.utils.CloseOrderResult;
 import com.ruoyi.errand.utils.PaymentUtil;
 import com.ruoyi.errand.utils.UniPayCallbackResult;
 import com.ruoyi.errand.utils.UniPayResult;
+import com.ruoyi.errand.utils.wx.PayResult;
+import com.ruoyi.errand.utils.wx.WechatPayService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.security.core.context.SecurityContextHolder;
@@ -29,10 +32,7 @@
 import java.text.SimpleDateFormat;
 import java.time.LocalDateTime;
 import java.time.ZoneOffset;
-import java.util.Arrays;
-import java.util.Date;
-import java.util.List;
-import java.util.Set;
+import java.util.*;
 
 @Service
 @Slf4j
@@ -43,6 +43,8 @@
     private RedisTemplate redisTemplate;
     @Resource
     private AppUserMapper appUserMapper;
+    @Resource
+    private WechatPayService wechatPayService;
 
     @Override
     public R vipPayment(VipPaymentDTO vipPaymentDTO) {
@@ -51,8 +53,8 @@
         vipOrder.setAppUserId(appuser.getId());
 
         VipSetting vipSetting = vipSettingMapper.selectById(vipPaymentDTO.getId());
-        vipOrder.setOrderAmount(vipSetting.getVip_price());
-        vipOrder.setPaymentAmount(vipSetting.getVip_price());
+        vipOrder.setOrderAmount(vipSetting.getVipPrice());
+        vipOrder.setPaymentAmount(vipSetting.getVipPrice());
         SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
         vipOrder.setOrderNumber("QJS" + getNumber(3) + sdf.format(new Date()));
         vipOrder.setPayStatus(1);
@@ -62,23 +64,28 @@
         BigDecimal paymentMoney = vipOrder.getOrderAmount();
         if ( BigDecimal.ZERO.compareTo(paymentMoney) < 0){
             //调起微信支付
-            String vipName = vipSetting.getVip_name();
-            UniPayResult uniPayResult = PaymentUtil.uniPay(vipOrder.getOrderNumber(), paymentMoney.doubleValue(),  "购买会员",
-                    vipName, "", "/app/vipOrder/orderPaymentCallback", appuser.getWxOpenid(), null);
-            if(null == uniPayResult || !"100".equals(uniPayResult.getRa_Code())){
-                return R.fail(null == uniPayResult ? "支付失败" : uniPayResult.getRb_CodeMsg());
+            String vipName = vipSetting.getVipName();
+            try {
+                R r = wechatPayService.unifiedOrder(vipOrder.getId().toString(), vipOrder.getOrderNumber(), paymentMoney.toString(), "购买"+vipName,appuser.getWxOpenid(),"/app/vipOrder/orderPaymentCallback");
+                if (null == r || 200 != r.getCode()) {
+                    //支付失败 删除订单
+                    vipOrder.setDelFlag(1);
+                    this.updateById(vipOrder);
+                    //返回报错信息
+                    return R.fail(null == r ? "支付失败" : r.getMsg());
+                }
+                //将支付数据添加到redis队列中,便于定时任务去校验是否完成支付,没有完成支付支付,15分钟后关闭订单。
+                long second = LocalDateTime.now().plusMinutes(15).toEpochSecond(ZoneOffset.UTC);
+                redisTemplate.opsForZSet().add("VipOrderPayment", vipOrder.getOrderNumber(), second);
+                return r;
+            } catch (Exception e) {
+                throw new RuntimeException(e);
             }
-            String rc_result = uniPayResult.getRc_Result();
-            JSONObject jsonObject = JSON.parseObject(rc_result);
-            jsonObject.put("orderId", vipOrder.getId().toString());
-            //将支付数据添加到redis队列中,便于定时任务去校验是否完成支付,没有完成支付支付,15分钟后关闭订单。
-            long second = LocalDateTime.now().plusMinutes(15).toEpochSecond(ZoneOffset.UTC);
-            redisTemplate.opsForZSet().add("VipOrderPayment", vipOrder.getOrderNumber(), second);
-            return R.ok(jsonObject.toJSONString());
         }
         //设置vipOrder信息
         vipOrder.setPayStatus(2);//已支付
         vipOrder.setOrderTime(LocalDateTime.now());//下单时间
+        vipOrder.setOrderStatus(4);
         this.updateById(vipOrder);
         //更新用户信息
         Long appUserId = vipOrder.getAppUserId();
@@ -96,16 +103,17 @@
     }
 
     @Override
-    public R orderPaymentCallback(UniPayCallbackResult uniPayCallbackResult) {
-        VipOrder vipOrder = this.getBaseMapper().selectOne(new LambdaQueryWrapper<VipOrder>().eq(VipOrder::getOrderNumber, uniPayCallbackResult.getR2_OrderNo()));
+    public R orderPaymentCallback(PayResult payResult) {
+        VipOrder vipOrder = this.getBaseMapper().selectOne(new LambdaQueryWrapper<VipOrder>().eq(VipOrder::getOrderNumber, payResult.getOrderNumber()));
         if(null == vipOrder || vipOrder.getPayStatus() == 2){
             return R.ok();
         }
         //设置vipOrder信息
         vipOrder.setPayStatus(2);//已支付
         vipOrder.setOrderTime(LocalDateTime.now());//下单时间
-        String r7TrxNo = uniPayCallbackResult.getR9_BankTrxNo();
+        String r7TrxNo = payResult.getTransactionId();
         vipOrder.setSerialNumber(r7TrxNo);
+        vipOrder.setOrderStatus(4);
         this.updateById(vipOrder);
         //更新用户信息
         //检查是否续期的
@@ -120,6 +128,7 @@
         // 根据 vipId 计算会员到期时间
         LocalDateTime endTime = calculateEndTime(appUser.getEndTime(), vipOrder.getVipId());
         appUser.setEndTime(endTime);
+
         appUserMapper.updateById(appUser);
         return R.ok();
     }
@@ -138,11 +147,10 @@
                     continue;
                 }
                 //开始执行关闭订单操作
-                CloseOrderResult closeOrderResult = PaymentUtil.closeOrder(order.getOrderNumber());
-                if((null == closeOrderResult || !closeOrderResult.getRa_Status().equals("100")) &&
-                        Arrays.asList("0", "4", "101", "10080000", "10080002", "10083004", "10083005").contains(closeOrderResult.getRb_Code())){
+                Map<String, String> map = wechatPayService.closeOrder(order.getOrderNumber());
+                if((null == map || !map.get("return_code").equals("SUCCESS"))){
                     redisTemplate.opsForZSet().add("VipOrderPayment", order.getOrderNumber(), 0);
-                    log.error("关闭订单失败:{}---->{}",order.getOrderNumber(), JSON.toJSONString(closeOrderResult));
+                    log.error("关闭订单失败:{}---->{}", order.getOrderNumber(), map.get("return_msg"));
                 }
                 redisTemplate.opsForZSet().remove("VipOrderPayment", order.getOrderNumber());
                 //删除订单
@@ -153,6 +161,12 @@
         }
     }
 
+    @Override
+    public OrderSysDetailVO detail(Integer id) {
+
+        return this.getBaseMapper().detail(id);
+    }
+
 
     private LocalDateTime calculateEndTime(LocalDateTime startTime, Integer vipId) {
         switch (vipId) {

--
Gitblit v1.7.1