blob: 0ec838d354d4772e3544a631efdd9b76770d86a5 [file] [log] [blame]
22301102f5670302025-06-08 14:10:02 +08001package com.pt.scheduler;
2
3import com.pt.entity.PeerInfoEntity;
4import com.pt.entity.User;
5import com.pt.repository.PeerInfoRepository;
6import com.pt.service.UserService;
7import org.slf4j.Logger;
8import org.slf4j.LoggerFactory;
9import org.springframework.beans.factory.annotation.Autowired;
10import org.springframework.scheduling.annotation.Scheduled;
11import org.springframework.stereotype.Component;
12import org.springframework.transaction.annotation.Transactional;
13
14import java.util.List;
15
16/**
17 * 定时任务,用于同步用户的流量数据
18 */
19@Component
20public class UserTrafficSyncScheduler {
21
22 private static final Logger logger = LoggerFactory.getLogger(UserTrafficSyncScheduler.class);
23
24 @Autowired
25 private UserService userService;
26
27 @Autowired
28 private PeerInfoRepository peerInfoRepository;
29
30 /**
31 * 每小时执行一次流量同步
32 * 确保用户的总流量数据准确
33 */
34 @Scheduled(cron = "0 0 * * * ?")
35 @Transactional
36 public void syncUserTraffic() {
37 logger.info("开始执行定时任务:同步用户流量数据...");
38 try {
39 List<User> users = userService.listAll();
40 for (User user : users) {
41 // 获取用户所有peer的总流量
42 Long totalUploaded = peerInfoRepository.sumUploadedByUsername(user.getUsername());
43 Long totalDownloaded = peerInfoRepository.sumDownloadedByUsername(user.getUsername());
44
45 // 如果查询结果为空,设置为0
46 totalUploaded = totalUploaded != null ? totalUploaded : 0L;
47 totalDownloaded = totalDownloaded != null ? totalDownloaded : 0L;
48
49 // 更新用户流量
50 user.setUploaded(totalUploaded);
51 user.setDownloaded(totalDownloaded);
52 userService.save(user);
53
54 // 更新用户等级
55 userService.updateUserLevel(user.getUid());
56
57 logger.info("用户 {} 流量同步完成: 上传={}, 下载={}",
58 user.getUsername(), totalUploaded, totalDownloaded);
59 }
60 logger.info("定时任务完成:所有用户流量数据已同步");
61 } catch (Exception e) {
62 logger.error("执行用户流量同步定时任务时发生错误", e);
63 }
64 }
65}