blob: ae1fe9431cbda5f38f2966851cbc8baddf944913 [file] [log] [blame]
rootcd436562025-05-08 14:09:19 +00001package database;
2
root0dbc9812025-05-19 04:41:57 +00003// import java.lang.invoke.TypeDescriptor;
4import java.util.HashMap;
5import java.util.List;
6import java.util.Map;
7
8import javax.persistence.EntityManager;
9import javax.persistence.PersistenceContext;
10
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;
26
27public class Database1 implements DataManagerInterface {
28 @PersistenceContext
29 private EntityManager entitymanager;
30
31 // 返回状态:0 success,1 邮箱重复,2其他原因
32 @Override
33 public int RegisterUser(User userinfo){
34 try{
35 JPAQuery<String> query = new JPAQuery<>(entitymanager);
36 QUser u = QUser.user;
37 List<String> allEmails = query.select(u.email).from(u).fetch();
38
39 if(allEmails.contains(userinfo.email)){
40 return 1;
41 }
42 entitymanager.persist(userinfo);
43 return 0;
44
45 }catch(Exception e){
46 e.printStackTrace();
47 return 2;
48 }
49
50 }
51
52 // 返回状态:0 success,1 不存在,2其他原因
53 @Override
54 public int UpdateInformation(User userinfo){
55 try {
56 if (userinfo.userid == null) {
57 return 2; // userid为null直接返回错误
58 }
59 JPAQuery<User> query = new JPAQuery<>(entitymanager);
60 QUser u = QUser.user;
61 User updateUser = query.select(u).from(u).where(u.userid.eq(userinfo.userid)).fetchOne();
62
63 if(updateUser == null){
64 return 1;
65 }
66 // 只更新需要的字段,避免破坏持久化状态和关联关系
67 updateUser.email = userinfo.email;
68 updateUser.username = userinfo.username;
69 updateUser.password = userinfo.password;
70 updateUser.sex = userinfo.sex;
71 updateUser.school = userinfo.school;
72 updateUser.pictureurl = userinfo.pictureurl;
73 updateUser.profile = userinfo.profile;
74 updateUser.accountstate = userinfo.accountstate;
75 updateUser.invitetimes = userinfo.invitetimes;
76 // 如有其他字段也一并赋值
77 entitymanager.merge(updateUser);
78 return 0;
79 } catch (Exception e) {
80 e.printStackTrace();
81 return 2;
82 }
83
84 }
85
86 // 返回用户的全部基本信息
87 @Override
88 public User GetInformation(String userid){
89 User user = entitymanager.find(User.class, userid);
90 return user;
91 }
92
93 //返回用户的全部pt站信息
94 @Override
95 public UserPT GetInformationPT(String userid){
96 UserPT userPT = entitymanager.find(UserPT.class, userid);
97 return userPT;
98 }
99
100 //返回状态:0 success,1 邮箱重复,2其他原因
101 @Override
102 public int UpdateInformationPT(UserPT userinfo){
103 try{
104 JPAQuery<UserPT> query = new JPAQuery<>(entitymanager);
105 QUserPT u = QUserPT.userPT;
106 UserPT userPT = query.select(u).from(u).where(u.userid.eq(userinfo.userid)).fetchOne();
107
108 if(userPT == null){
109 return 1;
110 }
111 userPT = userinfo;
112 entitymanager.merge(userPT);
113 return 0;
114
115 }catch(Exception e){
116 e.printStackTrace();
117 return 2;
118 }
119 }
120
121 //返回状态:0 success,1 id重复,2其他原因
122 @Override
123 public int RegisterUserPT(UserPT userinfo){
124 try {
125 JPAQuery<UserPT> query = new JPAQuery<>(entitymanager);
126 QUserPT u = QUserPT.userPT;
127 UserPT checkUserPT = query.select(u).from(u).where(u.userid.eq(userinfo.userid)).fetchOne();
128 if (checkUserPT != null) {
129 return 1;
130 }
131 entitymanager.persist(userinfo);
132 return 0;
133 } catch (Exception e) {
134 e.printStackTrace();
135 return 2;
136 }
137 }
138
139 //返回种子的全部信息
140 @Override
141 public Seed GetSeedInformation(String seedid){
142 JPAQuery<Seed> query = new JPAQuery<>(entitymanager);
143 QSeed s = QSeed.seed;
144 Seed seed = query.select(s).from(s).where(s.seedid.eq(seedid)).fetchOne();
145 return seed;
146 }
147
148 //添加一个新的种子,0成功,其他失败信息待定;
149 @Override
150 public int RegisterSeed(Seed seedinfo){
151 try {
152 JPAQuery<Seed> query = new JPAQuery<>(entitymanager);
153 QSeed s = QSeed.seed;
154 Seed seed = query.select(s).from(s).where(s.seedid.eq(seedinfo.seedid)).fetchOne();
155 if (seed != null) {
156 return 1;
157 }
158 entitymanager.persist(seedinfo);
159 return 0;
160 } catch (Exception e) {
161 e.printStackTrace();
162 return 2;
163 }
164 }
165
166 //接收新的种子然后更新其全部属性
167 @Override
168 public int UpdateSeed(Seed seedinfo){
169 try {
170 JPAQuery<Seed> query = new JPAQuery<>(entitymanager);
171 QSeed s = QSeed.seed;
172 Seed seed = query.select(s).from(s).where(s.seedid.eq(seedinfo.seedid)).fetchOne();
173 if (seed == null) {
174 return 1;
175 }
176 seed = seedinfo;
177 entitymanager.merge(seed);
178 return 0;
179 } catch (Exception e) {
180 e.printStackTrace();
181 return 2;
182 }
183 }
184
185 //传入搜索的关键词或句子,返回搜索到的种子信息(按照公共字符数量排序)
186 @Override
187 public Seed[] SearchSeed(String userQ){
188 JPAQuery<Seed> query = new JPAQuery<>(entitymanager);
189 QSeed s = QSeed.seed;
190 List<Seed> seeds = query.select(s).from(s).fetch();
191
192 if (seeds == null || userQ == null || userQ.trim().isEmpty()) {
193 return seeds.toArray(new Seed[0]);
194 }
195
196 String processedQuery = userQ.toLowerCase().trim();
197 Map<Seed, Integer> seedCountMap = new HashMap<>();
198 for(Seed seed : seeds){
199 String title = seed.title.toLowerCase().trim();
200 int count = countCommonCharacter(processedQuery, title);
201 seedCountMap.put(seed, count);
202 }
203 seeds.sort((s1, s2) -> {
204 int count1 = seedCountMap.getOrDefault(s1, 0);
205 int count2 = seedCountMap.getOrDefault(s2, 0);
206 return Integer.compare(count2, count1);
207 });
208
209 return seeds.toArray(new Seed[0]);
210 }
211
212 //计算字符串公共字符数量
213 private int countCommonCharacter(String str1, String str2){
214 Map<Character, Integer> map1 = new HashMap<>();
215 Map<Character, Integer> map2 = new HashMap<>();
216
217 for(char c : str1.toCharArray()){
218 if (!Character.isWhitespace(c)) {
219 map1.put(c, map1.getOrDefault(c, 0) + 1);
220 }
221 }
222
223 for(char c : str2.toCharArray()){
224 if (!Character.isWhitespace(c)) {
225 map2.put(c, map2.getOrDefault(c, 0) + 1);
226 }
227 }
228
229 int res = 0;
230 for(char c : map1.keySet()){
231 if (map2.containsKey(c)) {
232 res += Math.min(map1.get(c), map2.get(c));
233 }
234
235 }
236 return res;
237 }
238
239 //返回状态:0 success,1 重复,2其他原因
240 @Override
241 public int AddNotice(Notice notice){
242 try {
243 JPAQuery<Notice> query = new JPAQuery<>(entitymanager);
244 QNotice n = QNotice.notice;
245 Notice checkNotice = query.select(n).from(n).where(n.noticeid.eq(notice.noticeid)).fetchOne();
246 if (checkNotice != null) {
247 return 1;
248 }
249
250 entitymanager.persist(notice);
251 return 0;
252 } catch (Exception e) {
253 e.printStackTrace();
254 return 2;
255 }
256
257 }
258
259 //返回状态:0 success,1 不存在,2其他原因
260 @Override
261 public boolean UpdateNotice(Notice notice){
262 try {
263 Notice oldNotice = entitymanager.find(Notice.class, notice.noticeid);
264 if (oldNotice == null) {
265 return false;
266 }
267 oldNotice = notice;
268 entitymanager.merge(oldNotice);
269 return true;
270 } catch (Exception e) {
271 e.printStackTrace();
272 return false;
273 }
274 }
275
276 //删除公告,返回状态:0 success,1 不存在,2其他原因
277 @Override
278 public boolean DeleteNotice(String noticeid){
279 try {
280 Notice notice = entitymanager.find(Notice.class, noticeid);
281 if (notice == null) {
282 return false;
283 }
284 entitymanager.remove(notice);
285 return true;
286 } catch (Exception e) {
287 e.printStackTrace();
288 return false;
289 }
290
291 }
292
293 //获取用户的剩余邀请次数
294 public int GetUserAvailableInviteTimes(String userid){
295 try {
296 JPAQuery<Integer> query = new JPAQuery<>(entitymanager);
297 QUser u = QUser.user;
298 int invite_left = query.select(u.invitetimes).from(u).where(u.userid.eq(userid)).fetchOne();
299
300 return invite_left;
301 } catch (Exception e) {
302 e.printStackTrace();
303 return -1;
304 }
305
306 }
307
308 //邀请用户,返回状态:0 success,1 剩余次数不足,2,3其他原因
309 @Override
310 public int InviteUser(String inviterid,String inviteemail){
311 try {
312 User user = entitymanager.find(User.class, inviterid);
313 if (user == null || !user.email.equals(inviteemail)) {
314 return 3;
315 }
316 if (user.invitetimes <= 0) {
317 return 1;
318 }
319 user.invitetimes -= 1;
320 entitymanager.merge(user);
321 return 0;
322 } catch (Exception e) {
323 e.printStackTrace();
324 return 2;
325 }
326
327 }
328
329 //添加一个收藏,返回状态:0 success,1 不存在,2其他原因
330 @Override
331 public boolean AddCollect(String userid,String seedid){
332 JPAQuery<User> query2 = new JPAQuery<>(entitymanager);
333 QUser u2 = QUser.user;
334 User user = query2.select(u2).from(u2).where(u2.userid.eq(userid)).fetchOne();
335 if (user == null) {
336 return false;
337 }
338 JPAQuery<Seed> query3 = new JPAQuery<>(entitymanager);
339 QSeed p = QSeed.seed;
340 Seed seed = query3.select(p).from(p).where(p.seedid.eq(seedid)).fetchOne();
341 if (seed == null) {
342 return false;
343 }
344 JPAQuery<String> query = new JPAQuery<>(entitymanager);
345 QUserStar u = QUserStar.userStar;
346 List<String> allSeedId = query.select(u.seedid).from(u).where(u.userid.eq(userid)).fetch();
347
348 if (allSeedId.contains(seedid)) {
349 return false;
350 }
351 UserStar userStar = new UserStar();
352 userStar.userid = userid;
353 userStar.seedid = seedid;
354 entitymanager.persist(userStar);
355 return true;
356 }
357
358 //删除一个收藏,返回状态:0 success,1 不存在,2其他原因
359 @Override
360 public boolean DeleteCollect(String userid,String seedid){
361 try {
362 JPAQuery<UserStar> query = new JPAQuery<>(entitymanager);
363 QUserStar u = QUserStar.userStar;
364 UserStar userStar = query.select(u).from(u).where(u.userid.eq(userid).and(u.seedid.eq(seedid))).fetchOne();
365 if (userStar == null) {
366 return true; // 收藏不存在
367 }
368 entitymanager.remove(userStar);
369 return true;
370 } catch (Exception e) {
371 e.printStackTrace();
372 return false;
373 }
374
375 }
376
377 @Override
378 public int AddBegSeed(BegInfo info){
379 return 0;
380 }
381
382 @Override
383 public int UpdateBegSeed(BegInfo info){
384 return 0;
385 }
386
387 @Override
388 public int DeleteBegSeed(String begid){
389 return 0;
390 }
391
392 @Override
393 public int VoteSeed(String begId, String seedId, String userId){
394 return 0;
395 }
396
397 @Override
398 public int SubmitSeed(String begid,Seed seed){
399 return 0;
400 }
401
402 @Override
403 public void SettleBeg(){
404
405 }
406
407 @Override
408 public int AddPost(Post post){
409 return 0;
410 }
411
412 @Override
413 public int UpdatePost(Post post){
414 return 0;
415 }
416
417 @Override
418 public int DeletePost(String postid){
419 return 0;
420 }
421
422 @Override
423 public int AddComment(String postid, String userid, String comment){
424 return 0;
425 }
426
427 @Override
428 public int DeleteComment(String postid,String commentid){
429 return 0;
430 }
431
432 @Override
433 public boolean ExchangeMagicToUpload(String userid,int magic)//将魔力值兑换为上传量,返回状态:0 success,1 不存在,2其他原因
434 {
435 return true;
436 }
rootcd436562025-05-08 14:09:19 +0000437
root0dbc9812025-05-19 04:41:57 +0000438 @Override
439 public boolean ExchangeMagicToDownload(String userid,int magic)
440 {
441 return true;
442 }//将魔力值兑换为下载量,返回状态:0 success,1 不存在,2其他原因
443
444 @Override
445 public boolean ExchangeMagicToVip(String userid,int magic){
446 return true;
447 }
448 //将魔力值兑换为VIP次数,返回状态:0 success,1 不存在,2其他原因
449
450 @Override
451 public boolean UploadTransmitProfile(Profile profile){
452 return true;
453 }
454
455 @Override
456 public Profile GetTransmitProfile(String profileid){
457 Profile profile = new Profile();
458 return profile;
459 }
460 //获取迁移信息
461
462 @Override
463 public boolean ExamTransmitProfile(String profileid,boolean result){
464 return true;
465 }
466 //审核迁移信息,0成功,1失败
467 @Override
468 public Profile[] GetTransmitProfileList(){
469 return new Profile[0];
470 }
471 //获取所有迁移信息
472
473}
474