完成查重算法对数据库的修改操作,定义当最相似的文章相似度大于0.3后就存入数据库。

开始做异步。
This commit is contained in:
musteven 2025-04-20 14:30:03 +08:00
parent 3794933261
commit 621b40fb5e
8 changed files with 70 additions and 14 deletions

View File

@ -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);

View File

@ -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("查重失败");
}

View File

@ -25,4 +25,5 @@ public interface SubmitReportDaoI extends BaseDaoI<SubmitReport> {
public boolean updateReportSubmittedForSubmission(SubmitReport submitReport);
public boolean withdrawReportSubmitted(SubmitReport submitReport);
public String getReportSubmittedStatus(SubmitReport submitReport);
public boolean savePlagiarismResult(SubmitReport submitReport);
}

View File

@ -377,4 +377,31 @@ public class SubmitReportDaoImpl extends BaseDaoImpl<SubmitReport> 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;
}
}
}

View File

@ -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;
}

View File

@ -39,7 +39,7 @@ public class PlagiarismServiceImpl implements PlagiarismServiceI {
// 读取upload目录下的所有文件
List<Path> 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();

View File

@ -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){

View File

@ -56,10 +56,11 @@ public interface ProblemServiceI {
public List<Float> 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);//保存查重信息
}