From 8a89ba02db5c19db669a5cf9bb7d443223bdfb71 Mon Sep 17 00:00:00 2001
From: 刘帅 <rr.iii@qq.com>
Date: 星期二, 29 九月 2026 10:48:21 +0800
Subject: [PATCH] 会员管理及取消场地预约问题
---
cloud-server-other/src/main/java/com/dsh/other/util/PayMoneyUtil.java | 2 +-
cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TVipController.java | 15 +++++++++++----
cloud-server-other/src/main/java/com/dsh/other/service/impl/SiteServiceImpl.java | 16 ++++++++++++----
3 files changed, 24 insertions(+), 9 deletions(-)
diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TVipController.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TVipController.java
index ae8efc8..cd70dfc 100644
--- a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TVipController.java
+++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TVipController.java
@@ -61,7 +61,13 @@
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Vip vip = vipService.getById(id);
+ if (vip == null) {
+ throw new IllegalArgumentException("会员卡不存在: " + id);
+ }
model.addAttribute("vip",vip);
+ // 编辑页的两个权益列表都会被模板遍历,即使会员卡尚未配置权益也必须提供空集合。
+ model.addAttribute("couponList", new ArrayList<Coupon>());
+ model.addAttribute("ticketList", new ArrayList<TicketDetailVO>());
if (vip.getCouponJson() != null && !vip.getCouponJson().isEmpty()){
String couponJson = vip.getCouponJson();
// 转化为jsonArray
@@ -128,10 +134,6 @@
model.addAttribute("couponList", new ArrayList<Coupon>());
}
}
- else{
- model.addAttribute("ticketList", new ArrayList<Coupon>());
-
- }
if (vip.getTicketJson() != null && !vip.getTicketJson().isEmpty()){
String ticketJson = vip.getTicketJson();
@@ -171,7 +173,12 @@
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Vip vip = vipService.getById(id);
+ if (vip == null) {
+ throw new IllegalArgumentException("会员卡不存在: " + id);
+ }
model.addAttribute("vip",vip);
+ model.addAttribute("couponList", new ArrayList<Coupon>());
+ model.addAttribute("ticketList", new ArrayList<TicketDetailVO>());
if (vip.getCouponJson() != null && !vip.getCouponJson().isEmpty()){
String couponJson = vip.getCouponJson();
// 转化为jsonArray
diff --git a/cloud-server-other/src/main/java/com/dsh/other/service/impl/SiteServiceImpl.java b/cloud-server-other/src/main/java/com/dsh/other/service/impl/SiteServiceImpl.java
index b61094d..a3f5bd2 100644
--- a/cloud-server-other/src/main/java/com/dsh/other/service/impl/SiteServiceImpl.java
+++ b/cloud-server-other/src/main/java/com/dsh/other/service/impl/SiteServiceImpl.java
@@ -13,6 +13,7 @@
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.dsh.other.entity.*;
+import com.dsh.other.enums.SiteBookingStatusEnum;
import com.dsh.other.feignclient.StoreClient;
import com.dsh.other.feignclient.account.AppUserClient;
import com.dsh.other.feignclient.account.model.AppUser;
@@ -1186,7 +1187,10 @@
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
String code = sdf.format(new Date()) + UUIDUtil.getNumberRandom(5);// 退款单号
// 运营商退款
- payMoneyUtil.weixinRefundV3(smidVx, code, siteBooking.getPayOrderNo(), siteBooking.getPayMoney().toString(), "/base/site/cancelMySiteCallback1");
+ ResultUtil refundResult = payMoneyUtil.weixinRefundV3(smidVx, code, siteBooking.getPayOrderNo(), siteBooking.getPayMoney().toString(), "/base/site/cancelMySiteCallback1");
+ if (!ResultUtil.SUCCESS.equals(refundResult.getCode())) {
+ return refundResult;
+ }
} else {
Map<String, String> map = payMoneyUtil.wxRefund(siteBooking.getPayOrderNo(), siteBooking.getOrderNo(), siteBooking.getPayMoney().toString(),
siteBooking.getPayMoney().toString(), "/base/site/cancelMySiteCallback");
@@ -1197,9 +1201,6 @@
if (!"SUCCESS".equals(return_code)) {
return ResultUtil.error(map.get("return_msg"));
}
- siteBooking.setCancelUserId(uid);
- siteBookingService.updateById(siteBooking);
-
TBackRecord tBackRecord = new TBackRecord();
tBackRecord.setMoney(siteBooking.getPayMoney());
tBackRecord.setUserId(siteBooking.getAppUserId());
@@ -1207,6 +1208,13 @@
backRecordService.save(tBackRecord);
}
+ // 退款请求已受理即结束该预约,不能继续在“待核销”列表中展示。
+ // 微信退款回调用于补充退款流水号及恢复优惠券,重复更新状态不会影响结果。
+ siteBooking.setStatus(SiteBookingStatusEnum.CANCELED.getCode());
+ siteBooking.setCancelUserId(uid);
+ siteBooking.setCancelTime(new Date());
+ siteBookingService.updateById(siteBooking);
+
}
if (siteBooking.getPayType() == 2) {//支付宝
diff --git a/cloud-server-other/src/main/java/com/dsh/other/util/PayMoneyUtil.java b/cloud-server-other/src/main/java/com/dsh/other/util/PayMoneyUtil.java
index 01e01ff..d91642a 100644
--- a/cloud-server-other/src/main/java/com/dsh/other/util/PayMoneyUtil.java
+++ b/cloud-server-other/src/main/java/com/dsh/other/util/PayMoneyUtil.java
@@ -598,8 +598,8 @@
// TODO: 请求成功,继续业务逻辑
System.out.println(response);
} catch (WXPayUtility.ApiException e) {
- // TODO: 请求失败,根据状态码执行不同的逻辑
e.printStackTrace();
+ return ResultUtil.error("微信退款申请失败");
}
return ResultUtil.success();
}
--
Gitblit v1.7.1