parent
3794933261
commit
621b40fb5e
|
|
@ -134,10 +134,13 @@ const checkPlagiarism = async () => {
|
||||||
try{
|
try{
|
||||||
// 获取文件名
|
// 获取文件名
|
||||||
const attachment = props.attachment;
|
const attachment = props.attachment;
|
||||||
const submitReport = {//只需要附件信息
|
const adminuserId =props.adminuserId;
|
||||||
|
const problemId = ProblemId;
|
||||||
|
const submitReport = {
|
||||||
|
adminuserId,
|
||||||
|
problemId,
|
||||||
attachment
|
attachment
|
||||||
};
|
};
|
||||||
console.log(submitReport);
|
|
||||||
|
|
||||||
// 调用查重接口
|
// 调用查重接口
|
||||||
const res = await api.runPlagiarism(submitReport);
|
const res = await api.runPlagiarism(submitReport);
|
||||||
|
|
|
||||||
|
|
@ -9,11 +9,13 @@ import java.util.stream.Collectors;
|
||||||
import java.util.stream.Stream;
|
import java.util.stream.Stream;
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
|
import com.example.aes.global.model.DecodeToken;
|
||||||
import com.example.aes.global.model.RespBean;
|
import com.example.aes.global.model.RespBean;
|
||||||
import com.example.aes.problem.model.PMScoringRubric;
|
import com.example.aes.problem.model.PMScoringRubric;
|
||||||
import com.example.aes.problem.model.PlagiarismResult;
|
import com.example.aes.problem.model.PlagiarismResult;
|
||||||
import com.example.aes.problem.model.SubmitReport;
|
import com.example.aes.problem.model.SubmitReport;
|
||||||
import com.example.aes.problem.service.PlagiarismServiceI;
|
import com.example.aes.problem.service.PlagiarismServiceI;
|
||||||
|
import com.example.aes.problem.service.ProblemServiceI;
|
||||||
import com.hankcs.hanlp.HanLP;
|
import com.hankcs.hanlp.HanLP;
|
||||||
import com.hankcs.hanlp.seg.common.Term;
|
import com.hankcs.hanlp.seg.common.Term;
|
||||||
import com.hankcs.hanlp.tokenizer.IndexTokenizer;
|
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.bind.annotation.*;
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
|
||||||
@RestController
|
@RestController
|
||||||
@RequestMapping("/plagiarism")
|
@RequestMapping("/plagiarism")
|
||||||
@Transactional
|
@Transactional
|
||||||
|
|
@ -43,8 +47,15 @@ public class PlagiarismController {
|
||||||
@Autowired
|
@Autowired
|
||||||
private PlagiarismServiceI plagiarismServiceI;
|
private PlagiarismServiceI plagiarismServiceI;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private ProblemServiceI problemServiceI;
|
||||||
|
|
||||||
@PostMapping("/runPlagiarism")
|
@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";
|
String uploadDirectory = System.getProperty("user.dir") + File.separator + "upload";
|
||||||
Path filePath = Paths.get(uploadDirectory,submitReport.getAttachment());
|
Path filePath = Paths.get(uploadDirectory,submitReport.getAttachment());
|
||||||
|
|
@ -53,12 +64,20 @@ public class PlagiarismController {
|
||||||
if (!Files.exists(filePath)) {
|
if (!Files.exists(filePath)) {
|
||||||
return RespBean.error("文件不存在");
|
return RespBean.error("文件不存在");
|
||||||
}
|
}
|
||||||
|
|
||||||
// 调用Service层进行查重
|
// 调用Service层进行查重
|
||||||
PlagiarismResult result = plagiarismServiceI.checkPlagiarism(filePath.toString(), uploadDirectory);
|
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) {
|
if (result != null) {
|
||||||
return RespBean.ok("查重成功",result);
|
return RespBean.ok("查重成功",saveresult);
|
||||||
} else {
|
} else {
|
||||||
return RespBean.error("查重失败");
|
return RespBean.error("查重失败");
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -25,4 +25,5 @@ public interface SubmitReportDaoI extends BaseDaoI<SubmitReport> {
|
||||||
public boolean updateReportSubmittedForSubmission(SubmitReport submitReport);
|
public boolean updateReportSubmittedForSubmission(SubmitReport submitReport);
|
||||||
public boolean withdrawReportSubmitted(SubmitReport submitReport);
|
public boolean withdrawReportSubmitted(SubmitReport submitReport);
|
||||||
public String getReportSubmittedStatus(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;
|
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 {//用于存放查重算法的结果(最大值)
|
public class PlagiarismResult {//用于存放查重算法的结果(最大值)
|
||||||
|
|
||||||
private String articleName;
|
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.articleName = articleName;
|
||||||
this.similarity = similarity;
|
this.similarity = similarity;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -39,7 +39,7 @@ public class PlagiarismServiceImpl implements PlagiarismServiceI {
|
||||||
// 读取upload目录下的所有文件
|
// 读取upload目录下的所有文件
|
||||||
List<Path> filePaths = listFilesInDirectory(uploadDirectory);
|
List<Path> filePaths = listFilesInDirectory(uploadDirectory);
|
||||||
|
|
||||||
double highestSimilarity = 0.0;
|
Float highestSimilarity = (float)0.0;
|
||||||
String similarFileName = "";
|
String similarFileName = "";
|
||||||
|
|
||||||
// 遍历每个文件
|
// 遍历每个文件
|
||||||
|
|
@ -105,7 +105,7 @@ public class PlagiarismServiceImpl implements PlagiarismServiceI {
|
||||||
}
|
}
|
||||||
|
|
||||||
// 计算整体相似度
|
// 计算整体相似度
|
||||||
double similarity = totalSimilarityChars / totalChars;
|
Float similarity = (float)totalSimilarityChars / totalChars;
|
||||||
if (similarity > highestSimilarity) {
|
if (similarity > highestSimilarity) {
|
||||||
highestSimilarity = similarity;
|
highestSimilarity = similarity;
|
||||||
similarFileName = path.getFileName().toString();
|
similarFileName = path.getFileName().toString();
|
||||||
|
|
|
||||||
|
|
@ -516,6 +516,11 @@ public int redoReport(PMReviewMessage pmReviewMessage){
|
||||||
return studentSubmitDao.getReportSubmittedStatus(submitReport);
|
return studentSubmitDao.getReportSubmittedStatus(submitReport);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean savePlagiarismResultToProps(SubmitReport submitReport) {
|
||||||
|
return studentSubmitDao.savePlagiarismResult(submitReport);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int editPostProblem(int classId,
|
public int editPostProblem(int classId,
|
||||||
int problemId,LocalDateTime startTime,LocalDateTime endTime,boolean allow){
|
int problemId,LocalDateTime startTime,LocalDateTime endTime,boolean allow){
|
||||||
|
|
|
||||||
|
|
@ -56,10 +56,11 @@ public interface ProblemServiceI {
|
||||||
public List<Float> findScoreList(PMStudentSubmit pmStudentSubmit);
|
public List<Float> findScoreList(PMStudentSubmit pmStudentSubmit);
|
||||||
public int findNextId(int problemId);
|
public int findNextId(int problemId);
|
||||||
|
|
||||||
boolean saveSubmitInfoToProps(SubmitReport submitReport);//学生保存报告(保存,之前未保存过)
|
public boolean saveSubmitInfoToProps(SubmitReport submitReport);//学生保存报告(保存,之前未保存过)
|
||||||
boolean findReportSubmitted(SubmitReport submitReport);//查询该学生之前是否已经提交过该问题的报告
|
public boolean findReportSubmitted(SubmitReport submitReport);//查询该学生之前是否已经提交过该问题的报告
|
||||||
boolean updateSubmitInfoToProps(SubmitReport submitReport);//学生更新报告信息(保存,之前保存过)
|
public boolean updateSubmitInfoToProps(SubmitReport submitReport);//学生更新报告信息(保存,之前保存过)
|
||||||
boolean updateSubmitInfoForSubmission(SubmitReport submitReport);//学生提交报告
|
public boolean updateSubmitInfoForSubmission(SubmitReport submitReport);//学生提交报告
|
||||||
boolean withdrawSubmitInfo(SubmitReport submitReport);//学生撤回报告
|
public boolean withdrawSubmitInfo(SubmitReport submitReport);//学生撤回报告
|
||||||
String findReportSubmittedStatus(SubmitReport submitReport);//查询该学生之前已经提交过该问题的报告状态
|
public String findReportSubmittedStatus(SubmitReport submitReport);//查询该学生之前已经提交过该问题的报告状态
|
||||||
|
public boolean savePlagiarismResultToProps(SubmitReport submitReport);//保存查重信息
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue