Преглед изворни кода

Merge branch 'master' of http://47.112.200.206:3000/shenhao/sys

wuwen пре 4 година
родитељ
комит
a17894ad1c
21 измењених фајлова са 895 додато и 97 уклоњено
  1. 13 12
      src/main/java/com/ssj/api/controller/ApiHomeworkController.java
  2. 62 5
      src/main/java/com/ssj/api/controller/ApiManagerTeacherController.java
  3. 63 0
      src/main/java/com/ssj/api/domain/vo/homework/HomeworkListBaseVO.java
  4. 82 0
      src/main/java/com/ssj/api/domain/vo/homework/HomeworkListVO.java
  5. 92 0
      src/main/java/com/ssj/api/domain/vo/homework/StudentListVO.java
  6. 52 0
      src/main/java/com/ssj/api/domain/vo/homework/TeacherListVO.java
  7. 9 2
      src/main/java/com/ssj/dao/sys/homework/dao/HomeworkQueryDao.java
  8. 76 17
      src/main/java/com/ssj/dao/sys/homework/dao/impl/HomeworkQueryDaoImpl.java
  9. 3 0
      src/main/java/com/ssj/dao/sys/picturepredeal/dao/PicturePreDealDao.java
  10. 2 1
      src/main/java/com/ssj/dao/weixin/library/dao/ILibJoinQueryDao.java
  11. 16 7
      src/main/java/com/ssj/dao/weixin/library/dao/impl/LibJoinQueryDaoImpl.java
  12. 1 1
      src/main/java/com/ssj/framework/core/persistence/MapResultTransformer.java
  13. 15 0
      src/main/java/com/ssj/service/dao/QuestionRecommendRecordDao.java
  14. 27 0
      src/main/java/com/ssj/service/kmt/service/impl/QuestionRecommendRecordServiceImpl.java
  15. 6 2
      src/main/java/com/ssj/service/sys/homework/service/HomeworkPictureService.java
  16. 252 7
      src/main/java/com/ssj/service/sys/homework/service/impl/HomeworkPictureServiceImpl.java
  17. 62 0
      src/main/java/com/ssj/service/sys/picturepredeal/service/impl/PicturePreDealServiceImpl.java
  18. 2 1
      src/main/java/com/ssj/service/weixin/library/service/IBookManagerService.java
  19. 20 1
      src/main/java/com/ssj/service/weixin/library/service/impl/BookManagerServiceImpl.java
  20. 22 24
      src/main/java/com/ssj/statistics/dao/impl/StatisticsQueryImpl.java
  21. 18 17
      src/main/resources/application-common-dev.properties

+ 13 - 12
src/main/java/com/ssj/api/controller/ApiHomeworkController.java

@@ -1,7 +1,6 @@
 package com.ssj.api.controller;
 
-import com.ssj.api.domain.vo.homework.HomeworkReq;
-import com.ssj.api.domain.vo.homework.HomeworkTeacher;
+import com.ssj.api.domain.vo.homework.*;
 import com.ssj.api.domain.vo.teacher.HomeworkAllotReq;
 import com.ssj.api.domain.vo.teacher.TeacherAllotReq;
 import com.ssj.bean.sys.homework.domain.Homework;
@@ -12,6 +11,7 @@ import com.ssj.service.sys.homework.service.HomeworkPictureService;
 import com.ssj.service.sys.homework.service.HomeworkService;
 import com.ssj.service.weixin.library.service.IBookManagerService;
 import io.swagger.annotations.ApiOperation;
+import org.apache.commons.collections4.MapUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
 import org.springframework.web.bind.annotation.*;
