Compare commits

..

3 Commits

Author SHA1 Message Date
ba86ac45f4 feat(core): 新增VIP到期定时检查任务 2026-04-09 14:22:14 +08:00
d1f1e72732 Merge remote-tracking branch 'origin/main'
# Conflicts:
#	keyboard-server/src/main/java/com/yolo/keyboard/dal/dataobject/aicompanion/AiCompanionI18nDO.java
2026-04-08 17:51:01 +08:00
ab09d0ee74 refactor(aicompanion): 将开场白字段迁移至 i18n 表
- 从 KeyboardAiCompanionDO 移除 prologue 与 prologueAudio
- 在 AiCompanionI18nDO 新增对应字段
- 同步调整 Mapper 查询逻辑
2026-04-08 17:50:47 +08:00
2 changed files with 64 additions and 1 deletions

View File

@@ -59,5 +59,5 @@ public class AiCompanionI18nDO {
private String prologue; private String prologue;
private String prologue_audio; private String prologueAudio;
} }

View File

@@ -0,0 +1,63 @@
package com.yolo.keyboard.job;
import cn.hutool.core.collection.CollUtil;
import com.yolo.keyboard.dal.dataobject.user.KeyboardUserDO;
import com.yolo.keyboard.dal.mysql.user.KeyboardUserMapper;
import com.yolo.keyboard.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.yolo.keyboard.framework.quartz.core.handler.JobHandler;
import com.yolo.keyboard.framework.tenant.core.aop.TenantIgnore;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
import java.util.List;
/**
* VIP 到期检查定时任务
* 定期执行,将 VIP 已过期的用户关闭 VIP 权限
*
* @author ziin
*/
@Component
@Slf4j
public class VipExpiryCheckJob implements JobHandler {
@Resource
private KeyboardUserMapper userMapper;
@Override
@TenantIgnore
public String execute(String param) {
log.info("[VipExpiryCheckJob] 开始执行 VIP 到期检查任务");
LocalDateTime now = LocalDateTime.now();
// 查询 VIP 已过期且仍处于 VIP 状态的用户
List<KeyboardUserDO> expiredUsers = userMapper.selectList(
new LambdaQueryWrapperX<KeyboardUserDO>()
.eq(KeyboardUserDO::getIsVip, true)
.le(KeyboardUserDO::getVipExpiry, now)
);
if (CollUtil.isEmpty(expiredUsers)) {
log.info("[VipExpiryCheckJob] 没有需要处理的过期 VIP 用户");
return "没有需要处理的过期 VIP 用户";
}
int count = 0;
for (KeyboardUserDO user : expiredUsers) {
user.setIsVip(false);
user.setUpdatedAt(now);
userMapper.updateById(user);
count++;
log.info("[VipExpiryCheckJob] 用户 {} VIP 已过期,已关闭 VIP 权限,过期时间: {}",
user.getUid(), user.getVipExpiry());
}
String result = String.format("共处理 %d 个过期 VIP 用户", count);
log.info("[VipExpiryCheckJob] 任务执行完成: {}", result);
return result;
}
}