添加更新用户流量的方法,并定时跟新到所有用户

Change-Id: I9aa5b3ace0bf327980554a89611b059caed12360
diff --git a/src/main/java/com/pt/controller/UserController.java b/src/main/java/com/pt/controller/UserController.java
index 7222f36..d9f53ab 100644
--- a/src/main/java/com/pt/controller/UserController.java
+++ b/src/main/java/com/pt/controller/UserController.java
@@ -77,7 +77,14 @@
         if (user != null) {
             String token = JWTUtils.generateToken(username, Constants.UserRole.USER, Constants.DEFAULT_EXPIRE_TIME);
             ans.put("message", "Login successful");
-            ans.put("data", token);
+            ans.put("data", Map.of(
+                    "token", token,
+                    "uid", user.getUid(),
+                    "username", user.getUsername(),
+                    "email", user.getEmail(),
+                    "level", user.getLevel(),
+                    "points", user.getPoints()
+            ));
             return ResponseEntity.ok().body(ans);
         } else {
             ans.put("message", "Invalid username or password");
@@ -160,9 +167,8 @@
 
     @DeleteMapping("/delete")
     public ResponseEntity<?> deleteUser(@RequestHeader("token") String token,
-                                        @RequestBody Map<String, String> request) {
-        String username = request.get("username");
-        String targetUsername = request.get("targetUsername");
+                                        @RequestParam("username") String username,
+                                        @RequestParam("targetUsername") String targetUsername) {
 
         Map<String, Object> ans = new HashMap<>();
         if(!JWTUtils.checkToken(token, username, Constants.UserRole.ADMIN)) {
@@ -183,8 +189,7 @@
 
     @GetMapping("/list")
     public ResponseEntity<?> listUsers(@RequestHeader("token") String token,
-                                       @RequestBody Map<String, String> request) {
-        String username = request.get("username");
+                                       @RequestParam("username") String username) {
         if(!JWTUtils.checkToken(token, username, Constants.UserRole.ADMIN)) {
             return ResponseEntity.badRequest().body("Invalid token");
         }
@@ -203,8 +208,10 @@
                                          @RequestParam("username") String username) {
 
         Map<String, Object> ans = new HashMap<>();
+        System.out.println("Enter user info ");
         if(!JWTUtils.checkToken(token, username, Constants.UserRole.USER)) {
             ans.put("message", "Invalid token");
+            System.out.println("Invalid token");
             return ResponseEntity.badRequest().body(ans);
         }
 
@@ -212,10 +219,71 @@
         if (user != null) {
             ans.put("message", "User info retrieved successfully");
             ans.put("data", user);
+            System.out.println("User info retrieved successfully");
             return ResponseEntity.ok(ans);
         } else {
             ans.put("message", "User not found");
+            System.out.println("User not found");
             return ResponseEntity.badRequest().body(ans);
         }
     }
+
+    /**
+     * 获取用户统计信息
+     */
+    @GetMapping("/stats/{username}")
+    public ResponseEntity<?> getUserStats(
+            @RequestHeader("token") String token,
+            @PathVariable String username) {
+        
+        Map<String, Object> ans = new HashMap<>();
+        
+        if(!JWTUtils.checkToken(token, username, Constants.UserRole.USER)) {
+            ans.put("message", "Invalid token");
+            return ResponseEntity.badRequest().body(ans);
+        }
+
+        User user = userService.findByUsername(username);
+        if (user == null) {
+            ans.put("message", "User not found");
+            return ResponseEntity.badRequest().body(ans);
+        }
+
+        // 计算分享率
+        double ratio = user.getDownloaded() == 0 ? 
+            (user.getUploaded() > 0 ? Double.MAX_VALUE : 0) : 
+            (double) user.getUploaded() / user.getDownloaded();
+        
+        // 格式化分享率为两位小数
+        ratio = Math.round(ratio * 100.0) / 100.0;
+
+        // 构建返回数据
+        Map<String, Object> stats = new HashMap<>();
+        double uploadSize = user.getUploaded() / (1024.0 * 1024.0 * 1024.0);
+        double downloadSize = user.getDownloaded() / (1024.0 * 1024.0 * 1024.0);
+        
+        stats.put("uploadSize", uploadSize); // 转换为GB
+        stats.put("downloadSize", downloadSize); // 转换为GB
+        stats.put("ratio", ratio);
+        stats.put("points", user.getPoints());
+        stats.put("userClass", getUserClass(user.getLevel()));
+        stats.put("level", user.getLevel());
+
+        ans.put("message", "User stats retrieved successfully");
+        ans.put("data", stats);
+        return ResponseEntity.ok(ans);
+    }
+
+    /**
+     * 根据用户等级返回对应的用户类别名称
+     */
+    private String getUserClass(int level) {
+        switch (level) {
+            case 5: return "大佬";
+            case 4: return "专家";
+            case 3: return "熟练";
+            case 2: return "入门";
+            default: return "新用户";
+        }
+    }
 }