rebase and resubmit

Change-Id: I840888ad5aadceaacb5cd64c6472614cd82ffe17
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