Ver código fonte

批注接口提交

shenhao 4 anos atrás
pai
commit
f4bdd76e62

+ 60 - 4
src/main/java/com/ssj/api/controller/ApiManagerTeacherController.java

@@ -172,7 +172,7 @@ public class ApiManagerTeacherController extends BaseController {
         ResponseEntity responseEntity = new ResponseEntity();
         Map<String,Object> data=new HashMap<>(2);
         try {
-            List<TbLibManager> managerList = managerService.findByType(Constant.ALL_TEACHER_TYPE);
+            List<TbLibManager> managerList = managerService.findByType(Constant.CHECK_TEACHER_TYPE);
             List<Map<String, Object>> list  = new ArrayList<>();
             managerList.forEach(o->{
                 Map<String, Object> map = new HashMap<>();
@@ -222,6 +222,7 @@ public class ApiManagerTeacherController extends BaseController {
             params.put("teacherName",req.getTeacherName());
             Map<String,Object> total = statisticsService.findTotalData(params);
             Page<Map<String,Object>> page = statisticsService.statisticsList(params,initPage(req.getPageNo(),req.getPageSize()));
+            data.putAll(total);
             data.put("list",page.getContent());
             data.put("pages",page.getTotalElements());
             responseEntity.success(data,"获取数据统计列表成功");
@@ -269,8 +270,8 @@ public class ApiManagerTeacherController extends BaseController {
     public ResponseEntity pictureDetail(@RequestParam(name = "accessToken") String accessToken,@RequestBody HomeworkReq req) {
         ResponseEntity responseEntity = new ResponseEntity();
         try {
-            Map<String,Object> data=new HashMap<>(2);
-            data.put("list",null);
+            Map<String,Object> data=pictureService.pictureDetail(req.getPictureId());
+           responseEntity.success(data,"获取成功");
         } catch (Exception e) {
             logger.error("作业批改痕迹异常", e);
             responseEntity.failure(ResponseConstant.CODE_500, "系统繁忙,请稍后重试");
@@ -323,7 +324,7 @@ public class ApiManagerTeacherController extends BaseController {
             StringBuilder head =  new StringBuilder();
             head.append("日期|workDate;批注总张数(张)|correctNums;超时批注总张数(张)|overtimeNums;高峰时段(18:00-20:00)批注张数(张)|perkNums;");
             head.append("高峰时段(18:00-20:00)平均批注时间(min/张)|perkEfficiency;报错张数(张)|errorNums;正确率|accuracy;");
-            head.append("高峰时段薪资(元)|perkSalary;其他时段薪资(元)|otherSalary;总薪资(元)|salary;");
+            head.append("高峰时段薪资(元)|perkSalary;其他时段薪资(元)|otherSalary;总薪资(元)|salary");
             List<ExcelExportEntity> entity = addEntity(head.toString());
             //把我们构造好的bean对象放到params就可以了
             Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(libName, libName, ExcelType.XSSF), entity,
@@ -345,6 +346,61 @@ public class ApiManagerTeacherController extends BaseController {
          }
     }
 
+    @RequestMapping(value = "/exportStatisticsList", method = RequestMethod.POST)
+    @ApiOperation(value = "导出数据统计列表",  notes = "导出数据统计列表")
+    @ResponseBody
+    public void exportStatisticsList(@RequestParam(name = "accessToken") String accessToken,@RequestBody ListReq req) {
+        ServletOutputStream os = null;
+        try {
+            String libName="数据统计";
+            //获得输出流
+            os = response.getOutputStream();
+            //清空输出流
+            response.reset();
+            Map<String,Object> params = new HashMap<>(4);
+            params.put("beginDate",req.getBeginDate());
+            params.put("endDate",req.getEndDate());
+            params.put("teacherName",req.getTeacherName());
+            Page<Map<String,Object>> page = statisticsService.statisticsList(params,initPage(req.getPageNo(),100000));
+            /**
+             * teacherName	string	list	老师姓名
+             * subject	string	list	科目
+             * allSubject	string	list	老师拥有的科目,多科目英文逗号隔开,
+             * correctNums	int	list	批注页数
+             * overtimeNums	int	list	超时批注页数
+             * notCorrectNums	int	list	未批注页数
+             * notCommentNums	int	list	不批注页数
+             * repeatNums	int	list	重复页数
+             * accuracy	string	list	正确率
+             * errorNums	int	list	报错页数
+             */
+            List<Map<String,Object>> list = new ArrayList<>();
+            list.addAll(page.getContent());
+            StringBuilder head =  new StringBuilder();
+            head.append("姓名|teacherName;科目|subject;批注页数|correctNums;超时批注页数|overtimeNums;");
+            head.append("未批注页数|notCorrectNums;不批注页数|notCommentNums;重复页数|repeatNums;");
+            head.append("批注正确率|accuracy;报错页数|errorNums");
+            List<ExcelExportEntity> entity = addEntity(head.toString());
+            //把我们构造好的bean对象放到params就可以了
+            Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(libName, libName, ExcelType.XSSF), entity,
+                    list);
+            workbook.write(os);
+        }catch (IOException e) {
+            logger.error("异常", e);
+        } catch (Exception e) {
+            logger.error("作业批改痕迹异常", e);
+        }finally {
+            if(os != null){
+                try {
+                    os.flush();
+                    os.close();
+                } catch (IOException e) {
+                    logger.error("异常", e);
+                }
+            }
+        }
+    }
+
     private List<Map<String,Object>> getSalaryList(String userId){
         //计算今天日期
         LocalDate date = LocalDate.now();

+ 5 - 0
src/main/java/com/ssj/dao/sys/homework/dao/HomeworkQueryDao.java

@@ -4,6 +4,7 @@ import com.ssj.service.conch.conch.vo.HomeworkVO;
 import com.ssj.service.conch.student.dto.AppWrongTopicBookDto;
 import com.ssj.service.conch.student.dto.WrongTopicBookDto;
 import com.ssj.service.conch.teacher.dto.HomeworkDTO;
+import com.ssj.service.kmt.dto.ExerciseQuestionDto;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
 
@@ -99,4 +100,8 @@ public interface HomeworkQueryDao {
      * @return
      */
     List<Map<String, Object>> teacherStudentList(String teacherId);
+
+    List<ExerciseQuestionDto> findQuestionByBookIdAndPage(String bookId, String unitId, String s, List resultList2, int bookYear);
+
+    List<ExerciseQuestionDto> findAnswerByExerciseBookCourseId(String exerciseBookCourseId, int bookYear);
 }

+ 38 - 0
src/main/java/com/ssj/dao/sys/homework/dao/impl/HomeworkQueryDaoImpl.java

@@ -7,6 +7,7 @@ import com.ssj.service.conch.conch.vo.HomeworkVO;
 import com.ssj.service.conch.student.dto.AppWrongTopicBookDto;
 import com.ssj.service.conch.student.dto.WrongTopicBookDto;
 import com.ssj.service.conch.teacher.dto.HomeworkDTO;
+import com.ssj.service.kmt.dto.ExerciseQuestionDto;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -343,6 +344,43 @@ public class HomeworkQueryDaoImpl implements HomeworkQueryDao {
     }
 
     @Override
+    public List<ExerciseQuestionDto> findQuestionByBookIdAndPage(String bookId, String unitId, String bookCourseId, List pageIndex, int bookYear) {
+        List<Object> params = new ArrayList<>();
+        String sql = "select id question_id, big_question_index, small_question_name small_question_index, option_answer, answer_json answer_json, book_course_id\n" +
+                " from kmt_exercise_questions\n" +
+                " where (deal_status = 4 or deal_status = 5 or deal_status > 7) " +
+                " and book_id = ? and (is_common_flag = 0 or question_year=?)";
+        params.add(bookId);
+        params.add(bookYear);
+        if (StringUtils.isNotBlank(unitId)){
+            sql += " and unit_id=?";
+            params.add(unitId);
+        }
+        if (StringUtils.isNotBlank(bookCourseId)){
+            sql += " and book_course_id=?";
+            params.add(bookCourseId);
+        }
+        sql +=" and  page_index in (" + StringUtil.join(pageIndex, ",") + ")"+
+                " and  answer_json is not null and answer_json != '' and answer_json != '[]' " +
+                " order by num, create_time";
+        return dao.findList(sql, params.toArray(), ExerciseQuestionDto.class);
+    }
+
+    @Override
+    public List<ExerciseQuestionDto> findAnswerByExerciseBookCourseId(String exerciseBookCourseId, int bookYear) {
+        String sql = "select id question_id, big_question_index, small_question_name small_question_index, option_answer, answer_json answer_json, book_course_id\n" +
+                "from kmt_exercise_questions\n" +
+                "where (deal_status = 4 or deal_status = 5 or deal_status > 7) " +
+                "and book_course_id = ? and (is_common_flag=0 or question_year=?) and  answer_json is not null and answer_json != '' and answer_json != '[]' " +
+                "order by num, create_time";
+
+        List<Object> paramList = new ArrayList<>();
+        paramList.add(exerciseBookCourseId);
+        paramList.add(bookYear);
+        return dao.findList(sql, paramList.toArray(), ExerciseQuestionDto.class);
+    }
+
+    @Override
     public Page<Map<String, Object>> findHomeworkByPage(Map<String, Object> searchParam, Pageable pageable) {
         String childName = searchParam.get("LIKE_childName").toString();
         String beginTime = searchParam.get("beginTimeStr").toString();

+ 1 - 1
src/main/java/com/ssj/framework/core/persistence/MapResultTransformer.java

@@ -22,7 +22,7 @@ public class MapResultTransformer implements ResultTransformer {
         Map<String, Object> result = new HashMap<>();
         for (int i = 0; i < aliases.length; i++) {
             // key为小写
-            result.put(aliases[i].toLowerCase(), tuple[i]);
+            result.put(aliases[i], tuple[i]);
         }
         return result;
     }

+ 19 - 0
src/main/java/com/ssj/service/dao/PicturePreDealDao.java

@@ -0,0 +1,19 @@
+package com.ssj.service.dao;
+
+import com.ssj.bean.sys.picturepredeal.domain.PicturePreDeal;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.stereotype.Repository;
+
+/**
+ * @author sh
+ * @className PicturePreDealDao
+ * @description
+ * @date 2021/3/2
+ */
+@Repository
+public interface PicturePreDealDao extends JpaRepository<PicturePreDeal,String> {
+
+    @Query(nativeQuery = true, value = "select  * from scon_picture_ai_predeal where homework_picture_id=?1 limit 1")
+    PicturePreDeal findPreDealByHomeworkPictureId(String homeworkPictureId);
+}

+ 15 - 0
src/main/java/com/ssj/service/dao/QuestionRecommendRecordDao.java

@@ -0,0 +1,15 @@
+package com.ssj.service.dao;
+
+import com.ssj.bean.kmt.kmt.domain.QuestionRecommendRecord;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
+
+/**
+ * @author sh
+ * @className QuestionRecommendRecordDao
+ * @description
+ * @date 2021/3/2
+ */
+@Repository
+public interface QuestionRecommendRecordDao extends JpaRepository<QuestionRecommendRecord,String> {
+}

+ 27 - 0
src/main/java/com/ssj/service/kmt/service/impl/QuestionRecommendRecordServiceImpl.java

@@ -0,0 +1,27 @@
+package com.ssj.service.kmt.service.impl;
+
+import com.ssj.bean.kmt.kmt.domain.QuestionRecommendRecord;
+import com.ssj.framework.core.common.service.BaseServiceImpl;
+import com.ssj.service.dao.QuestionRecommendRecordDao;
+import com.ssj.service.kmt.service.QuestionRecommendRecordService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.repository.PagingAndSortingRepository;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author sh
+ * @className QuestionRecommendRecordServiceImpl
+ * @description
+ * @date 2021/3/2
+ */
+@Service
+public class QuestionRecommendRecordServiceImpl  extends BaseServiceImpl<QuestionRecommendRecord,String> implements QuestionRecommendRecordService{
+
+    @Autowired
+    private QuestionRecommendRecordDao dao;
+
+    @Override
+    public PagingAndSortingRepository<QuestionRecommendRecord, String> getDao() {
+        return dao;
+    }
+}

+ 2 - 0
src/main/java/com/ssj/service/sys/homework/service/HomeworkPictureService.java

@@ -82,4 +82,6 @@ public interface HomeworkPictureService extends BaseService<HomeworkPicture, Str
      * @return
      */
     List<Map<String, Object>> teacherStudentList(String teacherId);
+
+    Map<String, Object> pictureDetail(String pictureId);
 }

+ 247 - 4
src/main/java/com/ssj/service/sys/homework/service/impl/HomeworkPictureServiceImpl.java

@@ -1,20 +1,36 @@
 package com.ssj.service.sys.homework.service.impl;
 
+import com.alibaba.fastjson.JSON;
+import com.ssj.bean.kmt.kmt.domain.KmtHomeworkWrongQuestion;
+import com.ssj.bean.kmt.kmt.domain.QuestionRecommendRecord;
 import com.ssj.bean.sys.homework.domain.HomeworkPicture;
 import com.ssj.bean.sys.homework.domain.HomeworkPictureCorrect;
 import com.ssj.bean.sys.imlibuser.TbClassTeacher;
+import com.ssj.bean.sys.picturepredeal.domain.PicturePreDeal;
 import com.ssj.bean.weixin.libmy.domain.TbLibManager;
+import com.ssj.dao.kmt.kmt.dao.KmtExerciseQuestionDao;
 import com.ssj.dao.sys.homework.dao.HomeworkPictureDao;
 import com.ssj.dao.sys.homework.dao.HomeworkQueryDao;
 import com.ssj.dao.sys.homework.dao.HomeworkPictureQueryDao;
 import com.ssj.framework.core.common.service.BaseServiceImpl;
+import com.ssj.framework.core.util.ResponseEntity;
 import com.ssj.framework.core.util.StringUtil;
 import com.ssj.framework.weixin.util.DateUtil;
 import com.ssj.service.kmt.correctsys.dto.HomeworkPictureDto;
+import com.ssj.service.kmt.dto.ExerciseQuestionAnswer4CorrectDTO;
+import com.ssj.service.kmt.dto.ExerciseQuestionAnswerDto;
+import com.ssj.service.kmt.dto.ExerciseQuestionDto;
+import com.ssj.service.kmt.service.KmtHomeworkWrongQuestionService;
+import com.ssj.service.kmt.service.QuestionRecommendRecordService;
 import com.ssj.service.sys.homework.service.HomeworkPictureCorrectService;
 import com.ssj.service.sys.homework.service.HomeworkPictureService;
 import com.ssj.service.sys.imlibuser.service.TbClassTeacherService;
+import com.ssj.service.sys.picturepredeal.request.RecognitionResultReq;
+import com.ssj.service.sys.picturepredeal.service.PicturePreDealService;
 import com.ssj.service.weixin.library.service.IBookManagerService;
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.collections.MapUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
@@ -22,10 +38,8 @@ import org.springframework.data.repository.PagingAndSortingRepository;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import java.util.Arrays;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * @author sh
@@ -54,6 +68,19 @@ public class HomeworkPictureServiceImpl extends BaseServiceImpl<HomeworkPicture,
     @Autowired
     private HomeworkQueryDao queryDao;
 
+    @Autowired
+    private KmtHomeworkWrongQuestionService kmtHomeworkWrongQuestionService;
+
+    @Autowired
+    private QuestionRecommendRecordService questionRecommendRecordService;
+
+    @Autowired
+    private KmtExerciseQuestionDao kmtExerciseQuestionDao;
+
+    @Autowired
+    private PicturePreDealService picturePreDealService;
+
+
     @Override
     public PagingAndSortingRepository<HomeworkPicture, String> getDao() {
         return homeworkPictureDao;
@@ -190,4 +217,220 @@ public class HomeworkPictureServiceImpl extends BaseServiceImpl<HomeworkPicture,
     public List<Map<String, Object>> teacherStudentList(String teacherId) {
         return queryDao.teacherStudentList(teacherId);
     }
+
+    public Map<String, Object> findRecognitionResult(String pictureId) {
+        Map<String, Object> resultMap = new HashMap<>();
+        int discernType = 2;
+        String bookId = "";
+        String unitId = "";
+        String periodId = "";
+        Object [] questionIds = new Object[]{};
+        Object [] pageIndexs = new Object[]{};
+
+        PicturePreDeal picturePreDeal = picturePreDealService.findPreDealByHomeworkPictureId(pictureId);
+        if (picturePreDeal != null) {
+            //查询到识别记录
+            if (Objects.equals(1, picturePreDeal.getTaskStatus())) {
+                //ai已返回识别结果
+                if (picturePreDeal.getDealFlag() > 0) {
+                    //匹配到练习册
+                    discernType = 1;
+                    bookId = picturePreDeal.getBookId();
+                    unitId = picturePreDeal.getUnitId();
+                    periodId = picturePreDeal.getModuleId();
+                    if (org.apache.commons.lang3.StringUtils.isNotBlank(picturePreDeal.getBookPageNo())) {
+                        pageIndexs = JSON.parseArray(picturePreDeal.getBookPageNo()).toArray();
+                    }
+                    if (StringUtil.isNotBlank(picturePreDeal.getQuestionIds())){
+                        questionIds = JSON.parseArray(picturePreDeal.getQuestionIds()).toArray();
+                    }
+                } else {
+                    //未匹配到练习册
+                    discernType = 3;
+                }
+            } else {
+                //识别中或识别失败
+                discernType = picturePreDeal.getTaskStatus();
+            }
+        }
+
+        if (discernType != 1) {
+            //未从ai识别中获取到答案信息,校验是否学期回顾题目图片,如果是则尝试从题目推荐记录获取答案信息
+            HomeworkPicture homeworkPicture = this.getById(pictureId);
+            if (homeworkPicture != null && com.ssj.framework.basic.utils.StringUtils.isNotBlank(homeworkPicture.getQuestionRecommendRecordId())) {
+                QuestionRecommendRecord questionRecommendRecord =
+                        questionRecommendRecordService.getById(homeworkPicture.getQuestionRecommendRecordId());
+                if (questionRecommendRecord != null) {
+                    discernType = 1;
+                    String questionIdListJson = Optional.ofNullable(questionRecommendRecord.getQuestionIdListJson())
+                            .orElse("[]");
+                    questionIds = JSON.parseArray(questionIdListJson).toArray();
+                    bookId = "semester_review";
+                    pageIndexs = new Object[]{1};
+                }
+            }
+        }
+
+        resultMap.put("discernType", discernType);
+        resultMap.put("bookId", bookId);
+        resultMap.put("unitId", unitId);
+        resultMap.put("periodId", periodId);
+        resultMap.put("pageIndexs", pageIndexs);
+        resultMap.put("questionIds", questionIds);
+
+        return resultMap;
+    }
+
+    //unitId = this.getAnswerListQueryUnitId(bookId, unitId);
+    //return queryDao.findQuestionByBookIdAndPage(bookId, unitId, bookCourseId, pageIndex, bookYear);
+    @Override
+    public Map<String, Object> pictureDetail(String pictureId) {
+
+        Map<String, Object> map = findRecognitionResult(pictureId);
+        if(MapUtils.getInteger(map,"discernType")!=1){
+            return  new HashMap<>();
+        }
+        String bookId = MapUtils.getString(map,"bookId");
+        String unitId = MapUtils.getString(map,"unitId");
+        String periodId = MapUtils.getString(map,"periodId");
+        Object [] questionIds = (Object[])  map.get("questionIds");
+        Object [] pageIndexs =(Object[])  map.get("pageIndexs");
+        List resultList= Arrays.asList(questionIds);
+        List resultList2= Arrays.asList(pageIndexs);
+        HomeworkPicture homeworkPicture;
+        QuestionRecommendRecord questionRecommendRecord = null;
+        if (StringUtils.isNotBlank(pictureId)) {
+            homeworkPicture = this.getById(pictureId);
+            if (homeworkPicture != null && StringUtils.isNotBlank(homeworkPicture.getQuestionRecommendRecordId())) {
+                questionRecommendRecord = questionRecommendRecordService.getById(homeworkPicture.getQuestionRecommendRecordId());
+            }
+        }
+
+        int bookYear = 0;
+        List<ExerciseQuestionDto> exerciseQuestionDtoList;
+        if (questionRecommendRecord == null) {
+            Integer by = kmtExerciseQuestionDao.getBookYear(bookId);
+            if (by != null){
+                bookYear = by;
+            }
+        }
+
+        if (questionRecommendRecord != null) {
+            //如果是推荐题目拍照的作业图片则,直接从题目推荐记录里获取答案
+            exerciseQuestionDtoList = JSON.parseArray(questionRecommendRecord.getQuestionAnswerListJson(), ExerciseQuestionDto.class);
+//        } else if(CollectionUtils.isNotEmpty(request.getQuestionIds())){
+//            exerciseQuestionDtoList = this.findQuestionByQuestionIds(request.getQuestionIds());
+//            logger.debug("查询答案------5");
+        } else if (resultList2 != null && resultList2.size() > 0){
+            resultList2.sort(Comparator.comparingInt(Integer::intValue));
+
+            exerciseQuestionDtoList = queryDao.findQuestionByBookIdAndPage(bookId, unitId, "", resultList2, bookYear);
+        } else {
+            exerciseQuestionDtoList =this.findAnswerByExerciseBookCourseId(periodId, bookYear);
+
+        }
+
+        if (StringUtils.isNotBlank(pictureId)){
+            List<KmtHomeworkWrongQuestion> list = kmtHomeworkWrongQuestionService.findList(pictureId,  false);
+
+            if (list != null){
+                for (KmtHomeworkWrongQuestion wq : list){
+                    for (ExerciseQuestionDto answer :  exerciseQuestionDtoList){
+                        //对错记录与答案记录匹配
+                        if (wq.getQuestionId().equals(answer.getQuestionId())){
+                            //对错记录与答案记录匹配
+                            if (StringUtils.isBlank(wq.getSpaceIndex())) {
+                                if (StringUtils.isBlank(wq.getCorrectSpaceIndex())){
+                                    for (ExerciseQuestionAnswerDto dto : answer.getAnswers()) {
+                                        dto.setSelectedType(wq.getType());
+                                    }
+                                    answer.setAllAnswerSelectedType(wq.getType());
+                                } else {
+                                    String[] correctSpaceIndexArray = wq.getCorrectSpaceIndex().split("、");
+                                    for (String index : correctSpaceIndexArray) {
+                                        int i = Integer.parseInt(index);
+                                        if (i >= 1 && answer.getAnswers() != null && i <= answer.getAnswers().size()) {
+                                            ExerciseQuestionAnswerDto dto = answer.getAnswers().get(i - 1);
+                                            dto.setSelectedType(2);
+                                        }
+                                        answer.setAnswerSelectedType(Integer.parseInt(index), 2);
+                                    }
+                                }
+                            } else {
+                                String[] answerArray = wq.getSpaceIndex().split("、");
+                                //所有答案先设置为对的
+                                for (String index : answerArray) {
+                                    int i = Integer.parseInt(index);
+                                    if (i >= 1 && answer.getAnswers() != null && i <= answer.getAnswers().size()) {
+                                        ExerciseQuestionAnswerDto dto = answer.getAnswers().get(i - 1);
+                                        dto.setSelectedType(1);
+                                    }
+                                    answer.setAnswerSelectedType(Integer.parseInt(index), 1);
+                                }
+                                if (StringUtils.isNotBlank(wq.getCorrectSpaceIndex())){
+                                    String[] correctSpaceIndexArray = wq.getCorrectSpaceIndex().split("、");
+                                    for (String index : correctSpaceIndexArray) {
+                                        int i = Integer.parseInt(index);
+                                        if (i >= 1 && answer.getAnswers() != null && i <= answer.getAnswers().size()) {
+                                            ExerciseQuestionAnswerDto dto = answer.getAnswers().get(i - 1);
+                                            dto.setSelectedType(2);
+                                        }
+                                        answer.setAnswerSelectedType(Integer.parseInt(index), 2);
+                                    }
+                                }
+                            }
+                            break;
+                        }
+                    }
+                }
+            }
+        }
+        Map<String, Map<String,List<ExerciseQuestionDto>>> temp1 = exerciseQuestionDtoList.stream().collect(Collectors.groupingBy(ExerciseQuestionDto::getBookCourseId, LinkedHashMap::new,
+                Collectors.groupingBy(ExerciseQuestionDto::getBigQuestionIndex, LinkedHashMap::new,  Collectors.toList())));
+        List<ExerciseQuestionAnswer4CorrectDTO> exerciseQuestionAnswer4CorrectDTOList = new ArrayList<>();
+        int startIndex = -1;
+        int i = -1;
+        for (Map.Entry<String, Map<String,List<ExerciseQuestionDto>>> map1 : temp1.entrySet()){
+            for (Map.Entry<String,List<ExerciseQuestionDto>> map2 : map1.getValue().entrySet()) {
+                i = i + 1;
+                if (startIndex == -1 && CollectionUtils.isNotEmpty(resultList)){
+                    if (isBigQuestionExists(resultList, map2.getValue())){
+                        startIndex = i;
+                    }
+                }
+                ExerciseQuestionAnswer4CorrectDTO exerciseQuestionAnswer4CorrectDTO = new ExerciseQuestionAnswer4CorrectDTO();
+                exerciseQuestionAnswer4CorrectDTO.setBigQuestionIndex(map2.getKey());
+                exerciseQuestionAnswer4CorrectDTO.setQuestionList(map2.getValue());
+                exerciseQuestionAnswer4CorrectDTOList.add(exerciseQuestionAnswer4CorrectDTO);
+            }
+        }
+        startIndex = startIndex < 0 ? 0 : startIndex;
+
+
+        Map<String, Object> result = new HashMap<>();
+        result.put("startIndex", startIndex);
+        result.put("list", exerciseQuestionAnswer4CorrectDTOList);
+
+        return result;
+    }
+
+
+    private boolean isBigQuestionExists (List<String> questionIds, List<ExerciseQuestionDto> questionDtoList){
+        boolean result = false;
+        for (ExerciseQuestionDto question : questionDtoList){
+            if (questionIds.contains(question.getQuestionId())){
+                result = true;
+                break;
+            }
+        }
+        return result;
+    }
+
+    public List<ExerciseQuestionDto> findAnswerByExerciseBookCourseId(
+            String exerciseBookCourseId, int bookYear) {
+        //调用es前的方法,2020年2月19日16:46:55
+        return queryDao.findAnswerByExerciseBookCourseId(exerciseBookCourseId, bookYear) ;
+
+    }
+
 }

+ 60 - 0
src/main/java/com/ssj/service/sys/picturepredeal/service/impl/PicturePreDealServiceImpl.java

@@ -0,0 +1,60 @@
+package com.ssj.service.sys.picturepredeal.service.impl;
+
+import com.ssj.bean.sys.homework.domain.HomeworkPicture;
+import com.ssj.bean.sys.picturepredeal.domain.PicturePreDeal;
+import com.ssj.framework.core.common.service.BaseServiceImpl;
+import com.ssj.framework.core.util.ResponseEntity;
+import com.ssj.service.ai.model.HomeworkPicturePreDeal;
+import com.ssj.service.dao.PicturePreDealDao;
+import com.ssj.service.kmt.request.SubmitQueryViaOssResultRequest;
+import com.ssj.service.sys.picturepredeal.request.RecognitionResultReq;
+import com.ssj.service.sys.picturepredeal.service.PicturePreDealService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.repository.PagingAndSortingRepository;
+
+/**
+ * @author sh
+ * @className PicturePreDealServiceImpl
+ * @description TODO
+ * @date 2021/3/2
+ */
+public class PicturePreDealServiceImpl extends BaseServiceImpl<PicturePreDeal,String> implements PicturePreDealService {
+
+    @Autowired
+    private PicturePreDealDao dao;
+
+    @Override
+    public PagingAndSortingRepository<PicturePreDeal, String> getDao() {
+        return dao;
+    }
+
+    @Override
+    public void postRequest2AI(HomeworkPicturePreDeal homeworkPicturePreDeal) {
+
+    }
+
+    @Override
+    public void asyncPostRequest2AI(HomeworkPicture homeworkPicture) {
+
+    }
+
+    @Override
+    public PicturePreDeal findPreDealByHomeworkPictureId(String homeworkPictureId) {
+        return dao.findPreDealByHomeworkPictureId(homeworkPictureId);
+    }
+
+    @Override
+    public ResponseEntity findRecognitionResult(RecognitionResultReq req) {
+        return null;
+    }
+
+    @Override
+    public void postRequest2AIV1(HomeworkPicturePreDeal homeworkPicturePreDeal) {
+
+    }
+
+    @Override
+    public ResponseEntity submitQueryViaOssResult(SubmitQueryViaOssResultRequest request) {
+        return null;
+    }
+}

+ 22 - 24
src/main/java/com/ssj/statistics/dao/impl/StatisticsQueryImpl.java

@@ -113,32 +113,30 @@ public class StatisticsQueryImpl implements IStatisticsQueryDao {
 
     @Override
     public Map<String, Object> findTotalData(Map<String, Object> params) {
+        /*
+        correctTotalNums	int	data	批注总页数
+        overtimeTotalNums	int	data	超时批注总页数
+        notCorrectTotalNums	int	data	未批注总页数
+        notCommentTotalNums	int	data	不批注总页数
+        repeatTotalNums	int	data	重复总页数
+        accuracyTotal	string	data	总正确率
+        errorTotalNums
+        correctNums	int	list	批注页数
+        overtimeNums	int	list	超时批注页数
+        notCorrectNums	int	list	未批注页数
+        notCommentNums	int	list	不批注页数
+        repeatNums	int	list	重复页数
+        accuracy	string	list	正确率
+        errorNums	int	list	报错页数
+         */
         StringBuffer sql = new StringBuffer();
+        sql.append("select sum(a.overtimeNums) as correctTotalNums,sum(overtimeNums) as overtimeTotalNums, ");
+        sql.append("sum(a.notCorrectNums) as notCorrectTotalNums,sum(notCommentNums) as notCommentTotalNums, ");
+        sql.append("sum(a.repeatNums) as repeatTotalNums,avg(accuracy) as accuracyTotal, ");
+        sql.append(" from (");
         List<Object> queryParams = new ArrayList<>();
-        sql.append("SELECT a.teacher_id,a.teacherName,a.`subject`,a.allSubject,a.correctNums,a.overtimeNums,a.notCorrectNums,a.notCommentNums,a.repeatNums,a.errorNums,\n");
-        sql.append("floor(100*(a.total- a.errorNums-a.notCorrectNums)/a.total) as accuracy\n");
-        sql.append("from (\n");
-        sql.append("SELECT t12.name as teacherName,t.teacher_id,t.`subject`,t12.course_name as allSubject,count(if(t.is_mark in (0,2) and t.is_feedback=1,true,NULL)) as correctNums, \n");
-        sql.append("0 as overtimeNums,\n");
-        sql.append("count(1) as total,\n");
-        sql.append("count(if(t11.start_time is null,true,null)) as notCorrectNums,\n");
-        sql.append("count(if(t.is_mark=10,true,null)) as notCommentNums,\n");
-        sql.append("count(if(t.is_mark=15,true,null)) as repeatNums\n");
-        sql.append("count(if(t11.is_check_error=1,true,null)) as errorNums,\n");
-        sql.append("from scon_homework_picture t \n");
-        sql.append("left join scon_homework_picture_correct t11 on t.id = t11.homework_picture_id and t11.type = 8\n");
-        sql.append("left join tb_lib_manager t12 on t.teacher_id = t12.user_id\n");
-        sql.append("where t12.type = 30 \n");
-        if(Objects.nonNull(params.get("beginDate")) && StringUtils.isNotBlank(MapUtils.getString(params,"beginDate"))){
-            sql.append(" and  to_days(t11.end_time) >=to_days(?)  ");
-            queryParams.add(params.get("beginDate"));
-        }
-        if(Objects.nonNull(params.get("endDate")) && StringUtils.isNotBlank(MapUtils.getString(params,"endDate"))){
-            sql.append(" and  to_days(t11.end_time) <=to_days(?)  ");
-            queryParams.add(params.get("endDate"));
-        }
-        sql.append("GROUP BY t.teacher_id\n");
-        sql.append(")a");
+        listInfo(params,queryParams,sql);
+        sql.append(" ) a");
         return dao.findMap(sql.toString(),queryParams.toArray()).get(0);
     }
 

+ 18 - 17
src/main/resources/application-common-dev.properties

@@ -25,27 +25,28 @@ spring.datasource.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowS
 
 
 spring.redis.database=0
-
-#spring.redis.host=120.79.157.115
-#spring.redis.port=6379
-spring.redis.password=dc1qazxsw2!@
-#spring.redis.pool.max-active=8
-#spring.redis.pool.max-wait=-1
-#spring.redis.pool.max-idle=8
-#spring.redis.pool.min-idle=0
-spring.redis.timeout=3000
-spring.redis.block-when-exhausted=true
-
-
-
-#spring.redis.cluster.nodes=120.79.157.115:6379
-spring.redis.cluster.nodes=120.79.142.152:6380
-spring.redis.cluster.timeout=30
-
 spring.redis.cluster.pool.max-active=8
 spring.redis.cluster.pool.max-wait=-1
 spring.redis.cluster.pool.max-idle=8
 spring.redis.cluster.pool.min-idle=0
+spring.redis.block-when-exhausted=true
+spring.redis.password=dc1qazxsw2!@
+spring.redis.timeout=3000
+spring.redis.cluster.nodes=172.18.30.192:6380,172.18.30.192:6381,172.18.30.192:6382,172.18.30.192:6383,172.18.30.192:6384,172.18.30.192:6385
+spring.redis.cluster.timeout=30
+
+
+#spring.redis.database=0
+#spring.redis.password=dc1qazxsw2!@
+#spring.redis.timeout=3000
+#spring.redis.block-when-exhausted=true
+#spring.redis.cluster.nodes=120.79.142.152:6380
+#spring.redis.cluster.timeout=30
+#
+#spring.redis.cluster.pool.max-active=8
+#spring.redis.cluster.pool.max-wait=-1
+#spring.redis.cluster.pool.max-idle=8
+#spring.redis.cluster.pool.min-idle=0
 
 
 spring.jmx.enabled=false