Browse Source

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

zhangxin 8 years ago
parent
commit
7e08158ff0

+ 10 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/fromKibug/CaseTakeDao.java

@@ -1,9 +1,13 @@
 package cn.iselab.mooctest.site.dao.fromKibug;
 package cn.iselab.mooctest.site.dao.fromKibug;
 
 
 import cn.iselab.mooctest.site.models.fromKibug.CaseTake;
 import cn.iselab.mooctest.site.models.fromKibug.CaseTake;
+import cn.iselab.mooctest.site.models.fromKibug.ManagerScore;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
 import org.springframework.data.domain.Pageable;
+import org.springframework.data.jpa.repository.Modifying;
+import org.springframework.data.jpa.repository.Query;
 import org.springframework.data.repository.PagingAndSortingRepository;
 import org.springframework.data.repository.PagingAndSortingRepository;
+import org.springframework.data.repository.query.Param;
 
 
 import javax.transaction.Transactional;
 import javax.transaction.Transactional;
 import java.util.List;
 import java.util.List;
@@ -16,5 +20,11 @@ public interface CaseTakeDao  extends PagingAndSortingRepository<CaseTake, Long>
 
 
     Page<CaseTake> findByTaskIdAndCaseId(long taskId, long caseId, Pageable page);
     Page<CaseTake> findByTaskIdAndCaseId(long taskId, long caseId, Pageable page);
 
 
+    List<CaseTake> findByTaskIdAndCaseId(long taskId, long caseId);
+
     List<CaseTake> findByTaskIdAndCaseIdAndWorkerId(long taskId, long caseId, long workerId);
     List<CaseTake> findByTaskIdAndCaseIdAndWorkerId(long taskId, long caseId, long workerId);
+
+    @Modifying
+    @Query("UPDATE CaseTake ct set ct.manual=(select AVG(ms.score) from ManagerScore ms where ct.id=ms.caseTakeId) where ct.taskId=:taskId and ct.caseId=:caseId")
+    void updateManual(@Param("taskId") long taskId,@Param("caseId") long caseId);
 }
 }

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

@@ -4,6 +4,7 @@ import cn.iselab.mooctest.site.models.fromKibug.ScriptAutoResult;
 import org.springframework.data.repository.CrudRepository;
 import org.springframework.data.repository.CrudRepository;
 
 
 import javax.transaction.Transactional;
 import javax.transaction.Transactional;
+import java.util.List;
 
 
 /**
 /**
  * Created by shanshan on 2017/7/5.
  * Created by shanshan on 2017/7/5.
@@ -11,4 +12,5 @@ import javax.transaction.Transactional;
 @Transactional
 @Transactional
 public interface ScriptAutoResultDao extends CrudRepository<ScriptAutoResult, Long> {
 public interface ScriptAutoResultDao extends CrudRepository<ScriptAutoResult, Long> {
     ScriptAutoResult findByReportId(long reportId);
     ScriptAutoResult findByReportId(long reportId);
+    List<ScriptAutoResult> findByCaseTakeId(long caseTakeId);
 }
 }

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

@@ -0,0 +1,15 @@
+package cn.iselab.mooctest.site.service;
+
+import cn.iselab.mooctest.site.web.data.fromKibug.ScoreRuleItemVO;
+
+import java.util.List;
+
+/**
+ * Created by HenryLee on 2017/7/10.
+ */
+public interface CalculateScoreService {
+    public void calculateManual(long taskId,long caseId);
+    public void calculateScript(long taskId,long caseId);
+    public void calculateTotal(long taskId,long caseId,List<ScoreRuleItemVO> scoreRule);
+    public void calculateDevScore(long taskId,long caseId);
+}

+ 119 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/impl/CalculateScoreServiceImpl.java

