更新求种后端函数
Change-Id: I9e593e5eecfc6337120f75b3f6338f8279579dd1
diff --git a/src/main/java/cheat/Cheat.java b/src/main/java/cheat/Cheat.java
index 3eecaff..cb35c05 100644
--- a/src/main/java/cheat/Cheat.java
+++ b/src/main/java/cheat/Cheat.java
@@ -1,13 +1,22 @@
package cheat;
import java.util.ArrayList;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.Persistence;
import javax.persistence.PersistenceContext;
import javax.transaction.Transactional;
import org.apache.commons.lang3.tuple.Pair;
+import java.io.File;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.nio.file.StandardCopyOption;
import com.querydsl.jpa.impl.JPAQueryFactory;
@@ -16,19 +25,37 @@
import entity.QSeed;
import entity.User;
import entity.config;
+import entity.QUser;
+import entity.TTorent;
public class Cheat implements CheatInterfnterface {
@PersistenceContext
- private EntityManager entityManager;
+ private EntityManagerFactory emf;
+
+ public Cheat() {
+ 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);
+ }
@Override
@Transactional
public boolean AddAppeal(Appeal appeal) {
+ EntityManager entityManager = emf.createEntityManager();
try {
+ entityManager.getTransaction().begin();
entityManager.persist(appeal);
+ entityManager.getTransaction().commit();
} catch (Exception e) {
e.printStackTrace();
+ if (entityManager.getTransaction().isActive()) {
+ entityManager.getTransaction().rollback();
+ }
return false;
}
return true;
@@ -37,6 +64,7 @@
@Override
public Appeal GetAppeal(String appealid) {
try {
+ EntityManager entityManager = emf.createEntityManager();
JPAQueryFactory queryFactory = new JPAQueryFactory(entityManager);
QAppeal qAppeal = QAppeal.appeal;
Appeal appeal = queryFactory
@@ -52,6 +80,7 @@
@Override
public Appeal[] GetAppealList() {
+ EntityManager entityManager = emf.createEntityManager();
try {
JPAQueryFactory queryFactory = new JPAQueryFactory(entityManager);
QAppeal qAppeal = QAppeal.appeal;
@@ -62,29 +91,44 @@
} catch (Exception e) {
e.printStackTrace();
return null;
+ } finally {
+ if (entityManager != null) {
+ entityManager.close();
+ }
}
}
@Override
public boolean HandleAppeal(String appealid, Integer status) {
+ EntityManager entityManager = emf.createEntityManager();
try {
Appeal appeal = GetAppeal(appealid);
if (appeal != null) {
appeal.status = status;
+ entityManager.getTransaction().begin();
entityManager.merge(appeal);
User user = entityManager.find(User.class, appeal.appealuserid);
- if (user != null && user.accountstate != false) {
+ // if (user != null && user.accountstate != false) {
+ if (user != null) {
if (status == 1) {
user.accountstate = false;
}
entityManager.merge(user);
}
+ entityManager.getTransaction().commit();
return true;
}
return false;
} catch (Exception e) {
e.printStackTrace();
+ if (emf.createEntityManager().getTransaction().isActive()) {
+ emf.createEntityManager().getTransaction().rollback();
+ }
return false;
+ } finally {
+ if (entityManager != null) {
+ entityManager.close();
+ }
}
}
@@ -92,12 +136,13 @@
public Pair<String, String>[] GetFakeSeed() {
List<Pair<String, String>> fakeSeeds = new ArrayList<>();
try {
+ EntityManager entityManager = emf.createEntityManager();
JPAQueryFactory queryFactory = new JPAQueryFactory(entityManager);
QSeed qSeed = QSeed.seed;
List<com.querydsl.core.Tuple> results = queryFactory
.select(qSeed.seedid, qSeed.seeduserid)
.from(qSeed)
- .where(qSeed.faketime.gt(new config().FakeTime))
+ .where(qSeed.faketime.gt(config.getFakeTime()))
.fetch();
for (com.querydsl.core.Tuple result : results) {
String seedid = result.get(qSeed.seedid);
@@ -115,6 +160,7 @@
public String[] GetPunishedUserList() {
List<String> punishedUsers = new ArrayList<>();
try {
+ EntityManager entityManager = emf.createEntityManager();
JPAQueryFactory queryFactory = new JPAQueryFactory(entityManager);
entity.QUser qUser = entity.QUser.user;
List<String> results = queryFactory
@@ -187,12 +233,13 @@
@Override
public void PunishUser(){
+ EntityManager entityManager = emf.createEntityManager();
JPAQueryFactory queryFactory = new JPAQueryFactory(entityManager);
entity.QUser qUser = entity.QUser.user;
List<User> users = queryFactory
.selectFrom(qUser)
- .where(qUser.detectedCount.gt(new entity.config().CheatTime)
- .or(qUser.fakeDetectedCount.gt(new entity.config().FakeTime)))
+ .where(qUser.detectedCount.gt(config.getCheatTime())
+ .or(qUser.fakeDetectedCount.gt(config.getFakeTime())))
.fetch();
for (User user : users) {
@@ -200,4 +247,147 @@
entityManager.merge(user);
}
}
+
+ @Override
+ public User[] GetCheatUsers() {
+ EntityManager entityManager = emf.createEntityManager();
+ List<User> cheatUsers = new ArrayList<>();
+ try {
+ JPAQueryFactory queryFactory = new JPAQueryFactory(entityManager);
+ QUser qUser = QUser.user;
+ cheatUsers = queryFactory
+ .selectFrom(qUser)
+ .where(qUser.accountstate.eq(true))
+ .fetch();
+ return cheatUsers.toArray(new User[0]);
+ } catch (Exception e) {
+ e.printStackTrace();
+ return null;
+ } finally {
+ if (entityManager != null){
+ entityManager.close();
+ }
+ }
+ }
+
+ @Override
+ public User[] GetSuspiciousUsers() {
+ EntityManager entityManager = emf.createEntityManager();
+ List<User> suspiciousUsers = new ArrayList<>();
+ try {
+ JPAQueryFactory queryFactory = new JPAQueryFactory(entityManager);
+ QUser qUser = QUser.user;
+ suspiciousUsers = queryFactory
+ .selectFrom(qUser)
+ .where((qUser.detectedCount.gt(0)
+ .or(qUser.fakeDetectedCount.gt(0)))
+ .and(qUser.accountstate.eq(false)))
+ .fetch();
+ return suspiciousUsers.toArray(new User[0]);
+ } catch (Exception e) {
+ e.printStackTrace();
+ return null;
+ } finally {
+ if (entityManager != null){
+ entityManager.close();
+ }
+ }
+ }
+
+ @Override
+ public int UnbanUser(String userid) {
+ EntityManager entityManager = emf.createEntityManager();
+ try {
+ User user = entityManager.find(User.class, userid);
+ if (user == null) {
+ return 1; // 用户不存在
+ }
+ if (user.accountstate) {
+ user.accountstate = false; // 解封用户
+ entityManager.getTransaction().begin();
+ entityManager.merge(user);
+ entityManager.getTransaction().commit();
+ return 0; // 成功解封
+ }
+ return 2; // 用户未被封禁
+ } catch (Exception e) {
+ e.printStackTrace();
+ if (entityManager.getTransaction().isActive()) {
+ entityManager.getTransaction().rollback();
+ }
+ return -1; // 出现异常
+ } finally {
+ if (entityManager != null){
+ entityManager.close();
+ }
+ }
+ }
+
+ @Override
+ public int BanUser(String userid) {
+ EntityManager entityManager = emf.createEntityManager();
+ try {
+ User user = entityManager.find(User.class, userid);
+ if (user == null) {
+ return 1; // 用户不存在
+ }
+ if (!user.accountstate) {
+ user.accountstate = true; // 封禁用户
+ entityManager.getTransaction().begin();
+ entityManager.merge(user);
+ entityManager.getTransaction().commit();
+ return 0; // 成功封禁
+ }
+ return 2; // 用户已被封禁
+ } catch (Exception e) {
+ e.printStackTrace();
+ if (entityManager.getTransaction().isActive()) {
+ entityManager.getTransaction().rollback();
+ }
+ return -1; // 出现异常
+ } finally {
+ if (entityManager != null){
+ entityManager.close();
+ }
+ }
+ }
+
+ @Override
+ public int SubmitAppeal(String userid, String content, File file) {
+ EntityManager entityManager = emf.createEntityManager();
+ try {
+ User user = entityManager.find(User.class, userid);
+ if (user == null) {
+ return 1; // 用户不存在
+ }
+ Appeal appeal = new Appeal();
+ appeal.appealid = java.util.UUID.randomUUID().toString();
+ appeal.appealuserid = userid;
+ appeal.content = content;
+ appeal.user = user; // 设置关联的用户
+ Path storageDir = Paths.get(config.APPEAL_STORAGE_DIR);
+ if (!Files.exists(storageDir)) {
+ Files.createDirectories(storageDir);
+ }
+ String filename = file.getName();
+ Path target = storageDir.resolve(appeal.appealid + "_" + filename);
+ Files.copy(file.toPath(), target, StandardCopyOption.REPLACE_EXISTING);
+ appeal.status = 0; // 初始状态为未处理
+ appeal.fileURL = target.toString(); // 设置文件存储路径
+ entityManager.getTransaction().begin();
+ entityManager.persist(appeal);
+ entityManager.getTransaction().commit();
+ return 0; // 成功提交申诉
+ } catch (Exception e) {
+ e.printStackTrace();
+ if (entityManager.getTransaction().isActive()) {
+ entityManager.getTransaction().rollback();
+ }
+ return -1; // 出现异常
+ } finally {
+ if (entityManager != null){
+ entityManager.close();
+ }
+ }
+ }
}
\ No newline at end of file