Prechádzať zdrojové kódy

Merge branches 'DEV' and 'feature-paperList' of http://git.mooctest.net/summer/main-site into feature-paperList

HenryLee 8 rokov pred
rodič
commit
d6f03c5704
14 zmenil súbory, kde vykonal 345 pridanie a 238 odobranie
  1. 2 1
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/fromKibug/CaseTakeDao.java
  2. 17 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/fromKibug/ManagerScoreDao.java
  3. 7 2
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/fromKibug/ReportDao.java
  4. 14 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/fromKibug/ScriptAutoResultDao.java
  5. 27 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/models/fromKibug/ManagerScore.java
  6. 30 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/models/fromKibug/ScriptAutoResult.java
  7. 12 21
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/fromKibug/ReportService.java
  8. 12 2
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/fromKibug/impl/KibugCaseServiceImpl.java
  9. 47 36
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/fromKibug/impl/ReportServiceImpl.java
  10. 116 55
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/ctrl/fromKibug/ReportController.java
  11. 22 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/data/fromKibug/ReportScoreVO.java
  12. 8 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/data/fromKibug/ReportVO.java
  13. 0 64
      mooctest-site-server/src/test/java/cn/iselab/mooctest/site/service/fromKibug/impl/ReportServiceImplTest.java
  14. 31 57
      mooctest-site-server/src/test/java/cn/iselab/mooctest/site/web/ctrl/fromKibug/ReportControllerTest.java

+ 2 - 1
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/fromKibug/CaseTakeDao.java

@@ -1,6 +1,7 @@
 package cn.iselab.mooctest.site.dao.fromKibug;
 
 import cn.iselab.mooctest.site.models.fromKibug.CaseTake;
+import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
 import org.springframework.data.repository.PagingAndSortingRepository;
 
@@ -13,7 +14,7 @@ import java.util.List;
 @Transactional
 public interface CaseTakeDao  extends PagingAndSortingRepository<CaseTake, Long>{
 
-    List<CaseTake> findByTaskIdAndCaseId(long taskId, long caseId, Pageable page);
+    Page<CaseTake> findByTaskIdAndCaseId(long taskId, long caseId, Pageable page);
 
     List<CaseTake> findByTaskIdAndCaseIdAndWorkerId(long taskId, long caseId, long workerId);
 }

+ 17 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/fromKibug/ManagerScoreDao.java

@@ -0,0 +1,17 @@
+package cn.iselab.mooctest.site.dao.fromKibug;
+
+import cn.iselab.mooctest.site.models.fromKibug.ManagerScore;
+import org.springframework.data.repository.CrudRepository;
+
+import javax.transaction.Transactional;
+import java.util.List;
+
+/**
+ * Created by shanshan on 2017/7/7.
+ */
+@Transactional
+public interface ManagerScoreDao  extends CrudRepository<ManagerScore, Long> {
+    List<ManagerScore> findByCaseTakeId(Long caseTakeId);
+
+    ManagerScore findByCaseTakeIdAndManagerId(Long caseTakeId, Long userId);
+}

+ 7 - 2
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/fromKibug/ReportDao.java

@@ -1,6 +1,8 @@
 package cn.iselab.mooctest.site.dao.fromKibug;
 
 import cn.iselab.mooctest.site.models.fromKibug.Report;
