From 1c7e22837254781947366d09282d48a45347d0e5 Mon Sep 17 00:00:00 2001
From: huliguo <2023611923@qq.com>
Date: 星期三, 06 八月 2025 10:20:45 +0800
Subject: [PATCH] 发送小程序订单数量
---
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