@@ -44,23 +44,24 @@ public class ApiHomeworkController extends BaseController {
     @ApiOperation(value = "作业管理列表",  notes = "作业管理列表")
     public ResponseEntity list(@RequestParam(name = "accessToken") String accessToken, @RequestBody HomeworkReq req) {
         ResponseEntity responseEntity = new ResponseEntity();
-        Map<String,Object> data=new HashMap<>(2);
         Map<String,Object> params=new HashMap<>(2);
         try {
+            HomeworkListBaseVO vo = new HomeworkListBaseVO();
             //查询头信息
             Map<String,Object> headMap = managerService.findHeadInfo();
-            data.putAll(headMap);
-            data.put("waitAllocatedNums",homeworkPictureService.findNotAllotHomework());
+            vo.setOfflineNums(MapUtils.getInteger(headMap,"offline_nums"));
+            vo.setOnlineNums(MapUtils.getInteger(headMap,"online_nums"));
+            vo.setWaitAllocatedNums(Integer.parseInt(Long.toString(homeworkPictureService.findNotAllotHomework())));
             params.put("type",30);
             params.put("name",req.getTeacherName());
             /**
              *  is_mark=15 重复作业,11改成15
              *  is_mark=10不批注
              */
-            Page<Map<String,Object>> list = managerService.findTeacherHomeworkList(params,initPage(req.getPageNo(),req.getPageSize()));
-            data.put("list",list.getContent());
-            data.put("totalNums",list.getTotalElements());
-            responseEntity.success(data,"获取平台批改老师列表成功!");
+            Page<HomeworkListVO> list = managerService.findTeacherHomeworkList(params,initPage(req.getPageNo(),req.getPageSize()));
+            vo.setList(list.getContent());
+            vo.setTotalNums(Integer.parseInt(Long.toString(list.getTotalElements())));
+            responseEntity.success(vo,"获取平台批改老师列表成功!");
         } catch (Exception e) {
             logger.error("获取平台批改老师列表接口", e);
             responseEntity.failure(ResponseConstant.CODE_500, "系统繁忙,请稍后重试");
@@ -73,7 +74,7 @@ public class ApiHomeworkController extends BaseController {
         ResponseEntity responseEntity = new ResponseEntity();
         Map<String,Object> data=new HashMap<>(2);
         try {
-            List<Map<String,Object>> list = homeworkPictureService.teacherStudentList(req.getTeacherId());
+            List<StudentListVO> list = homeworkPictureService.teacherStudentList(req.getTeacherId());
             data.put("list",list);
             responseEntity.success(data,"获取平台批改老师列表成功!");
         } catch (Exception e) {
@@ -110,8 +111,8 @@ public class ApiHomeworkController extends BaseController {
             params.put("subject",req.getSubject());
             params.put("teacherId",req.getTeacherId());
             params.put("teacherName",req.getTeacherName());
-            Page<Map<String,Object>> list = homeworkPictureService.teacherList(params,initPage(req.getPageNo(),req.getPageSize()));
-            data.put("list",list);
+            Page<TeacherListVO> list = homeworkPictureService.teacherList(params,initPage(req.getPageNo(),req.getPageSize()));
+            data.put("list",list.getContent());
             responseEntity.success(data,"获取分配老师列表成功!");
         } catch (Exception e) {
             logger.error("获取分配老师列表异常", e);

+ 62 - 5
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, "系统繁忙,请稍后重试");
@@ -289,13 +290,14 @@ public class ApiManagerTeacherController extends BaseController {
             }
             List<Map<String,Object>> list = getSalaryList(manager.getUserId());
             data.put("list",list);
+            responseEntity.success(data,"获取列表成功");
         } catch (Exception e) {
             logger.error("薪酬列表异常", e);
             responseEntity.failure(ResponseConstant.CODE_500, "系统繁忙,请稍后重试");
         }
         return responseEntity;
     }
-    @RequestMapping(value = "/exportSalaryList", method = RequestMethod.POST)
+    @RequestMapping(value = "/exportSalaryList", method = RequestMethod.GET)
     @ApiOperation(value = "导出薪酬列表",  notes = "导出薪酬列表")
     @ResponseBody
     public void exportSalaryList(@RequestParam(name = "accessToken") String accessToken,@RequestBody TeacherDelReq req) {
@@ -323,7 +325,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 +347,61 @@ public class ApiManagerTeacherController extends BaseController {
          }
     }
 
+    @RequestMapping(value = "/exportStatisticsList", method = RequestMethod.GET)
+    @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();

+ 63 - 0
src/main/java/com/ssj/api/domain/vo/homework/HomeworkListBaseVO.java

@@ -0,0 +1,63 @@
+package com.ssj.api.domain.vo.homework;
+
+import java.util.List;
+
+/**
+ * @author sh
+ * @className homeworkListVO
+ * @description vo
+ * @date 2021/3/3
+ */
+public class HomeworkListBaseVO {
+    /**
+     *onlineNums	int	data	在线人数
+     * offlineNums	int	data	离线人数
+     * waitAllocatedNums
+     */
+    private Integer onlineNums;
+    private Integer offlineNums;
+    private Integer waitAllocatedNums;
+    private Integer totalNums;
+
+    private List<HomeworkListVO> list;
+
+    public Integer getOnlineNums() {
+        return onlineNums;
+    }
+
+    public void setOnlineNums(Integer onlineNums) {
+        this.onlineNums = onlineNums;
+    }
+
+    public Integer getOfflineNums() {
+        return offlineNums;
+    }
+
+    public void setOfflineNums(Integer offlineNums) {
+        this.offlineNums = offlineNums;
+    }
+
+    public Integer getWaitAllocatedNums() {
+        return waitAllocatedNums;
+    }
+
+    public void setWaitAllocatedNums(Integer waitAllocatedNums) {
+        this.waitAllocatedNums = waitAllocatedNums;
+    }
+
+    public List<HomeworkListVO> getList() {
+        return list;
+    }
+
+    public void setList(List<HomeworkListVO> list) {
+        this.list = list;
+    }
+
+    public Integer getTotalNums() {
+        return totalNums;
+    }
+
+    public void setTotalNums(Integer totalNums) {
+        this.totalNums = totalNums;
+    }
+}

+ 82 - 0
src/main/java/com/ssj/api/domain/vo/homework/HomeworkListVO.java

@@ -0,0 +1,82 @@
+package com.ssj.api.domain.vo.homework;
+
+/**
+ * @author sh
+ * @className homeworkListVO
+ * @description vo
+ * @date 2021/3/3
+ */
+public class HomeworkListVO {
+    /**
+     *teacherId	string	list	老师id
+     * teacherName	string	list	老师姓名
+     * waitNums	int	list	等待作业份数
+     * waitMaxTime	string	list	作业最长等待时长
+     * todayCorrectTime	string	list	今日累计批注时间
+     * efficiency	string	list	响应速度
+     * state	int
+     */
+    private String teacherId;
+    private String teacherName;
+    private Integer waitNums;
+    private String waitMaxTime;
+    private String todayCorrectTime;
+    private String efficiency;
+    private Integer state;
+
+    public String getTeacherId() {
+        return teacherId;
+    }
+
+    public void setTeacherId(String teacherId) {
+        this.teacherId = teacherId;
+    }
+
+    public String getTeacherName() {
+        return teacherName;
+    }
+
+    public void setTeacherName(String teacherName) {
+        this.teacherName = teacherName;
+    }
+
+    public Integer getWaitNums() {
+        return waitNums;
+    }
+
+    public void setWaitNums(Integer waitNums) {
+        this.waitNums = waitNums;
+    }
+
+    public String getWaitMaxTime() {
+        return waitMaxTime;
+    }
+
+    public void setWaitMaxTime(String waitMaxTime) {
+        this.waitMaxTime = waitMaxTime;
+    }
+
+    public String getTodayCorrectTime() {
+        return todayCorrectTime;
+    }
+
+    public void setTodayCorrectTime(String todayCorrectTime) {
+        this.todayCorrectTime = todayCorrectTime;
+    }
+
+    public String getEfficiency() {
+        return efficiency;
+    }
+
+    public void setEfficiency(String efficiency) {
+        this.efficiency = efficiency;
+    }
+
+    public Integer getState() {
+        return state;
+    }
+
+    public void setState(Integer state) {
+        this.state = state;
+    }
+}

+ 92 - 0
src/main/java/com/ssj/api/domain/vo/homework/StudentListVO.java

@@ -0,0 +1,92 @@
+package com.ssj.api.domain.vo.homework;
+
+/**
+ * @author sh
+ * @className StudentListVO
+ * @description vo
+ * @date 2021/3/3
+ */
+public class StudentListVO {
+    /**
+     * homeworkId	string	list	作业id
+     * studentName	string	list	学生姓名
+     * stateMsg	String	list	状态详细描述
+     * subject	string	list	科目
+     * grade	string	list	年级
+     * state	int	list	批改状态 1-未批注(超时)2-未批注(等待)3-批注中4-已批注(标红)5-已批注(正常)
+     * correctNums	int	list	已批注份数
+     * totalNums
+     */
+    private String homeworkId;
+    private String studentName;
+    private String stateMsg;
+    private String subject;
+    private String grade;
+    private Integer state;
+    private Integer correctNums;
+    private Integer totalNums;
+
+    public String getHomeworkId() {
+        return homeworkId;
+    }
+
+    public void setHomeworkId(String homeworkId) {
+        this.homeworkId = homeworkId;
+    }
+
+    public String getStudentName() {
+        return studentName;
+    }
+
+    public void setStudentName(String studentName) {
+        this.studentName = studentName;
+    }
+
+    public String getStateMsg() {
+        return stateMsg;
+    }
+
+    public void setStateMsg(String stateMsg) {
+        this.stateMsg = stateMsg;
+    }
+
+    public String getSubject() {
+        return subject;
+    }
+
+    public void setSubject(String subject) {
+        this.subject = subject;
+    }
+
+    public String getGrade() {
+        return grade;
+    }
+
+    public void setGrade(String grade) {
+        this.grade = grade;
+    }
+
+    public Integer getState() {
+        return state;
+    }
+
+    public void setState(Integer state) {
+        this.state = state;
+    }
+
+    public Integer getCorrectNums() {
+        return correctNums;
+    }
+
+    public void setCorrectNums(Integer correctNums) {
+        this.correctNums = correctNums;
+    }
+
+    public Integer getTotalNums() {
+        return totalNums;
+    }
+
+    public void setTotalNums(Integer totalNums) {
+        this.totalNums = totalNums;
+    }
+}

+ 52 - 0
src/main/java/com/ssj/api/domain/vo/homework/TeacherListVO.java

@@ -0,0 +1,52 @@
+package com.ssj.api.domain.vo.homework;
+
+/**
+ * @author sh
+ * @className TeacherListVO
+ * @description vo
+ * @date 2021/3/3
+ */
+public class TeacherListVO {
+    /**
+     * teacherId	string	list	老师id
+     * teacherName	string	list	老师姓名
+     * waitNums	int	list	等待作业份数
+     * state
+     */
+    private String teacherId;
+    private String teacherName;
+    private Integer waitNums;
+    private Integer state;
+
+    public String getTeacherId() {
+        return teacherId;
+    }
+
+    public void setTeacherId(String teacherId) {
+        this.teacherId = teacherId;
+    }
+
+    public String getTeacherName() {
+        return teacherName;
+    }
+
+    public void setTeacherName(String teacherName) {
+        this.teacherName = teacherName;
+    }
+
+    public Integer getWaitNums() {
+        return waitNums;
+    }
+
+    public void setWaitNums(Integer waitNums) {
+        this.waitNums = waitNums;
+    }
+
+    public Integer getState() {
+        return state;
+    }
+
+    public void setState(Integer state) {
+        this.state = state;
+    }
+}

+ 9 - 2
src/main/java/com/ssj/dao/sys/homework/dao/HomeworkQueryDao.java

@@ -1,9 +1,12 @@
 package com.ssj.dao.sys.homework.dao;
 
+import com.ssj.api.domain.vo.homework.StudentListVO;
+import com.ssj.api.domain.vo.homework.TeacherListVO;
 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;
 
@@ -91,12 +94,16 @@ public interface HomeworkQueryDao {
      * @param initPage
      * @return
      */
-    Page<Map<String, Object>> teacherList(Map<String, Object> params, Pageable initPage);
+    Page<TeacherListVO> teacherList(Map<String, Object> params, Pageable initPage);
 
     /**
      * 查询老师名下批改学生作业情况
      * @param teacherId
      * @return
      */
-    List<Map<String, Object>> teacherStudentList(String teacherId);
+    List<StudentListVO> teacherStudentList(String teacherId, String beginTime);
+
+    List<ExerciseQuestionDto> findQuestionByBookIdAndPage(String bookId, String unitId, String s, List resultList2, int bookYear);
+
+    List<ExerciseQuestionDto> findAnswerByExerciseBookCourseId(String exerciseBookCourseId, int bookYear);
 }

+ 76 - 17
src/main/java/com/ssj/dao/sys/homework/dao/impl/HomeworkQueryDaoImpl.java

@@ -1,5 +1,7 @@
 package com.ssj.dao.sys.homework.dao.impl;
 
+import com.ssj.api.domain.vo.homework.StudentListVO;
+import com.ssj.api.domain.vo.homework.TeacherListVO;
 import com.ssj.dao.sys.homework.dao.HomeworkQueryDao;
 import com.ssj.framework.core.persistence.PagingHibernateJdbcDao;
 import com.ssj.framework.core.util.StringUtil;
@@ -7,6 +9,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;
@@ -268,7 +271,7 @@ public class HomeworkQueryDaoImpl implements HomeworkQueryDao {
         List<Object> paramList = new ArrayList<>();
         StringBuilder sql = new StringBuilder();
         sql.append("SELECT t.child_name as studentName,t12.homework_id as homeworkId,\n ");
-        sql.append("SEC_TO_TIME(timestampdiff(SECOND,min(t12.create_time),NOW())) as waitTime,t12.`subject`,t13.grade  \n ");
+        sql.append("concat(SEC_TO_TIME(timestampdiff(SECOND,min(t12.create_time),NOW())),'')  as waitTime,t12.`subject`,t13.grade  \n ");
         sql.append(" from tb_lib_vip t \n ");
         sql.append("join tb_lib_vip_service t11 on t.id = t11.vip_id  and t11.correct_type=100\n ");
         sql.append("join scon_homework_picture t12 on t.id = t12.vip_id\n ");
@@ -279,11 +282,11 @@ public class HomeworkQueryDaoImpl implements HomeworkQueryDao {
     }
 
     @Override
-    public Page<Map<String, Object>> teacherList(Map<String, Object> params, Pageable initPage) {
+    public Page<TeacherListVO> teacherList(Map<String, Object> params, Pageable initPage) {
         List<Object> paramList = new ArrayList<>();
         StringBuilder sql = new StringBuilder();
-        sql.append("SELECT t.name as teacherName,t.user_id as teacherId,t.is_online as state,  \n ");
-        sql.append("(select count(1) from scon_homework_picture a where a.teacher_id = t.user_id and a.is_feedback = 0) as waitNums  \n ");
+        sql.append("SELECT t.name as teacher_name,t.user_id as teacher_id,t.is_online as state,  \n ");
+        sql.append("(select count(1) from scon_homework_picture a where a.teacher_id = t.user_id and a.is_feedback = 0) as wait_nums  \n ");
         sql.append("from tb_lib_manager t  \n ");
         sql.append("where t.type=30 \n ");
         if(Objects.nonNull(params.get("subject")) && StringUtil.isEmpty(params.get("subject").toString())){
@@ -299,47 +302,103 @@ public class HomeworkQueryDaoImpl implements HomeworkQueryDao {
             paramList.add(params.get("teacherName"));
         }
         sql.append("order by t.is_online desc  \n ");
-        return dao.findPage(sql.toString(), paramList.toArray(),initPage);
+        return dao.findPage(sql.toString(), paramList.toArray(),initPage,TeacherListVO.class);
     }
 
     @Override
-    public List<Map<String, Object>> teacherStudentList(String teacherId) {
+    public List<StudentListVO> teacherStudentList(String teacherId, String beginTime) {
         StringBuilder selSQL = new StringBuilder();
         List<Object> queryParams = new ArrayList<Object>();
-        selSQL.append("SELECT b.homework_id,b.student_name,b.`subject`,b.grade,b.correctNums,b.totalNums ,\n");
+        selSQL.append("SELECT b.homework_id,b.student_name ,b.`subject`,b.grade,b.correctNums as correct_nums,b.totalNums as total_nums,\n");
         selSQL.append("case when state in (4,5) then concat(DATE_FORMAT(SEC_TO_TIME(b.next_1),'%i分%s秒'),'/张') \n");
-        selSQL.append("when state = 3 then concat(DATE_FORMAT(SEC_TO_TIME(b.next_1),'%i:%s'),'开始批注')\n");
+        selSQL.append("when state = 3 then concat(DATE_FORMAT(SEC_TO_TIME(b.start_time),'%i:%s'),'开始批注')\n");
         selSQL.append("when state = 2 then concat('等待',DATE_FORMAT(SEC_TO_TIME(TIMESTAMPDIFF(SECOND,b.allot_time,NOW())),'%i:%s'))\n");
-        selSQL.append("else '作业已超时' end stateMsg,b.state \n");
+        selSQL.append("else '作业已超时' end state_msg,b.state \n");
         selSQL.append("from (\n");
         selSQL.append("SELECT a.homework_id,a.student_name,a.`subject`,a.grade,a.correctNums,a.totalNums, \n");
-        selSQL.append("case when a.correctNums = a.totalNums and a.next_1 <=120 then 5\n");
-        selSQL.append("when a.correctNums = a.totalNums and a.next_1 >120 then 4\n");
-        selSQL.append("when a.correctNums<a.totalNums and a.start_time is not null  then 3\n");
-        selSQL.append("when a.correctNums<a.totalNums and a.start_time is  null then 2\n");
+        selSQL.append("case when a.type = 1 and  a.correctNums = a.totalNums and a.next_1 <=120 then 5\n");
+        selSQL.append("when a.type = 1 and  a.correctNums = a.totalNums and a.next_1 >120 then 4\n");
+        selSQL.append("when a.type = 1 and  a.correctNums<a.totalNums and a.start_time is not null  then 3\n");
+        selSQL.append("when a.type = 1 and  a.correctNums<a.totalNums and a.start_time is  null then 2\n");
         selSQL.append("else 1 end as state ,\n");
         selSQL.append("a.start_time,\n");
         selSQL.append("a.allot_time,\n");
         selSQL.append("a.next_1\n");
         selSQL.append("from (\n");
         selSQL.append("select t.homework_id,t12.child_name as student_name, t14.`subject`,t14.grade,\n");
+        selSQL.append("count(if(t11.start_time is not null and t11.end_time is not null,true,null)) as correctNums,\n");
+        selSQL.append("count(1) as totalNums,\n");
+        selSQL.append("min(t.allot_time) as allot_time,\n");
+        selSQL.append("0 as start_time,\n");
+        selSQL.append("0 as correction_time,\n");
+        selSQL.append("0 as next_1,\n");
+        selSQL.append("0 as type\n");
+        selSQL.append("from scon_homework_picture t\n");
+        selSQL.append("left join scon_homework t14 on t.homework_id = t14.id\n");
+        selSQL.append("left join scon_homework_picture_correct t11 on t.id = t11.homework_picture_id\n");
+        selSQL.append("left join tb_lib_vip t12 on t.vip_id = t12.id\n");
+        selSQL.append(" where t.teacher_id=? \n");
+        queryParams.add(teacherId);
+        selSQL.append("and t.is_mark in (0,2) and (t.is_feedback = 0 or (t11.start_time is not null and t11.end_time is null))\n");
+        selSQL.append("group by t.homework_id\n");
+        selSQL.append(" union all \n");
+        selSQL.append("select t.homework_id,t12.child_name as student_name, t14.`subject`,t14.grade,\n");
         selSQL.append("count(if(t.is_feedback = 1,true,null)) as correctNums,\n");
         selSQL.append("count(1) as totalNums,\n");
         selSQL.append("min(t.allot_time) as allot_time,\n");
         selSQL.append("min(t11.start_time) as start_time,\n");
         selSQL.append("sum(t11.correction_time) as correction_time,\n");
-        selSQL.append("floor(sum(t11.correction_time)/ count(1)) as next_1\n");
+        selSQL.append("floor(sum(t11.correction_time)/ count(1)) as next_1,\n");
+        selSQL.append("1 as type\n");
         selSQL.append("from scon_homework_picture t\n");
         selSQL.append("left join scon_homework t14 on t.homework_id = t14.id\n");
         selSQL.append("left join scon_homework_picture_correct t11 on t.id = t11.homework_picture_id\n");
         selSQL.append("left join tb_lib_vip t12 on t.vip_id = t12.id\n");
-        selSQL.append(" where t.teacher_id=?\n");
+        selSQL.append(" where t.teacher_id=? and t.create_time > ?\n");
         queryParams.add(teacherId);
-        selSQL.append("where t.is_mark in (0,2)\n");
+        queryParams.add(beginTime);
+        selSQL.append("and t.is_mark in (0,2)\n");
         selSQL.append("group by t.homework_id\n");
         selSQL.append(") a \n");
         selSQL.append(") b order by b.state asc \n");
-        return  dao.findMap(selSQL.toString(),queryParams.toArray());
+        return  dao.findList(selSQL.toString(),queryParams.toArray(),StudentListVO.class);
+    }
+
+    @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

+ 3 - 0
src/main/java/com/ssj/dao/sys/picturepredeal/dao/PicturePreDealDao.java

@@ -10,4 +10,7 @@ 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 findByHomeworkPictureId (String homeworkPictureId);
+
+    @Query(nativeQuery = true, value = "select  * from scon_picture_ai_predeal where homework_picture_id=?1 limit 1")
+    PicturePreDeal findPreDealByHomeworkPictureId(String homeworkPictureId);
 }

+ 2 - 1
src/main/java/com/ssj/dao/weixin/library/dao/ILibJoinQueryDao.java

@@ -1,5 +1,6 @@
 package com.ssj.dao.weixin.library.dao;
 
+import com.ssj.api.domain.vo.homework.HomeworkListVO;
 import com.ssj.bean.weixin.libmy.domain.TbLibJoin;
 import com.ssj.bean.weixin.libmy.domain.TbLibManager;
 import com.ssj.bean.weixin.libmy.domain.TbLibSubscribe;
@@ -117,5 +118,5 @@ public interface ILibJoinQueryDao {
 	 * @param initPage
 	 * @return
 	 */
-	Page<Map<String, Object>> findTeacherHomeworkList(Map<String, Object> params, Pageable initPage);
+	Page<HomeworkListVO> findTeacherHomeworkList(Map<String, Object> params, Pageable initPage);
 }

+ 16 - 7
src/main/java/com/ssj/dao/weixin/library/dao/impl/LibJoinQueryDaoImpl.java

@@ -1,6 +1,7 @@
 package com.ssj.dao.weixin.library.dao.impl;
 
 
+import com.ssj.api.domain.vo.homework.HomeworkListVO;
 import com.ssj.bean.weixin.libmy.domain.TbLibJoin;
 import com.ssj.bean.weixin.libmy.domain.TbLibManager;
 import com.ssj.bean.weixin.libmy.domain.TbLibSubscribe;
@@ -1294,7 +1295,7 @@ public class LibJoinQueryDaoImpl implements ILibJoinQueryDao{
 		StringBuilder selSQL = new StringBuilder();
 		List<Object> queryParams = new ArrayList<Object>();
 		Map<String, Object> map = new HashMap<String, Object>();
-		selSQL.append("select count(if(is_online=1,true,null)) AS onlineNums,count(if(is_online=0,true,null)) AS offlineNums from tb_lib_manager where type=30 and state= 1 ");
+		selSQL.append("select count(if(is_online=1,true,null)) AS online_nums,count(if(is_online=0,true,null)) AS offline_nums from tb_lib_manager where type=30 and state= 1 ");
 		List<Map<String, Object>> mapList= dao.findMap(selSQL.toString(), queryParams.toArray());
 		if(mapList != null && mapList.size()>0){
 			map = mapList.get(0);
@@ -1303,14 +1304,22 @@ public class LibJoinQueryDaoImpl implements ILibJoinQueryDao{
 	}
 
 	@Override
-	public Page<Map<String, Object>> findTeacherHomeworkList(Map<String, Object> params, Pageable initPage) {
+	public Page<HomeworkListVO> findTeacherHomeworkList(Map<String, Object> params, Pageable initPage) {
 		StringBuilder selSQL = new StringBuilder();
 		List<Object> queryParams = new ArrayList<Object>();
-		selSQL.append("select * from tb_lib_manager where type=30 and state= 1 ");
-		selSQL.append(" ");
-		selSQL.append(" ");
-		selSQL.append(" ");
-		return  dao.findPage(selSQL.toString(), queryParams.toArray(),initPage);
+		selSQL.append("SELECT * from ( SELECT  \n");
+		selSQL.append("(SELECT count(DISTINCT a.homework_id) from scon_homework_picture a where a.teacher_id = t.user_id and a.is_mark in (0,2) and a.is_feedback = 0) as wait_nums, \n");
+		selSQL.append("(SELECT ifnull(concat(SEC_TO_TIME(TIMESTAMPDIFF(SECOND,min(a.allot_time),NOW())),''),0)   from scon_homework_picture a where a.teacher_id = t.user_id and a.is_mark in (0,2) and a.is_feedback = 0) as wait_max_time, \n");
+		selSQL.append("t.user_id as teacher_id,t.name as teacher_name, \n");
+		selSQL.append("(select ifnull(concat(SEC_TO_TIME(sum(a.correction_time)),''),0) from scon_homework_picture a where a.teacher_id = t.user_id and a.is_mark in (0,2) and a.is_feedback=1 and t.create_time > ?) as today_correct_time, \n");
+		queryParams.add(params.get("beginTime"));
+		selSQL.append("(select ifnull(concat(SEC_TO_TIME(floor(sum(TIMESTAMPDIFF(SECOND,a.allot_time,b.start_time))/count(1))),''),0) from scon_homework_picture a join scon_homework_picture_correct b on a.id = b.homework_picture_id and b.type=8 where a.teacher_id = t.user_id and a.is_mark in (0,2) and a.is_feedback=1 and t.create_time > ?) as efficiency, \n");
+		queryParams.add(params.get("beginTime"));
+		selSQL.append("t.is_online as state  \n");
+		selSQL.append("from tb_lib_manager t  \n");
+		selSQL.append("where t.type=30 \n");
+		selSQL.append(") a order by a.state desc,a.wait_nums desc  \n");
+		return  dao.findPage(selSQL.toString(), queryParams.toArray(),initPage,HomeworkListVO.class);
 	}
 
 

+ 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;
     }

+ 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;
+    }
+}

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

@@ -1,5 +1,7 @@
 package com.ssj.service.sys.homework.service;
 
+import com.ssj.api.domain.vo.homework.StudentListVO;
+import com.ssj.api.domain.vo.homework.TeacherListVO;
 import com.ssj.bean.sys.homework.domain.HomeworkPicture;
 
 import com.ssj.framework.core.common.service.BaseService;
@@ -50,7 +52,7 @@ public interface HomeworkPictureService extends BaseService<HomeworkPicture, Str
      * @param initPage
      * @return
      */
-    Page<Map<String, Object>> teacherList(Map<String, Object> params, Pageable initPage);
+    Page<TeacherListVO> teacherList(Map<String, Object> params, Pageable initPage);
 
     /**
      * 查询作业正在批改的数量
@@ -81,5 +83,7 @@ public interface HomeworkPictureService extends BaseService<HomeworkPicture, Str
      * @param teacherId
      * @return
      */
-    List<Map<String, Object>> teacherStudentList(String teacherId);
+    List<StudentListVO> teacherStudentList(String teacherId);
+
+    Map<String, Object> pictureDetail(String pictureId);
 }

+ 252 - 7
src/main/java/com/ssj/service/sys/homework/service/impl/HomeworkPictureServiceImpl.java

@@ -1,20 +1,38 @@
 package com.ssj.service.sys.homework.service.impl;
 
+import com.alibaba.fastjson.JSON;
+import com.ssj.api.domain.vo.homework.StudentListVO;
+import com.ssj.api.domain.vo.homework.TeacherListVO;
+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 +40,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 +70,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;
@@ -146,7 +175,7 @@ public class HomeworkPictureServiceImpl extends BaseServiceImpl<HomeworkPicture,
     }
 
     @Override
-    public Page<Map<String, Object>> teacherList(Map<String, Object> params, Pageable initPage) {
+    public Page<TeacherListVO> teacherList(Map<String, Object> params, Pageable initPage) {
         return queryDao.teacherList(params,initPage);
     }
 
@@ -187,7 +216,223 @@ public class HomeworkPictureServiceImpl extends BaseServiceImpl<HomeworkPicture,
     }
 
     @Override
-    public List<Map<String, Object>> teacherStudentList(String teacherId) {
-        return queryDao.teacherStudentList(teacherId);
+    public List<StudentListVO> teacherStudentList(String teacherId) {
+        return queryDao.teacherStudentList(teacherId,getBeginTime());
     }
+
+    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) ;
+
+    }
+
 }

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

@@ -0,0 +1,62 @@
+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.dao.sys.picturepredeal.dao.PicturePreDealDao;
+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.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;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author sh
+ * @className PicturePreDealServiceImpl
+ * @description
+ * @date 2021/3/2
+ */
+@Service
+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;
+    }
+}