+import org.springframework.data.domain.Page;
+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;
@@ -16,8 +18,11 @@ import java.util.List;
 public interface ReportDao extends PagingAndSortingRepository<Report, Long> {
     @Query("select new Report(caseTakeId,min(createTimeMillis),max(name),sum(bugAmount)) from Report where caseTakeId in ?1 and status>0 group by caseTakeId")
     List<Report> mergeReportByCaseTakeIds(Long[] caseTakeIds);
-    @Query("select r from Report r where caseTakeId= :caseTakeId and status>0 order by createTimeMillis desc")
-    List<Report> findByCaseTakeId(@Param("caseTakeId") long caseTakeId);
+    @Query(value = "select * from report where case_take_id= :caseTakeId and status>0 order by create_time_millis desc limit 0,1",nativeQuery = true)
+    Report findByCaseTakeId(@Param("caseTakeId") long caseTakeId);
+
+    @Query("select r from Report r, CaseTake c where r.caseTakeId=c.id and c.taskId=:taskId and c.caseId=:caseId and status>0")
+    Page<Report> findByTaskIdAndCaseId(@Param("taskId") long taskId, @Param("caseId") long caseId, Pageable page);
 
     @Modifying
     @Query("update Report set status=-1 where id= :id")

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

@@ -0,0 +1,14 @@
+package cn.iselab.mooctest.site.dao.fromKibug;
+
+import cn.iselab.mooctest.site.models.fromKibug.ScriptAutoResult;
+import org.springframework.data.repository.CrudRepository;
+
+import javax.transaction.Transactional;
+
+/**
+ * Created by shanshan on 2017/7/5.
+ */
+@Transactional
+public interface ScriptAutoResultDao extends CrudRepository<ScriptAutoResult, Long> {
+    ScriptAutoResult findByReportId(long reportId);
+}

+ 27 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/models/fromKibug/ManagerScore.java

@@ -0,0 +1,27 @@
+package cn.iselab.mooctest.site.models.fromKibug;
+
+import lombok.Data;
+
+import javax.persistence.*;
+
+/**
+ * Created by shanshan on 2017/7/6.
+ */
+@Data
+@Entity
+@Table(name = "manager_score")
+public class ManagerScore {
+    @Id
+    @GeneratedValue
+    private long id;
+    @Column(name = "case_take_id")
+    private long caseTakeId;
+    @Column(name = "manager_id")
+    private long managerId;
+    @Column(name = "manager_name")
+    private String managerName;
+    @Column(name = "score")
+    private int score;
+    @Column(name = "commentary")
+    private String commentary;
+}

+ 30 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/models/fromKibug/ScriptAutoResult.java

@@ -0,0 +1,30 @@
+package cn.iselab.mooctest.site.models.fromKibug;
+
+import lombok.Data;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+/**
+ * Created by shanshan on 2017/7/5.
+ */
+@Data
+@Entity
+@Table(name = "script_auto_result")
+public class ScriptAutoResult {
+    @Id
+    @Column(name = "report_id")
+    private long reportId;
+    @Column(name = "application_id")
+    private long applicationId;
+    @Column(name = "case_take_id")
+    private long caseTakeId;
+    @Column(name = "status")
+    private short status;
+    @Column(name = "score")
+    private int score;
+    @Column(name = "result")
+    private String result;
+}

+ 12 - 21
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/fromKibug/ReportService.java

@@ -1,7 +1,12 @@
 package cn.iselab.mooctest.site.service.fromKibug;
 
+import cn.iselab.mooctest.site.models.fromKibug.ManagerScore;
 import cn.iselab.mooctest.site.models.fromKibug.Report;
+import cn.iselab.mooctest.site.models.fromKibug.ScriptAutoResult;
+import cn.iselab.mooctest.site.web.data.fromKibug.ReportScoreVO;
 import cn.iselab.mooctest.site.web.data.fromKibug.ReportVO;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
 
 import java.util.List;
 
@@ -9,26 +14,7 @@ import java.util.List;
  * Created by NJUta on 2017/6/7.
  */
 public interface ReportService {
-    /**
-     * 搜索报告并汇总
-     * @param taskId
-     * @param caseId
-     * @param page
-     * @param count
-     * @return
-     * @throws Exception
-     */
-    List<Report> listReportMergeByWorker(long taskId, long caseId, int page, int count) throws Exception;
-    /**
-     * 该接口只为worker查看自己某个case的报告列表使用
-     *
-     * @param caseId
-     * @param taskId
-     * @param workerId
-     * @return
-     * @throws Exception
-     */
-    List<Report> listReport(long taskId, long caseId, long workerId) throws Exception;
+    Page<Report> listReport(Long taskId, Long caseId, Pageable pageable) throws Exception;
     /**
      * 删除报告(只是把status设置为-1)
      *
@@ -37,7 +23,7 @@ public interface ReportService {
      */
     void deleteReport(long reportId) throws Exception;
 
-    Long getFirstReportId(long taskId, long caseId, long workerId);
+    Report getReport(long taskId, long caseId, long workerId);
 
     /**
      * 创建报告
@@ -51,4 +37,9 @@ public interface ReportService {
     Report getReport(Long reportId) throws Exception;
 
     void updateBugCount(Long reportId, int addition);
+    ScriptAutoResult getScriptAutoResult(long reportId) throws Exception;
+
+    void reviewReport(Long caseTakeId, ReportScoreVO vo) throws Exception;
+
+    List<ManagerScore> getReportScores(Long caseTakeId) throws Exception;
 }

+ 12 - 2
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/fromKibug/impl/KibugCaseServiceImpl.java

@@ -34,6 +34,7 @@ import javax.persistence.criteria.CriteriaQuery;
 import javax.persistence.criteria.Predicate;
 import javax.persistence.criteria.Root;
 import java.util.ArrayList;
+import java.util.Iterator;
 import java.util.List;
 @Service
 public class KibugCaseServiceImpl implements KibugCaseService {
@@ -112,8 +113,17 @@ public class KibugCaseServiceImpl implements KibugCaseService {
         AssignedTask assignedTask = assignedTasks.get(0);
         JSONObject taskContent = new JSONObject(assignedTask.getContent());
         JSONObject casesContent = taskContent.getJSONObject("cases");
-
-        return casesContent.has(caseId+"");
+        Iterator iterator = casesContent.keys();
+        boolean result=false;
+        while(iterator.hasNext()){
+            String key = (String) iterator.next();
+            JSONObject caseContent = casesContent.getJSONObject(key);
+            if(caseContent.getLong("id")==caseId);{
+                result=true;
+                break;
+            }
+        }
+        return result;
     }
 
     @Override

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

@@ -1,21 +1,19 @@
 package cn.iselab.mooctest.site.service.fromKibug.impl;
 
-import cn.iselab.mooctest.site.dao.fromKibug.CaseTakeDao;
-import cn.iselab.mooctest.site.dao.fromKibug.IncrementIdDao;
-import cn.iselab.mooctest.site.dao.fromKibug.ReportDao;
-import cn.iselab.mooctest.site.models.fromKibug.CaseTake;
-import cn.iselab.mooctest.site.models.fromKibug.IncrementId;
-import cn.iselab.mooctest.site.models.fromKibug.Report;
+import cn.iselab.mooctest.site.dao.UserDao;
+import cn.iselab.mooctest.site.dao.fromKibug.*;
+import cn.iselab.mooctest.site.models.User;
+import cn.iselab.mooctest.site.models.fromKibug.*;
 import cn.iselab.mooctest.site.service.fromKibug.ReportService;
+import cn.iselab.mooctest.site.web.data.fromKibug.ReportScoreVO;
 import cn.iselab.mooctest.site.web.data.fromKibug.ReportVO;
 import cn.iselab.mooctest.site.web.exception.IllegalOperationException;
 import cn.iselab.mooctest.site.web.util.Converter;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.domain.PageRequest;
+import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
 import org.springframework.stereotype.Service;
 
-import java.util.Collections;
 import java.util.List;
 
 /**
@@ -29,29 +27,17 @@ public class ReportServiceImpl implements ReportService {
     private ReportDao reportDao;
     @Autowired
     private IncrementIdDao incrementIdDao;
+    @Autowired
+    private ScriptAutoResultDao scriptAutoResultDao;
+    @Autowired
+    private ManagerScoreDao managerScoreDao;
+    @Autowired
+    private UserDao userDao;
 
     @Override
-    public List<Report> listReportMergeByWorker(long taskId, long caseId, int page, int count) throws Exception {
-        Pageable pageable = new PageRequest(page*count,count);
-        List<CaseTake> caseTakeList = caseTakeDao.findByTaskIdAndCaseId(taskId,caseId,pageable);
-        if (caseTakeList.size() == 0) {
-            return Collections.emptyList();
-        }
-        Long[] idArray = new Long[caseTakeList.size()];
-        for(int i=0;i<caseTakeList.size();i++){
-            idArray[i] =  caseTakeList.get(i).getId();
-        }
-        List<Report> result = reportDao.mergeReportByCaseTakeIds(idArray);
-        return result;
-    }
-
-    @Override
-    public List<Report> listReport(long taskId, long caseId, long workerId) throws Exception {
-        List<CaseTake> caseTakes = caseTakeDao.findByTaskIdAndCaseIdAndWorkerId(taskId,caseId,workerId);
-        if (caseTakes.size() == 0) {
-            return Collections.emptyList();
-        }
-        return reportDao.findByCaseTakeId(caseTakes.get(0).getId());
+    public Page<Report> listReport(Long taskId, Long caseId, Pageable pageable) throws Exception {
+        Page<Report> reportPage = reportDao.findByTaskIdAndCaseId(taskId,caseId,pageable);
+        return reportPage;
     }
 
     @Override
@@ -60,17 +46,12 @@ public class ReportServiceImpl implements ReportService {
     }
 
     @Override
-    public Long getFirstReportId(long taskId, long caseId, long workerId) {
+    public Report getReport(long taskId, long caseId, long workerId) {
         List<CaseTake> caseTakes = caseTakeDao.findByTaskIdAndCaseIdAndWorkerId(taskId,caseId,workerId);
         if (caseTakes.size() == 0) {
             return null;
         }
-        List<Report> reportList = reportDao.findByCaseTakeId(caseTakes.get(0).getId());
-        if (reportList == null || reportList.size() == 0) {
-            return null;
-        } else {
-            return reportList.get(0).getId();
-        }
+        return reportDao.findByCaseTakeId(caseTakes.get(0).getId());
     }
 
     @Override
@@ -112,4 +93,34 @@ public class ReportServiceImpl implements ReportService {
         Report report = reportDao.findOne(reportId);
         report.setBugAmount(report.getBugAmount()+addition);
     }
+
+    @Override
+    public ScriptAutoResult getScriptAutoResult(long reportId) throws Exception {
+        return scriptAutoResultDao.findByReportId(reportId);
+    }
+
+    @Override
+    public void reviewReport(Long caseTakeId, ReportScoreVO vo) throws Exception {
+        CaseTake caseTake = caseTakeDao.findOne(caseTakeId);
+        User user = userDao.findById(vo.getManagerId());
+        ManagerScore managerScore = managerScoreDao.findByCaseTakeIdAndManagerId(caseTakeId,vo.getManagerId());
+        if (managerScore == null) {
+            managerScore = new ManagerScore();
+            managerScore.setCaseTakeId(caseTake.getId());
+            managerScore.setManagerId(vo.getManagerId());
+            managerScore.setManagerName(user.getName());
+            managerScore.setScore(vo.getScore());
+            managerScore.setCommentary(vo.getCommentary());
+            managerScoreDao.save(managerScore);
+        } else {
+            managerScore.setScore(vo.getScore());
+            managerScore.setCommentary(vo.getCommentary());
+            managerScoreDao.save(managerScore);
+        }
+    }
+
+    @Override
+    public List<ManagerScore> getReportScores(Long caseTakeId) throws Exception {
+        return managerScoreDao.findByCaseTakeId(caseTakeId);
+    }
 }

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

@@ -7,21 +7,29 @@ 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.models.fromKibug.CaseFromKibug;
+import cn.iselab.mooctest.site.models.CaseExtends;
+import cn.iselab.mooctest.site.models.fromKibug.CaseTake;
+import cn.iselab.mooctest.site.models.fromKibug.ManagerScore;
 import cn.iselab.mooctest.site.models.fromKibug.Report;
+import cn.iselab.mooctest.site.models.fromKibug.ScriptAutoResult;
+import cn.iselab.mooctest.site.service.CaseService;
 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.data.fromKibug.ReportListItemVO;
+import cn.iselab.mooctest.site.web.data.fromKibug.ReportScoreVO;
 import cn.iselab.mooctest.site.web.data.fromKibug.ReportVO;
 import cn.iselab.mooctest.site.web.exception.IllegalOperationException;
 import cn.iselab.mooctest.site.web.util.Converter;
 import com.google.common.collect.Lists;
 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.web.bind.annotation.*;
 
+import javax.servlet.http.HttpServletRequest;
 import javax.validation.constraints.NotNull;
-import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 
@@ -33,52 +41,49 @@ public class ReportController {
     @Autowired
     private ReportService reportService;
     @Autowired
-    private KibugCaseService caseService;
+    private CaseService caseService;
+    @Autowired
+    private KibugCaseService kibugCaseService;
     @Autowired
     private KibugTaskService taskService;
     @Autowired
     EventUtil eventUtil;
 
-    /**
-     * 查询报告
-     * @param caseId
-     * @param taskId
-     * @param workerId
-     * @param page
-     * @param count
-     * @return
-     * @throws Exception
-     */
-    @RequestMapping(value= UrlConstants.API_KIBUG+"report", method = RequestMethod.GET)
-    public Map<String, Object> search(@RequestParam(name = "caseId", required = false) Long caseId,
-                                      @RequestParam(name = "taskId", required = false) Long taskId,
-                                      @RequestParam(name = "workerId", required = false) Long workerId,
-                                      @RequestParam(name = "page", defaultValue = "0") Integer page,
-                                      @RequestParam(name = "count", defaultValue = "10") Integer count) throws Exception {
-        List<Report> reportList;
-        if (workerId==null) {
-            reportList = reportService.listReportMergeByWorker(taskId, caseId, page, count);
-        } else {
-            reportList = reportService.listReport(taskId, caseId, workerId);
+    @RequestMapping(value= UrlConstants.API_KIBUG+"reports", method = RequestMethod.GET)
+    public Page<ReportListItemVO> search(@RequestParam(name = "caseId", required = false) Long caseId,
+                                         @RequestParam(name = "taskId", required = false) Long taskId, HttpServletRequest request) throws Exception {
+        String activePage = request.getHeader("activePage");
+        String rowsOnPage = request.getHeader("rowsOnPage");
+        if(activePage == null || rowsOnPage == null) {
+            throw new IllegalArgumentException("缺少分页信息");
         }
-        List<ReportListItemVO> reportListItemVos = Lists.transform(reportList, item -> {
-            return Converter.convert(ReportListItemVO.class, item);
+        Pageable pageable = new PageRequest(Integer.parseInt(activePage) - 1, Integer.parseInt(rowsOnPage));
+        Page<Report> reportPage = reportService.listReport(taskId, caseId,pageable);
+        Page<ReportListItemVO> reportVOPage = reportPage.map(new org.springframework.core.convert.converter.Converter<Report, ReportListItemVO>() {
+            @Override
+            public ReportListItemVO convert(Report report) {
+                return Converter.convert(ReportListItemVO.class,report);
+            }
         });
-        return SuccessResult.ok(ResponseMessage.List_RESULT, reportListItemVos);
+        return reportVOPage;
+    }
+    @RequestMapping(value= UrlConstants.API_KIBUG+"report", method = RequestMethod.GET)
+    public ReportListItemVO getReportByJob(@RequestParam(name = "caseId", required = false) Long caseId,
+                                 @RequestParam(name = "taskId", required = false) Long taskId,
+                                 @RequestParam(name = "workerId", required = false) Long workerId, HttpServletRequest request) throws Exception {
+        Report report = reportService.getReport(taskId,caseId,workerId);
+        if(report==null){
+            return null;
+        }
+        ReportListItemVO vo = Converter.convert(ReportListItemVO.class, report);
+        return vo;
     }
 
-    /**
-     * 创建报告
-     *
-     * @param vo
-     * @return
-     * @throws Exception
-     */
     @RequestMapping(value= UrlConstants.API_KIBUG+"report", method = RequestMethod.POST)
     public Map<String, Object> create(@RequestBody @NotNull ReportVO vo) throws Exception {
         vo.validate();
-        CaseFromKibug caseItem = caseService.getCaseById(vo.getCaseId());
-        boolean isTaken = caseService.isTaken(vo.getWorkerId(),vo.getCaseId(),vo.getTaskId());
+        CaseExtends caseItem = caseService.getCaseExtendsById(vo.getCaseId());
+        boolean isTaken = kibugCaseService.isTaken(vo.getWorkerId(),vo.getCaseId(),vo.getTaskId());
         if (!isTaken) throw new IllegalOperationException("请先选择加入该任务后再上传报告");
 
         boolean isTaskTimeEnd = taskService.isTaskEnd(vo.getTaskId());
@@ -86,32 +91,88 @@ public class ReportController {
             return new ErrorResult(StatusCode.TASK_TIME_END);
         }
 
-        vo.setApplicationId(caseItem.getApplicationId());
-
-        Long reportId = reportService.getFirstReportId(vo.getTaskId(), vo.getCaseId(), vo.getWorkerId());
-        if (reportId == null) {
-            Report report = reportService.createReport(vo);
-            reportId = report.getId();
-            //应用测试人数和机型统计
-            ReportCreateEvent reportCreateEvent = ReportCreateEvent.create(vo.getApplicationId(), vo.getDeviceBrand(), vo.getDeviceOs());
-            eventUtil.post(reportCreateEvent);
-        } else {
-            vo.setId(reportId);
-            reportService.updateReport(vo);
+        vo.setApplicationId(caseItem.getTargetId());
+
+        Report report = reportService.getReport(vo.getTaskId(), vo.getCaseId(), vo.getWorkerId());
+        if(report!=null){
+            throw new IllegalOperationException("report already exist");
         }
+        Report newReport = reportService.createReport(vo);
+        long reportId = newReport.getId();
+        //应用测试人数和机型统计
+        ReportCreateEvent reportCreateEvent = ReportCreateEvent.create(caseItem.getTargetId(), vo.getDeviceBrand(), vo.getDeviceOs());
+        eventUtil.post(reportCreateEvent);
+
         return SuccessResult.ok(ResponseMessage.ID_RESULT, reportId  );
     }
 
-    /**
-     * 删除报告
-     *
-     * @param reportId
-     * @return
-     * @throws Exception
-     */
+    @RequestMapping(value= UrlConstants.API_KIBUG+"report/{reportId}", method = RequestMethod.GET)
+    public Map<String, Object> get(@PathVariable @NotNull Long reportId) throws Exception {
+        Report report = reportService.getReport(reportId);
+        if (report == null) {
+            throw new IllegalOperationException("report id 错误,查询不到数据");
+        }
+        ReportVO vo = Converter.convert(ReportVO.class, report);
+        CaseTake caseTake = kibugCaseService.getCaseTakeById(report.getCaseTakeId());
+        vo.setWorkerId(caseTake.getWorkerId());
+        vo.setCaseId(caseTake.getCaseId());
+        vo.setTaskId(caseTake.getTaskId());
+        ScriptAutoResult scriptAutoResult = reportService.getScriptAutoResult(reportId);
+        if (scriptAutoResult != null) {
+            vo.setScriptScore(scriptAutoResult.getScore());
+            vo.setScriptResult(scriptAutoResult.getResult());
+        }
+        vo.setId(reportId);
+        return SuccessResult.ok(ResponseMessage.ITEM_RESULT, vo);
+
+    }
+
+
+    @RequestMapping(value= UrlConstants.API_KIBUG+"report/{reportId}", method = RequestMethod.PUT)
+    public Map<String, Object> update(@PathVariable @NotNull Long reportId,
+                                      @RequestBody @NotNull ReportVO vo) throws Exception {
+        boolean isTaskTimeEnd = taskService.isTaskEnd(vo.getTaskId());
+        if (isTaskTimeEnd) {
+            return new ErrorResult(StatusCode.TASK_TIME_END);
+        }
+        vo.validate();
+        vo.setId(reportId);
+        reportService.updateReport(vo);
+        return new SuccessResult();
+    }
+
     @RequestMapping(value= UrlConstants.API_KIBUG+"report/{reportId}", method = RequestMethod.DELETE)
     public Map<String, Object> deleteReport(@PathVariable @NotNull Long reportId) throws Exception {
         reportService.deleteReport(reportId);
         return SuccessResult.ok();
     }
+
+    @RequestMapping(value= UrlConstants.API_KIBUG+"/review/{caseTakeId}", method = RequestMethod.POST)
+    public Map<String, Object> reviewReport(@PathVariable @NotNull Long caseTakeId,
+                                            @RequestBody @NotNull ReportScoreVO vo) throws Exception {
+        vo.validate();
+        reportService.reviewReport(caseTakeId, vo);
+        return SuccessResult.ok();
+    }
+
+    /**
+     * 获取报告的人工打分列表
+     */
+    @RequestMapping(value= UrlConstants.API_KIBUG+"/reviews", method = RequestMethod.GET)
+    public Map<String, Object> getReportScores(@RequestParam(name = "caseTakeId", required = false) Long caseTakeId) throws Exception {
+        //获取分数列表
+        List<ManagerScore> reportScoreList;
+        reportScoreList = reportService.getReportScores(caseTakeId);
+
+        //判断是否显示打分人姓名
+        List<ReportScoreVO> voList = Lists.transform(reportScoreList, item -> {
+            ReportScoreVO vo = Converter.convert(ReportScoreVO.class, item);
+            return vo;
+        });
+
+        //返回结果
+        SuccessResult successResult = new SuccessResult();
+        successResult.put(ResponseMessage.List_RESULT, voList);
+        return successResult;
+    }
 }

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

@@ -0,0 +1,22 @@
+package cn.iselab.mooctest.site.web.data.fromKibug;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class ReportScoreVO extends ValidateVO {
+
+    private Long managerId;
+    private String ManagerName;
+    private Integer score;
+    private String commentary = "Good job!";
+
+    @Override
+    public void validate() throws IllegalArgumentException {
+        notNull("userId",managerId);
+        inRange("score", score, 0, 1000);
+        inLength("commentary", commentary, 1, 255);
+    }
+
+}

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

@@ -8,6 +8,7 @@ public class ReportVO extends ValidateVO{
     private Long applicationId;
     private Long caseId;
     private Long taskId;
+    private long caseTakeId;
     private String name;
     private int bugAmount;
     private String logLocation;
@@ -17,6 +18,13 @@ public class ReportVO extends ValidateVO{
     private String deviceModel;
     private String deviceOs;
     private String description;
+    private float managerAvgScore;
+    private float autoDescriptionScore;
+    private short status;
+    private int fromCloud;
+
+    private int scriptScore;
+    private String scriptResult;
 
     @Override
     public void validate() throws IllegalArgumentException {

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

@@ -3,7 +3,6 @@ package cn.iselab.mooctest.site.service.fromKibug.impl;
 import cn.iselab.mooctest.site.dao.fromKibug.CaseTakeDao;
 import cn.iselab.mooctest.site.dao.fromKibug.IncrementIdDao;
 import cn.iselab.mooctest.site.dao.fromKibug.ReportDao;
-import cn.iselab.mooctest.site.models.Case;
 import cn.iselab.mooctest.site.models.fromKibug.CaseTake;
 import cn.iselab.mooctest.site.models.fromKibug.IncrementId;
 import cn.iselab.mooctest.site.models.fromKibug.Report;
@@ -25,7 +24,6 @@ import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 
-import static org.junit.Assert.*;
 import static org.mockito.Matchers.any;
 import static org.mockito.Mockito.when;
 
@@ -49,68 +47,6 @@ public class ReportServiceImplTest {
         MockitoAnnotations.initMocks(this);
     }
 
-    @Test
-    public void should_returnAllMergedReports_when_givenTaskIdAndCaseId() throws Exception {
-        //arrange
-        List<CaseTake> caseTakes = new ArrayList<>();
-        CaseTake caseTake = new CaseTake();
-        caseTake.setId(1);
-        caseTakes.add(caseTake);
-
-        List<Report> expect = new ArrayList<>();
-        Report report = new Report();
-        expect.add(report);
-        Pageable pageable = new PageRequest(0,10);
-
-        when(caseTakeDao.findByTaskIdAndCaseId(123, 456, pageable)).thenReturn(caseTakes);
-        when(reportDao.mergeReportByCaseTakeIds(any(Long[].class))).thenReturn(expect);
-        //action
-        List<Report> result = reportService.listReportMergeByWorker(123, 456, 0, 10);
-        //assert
-        Assert.assertEquals(expect, result);
-    }
-
-    @Test
-    public void should_returnAllMergedReports_when_hasNoReport() throws Exception {
-        //arrange
-        List<CaseTake> caseTakes = new ArrayList<>();
-        Pageable pageable = new PageRequest(0,10);
-
-        when(caseTakeDao.findByTaskIdAndCaseId(123, 456, pageable)).thenReturn(caseTakes);
-        //action
-        List<Report> result = reportService.listReportMergeByWorker(123, 456, 0, 10);
-        //assert
-        Assert.assertEquals(Collections.emptyList(), result);
-    }
-
-    @Test
-    public void should_returnReportsCreatedByWorker_when_workerHasTakenThisTask() throws Exception {
-        //arrange
-        List<CaseTake> caseTakes = new ArrayList<>();
-        CaseTake caseTake = new CaseTake();
-        caseTake.setId(1);
-        caseTakes.add(caseTake);
-
-        List<Report> expecct = new ArrayList<>();
-        Report report = new Report();
-        expecct.add(report);
-        when(caseTakeDao.findByTaskIdAndCaseIdAndWorkerId(123, 456, 789)).thenReturn(caseTakes);
-        when(reportDao.findByCaseTakeId(1)).thenReturn(expecct);
-        //action
-        List<Report> result = reportService.listReport(123, 456, 789);
-        //assert
-        Assert.assertEquals(expecct, result);
-    }
-    @Test
-    public void should_returnReportsCreatedByWorker_when_workerHasNotTakenThisTask() throws Exception {
-        //arrange
-        List<CaseTake> caseTakes = new ArrayList<>();
-        when(caseTakeDao.findByTaskIdAndCaseIdAndWorkerId(123, 456, 789)).thenReturn(caseTakes);
-        //action
-        List<Report> result = reportService.listReport(123, 456, 789);
-        //assert
-        Assert.assertEquals(Collections.emptyList(), result);
-    }
 
     @Test
     public void should_changeReportStatus_when_givenReportId() throws Exception {

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

@@ -3,8 +3,10 @@ package cn.iselab.mooctest.site.web.ctrl.fromKibug;
 import cn.iselab.mooctest.site.common.constant.UrlConstants;
 import cn.iselab.mooctest.site.common.event.EventUtil;
 import cn.iselab.mooctest.site.common.event.ReportCreateEvent;
+import cn.iselab.mooctest.site.models.CaseExtends;
 import cn.iselab.mooctest.site.models.fromKibug.CaseFromKibug;
 import cn.iselab.mooctest.site.models.fromKibug.Report;
+import cn.iselab.mooctest.site.service.CaseService;
 import cn.iselab.mooctest.site.service.fromKibug.KibugCaseService;
 import cn.iselab.mooctest.site.service.fromKibug.KibugTaskService;
 import cn.iselab.mooctest.site.service.fromKibug.ReportService;
@@ -29,7 +31,6 @@ import org.springframework.web.util.NestedServletException;
 import java.util.ArrayList;
 import java.util.List;
 
-import static org.junit.Assert.*;
 import static org.mockito.Matchers.any;
 import static org.mockito.Mockito.when;
 import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.delete;
@@ -48,7 +49,9 @@ public class ReportControllerTest {
     @Mock
     private ReportService reportService;
     @Mock
-    private KibugCaseService caseService;
+    private KibugCaseService kibugcaseService;
+    @Mock
+    private CaseService caseService;
     @Mock
     private KibugTaskService taskService;
     @Mock
@@ -72,39 +75,6 @@ public class ReportControllerTest {
         requestJson.put("deviceModel","ATH-CL00");
         requestJson.put("deviceOs","5.1.1");
     }
-    @Test
-    public void should_returnAllMergedReports_when_givenTaskIdAndCaseId() throws Exception {
-        //arrange
-        List<Report> reports = new ArrayList<>();
-        Report report = new Report();
-        reports.add(report);
-        when(reportService.listReportMergeByWorker(123, 456, 0, 10)).thenReturn(reports);
-        //action
-        MvcResult result = mockMvc.perform(
-                get(UrlConstants.API_KIBUG+"report").param("taskId","123").param("caseId","456")
-        ).andDo(print()).andExpect(status().isOk()).andReturn();
-        //assert
-        Assert.assertEquals("{\"list\":[{\"id\":\"0\",\"caseTakeId\":\"0\",\"name\":null,\"createTimeMillis\":0," +
-                        "\"bugAmount\":0,\"status\":0}],\"status\":2000}"
-                ,result.getResponse().getContentAsString());
-    }
-
-    @Test
-    public void should_returnReportsCreatedByWorker_when_givenTaskIdAndCaseIdAndWorkerId() throws Exception {
-        //arrange
-        List<Report> reports = new ArrayList<>();
-        Report report = new Report();
-        reports.add(report);
-        when(reportService.listReport(123, 456, 789)).thenReturn(reports);
-        //action
-        MvcResult result = mockMvc.perform(
-                get(UrlConstants.API_KIBUG+"report").param("taskId","123").param("caseId","456").param("workerId","789")
-        ).andDo(print()).andExpect(status().isOk()).andReturn();
-        //assert
-        Assert.assertEquals("{\"list\":[{\"id\":\"0\",\"caseTakeId\":\"0\",\"name\":null,\"createTimeMillis\":0," +
-                        "\"bugAmount\":0,\"status\":0}],\"status\":2000}"
-                ,result.getResponse().getContentAsString());
-    }
 
     @Test
     public void should_deleteReport_when_givenreportId() throws Exception {
@@ -120,9 +90,9 @@ public class ReportControllerTest {
     @Test
     public void should_throwException_when_hasNotTakeCase() throws Exception {
         //arrange
-        CaseFromKibug caseItem = new CaseFromKibug();
-        when(caseService.getCaseById(123L)).thenReturn(caseItem);
-        when(caseService.isTaken(27,123,72)).thenReturn(false);
+        CaseExtends caseItem = new CaseExtends();
+        when(caseService.getCaseExtendsById(123L)).thenReturn(caseItem);
+        when(kibugcaseService.isTaken(27,123,72)).thenReturn(false);
         //action
         try {
             MvcResult result = mockMvc.perform(
@@ -138,9 +108,9 @@ public class ReportControllerTest {
     @Test
     public void should_returnErrorResult_when_taskIsEnd() throws Exception {
         //arrange
-        CaseFromKibug caseItem = new CaseFromKibug();
-        when(caseService.getCaseById(123L)).thenReturn(caseItem);
-        when(caseService.isTaken(27,123,72)).thenReturn(true);
+        CaseExtends caseItem = new CaseExtends();
+        when(caseService.getCaseExtendsById(123L)).thenReturn(caseItem);
+        when(kibugcaseService.isTaken(27,123,72)).thenReturn(true);
         when(taskService.isTaskEnd(72)).thenReturn(true);
         //action
         MvcResult result = mockMvc.perform(
@@ -153,14 +123,14 @@ public class ReportControllerTest {
     @Test
     public void should_createRoport_when_reportDoesNotExist() throws Exception {
         //arrange
-        CaseFromKibug caseItem = new CaseFromKibug();
         Report report = new Report();
         report.setId(123456);
-        caseItem.setApplicationId(1001);
-        when(caseService.getCaseById(123L)).thenReturn(caseItem);
-        when(caseService.isTaken(27,123,72)).thenReturn(true);
+        CaseExtends caseItem = new CaseExtends();
+        caseItem.setTargetId(1001L);
+        when(caseService.getCaseExtendsById(123L)).thenReturn(caseItem);
+        when(kibugcaseService.isTaken(27,123,72)).thenReturn(true);
         when(taskService.isTaskEnd(72)).thenReturn(false);
-        when(reportService.getFirstReportId(72,123,27)).thenReturn(null);
+        when(reportService.getReport(72,123,27)).thenReturn(null);
         when(reportService.createReport(any(ReportVO.class))).thenReturn(report);
         //action
         MvcResult result = mockMvc.perform(
@@ -175,19 +145,23 @@ public class ReportControllerTest {
     @Test
     public void should_updateRoport_when_reportDoesExist() throws Exception {
         //arrange
-        CaseFromKibug caseItem = new CaseFromKibug();
-        caseItem.setApplicationId(1001);
-        when(caseService.getCaseById(123L)).thenReturn(caseItem);
-        when(caseService.isTaken(27,123,72)).thenReturn(true);
+        Report report = new Report();
+        report.setId(123456L);
+        CaseExtends caseItem = new CaseExtends();
+        caseItem.setTargetId(1001L);
+        when(caseService.getCaseExtendsById(123L)).thenReturn(caseItem);
+        when(kibugcaseService.isTaken(27,123,72)).thenReturn(true);
         when(taskService.isTaskEnd(72)).thenReturn(false);
-        when(reportService.getFirstReportId(72,123,27)).thenReturn(123456L);
+        when(reportService.getReport(72,123,27)).thenReturn(report);
         //action
-        MvcResult result = mockMvc.perform(
-                post(UrlConstants.API_KIBUG+"report").contentType(MediaType.APPLICATION_JSON).content(requestJson.toString())
-        ).andDo(print()).andExpect(status().isOk()).andReturn();
-        //assert
-        Mockito.verify(reportService).updateReport(any(ReportVO.class));
-        Assert.assertEquals("{\"id\":123456,\"status\":2000}",result.getResponse().getContentAsString());
+        try {
+            MvcResult result = mockMvc.perform(
+                    post(UrlConstants.API_KIBUG+"report").contentType(MediaType.APPLICATION_JSON).content(requestJson.toString())
+            ).andDo(print()).andExpect(status().isOk()).andReturn();
+        } catch (Exception e) {
+            //assert
+            Assert.assertEquals(((NestedServletException)e).getRootCause().getClass(),IllegalOperationException.class);
+        }
     }
 
 }