From b7ace278c8486eb6299f6668f8d092fb859352ca Mon Sep 17 00:00:00 2001
From: liujie <1793218484@qq.com>
Date: 星期二, 28 四月 2026 09:12:55 +0800
Subject: [PATCH] p0功能 小程序

---
 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/TExchangeCodePackageServiceImpl.java |   52 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 52 insertions(+), 0 deletions(-)

diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/TExchangeCodePackageServiceImpl.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/TExchangeCodePackageServiceImpl.java
index b326cff..6fae99a 100644
--- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/TExchangeCodePackageServiceImpl.java
+++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/TExchangeCodePackageServiceImpl.java
@@ -1,6 +1,7 @@
 package com.ruoyi.other.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.common.core.exception.ServiceException;
 import com.ruoyi.common.core.utils.StringUtils;
@@ -13,6 +14,7 @@
 import com.ruoyi.other.api.dto.ExchangeCodeConsumeDTO;
 import com.ruoyi.other.api.dto.ExchangeCodePackageSaveDTO;
 import com.ruoyi.other.api.dto.ExchangeCodePackageSpecDTO;
+import com.ruoyi.other.api.dto.ExchangeCodeUseRecordQuery;
 import com.ruoyi.other.api.vo.ExchangeCodeBindResultVO;
 import com.ruoyi.other.api.vo.ExchangeCodeConsumeResultVO;
 import com.ruoyi.other.api.vo.ExchangeCodePackageDetailVO;
@@ -276,6 +278,13 @@
         detail.setBindPhone(bindPhone);
         detail.setBindTime(LocalDateTime.now());
         codeDetailMapper.updateById(detail);
+        BigDecimal amount = getDetailRemainAmount(detail);
+        TExchangeCodeUseRecord record = new TExchangeCodeUseRecord();
+        record.setDetailId(detail.getId());
+        record.setOrderId(0L);
+        record.setUserId(userId);
+        record.setUsedAmount(amount);
+        useRecordMapper.insert(record);
         refreshPackageStats(exchangePackage.getId());
         ExchangeCodeBindResultVO resultVO = new ExchangeCodeBindResultVO();
         resultVO.setDetailId(detail.getId());
@@ -283,6 +292,28 @@
         resultVO.setPackageName(exchangePackage.getPackageName());
         resultVO.setBindPhone(bindPhone);
         return resultVO;
+    }
+
+    @Override
+    public Page<TExchangeCodeUseRecord> useRecordPage(ExchangeCodeUseRecordQuery query) {
+        Page<TExchangeCodeUseRecord> page = useRecordMapper.selectPage(Page.of(query.getPageCurr(), query.getPageSize()),
+                new QueryWrapper<TExchangeCodeUseRecord>()
+                        .eq("user_id", query.getUserId())
+                        .eq(Objects.equals(query.getChangeType(), 1), "IFNULL(order_id, 0)", 0)
+                        .gt(Objects.equals(query.getChangeType(), 2), "order_id", 0)
+                        .orderByDesc("create_time"));
+        page.getRecords().forEach(this::fillUseRecordView);
+        return page;
+    }
+
+    @Override
+    public TExchangeCodeUseRecord useRecordDetail(Long id, Long userId) {
+        TExchangeCodeUseRecord record = useRecordMapper.selectOne(new QueryWrapper<TExchangeCodeUseRecord>()
+                .eq("id", id)
+                .eq("user_id", userId)
+                .last("limit 1"));
+        fillUseRecordView(record);
+        return record;
     }
 
     @Override
@@ -318,6 +349,7 @@
         }
         List<TExchangeCodeUseRecord> existingRecords = useRecordMapper.selectList(new QueryWrapper<TExchangeCodeUseRecord>()
                 .eq("order_id", dto.getOrderId())
+                .gt("order_id", 0)
                 .eq("del_flag", 0));
         if (!existingRecords.isEmpty()) {
             BigDecimal deducted = existingRecords.stream()
@@ -530,6 +562,26 @@
         return UUID.randomUUID().toString().replace("-", "").substring(0, 8).toUpperCase();
     }
 
+    private void fillUseRecordView(TExchangeCodeUseRecord record) {
+        if (record == null) {
+            return;
+        }
+        record.setUid(String.valueOf(record.getId()));
+        record.setDateTime(record.getCreateTime());
+        record.setChangeAmount(defaultMoney(record.getUsedAmount()));
+        record.setCurrentBalance(defaultMoney(record.getUsedAmount()));
+        record.setChangeType(record.getOrderId() == null || record.getOrderId() == 0 ? 1 : 2);
+        if (record.getDetailId() != null) {
+            TExchangeCodeDetail detail = codeDetailMapper.selectById(record.getDetailId());
+            if (detail != null) {
+                record.setCode(detail.getCode());
+            }
+        }
+        if (record.getOrderId() != null && record.getOrderId() > 0) {
+            record.setOrderCode(String.valueOf(record.getOrderId()));
+        }
+    }
+
     private BigDecimal defaultMoney(BigDecimal amount) {
         return amount == null ? BigDecimal.ZERO.setScale(2, RoundingMode.HALF_UP)
                 : amount.setScale(2, RoundingMode.HALF_UP);

--
Gitblit v1.7.1