+ 2 - 1
src/main/java/com/ssj/service/weixin/library/service/IBookManagerService.java

@@ -1,5 +1,6 @@
 package com.ssj.service.weixin.library.service;
 
+import com.ssj.api.domain.vo.homework.HomeworkListVO;
 import com.ssj.bean.common.framework.core.domain.Response;
 import com.ssj.bean.weixin.libmy.domain.TbLibManager;
 import com.ssj.bean.weixin.user.domain.User;
@@ -551,5 +552,5 @@ public interface IBookManagerService extends BaseService<TbLibManager, String> {
 	 * @param initPage
 	 * @return
 	 */
-	Page<Map<String, Object>> findTeacherHomeworkList(Map<String, Object> params, Pageable initPage);
+	Page<HomeworkListVO> findTeacherHomeworkList(Map<String, Object> params, Pageable initPage);
 }

+ 20 - 1
src/main/java/com/ssj/service/weixin/library/service/impl/BookManagerServiceImpl.java

@@ -3,6 +3,7 @@ package com.ssj.service.weixin.library.service.impl;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.google.common.primitives.Ints;
+import com.ssj.api.domain.vo.homework.HomeworkListVO;
 import com.ssj.bean.common.framework.core.domain.Response;
 import com.ssj.bean.weixin.libmy.domain.TbLibManager;
 import com.ssj.bean.weixin.libmy.domain.TbLibManagerAudit;
