diff --git a/src/main/java/tracker/Tracker.java b/src/main/java/tracker/Tracker.java
index 8addf61..d53c258 100644
--- a/src/main/java/tracker/Tracker.java
+++ b/src/main/java/tracker/Tracker.java
@@ -1,19 +1,39 @@
 package tracker;
 
 import java.io.File;
+import java.util.HashMap;
+import java.util.Map;
+
 import javax.persistence.EntityManager;
 import javax.persistence.EntityManagerFactory;
 import javax.persistence.EntityTransaction;
 import javax.persistence.Persistence;
+
 import com.querydsl.jpa.impl.JPAUpdateClause;
-import object.QUserPT;
-import object.UserPT;
-import object.TTorent;
-import object.TransRecord;
+
+import entity.TTorent;
+import entity.TransRecord;
+import entity.config;
+import entity.QUserPT;
 
 public class Tracker implements TrackerInterface {
-    private static final EntityManagerFactory emf =
-        Persistence.createEntityManagerFactory("myPersistenceUnit");
+    private final EntityManagerFactory emf;
+
+    // 默认构造：产线数据库
+    public Tracker() {
+        config cfg = new config();
+        Map<String,Object> props = new HashMap<>();
+        props.put("javax.persistence.jdbc.url",
+                  "jdbc:mysql://" + cfg.SqlURL + "/" + cfg.Database);
+        props.put("javax.persistence.jdbc.user", cfg.SqlUsername);
+        props.put("javax.persistence.jdbc.password", cfg.SqlPassword);
+        this.emf = Persistence.createEntityManagerFactory("myPersistenceUnit", props);
+    }
+
+    // 测试传入：测试库
+    public Tracker(EntityManagerFactory emf) {
+        this.emf = emf;
+    }
 
     @Override
     public boolean AddUpLoad(String userid, int upload) {
@@ -27,38 +47,56 @@
                 .set(q.upload, q.upload.add(upload))
                 .execute();
             tx.commit();
-            return updated > 0;
+            // 成功时 updated>0 返回 false，失败时返回 true
+            return updated <= 0;
         } catch(Exception e) {
             if (tx.isActive()) tx.rollback();
-            return false;
+            return true;
         } finally {
             em.close();
         }
     }
 
     @Override
-    public boolean ReduceUpLoad(String userid,int upload){
-        return false;
-    };//给用户减上传量，返回0成功，返回1失败;
+    public boolean ReduceUpLoad(String userid, int upload){
+        EntityManager em = emf.createEntityManager();
+        EntityTransaction tx = em.getTransaction();
+        try {
+            tx.begin();
+            QUserPT q = QUserPT.userPT;
+            long updated = new JPAUpdateClause(em, q)
+                .where(q.userid.eq(userid))
+                .set(q.upload, q.upload.subtract(upload))
+                .execute();
+            tx.commit();
+            // 成功时 updated>0 返回 false，失败时返回 true
+            return updated <= 0;
+        } catch(Exception e) {
+            if (tx.isActive()) tx.rollback();
+            return true;
+        } finally {
+            em.close();
+        }
+    }
 
     @Override
     public boolean AddDownload(String userid,int download){
-        return false;
+        return true;
     };//给用户增加下载量，返回0成功，返回1失败;
 
     @Override
     public boolean ReduceDownload(String userid,int download){
-        return false;
+        return true;
     };//给用户减少下载量，返回0成功，返回1失败;
 
     @Override
     public boolean AddMagic(String userid,int magic){
-        return false;
+        return true;
     };//给用户增加魔力值，返回0成功，返回1失败;
 
     @Override
     public boolean ReduceMagic(String userid,int magic){
-        return false;
+        return true;
     };//给用户减少魔力值，返回0成功，返回1失败;
 
     @Override
