chenxz пре 7 година
родитељ
комит
bf6a5ad35a

+ 1 - 1
mooctest-site-server/pom.xml

@@ -17,7 +17,7 @@
         <dependency>
             <groupId>cn.iselab.mooctest</groupId>
             <artifactId>user-dubbo-api</artifactId>
-            <version>1.0.11</version>
+            <version>1.0.14</version>
         </dependency>
 
         <dependency>

+ 70 - 3
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/acyncTask/MutationCallBack.java

@@ -1,24 +1,91 @@
 package cn.iselab.mooctest.site.common.acyncTask;
 
+import cn.iselab.mooctest.site.common.constant.MutationResultType;
+import cn.iselab.mooctest.site.models.Grade;
+import cn.iselab.mooctest.site.rpc.dev.data.MutationDTO;
+import cn.iselab.mooctest.site.service.AssignedTaskService;
+import cn.iselab.mooctest.site.service.CalculateScoreService;
 import cn.iselab.mooctest.site.service.UserService;
+import cn.iselab.mooctest.site.service.common.MongoAPIService;
+import cn.iselab.mooctest.site.service.fromDev.AnalysisService;
+import cn.iselab.mooctest.site.web.data.forMongo.MutationForMongoDTO;
+import cn.iselab.mooctest.site.web.data.forMongo.NodeCatch.CaughtNodeDTO;
+import cn.iselab.mooctest.site.web.data.fromDev.MutationResult;
+import cn.iselab.mooctest.site.web.logic.CalculateSocreLogic;
+
+import com.google.gson.Gson;
+import org.json.JSONArray;
+import org.json.JSONObject;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Scope;
 import org.springframework.stereotype.Component;
 
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
 /**
  * Created by tangshanshan on 2018/3/6.
  */
 @Component
 @Scope("prototype")
 public class MutationCallBack extends AsyncTaskCallBack {
+
+    @Autowired
+    AssignedTaskService assignedTaskService;
+
+    @Autowired
+    CalculateScoreService calculateScoreService;
+
+    @Autowired
+    CalculateSocreLogic calculateSocreLogic;
+
     @Autowired
-    UserService userService;   //我就试试能不能注入
+    MongoAPIService mongoAPIService;
+
+    @Autowired
+    AnalysisService analysisService;
 
     @Override
     public void onSuccess(String result) {
-        //TODO mutation 结果处理
-        userService.findByUserId(7L);
         LOG.info("mutation onSuccess");
+        String type=this.context.get("type");
+        Long userId=Long.parseLong(this.context.get("userId"));
+        Long examId=Long.parseLong(this.context.get("examId"));
+        Long caseId=Long.parseLong(this.context.get("caseId"));
+        if(type == MutationResultType.MUTAION_NODE) {
+            JSONArray array = new JSONArray(result);
+            Gson gson = new Gson();
+            List<CaughtNodeDTO> dtos = new ArrayList<>();
+            for (int i = 0; i < array.length(); i++) {
+                JSONObject object = array.getJSONObject(i);
+                CaughtNodeDTO dto = gson.fromJson(object.toString(), CaughtNodeDTO.class);
+                dtos.add(dto);
+            }
+            long catchNum = dtos.stream().filter(caughtNodeDTO -> caughtNodeDTO.getIfCatch() == true).count();
+            double mutationScore = dtos.size() == 0 ? 0 : (double) catchNum / dtos.size();
+            List<Grade> grades = analysisService.saveMutationScore(userId, examId, caseId, mutationScore);
+            if (grades != null && !grades.isEmpty()) {
+                calculateScoreService.calculatePersonalDevScore(examId, caseId, userId);
+                calculateSocreLogic.calculateExamScoreAuto(examId, userId);
+            }
+            calculateSocreLogic.catchNode(examId, caseId, userId, String.valueOf(System.currentTimeMillis()), dtos);
+        }else if(type == MutationResultType.MUTAION_RESULT){
+            MutationDTO dto=new Gson().fromJson(result,MutationDTO.class);
+            try {
+                List<MutationForMongoDTO> list = mongoAPIService.getMutationFromMongo(userId, examId, caseId);
+                if (list != null) {
+                    MutationForMongoDTO mutationForMongoDTO = list.get(0);
+                    mutationForMongoDTO.setMutationDTO(dto);
+                    mongoAPIService.updateMutationToMongo(mutationForMongoDTO);
+                } else {
+                    mongoAPIService.saveMutationToMongo(userId, examId, caseId, dto);
+                }
+            }catch (IOException e){
+                LOG.info("fail to save"+userId+"'s mutation result");
+            }
+        }
+
     }
 
     @Override

+ 14 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/constant/MutationResultType.java

@@ -0,0 +1,14 @@
+package cn.iselab.mooctest.site.common.constant;
+
+/**
+ * @Author ROKG
+ * @Description
+ * @Date: Created in 下午3:37 2018/3/14
+ * @Modified By:
+ */
+public class MutationResultType {
+
+    public final static String MUTAION_NODE="node";
+
+    public final static String MUTAION_RESULT="mutation";
+}

+ 1 - 1
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/ctrl/TestController.java

@@ -135,7 +135,7 @@ public class TestController {
             userVO.setMenuVOs(menuLogic.getMenuListByUserId(userVO.getId()));
             userVO.setOpenId(openId2UserIdService.findOpenIdByUserId(userVO.getId()));
 
-            SecurityUtils.getSubject().getSession().setAttribute("User", Converter.convert(UserDTOForMT.class, userVO));
+            SecurityUtils.getSubject().getSession().setAttribute("User", Converter.convert(User.class, userVO));
 
             if (managerPropertyService.getManagerPropertyByUserId(userVO.getId()) != null) {
                 ManagerProperty managerProperty = managerPropertyService.getManagerPropertyByUserId(userVO.getId());

+ 24 - 2
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/logic/impl/MutationProgressLogicImpl.java

@@ -1,6 +1,7 @@
 package cn.iselab.mooctest.site.web.logic.impl;
 
 import cn.iselab.mooctest.site.common.acyncTask.MutationCallBack;
+import cn.iselab.mooctest.site.common.constant.MutationResultType;
 import cn.iselab.mooctest.site.common.enums.AsyncJobTool;
 import cn.iselab.mooctest.site.data.AsyncJobStatus;
 import cn.iselab.mooctest.site.data.UserDTOForMT;
@@ -13,6 +14,7 @@ import cn.iselab.mooctest.site.web.data.forMongo.AsyncTaskDTO;
 import cn.iselab.mooctest.site.web.exception.HttpBadRequestException;
 import cn.iselab.mooctest.site.web.logic.BaseLogic;
 import cn.iselab.mooctest.site.web.logic.MutationProgressLogic;
+import cn.iselab.mooctest.site.web.logic.fromDev.PluginLogic;
 import org.apache.commons.collections.map.HashedMap;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -27,6 +29,8 @@ import java.util.stream.Collectors;
 @Service
 public class MutationProgressLogicImpl extends BaseLogic implements MutationProgressLogic {
 
+
+
     @Autowired
     WeightService weightService;
 
@@ -42,6 +46,12 @@ public class MutationProgressLogicImpl extends BaseLogic implements MutationProg
     @Autowired
     UserService userService;
 
+    @Autowired
+    PluginLogic pluginLogic;
+
+    @Autowired
+    CaseService caseService;
+
     @Override
     public MutationProgressVO getMutationProgress(Long examId, Long caseId) {
         AsyncTaskDTO asyncTaskDTO = asyncTaskService.getAsyncTask(AsyncJobTool.MUTATION, examId, caseId);
@@ -114,8 +124,9 @@ public class MutationProgressLogicImpl extends BaseLogic implements MutationProg
         List<AssignedTask> assignedTasks = assignedTaskService.getSubmittedRecordsByExamId(examId);
         params = assignedTasks.stream().map(assignedTask -> {
             Map<String, String> param = new HashedMap();
-            param.put("downloadURL", "");
-            param.put("extraArgs", "20");
+            String downloadUrl = pluginLogic.getAnalysisSignature(examId,caseId,caseService.getCaseById(caseId).getName());
+            param.put("downloadURL", downloadUrl);
+            param.put("extraArgs", generateNodeExtraArgs(downloadUrl));
             return param;
         }).collect(Collectors.toList());
         contexts = assignedTasks.stream().map(assignedTask -> {
@@ -123,9 +134,20 @@ public class MutationProgressLogicImpl extends BaseLogic implements MutationProg
             param.put("examId", examId.toString());
             param.put("caseId", caseId.toString());
             param.put("userId", assignedTask.getParticipantId().toString());
+            param.put("type", MutationResultType.MUTAION_NODE);
             return param;
         }).collect(Collectors.toList());
 
         return asyncScheduleService.start(AsyncJobTool.MUTATION, params,contexts,MutationCallBack.class);
     }
+
+    private String generateNodeExtraArgs(String downloadUrl){
+        String zipName = downloadUrl.split("/")[downloadUrl.split("/").length - 1];
+        return "-F "+ zipName + " -T "+MutationResultType.MUTAION_NODE;
+    }
+
+    private String generateMutationExtraArgs(String downloadUrl){
+        String zipName = downloadUrl.split("/")[downloadUrl.split("/").length - 1];
+        return "-F "+ zipName + " -T "+MutationResultType.MUTAION_RESULT;
+    }
 }

+ 5 - 5
mooctest-site-server/src/main/resources/application.yaml

@@ -60,12 +60,12 @@ celeryServer:
 spring:
     profiles: dev
     datasource:
-        url: jdbc:mysql://106.14.81.62:3306/mooctest_main_dev?useUnicode=yes&characterEncoding=UTF-8
-        username: mooctest
-        password: secr3t!
+        url: jdbc:mysql://127.0.0.1:3306/mooctest_main_dev?useUnicode=yes&characterEncoding=UTF-8
+        username: root
+        password: cxz6518
     dubbo:
         application.name: local-dubbo-main-site-provider-consumer3
-        registry.address: zookeeper://118.178.131.206:2181
+        registry.address: zookeeper://127.0.0.1:2181
         protocol.name: dubbo
         protocol.port: 20884
         scan: cn.iselab.mooctest.site.rpc
@@ -114,7 +114,7 @@ mongodb:
 rpcServer:
     port: 9100
     group: iselab
-    zkAddress: 118.178.131.206:2181
+    zkAddress: 127.0.0.1:2181
 
 server:
     port: 8080