blob: f835288a3ac6b3aa093c7db465c72387b3ffa599 [file] [log] [blame]
rootcd436562025-05-08 14:09:19 +00001package database;
2
root0dbc9812025-05-19 04:41:57 +00003import java.util.HashMap;
4import java.util.List;
5import java.util.Map;
6
7import javax.persistence.EntityManager;
Raverf79fdb62025-06-03 06:02:49 +00008import javax.persistence.PersistenceContext;
root678fd3e2025-06-03 14:20:20 +00009import javax.persistence.Persistence;
root0dbc9812025-05-19 04:41:57 +000010
11import com.querydsl.jpa.impl.JPAQuery;
12
13import entity.BegInfo;
14import entity.Notice;
15import entity.Post;
16import entity.Profile;
17import entity.QNotice;
18import entity.QSeed;
19import entity.QUser;
20import entity.QUserPT;
21import entity.QUserStar;
22import entity.Seed;
23import entity.User;
24import entity.UserPT;
25import entity.UserStar;
Raverf79fdb62025-06-03 06:02:49 +000026import entity.config;
root0dbc9812025-05-19 04:41:57 +000027
28public class Database1 implements DataManagerInterface {
Raverf79fdb62025-06-03 06:02:49 +000029 @PersistenceContext
30 private final EntityManager entitymanager;
root678fd3e2025-06-03 14:20:20 +000031
32 public Database1() {
Raverf79fdb62025-06-03 06:02:49 +000033 config cfg = new config();
34 Map<String,Object> props = new HashMap<>();
35 props.put("javax.persistence.jdbc.url",
36 "jdbc:mysql://" + cfg.SqlURL + "/" + cfg.Database);
root678fd3e2025-06-03 14:20:20 +000037 props.put("javax.persistence.jdbc.user", cfg.SqlUsername);
38 props.put("javax.persistence.jdbc.password", cfg.SqlPassword);
Raverf79fdb62025-06-03 06:02:49 +000039 this.entitymanager = Persistence.createEntityManagerFactory("myPersistenceUnit", props).createEntityManager();
root678fd3e2025-06-03 14:20:20 +000040 }
root0dbc9812025-05-19 04:41:57 +000041
42 // 返回状态:0 success,1 邮箱重复,2其他原因
43 @Override
Raverf79fdb62025-06-03 06:02:49 +000044 public int RegisterUser(User userinfo){
45 try{
46 JPAQuery<String> query = new JPAQuery<>(entitymanager);
root0dbc9812025-05-19 04:41:57 +000047 QUser u = QUser.user;
48 List<String> allEmails = query.select(u.email).from(u).fetch();
49
Raverf79fdb62025-06-03 06:02:49 +000050 if(allEmails.contains(userinfo.email)){
root0dbc9812025-05-19 04:41:57 +000051 return 1;
52 }
Raverf79fdb62025-06-03 06:02:49 +000053 entitymanager.persist(userinfo);
root0dbc9812025-05-19 04:41:57 +000054 return 0;
55
Raverf79fdb62025-06-03 06:02:49 +000056 }catch(Exception e){
root0dbc9812025-05-19 04:41:57 +000057 e.printStackTrace();
58 return 2;
59 }
Raverf79fdb62025-06-03 06:02:49 +000060
root0dbc9812025-05-19 04:41:57 +000061 }
62
63 // 返回状态:0 success,1 不存在,2其他原因
64 @Override
Raverf79fdb62025-06-03 06:02:49 +000065 public int UpdateInformation(User userinfo){
root0dbc9812025-05-19 04:41:57 +000066 try {
67 if (userinfo.userid == null) {
68 return 2; // userid为null直接返回错误
69 }
Raverf79fdb62025-06-03 06:02:49 +000070 JPAQuery<User> query = new JPAQuery<>(entitymanager);
root0dbc9812025-05-19 04:41:57 +000071 QUser u = QUser.user;
72 User updateUser = query.select(u).from(u).where(u.userid.eq(userinfo.userid)).fetchOne();
73
Raverf79fdb62025-06-03 06:02:49 +000074 if(updateUser == null){
root0dbc9812025-05-19 04:41:57 +000075 return 1;
76 }
77 // 只更新需要的字段,避免破坏持久化状态和关联关系
78 updateUser.email = userinfo.email;
79 updateUser.username = userinfo.username;
80 updateUser.password = userinfo.password;
81 updateUser.sex = userinfo.sex;
82 updateUser.school = userinfo.school;
83 updateUser.pictureurl = userinfo.pictureurl;
84 updateUser.profile = userinfo.profile;
85 updateUser.accountstate = userinfo.accountstate;
86 updateUser.invitetimes = userinfo.invitetimes;
87 // 如有其他字段也一并赋值
Raverf79fdb62025-06-03 06:02:49 +000088 entitymanager.merge(updateUser);
root0dbc9812025-05-19 04:41:57 +000089 return 0;
90 } catch (Exception e) {
91 e.printStackTrace();
92 return 2;
93 }
Raverf79fdb62025-06-03 06:02:49 +000094
root0dbc9812025-05-19 04:41:57 +000095 }
96
97 // 返回用户的全部基本信息
98 @Override
Raverf79fdb62025-06-03 06:02:49 +000099 public User GetInformation(String userid){
100 User user = entitymanager.find(User.class, userid);
101 return user;
root0dbc9812025-05-19 04:41:57 +0000102 }
103
104 //返回用户的全部pt站信息
105 @Override
Raverf79fdb62025-06-03 06:02:49 +0000106 public UserPT GetInformationPT(String userid){
107 UserPT userPT = entitymanager.find(UserPT.class, userid);
108 return userPT;
root0dbc9812025-05-19 04:41:57 +0000109 }
110
111 //返回状态:0 success,1 邮箱重复,2其他原因
112 @Override
Raverf79fdb62025-06-03 06:02:49 +0000113 public int UpdateInformationPT(UserPT userinfo){
114 try{
115 JPAQuery<UserPT> query = new JPAQuery<>(entitymanager);
root0dbc9812025-05-19 04:41:57 +0000116 QUserPT u = QUserPT.userPT;
117 UserPT userPT = query.select(u).from(u).where(u.userid.eq(userinfo.userid)).fetchOne();
Raverf79fdb62025-06-03 06:02:49 +0000118
119 if(userPT == null){
root0dbc9812025-05-19 04:41:57 +0000120 return 1;
121 }
122 userPT = userinfo;
Raverf79fdb62025-06-03 06:02:49 +0000123 entitymanager.merge(userPT);
root0dbc9812025-05-19 04:41:57 +0000124 return 0;
125
Raverf79fdb62025-06-03 06:02:49 +0000126 }catch(Exception e){
root0dbc9812025-05-19 04:41:57 +0000127 e.printStackTrace();
128 return 2;
129 }
130 }
131
132 //返回状态:0 success,1 id重复,2其他原因
133 @Override
Raverf79fdb62025-06-03 06:02:49 +0000134 public int RegisterUserPT(UserPT userinfo){
root0dbc9812025-05-19 04:41:57 +0000135 try {
Raverf79fdb62025-06-03 06:02:49 +0000136 JPAQuery<UserPT> query = new JPAQuery<>(entitymanager);
root0dbc9812025-05-19 04:41:57 +0000137 QUserPT u = QUserPT.userPT;
138 UserPT checkUserPT = query.select(u).from(u).where(u.userid.eq(userinfo.userid)).fetchOne();
139 if (checkUserPT != null) {
140 return 1;
141 }
Raverf79fdb62025-06-03 06:02:49 +0000142 entitymanager.persist(userinfo);
root0dbc9812025-05-19 04:41:57 +0000143 return 0;
144 } catch (Exception e) {
145 e.printStackTrace();
146 return 2;
147 }
148 }
149
150 //返回种子的全部信息
151 @Override
Raverf79fdb62025-06-03 06:02:49 +0000152 public Seed GetSeedInformation(String seedid){
153 JPAQuery<Seed> query = new JPAQuery<>(entitymanager);
154 QSeed s = QSeed.seed;
155 Seed seed = query.select(s).from(s).where(s.seedid.eq(seedid)).fetchOne();
156 return seed;
root0dbc9812025-05-19 04:41:57 +0000157 }
158
159 //添加一个新的种子,0成功,其他失败信息待定;
160 @Override
Raverf79fdb62025-06-03 06:02:49 +0000161 public int RegisterSeed(Seed seedinfo){
root0dbc9812025-05-19 04:41:57 +0000162 try {
Raverf79fdb62025-06-03 06:02:49 +0000163 JPAQuery<Seed> query = new JPAQuery<>(entitymanager);
root0dbc9812025-05-19 04:41:57 +0000164 QSeed s = QSeed.seed;
165 Seed seed = query.select(s).from(s).where(s.seedid.eq(seedinfo.seedid)).fetchOne();
166 if (seed != null) {
167 return 1;
168 }
Raverf79fdb62025-06-03 06:02:49 +0000169 entitymanager.persist(seedinfo);
root0dbc9812025-05-19 04:41:57 +0000170 return 0;
171 } catch (Exception e) {
172 e.printStackTrace();
173 return 2;
174 }
175 }
176
177 //接收新的种子然后更新其全部属性
178 @Override
Raverf79fdb62025-06-03 06:02:49 +0000179 public int UpdateSeed(Seed seedinfo){
root0dbc9812025-05-19 04:41:57 +0000180 try {
Raverf79fdb62025-06-03 06:02:49 +0000181 JPAQuery<Seed> query = new JPAQuery<>(entitymanager);
root0dbc9812025-05-19 04:41:57 +0000182 QSeed s = QSeed.seed;
183 Seed seed = query.select(s).from(s).where(s.seedid.eq(seedinfo.seedid)).fetchOne();
184 if (seed == null) {
185 return 1;
186 }
187 seed = seedinfo;
Raverf79fdb62025-06-03 06:02:49 +0000188 entitymanager.merge(seed);
root0dbc9812025-05-19 04:41:57 +0000189 return 0;
190 } catch (Exception e) {
191 e.printStackTrace();
192 return 2;
193 }
194 }
195
196 //传入搜索的关键词或句子,返回搜索到的种子信息(按照公共字符数量排序)
197 @Override
Raverf79fdb62025-06-03 06:02:49 +0000198 public Seed[] SearchSeed(String userQ){
199 JPAQuery<Seed> query = new JPAQuery<>(entitymanager);
200 QSeed s = QSeed.seed;
201 List<Seed> seeds = query.select(s).from(s).fetch();
root0dbc9812025-05-19 04:41:57 +0000202
Raverf79fdb62025-06-03 06:02:49 +0000203 if (seeds == null || userQ == null || userQ.trim().isEmpty()) {
root0dbc9812025-05-19 04:41:57 +0000204 return seeds.toArray(new Seed[0]);
205 }
Raverf79fdb62025-06-03 06:02:49 +0000206
207 String processedQuery = userQ.toLowerCase().trim();
208 Map<Seed, Integer> seedCountMap = new HashMap<>();
209 for(Seed seed : seeds){
210 String title = seed.title.toLowerCase().trim();
211 int count = countCommonCharacter(processedQuery, title);
212 seedCountMap.put(seed, count);
213 }
214 seeds.sort((s1, s2) -> {
215 int count1 = seedCountMap.getOrDefault(s1, 0);
216 int count2 = seedCountMap.getOrDefault(s2, 0);
217 return Integer.compare(count2, count1);
218 });
219
220 return seeds.toArray(new Seed[0]);
root0dbc9812025-05-19 04:41:57 +0000221 }
222
223 //计算字符串公共字符数量
Raverf79fdb62025-06-03 06:02:49 +0000224 private int countCommonCharacter(String str1, String str2){
root0dbc9812025-05-19 04:41:57 +0000225 Map<Character, Integer> map1 = new HashMap<>();
226 Map<Character, Integer> map2 = new HashMap<>();
227
Raverf79fdb62025-06-03 06:02:49 +0000228 for(char c : str1.toCharArray()){
root0dbc9812025-05-19 04:41:57 +0000229 if (!Character.isWhitespace(c)) {
230 map1.put(c, map1.getOrDefault(c, 0) + 1);
231 }
232 }
233
Raverf79fdb62025-06-03 06:02:49 +0000234 for(char c : str2.toCharArray()){
root0dbc9812025-05-19 04:41:57 +0000235 if (!Character.isWhitespace(c)) {
236 map2.put(c, map2.getOrDefault(c, 0) + 1);
237 }
238 }
239
240 int res = 0;
Raverf79fdb62025-06-03 06:02:49 +0000241 for(char c : map1.keySet()){
root0dbc9812025-05-19 04:41:57 +0000242 if (map2.containsKey(c)) {
243 res += Math.min(map1.get(c), map2.get(c));
244 }
Raverf79fdb62025-06-03 06:02:49 +0000245
root0dbc9812025-05-19 04:41:57 +0000246 }
247 return res;
248 }
249
250 //返回状态:0 success,1 重复,2其他原因
251 @Override
Raverf79fdb62025-06-03 06:02:49 +0000252 public int AddNotice(Notice notice){
root0dbc9812025-05-19 04:41:57 +0000253 try {
Raverf79fdb62025-06-03 06:02:49 +0000254 JPAQuery<Notice> query = new JPAQuery<>(entitymanager);
root0dbc9812025-05-19 04:41:57 +0000255 QNotice n = QNotice.notice;
256 Notice checkNotice = query.select(n).from(n).where(n.noticeid.eq(notice.noticeid)).fetchOne();
257 if (checkNotice != null) {
258 return 1;
259 }
Raverf79fdb62025-06-03 06:02:49 +0000260
261 entitymanager.persist(notice);
root0dbc9812025-05-19 04:41:57 +0000262 return 0;
263 } catch (Exception e) {
264 e.printStackTrace();
265 return 2;
266 }
Raverf79fdb62025-06-03 06:02:49 +0000267
root0dbc9812025-05-19 04:41:57 +0000268 }
269
270 //返回状态:0 success,1 不存在,2其他原因
271 @Override
Raverf79fdb62025-06-03 06:02:49 +0000272 public boolean UpdateNotice(Notice notice){
root0dbc9812025-05-19 04:41:57 +0000273 try {
Raverf79fdb62025-06-03 06:02:49 +0000274 Notice oldNotice = entitymanager.find(Notice.class, notice.noticeid);
root0dbc9812025-05-19 04:41:57 +0000275 if (oldNotice == null) {
276 return false;
277 }
278 oldNotice = notice;
Raverf79fdb62025-06-03 06:02:49 +0000279 entitymanager.merge(oldNotice);
root0dbc9812025-05-19 04:41:57 +0000280 return true;
281 } catch (Exception e) {
282 e.printStackTrace();
283 return false;
284 }
285 }
286
287 //删除公告,返回状态:0 success,1 不存在,2其他原因
288 @Override
Raverf79fdb62025-06-03 06:02:49 +0000289 public boolean DeleteNotice(String noticeid){
root0dbc9812025-05-19 04:41:57 +0000290 try {
Raverf79fdb62025-06-03 06:02:49 +0000291 Notice notice = entitymanager.find(Notice.class, noticeid);
root0dbc9812025-05-19 04:41:57 +0000292 if (notice == null) {
293 return false;
294 }
Raverf79fdb62025-06-03 06:02:49 +0000295 entitymanager.remove(notice);
root0dbc9812025-05-19 04:41:57 +0000296 return true;
297 } catch (Exception e) {
298 e.printStackTrace();
299 return false;
300 }
Raverf79fdb62025-06-03 06:02:49 +0000301
root0dbc9812025-05-19 04:41:57 +0000302 }
303
304 //获取用户的剩余邀请次数
Raverf79fdb62025-06-03 06:02:49 +0000305 public int GetUserAvailableInviteTimes(String userid){
root0dbc9812025-05-19 04:41:57 +0000306 try {
Raverf79fdb62025-06-03 06:02:49 +0000307 JPAQuery<Integer> query = new JPAQuery<>(entitymanager);
root0dbc9812025-05-19 04:41:57 +0000308 QUser u = QUser.user;
309 int invite_left = query.select(u.invitetimes).from(u).where(u.userid.eq(userid)).fetchOne();
Raverf79fdb62025-06-03 06:02:49 +0000310
root0dbc9812025-05-19 04:41:57 +0000311 return invite_left;
312 } catch (Exception e) {
313 e.printStackTrace();
314 return -1;
315 }
Raverf79fdb62025-06-03 06:02:49 +0000316
root0dbc9812025-05-19 04:41:57 +0000317 }
318
319 //邀请用户,返回状态:0 success,1 剩余次数不足,2,3其他原因
320 @Override
Raverf79fdb62025-06-03 06:02:49 +0000321 public int InviteUser(String inviterid,String inviteemail){
root0dbc9812025-05-19 04:41:57 +0000322 try {
Raverf79fdb62025-06-03 06:02:49 +0000323 User user = entitymanager.find(User.class, inviterid);
root0dbc9812025-05-19 04:41:57 +0000324 if (user == null || !user.email.equals(inviteemail)) {
325 return 3;
326 }
327 if (user.invitetimes <= 0) {
328 return 1;
329 }
330 user.invitetimes -= 1;
Raverf79fdb62025-06-03 06:02:49 +0000331 entitymanager.merge(user);
root0dbc9812025-05-19 04:41:57 +0000332 return 0;
333 } catch (Exception e) {
334 e.printStackTrace();
335 return 2;
336 }
Raverf79fdb62025-06-03 06:02:49 +0000337
root0dbc9812025-05-19 04:41:57 +0000338 }
339
340 //添加一个收藏,返回状态:0 success,1 不存在,2其他原因
341 @Override
Raverf79fdb62025-06-03 06:02:49 +0000342 public boolean AddCollect(String userid,String seedid){
343 JPAQuery<User> query2 = new JPAQuery<>(entitymanager);
344 QUser u2 = QUser.user;
345 User user = query2.select(u2).from(u2).where(u2.userid.eq(userid)).fetchOne();
346 if (user == null) {
root0dbc9812025-05-19 04:41:57 +0000347 return false;
348 }
Raverf79fdb62025-06-03 06:02:49 +0000349 JPAQuery<Seed> query3 = new JPAQuery<>(entitymanager);
350 QSeed p = QSeed.seed;
351 Seed seed = query3.select(p).from(p).where(p.seedid.eq(seedid)).fetchOne();
352 if (seed == null) {
353 return false;
354 }
355 JPAQuery<String> query = new JPAQuery<>(entitymanager);
356 QUserStar u = QUserStar.userStar;
357 List<String> allSeedId = query.select(u.seedid).from(u).where(u.userid.eq(userid)).fetch();
358
359 if (allSeedId.contains(seedid)) {
360 return false;
361 }
362 UserStar userStar = new UserStar();
363 userStar.userid = userid;
364 userStar.seedid = seedid;
365 entitymanager.persist(userStar);
366 return true;
root0dbc9812025-05-19 04:41:57 +0000367 }
368
369 //删除一个收藏,返回状态:0 success,1 不存在,2其他原因
370 @Override
Raverf79fdb62025-06-03 06:02:49 +0000371 public boolean DeleteCollect(String userid,String seedid){
root0dbc9812025-05-19 04:41:57 +0000372 try {
Raverf79fdb62025-06-03 06:02:49 +0000373 JPAQuery<UserStar> query = new JPAQuery<>(entitymanager);
root0dbc9812025-05-19 04:41:57 +0000374 QUserStar u = QUserStar.userStar;
375 UserStar userStar = query.select(u).from(u).where(u.userid.eq(userid).and(u.seedid.eq(seedid))).fetchOne();
376 if (userStar == null) {
377 return true; // 收藏不存在
378 }
Raverf79fdb62025-06-03 06:02:49 +0000379 entitymanager.remove(userStar);
root0dbc9812025-05-19 04:41:57 +0000380 return true;
381 } catch (Exception e) {
382 e.printStackTrace();
383 return false;
384 }
Raverf79fdb62025-06-03 06:02:49 +0000385
root0dbc9812025-05-19 04:41:57 +0000386 }
387
388 @Override
Raverf79fdb62025-06-03 06:02:49 +0000389 public int AddBegSeed(BegInfo info){
root0dbc9812025-05-19 04:41:57 +0000390 return 0;
391 }
392
393 @Override
Raverf79fdb62025-06-03 06:02:49 +0000394 public int UpdateBegSeed(BegInfo info){
root0dbc9812025-05-19 04:41:57 +0000395 return 0;
396 }
397
398 @Override
Raverf79fdb62025-06-03 06:02:49 +0000399 public int DeleteBegSeed(String begid){
root0dbc9812025-05-19 04:41:57 +0000400 return 0;
401 }
402
403 @Override
Raverf79fdb62025-06-03 06:02:49 +0000404 public int VoteSeed(String begId, String seedId, String userId){
root0dbc9812025-05-19 04:41:57 +0000405 return 0;
406 }
407
408 @Override
Raverf79fdb62025-06-03 06:02:49 +0000409 public int SubmitSeed(String begid,Seed seed){
root0dbc9812025-05-19 04:41:57 +0000410 return 0;
411 }
412
413 @Override
Raverf79fdb62025-06-03 06:02:49 +0000414 public void SettleBeg(){
415
root0dbc9812025-05-19 04:41:57 +0000416 }
417
418 @Override
Raverf79fdb62025-06-03 06:02:49 +0000419 public int AddPost(Post post){
root0dbc9812025-05-19 04:41:57 +0000420 return 0;
421 }
422
423 @Override
Raverf79fdb62025-06-03 06:02:49 +0000424 public int UpdatePost(Post post){
root0dbc9812025-05-19 04:41:57 +0000425 return 0;
426 }
427
428 @Override
Raverf79fdb62025-06-03 06:02:49 +0000429 public int DeletePost(String postid){
root0dbc9812025-05-19 04:41:57 +0000430 return 0;
431 }
432
433 @Override
Raverf79fdb62025-06-03 06:02:49 +0000434 public int AddComment(String postid, String userid, String comment){
root0dbc9812025-05-19 04:41:57 +0000435 return 0;
436 }
437
438 @Override
Raverf79fdb62025-06-03 06:02:49 +0000439 public int DeleteComment(String postid,String commentid){
root0dbc9812025-05-19 04:41:57 +0000440 return 0;
441 }
442
443 @Override
Raverf79fdb62025-06-03 06:02:49 +0000444 public boolean ExchangeMagicToUpload(String userid,int magic)//将魔力值兑换为上传量,返回状态:0 success,1 不存在,2其他原因
root0dbc9812025-05-19 04:41:57 +0000445 {
446 return true;
447 }
Raverf79fdb62025-06-03 06:02:49 +0000448
root0dbc9812025-05-19 04:41:57 +0000449 @Override
Raverf79fdb62025-06-03 06:02:49 +0000450 public boolean ExchangeMagicToDownload(String userid,int magic)
451 {
root0dbc9812025-05-19 04:41:57 +0000452 return true;
453 }//将魔力值兑换为下载量,返回状态:0 success,1 不存在,2其他原因
454
455 @Override
Raverf79fdb62025-06-03 06:02:49 +0000456 public boolean ExchangeMagicToVip(String userid,int magic){
root0dbc9812025-05-19 04:41:57 +0000457 return true;
458 }
459 //将魔力值兑换为VIP次数,返回状态:0 success,1 不存在,2其他原因
460
461 @Override
Raverf79fdb62025-06-03 06:02:49 +0000462 public boolean UploadTransmitProfile(Profile profile){
root0dbc9812025-05-19 04:41:57 +0000463 return true;
464 }
465
466 @Override
Raverf79fdb62025-06-03 06:02:49 +0000467 public Profile GetTransmitProfile(String profileid){
root0dbc9812025-05-19 04:41:57 +0000468 Profile profile = new Profile();
469 return profile;
470 }
471 //获取迁移信息
Raverf79fdb62025-06-03 06:02:49 +0000472
root0dbc9812025-05-19 04:41:57 +0000473 @Override
Raverf79fdb62025-06-03 06:02:49 +0000474 public boolean ExamTransmitProfile(String profileid,boolean result){
root0dbc9812025-05-19 04:41:57 +0000475 return true;
476 }
477 //审核迁移信息,0成功,1失败
478 @Override
Raverf79fdb62025-06-03 06:02:49 +0000479 public Profile[] GetTransmitProfileList(){
root0dbc9812025-05-19 04:41:57 +0000480 return new Profile[0];
481 }
482 //获取所有迁移信息
483
484}
Raverf79fdb62025-06-03 06:02:49 +0000485