parent
3794933261
commit
621b40fb5e
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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("查重失败");
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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){
|
||||
|
|
|
|||
|
|
@ -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);//保存查重信息
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue