diff --git a/src/main/java/tracker/Tracker.java b/src/main/java/tracker/Tracker.java
index 1ac4d94..1b38806 100644
--- a/src/main/java/tracker/Tracker.java
+++ b/src/main/java/tracker/Tracker.java
@@ -16,7 +16,8 @@
 import com.querydsl.jpa.impl.JPAUpdateClause;
 import entity.*;
 import entity.config;
-
+import java.util.Scanner;
+import java.io.IOException;
 public class Tracker implements TrackerInterface {
     private final EntityManagerFactory emf;
     // 默认构造：产线数据库
@@ -55,7 +56,7 @@
             long delta = newTotal - sumSoFar;
             if (delta < 0L) {
                 tx.rollback();
-                return true;   // error: newTotal less than already recorded
+                return false;   // error: newTotal less than already recorded
             }
             if (delta == 0L) {
                 tx.rollback();
@@ -69,7 +70,7 @@
             rd.upload       = delta;
             rd.maxupload    = newTotal;
             em.persist(rd);
-
+            em.flush();
             // 4) 重新计算用户的总上传，确保与 TransRecord 完全一致
             Long totalUpload = em.createQuery(
                 "SELECT COALESCE(SUM(t.upload),0) FROM TransRecord t WHERE t.uploaduserid = :uid",
@@ -77,10 +78,29 @@
             )
             .setParameter("uid", userid)
             .getSingleResult();
+
+            Long PTuploadbefor = em.createQuery(
+                "SELECT t.upload FROM UserPT t WHERE t.userid = :uid",
+                Long.class
+            ).setParameter("uid", userid)
+            .getSingleResult();
+            
+        
             UserPT user = em.find(UserPT.class, userid);
             user.upload = totalUpload;
             em.merge(user);
+            em.flush();
             tx.commit();
+
+            Long PTuploadafter = em.createQuery(
+                "SELECT t.upload FROM UserPT t WHERE t.userid = :uid",
+                Long.class
+            ).setParameter("uid", userid)
+            .getSingleResult();
+
+            System.out.println("按回车继续...");
+            System.out.printf("thisadd:%d userptsofar:%d userptafter:%d totaluploadnow:%d delta:%d%n",upload, PTuploadbefor,PTuploadafter, totalUpload,delta);
+            System.out.println("按回车继续...");
             return false;      // success
         } catch (RuntimeException ex) {
             if (tx.isActive()) tx.rollback();
@@ -137,7 +157,7 @@
             List<SeedHash> shl = qsh.getResultList();
             if (shl.isEmpty()) {
                 System.out.println("seed没有被记录");
-                return true;
+                return false;
             }
             String seedid = shl.get(0).seedId;
 
@@ -202,7 +222,7 @@
             long current = qcurr.getSingleResult();
             if (downloadLong > current) {
                 em.close();
-                return true;
+                return false;
             }
             // 2. 执行减法更新
             EntityTransaction tx = em.getTransaction();
@@ -271,14 +291,16 @@
             Path target = storageDir.resolve(seedid + "_" + filename);
             Files.copy(TTorent.toPath(), target, StandardCopyOption.REPLACE_EXISTING);
 
-            // attempt to parse infoHash, but don’t fail if parsing fails
+            // attempt to parse infoHash, but don't fail if parsing fails
             String infoHash = null;
             try {
                 byte[] torrentData = Files.readAllBytes(target);
                 Bencode bencode = new Bencode();
                 @SuppressWarnings("unchecked")
-                Map<String,Object> meta = (Map<String,Object>) bencode.decode(torrentData, Type.DICTIONARY);
-                byte[] infoBytes = bencode.encode((Map<String,Object>) meta.get("info"));
+                Map<String,Object> meta = bencode.decode(torrentData, Type.DICTIONARY);
+                @SuppressWarnings("unchecked")
+                Map<String,Object> info = (Map<String,Object>) meta.get("info");
+                byte[] infoBytes = bencode.encode(info);
                 MessageDigest sha1 = MessageDigest.getInstance("SHA-1");
                 byte[] digest = sha1.digest(infoBytes);
                 StringBuilder sb = new StringBuilder();
