From 4a28184ee117fa3aa5bf150d3e97698fd6c3e13c Mon Sep 17 00:00:00 2001
From: “mitao” <“2763622819@qq.com”>
Date: 星期三, 29 四月 2026 20:35:40 +0800
Subject: [PATCH] feat:冒烟修改

---
 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/TExchangeCodePackageServiceImpl.java |   54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 54 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 8a22735..f6c5449 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
@@ -61,6 +61,7 @@
     private static final Integer USE_RECORD_TYPE_EXCHANGE = 1;
     private static final Integer USE_RECORD_TYPE_CONSUME = 2;
     private static final Integer USE_RECORD_TYPE_REFUND = 3;
+    private static final String EXPIRE_INVALID_REASON = "领取截止日期已过期";
     private static final DateTimeFormatter BATCH_FORMATTER = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
 
     @Resource
@@ -112,6 +113,35 @@
     }
 
     @Override
+    public void updatePackageStatus(Long id, Integer status) {
+        if (id == null) {
+            throw new ServiceException("卡包ID不能为空");
+        }
+        if (!STATUS_ENABLE.equals(status) && !STATUS_DISABLE.equals(status)) {
+            throw new ServiceException("启用状态不正确");
+        }
+        TExchangeCodePackage old = this.getById(id);
+        if (old == null) {
+            throw new ServiceException("卡包不存在");
+        }
+        TExchangeCodePackage entity = new TExchangeCodePackage();
+        entity.setId(id);
+        entity.setStatus(status);
+        this.updateById(entity);
+    }
+
+    @Override
+    public void refreshExpiredPackageCodes() {
+        List<TExchangeCodePackage> expiredPackages = this.list(new QueryWrapper<TExchangeCodePackage>()
+                .isNotNull("expire_time")
+                .lt("expire_time", LocalDateTime.now())
+                .eq("del_flag", 0));
+        for (TExchangeCodePackage exchangePackage : expiredPackages) {
+            refreshExpiredPackageCodes(exchangePackage.getId());
+        }
+    }
+
+    @Override
     @Transactional(rollbackFor = Exception.class)
     public void deletePackage(String ids) {
         if (!StringUtils.hasText(ids)) {
@@ -142,6 +172,7 @@
         if (entity == null) {
             throw new ServiceException("卡包不存在");
         }
+        refreshExpiredPackageCodes(id);
         refreshPackageStats(id);
         entity = this.getById(id);
         ExchangeCodePackageDetailVO detailVO = new ExchangeCodePackageDetailVO();
@@ -171,6 +202,7 @@
 
     @Override
     public PageInfo<ExchangeCodeDetailVO> codePage(ExchangeCodeDetailQuery query) {
+        refreshExpiredPackageCodes(query.getPackageId());
         PageInfo<ExchangeCodeDetailVO> pageInfo = new PageInfo<>(query.getPageCurr(), query.getPageSize());
         List<ExchangeCodeDetailVO> records = codeDetailMapper.pageList(pageInfo, query);
         pageInfo.setRecords(records);
@@ -179,6 +211,7 @@
 
     @Override
     public List<ExchangeCodeDetailVO> exportCodes(ExchangeCodeDetailQuery query) {
+        refreshExpiredPackageCodes(query.getPackageId());
         return codeDetailMapper.exportList(query);
     }
 
@@ -255,6 +288,7 @@
             throw new ServiceException("卡包已下架");
         }
         if (exchangePackage.getExpireTime() != null && exchangePackage.getExpireTime().isBefore(LocalDateTime.now())) {
+            refreshExpiredPackageCodes(exchangePackage.getId());
             throw new ServiceException("已失效");
         }
         if (Objects.equals(detail.getStatus(), CODE_STATUS_INVALID)) {
@@ -657,6 +691,26 @@
         this.baseMapper.updateById(entity);
     }
 
+    private void refreshExpiredPackageCodes(Long packageId) {
+        if (packageId == null) {
+            return;
+        }
+        TExchangeCodePackage exchangePackage = this.getById(packageId);
+        if (exchangePackage == null || exchangePackage.getExpireTime() == null
+                || !exchangePackage.getExpireTime().isBefore(LocalDateTime.now())) {
+            return;
+        }
+        TExchangeCodeDetail detail = new TExchangeCodeDetail();
+        detail.setStatus(CODE_STATUS_INVALID);
+        detail.setInvalidTime(LocalDateTime.now());
+        detail.setInvalidReason(EXPIRE_INVALID_REASON);
+        codeDetailMapper.update(detail, new QueryWrapper<TExchangeCodeDetail>()
+                .eq("package_id", packageId)
+                .eq("status", CODE_STATUS_UNBOUND)
+                .eq("del_flag", 0));
+        refreshPackageStats(packageId);
+    }
+
     private String generateCode(Long packageId, int seq) {
         return "CD" + packageId + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyMMddHHmmss")) + String.format("%03d", seq);
     }

--
Gitblit v1.7.1