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