Browse Source

Merge branch 'feature-targetUsedCount' into 'DEV'

Feature target used count

1. 统计target和case的使用情况(被多少paper,exam,user用过
因为具体需求不清晰,所以只写好了service,之后根据不同需求组装就行

See merge request !295

huangyong 8 years ago
parent
commit
8c4cc84d17

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

@@ -6,6 +6,7 @@ import org.springframework.data.repository.CrudRepository;
 import org.springframework.data.repository.PagingAndSortingRepository;
 
 import javax.transaction.Transactional;
+import java.util.List;
 
 /**
  * Created by shanshan on 2017/6/28.
@@ -13,4 +14,5 @@ import javax.transaction.Transactional;
 @Transactional
 public interface CaseExtendsDao  extends PagingAndSortingRepository<CaseExtends, Long>,JpaSpecificationExecutor<CaseExtends> {
 
+    List<CaseExtends> findByAppId(long appId);
 }

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

@@ -17,4 +17,6 @@ public interface Exam2CaseDao extends CrudRepository<Exam2Case, Long> {
     Exam2Case findByExamIdAndPaperIdAndCaseId(long examId,long paperId,long caseId);
 
     List<Exam2Case> findByExamId(Long examId);
+
+    List<Exam2Case> findByCaseId(long caseId);
 }

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

@@ -21,4 +21,6 @@ public interface Task2CaseDao extends CrudRepository<Task2Case, Long> {
 
     @Query("SELECT MAX(t2c.caseIndex) FROM Task2Case t2c WHERE t2c.taskId = :taskId")
     Integer findMaxCaseIndexByTaskId(@Param("taskId") long taskId);
+
+    List<Task2Case> findByCaseId(long caseId);
 }

+ 1 - 1
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/models/CaseExtends.java

@@ -19,7 +19,7 @@ public class CaseExtends extends Case{
     private Long targetId;
     @Column(name = "platform")
     private Short platform;
-    @Column(name = "subsiteId")
+    @Column(name = "subsite_id")
     private Long answerWay;
     @Column(name = "properties")
     private String properties;

+ 19 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/DetailStatisticsService.java

@@ -0,0 +1,19 @@
+package cn.iselab.mooctest.site.service;
+
+import cn.iselab.mooctest.site.models.CaseExtends;
+import cn.iselab.mooctest.site.models.Paper;
+import cn.iselab.mooctest.site.models.Task;
+
+import java.util.List;
+
+/**
+ * Created by HenryLee on 2017/9/29.
+ */
+public interface DetailStatisticsService {
+
+    List<CaseExtends> findCaseByTargetId(long targetId);
+
+    List<Paper> findPaperByCaseId(long caseId);
+
+    List<Task> findTaskByCaseId(long caseId);
+}

+ 58 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/impl/DetailStatisticsServiceImpl.java

@@ -0,0 +1,58 @@
+package cn.iselab.mooctest.site.service.impl;
+
+import cn.iselab.mooctest.site.dao.*;
+import cn.iselab.mooctest.site.models.*;
+import cn.iselab.mooctest.site.service.PaperService;
+import cn.iselab.mooctest.site.service.DetailStatisticsService;
+import cn.iselab.mooctest.site.service.TaskService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Created by HenryLee on 2017/9/29.
+ */
+@Service
+public class DetailStatisticsServiceImpl implements DetailStatisticsService {
+
+    @Autowired
+    CaseExtendsDao caseExtendsDao;
+    @Autowired
+    Exam2CaseDao exam2CaseDao;
+    @Autowired
+    Task2CaseDao task2CaseDao;
+    @Autowired
+    PaperService paperService;
+    @Autowired
+    TaskService taskService;
+
+    @Override
+    public List<CaseExtends> findCaseByTargetId(long targetId) {
+        return caseExtendsDao.findByAppId(targetId);
+    }
+
+    @Override
+    public List<Paper> findPaperByCaseId(long caseId) {
+        List<Task2Case> task2Cases = task2CaseDao.findByCaseId(caseId);
+        List<Paper> papers = new ArrayList<>();
+        task2Cases.forEach(task2Case -> {
+            long paperId = task2Case.getTaskId();
+            Paper paper = paperService.getById(paperId);
+            papers.add(paper);
+        });
+        return papers;
+    }
+
+    @Override
+    public List<Task> findTaskByCaseId(long caseId) {
+        List<Exam2Case> exam2Cases = exam2CaseDao.findByCaseId(caseId);
+        List<Task> exams = new ArrayList<>();
+        exam2Cases.forEach(exam2Case -> {
+            long examId = exam2Case.getExamId();
+            exams.add(taskService.getTask(examId));
+        });
+        return exams;
+    }
+}

+ 28 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/logic/DetailStatisticsLogic.java

@@ -0,0 +1,28 @@
+package cn.iselab.mooctest.site.web.logic;
+
+import cn.iselab.mooctest.site.web.data.CaseExtendsVO;
+import cn.iselab.mooctest.site.web.data.ExamVO;
+import cn.iselab.mooctest.site.web.data.PaperVO;
+
+import java.util.HashMap;
+import java.util.List;
+
+/**
+ * Created by HenryLee on 2017/9/30.
+ */
+public interface DetailStatisticsLogic {
+
+    List<CaseExtendsVO> findCasesByTargetId(long targetId);
+
+    List<PaperVO> findPapersByCaseId(long caseId);
+
+    List<ExamVO> findExamsByCaseId(long caseId);
+
+    List<PaperVO> findPaperByTargetId(long targetId);
+
+    List<ExamVO> findExamByTargetId(long targetId);
+
+    HashMap countUserByCase(long caseId);
+
+    int countUserByTarget(long targetId);
+}

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

@@ -0,0 +1,148 @@
+package cn.iselab.mooctest.site.web.logic.impl;
+
+import cn.iselab.mooctest.site.models.*;
+import cn.iselab.mooctest.site.service.AssignedTaskService;
+import cn.iselab.mooctest.site.service.DetailStatisticsService;
+import cn.iselab.mooctest.site.service.UserService;
+import cn.iselab.mooctest.site.web.data.CaseExtendsVO;
+import cn.iselab.mooctest.site.web.data.ExamVO;
+import cn.iselab.mooctest.site.web.data.PaperVO;
+import cn.iselab.mooctest.site.web.data.wrapper.ExamVOWrapper;
+import cn.iselab.mooctest.site.web.logic.DetailStatisticsLogic;
+import cn.iselab.mooctest.site.web.util.Converter;
+import org.json.JSONObject;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+
+/**
+ * Created by HenryLee on 2017/9/30.
+ */
+@Service
+public class DetailStatisticsLogicImpl implements DetailStatisticsLogic {
+
+    @Autowired
+    DetailStatisticsService detailStatisticsService;
+    @Autowired
+    UserService userService;
+    @Autowired
+    ExamVOWrapper examVOWrapper;
+    @Autowired
+    AssignedTaskService assignedTaskService;
+
+    @Override
+    public List<CaseExtendsVO> findCasesByTargetId(long targetId) {
+        List<CaseExtends> caseExtendsList = detailStatisticsService.findCaseByTargetId(targetId);
+        List<CaseExtendsVO> caseExtendsVOS = new ArrayList<>();
+        caseExtendsList.forEach(caseExtends -> {
+            CaseExtendsVO caseExtendsVO = Converter.convert(CaseExtendsVO.class, caseExtends);
+            caseExtendsVO.setManagerId(caseExtends.getOwnerId());
+            caseExtendsVOS.add(caseExtendsVO);
+        });
+        return caseExtendsVOS;
+    }
+
+    @Override
+    public List<PaperVO> findPapersByCaseId(long caseId) {
+        List<Paper> papers = detailStatisticsService.findPaperByCaseId(caseId);
+        List<PaperVO> paperVOS = new ArrayList<>();
+        papers.forEach(paper -> {
+            PaperVO paperVO = Converter.convert(PaperVO.class,paper);
+            User user = userService.findByUserId(paper.getOwnerId());
+            paperVO.setOwnerName(user.getName());
+            paperVOS.add(paperVO);
+        });
+        return paperVOS;
+    }
+
+    @Override
+    public List<ExamVO> findExamsByCaseId(long caseId) {
+        List<Task> tasks = detailStatisticsService.findTaskByCaseId(caseId);
+
+        List<ExamVO> examVOS = new ArrayList<>();
+        tasks.forEach(task -> {
+            examVOS.add(examVOWrapper.wrap(task));
+        });
+        return examVOS;
+    }
+
+    @Override
+    public List<PaperVO> findPaperByTargetId(long targetId) {
+        List<CaseExtends> caseExtendsList = detailStatisticsService.findCaseByTargetId(targetId);
+        List<PaperVO> paperVOS = new ArrayList<>();
+        caseExtendsList.forEach(caseExtends -> {
+            paperVOS.addAll(this.findPapersByCaseId(caseExtends.getId()));
+        });
+        return paperVOS;
+    }
+
+    @Override
+    public List<ExamVO> findExamByTargetId(long targetId) {
+        List<CaseExtends> caseExtendsList = detailStatisticsService.findCaseByTargetId(targetId);
+        List<ExamVO> examVOS = new ArrayList<>();
+        caseExtendsList.forEach(caseExtends -> {
+            examVOS.addAll(this.findExamsByCaseId(caseExtends.getId()));
+        });
+        return examVOS;
+    }
+
+    @Override
+    public HashMap countUserByCase(long caseId) {
+        HashMap<Long,Double> scores = new HashMap();
+        List<Task> tasks = detailStatisticsService.findTaskByCaseId(caseId);
+        tasks.forEach(task -> {
+            List<AssignedTask> assignedTasks = assignedTaskService.getAssignedTasks(task.getId());
+            assignedTasks.forEach(assignedTask -> {
+                String result = assignedTask.getResult();
+                double caseScore = haveDoneThisCase(caseId,result);
+                if(caseScore != -1) {
+                    scores.put(assignedTask.getParticipantId(),caseScore);
+                }
+            });
+        });
+        return scores;
+    }
+
+    @Override
+    public int countUserByTarget(long targetId) {
+        List<CaseExtends> caseExtendsList = detailStatisticsService.findCaseByTargetId(targetId);
+        int targetUsedNum = 0;
+        for (CaseExtends caseExtends : caseExtendsList) {
+            targetUsedNum += this.countUserByCase(caseExtends.getId()).size();
+        }
+        return targetUsedNum;
+    }
+
+    private double haveDoneThisCase(long caseId,String result){
+        double cannotFindCase = -1;
+        JSONObject resultObj = new JSONObject(result).getJSONObject("results");
+        Iterator it = resultObj.keys();
+        while(it.hasNext()){
+            String key = it.next().toString();
+            JSONObject caseDetail = resultObj.getJSONObject(key);
+            if(caseDetail.getDouble("id") == caseId) {
+                if(caseDetail.has("maxScore"))
+                    return caseDetail.getDouble("maxScore");
+                return 0;
+            }
+        }
+        return cannotFindCase;
+    }
+
+}
+
+
+
+
+
+
+
+
+
+
+
+