瀏覽代碼

增加无算法设定时自动根据语言匹配算法

Ruilin Geng 3 年之前
父節點
當前提交
813714d3cf

+ 16 - 15
src/main/java/cn/edu/nju/plagdemo/api/impl/PlagDetectApiImpl.java

@@ -5,16 +5,10 @@ import cn.edu.nju.plagdemo.api.IPlagDetectApi;
 import cn.edu.nju.plagdemo.exception.DefinitionException;
 import cn.edu.nju.plagdemo.model.dto.plag.AlgorithmRemoteParams;
 import cn.edu.nju.plagdemo.model.dto.plag.EndpointDTO;
-import cn.edu.nju.plagdemo.model.po.plag.AlgorithmPO;
-import cn.edu.nju.plagdemo.model.po.plag.BaseFilePO;
-import cn.edu.nju.plagdemo.model.po.plag.DetectionFilePO;
-import cn.edu.nju.plagdemo.model.po.plag.RecordPO;
+import cn.edu.nju.plagdemo.model.po.plag.*;
 import cn.edu.nju.plagdemo.model.vo.AliyunTokenVO;
 import cn.edu.nju.plagdemo.model.vo.OssInfoVO;
-import cn.edu.nju.plagdemo.service.IAlgorithmService;
-import cn.edu.nju.plagdemo.service.IBaseFileService;
-import cn.edu.nju.plagdemo.service.IDetectionFileService;
-import cn.edu.nju.plagdemo.service.IRecordService;
+import cn.edu.nju.plagdemo.service.*;
 import cn.edu.nju.plagdemo.utils.RestResult;
 import cn.edu.nju.plagdemo.utils.SimpleCache;
 import com.alibaba.fastjson.JSON;
@@ -35,6 +29,7 @@ import com.aliyuncs.profile.DefaultProfile;
 import com.aliyuncs.profile.IClientProfile;
 import com.aliyuncs.sts.model.v20150401.AssumeRoleRequest;
 import com.aliyuncs.sts.model.v20150401.AssumeRoleResponse;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import io.swagger.models.auth.In;
@@ -51,10 +46,7 @@ import org.springframework.web.client.RestTemplate;
 
 import java.nio.charset.StandardCharsets;
 import java.time.LocalDateTime;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Objects;
+import java.util.*;
 
 @Slf4j
 @Service
@@ -74,7 +66,7 @@ public class PlagDetectApiImpl implements IPlagDetectApi {
     private IRecordService recordService;
 
     @Autowired
-    private RestTemplate restTemplate;
+    private IAlgoTypeRelationService algoTypeRelationService;
 
     @Autowired
     private IOssApi ossApi;
@@ -115,13 +107,22 @@ public class PlagDetectApiImpl implements IPlagDetectApi {
      * */
     @Override
     public RestResult<?> plagDetect(Integer file, Integer baseFile, Integer fileType, Integer algorithm, String sessionId, Map<String, Object> params) {
-
+        AlgorithmPO algorithmPO = algorithmService.getById(algorithm);
+        if (algorithmPO == null) {
+            List<AlgoTypeRelationPO> algoTypeRelationPOS = algoTypeRelationService.list(
+                    new LambdaQueryWrapper<AlgoTypeRelationPO>().eq(AlgoTypeRelationPO::getFileTypeId, fileType)
+            );
+            if (algoTypeRelationPOS.size() == 0) {
+                throw new DefinitionException(HttpStatus.INTERNAL_SERVER_ERROR, "该文件类型没有对应的查重算法!");
+            }
+            algorithm = algoTypeRelationPOS.get(0).getAlgoId();
+            algorithmPO = algorithmService.getById(algorithm);
+        }
         RecordPO recordPO = new RecordPO();
         recordPO.setFileId(file);
         recordPO.setBaseFileId(baseFile);
         recordPO.setAlgorithm(algorithm);
         recordPO.setCreatedTime(LocalDateTime.now());
-        AlgorithmPO algorithmPO = algorithmService.getById(algorithm);
         String defaultOptions = algorithmPO.getDefaultOptions();
         ObjectMapper objectMapper = new ObjectMapper();
         Map<String, Object> option = null;

+ 1 - 1
src/main/java/cn/edu/nju/plagdemo/model/po/plag/AlgoTypeRelationPO.java

@@ -29,7 +29,7 @@ public class AlgoTypeRelationPO extends Model<AlgoTypeRelationPO> {
     @TableId(value = "id", type = IdType.AUTO)
     private Integer id;
 
-    @ApiModelProperty("算法id")
+    @ApiModelProperty("算法id,如果为-1就需要后端帮助选适配的算法")
     private Integer algoId;
 
     @ApiModelProperty("算法支持的语言类型id")