Ver código fonte

Merge branch 'Test' of git.mooctest.net:summer/main-site into Test

HenryLee 8 anos atrás
pai
commit
7950242de9
62 arquivos alterados com 860 adições e 182 exclusões
  1. 1 1
      mooctest-site-server/pom.xml
  2. 2 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/constant/Constants.java
  3. 13 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/constant/ThirdPartConstants.java
  4. 1 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/ManagerPropertyDao.java
  5. 18 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/OpenId2UserIdDao.java
  6. 2 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/fromKibug/ScoreRuleDao.java
  7. 3 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/models/ExamGroupUser.java
  8. 11 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/models/ManagerProperty.java
  9. 38 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/models/OpenId2UserId.java
  10. 9 8
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/models/Task.java
  11. 14 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/models/Weight.java
  12. 123 2
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/rpc/Oauth2/impl/ExamServiceImpl2.java
  13. 37 2
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/rpc/Oauth2/impl/Oauth2ServiceImpl.java
  14. 7 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/ManagerPropertyService.java
  15. 11 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/OpenId2UserIdService.java
  16. 7 2
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/TargetService.java
  17. 3 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/fromDev/AnalysisService.java
  18. 4 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/fromDev/PluginService.java
  19. 26 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/fromDev/impl/AnalysisServiceImpl.java
  20. 2 2
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/fromKibug/ScoreRuleService.java
  21. 8 1
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/fromKibug/impl/ReportServiceImpl.java
  22. 14 7
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/fromKibug/impl/ScoreRuleServiceImpl.java
  23. 10 3
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/impl/AssignedTaskServiceImpl.java
  24. 6 5
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/impl/CalculateScoreServiceImpl.java
  25. 1 22
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/impl/GroupServiceImpl.java
  26. 15 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/impl/ManagerPropertyServiceImpl.java
  27. 26 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/impl/OpenId2UseridServiceImpl.java
  28. 15 2
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/impl/TargetServiceImpl.java
  29. 13 1
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/impl/UserServiceImpl.java
  30. 2 2
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/ctrl/ScoreController.java
  31. 26 8
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/ctrl/TargetController.java
  32. 5 11
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/ctrl/TestController.java
  33. 46 22
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/ctrl/UserController.java
  34. 14 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/ctrl/fromDev/AnalysisController.java
  35. 50 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/ctrl/fromDev/PluginController.java
  36. 2 1
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/ctrl/fromKibug/BugController.java
  37. 2 1
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/ctrl/fromKibug/ReportController.java
  38. 2 1
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/data/CaseExtendsVO.java
  39. 11 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/data/ExamVO.java
  40. 10 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/data/ManagerPropertyVO.java
  41. 3 4
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/data/ScoreVO.java
  42. 2 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/data/UserVO.java
  43. 1 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/data/fromKibug/KibugCaseVO.java
  44. 12 3
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/data/wrapper/CaseVOWrapper.java
  45. 2 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/data/wrapper/ExamVOWrapper.java
  46. 5 1
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/data/wrapper/ManagerPropertyVOWrapper.java
  47. 5 14
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/data/wrapper/ScoreVOWrapper.java
  48. 2 2
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/data/wrapper/TargetKibugVOWrapper.java
  49. 3 1
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/logic/CalculateSocreLogic.java
  50. 12 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/logic/ManagerPropertyLogic.java
  51. 8 2
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/logic/TargetLogic.java
  52. 8 2
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/logic/UserLogic.java
  53. 12 2
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/logic/fromDev/impl/PluginLogicImpl.java
  54. 2 2
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/logic/impl/CalculateScoreLogicImpl.java
  55. 18 6
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/logic/impl/CaseLogicImpl.java
  56. 27 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/logic/impl/ManagerPropertyLogicImpl.java
  57. 48 25
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/logic/impl/TargetLogicImpl.java
  58. 70 10
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/logic/impl/UserLogicImpl.java
  59. 3 3
      mooctest-site-server/src/main/resources/application.yaml
  60. 3 0
      mooctest-site-server/src/test/java/cn/iselab/mooctest/site/service/fromKibug/impl/ScoreRuleServiceImplTest.java
  61. 1 1
      mooctest-site-server/src/test/java/cn/iselab/mooctest/site/web/ctrl/fromKibug/ReportControllerTest.java
  62. 3 0
      mooctest-site-server/src/test/java/cn/iselab/mooctest/site/web/logic/impl/CaseLogicImplTest.java

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

@@ -31,7 +31,7 @@
         <dependency>
             <groupId>cn.iselab.mooctest</groupId>
             <artifactId>oauth2-dubbo-api</artifactId>
-            <version>1.0.7</version>
+            <version>1.0.15</version>
         </dependency>
 
         <!--dubbo-service-api-->

+ 2 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/constant/Constants.java

@@ -24,4 +24,6 @@ public class Constants {
 
     public static final int DEFAULT_WORKER_LEVEL = 0;
 
+    public static final String OAUTH2APIVERSION = "1.0.15";
+
 }

+ 13 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/constant/ThirdPartConstants.java

@@ -0,0 +1,13 @@
+package cn.iselab.mooctest.site.common.constant;
+
+/**
+ * Created by ROGK on 2017/8/18.
+ */
+public class ThirdPartConstants {
+
+    public final static int TEST=1;
+
+    public final static int ANHENG=2;
+
+    public final static int ZEZHONG=3;
+}

+ 1 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/ManagerPropertyDao.java

@@ -12,4 +12,5 @@ import javax.transaction.Transactional;
 @Transactional
 public interface ManagerPropertyDao extends CrudRepository<ManagerProperty, Long> {
 
+    ManagerProperty findByUserId(Long userId);
 }

+ 18 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/OpenId2UserIdDao.java

@@ -0,0 +1,18 @@
+package cn.iselab.mooctest.site.dao;
+
+import cn.iselab.mooctest.site.models.OpenId2UserId;
+import org.springframework.data.repository.CrudRepository;
+
+import javax.transaction.Transactional;
+
+/**
+ * Created by csc on 2017/8/15.
+ */
+@Transactional
+public interface OpenId2UserIdDao extends CrudRepository<OpenId2UserId, Long> {
+
+    OpenId2UserId findByUserId(long userId);
+
+    OpenId2UserId findByOpenId(String openId);
+
+}

+ 2 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/fromKibug/ScoreRuleDao.java

@@ -2,9 +2,11 @@ package cn.iselab.mooctest.site.dao.fromKibug;
 
 import cn.iselab.mooctest.site.models.fromKibug.ScoreRule;
 import cn.iselab.mooctest.site.models.fromKibug.ScoreRulePK;
+import org.springframework.data.jpa.repository.Query;
 import org.springframework.data.repository.CrudRepository;
 
 import javax.transaction.Transactional;
+import java.util.List;
 
 /**
  * Created by NJUta on 2017/6/7.

+ 3 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/models/ExamGroupUser.java

@@ -48,6 +48,9 @@ public class ExamGroupUser{
     @Column(name = "status")
     private Integer status;
 
+    @Column(name = "is_third_party")
+    private Boolean isThirdParty;
+
     @Column(name = "participant_id")
     private Long participantId;
 }

+ 11 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/models/ManagerProperty.java

@@ -36,6 +36,17 @@ public class ManagerProperty {
     @Column(name = "create_time")
     private Timestamp createTime;
 
+    @Column(name = "expire_time")
+    private Timestamp expireTime;
+
+    public Timestamp getExpireTime() {
+        return expireTime;
+    }
+
+    public void setExpireTime(Timestamp expireTime) {
+        this.expireTime = expireTime;
+    }
+
     public Long getId() {
         return id;
     }

+ 38 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/models/OpenId2UserId.java

@@ -0,0 +1,38 @@
+package cn.iselab.mooctest.site.models;
+
+import org.hibernate.annotations.GenericGenerator;
+import org.springframework.boot.autoconfigure.web.ResourceProperties;
+
+import javax.persistence.*;
+
+/**
+ * Created by csc on 2017/8/15.
+ */
+
+@Entity
+@Table(name = "openid_2_userid")
+public class OpenId2UserId {
+
+    @Id
+    @Column( name = "user_id" )
+    private long userId;
+
+    @Column( name = "open_id" )
+    private String openId;
+
+    public String getOpenId() {
+        return openId;
+    }
+
+    public void setOpenId(String openid) {
+        this.openId = openid;
+    }
+
+    public long getUserId() {
+        return userId;
+    }
+
+    public void setUserId(long userid) {
+        this.userId = userid;
+    }
+}

+ 9 - 8
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/models/Task.java

@@ -52,6 +52,9 @@ public class Task {
     @Column(name = "status")
     private Integer status;
 
+    @Column(name = "is_third_party")
+    private Boolean isThirdParty;
+
     public Long getOwnerId() {
         return ownerId;
     }
@@ -136,14 +139,12 @@ public class Task {
         this.status = status;
     }
 
-//    @Override
-//    public boolean equals(Object object) {
-//        if(object == null) {
-//            return false;
-//        }
-//        Task task = (Task)object;
-//        return task.getId() == this.getId();
-//    }
+    public Boolean getIsThirdParty() {
+        return isThirdParty;
+    }
 
+    public void setIsThirdParty(Boolean thirdParty) {
+        isThirdParty = thirdParty;
+    }
 
 }

+ 14 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/models/Weight.java

@@ -157,4 +157,18 @@ public class Weight {
     public void setApfd(double apfd) {
         this.apfd = apfd;
     }
+
+    public void init(){
+        this.setCovercom(0);
+        this.setMutation(0);
+        this.setMutationcom(0);
+        this.setSc(0);
+        this.setPpc(0);
+        this.setMc_dc(0);
+        this.setBc(0);
+        this.setAu(0);
+        this.setApfd(0);
+        this.setAd(0);
+        this.setAdu(0);
+    }
 }

+ 123 - 2
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/rpc/Oauth2/impl/ExamServiceImpl2.java

@@ -1,10 +1,18 @@
 package cn.iselab.mooctest.site.rpc.Oauth2.impl;
 
+import cn.iselab.mooctest.site.common.constant.Constants;
 import cn.iselab.mooctest.site.common.constant.SubsiteConstants;
-import cn.iselab.mooctest.site.models.Task;
+import cn.iselab.mooctest.site.dao.Exam2CaseDao;
+import cn.iselab.mooctest.site.dao.OpenId2UserIdDao;
+import cn.iselab.mooctest.site.dao.Task2CaseDao;
+import cn.iselab.mooctest.site.models.*;
 import cn.iselab.mooctest.site.models.instancePermission.TaskPermission;
 import cn.iselab.mooctest.site.rpc.oauth2.api.ExamService;
 import cn.iselab.mooctest.site.rpc.oauth2.data.*;
+import cn.iselab.mooctest.site.service.AssignedTaskService;
+import cn.iselab.mooctest.site.service.ExamStatusService;
+import cn.iselab.mooctest.site.service.PaperService;
+import cn.iselab.mooctest.site.service.TaskService;
 import cn.iselab.mooctest.site.web.data.fromDev.PluginResultVO;
 import cn.iselab.mooctest.site.web.data.fromKibug.ReportScriptResultVO;
 import cn.iselab.mooctest.site.web.data.fromKibug.ReportVO;
@@ -14,16 +22,19 @@ import cn.iselab.mooctest.site.web.logic.fromDev.PluginLogic;
 import cn.iselab.mooctest.site.web.util.Converter;
 import com.alibaba.dubbo.config.annotation.Service;
 import org.apache.shiro.authz.UnauthorizedException;
+import org.json.JSONArray;
+import org.json.JSONObject;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
 
 /**
  * Created by shanshan on 2017/8/14.
  */