@@ -0,0 +1,119 @@
+package cn.iselab.mooctest.site.service.impl;
+
+import cn.iselab.mooctest.site.common.enums.ScoreRuleKey;
+import cn.iselab.mooctest.site.dao.GradeDao;
+import cn.iselab.mooctest.site.dao.ManagerDao;
+import cn.iselab.mooctest.site.dao.WeightDao;
+import cn.iselab.mooctest.site.dao.fromKibug.CaseTakeDao;
+import cn.iselab.mooctest.site.dao.fromKibug.ManagerScoreDao;
+import cn.iselab.mooctest.site.dao.fromKibug.ScriptAutoResultDao;
+import cn.iselab.mooctest.site.models.Grade;
+import cn.iselab.mooctest.site.models.Weight;
+import cn.iselab.mooctest.site.models.fromKibug.CaseTake;
+import cn.iselab.mooctest.site.models.fromKibug.ManagerScore;
+import cn.iselab.mooctest.site.models.fromKibug.ScoreRule;
+import cn.iselab.mooctest.site.models.fromKibug.ScriptAutoResult;
+import cn.iselab.mooctest.site.service.CalculateScoreService;
+import cn.iselab.mooctest.site.web.data.fromKibug.ScoreRuleItemVO;
+import cn.iselab.mooctest.site.web.data.fromKibug.ScoreRuleVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * Created by HenryLee on 2017/7/10.
+ */
+@Service
+public class CalculateScoreServiceImpl implements CalculateScoreService {
+
+    @Autowired
+    private CaseTakeDao caseTakeDao;
+
+    @Autowired
+    private ScriptAutoResultDao scriptAutoResultDao;
+
+    @Autowired
+    private ManagerScoreDao managerScoreDao;
+
+    @Autowired
+    private WeightDao weightDao;
+
+    @Autowired
+    private GradeDao gradeDao;
+
+    @Override
+    public void calculateManual(long taskId, long caseId) {
+        List<CaseTake> caseTakeList=caseTakeDao.findByTaskIdAndCaseId(taskId, caseId);
+        for(CaseTake caseTake:caseTakeList){
+            List<ManagerScore> managerScoreList=managerScoreDao.findByCaseTakeId(caseTake.getId());
+            int sum=0;
+            int count=0;
+            for(ManagerScore managerScore:managerScoreList){
+                sum+=managerScore.getScore();
+                count+=1;
+            }
+            float avg=0.0f;
+            if(count!=0){
+                avg=sum/count;
+            }
+            caseTake.setManual(avg);
+            caseTakeDao.save(caseTake);
+        }
+    }
+
+    @Override
+    public void calculateScript(long taskId, long caseId) {
+        List<CaseTake> caseTakeList=caseTakeDao.findByTaskIdAndCaseId(taskId, caseId);
+        for(CaseTake caseTake:caseTakeList){
+            List<ScriptAutoResult> scriptAutoResults=scriptAutoResultDao.findByCaseTakeId(caseTake.getId());
+            int max=0;
+            for(ScriptAutoResult scriptAutoResult:scriptAutoResults){
+                if(scriptAutoResult.getScore()>max)
+                    max=scriptAutoResult.getScore();
+            }
+            caseTake.setScript(max);
+            System.out.println(max);
+            caseTakeDao.save(caseTake);
+        }
+    }
+
+    @Override
+    public void calculateTotal(long taskId, long caseId,List<ScoreRuleItemVO> scoreRule) {
+        List<CaseTake> caseTakeList=caseTakeDao.findByTaskIdAndCaseId(taskId, caseId);
+        for(CaseTake caseTake:caseTakeList){
+            float manual=caseTake.getManual();
+            float script=caseTake.getScript();
+            int manualPercentage=0;
+            int scriptPercentage=0;
+            for(ScoreRuleItemVO sr:scoreRule){
+                if(sr.getName().equals(ScoreRuleKey.MANUAL.toString())){
+                    manualPercentage=sr.getPercentage();
+                }else if(sr.getName().equals(ScoreRuleKey.SCRIPT.toString())){
+                    scriptPercentage=sr.getPercentage();
+                }
+            }
+            caseTake.setTotal(manual*manualPercentage + script*scriptPercentage / 100);
+            caseTakeDao.save(caseTake);
+        }
+    }
+
+    @Override
+    public void calculateDevScore(long taskId, long caseId) {
+        List<Grade> grades=gradeDao.findByTaskIdAndCaseId(taskId,caseId);
+        Weight weight=weightDao.findByTidAndCid(taskId, caseId);
+        for(Grade grade:grades){
+            double totle=0.0;
+            totle=grade.getSc()*weight.getSc()
+                    +grade.getBc()*weight.getBc()
+                    +grade.getPpc()*weight.getPpc()
+                    +grade.getMc_dc()*weight.getMc_dc()
+                    +grade.getAu()*weight.getAu()
+                    +grade.getAd()*weight.getAd()
+                    +grade.getAdu()*weight.getAdu()
+                    +grade.getApfd()*weight.getApfd()
+                    +grade.getMutation()*weight.getMutationcom();
+            grade.setScore(totle);
+        }
+    }
+}

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

