diff --git a/pom.xml b/pom.xml
index 1590f5d..0a4296c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -51,6 +51,34 @@
       <artifactId>slf4j-simple</artifactId>
       <version>1.7.36</version>
     </dependency>
+    <!-- QueryDSL -->
+    <dependency>
+      <groupId>com.querydsl</groupId>
+      <artifactId>querydsl-jpa</artifactId>
+      <version>4.4.0</version>
+    </dependency>
+    <dependency>
+      <groupId>com.querydsl</groupId>
+      <artifactId>querydsl-apt</artifactId>
+      <version>4.4.0</version>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>com.querydsl</groupId>
+      <artifactId>querydsl-jpa</artifactId>
+      <version>5.0.0</version>
+    </dependency>
+    <dependency>
+      <groupId>com.querydsl</groupId>
+      <artifactId>querydsl-apt</artifactId>
+      <version>5.0.0</version>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>javax.annotation</groupId>
+      <artifactId>javax.annotation-api</artifactId>
+      <version>1.3.2</version>
+    </dependency>
   </dependencies>
 
   <!-- 构建配置 -->
@@ -63,6 +91,34 @@
         <version>3.8.1</version>
         <configuration>
           <release>9</release>
+          <compilerArgs>
+            <arg>--add-modules</arg>
+            <arg>java.xml.ws.annotation</arg>
+          </compilerArgs>
+          <annotationProcessorPaths>
+            <path>
+              <groupId>com.querydsl</groupId>
+              <artifactId>querydsl-apt</artifactId>
+              <version>4.4.0</version>
+            </path>
+            <path>
+              <groupId>com.querydsl</groupId>
+              <artifactId>querydsl-apt</artifactId>
+              <version>5.0.0</version>
+              <classifier>jpa</classifier>
+            </path>
+            <path>
+              <groupId>com.querydsl</groupId>
+              <artifactId>querydsl-jpa</artifactId>
+              <version>5.0.0</version>
+            </path>
+            <path>
+              <groupId>javax.annotation</groupId>
+              <artifactId>javax.annotation-api</artifactId>
+              <version>1.3.2</version>
+            </path>
+          </annotationProcessorPaths>
+          <generatedSourcesDirectory>${project.build.directory}/generated-sources/java</generatedSourcesDirectory>
         </configuration>
       </plugin>
       <!-- 执行插件，方便 mvn exec:java 直接运行 -->
@@ -74,6 +130,22 @@
           <mainClass>api.ApiMain</mainClass>
         </configuration>
       </plugin>
+      <plugin>
+        <groupId>com.mysema.maven</groupId>
+        <artifactId>apt-maven-plugin</artifactId>
+        <version>1.1.3</version>
+        <executions>
+          <execution>
+            <goals>
+              <goal>process</goal>
+            </goals>
+            <configuration>
+              <outputDirectory>${project.build.directory}/generated-sources/java</outputDirectory>
+              <processor>com.querydsl.apt.jpa.JPAAnnotationProcessor</processor>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
     </plugins>
   </build>
 
diff --git a/src/main/java/object/config.java b/src/main/java/object/config.java
index e584e22..a620518 100644
--- a/src/main/java/object/config.java
+++ b/src/main/java/object/config.java
@@ -6,4 +6,6 @@
     public int FakeTime;
     public int BegVote;
     public String SqlURL="192.168.5.9:3306";
+    public String Database="pt_database";
+    public String TestDatabase="pt_database_test";
 }
diff --git a/src/main/java/tracker/Tracker.java b/src/main/java/tracker/Tracker.java
index e1165b2..8addf61 100644
--- a/src/main/java/tracker/Tracker.java
+++ b/src/main/java/tracker/Tracker.java
@@ -1,5 +1,84 @@
 package tracker;
 
-// public class Tracker implements TrackerInterface {
-    
-// }
+import java.io.File;
+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;
+
+public class Tracker implements TrackerInterface {
+    private static final EntityManagerFactory emf =
+        Persistence.createEntityManagerFactory("myPersistenceUnit");
+
+    @Override
+    public boolean AddUpLoad(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.add(upload))
+                .execute();
+            tx.commit();
+            return updated > 0;
+        } catch(Exception e) {
+            if (tx.isActive()) tx.rollback();
+            return false;
+        } finally {
+            em.close();
+        }
+    }
+
+    @Override
+    public boolean ReduceUpLoad(String userid,int upload){
+        return false;
+    };//给用户减上传量，返回0成功，返回1失败;
+
+    @Override
+    public boolean AddDownload(String userid,int download){
+        return false;
+    };//给用户增加下载量，返回0成功，返回1失败;
+
+    @Override
+    public boolean ReduceDownload(String userid,int download){
+        return false;
+    };//给用户减少下载量，返回0成功，返回1失败;
+
+    @Override
+    public boolean AddMagic(String userid,int magic){
+        return false;
+    };//给用户增加魔力值，返回0成功，返回1失败;
+
+    @Override
+    public boolean ReduceMagic(String userid,int magic){
+        return false;
+    };//给用户减少魔力值，返回0成功，返回1失败;
+
+    @Override
+    public TTorent ReadTorrent(File torrent){
+        return new TTorent();
+    };//传入torrent文件，解析后返回TTorent类
+
+    @Override
+    public int SaveTorrent(TTorent seed,String seedid){
+        return 0;
+    };//保存seedid对应的ttorent信息
+
+    @Override
+    public File GetTTorent(String seedid,String userid){
+        return null;
+    };//根据种子id获得ttorent信息然后构建Ttorent文件并返回,同时记录用户的下载行为
+
+
+    @Override
+    public int AddRecord(String seedid,TransRecord rd){
+        return 0;
+    };//新增一个seedid对应的种子的传输任务记录
+}
diff --git a/src/test/java/apitest/apisystest.java b/src/test/java/apitest/apisystest.java
new file mode 100644
index 0000000..f8ca9ed
--- /dev/null
+++ b/src/test/java/apitest/apisystest.java
@@ -0,0 +1,5 @@
+package apitest;
+
+public class apisystest {
+    
+}
diff --git a/src/test/java/cheattest/cheatsystest.java b/src/test/java/cheattest/cheatsystest.java
new file mode 100644
index 0000000..090500c
--- /dev/null
+++ b/src/test/java/cheattest/cheatsystest.java
@@ -0,0 +1,5 @@
+package cheattest;
+
+public class cheatsystest {
+    
+}
diff --git a/src/test/java/databasetest/databasetest.java b/src/test/java/databasetest/databasetest.java
new file mode 100644
index 0000000..e947a9b
--- /dev/null
+++ b/src/test/java/databasetest/databasetest.java
@@ -0,0 +1,5 @@
+package databasetest;
+
+public class databasetest {
+    
+}
diff --git a/src/test/java/trackertest/trackersystest.java b/src/test/java/trackertest/trackersystest.java
new file mode 100644
index 0000000..90ea14f
--- /dev/null
+++ b/src/test/java/trackertest/trackersystest.java
@@ -0,0 +1,5 @@
+package trackertest;
+
+public class trackersystest {
+    
+}
diff --git a/src/test/java/viptest/vipsystest.java b/src/test/java/viptest/vipsystest.java
new file mode 100644
index 0000000..89a0555
--- /dev/null
+++ b/src/test/java/viptest/vipsystest.java
@@ -0,0 +1,5 @@
+package viptest;
+
+public class vipsystest {
+    
+}
