From 5ad8d714d43ecf06aa9d900a69e7b22018ce7ed6 Mon Sep 17 00:00:00 2001
From: “mitao” <“2763622819@qq.com”>
Date: 星期三, 15 四月 2026 23:09:44 +0800
Subject: [PATCH] feat:APP个人中心
---
tcm-training-admin-backend/src/main/java/com/tcm/training/admin/member/service/MemberPurchaseOrderAppService.java | 84 +++++++++++++++++++++++++++++++++++++++++-
1 files changed, 82 insertions(+), 2 deletions(-)
diff --git a/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/member/service/MemberPurchaseOrderAppService.java b/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/member/service/MemberPurchaseOrderAppService.java
index eb886b5..649b403 100644
--- a/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/member/service/MemberPurchaseOrderAppService.java
+++ b/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/member/service/MemberPurchaseOrderAppService.java
@@ -4,6 +4,8 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.tcm.training.admin.app.auth.service.AppAuthSessionService;
+import com.tcm.training.admin.app.member.vo.AppMemberPurchaseOrderItemVO;
import com.tcm.training.admin.common.DateTimes;
import com.tcm.training.admin.common.PageResponse;
import com.tcm.training.admin.common.PhoneMasker;
@@ -37,11 +39,20 @@
private static final String PAYMENT_METHOD_ALIPAY = "ALIPAY";
private final MemberPurchaseOrderMapper memberPurchaseOrderMapper;
+ private final AppAuthSessionService appAuthSessionService;
- public MemberPurchaseOrderAppService(MemberPurchaseOrderMapper memberPurchaseOrderMapper) {
+ /**
+ * 注入会员订单查询能力。
+ */
+ public MemberPurchaseOrderAppService(MemberPurchaseOrderMapper memberPurchaseOrderMapper,
+ AppAuthSessionService appAuthSessionService) {
this.memberPurchaseOrderMapper = memberPurchaseOrderMapper;
+ this.appAuthSessionService = appAuthSessionService;
}
+ /**
+ * 分页查询后台会员购买订单。
+ */
public PageResponse<MemberPurchaseOrderListItemVO> page(int page,
int pageSize,
String orderNo,
@@ -64,6 +75,21 @@
return PageResponse.of(toList(result.getRecords()), result.getTotal(), result.getCurrent(), result.getSize());
}
+ /**
+ * 分页查询当前登录用户的 APP 会员购买记录。
+ */
+ public PageResponse<AppMemberPurchaseOrderItemVO> appUserPage(int page, int pageSize) {
+ Long userId = appAuthSessionService.requireLoginUserId();
+ IPage<MemberPurchaseOrderRow> result = memberPurchaseOrderMapper.selectAppUserOrderPage(
+ new Page<MemberPurchaseOrderRow>(page, pageSize),
+ userId
+ );
+ return PageResponse.of(toAppList(result.getRecords()), result.getTotal(), result.getCurrent(), result.getSize());
+ }
+
+ /**
+ * 导出后台会员购买订单。
+ */
public void export(String orderNo,
String userPhone,
String memberType,
@@ -116,6 +142,9 @@
throw new IllegalArgumentException("退款功能待支付方案确认后接入");
}
+ /**
+ * 删除后台已退款会员订单。
+ */
@Transactional
public void delete(Long id) {
MemberPurchaseOrder order = requireOrder(id);
@@ -125,6 +154,9 @@
memberPurchaseOrderMapper.deleteById(id);
}
+ /**
+ * 校验会员购买订单存在。
+ */
private MemberPurchaseOrder requireOrder(Long id) {
MemberPurchaseOrder order = memberPurchaseOrderMapper.selectOne(new LambdaQueryWrapper<MemberPurchaseOrder>()
.eq(MemberPurchaseOrder::getId, id)
@@ -136,6 +168,9 @@
return order;
}
+ /**
+ * 将后台订单查询结果转换为后台列表响应。
+ */
private List<MemberPurchaseOrderListItemVO> toList(List<MemberPurchaseOrderRow> rows) {
List<MemberPurchaseOrderListItemVO> list = new ArrayList<MemberPurchaseOrderListItemVO>();
for (MemberPurchaseOrderRow row : rows) {
@@ -159,6 +194,33 @@
return list;
}
+ /**
+ * 将订单查询结果转换为 APP 购买记录列表响应。
+ */
+ private List<AppMemberPurchaseOrderItemVO> toAppList(List<MemberPurchaseOrderRow> rows) {
+ List<AppMemberPurchaseOrderItemVO> list = new ArrayList<AppMemberPurchaseOrderItemVO>();
+ for (MemberPurchaseOrderRow row : rows) {
+ AppMemberPurchaseOrderItemVO item = new AppMemberPurchaseOrderItemVO();
+ item.setId(row.getId());
+ item.setOrderNo(row.getOrderNo());
+ item.setMemberType(row.getMemberType());
+ item.setMemberTypeText(memberTypeText(row.getMemberType()));
+ item.setOrderAmount(row.getOrderAmount());
+ item.setPaymentMethod(row.getPaymentMethod());
+ item.setPaymentMethodText(paymentMethodText(row.getPaymentMethod()));
+ item.setStatus(row.getStatus());
+ // APP 购买记录页在退款场景下要展示退款金额标签,没有单独退款额时回退订单金额。
+ item.setRefundAmount(resolveRefundAmount(row.getStatus(), row.getOrderAmount(), row.getRefundAmount()));
+ item.setShowRefundTag(Boolean.valueOf(STATUS_REFUNDED.equals(row.getStatus())));
+ item.setPaidAt(row.getPaidAt());
+ list.add(item);
+ }
+ return list;
+ }
+
+ /**
+ * 解析订单应展示的退款金额。
+ */
private BigDecimal resolveRefundAmount(String status, BigDecimal orderAmount, BigDecimal refundAmount) {
if (!STATUS_REFUNDED.equals(status)) {
return null;
@@ -177,6 +239,9 @@
return null;
}
+ /**
+ * 将空白文本归一化为 null。
+ */
private String trimToNull(String value) {
if (value == null) {
return null;
@@ -185,24 +250,36 @@
return trimmed.isEmpty() ? null : trimmed;
}
+ /**
+ * 缺省文本展示兜底。
+ */
private String defaultText(String value) {
return value == null || value.trim().isEmpty() ? "-" : value.trim();
}
+ /**
+ * 将会员天数转换为展示文案。
+ */
private String memberDaysText(Integer memberDays) {
return memberDays == null ? "-" : memberDays + "天";
}
+ /**
+ * 将会员类型转换为展示文案。
+ */
private String memberTypeText(String memberType) {
if (MEMBER_TYPE_MONTH_CARD.equals(memberType)) {
return "月卡";
}
if (MEMBER_TYPE_QUARTER_CARD.equals(memberType)) {
- return "季卡";
+ return "季度会员";
}
return "-";
}
+ /**
+ * 将支付方式转换为展示文案。
+ */
private String paymentMethodText(String paymentMethod) {
if (PAYMENT_METHOD_WECHAT.equals(paymentMethod)) {
return "微信支付";
@@ -213,6 +290,9 @@
return "-";
}
+ /**
+ * 将订单状态转换为展示文案。
+ */
private String statusText(String status) {
if (STATUS_WAITING_PAYMENT.equals(status)) {
return "待支付";
--
Gitblit v1.7.1