-@Service(version = "1.0.7")
+@Service(version = Constants.OAUTH2APIVERSION, timeout = 12000 )
 @Component
 public class ExamServiceImpl2 implements ExamService {
     @Autowired
@@ -32,6 +43,24 @@ public class ExamServiceImpl2 implements ExamService {
     private PluginLogic pluginLogic;
     @Autowired
     private ExamLogic examLogic;
+    @Autowired
+    private AssignedTaskService assignedTaskService;
+    @Autowired
+    private OpenId2UserIdDao openId2UserIdDao;
+    @Autowired
+    private cn.iselab.mooctest.site.service.ExamService examService;
+    @Autowired
+    private PaperService paperService;
+    @Autowired
+    private Task2CaseDao task2CaseDao;
+    @Autowired
+    private Exam2CaseDao exam2CaseDao;
+    @Autowired
+    private TaskService taskService;
+    @Autowired
+    private ExamStatusService examStatusService;
+
+
 
     @Override
     public TaskVO getCaseList(Long userId, Long taskId, Long subsiteId) throws Exception {
@@ -83,4 +112,96 @@ public class ExamServiceImpl2 implements ExamService {
         ReportScriptResultVO reportScriptResultVO = Converter.convert(ReportScriptResultVO.class, vo);
         reportLogic.recordReportScript(reportId, reportScriptResultVO);
     }
+
+    @Override
+    public boolean saveTaskResult(TaskResultDTO taskResultDTO) {
+        long taskId = taskResultDTO.getTask_id();
+
+        HashMap<Long, String> caseNameMap = taskResultDTO.getTask_case_list();
+        Task task = null;
+        long participantId;
+        for(ScoreDetails scoreDetails: taskResultDTO.getScoreDetails()) {
+            OpenId2UserId openId2UserId = openId2UserIdDao.findByOpenId(scoreDetails.getOpen_id());
+            participantId = openId2UserId.getUserId();
+            task = examService.getExamByIdAndParticipantIdIfPermited(taskId, openId2UserId.getUserId());
+            this.saveAssignedTask(participantId, scoreDetails, task, caseNameMap);
+        }
+        if(task != null) {
+            Paper paper = this.savePaperAndPaper2Case(task.getName(), caseNameMap);
+            this.saveExam2PaperAndExam2Case(paper, taskId, caseNameMap);
+            this.updateTaskStatus(taskId);
+        }
+
+        // insert data into assignedtask
+        // new paper for the task (paper and paper2case)
+        // copy cases to exam (savetask2exam)
+        // update status of task
+        return true;
+    }
+
+    private AssignedTask saveAssignedTask(long participantId, ScoreDetails scoreDetails, Task task, HashMap<Long, String> caseNameMap) {
+        AssignedTask assignedTask = new AssignedTask();
+        assignedTask.setWorkerId(participantId);
+        assignedTask.setName(task.getName());
+        assignedTask.setTaskId(task.getId());
+        assignedTask.setManagerId(task.getManagerId());
+        assignedTask.setContent("");
+        assignedTask.setScore(0.0);
+        assignedTask.setOwnerId(task.getOwnerId());
+        assignedTask.setParticipantId(participantId);
+
+        JSONObject assignedResults = new JSONObject();
+        JSONObject assignedResultObj = new JSONObject();
+
+        for(CaseDetailDTO caseDetailDTO: scoreDetails.getDetail()) {
+            JSONObject caseDetail =  new JSONObject();
+            caseDetail.put("id", caseDetailDTO.getCase_id());
+            caseDetail.put("maxScore", caseDetailDTO.getScore());
+            JSONArray scores = new JSONArray();
+            scores.put(caseDetailDTO.getScore());
+            caseDetail.put("scores", scores);
+            caseDetail.put("name", caseNameMap.get(caseDetailDTO.getCase_id()));
+            caseDetail.put("resultUrls", new JSONArray());
+            assignedResults.put(String.valueOf(caseDetailDTO.getCase_id()), caseDetail);
+        }
+        assignedResultObj.put("results", assignedResults);
+        assignedTask.setResult(assignedResultObj.toString());
+        return  assignedTaskService.saveOrUpdateAssignedTask(assignedTask);
+    }
+
+    private Paper savePaperAndPaper2Case(String paperName, HashMap<Long, String> caseNameMap) {
+        Paper paper = new Paper();
+        paper.setName(paperName+"试卷");
+        paper = paperService.createOrUpdate(paper);
+        for(Long id: caseNameMap.keySet()) {
+            Task2Case task2Case = new Task2Case();
+            task2Case.setTaskId(paper.getId());
+            task2Case.setAutoSelect(true);
+            task2Case.setCaseId(id);
+            task2Case.setCaseIndex(0);
+            task2Case.setCount(1);
+            task2Case.setWeight(0.0);
+            task2CaseDao.save(task2Case);
+        }
+        return paper;
+    }
+
+    private void saveExam2PaperAndExam2Case(Paper paper, long taskId, HashMap<Long, String> nameCaseMap) {
+        examService.saveExam2Paper(taskId, paper.getId());
+        for(Long id: nameCaseMap.keySet()) {
+            Exam2Case exam2Case = new Exam2Case();
+            exam2Case.setCaseId(id);
+            exam2Case.setExamId(taskId);
+            exam2Case.setPaperId(paper.getId());
+            exam2CaseDao.save(exam2Case);
+        }
+        return;
+    }
+
+    public void updateTaskStatus(long taskId) {
+        Task task = taskService.getTask(taskId);
+        examStatusService.updateStatus(task);
+        return;
+    }
+
 }

+ 37 - 2
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/rpc/Oauth2/impl/Oauth2ServiceImpl.java

@@ -1,21 +1,33 @@
 package cn.iselab.mooctest.site.rpc.Oauth2.impl;
 
+import cn.iselab.mooctest.site.common.constant.Constants;
+import cn.iselab.mooctest.site.dao.OpenId2UserIdDao;
+import cn.iselab.mooctest.site.models.AssignedTask;
+import cn.iselab.mooctest.site.models.OpenId2UserId;
+import cn.iselab.mooctest.site.models.Task;
 import cn.iselab.mooctest.site.rpc.oauth2.api.UserService;
+import cn.iselab.mooctest.site.rpc.oauth2.data.CaseDetailDTO;
+import cn.iselab.mooctest.site.rpc.oauth2.data.ScoreDetails;
+import cn.iselab.mooctest.site.rpc.oauth2.data.TaskResultDTO;
 import cn.iselab.mooctest.site.rpc.oauth2.data.UserDTO;
+import cn.iselab.mooctest.site.service.AssignedTaskService;
+import cn.iselab.mooctest.site.service.ExamService;
 import cn.iselab.mooctest.site.service.GroupService;
 import cn.iselab.mooctest.site.web.data.UserVO;
 import cn.iselab.mooctest.site.web.logic.UserLogic;
 import com.alibaba.dubbo.config.annotation.Service;
+import org.json.JSONArray;
+import org.json.JSONObject;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
 import java.sql.Timestamp;
-import java.util.ArrayList;
+import java.util.HashMap;
 
 /**
  * Created by csc on 2017/8/11.
  */
-@Service(version = "1.0.7")
+@Service(version = Constants.OAUTH2APIVERSION, timeout = 12000 )
 @Component
 public class Oauth2ServiceImpl implements UserService{
 
@@ -25,6 +37,9 @@ public class Oauth2ServiceImpl implements UserService{
     @Autowired
     private GroupService groupService;
 
+    @Autowired
+    private OpenId2UserIdDao openId2UserIdDao;
+
     @Override
     public UserDTO registerNewUser(String s, String s1, String s2, String s3, String s4) {
         UserVO userVO = new UserVO();
@@ -48,4 +63,24 @@ public class Oauth2ServiceImpl implements UserService{
     public void joinGroup(long l, long l1) {
         groupService.addUserIntoGroupForOauth2(l,l1);
     }
+
+    @Override
+    public UserDTO getUserByOpenId(String openId) {
+        System.out.println(openId);
+        OpenId2UserId openId2UserId = openId2UserIdDao.findByOpenId(openId);
+        if(openId2UserId == null) {
+            return null;
+        }
+        long l = openId2UserId.getUserId();
+        System.out.println("aaaaaaaa "+ l);
+        UserDTO result = new UserDTO();
+        UserVO userVO =  userLogic.findUserById(l);
+        result.setUserId(userVO.getId());
+        result.setName(userVO.getName());
+        result.setMobile(userVO.getMobile());
+        result.setEmail(userVO.getEmail());
+        result.setSchool(userVO.getSchool());
+        result.setOpenId(openId2UserId.getOpenId());
+        return result;
+    }
 }

+ 7 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/ManagerPropertyService.java

@@ -1,5 +1,7 @@
 package cn.iselab.mooctest.site.service;
 
+import cn.iselab.mooctest.site.models.ManagerProperty;
+
 /**
  * @author sean
  * @date 2017-07-18.
@@ -7,4 +9,9 @@ package cn.iselab.mooctest.site.service;
 public interface ManagerPropertyService {
 
     void setDefaultManagerProperty(Long userId);
+
+    ManagerProperty getManagerPropertyByUserId(Long userId);
+
+    void save(ManagerProperty managerProperty);
+
 }

+ 11 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/OpenId2UserIdService.java

@@ -0,0 +1,11 @@
+package cn.iselab.mooctest.site.service;
+
+/**
+ * Created by csc on 2017/8/18.
+ */
+public interface OpenId2UserIdService {
+
+    public long findUserIdByOpenId(String openId);
+    public String findOpenIdByUserId(long userId);
+
+}

+ 7 - 2
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/TargetService.java

@@ -3,7 +3,6 @@ package cn.iselab.mooctest.site.service;
 import cn.iselab.mooctest.site.models.App;
 import cn.iselab.mooctest.site.models.DevTarget;
 import cn.iselab.mooctest.site.models.fromKibug.Application;
-import cn.iselab.mooctest.site.web.data.TargetVO;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
 
@@ -14,11 +13,17 @@ public interface TargetService {
 
     Page<App> getTargets(long ownerId, String keyword, Pageable pageable);
 
-    Page<App> getMyTargets(long ownerId,String keyword,Pageable pageable);
+    Page<App> getMyTargets(long ownerId, String keyword, Pageable pageable);
 
     void createTargetKibug(Application application);
 
     DevTarget findDevByUpLoadCaseId(long uploadCaseId);
 
     void createTargetDev(DevTarget devTarget);
+
+    App findById(long id);
+
+    void verifyApp(App app);
+
+    Page<App> getAllTargets(Pageable pageable);
 }

+ 3 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/fromDev/AnalysisService.java

@@ -1,5 +1,6 @@
 package cn.iselab.mooctest.site.service.fromDev;
 
+import cn.iselab.mooctest.site.models.Grade;
 import cn.iselab.mooctest.site.rpc.dev.data.MutationDTO;
 
 import java.util.List;
@@ -12,4 +13,6 @@ public interface AnalysisService {
     MutationDTO mutationAnalyze(long examId, long workerId, long caseId);
 
     List<MutationDTO> mutationAllAnalyze(long examId, List<Long> workerIds, long caseId);
+
+    List<Grade> saveMutationScore(long participantId, long taskId, long caseId, double mutationScore);
 }

+ 4 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/fromDev/PluginService.java

@@ -1,5 +1,9 @@
 package cn.iselab.mooctest.site.service.fromDev;
 
+import cn.iselab.mooctest.site.models.Grade;
+
+import java.util.List;
+
 /**
  * 插件的行为记录接口
  * Created by Alan on 2017/1/24.

+ 26 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/fromDev/impl/AnalysisServiceImpl.java

@@ -1,6 +1,8 @@
 package cn.iselab.mooctest.site.service.fromDev.impl;
 
+import cn.iselab.mooctest.site.dao.GradeDao;
 import cn.iselab.mooctest.site.models.Case;
+import cn.iselab.mooctest.site.models.Grade;
 import cn.iselab.mooctest.site.rpc.dev.DevService;
 import cn.iselab.mooctest.site.rpc.dev.data.MutationDTO;
 import cn.iselab.mooctest.site.service.CaseService;
@@ -24,6 +26,8 @@ public class AnalysisServiceImpl implements AnalysisService {
     DevService devService;
     @Autowired
     CaseService caseService;
+    @Autowired
+    GradeDao gradeDao;
 
     @Override
     public MutationDTO mutationAnalyze(long examId, long workerId, long caseId){
@@ -49,4 +53,26 @@ public class AnalysisServiceImpl implements AnalysisService {
         }
         return list;
     }
+
+    @Override
+    public List<Grade> saveMutationScore(long participantId, long taskId, long caseId, double mutationScore) {
+        List<Grade> gradeList = gradeDao.findByTaskIdAndWorkerIdAndCaseId(taskId, participantId, caseId);
+        if(gradeList!=null && gradeList.size()!=0){
+            for(Grade grade:gradeList){
+                grade.setMutation(mutationScore);
+                gradeDao.save(grade);
+            }
+            return gradeList;
+        }else {
+            List<Grade> re=new ArrayList<>();
+            Grade grade = new Grade();
+            grade.setWorkerId(participantId);
+            grade.setTaskId(taskId);
+            grade.setCaseId(caseId);
+            grade.setMutation(mutationScore);
+            grade = gradeDao.save(grade);
+            re.add(grade);
+            return re;
+        }
+    }
 }

+ 2 - 2
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/fromKibug/ScoreRuleService.java

@@ -9,8 +9,8 @@ import java.util.List;
  * Created by NJUta on 2017/6/7.
  */
 public interface ScoreRuleService {
-    List<ScoreRuleItemVO> getKibugScoreRule(long taskId, long caseId) throws Exception;
-    List<ScoreRuleItemVO> getDevScoreRule(long taskId, long caseId) throws Exception;
+    List<ScoreRuleItemVO> getKibugScoreRule(long taskId, long caseId);
+    List<ScoreRuleItemVO> getDevScoreRule(long taskId, long caseId);
 
     void updateKibugScoreRule(long taskId, long caseId,List<ScoreRuleItemVO> scoreRuleItemVOList);
     void updateDevScoreRule(long taskId, long caseId,List<ScoreRuleItemVO> scoreRuleItemVOList);

+ 8 - 1
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/fromKibug/impl/ReportServiceImpl.java

@@ -102,7 +102,14 @@ public class ReportServiceImpl implements ReportService {
     public void updateReport(ReportVO vo) throws Exception {
         Report report = reportDao.findOne(vo.getId());
         if (report == null) throw new IllegalOperationException();
-        Converter.copy(report, vo);
+        report.setDescription(vo.getDescription());
+        report.setDeviceBrand(vo.getDeviceBrand());
+        report.setDeviceModel(vo.getDeviceModel());
+        report.setDeviceOs(vo.getDeviceOs());
+        report.setLogLocation(vo.getLogLocation());
+        report.setReportLocation(vo.getReportLocation());
+        report.setName(vo.getName());
+        report.setScriptLocation(vo.getScriptLocation());
         reportDao.save(report);
     }
 

+ 14 - 7
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/fromKibug/impl/ScoreRuleServiceImpl.java

@@ -6,6 +6,7 @@ import cn.iselab.mooctest.site.dao.fromKibug.ScoreRuleDao;
 import cn.iselab.mooctest.site.models.Weight;
 import cn.iselab.mooctest.site.models.fromKibug.ScoreRule;
 import cn.iselab.mooctest.site.models.fromKibug.ScoreRulePK;
+import cn.iselab.mooctest.site.service.CalculateScoreService;
 import cn.iselab.mooctest.site.service.fromKibug.ScoreRuleService;
 import cn.iselab.mooctest.site.web.data.fromKibug.ScoreRuleItemVO;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -24,9 +25,11 @@ public class ScoreRuleServiceImpl implements ScoreRuleService{
     private ScoreRuleDao scoreRuleDao;
     @Autowired
     private WeightDao weightDao;
+    @Autowired
+    private CalculateScoreService calculateScoreService;
 
     @Override
-    public List<ScoreRuleItemVO> getKibugScoreRule(long taskId, long caseId) throws Exception {
+    public List<ScoreRuleItemVO> getKibugScoreRule(long taskId, long caseId){
         ScoreRulePK pk = new ScoreRulePK(taskId,caseId);
         ScoreRule scoreRule = scoreRuleDao.findOne(pk);
         List<ScoreRuleItemVO> scoreRuleList = new ArrayList<>();
@@ -46,7 +49,7 @@ public class ScoreRuleServiceImpl implements ScoreRuleService{
     }
 
     @Override
-    public List<ScoreRuleItemVO> getDevScoreRule(long taskId, long caseId) throws Exception {
+    public List<ScoreRuleItemVO> getDevScoreRule(long taskId, long caseId){
         List<ScoreRuleItemVO> scoreRuleList = new ArrayList<>();
 
         Weight weight = weightDao.findByTidAndCid(taskId, caseId);
@@ -98,15 +101,18 @@ public class ScoreRuleServiceImpl implements ScoreRuleService{
                 sr.setScript(sri.getPercentage());
         }
         scoreRuleDao.save(sr);
+        calculateScoreService.calculateTotal(taskId,caseId,getKibugScoreRule(taskId,caseId));
     }
 
     @Override
     public void updateDevScoreRule(long taskId, long caseId, List<ScoreRuleItemVO> scoreRuleItemVOList) {
-        Weight oldWeight = weightDao.findByTidAndCid(taskId, caseId);
-        Weight weight = new Weight();
-        weight.setId(oldWeight.getId());
-        weight.setTid(taskId);
-        weight.setCid(caseId);
+        Weight weight = weightDao.findByTidAndCid(taskId, caseId);
+        if(weight==null) {
+            weight = new Weight();
+            weight.setTid(taskId);
+            weight.setCid(caseId);
+        }
+        weight.init();
         for(ScoreRuleItemVO sri:scoreRuleItemVOList){
             if(sri.getName().equals(ScoreRuleKey.SC.toString()))
                 weight.setSc(sri.getPercentage());
@@ -128,6 +134,7 @@ public class ScoreRuleServiceImpl implements ScoreRuleService{
                 weight.setApfd(sri.getPercentage());
         }
         weightDao.save(weight);
+        calculateScoreService.calculateDevScore(taskId,caseId);
     }
 
     @Override

+ 10 - 3
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/impl/AssignedTaskServiceImpl.java

@@ -132,11 +132,15 @@ public class AssignedTaskServiceImpl extends BaseService implements AssignedTask
             String keyStr = (String) key;
             JSONObject caseJson = resultJson.getJSONObject(keyStr);
 
-            Subsite subsite = null;
-            Case caze = caseDao.findOne(caseJson.getLong("id"));
             AssignedCase assignedCase = new AssignedCase();
             assignedCase.setCaseId(caseJson.getLong("id"));
-            assignedCase.setCaseName(caze.getName());
+            if(caseJson.has("name")){
+                assignedCase.setCaseName(caseJson.getString("name"));
+            }else{
+                Case caze = caseDao.findOne(caseJson.getLong("id"));
+                assignedCase.setCaseName(caze.getName());
+            }
+
             List<Result> resultList = new ArrayList<>();
             assignedCase.setResults(resultList);
 
@@ -290,4 +294,7 @@ public class AssignedTaskServiceImpl extends BaseService implements AssignedTask
     public List<Double> getScoreList(Long examId) {
         return assignedTaskDao.findScoreListByExamId(examId);
     }
+
+
+
 }

+ 6 - 5
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/impl/CalculateScoreServiceImpl.java

@@ -68,7 +68,7 @@ public class CalculateScoreServiceImpl implements CalculateScoreService {
     public void calculateDevScore(long taskId, long caseId) {
         List<Grade> grades=gradeDao.findByTaskIdAndCaseId(taskId,caseId);
         Weight weight=weightDao.findByTidAndCid(taskId, caseId);
-        this.dev(grades,weight);
+        this.dev(taskId,caseId,grades,weight);
     }
 
     @Override
@@ -93,7 +93,7 @@ public class CalculateScoreServiceImpl implements CalculateScoreService {
     public void calculatePersonalDevScore(long taskId, long caseId, long userId) {
         List<Grade> grades=gradeDao.findByTaskIdAndWorkerIdAndCaseId(taskId,userId,caseId);
         Weight weight=weightDao.findByTidAndCid(taskId, caseId);
-        this.dev(grades,weight);
+        this.dev(taskId,caseId,grades,weight);
     }
 
     private void manual(List<CaseTake> caseTakeList){
@@ -147,7 +147,7 @@ public class CalculateScoreServiceImpl implements CalculateScoreService {
         caseTakeDao.save(caseTakeList);
     }
 
-    private void dev(List<Grade> grades,Weight weight){
+    private void dev(long taskId, long caseId, List<Grade> grades,Weight weight){
         for(Grade grade:grades){
             double totle=0.0;
             totle=grade.getSc()*weight.getSc()
@@ -158,8 +158,9 @@ public class CalculateScoreServiceImpl implements CalculateScoreService {
                     +grade.getAd()*weight.getAd()
                     +grade.getAdu()*weight.getAdu()
                     +grade.getApfd()*weight.getApfd()
-                    +grade.getMutation()*weight.getMutationcom();
-            grade.setScore(totle);
+                    +grade.getMutation()*weight.getMutation();
+            grade.setScore(totle/100);
+            assignedTaskService.recordScore(taskId,caseId,grade.getWorkerId(),grade.getScore());
         }
         gradeDao.save(grades);
     }

+ 1 - 22
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/impl/GroupServiceImpl.java

@@ -138,19 +138,6 @@ public class GroupServiceImpl implements GroupService {
             return group;
         }
 
-        //add Group2Worker
-        Group2Worker group2Worker = new Group2Worker();
-        group2Worker.setGroupId(group.getId());
-        group2Worker.setWorkerId(userId);
-        group2Worker.setParticipantId(userId);
-        group2Worker.setRecordCreateTime(new Timestamp(System.currentTimeMillis()));
-        group2WorkerDao.save(group2Worker);
-
-        GroupPermission groupPermission = groupPermissionService.joinGroup(userId, group.getId());
-        if (groupPermission == null) {
-            throw new IllegalOperationException("Can not create Group Permission!");
-        }
-
         this.privateAddUserIntoGroup(userId, group.getId());
         return group;
     }
@@ -191,15 +178,6 @@ public class GroupServiceImpl implements GroupService {
         if (SecurityUtils.getSubject().isPermitted(new GroupPermission(permission))) {
             throw new IllegalOperationException("Cannot join Group YOU OWN!");
         }
-        Group2Worker group2Worker = new Group2Worker();
-        group2Worker.setGroupId(groupId);
-        group2Worker.setParticipantId(userId);
-        group2Worker.setWorkerId(userId);
-        group2WorkerDao.save(group2Worker);
-        GroupPermission groupPermission = groupPermissionService.joinGroup(userId, groupId);
-        if (groupPermission == null) {
-            throw new IllegalOperationException("Can not create Group Permission!");
-        }
         this.privateAddUserIntoGroup(userId, groupId);
         return userService.findByUserId(userId);
     }
@@ -329,6 +307,7 @@ public class GroupServiceImpl implements GroupService {
         group2Worker.setGroupId(groupId);
         group2Worker.setParticipantId(userId);
         group2Worker.setWorkerId(userId);
+        group2Worker.setRecordCreateTime(new Timestamp(System.currentTimeMillis()));
         group2WorkerDao.save(group2Worker);
         GroupPermission groupPermission = groupPermissionService.joinGroup(userId, groupId);
         if (groupPermission == null) {

+ 15 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/impl/ManagerPropertyServiceImpl.java

@@ -6,6 +6,8 @@ import cn.iselab.mooctest.site.service.ManagerPropertyService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.sql.Timestamp;
+
 /**
  * @author sean
  * @date 2017-07-18.
@@ -26,7 +28,20 @@ public class ManagerPropertyServiceImpl implements ManagerPropertyService {
         managerProperty.setTaskNum(5);
         managerProperty.setGroupSize(50);
         managerProperty.setGroupNum(1);
+        managerProperty.setCreateTime(new Timestamp(System.currentTimeMillis()));
+        Long expireTime = 1531584000000L;
+        managerProperty.setExpireTime(new Timestamp(expireTime));
+
+        managerPropertyDao.save(managerProperty);
+    }
 
+    @Override
+    public ManagerProperty getManagerPropertyByUserId(Long userId) {
+        return managerPropertyDao.findByUserId(userId);
+    }
+
+    @Override
+    public void save(ManagerProperty managerProperty) {
         managerPropertyDao.save(managerProperty);
     }
 }

+ 26 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/impl/OpenId2UseridServiceImpl.java

@@ -0,0 +1,26 @@
+package cn.iselab.mooctest.site.service.impl;
+
+import cn.iselab.mooctest.site.dao.OpenId2UserIdDao;
+import cn.iselab.mooctest.site.service.OpenId2UserIdService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+/**
+ * Created by csc on 2017/8/18.
+ */
+@Service
+public class OpenId2UseridServiceImpl implements OpenId2UserIdService{
+
+    @Autowired
+    private OpenId2UserIdDao openId2UserIdDao;
+
+    @Override
+    public long findUserIdByOpenId(String openId) {
+        return openId2UserIdDao.findByOpenId(openId).getUserId();
+    }
+
+    @Override
+    public String findOpenIdByUserId(long userId) {
+        return openId2UserIdDao.findByUserId(userId).getOpenId();
+    }
+}

+ 15 - 2
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/impl/TargetServiceImpl.java

@@ -7,12 +7,10 @@ import cn.iselab.mooctest.site.dao.fromKibug.ApplicationDao;
 import cn.iselab.mooctest.site.dao.fromKibug.IncrementIdDao;
 import cn.iselab.mooctest.site.models.App;
 import cn.iselab.mooctest.site.models.DevTarget;
-import cn.iselab.mooctest.site.models.Paper;
 import cn.iselab.mooctest.site.models.fromKibug.Application;
 import cn.iselab.mooctest.site.models.fromKibug.IncrementId;
 import cn.iselab.mooctest.site.service.BaseService;
 import cn.iselab.mooctest.site.service.TargetService;
-import cn.iselab.mooctest.site.web.data.TargetVO;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
@@ -117,4 +115,19 @@ public class TargetServiceImpl extends BaseService implements TargetService{
             }
         };
     }
+
+    @Override
+    public App findById(long id) {
+        return targetDao.findOne(id);
+    }
+
+    @Override
+    public Page<App> getAllTargets(Pageable pageable) {
+        return targetDao.findAll(pageable);
+    }
+
+    @Override
+    public void verifyApp(App app) {
+        targetDao.save(app);
+    }
 }

+ 13 - 1
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/impl/UserServiceImpl.java

@@ -1,8 +1,10 @@
 package cn.iselab.mooctest.site.service.impl;
 
+import cn.iselab.mooctest.site.dao.OpenId2UserIdDao;
 import cn.iselab.mooctest.site.dao.Role2PermissionDao;
 import cn.iselab.mooctest.site.dao.User2RoleDao;
 import cn.iselab.mooctest.site.dao.UserDao;
+import cn.iselab.mooctest.site.models.OpenId2UserId;
 import cn.iselab.mooctest.site.models.User;
 import cn.iselab.mooctest.site.service.BaseService;
 import cn.iselab.mooctest.site.service.UserService;
@@ -12,6 +14,7 @@ import org.springframework.stereotype.Service;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.UUID;
 
 /**
  * @author sean
@@ -29,9 +32,18 @@ public class UserServiceImpl extends BaseService implements UserService {
     @Autowired
     private Role2PermissionDao role2PermissionDao;
 
+    @Autowired
+    private OpenId2UserIdDao openId2UserIdDao;
+
     @Override
     public User createUser(User user) {
-        return userDao.save(user);
+        User result = userDao.save(user);
+        OpenId2UserId openId2UserId = new OpenId2UserId();
+        System.out.println();
+        openId2UserId.setUserId(result.getId());
+        openId2UserId.setOpenId(UUID.randomUUID().toString());
+        openId2UserIdDao.save(openId2UserId);
+        return result;
     }
 
     @Override

+ 2 - 2
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/ctrl/ScoreController.java

@@ -13,7 +13,7 @@ import java.util.List;
  * Created by HenryLee on 2017/7/10.
  */
 @RestController
-public class ScoreController {
+public class ScoreController extends BaseController{
 
     @Autowired
     private CalculateSocreLogic calculateSocreLogic;
@@ -22,7 +22,7 @@ public class ScoreController {
     @RequestMapping(value= UrlConstants.API+"score/{taskId}/{caseId}", method = RequestMethod.PUT)
     public void CalculateScore(@PathVariable("taskId") long taskId,@PathVariable("caseId") long caseId) throws Exception{
         calculateSocreLogic.calculateScore(taskId,caseId);
-    }
+}
 
     //一次考试的一道题的一个人的分
     @RequestMapping(value= UrlConstants.API+"score/{taskId}/{caseId}/{userId}", method = RequestMethod.PUT)

+ 26 - 8
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/ctrl/TargetController.java

@@ -1,12 +1,8 @@
 package cn.iselab.mooctest.site.web.ctrl;
 
 import cn.iselab.mooctest.site.common.constant.UrlConstants;
-import cn.iselab.mooctest.site.common.web.ErrorResult;
 import cn.iselab.mooctest.site.common.web.ResponseMessage;
-import cn.iselab.mooctest.site.common.web.StatusCode;
 import cn.iselab.mooctest.site.common.web.SuccessResult;
-import cn.iselab.mooctest.site.service.AppService;
-import cn.iselab.mooctest.site.service.fromKibug.ApplicationService;
 import cn.iselab.mooctest.site.web.data.TargetDevVO;
 import cn.iselab.mooctest.site.web.data.TargetKibugVO;
 import cn.iselab.mooctest.site.web.data.TargetVO;
@@ -17,14 +13,11 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.PageRequest;
 import org.springframework.data.domain.Pageable;
-import org.springframework.data.repository.query.Param;
+import org.springframework.data.domain.Sort;
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.validation.constraints.NotNull;
-import javax.validation.constraints.Null;
-
-import java.util.List;
 import java.util.Map;
 
 /**
@@ -87,4 +80,29 @@ public class TargetController extends BaseController{
         successResult.put(ResponseMessage.ID_RESULT, id);
         return successResult;
     }
+
+    @RequiresRoles("admin")
+    @RequestMapping(value = UrlConstants.API + "app/{id}", method = RequestMethod.PUT)
+    public void verifyApp(@PathVariable("id") long id, @RequestBody TargetVO targetVO) {
+        targetLogic.verifyTarget(id, targetVO);
+    }
+
+    @RequiresRoles("admin")
+    @RequestMapping(value = UrlConstants.API + "app", method = RequestMethod.GET)
+    public Page<TargetVO> getAdminApp(HttpServletRequest request) {
+        String activePageStr = request.getHeader("activePage");
+        String rowsOnPageStr = request.getHeader("rowsOnPage");
+        if (activePageStr == null || activePageStr.isEmpty() || rowsOnPageStr == null || rowsOnPageStr.isEmpty())
+            throw new IllegalOperationException();
+        Integer activePage = Integer.parseInt(activePageStr);
+        Integer rowsOnPage = Integer.parseInt(rowsOnPageStr);
+        Sort sortById = new Sort(Sort.Direction.DESC, "id");
+        return targetLogic.getAllApps(new PageRequest(activePage - 1, rowsOnPage, sortById));
+    }
+
+    @RequiresRoles("admin")
+    @RequestMapping(value = UrlConstants.API + "app/{id}", method = RequestMethod.GET)
+    public TargetVO viewApp(@PathVariable("id") long id) {
+        return targetLogic.viewTarget(id);
+    }
 }

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

@@ -3,6 +3,7 @@ package cn.iselab.mooctest.site.web.ctrl;
 import cn.iselab.mooctest.site.common.enums.SessionKey;
 import cn.iselab.mooctest.site.configure.realm.DefaultUsernamepasswordToken;
 import cn.iselab.mooctest.site.models.User;
+import cn.iselab.mooctest.site.service.OpenId2UserIdService;
 import cn.iselab.mooctest.site.util.data.EncryptionUtil;
 import cn.iselab.mooctest.site.web.data.UserVO;
 import cn.iselab.mooctest.site.web.data.wrapper.UserVOWrapper;
@@ -45,6 +46,9 @@ public class TestController {
     @Autowired
     private PermissionLogic permissionLogic;
 
+    @Autowired
+    private OpenId2UserIdService openId2UserIdService;
+
     private Logger LOG = LoggerFactory.getLogger(getClass());
 
     @RequestMapping(value = "/api/test/getSession", method = RequestMethod.GET)
@@ -104,6 +108,7 @@ public class TestController {
             User user = userVOWrapper.unwrap(userVO);
             userVO.setMenuVOs(menuLogic.getMenuListByUserId(user.getId()));
             currentUser.getSession().setAttribute("User", user);
+            userVO.setOpenId(openId2UserIdService.findOpenIdByUserId(userVO.getId()));
             return userVO;
         } else {
             token.clear();
@@ -150,15 +155,4 @@ public class TestController {
         return true;
     }
 
-    @RequestMapping(value = "/api/test/fuck", method = RequestMethod.GET)
-    public boolean fuck() {
-        UserVO user = new UserVO();
-        user.setEmail(null);
-        user.setName("Dubbo");
-        user.setMobile("130912322");
-        userLogic.registerForOauth2(user);
-        return true;
-    }
-
-
 }

+ 46 - 22
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/ctrl/UserController.java

@@ -2,17 +2,18 @@ package cn.iselab.mooctest.site.web.ctrl;
 
 import cn.iselab.mooctest.site.common.constant.UrlConstants;
 import cn.iselab.mooctest.site.configure.realm.DefaultUsernamepasswordToken;
+import cn.iselab.mooctest.site.dao.MobileVerificationDao;
+import cn.iselab.mooctest.site.models.MobileVerification;
 import cn.iselab.mooctest.site.models.User;
 import cn.iselab.mooctest.site.service.UserService;
-import cn.iselab.mooctest.site.util.data.EncryptionUtil;
 import cn.iselab.mooctest.site.web.data.ManagerPropertyVO;
 import cn.iselab.mooctest.site.web.data.UserVO;
 import cn.iselab.mooctest.site.web.data.wrapper.UserVOWrapper;
 import cn.iselab.mooctest.site.web.exception.HttpBadRequestException;
 import cn.iselab.mooctest.site.web.exception.HttpUnauthorizedException;
+import cn.iselab.mooctest.site.web.logic.ManagerPropertyLogic;
 import cn.iselab.mooctest.site.web.logic.MenuLogic;
 import cn.iselab.mooctest.site.web.logic.UserLogic;
-import jdk.nashorn.internal.ir.RuntimeNode;
 import org.apache.shiro.SecurityUtils;
 import org.apache.shiro.authc.*;
 import org.apache.shiro.authz.annotation.RequiresPermissions;
@@ -40,32 +41,37 @@ public class UserController {
     private MenuLogic menuLogic;
     @Autowired
     private UserVOWrapper userVOWrapper;
+    @Autowired
+    private MobileVerificationDao mobileVerificationDao;
+
+    @Autowired
+    private ManagerPropertyLogic managerPropertyLogic;
 
     private Logger LOG = LoggerFactory.getLogger(getClass());
 
     @RequiresPermissions("personInfo:update")
-    @RequestMapping(value = UrlConstants.API+ "user/name", method = RequestMethod.PUT)
+    @RequestMapping(value = UrlConstants.API + "user/name", method = RequestMethod.PUT)
     public UserVO updateUserName(@RequestBody UserVO userVO) {
         return userLogic.updateName(userVO);
     }
 
     @RequiresPermissions("personInfo:update")
-    @RequestMapping(value = UrlConstants.API+ "user/school", method = RequestMethod.PUT)
+    @RequestMapping(value = UrlConstants.API + "user/school", method = RequestMethod.PUT)
     public UserVO updateUserSchool(@RequestBody UserVO userVO) {
         return userLogic.updateSchool(userVO);
     }
 
     @RequiresPermissions("personInfo:update")
-    @RequestMapping(value = UrlConstants.API+ "user/mobile", method = RequestMethod.PUT)
+    @RequestMapping(value = UrlConstants.API + "user/mobile", method = RequestMethod.PUT)
     public UserVO updateMobile(@RequestBody UserVO userVO) {
         return userLogic.updateMobile(userVO);
     }
 
 
     @RequiresPermissions("password:update")
-    @RequestMapping(value = UrlConstants.API+ "user/password", method = RequestMethod.PUT)
-    public UserVO updateUserPassword(@RequestBody UserVO userVO,HttpServletRequest request) {
-        return userLogic.updateUserPassword(userVO,request);
+    @RequestMapping(value = UrlConstants.API + "user/password", method = RequestMethod.PUT)
+    public UserVO updateUserPassword(@RequestBody UserVO userVO, HttpServletRequest request) {
+        return userLogic.updateUserPassword(userVO, request);
     }
 
     @RequestMapping(value = "/api/test/managerApplication", method = RequestMethod.POST)
@@ -75,20 +81,8 @@ public class UserController {
         return userLogic.applyForManager(user.getId());
     }
 
-    @RequiresRoles("admin")
-    @RequestMapping(value = UrlConstants.API + "test/managerApproval/{id:\\d+}", method = RequestMethod.PUT)
-    public void approveManagerApplication(@PathVariable("id") Long userId) {
-        userLogic.approveofManager(userId);
-    }
-
-    @RequiresRoles("admin")
-    @RequestMapping(value = "/api/test/property/{id:\\d+}", method = RequestMethod.PUT)
-    public ManagerPropertyVO updatePropertyInfoOfManager(@PathVariable("id") Long managerId) {
-        return userLogic.updateUserProperty(managerId);
-    }
-
     @RequestMapping(value = "/api/mobileLogin", method = RequestMethod.POST)
-    public UserVO loginByMobile(@RequestBody UserVO userVO, BindingResult bindingResult, RedirectAttributes redirectAttributes){
+    public UserVO loginByMobile(@RequestBody UserVO userVO, BindingResult bindingResult, RedirectAttributes redirectAttributes) {
         if (bindingResult.hasErrors()) {
             throw new HttpUnauthorizedException("unauthorized");
 
@@ -97,7 +91,7 @@ public class UserController {
         if (username == null) {
             throw new HttpBadRequestException("empty user");
         }
-        DefaultUsernamepasswordToken token = new DefaultUsernamepasswordToken(username,userVO.getCaptcha());
+        DefaultUsernamepasswordToken token = new DefaultUsernamepasswordToken(username, userVO.getCaptcha());
         token.setLoginType("mobile");
 //        token.setRememberMe(true);
         //获取当前的Subject
@@ -140,4 +134,34 @@ public class UserController {
             throw new HttpUnauthorizedException("login failed");
         }
     }
+
+    @RequestMapping(value = "/api/common/captcha/zhong", method = RequestMethod.GET)
+    public String getCaptcha() {
+        MobileVerification mobileVerification = mobileVerificationDao.findTop1ByMobileOrderByCreateTimeDesc("13006107158");
+        return mobileVerification.getCode();
+    }
+
+    @RequiresRoles("admin")
+    @RequestMapping(value = UrlConstants.API + "user/verification", method = RequestMethod.PUT)
+    public void approveManager(@RequestBody UserVO userVO) {
+        userLogic.authorizeManagerRole(userVO);
+    }
+
+    @RequiresRoles("admin")
+    @RequestMapping(value = UrlConstants.API + "user/property/{userId}", method = RequestMethod.PUT)
+    public ManagerPropertyVO updatePropertyInfoOfManager(@PathVariable("userId") Long userId, @RequestBody ManagerPropertyVO managerPropertyVO) {
+        return userLogic.updateUserProperty(userId, managerPropertyVO);
+    }
+
+    @RequiresRoles("admin")
+    @RequestMapping(value = UrlConstants.API + "user/info", method = RequestMethod.POST)
+    public UserVO getUserBasicInfo(@RequestBody UserVO userVO) {
+        return userLogic.getUserBasicInfo(userVO);
+    }
+
+    @RequiresRoles("admin")
+    @RequestMapping(value = UrlConstants.API + "user/property/{userId}", method = RequestMethod.GET)
+    public ManagerPropertyVO getManagerProperty(@PathVariable("userId") Long userId) {
+        return managerPropertyLogic.getManagerPropertyByUserId(userId);
+    }
 }

+ 14 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/ctrl/fromDev/AnalysisController.java

@@ -1,18 +1,22 @@
 package cn.iselab.mooctest.site.web.ctrl.fromDev;
 
 import cn.iselab.mooctest.site.common.constant.UrlConstants;
+import cn.iselab.mooctest.site.models.Grade;
 import cn.iselab.mooctest.site.models.Weight;
 import cn.iselab.mooctest.site.rpc.dev.DevService;
 import cn.iselab.mooctest.site.rpc.dev.data.ApbcDTO;
 import cn.iselab.mooctest.site.rpc.dev.data.CoverageDTO;
 import cn.iselab.mooctest.site.rpc.dev.data.CoverageInfoDTO;
 import cn.iselab.mooctest.site.rpc.dev.data.MutationDTO;
+import cn.iselab.mooctest.site.service.CalculateScoreService;
 import cn.iselab.mooctest.site.service.WeightService;
 import cn.iselab.mooctest.site.service.fromDev.AnalysisService;
 import cn.iselab.mooctest.site.web.ctrl.BaseController;
 import cn.iselab.mooctest.site.web.data.fromDev.ApfdAllVO;
 import cn.iselab.mooctest.site.web.data.fromDev.MutationAllVO;
 import cn.iselab.mooctest.site.web.data.fromDev.StResponse;
+import cn.iselab.mooctest.site.web.logic.CalculateSocreLogic;
+import cn.iselab.mooctest.site.web.logic.impl.CalculateScoreLogicImpl;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
@@ -31,6 +35,10 @@ public class AnalysisController extends BaseController{
     AnalysisService analysisService;
     @Autowired
     WeightService weightService;
+    @Autowired
+    CalculateScoreService calculateScoreService;
+    @Autowired
+    CalculateSocreLogic calculateSocreLogic;
 
     @RequestMapping(value = UrlConstants.API_DEV + "/apbc", method = RequestMethod.GET)
     public String apbcAnalyze(@RequestParam(name = "examID") long examID,
@@ -63,6 +71,12 @@ public class AnalysisController extends BaseController{
         if (mutationDTO == null) {
             return StResponse.failure("获取变异结果失败");
         } else {
+            double mutationScore = (double)mutationDTO.getKilled()/mutationDTO.getTotal()*100;
+            List<Grade> grades=analysisService.saveMutationScore(stuID,examID,caseID,mutationScore);
+            if(grades!=null){
+                calculateScoreService.calculateDevScore(examID,caseID);
+                calculateSocreLogic.calculateExamScore(examID,null,null,true);
+            }
             return StResponse.success(mutationDTO);
         }
     }

+ 50 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/ctrl/fromDev/PluginController.java

@@ -10,11 +10,17 @@ import cn.iselab.mooctest.site.web.data.fromDev.AddGradeVO;
 import cn.iselab.mooctest.site.web.data.fromDev.PluginResultVO;
 import cn.iselab.mooctest.site.web.data.fromDev.StResponse;
 import cn.iselab.mooctest.site.web.data.fromKibug.KibugCaseVO;
+import cn.iselab.mooctest.site.web.data.fromKibug.ReportScriptResultVO;
+import cn.iselab.mooctest.site.web.data.fromKibug.ReportVO;
+import cn.iselab.mooctest.site.web.logic.ExamLogic;
+import cn.iselab.mooctest.site.web.logic.ReportLogic;
 import cn.iselab.mooctest.site.web.logic.fromDev.PluginLogic;
+import org.apache.shiro.authz.UnauthorizedException;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletRequest;
+import javax.validation.constraints.NotNull;
 import java.util.Map;
 
 /**
@@ -25,6 +31,10 @@ public class PluginController extends BaseController{
 
     @Autowired
     PluginLogic pluginLogic;
+    @Autowired
+    ReportLogic reportLogic;
+    @Autowired
+    private ExamLogic examLogic;
 
     @RequestMapping(value = UrlConstants.API_DEV + "plugin/downloadSig", method = RequestMethod.GET)
     public String getDownloadSignature(HttpServletRequest request) {
@@ -136,4 +146,44 @@ public class PluginController extends BaseController{
         return successResult;
     }
 
+    @RequestMapping(value =UrlConstants.API_KIBUG + "plugin/report", method = RequestMethod.POST)
+    public Map<String, Object> uploadReport(@RequestParam(name = "workerStr") String workerStr, @RequestBody @NotNull ReportVO vo) throws Exception{
+        String str = EncryptionUtil.decryptDES(workerStr);
+        String userId = str.split("_")[1];
+        String taskId = str.split("_")[0];
+        if(!examLogic.checkTaskViewPermission(Long.parseLong(userId), Long.parseLong(taskId))){
+            throw new UnauthorizedException("no permission for task");
+        }
+        vo.setWorkerId(Long.parseLong(userId));
+        SuccessResult successResult = new SuccessResult();
+        successResult.put(ResponseMessage.ID_RESULT, reportLogic.createReport(vo));
+        return successResult;
+    }
+
+    @RequestMapping(value =UrlConstants.API_KIBUG + "plugin/report/{reportId}", method = RequestMethod.PUT)
+    public Map<String, Object> updateReport(@PathVariable("reportId") Long reportId,@RequestParam(name = "workerStr") String workerStr, @RequestBody @NotNull ReportVO vo) throws Exception{
+        String str = EncryptionUtil.decryptDES(workerStr);
+        String userId = str.split("_")[1];
+        String taskId = str.split("_")[0];
+        if(!examLogic.checkTaskViewPermission(Long.parseLong(userId), Long.parseLong(taskId))){
+            throw new UnauthorizedException("no permission for task");
+        }
+        vo.setId(reportId);
+        vo.setWorkerId(Long.parseLong(userId));
+        reportLogic.updateReport(vo);
+        return SuccessResult.ok();
+    }
+
+    @RequestMapping(value =UrlConstants.API_KIBUG + "plugin/report/record_script/{reportId}", method = RequestMethod.POST)
+    public Map<String, Object> recordScore(@PathVariable("reportId") Long reportId,@RequestParam(name = "workerStr") String workerStr, @RequestBody @NotNull ReportScriptResultVO vo) throws Exception{
+        String str = EncryptionUtil.decryptDES(workerStr);
+        String userId = str.split("_")[1];
+        String taskId = str.split("_")[0];
+        if(!examLogic.checkTaskViewPermission(Long.parseLong(userId), Long.parseLong(taskId))){
+            throw new UnauthorizedException("no permission for task");
+        }
+        reportLogic.recordReportScript(reportId, vo);
+        return SuccessResult.ok();
+    }
+
 }

+ 2 - 1
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/ctrl/fromKibug/BugController.java

@@ -14,6 +14,7 @@ import cn.iselab.mooctest.site.service.fromKibug.BugService;
 import cn.iselab.mooctest.site.service.fromKibug.KibugCaseService;
 import cn.iselab.mooctest.site.service.fromKibug.KibugTaskService;
 import cn.iselab.mooctest.site.service.fromKibug.ReportService;
+import cn.iselab.mooctest.site.web.ctrl.BaseController;
 import cn.iselab.mooctest.site.web.data.fromKibug.BugVO;
 import cn.iselab.mooctest.site.web.exception.IllegalOperationException;
 import cn.iselab.mooctest.site.web.util.Converter;
@@ -32,7 +33,7 @@ import java.util.Map;
  * Created by shanshan on 2017/7/3.
  */
 @RestController
-public class BugController {
+public class BugController extends BaseController{
     @Autowired
     private ReportService reportService;
     @Autowired

+ 2 - 1
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/ctrl/fromKibug/ReportController.java

@@ -17,6 +17,7 @@ import cn.iselab.mooctest.site.service.ExamService;
 import cn.iselab.mooctest.site.service.fromKibug.KibugCaseService;
 import cn.iselab.mooctest.site.service.fromKibug.KibugTaskService;
 import cn.iselab.mooctest.site.service.fromKibug.ReportService;
+import cn.iselab.mooctest.site.web.ctrl.BaseController;
 import cn.iselab.mooctest.site.web.data.fromKibug.ReportListItemVO;
 import cn.iselab.mooctest.site.web.data.fromKibug.ReportScoreVO;
 import cn.iselab.mooctest.site.web.data.fromKibug.ReportScriptResultVO;
@@ -45,7 +46,7 @@ import java.util.Map;
  * Created by NJUta on 2017/6/7.
  */
 @RestController
-public class ReportController {
+public class ReportController extends BaseController{
     @Autowired
     private ReportService reportService;
     @Autowired

+ 2 - 1
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/data/CaseExtendsVO.java

@@ -19,4 +19,5 @@ public class CaseExtendsVO extends CaseVO{
     private long reportId;
     private String caseReportUrl;
     private long taskId;
-}
+    private String entrance;
+}

+ 11 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/data/ExamVO.java

@@ -1,5 +1,7 @@
 package cn.iselab.mooctest.site.web.data;
 
+import com.sun.org.apache.xpath.internal.operations.Bool;
+
 import java.util.List;
 
 /**
@@ -21,6 +23,7 @@ public class ExamVO {
     private Byte type;
     private Long paperId;
     private Integer participantCount;
+    private Boolean isThirdParty;
 
     public Long getId() {
         return id;
@@ -137,4 +140,12 @@ public class ExamVO {
     public void setParticipantCount(Integer participantCount) {
         this.participantCount = participantCount;
     }
+
+    public Boolean getIsThirdParty() {
+        return isThirdParty;
+    }
+
+    public void setIsThirdParty(Boolean thirdParty) {
+        isThirdParty = thirdParty;
+    }
 }

+ 10 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/data/ManagerPropertyVO.java

@@ -23,6 +23,16 @@ public class ManagerPropertyVO {
 
     private Integer taskNum;
 
+    private Long expireTime;
+
+    public Long getExpireTime() {
+        return expireTime;
+    }
+
+    public void setExpireTime(Long expireTime) {
+        this.expireTime = expireTime;
+    }
+
     public Long getId() {
         return id;
     }

+ 3 - 4
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/data/ScoreVO.java

@@ -1,8 +1,9 @@
 package cn.iselab.mooctest.site.web.data;
 
+import cn.iselab.mooctest.site.data.AssignedCase;
 import lombok.Data;
 
-import java.util.Map;
+import java.util.List;
 
 /**
  * Created by major on 2017/7/18.
@@ -10,10 +11,8 @@ import java.util.Map;
 
 @Data
 public class ScoreVO {
-
     //假如要支持一个考试对应多个试卷,需要增加paperId字段,assignTask表需要增加paperId字段
     private Long examId;
     private Double totalScore;
-    private Map<Long, Double> caseScoreMap;
-
+    private List<AssignedCase> caseScoreList;
 }

+ 2 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/data/UserVO.java

@@ -36,4 +36,6 @@ public class UserVO extends BaseVO{
     private String captcha;
 
     private List<MenuVO> menuVOs;
+
+    private String openId;
 }

+ 1 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/data/fromKibug/KibugCaseVO.java

@@ -20,6 +20,7 @@ public class KibugCaseVO {
     private String requireLocation;
     private String launchData;
     private String extra;
+    private Long reportId;
 
 //    private Long taskId;
 //    private Boolean taken;

+ 12 - 3
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/data/wrapper/CaseVOWrapper.java

@@ -4,9 +4,11 @@ import cn.iselab.mooctest.site.common.enums.AppPlatform;
 import cn.iselab.mooctest.site.models.Case;
 import cn.iselab.mooctest.site.models.CaseExtends;
 import cn.iselab.mooctest.site.models.fromKibug.Application;
+import cn.iselab.mooctest.site.models.fromKibug.Report;
 import cn.iselab.mooctest.site.service.fromKibug.ApplicationService;
 import cn.iselab.mooctest.site.web.data.CaseVO;
 import cn.iselab.mooctest.site.web.data.fromKibug.KibugCaseVO;
+import cn.iselab.mooctest.site.web.exception.IllegalOperationException;
 import org.json.JSONObject;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -84,14 +86,21 @@ public class CaseVOWrapper extends BaseWrapper<CaseVO, Case> {
         vo.setId(caseExtends.getId());
         vo.setApplicationId(caseExtends.getTargetId());
         vo.setName(caseExtends.getName());
-        vo.setScriptTemplateUrl(resultObj.getString("scriptTemplate"));
         vo.setDescription(caseExtends.getDescription());
         vo.setManagerId(caseExtends.getOwnerId());
         vo.setPlatform(AppPlatform.fromShort(caseExtends.getPlatform()).getPlatform());
         vo.setCategory(app.getCategory());
-        vo.setIconLocation(resultObj.getString("icon"));
         vo.setAppLocation(app.getAppLocation());
-        vo.setRequireLocation(resultObj.getString("require"));
+
+        if(resultObj.has("scriptTemplate")){
+            vo.setScriptTemplateUrl(resultObj.getString("scriptTemplate"));
+        }
+        if(resultObj.has("icon")){
+            vo.setIconLocation(resultObj.getString("icon"));
+        }
+        if(resultObj.has("require")){
+            vo.setRequireLocation(resultObj.getString("require"));
+        }
 
         JSONObject launchData = resultObj;
         launchData.remove("require");

+ 2 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/data/wrapper/ExamVOWrapper.java

@@ -53,6 +53,7 @@ public class ExamVOWrapper extends BaseWrapper<ExamVO, Task> {
         vo.setInfo(task.getInformation());
         vo.setType(task.getType());
         vo.setStatus(task.getStatus());
+        vo.setIsThirdParty(task.getIsThirdParty());
         return vo;
     }
 
@@ -125,6 +126,7 @@ public class ExamVOWrapper extends BaseWrapper<ExamVO, Task> {
         task.setEndTime(endTime);
         task.setType(vo.getType());
         task.setStatus(vo.getStatus());
+        task.setIsThirdParty(vo.getIsThirdParty());
 
         return task;
     }

+ 5 - 1
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/data/wrapper/ManagerPropertyVOWrapper.java

@@ -4,6 +4,8 @@ import cn.iselab.mooctest.site.models.ManagerProperty;
 import cn.iselab.mooctest.site.web.data.ManagerPropertyVO;
 import org.springframework.stereotype.Service;
 
+import java.sql.Timestamp;
+
 /**
  * @author sean
  * @date 2017-07-17.
@@ -22,7 +24,8 @@ public class ManagerPropertyVOWrapper extends BaseWrapper<ManagerPropertyVO, Man
         managerPropertyVO.setGroupNum(managerProperty.getGroupNum());
         managerPropertyVO.setStatus(managerProperty.getStatus());
         managerPropertyVO.setLevel(managerProperty.getLevel());
-
+        managerPropertyVO.setExpireTime(managerProperty.getExpireTime() == null ?
+                0L : managerProperty.getExpireTime().getTime());
         return managerPropertyVO;
     }
 
@@ -37,6 +40,7 @@ public class ManagerPropertyVOWrapper extends BaseWrapper<ManagerPropertyVO, Man
         managerProperty.setGroupNum(data.getGroupNum());
         managerProperty.setGroupSize(data.getGroupSize());
         managerProperty.setTaskNum(data.getTaskNum());
+        managerProperty.setExpireTime(new Timestamp(data.getExpireTime()));
 
         return managerProperty;
     }

+ 5 - 14
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/data/wrapper/ScoreVOWrapper.java

@@ -1,8 +1,10 @@
 package cn.iselab.mooctest.site.web.data.wrapper;
 
 import cn.iselab.mooctest.site.models.AssignedTask;
+import cn.iselab.mooctest.site.service.AssignedTaskService;
 import cn.iselab.mooctest.site.web.data.ScoreVO;
 import org.json.JSONObject;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.util.HashMap;
@@ -14,26 +16,15 @@ import java.util.Set;
  */
 @Service
 public class ScoreVOWrapper extends BaseWrapper<ScoreVO, AssignedTask> {
-
+    @Autowired
+    private AssignedTaskService assignedTaskService;
 
     @Override
     public ScoreVO wrap(AssignedTask assignedTask) {
         ScoreVO vo = new ScoreVO();
         vo.setExamId(assignedTask.getTaskId());
         vo.setTotalScore(assignedTask.getScore());
-
-        JSONObject caseJson = new JSONObject(assignedTask.getResult()).getJSONObject("results");
-        Set<String> caseIdSet = caseJson.keySet();
-        Map<Long, Double> caseScoreMap = new HashMap<>();
-        for(String caseIdStr : caseIdSet) {
-            Double caseScore = caseJson.getJSONObject(caseIdStr).getDouble("maxScore");
-            if(caseScore != null) {
-                caseScoreMap.put(Long.parseLong(caseIdStr), caseScore);
-            }
-        }
-        if(caseScoreMap.size() > 0) {
-            vo.setCaseScoreMap(caseScoreMap);
-        }
+        vo.setCaseScoreList(assignedTaskService.wrapAssignedCases(assignedTask));
         return vo;
     }
 

+ 2 - 2
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/data/wrapper/TargetKibugVOWrapper.java

@@ -35,7 +35,7 @@ public class TargetKibugVOWrapper extends BaseWrapper<TargetKibugVO,Application>
         application.setLaunchData(targetKibugVO.getLaunchData());
         application.setCreateTimeMillis(targetKibugVO.getCreateTimeMillis());
         application.setRequireLocation(targetKibugVO.getRequireLocation());
-        application.setId(targetKibugVO.getKibugId());
+        //application.setId(targetKibugVO.getKibugId());
         application.setName(targetKibugVO.getName());
         application.setPlatform(AppPlatform.parse(targetKibugVO.getPlatform()).getPlatformId());
         return application;
@@ -46,7 +46,7 @@ public class TargetKibugVOWrapper extends BaseWrapper<TargetKibugVO,Application>
         app.setName(targetKibugVO.getName());
         app.setUrl(targetKibugVO.getUrl());
         app.setVisible(targetKibugVO.isVisible());
-        app.setManagerId(targetKibugVO.getManagerId());
+        app.setManagerId(0L);
         app.setSubsiteId(targetKibugVO.getSubsiteId());
         app.setStatus(targetKibugVO.getStatus());
         app.setOwnerId(targetKibugVO.getOwnerId());

+ 3 - 1
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/logic/CalculateSocreLogic.java

@@ -11,5 +11,7 @@ public interface CalculateSocreLogic {
     public void calculateScore(long taskId, long caseId) throws Exception;
     public void calculateScore(long taskId, long caseId, long userId) throws Exception;
 
-    public List<Double> calculateExamScore(long examId, Long participantId, WeightDirtyVO weightDirtyVO,boolean calculateAll) throws Exception;
+    public List<Double> calculateExamScore(long examId, Long participantId, WeightDirtyVO weightDirtyVO,boolean calculateAll);
+
+    
 }

+ 12 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/logic/ManagerPropertyLogic.java

@@ -0,0 +1,12 @@
+package cn.iselab.mooctest.site.web.logic;
+
+import cn.iselab.mooctest.site.web.data.ManagerPropertyVO;
+
+/**
+ * @author sean
+ * @date 2017-08-18.
+ */
+public interface ManagerPropertyLogic {
+
+    ManagerPropertyVO getManagerPropertyByUserId(Long userId);
+}

+ 8 - 2
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/logic/TargetLogic.java

@@ -15,7 +15,7 @@ public interface TargetLogic {
 
     List<TargetVO> getManagerTargets(long managerId) throws Exception;
 
-    Page<TargetVO> getTargets(long ownerId,String keyword, Pageable pageable);
+    Page<TargetVO> getTargets(long ownerId, String keyword, Pageable pageable);
 
     Page<TargetVO> getMyTargets(long ownerId, String keyword, Pageable pageable);
 
@@ -23,5 +23,11 @@ public interface TargetLogic {
 
     TargetKibugVO getTargetKibug(long targetId) throws Exception;
 
-    long createTargetDev(TargetDevVO vo)throws Exception;
+    long createTargetDev(TargetDevVO vo) throws Exception;
+
+    void verifyTarget(long id, TargetVO targetVO);
+
+    Page<TargetVO> getAllApps(Pageable pageable);
+
+    TargetVO viewTarget(long id);
 }

+ 8 - 2
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/logic/UserLogic.java

@@ -29,11 +29,17 @@ public interface UserLogic {
 
     Boolean applyForManager(Long userId);
 
-    ManagerPropertyVO updateUserProperty(Long managerId);
-
     void approveofManager(Long userId);
 
     UserVO registerForOauth2(UserVO userVO);
 
+    UserVO findUserById(long userId);
+
+    ManagerPropertyVO updateUserProperty(Long userId, ManagerPropertyVO managerPropertyVO);
+
+    void authorizeManagerRole(UserVO userVO);
+
+    UserVO getUserBasicInfo(UserVO userVO);
+
     UserVO findUserByMobile(String mobile);
 }

+ 12 - 2
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/logic/fromDev/impl/PluginLogicImpl.java

@@ -4,10 +4,12 @@ import cn.iselab.mooctest.site.common.constant.SubsiteConstants;
 import cn.iselab.mooctest.site.data.CaseBlock;
 import cn.iselab.mooctest.site.models.Task;
 import cn.iselab.mooctest.site.models.User;
+import cn.iselab.mooctest.site.models.fromKibug.Report;
 import cn.iselab.mooctest.site.models.instancePermission.TaskPermission;
 import cn.iselab.mooctest.site.service.*;
 import cn.iselab.mooctest.site.service.fromDev.PluginService;
 import cn.iselab.mooctest.site.service.fromKibug.ApplicationService;
+import cn.iselab.mooctest.site.service.fromKibug.ReportService;
 import cn.iselab.mooctest.site.service.instancePermission.TaskPermissionService;
 import cn.iselab.mooctest.site.util.data.EncryptionUtil;
 import cn.iselab.mooctest.site.web.data.*;
@@ -16,6 +18,7 @@ import cn.iselab.mooctest.site.web.data.fromDev.PluginResultVO;
 import cn.iselab.mooctest.site.web.data.fromKibug.KibugCaseVO;
 import cn.iselab.mooctest.site.web.data.wrapper.CaseVOWrapper;
 import cn.iselab.mooctest.site.web.exception.HttpUnauthorizedException;
+import cn.iselab.mooctest.site.web.exception.IllegalOperationException;
 import cn.iselab.mooctest.site.web.logic.BaseLogic;
 import cn.iselab.mooctest.site.web.logic.CaseLogic;
 import cn.iselab.mooctest.site.web.logic.fromDev.PluginLogic;
@@ -72,6 +75,8 @@ public class PluginLogicImpl extends BaseLogic implements PluginLogic{
     private TaskService taskService;
     @Autowired
     private TaskPermissionService taskPermissionService;
+    @Autowired
+    private ReportService reportService;
 
     @Override
     public String getDownloadSignature(String taskID, String workerID, String taskType, String caseName) {
@@ -275,7 +280,12 @@ public class PluginLogicImpl extends BaseLogic implements PluginLogic{
         if(user == null){
             throw new HttpUnauthorizedException("用户不存在");
         }
-        return caseVOWrapper.wrapKibugCase(caseService.getCaseExtendsById(caseId));
+        KibugCaseVO result = caseVOWrapper.wrapKibugCase(caseService.getCaseExtendsById(caseId));
+        Report report = reportService.getReport(taskId, caseId, userId);
+        if(report!=null){
+            result.setReportId(report.getId());
+        }
+        return result;
     }
 
     private PluginResultVO wrapLoginResultVO(Task task, User user){
@@ -293,7 +303,7 @@ public class PluginLogicImpl extends BaseLogic implements PluginLogic{
     private PluginCaseVO wrapPluginCaseVO(CaseExtendsVO caseExtends){
         if(caseExtends.getSubsiteId()== SubsiteConstants.DEV_SUBSITE_ID){
             return new EclipseCaseVO(caseExtends);
-        }else if(caseExtends.getSubsiteId()== SubsiteConstants.KIKBUG_SUBSITE_ID){
+        }else if(caseExtends.getSubsiteId()== SubsiteConstants.KIKBUG_SUBSITE_ID || caseExtends.getSubsiteId()==SubsiteConstants.KIJAM_SUBSITE_ID){
             KibugPluginCaseVO vo = new KibugPluginCaseVO();
             vo.setId(caseExtends.getId());
             vo.setName(caseExtends.getName());

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

@@ -39,7 +39,7 @@ public class CalculateScoreLogicImpl implements CalculateSocreLogic {
     private TaskService taskService;
 
     @Override
-    public void calculateScore(long taskId, long caseId) throws Exception{
+    public void calculateScore(long taskId, long caseId) {
         CaseExtends caseExtends=caseService.getCaseExtendsById(caseId);
         Long subsiteId=caseExtends.getSubsiteId();
         if(subsiteId== SubsiteConstants.KIKBUG_SUBSITE_ID || subsiteId==SubsiteConstants.KIJAM_SUBSITE_ID){
@@ -67,7 +67,7 @@ public class CalculateScoreLogicImpl implements CalculateSocreLogic {
     }
 
     @Override
-    public List<Double> calculateExamScore(long examId, Long participantId,WeightDirtyVO weightDirtyVO, boolean calculateAll) throws Exception{
+    public List<Double> calculateExamScore(long examId, Long participantId,WeightDirtyVO weightDirtyVO, boolean calculateAll){
         if(calculateAll==false
                 && (weightDirtyVO.getCaseDirty()==null || weightDirtyVO.getCaseDirty().size()==0)
                 && weightDirtyVO.isWeightDirty()==false){

+ 18 - 6
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/logic/impl/CaseLogicImpl.java

@@ -1,6 +1,7 @@
 package cn.iselab.mooctest.site.web.logic.impl;
 
 import cn.iselab.mooctest.site.common.constant.SubsiteConstants;
+import cn.iselab.mooctest.site.common.constant.ThirdPartConstants;
 import cn.iselab.mooctest.site.data.CaseBlock;
 import cn.iselab.mooctest.site.models.*;
 import cn.iselab.mooctest.site.models.fromKibug.Application;
@@ -88,6 +89,9 @@ public class CaseLogicImpl implements CaseLogic {
     @Autowired
     private Exam2CaseService exam2CaseService;
 
+    @Autowired
+    private OpenId2UserIdService openId2UserIdService;
+
     @Override
     public List<CaseVO> getManagerPublicCases() {
 
@@ -235,14 +239,22 @@ public class CaseLogicImpl implements CaseLogic {
             CaseExtendsVO caseExtendsVO = Converter.convert(CaseExtendsVO.class, caseService.getCaseExtendsById(caseid));
             caseExtendsVO.setTaskId(examId);
             if (isWorker == true && caseExtendsVO.getSubsiteId() == SubsiteConstants.DEV_SUBSITE_ID)
-                caseExtendsVO.setSecret(indexService.getSecret(userId, caseid));
+                caseExtendsVO.setSecret(indexService.getSecret(userId, examId));
             if (caseExtendsVO.getSubsiteId() == SubsiteConstants.KIKBUG_SUBSITE_ID) {
                 caseExtendsVO.setAppLocation(applicationService.getAppById(caseExtendsVO.getTargetId()).getAppLocation());
-                Report report = reportService.getReport(examId, caseid, userId);
-                if (report != null)
-                    caseExtendsVO.setReportId(report.getId());
-                if (isManager)
-                    caseExtendsVO.setCaseReportUrl("/report/list/" + examId + "/" + caseid);
+                if(caseExtendsVO.getId()==297)
+                    caseExtendsVO.setSecret(indexService.getSecret(userId,examId));
+                else {
+                    Report report = reportService.getReport(examId, caseid, userId);
+                    if (report != null)
+                        caseExtendsVO.setReportId(report.getId());
+                    if (isManager)
+                        caseExtendsVO.setCaseReportUrl("/report/list/" + examId + "/" + caseid);
+                }
+            }
+            if (caseExtendsVO.getSubsiteId() == SubsiteConstants.KIJAM_SUBSITE_ID) {
+                String openId=openId2UserIdService.findOpenIdByUserId(userId);
+                caseExtendsVO.setEntrance("http://api.mooctest.net/oauth/thirdPart?openId="+openId+"&taskId="+examId+"&thirdPartId="+ ThirdPartConstants.ZEZHONG+"&caseId="+caseid);
             }
             caseVoList.add(caseExtendsVO);
         }

+ 27 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/logic/impl/ManagerPropertyLogicImpl.java

@@ -0,0 +1,27 @@
+package cn.iselab.mooctest.site.web.logic.impl;
+
+import cn.iselab.mooctest.site.service.ManagerPropertyService;
+import cn.iselab.mooctest.site.web.data.ManagerPropertyVO;
+import cn.iselab.mooctest.site.web.data.wrapper.ManagerPropertyVOWrapper;
+import cn.iselab.mooctest.site.web.logic.ManagerPropertyLogic;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author sean
+ * @date 2017-08-18.
+ */
+@Service
+public class ManagerPropertyLogicImpl implements ManagerPropertyLogic {
+
+    @Autowired
+    private ManagerPropertyService managerPropertyService;
+
+    @Autowired
+    private ManagerPropertyVOWrapper managerPropertyVOWrapper;
+
+    @Override
+    public ManagerPropertyVO getManagerPropertyByUserId(Long userId) {
+        return managerPropertyVOWrapper.wrap(managerPropertyService.getManagerPropertyByUserId(userId));
+    }
+}

+ 48 - 25
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/logic/impl/TargetLogicImpl.java

@@ -1,8 +1,8 @@
 package cn.iselab.mooctest.site.web.logic.impl;
 
+import cn.iselab.mooctest.site.models.App;
 import cn.iselab.mooctest.site.models.DevTarget;
 import cn.iselab.mooctest.site.models.fromKibug.Application;
-import cn.iselab.mooctest.site.models.App;
 import cn.iselab.mooctest.site.service.AppService;
 import cn.iselab.mooctest.site.service.TargetService;
 import cn.iselab.mooctest.site.service.fromKibug.ApplicationService;
@@ -12,7 +12,7 @@ import cn.iselab.mooctest.site.web.data.TargetVO;
 import cn.iselab.mooctest.site.web.data.wrapper.TargetDevVOWrapper;
 import cn.iselab.mooctest.site.web.data.wrapper.TargetKibugVOWrapper;
 import cn.iselab.mooctest.site.web.data.wrapper.TargetVOWrapper;
-import cn.iselab.mooctest.site.web.exception.IllegalOperationException;
+import cn.iselab.mooctest.site.web.exception.HttpNotFoundException;
 import cn.iselab.mooctest.site.web.logic.TargetLogic;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.core.convert.converter.Converter;
@@ -20,14 +20,13 @@ import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
 import org.springframework.stereotype.Service;
 
-import java.sql.Timestamp;
 import java.util.List;
 
 /**
  * Created by ROGK on 2017/6/18.
  */
 @Service
-public class TargetLogicImpl implements TargetLogic{
+public class TargetLogicImpl implements TargetLogic {
 
     @Autowired
     private AppService appService;
@@ -47,12 +46,12 @@ public class TargetLogicImpl implements TargetLogic{
     @Autowired
     private TargetDevVOWrapper targetDevVOWrapper;
 
-    public List<TargetVO> getManagerTargets(long managerId) throws Exception{
+    public List<TargetVO> getManagerTargets(long managerId) throws Exception {
 
         List<App> apps = appService.getManagerApps(managerId);
-        List<TargetVO> targets= targetVOWrapper.wrap(apps);
+        List<TargetVO> targets = targetVOWrapper.wrap(apps);
         Application application;
-        for(TargetVO targetVO:targets){
+        for (TargetVO targetVO : targets) {
             application = applicationService.getAppByUploaderCaseId(targetVO.getId());
 
             targetVO.setEndTimeMillis(application.getEndTimeMillis());
@@ -61,9 +60,9 @@ public class TargetLogicImpl implements TargetLogic{
         return targets;
     }
 
-    public Page<TargetVO> getTargets(long ownerId, String keyword, Pageable pageable){
-        Page<App> apps=targetService.getTargets(ownerId,keyword,pageable);
-        Page<TargetVO> targetVOS=apps.map(new Converter<App, TargetVO>() {
+    public Page<TargetVO> getTargets(long ownerId, String keyword, Pageable pageable) {
+        Page<App> apps = targetService.getTargets(ownerId, keyword, pageable);
+        Page<TargetVO> targetVOS = apps.map(new Converter<App, TargetVO>() {
             @Override
             public TargetVO convert(App app) {
                 return targetVOWrapper.wrap(app);
@@ -72,9 +71,9 @@ public class TargetLogicImpl implements TargetLogic{
         return targetVOS;
     }
 
-    public Page<TargetVO> getMyTargets(long ownerId,String keyword,Pageable pageable){
-        Page<App> apps=targetService.getMyTargets(ownerId,keyword,pageable);
-        Page<TargetVO> targetVOS=apps.map(new Converter<App, TargetVO>() {
+    public Page<TargetVO> getMyTargets(long ownerId, String keyword, Pageable pageable) {
+        Page<App> apps = targetService.getMyTargets(ownerId, keyword, pageable);
+        Page<TargetVO> targetVOS = apps.map(new Converter<App, TargetVO>() {
             @Override
             public TargetVO convert(App app) {
                 return targetVOWrapper.wrap(app);
@@ -83,28 +82,52 @@ public class TargetLogicImpl implements TargetLogic{
         return targetVOS;
     }
 
-    public long createTargetKibug(TargetKibugVO vo) throws Exception{
-        App app=targetKibugVOWrapper.wrapApp(vo);
-        Application application=targetKibugVOWrapper.unwrap(vo);
-        app=appService.uploadCase(app);
+    public long createTargetKibug(TargetKibugVO vo) throws Exception {
+        App app = targetKibugVOWrapper.wrapApp(vo);
+        Application application = targetKibugVOWrapper.unwrap(vo);
+        app = appService.uploadCase(app);
         application.setUploadedCaseId(app.getId());
         applicationService.createApp(application);
         return app.getId();
     }
 
-    public TargetKibugVO getTargetKibug(long targetId) throws Exception{
-        App app=appService.getAppById(targetId);
-        Application application=applicationService.getApplicaitonByUploaderCaseId(targetId);
+    public TargetKibugVO getTargetKibug(long targetId) throws Exception {
+        App app = appService.getAppById(targetId);
+        Application application = applicationService.getApplicaitonByUploaderCaseId(targetId);
 
-        return targetKibugVOWrapper.wrap(app,application);
+        return targetKibugVOWrapper.wrap(app, application);
     }
 
-    public long createTargetDev(TargetDevVO vo)throws Exception{
-        App app=targetDevVOWrapper.wrap(vo);
-        DevTarget devTarget=targetDevVOWrapper.wrapDev(vo);
-        app=appService.uploadCase(app);
+    public long createTargetDev(TargetDevVO vo) throws Exception {
+        App app = targetDevVOWrapper.wrap(vo);
+        DevTarget devTarget = targetDevVOWrapper.wrapDev(vo);
+        app = appService.uploadCase(app);
         devTarget.setUploadedCaseId(app.getId());
         targetService.createTargetDev(devTarget);
         return app.getId();
     }
+
+    @Override
+    public void verifyTarget(long id, TargetVO targetVO) {
+        App app = targetService.findById(id);
+        if (app == null) {
+            throw new HttpNotFoundException("app not exist");
+        }
+        app.setStatus(targetVO.getStatus());
+        targetService.verifyApp(app);
+    }
+
+
+    @Override
+    public Page<TargetVO> getAllApps(Pageable pageable) {
+        Page<App> appPage = targetService.getAllTargets(pageable);
+        Page<TargetVO> targetVOS = appPage.map(app -> targetVOWrapper.wrap(app));
+
+        return targetVOS;
+    }
+
+    @Override
+    public TargetVO viewTarget(long id) {
+        return targetVOWrapper.wrap(appService.getAppById(id));
+    }
 }

+ 70 - 10
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/logic/impl/UserLogicImpl.java

@@ -1,5 +1,6 @@
 package cn.iselab.mooctest.site.web.logic.impl;
 
+import cn.iselab.mooctest.site.models.ManagerProperty;
 import cn.iselab.mooctest.site.models.Role;
 import cn.iselab.mooctest.site.models.User;
 import cn.iselab.mooctest.site.service.*;
@@ -7,6 +8,7 @@ import cn.iselab.mooctest.site.service.instancePermission.GroupPermissionService
 import cn.iselab.mooctest.site.util.data.EncryptionUtil;
 import cn.iselab.mooctest.site.web.data.ManagerPropertyVO;
 import cn.iselab.mooctest.site.web.data.UserVO;
+import cn.iselab.mooctest.site.web.data.wrapper.ManagerPropertyVOWrapper;
 import cn.iselab.mooctest.site.web.data.wrapper.MenuVOWrapper;
 import cn.iselab.mooctest.site.web.data.wrapper.UserVOWrapper;
 import cn.iselab.mooctest.site.web.exception.HttpBadRequestException;
@@ -64,6 +66,9 @@ public class UserLogicImpl extends BaseLogic implements UserLogic {
     @Autowired
     private MobileVerificationService mobileVerificationService;
 
+    @Autowired
+    private ManagerPropertyVOWrapper managerPropertyVOWrapper;
+
     @Override
     public UserVO register(UserVO userVO) {
         if (userService.getUserByEmail(userVO.getEmail()) != null) {
@@ -203,16 +208,6 @@ public class UserLogicImpl extends BaseLogic implements UserLogic {
     }
 
     @Override
-    public ManagerPropertyVO updateUserProperty(Long managerId) {
-        List<Role> roles = roleService.getRolesOfUser(managerId);
-        if (!roles.contains(roleService.getRoleByRoleName("manager"))) {
-            throw new HttpBadRequestException("has no role of manager");
-        }
-
-        return null;
-    }
-
-    @Override
     public void approveofManager(Long userId) {
         if (roleService.getRolesOfUser(userId).contains(roleService.getRoleByRoleName("manager"))) {
             throw new HttpBadRequestException("already get the manager role");
@@ -244,6 +239,71 @@ public class UserLogicImpl extends BaseLogic implements UserLogic {
     }
 
     @Override
+    public UserVO findUserById(long userId) {
+        return userVOWrapper.wrap(userService.findByUserId(userId));
+    }
+
+    @Override
+    public ManagerPropertyVO updateUserProperty(Long userId, ManagerPropertyVO managerPropertyVO) {
+        List<Role> roles = roleService.getRolesOfUser(userId);
+        if (!roles.contains(roleService.getRoleByRoleName("manager"))) {
+            throw new HttpBadRequestException("has no role of manager");
+        }
+        ManagerProperty managerProperty = managerPropertyService.getManagerPropertyByUserId(userId);
+
+        if (managerPropertyVO.getGroupNum() != null) {
+            managerProperty.setGroupNum(managerPropertyVO.getGroupNum());
+        }
+        if (managerPropertyVO.getGroupSize() != null) {
+            managerProperty.setGroupSize(managerPropertyVO.getGroupSize());
+        }
+        if (managerPropertyVO.getTaskNum() != null) {
+            managerProperty.setTaskNum(managerPropertyVO.getTaskNum());
+        }
+        if (managerPropertyVO.getLevel() != null) {
+            managerProperty.setLevel(managerPropertyVO.getLevel());
+        }
+        if (managerPropertyVO.getStatus() != null) {
+            managerProperty.setStatus(managerPropertyVO.getStatus());
+        }
+
+        managerPropertyService.save(managerProperty);
+        return managerPropertyVOWrapper.wrap(managerProperty);
+    }
+
+    @Override
+    public void authorizeManagerRole(UserVO userVO) {
+        String username = (userVO.getEmail() == null) ? userVO.getMobile() : userVO.getEmail();
+        if (username == null) {
+            throw new HttpBadRequestException("empty username");
+        }
+        if (userService.findByUsername(username) == null) {
+            throw new HttpBadRequestException("user not exist");
+        }
+        Long userId = userService.findByUsername(username).getId();
+        if (roleService.getRolesOfUser(userId).contains(roleService.getRoleByRoleName("manager"))) {
+            throw new HttpBadRequestException("already get the manager role");
+        }
+        //add user2role record
+        user2RoleService.addManagerRole(userId);
+
+        //set default property for new manager
+        managerPropertyService.setDefaultManagerProperty(userId);
+    }
+
+    @Override
+    public UserVO getUserBasicInfo(UserVO userVO) {
+        String username = userVO.getEmail() == null ? userVO.getMobile() : userVO.getEmail();
+        if (username == null) {
+            throw new HttpBadRequestException("empty username");
+        }
+        if (userService.findByUsername(username) == null) {
+            throw new HttpBadRequestException("user not exist");
+        }
+        return userVOWrapper.wrap(userService.findByUsername(username));
+    }
+
+    @Override
     public UserVO findUserByMobile(String mobile) {
         return userVOWrapper.wrap(userService.findByMobile(mobile));
     }

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

@@ -57,13 +57,13 @@ spring:
         username: mooctest
         password: secr3t!
     dubbo:
-        application.name: local-dubbo-main-site-provider-consumer2
+        application.name: local-dubbo-main-site-provider-consumer3
         registry.address: zookeeper://101.37.175.111:2181
         protocol.name: dubbo
-        protocol.port: 20881
-#        protocol.host: 106.14.81.62
+        protocol.port: 20882
         scan: cn.iselab.mooctest.site.rpc
         monitor.protocal: registry
+        timeout: 120000
 
 rpcServer:
     port: 9100

+ 3 - 0
mooctest-site-server/src/test/java/cn/iselab/mooctest/site/service/fromKibug/impl/ScoreRuleServiceImplTest.java

@@ -8,6 +8,7 @@ import cn.iselab.mooctest.site.models.fromKibug.Application;
 import cn.iselab.mooctest.site.models.fromKibug.IncrementId;
 import cn.iselab.mooctest.site.models.fromKibug.ScoreRule;
 import cn.iselab.mooctest.site.models.fromKibug.ScoreRulePK;
+import cn.iselab.mooctest.site.service.CalculateScoreService;
 import cn.iselab.mooctest.site.web.data.fromKibug.ScoreRuleItemVO;
 import org.junit.Assert;
 import org.junit.Before;
@@ -35,6 +36,8 @@ public class ScoreRuleServiceImplTest {
     private ScoreRuleDao scoreRuleDao;
     @Mock
     private WeightDao weightDao;
+    @Mock
+    private CalculateScoreService calculateScoreService;
 
     @Before
     public void setUp() {

+ 1 - 1
mooctest-site-server/src/test/java/cn/iselab/mooctest/site/web/ctrl/fromKibug/ReportControllerTest.java

@@ -131,7 +131,7 @@ public class ReportControllerTest extends AbstractShiroTest{
     public void should_createRoport_when_reportDoesNotExist() throws Exception {
         //arrange
         Report report = new Report();
-        report.setId(123456);
+        report.setId(123456L);
         CaseExtends caseItem = new CaseExtends();
         caseItem.setTargetId(1001L);
         Task task=new Task();

+ 3 - 0
mooctest-site-server/src/test/java/cn/iselab/mooctest/site/web/logic/impl/CaseLogicImplTest.java

@@ -59,6 +59,8 @@ public class CaseLogicImplTest {
     private ExamService examService;
     @Mock
     private Exam2CaseService exam2CaseService;
+    @Mock
+    private OpenId2UserIdService openId2UserIdService;
 
     @Before
     public void setUp() {
@@ -290,6 +292,7 @@ public class CaseLogicImplTest {
         when(caseService.getCaseExtendsById(anyLong())).thenReturn(caseExtends);
         when(applicationService.getAppById(anyLong())).thenReturn(application);
         when(reportService.getReport(anyLong(),anyLong(),anyLong())).thenReturn(report);
+        when(openId2UserIdService.findOpenIdByUserId(anyLong())).thenReturn("test");
 
         List<CaseExtendsVO> result=caseLogic.getCasesForExam(1L,1L,1L);