diff --git a/AES-front/src/views/user/report-submit/components/report-actions.vue b/AES-front/src/views/user/report-submit/components/report-actions.vue index 94b587b..db83e83 100644 --- a/AES-front/src/views/user/report-submit/components/report-actions.vue +++ b/AES-front/src/views/user/report-submit/components/report-actions.vue @@ -134,10 +134,13 @@ const checkPlagiarism = async () => { try{ // 获取文件名 const attachment = props.attachment; - const submitReport = {//只需要附件信息 + const adminuserId =props.adminuserId; + const problemId = ProblemId; + const submitReport = { + adminuserId, + problemId, attachment }; - console.log(submitReport); // 调用查重接口 const res = await api.runPlagiarism(submitReport); diff --git a/AES/src/main/java/com/example/aes/problem/controller/PlagiarismController.java b/AES/src/main/java/com/example/aes/problem/controller/PlagiarismController.java index cf43150..d5d3e1f 100644 --- a/AES/src/main/java/com/example/aes/problem/controller/PlagiarismController.java +++ b/AES/src/main/java/com/example/aes/problem/controller/PlagiarismController.java @@ -9,11 +9,13 @@ import java.util.stream.Collectors; import java.util.stream.Stream; import java.util.regex.Pattern; +import com.example.aes.global.model.DecodeToken; import com.example.aes.global.model.RespBean; import com.example.aes.problem.model.PMScoringRubric; import com.example.aes.problem.model.PlagiarismResult; import com.example.aes.problem.model.SubmitReport; import com.example.aes.problem.service.PlagiarismServiceI; +import com.example.aes.problem.service.ProblemServiceI; import com.hankcs.hanlp.HanLP; import com.hankcs.hanlp.seg.common.Term; import com.hankcs.hanlp.tokenizer.IndexTokenizer; @@ -35,6 +37,8 @@ import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; +import javax.servlet.http.HttpServletRequest; + @RestController @RequestMapping("/plagiarism") @Transactional @@ -43,8 +47,15 @@ public class PlagiarismController { @Autowired private PlagiarismServiceI plagiarismServiceI; + @Autowired + private ProblemServiceI problemServiceI; + @PostMapping("/runPlagiarism") - public RespBean runPlagiarism(@RequestBody SubmitReport submitReport) { + public RespBean runPlagiarism(@RequestBody SubmitReport submitReport, HttpServletRequest request) { + DecodeToken decodeToken = new DecodeToken(request); + String UserId = decodeToken.getUserId(); + int userId = Integer.parseInt(UserId); + submitReport.setStudentId(userId); // 构建文件路径 String uploadDirectory = System.getProperty("user.dir") + File.separator + "upload"; Path filePath = Paths.get(uploadDirectory,submitReport.getAttachment()); @@ -53,12 +64,20 @@ public class PlagiarismController { if (!Files.exists(filePath)) { return RespBean.error("文件不存在"); } + // 调用Service层进行查重 PlagiarismResult result = plagiarismServiceI.checkPlagiarism(filePath.toString(), uploadDirectory); + submitReport.setSimilardocs(result.getArticleName()); + submitReport.setSimularity(result.getSimilarity()); + if(result.getSimilarity()>0.3){//如果文章相似度大于0.3,判定为疑似抄袭并保存到数据库中 + submitReport.setPlagiarismStatus("疑似抄袭"); + } + boolean saveresult = problemServiceI.savePlagiarismResultToProps(submitReport); + // 返回查重结果 if (result != null) { - return RespBean.ok("查重成功",result); + return RespBean.ok("查重成功",saveresult); } else { return RespBean.error("查重失败"); } diff --git a/AES/src/main/java/com/example/aes/problem/dao/SubmitReportDaoI.java b/AES/src/main/java/com/example/aes/problem/dao/SubmitReportDaoI.java index fe1a0fe..f605f73 100644 --- a/AES/src/main/java/com/example/aes/problem/dao/SubmitReportDaoI.java +++ b/AES/src/main/java/com/example/aes/problem/dao/SubmitReportDaoI.java @@ -25,4 +25,5 @@ public interface SubmitReportDaoI extends BaseDaoI { public boolean updateReportSubmittedForSubmission(SubmitReport submitReport); public boolean withdrawReportSubmitted(SubmitReport submitReport); public String getReportSubmittedStatus(SubmitReport submitReport); + public boolean savePlagiarismResult(SubmitReport submitReport); } diff --git a/AES/src/main/java/com/example/aes/problem/dao/impl/SubmitReportDaoImpl.java b/AES/src/main/java/com/example/aes/problem/dao/impl/SubmitReportDaoImpl.java index aca7fa3..a6568f1 100644 --- a/AES/src/main/java/com/example/aes/problem/dao/impl/SubmitReportDaoImpl.java +++ b/AES/src/main/java/com/example/aes/problem/dao/impl/SubmitReportDaoImpl.java @@ -377,4 +377,31 @@ public class SubmitReportDaoImpl extends BaseDaoImpl implements Su } return submissionStatus; } + + @Override + public boolean savePlagiarismResult(SubmitReport submitReport) { + Session session = this.getCurrentSession(); + try { + String hql = "UPDATE SubmitReport SET plagiarismStatus = :plagiarismStatus, " + + "simularity = :simularity, " + + "similardocs = :similardocs " + + "WHERE problemId = :problemId " + + "AND adminuserId = :adminuserId " + + "AND studentId = :studentId"; + + Query query = session.createQuery(hql); + query.setParameter("plagiarismStatus", submitReport.getPlagiarismStatus()); + query.setParameter("simularity", submitReport.getSimularity()); + query.setParameter("similardocs", submitReport.getSimilardocs()); + query.setParameter("problemId", submitReport.getProblemId()); + query.setParameter("adminuserId", submitReport.getAdminuserId()); + query.setParameter("studentId", submitReport.getStudentId()); + + int result = query.executeUpdate(); + return result > 0; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } } \ No newline at end of file diff --git a/AES/src/main/java/com/example/aes/problem/model/PlagiarismResult.java b/AES/src/main/java/com/example/aes/problem/model/PlagiarismResult.java index 64b3aa4..2241095 100644 --- a/AES/src/main/java/com/example/aes/problem/model/PlagiarismResult.java +++ b/AES/src/main/java/com/example/aes/problem/model/PlagiarismResult.java @@ -6,9 +6,9 @@ import lombok.Data; public class PlagiarismResult {//用于存放查重算法的结果(最大值) private String articleName; - private double similarity; + private Float similarity; - public PlagiarismResult(String articleName, double similarity) { + public PlagiarismResult(String articleName, Float similarity) { this.articleName = articleName; this.similarity = similarity; } diff --git a/AES/src/main/java/com/example/aes/problem/service/Impl/PlagiarismServiceImpl.java b/AES/src/main/java/com/example/aes/problem/service/Impl/PlagiarismServiceImpl.java index a23acc4..9ffdc0a 100644 --- a/AES/src/main/java/com/example/aes/problem/service/Impl/PlagiarismServiceImpl.java +++ b/AES/src/main/java/com/example/aes/problem/service/Impl/PlagiarismServiceImpl.java @@ -39,7 +39,7 @@ public class PlagiarismServiceImpl implements PlagiarismServiceI { // 读取upload目录下的所有文件 List filePaths = listFilesInDirectory(uploadDirectory); - double highestSimilarity = 0.0; + Float highestSimilarity = (float)0.0; String similarFileName = ""; // 遍历每个文件 @@ -105,7 +105,7 @@ public class PlagiarismServiceImpl implements PlagiarismServiceI { } // 计算整体相似度 - double similarity = totalSimilarityChars / totalChars; + Float similarity = (float)totalSimilarityChars / totalChars; if (similarity > highestSimilarity) { highestSimilarity = similarity; similarFileName = path.getFileName().toString(); diff --git a/AES/src/main/java/com/example/aes/problem/service/Impl/ProblemServiceImpl.java b/AES/src/main/java/com/example/aes/problem/service/Impl/ProblemServiceImpl.java index 56370b3..db7c2d9 100644 --- a/AES/src/main/java/com/example/aes/problem/service/Impl/ProblemServiceImpl.java +++ b/AES/src/main/java/com/example/aes/problem/service/Impl/ProblemServiceImpl.java @@ -516,6 +516,11 @@ public int redoReport(PMReviewMessage pmReviewMessage){ return studentSubmitDao.getReportSubmittedStatus(submitReport); } + @Override + public boolean savePlagiarismResultToProps(SubmitReport submitReport) { + return studentSubmitDao.savePlagiarismResult(submitReport); + } + @Override public int editPostProblem(int classId, int problemId,LocalDateTime startTime,LocalDateTime endTime,boolean allow){ diff --git a/AES/src/main/java/com/example/aes/problem/service/ProblemServiceI.java b/AES/src/main/java/com/example/aes/problem/service/ProblemServiceI.java index e013ffb..d8dc4cd 100644 --- a/AES/src/main/java/com/example/aes/problem/service/ProblemServiceI.java +++ b/AES/src/main/java/com/example/aes/problem/service/ProblemServiceI.java @@ -56,10 +56,11 @@ public interface ProblemServiceI { public List findScoreList(PMStudentSubmit pmStudentSubmit); public int findNextId(int problemId); - boolean saveSubmitInfoToProps(SubmitReport submitReport);//学生保存报告(保存,之前未保存过) - boolean findReportSubmitted(SubmitReport submitReport);//查询该学生之前是否已经提交过该问题的报告 - boolean updateSubmitInfoToProps(SubmitReport submitReport);//学生更新报告信息(保存,之前保存过) - boolean updateSubmitInfoForSubmission(SubmitReport submitReport);//学生提交报告 - boolean withdrawSubmitInfo(SubmitReport submitReport);//学生撤回报告 - String findReportSubmittedStatus(SubmitReport submitReport);//查询该学生之前已经提交过该问题的报告状态 + public boolean saveSubmitInfoToProps(SubmitReport submitReport);//学生保存报告(保存,之前未保存过) + public boolean findReportSubmitted(SubmitReport submitReport);//查询该学生之前是否已经提交过该问题的报告 + public boolean updateSubmitInfoToProps(SubmitReport submitReport);//学生更新报告信息(保存,之前保存过) + public boolean updateSubmitInfoForSubmission(SubmitReport submitReport);//学生提交报告 + public boolean withdrawSubmitInfo(SubmitReport submitReport);//学生撤回报告 + public String findReportSubmittedStatus(SubmitReport submitReport);//查询该学生之前已经提交过该问题的报告状态 + public boolean savePlagiarismResultToProps(SubmitReport submitReport);//保存查重信息 }