@@ -0,0 +1,24 @@
+package cn.iselab.mooctest.site.web.ctrl;
+
+import cn.iselab.mooctest.site.common.constant.UrlConstants;
+import cn.iselab.mooctest.site.web.logic.CalculateSocreLogic;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * Created by HenryLee on 2017/7/10.
+ */
+@RestController
+public class ScoreController {
+
+    @Autowired
+    private CalculateSocreLogic calculateSocreLogic;
+
+    @RequestMapping(value= UrlConstants.API+"/score/{taskId}/{caseId}", method = RequestMethod.GET)
+    public void CalculateScore(@PathVariable("taskId") long taskId,@PathVariable("caseId") long caseId) throws Exception{
+        calculateSocreLogic.calculateScore(taskId,caseId);
+    }
+}

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

@@ -7,8 +7,10 @@ import cn.iselab.mooctest.site.common.web.ErrorResult;
 import cn.iselab.mooctest.site.common.web.ResponseMessage;
 import cn.iselab.mooctest.site.common.web.ResponseMessage;
 import cn.iselab.mooctest.site.common.web.StatusCode;
 import cn.iselab.mooctest.site.common.web.StatusCode;
 import cn.iselab.mooctest.site.common.web.SuccessResult;
 import cn.iselab.mooctest.site.common.web.SuccessResult;
+import cn.iselab.mooctest.site.models.Case;
 import cn.iselab.mooctest.site.models.Task;
 import cn.iselab.mooctest.site.models.Task;
 import cn.iselab.mooctest.site.models.fromKibug.*;
 import cn.iselab.mooctest.site.models.fromKibug.*;
+import cn.iselab.mooctest.site.service.CaseService;
 import cn.iselab.mooctest.site.service.TaskService;
 import cn.iselab.mooctest.site.service.TaskService;
 import cn.iselab.mooctest.site.service.fromKibug.ScoreRuleService;
 import cn.iselab.mooctest.site.service.fromKibug.ScoreRuleService;
 import cn.iselab.mooctest.site.web.data.fromKibug.CaseListItemVO;
 import cn.iselab.mooctest.site.web.data.fromKibug.CaseListItemVO;
