“mitao”
2026-04-29 4a28184ee117fa3aa5bf150d3e97698fd6c3e13c
feat:冒烟修改
1个文件已添加
4个文件已修改
90 ■■■■■ 已修改文件
ruoyi-gateway/src/main/resources/logback.xml 4 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TExchangeCodePackageController.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/TExchangeCodePackageService.java 4 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/TExchangeCodePackageServiceImpl.java 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/task/ExchangeCodeExpireTask.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-gateway/src/main/resources/logback.xml
@@ -7,8 +7,8 @@
    <contextName>logback</contextName>
    
    <!-- name的值是变量的名称,value的值时变量定义的值。通过定义的值会被插入到logger上下文中。定义后,可以使“${}”来使用变量。 -->
<!--    <property name="log.path" value="/data/log/app/ruoyi-gateway"/>-->
    <property name="log.path" value="/Users/mitao/Documents/log/mx_charging_pile/log/app/ruoyi-gateway"/>
    <property name="log.path" value="/data/log/app/ruoyi-gateway"/>
<!--    <property name="log.path" value="/Users/mitao/Documents/log/mx_charging_pile/log/app/ruoyi-gateway"/>-->
    <!--0. 日志格式和颜色渲染 -->
    <!-- 彩色日志依赖的渲染类 -->
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TExchangeCodePackageController.java
@@ -77,6 +77,15 @@
        return AjaxResult.success();
    }
    @RequiresPermissions(value = {"/exchangeCode/update"}, logical = Logical.OR)
    @PostMapping("/updateStatus")
    @ApiOperation(value = "更新兑换码卡包启用状态", tags = {"管理后台-兑换码管理"})
    @Log(title = "【兑换码管理】更新启用状态", businessType = BusinessType.UPDATE, operatorType = OperatorType.MANAGE)
    public AjaxResult<Void> updateStatus(@RequestBody ExchangeCodePackageSaveDTO dto) {
        exchangeCodePackageService.updatePackageStatus(dto.getId(), dto.getStatus());
        return AjaxResult.success();
    }
    @RequiresPermissions(value = {"/exchangeCode/del"}, logical = Logical.OR)
    @GetMapping("/delete")
    @ApiOperation(value = "删除兑换码卡包", tags = {"管理后台-兑换码管理"})
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/TExchangeCodePackageService.java
@@ -29,6 +29,10 @@
    void updatePackage(ExchangeCodePackageSaveDTO dto);
    void updatePackageStatus(Long id, Integer status);
    void refreshExpiredPackageCodes();
    void deletePackage(String ids);
    ExchangeCodePackageDetailVO getDetail(Long id);
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);
    }
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/task/ExchangeCodeExpireTask.java
New file
@@ -0,0 +1,19 @@
package com.ruoyi.other.task;
import com.ruoyi.other.service.TExchangeCodePackageService;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
@Component
public class ExchangeCodeExpireTask {
    @Resource
    private TExchangeCodePackageService exchangeCodePackageService;
    @Scheduled(cron = "0 */5 * * * ?")
    public void refreshExpiredPackageCodes() {
        exchangeCodePackageService.refreshExpiredPackageCodes();
    }
}