blob: d53c2588856f5eadcab36a0fa981dd6d20843d06 [file] [log] [blame]
rootcd436562025-05-08 14:09:19 +00001package tracker;
2
root0d8b11f2025-05-15 14:10:43 +00003import java.io.File;
rootff0769a2025-05-18 17:24:41 +00004import java.util.HashMap;
5import java.util.Map;
6
root0d8b11f2025-05-15 14:10:43 +00007import javax.persistence.EntityManager;
8import javax.persistence.EntityManagerFactory;
9import javax.persistence.EntityTransaction;
10import javax.persistence.Persistence;
rootff0769a2025-05-18 17:24:41 +000011
root0d8b11f2025-05-15 14:10:43 +000012import com.querydsl.jpa.impl.JPAUpdateClause;
rootff0769a2025-05-18 17:24:41 +000013
14import entity.TTorent;
15import entity.TransRecord;
16import entity.config;
17import entity.QUserPT;
root0d8b11f2025-05-15 14:10:43 +000018
19public class Tracker implements TrackerInterface {
rootff0769a2025-05-18 17:24:41 +000020 private final EntityManagerFactory emf;
21
22 // 默认构造:产线数据库
23 public Tracker() {
24 config cfg = new config();
25 Map<String,Object> props = new HashMap<>();
26 props.put("javax.persistence.jdbc.url",
27 "jdbc:mysql://" + cfg.SqlURL + "/" + cfg.Database);
28 props.put("javax.persistence.jdbc.user", cfg.SqlUsername);
29 props.put("javax.persistence.jdbc.password", cfg.SqlPassword);
30 this.emf = Persistence.createEntityManagerFactory("myPersistenceUnit", props);
31 }
32
33 // 测试传入:测试库
34 public Tracker(EntityManagerFactory emf) {
35 this.emf = emf;
36 }
root0d8b11f2025-05-15 14:10:43 +000037
38 @Override
39 public boolean AddUpLoad(String userid, int upload) {
40 EntityManager em = emf.createEntityManager();
41 EntityTransaction tx = em.getTransaction();
42 try {
43 tx.begin();
44 QUserPT q = QUserPT.userPT;
45 long updated = new JPAUpdateClause(em, q)
46 .where(q.userid.eq(userid))
47 .set(q.upload, q.upload.add(upload))
48 .execute();
49 tx.commit();
rootff0769a2025-05-18 17:24:41 +000050 // 成功时 updated>0 返回 false,失败时返回 true
51 return updated <= 0;
root0d8b11f2025-05-15 14:10:43 +000052 } catch(Exception e) {
53 if (tx.isActive()) tx.rollback();
rootff0769a2025-05-18 17:24:41 +000054 return true;
root0d8b11f2025-05-15 14:10:43 +000055 } finally {
56 em.close();
57 }
58 }
59
60 @Override
rootff0769a2025-05-18 17:24:41 +000061 public boolean ReduceUpLoad(String userid, int upload){
62 EntityManager em = emf.createEntityManager();
63 EntityTransaction tx = em.getTransaction();
64 try {
65 tx.begin();
66 QUserPT q = QUserPT.userPT;
67 long updated = new JPAUpdateClause(em, q)
68 .where(q.userid.eq(userid))
69 .set(q.upload, q.upload.subtract(upload))
70 .execute();
71 tx.commit();
72 // 成功时 updated>0 返回 false,失败时返回 true
73 return updated <= 0;
74 } catch(Exception e) {
75 if (tx.isActive()) tx.rollback();
76 return true;
77 } finally {
78 em.close();
79 }
80 }
root0d8b11f2025-05-15 14:10:43 +000081
82 @Override
83 public boolean AddDownload(String userid,int download){
rootff0769a2025-05-18 17:24:41 +000084 return true;
root0d8b11f2025-05-15 14:10:43 +000085 };//给用户增加下载量,返回0成功,返回1失败;
86
87 @Override
88 public boolean ReduceDownload(String userid,int download){
rootff0769a2025-05-18 17:24:41 +000089 return true;
root0d8b11f2025-05-15 14:10:43 +000090 };//给用户减少下载量,返回0成功,返回1失败;
91
92 @Override
93 public boolean AddMagic(String userid,int magic){
rootff0769a2025-05-18 17:24:41 +000094 return true;
root0d8b11f2025-05-15 14:10:43 +000095 };//给用户增加魔力值,返回0成功,返回1失败;
96
97 @Override
98 public boolean ReduceMagic(String userid,int magic){
rootff0769a2025-05-18 17:24:41 +000099 return true;
root0d8b11f2025-05-15 14:10:43 +0000100 };//给用户减少魔力值,返回0成功,返回1失败;
101
102 @Override
103 public TTorent ReadTorrent(File torrent){
104 return new TTorent();
105 };//传入torrent文件,解析后返回TTorent类
106
107 @Override
108 public int SaveTorrent(TTorent seed,String seedid){
109 return 0;
110 };//保存seedid对应的ttorent信息
111
112 @Override
113 public File GetTTorent(String seedid,String userid){
114 return null;
115 };//根据种子id获得ttorent信息然后构建Ttorent文件并返回,同时记录用户的下载行为
116
117
118 @Override
119 public int AddRecord(String seedid,TransRecord rd){
120 return 0;
121 };//新增一个seedid对应的种子的传输任务记录
122}