@@ -33,6 +35,8 @@ public class ScoreRuleController {
     private ScoreRuleService scoreRuleService;
     private ScoreRuleService scoreRuleService;
     @Autowired
     @Autowired
     private TaskService taskService;
     private TaskService taskService;
+    @Autowired
+    private CaseService caseService;
 
 
     @RequestMapping(value= UrlConstants.API_KIBUG+"scoreRule", method = RequestMethod.GET)
     @RequestMapping(value= UrlConstants.API_KIBUG+"scoreRule", method = RequestMethod.GET)
     public Map<String, Object> get(@RequestParam(name = "taskId") Long taskId,
     public Map<String, Object> get(@RequestParam(name = "taskId") Long taskId,
@@ -65,13 +69,20 @@ public class ScoreRuleController {
                                                @PathVariable @NotNull Long taskId,
                                                @PathVariable @NotNull Long taskId,
                                                @RequestBody ScoreRuleVO vo) throws Exception {
                                                @RequestBody ScoreRuleVO vo) throws Exception {
         vo.validate();
         vo.validate();
-        Task task = taskService.getTask(taskId);
-        switch(task.getSubsiteId().intValue()){
+        Case ca=caseService.getCaseById(vo.getCaseId());
+        //Task task = taskService.getTask(taskId);
+        switch (ca.getSubjectId().intValue()){
             case (int) SubsiteConstants.DEV_SUBSITE_ID:scoreRuleService.updateDevScoreRule(taskId,caseId,vo.getWeights());break;
             case (int) SubsiteConstants.DEV_SUBSITE_ID:scoreRuleService.updateDevScoreRule(taskId,caseId,vo.getWeights());break;
             case (int) SubsiteConstants.KIKBUG_SUBSITE_ID:
             case (int) SubsiteConstants.KIKBUG_SUBSITE_ID:
             case (int) SubsiteConstants.KIJAM_SUBSITE_ID:scoreRuleService.updateKibugScoreRule(taskId,caseId,vo.getWeights());break;
             case (int) SubsiteConstants.KIJAM_SUBSITE_ID:scoreRuleService.updateKibugScoreRule(taskId,caseId,vo.getWeights());break;
             default :return new ErrorResult(StatusCode.PARAMETER_ERROR);
             default :return new ErrorResult(StatusCode.PARAMETER_ERROR);
         }
         }
+//        switch(task.getSubsiteId().intValue()){
+//            case (int) SubsiteConstants.DEV_SUBSITE_ID:scoreRuleService.updateDevScoreRule(taskId,caseId,vo.getWeights());break;
+//            case (int) SubsiteConstants.KIKBUG_SUBSITE_ID:
+//            case (int) SubsiteConstants.KIJAM_SUBSITE_ID:scoreRuleService.updateKibugScoreRule(taskId,caseId,vo.getWeights());break;
+//            default :return new ErrorResult(StatusCode.PARAMETER_ERROR);
+//        }
         return SuccessResult.ok();
         return SuccessResult.ok();
     }
     }
 }
 }

+ 8 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/logic/CalculateSocreLogic.java

@@ -0,0 +1,8 @@
+package cn.iselab.mooctest.site.web.logic;
+
+/**
+ * Created by HenryLee on 2017/7/10.
+ */
+public interface CalculateSocreLogic {
+    public void calculateScore(long taskId, long caseId) throws Exception;
+}

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

@@ -0,0 +1,44 @@
+package cn.iselab.mooctest.site.web.logic.impl;
+
+import cn.iselab.mooctest.site.common.constant.SubsiteConstants;
+import cn.iselab.mooctest.site.models.CaseExtends;
+import cn.iselab.mooctest.site.service.CalculateScoreService;
+import cn.iselab.mooctest.site.service.CaseService;
+import cn.iselab.mooctest.site.service.fromKibug.ScoreRuleService;
+import cn.iselab.mooctest.site.web.data.fromKibug.ScoreRuleItemVO;
+import cn.iselab.mooctest.site.web.logic.CalculateSocreLogic;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * Created by HenryLee on 2017/7/10.
+ */
+@Service
+public class CalculateScoreLogicImpl implements CalculateSocreLogic {
+
+
+    @Autowired
+    private CalculateScoreService calculateScoreService;
+
+    @Autowired
+    private ScoreRuleService scoreRuleService;
+
+    @Autowired
+    private CaseService caseService;
+
+    @Override
+    public void calculateScore(long taskId, long caseId) throws Exception{
+        CaseExtends caseExtends=caseService.getCaseExtendsById(caseId);
+        Long subsiteId=caseExtends.getSubsiteId();
+        if(subsiteId== SubsiteConstants.KIKBUG_SUBSITE_ID || subsiteId==SubsiteConstants.KIJAM_SUBSITE_ID){
+            calculateScoreService.calculateManual(taskId, caseId);
+            calculateScoreService.calculateScript(taskId,caseId);
+            List<ScoreRuleItemVO> scoreRule = scoreRuleService.getKibugScoreRule(taskId,caseId);
+            calculateScoreService.calculateTotal(taskId,caseId,scoreRule);
+        }else if(subsiteId == SubsiteConstants.DEV_SUBSITE_ID){
+            calculateScoreService.calculateDevScore(taskId, caseId);
+        }
+    }
+}