“mitao”
2026-04-15 5ad8d714d43ecf06aa9d900a69e7b22018ce7ed6
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 "待支付";