@@ -17,6 +18,7 @@ import com.ssj.framework.basic.utils.DateHelper;
 import com.ssj.framework.core.common.service.BaseServiceImpl;
 import com.ssj.framework.core.util.*;
 import com.ssj.framework.idworker.IdWorker;
+import com.ssj.framework.weixin.util.DateUtil;
 import com.ssj.service.conch.curator.request.CreateTeacherRequest;
 import com.ssj.service.conch.teacher.app.request.VcodeSubmitReq;
 import com.ssj.service.mapper.LibManagerMapper;
@@ -1034,9 +1036,26 @@ public class BookManagerServiceImpl extends BaseServiceImpl<TbLibManager, String
     }
 
     @Override
-    public Page<Map<String, Object>> findTeacherHomeworkList(Map<String, Object> params, Pageable initPage) {
+    public Page<HomeworkListVO> findTeacherHomeworkList(Map<String, Object> params, Pageable initPage) {
+        params.put("beginTime",getBeginTime());
         return libJoinQueryDao.findTeacherHomeworkList(params,initPage);
     }
+
+    private String getBeginTime() {
+        Date now = new Date();
+        String nowString = DateUtil.format_yyyyMMddHHmmss(now);
+        String today = DateUtil.format_yyyyMMdd(now);
+        String today2pm = today + " 14:00:00";
+        String beginTime;
+        if (nowString.compareTo(today2pm) >= 0) {
+            //超过下午2点获取今天的数据
+            beginTime = today;
+        } else {
+            //获取昨天
+            beginTime = DateUtil.format_yyyyMMdd(DateUtil.addDays(now, -1));
+        }
+        return beginTime;
+    }
 }
 
 

+ 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