派生自 projectDept/qhighschool

EricsHu
2023-11-24 0e62c15e4b010ffa2d5cff9474f3fd389e369338
src/main/java/com/qxueyou/scc/exercise/action/ExerciseExtendController.java
@@ -34,81 +34,81 @@
import com.qxueyou.scc.exercise.service.IExerciseExtendService;
/**
 * 练习扩展控制
 * 如收藏 错题 笔记
 * 练习扩展控制
 * 如收藏 错题 笔记
 * @author zhiyong
 *
 */
@Controller
@RequestMapping(value = "/exercise/Extend")
public class ExerciseExtendController {
   /** 日志 */
   /** 日志 */
   private static final Logger log = LogManager.getLogger("ExerciseExtendController");
   
   /** commonDAO */
   @Autowired
   private CommonDAO commonDAO;
   
   /** 练习扩展service */
   /** 练习扩展service */
   @Autowired
   private IExerciseExtendService exerciseExtendService;
   
   /**-----------------------------------------APP  V2.0 接口 start----------------------------------------------------------- */
   /**-----------------------------------------APP  V2.0 接口 start----------------------------------------------------------- */
   
   /**
    * APP2.0: 查询错题本ListItem
    * APP2.0: 查询错题本ListItem
    * URL:    /exercise/Extend/faultList
    * 
    * 请求参数={
         subjectId:课程id,//可选,用于高校版
         exerType:练习类型,//必传
         page:当前页,//必传,大于0
         limit:每页限制条数,//必传,大于0
    * 请求参数={
         subjectId:课程id,//可选,用于高校版
         exerType:练习类型,//必传
         page:当前页,//必传,大于0
         limit:每页限制条数,//必传,大于0
         }
     返回参数=[
     返回参数=[
          {
              "groupId":"组id",
              "classId":班级id,
              "courseId":科目id,
              "orgId":机构id,
              "subjectId":课程id,
              "name":"组名",
              "type":组类型 ,
              "updateTime":更新时间,
              "answerUpdateTime":本套题答题更新时间,
              "allCount":题目总数,
              "exerciseTime":"考试时间",
              "exerciseRecordId":"记录id",
              "doCount": 做题个数,
              "correctCount": 正确个数,
              "submitNumber":已提交人数(家庭作业),
              "currTitleNumber":当前做题序号,
              "status":做题状态(0:未提交 1:已提交),
              "completionRate": 完成率,
              "accuracy": 正确率,
              "score": 分数,
              "extendAllCount":错题本、收藏本总数
              "groupId":"组id",
              "classId":班级id,
              "courseId":科目id,
              "orgId":机构id,
              "subjectId":课程id,
              "name":"组名",
              "type":组类型 ,
              "updateTime":更新时间,
              "answerUpdateTime":本套题答题更新时间,
              "allCount":题目总数,
              "exerciseTime":"考试时间",
              "exerciseRecordId":"记录id",
              "doCount": 做题个数,
              "correctCount": 正确个数,
              "submitNumber":已提交人数(家庭作业),
              "currTitleNumber":当前做题序号,
              "status":做题状态(0:未提交 1:已提交),
              "completionRate": 完成率,
              "accuracy": 正确率,
              "score": 分数,
              "extendAllCount":错题本、收藏本总数
          },
          ...循环多个
          ...循环多个
      ]
    * 
    * @return
    */
   @RequestMapping(value = "faultList", method = RequestMethod.GET)
   public @ResponseBody List<ExerGroupResponseData> queryFaultList(
         @RequestParam(value="exerType") int exerType,// 0 表示全部错题
         @RequestParam(value="exerType") int exerType,// 0 表示全部错题
         @RequestParam(value="subjectId", required = false) String subjectId,
         @RequestParam(value="page", required = false) Integer page,
         @RequestParam(value="limit", required = false) Integer limit)  {
      // 得到分页数据
      // 得到分页数据
      Pager pager = getPager(page, limit);
      
      // 查询结果
      // 查询结果
      List<ExerGroupResponseData> lstResult = exerciseExtendService.
            queryExerciseFaultListData(exerType, null, pager);
      
      if(null == lstResult){// 结果转换成 []
      if(null == lstResult){// 结果转换成 []
         lstResult = new ArrayList<ExerGroupResponseData>();
      }
      
@@ -116,26 +116,26 @@
   }
   
   /**
    * APP2.0: 查询收藏本ListItem
    * APP2.0: 查询收藏本ListItem
    * URL:    /exercise/Extend/favorList
    * 
    * @return 
    */
   @RequestMapping(value = "favorList", method = RequestMethod.GET)
   public @ResponseBody List<ExerGroupResponseData> queryFavorList(
         @RequestParam(value="exerType") int exerType,// 0全部收藏
         @RequestParam(value="exerType") int exerType,// 0全部收藏
         @RequestParam(value="subjectId", required = false) String subjectId,
         @RequestParam(value="page", required = false) Integer page,
         @RequestParam(value="limit", required = false) Integer limit)  {
      
      // 得到分页数据
      // 得到分页数据
      Pager pager = getPager(page, limit);
      
      // 查询结果
      // 查询结果
      List<ExerGroupResponseData> lstResult = exerciseExtendService.
            queryExerciseFavorListData(exerType, null, pager);
      
      if(null == lstResult){// 结果转换成 []
      if(null == lstResult){// 结果转换成 []
         lstResult = new ArrayList<ExerGroupResponseData>();
      }
      
@@ -144,25 +144,25 @@
   
   
   /**
    * APP2.0: 获取错题练习题目数据
    * APP2.0: 获取错题练习题目数据
    * URL:    /exercise/Exercise/faultExercise
    * @param groupId 组id
    * @param exerciseRecordId 练习记录id
    * @param groupId 组id
    * @param exerciseRecordId 练习记录id
    * @return
    */
   @RequestMapping(value = "faultExercise", method = RequestMethod.GET)
   public @ResponseBody ExerItemResponseData getFaultExerciseData(
         @RequestParam(value = "groupId") String groupId)  {
      
         // 查询结果
         // 查询结果
         ExerItemResponseData resultData = exerciseExtendService.queryExerciseFaultData(groupId);
         
         return resultData;
   }
   
   /**
    * 查询多套题收藏题目
    * @param groupId 格式"111,222,333...."
    * 查询多套题收藏题目
    * @param groupId 格式"111,222,333...."
    * @return
    */
   @RequestMapping(value = "faultMutiExercise", method = RequestMethod.GET)
@@ -180,12 +180,12 @@
         
         for(String exerGroupId:groupIds){
            try{
               // 查询结果
               // 查询结果
               resultDataLst.add(exerciseExtendService.queryExerciseMutiFaultData(exerGroupId));
               
            }catch(Exception e){
               
               log.error("查询多套题faultMutiExercise结果失败,groupId="+exerGroupId,e);
               log.error("查询多套题faultMutiExercise结果失败,groupId="+exerGroupId,e);
            }
         }
         
@@ -217,7 +217,7 @@
   }
   
   /**
    * APP2.0: 获取全部错题练习题目数据
    * APP2.0: 获取全部错题练习题目数据
    * URL:    /exercise/Extend/allFaultExercise
    * @return
    */
@@ -226,103 +226,103 @@
         @RequestParam(value="limit", required = false) Integer limit,
         @RequestParam(value="page", required = false) Integer page)  {
         
         // 得到分页数据
         // 得到分页数据
         Pager pager = getPager(page, limit);
      
         // 查询结果
         // 查询结果
         ExerItemResponseData resultData = exerciseExtendService.queryAllExerciseFaultData(pager);
         
         return resultData;
   }
   
   /**
    * APP2.0: 获取收藏练习题目数据
    * APP2.0: 获取收藏练习题目数据
    * URL:    /exercise/Exercise/favorExercise
    * 
      返回数据={
          "items":[// 题目集合
      返回数据={
          "items":[// 题目集合
              {
                  "exerciseId":练习id,
                  "exerciseId":练习id,
                  "chapterId":null,
                  "lessonId":null,
                  "title":标题,
                  "type":题目类型,
                  "answer":正确答案,
                  "title":标题,
                  "type":题目类型,
                  "answer":正确答案,
                  "options":[
                      {
                          "optionId":选项id,
                          "optionId":选项id,
                          "checked":true,
                          "content":内容,
                          "optionOrder":题目序号,
                          "exerciseItemId":"练习id",
                          "content":内容,
                          "optionOrder":题目序号,
                          "exerciseItemId":"练习id",
                          "imgs":[
                              {
                                  "imgId":"ͼƬid",
                                  "imgId":"图片id",
                                  "exerciseObjectId":null,
                                  "imgPath":图片路径,
                                  "imgOrder":排序,
                                  "objectType":图片类型 1:题目 2:选项
                                  "imgPath":图片路径,
                                  "imgOrder":排序,
                                  "objectType":图片类型 1:题目 2:选项
                              },
                              ... 循环多个
                              ... 循环多个
                          ]
                      },
                      ... 循环多个
                      ... 循环多个
                  ],
                  "scores":null,
                  "itemNo":null,
                  "analisisResult":{
                      "allAccuracy":全站统计 正确率,
                      "analysis":"解析",
                      "submitAllNumber":全站 提交总数,
                      "usualFaultAnswers":易错题,
                      "allAccuracy":全站统计 正确率,
                      "analysis":"解析",
                      "submitAllNumber":全站 提交总数,
                      "usualFaultAnswers":易错题,
                      "exerciseAnalisisUId":null,
                      "accuracy":个人统计 正确率,
                      "submitNumber":个人统计  提交总数,
                      "submitErrorNumber":个人统计  提交错误总数,
                      "accuracy":个人统计 正确率,
                      "submitNumber":个人统计  提交总数,
                      "submitErrorNumber":个人统计  提交错误总数,
                  },
                  "imgs":[
                      {
                         "imgId":"ͼƬid",
                         "imgId":"图片id",
                          "exerciseObjectId":null,
                          "imgPath":图片路径,
                          "imgOrder":排序,
                          "objectType":图片类型 1:题目 2:选项
                          "imgPath":图片路径,
                          "imgOrder":排序,
                          "objectType":图片类型 1:题目 2:选项
                      },
                      ... 循环多个
                      ... 循环多个
                  ],
                  "commentFlag": null,
              }
          ],
          "answers":[// 个人答案集合
          "answers":[// 个人答案集合
              {
                  "answerUId":"主键id",
                  "answer":选择答案  如:多选为(A,B,C),
                  "answerUId":"主键id",
                  "answer":选择答案  如:多选为(A,B,C),
                  "correct":0,
                  "exerciseItemId":练习id,
                  "exerciseRecordId":记录id,
                  "userId":用户id
                  "exerciseItemId":练习id,
                  "exerciseRecordId":记录id,
                  "userId":用户id
              },
              ... 循环多个
              ... 循环多个
          ]
      }
    * 
    * @param groupId 组id
    * @param exerciseRecordId 练习记录id
    * @param groupId 组id
    * @param exerciseRecordId 练习记录id
    * @return
    */
   @RequestMapping(value = "favorExercise", method = RequestMethod.GET)
   public @ResponseBody ExerItemResponseData getFavorExerciseData(
         @RequestParam(value = "groupId") String groupId)  {
      
         // 查询结果
         // 查询结果
         ExerItemResponseData resultData = exerciseExtendService.queryExerciseFavorData(groupId);
         
         return resultData;
   }
   
   /**
    * 查询多套题收藏题目
    * @param groupId 格式"111,222,333...."
    * 查询多套题收藏题目
    * @param groupId 格式"111,222,333...."
    * @return
    */
   @RequestMapping(value = "favorMutiExercise", method = RequestMethod.GET)
@@ -340,12 +340,12 @@
         
         for(String exerGroupId:groupIds){
            try{
               // 查询结果
               // 查询结果
               resultDataLst.add(exerciseExtendService.queryExerciseMutiFavorData(exerGroupId));
               
            }catch(Exception e){
               
               log.error("查询多套题favorMutiExercise结果失败,groupId="+exerGroupId,e);
               log.error("查询多套题favorMutiExercise结果失败,groupId="+exerGroupId,e);
            }
         }
         
@@ -355,7 +355,7 @@
   
   
   /**
    * APP2.0: 获取全部收藏练习题目数据
    * APP2.0: 获取全部收藏练习题目数据
    * URL:    /exercise/Exercise/allFavorExercise
    * @return
    */
@@ -364,26 +364,26 @@
         @RequestParam(value="limit", required = false) Integer limit,
         @RequestParam(value="page", required = false) Integer page)  {
      
         // 得到分页数据
         // 得到分页数据
         Pager pager = getPager(page, limit);
      
         // 查询结果
         // 查询结果
         ExerItemResponseData resultData = exerciseExtendService.queryAllExerciseFavorData(pager);
         
         return resultData;
   }
   
   /**
    * APP2.0: 提交错题本的记录到DB
    * APP2.0: 提交错题本的记录到DB
    * URL:    /exercise/Extend/submitFaultData
    * 
    *      返回数据={
            "exerciseGroupType": 练习类型,
          "exerciseGroupId": 练习组id,
    *      返回数据={
            "exerciseGroupType": 练习类型,
          "exerciseGroupId": 练习组id,
          "items":[
               {
                "exerciseId": 练习id,
                "flag": 状态, // (true:添加  false:移除)
                "exerciseId": 练习id,
                "flag": 状态, // (true:添加  false:移除)
   
               },
               .....
@@ -402,7 +402,7 @@
      
      try {
         ObjectMapper mapper = new ObjectMapper();
         // 装换json到对象
         // 装换json到对象
         ExciseExtendReqData recordResult = mapper.readValue(records, ExciseExtendReqData.class);
         List<ExerciseExtendRecordData> lstRecords = recordResult.getItems();
         
@@ -410,7 +410,7 @@
            return result; 
         }
         
         // 提交结果
         // 提交结果
         Map<String,Object> resultMap = exerciseExtendService.doOperExerciseFaultRecordData(null, recordResult);
         result.setResult(true);
         result.setData(resultMap);
@@ -425,16 +425,16 @@
   
   
   /**
    * APP2.0: 提交错题本的记录到DB
    * APP2.0: 提交错题本的记录到DB
    * URL:    /exercise/Extend/submitFaultData
    * 
    *      返回数据={
            "exerciseGroupType": 练习类型,
          "exerciseGroupId": 练习组id,
    *      返回数据={
            "exerciseGroupType": 练习类型,
          "exerciseGroupId": 练习组id,
          "items":[
               {
                "exerciseId": 练习id,
                "flag": 状态, // (true:添加  false:移除)
                "exerciseId": 练习id,
                "flag": 状态, // (true:添加  false:移除)
   
               },
               .....
@@ -456,14 +456,14 @@
      try {
         ObjectMapper mapper = new ObjectMapper();
         
         // 装换json到对象
         // 装换json到对象
         ExciseExtendReqListData recordData = mapper.readValue(records, ExciseExtendReqListData.class);
         
         //String subjectId = recordData.getSubjectId();
         List<ExciseExtendReqData> recordResults = recordData.getDatas();
         
         resultList = new ArrayList<Map<String,Object>>(recordResults.size());
         // 循环记录
         // 循环记录
         List<ExerciseExtendRecordData> lstRecords = null;
         for(ExciseExtendReqData recordResult:recordResults){
            
@@ -473,7 +473,7 @@
               continue;
            }
            
            // 提交结果
            // 提交结果
            returnMap = exerciseExtendService.doOperExerciseFaultRecordData(null, recordResult);
            
            resultList.add(returnMap);
@@ -481,9 +481,9 @@
         
         resultMap.put("success", true);
         resultMap.put("attrs", resultList);
         resultMap.put("msg", "提交成功");
         resultMap.put("msg", "提交成功");
      } catch (Exception e) {
         resultMap.put("msg", "提交失败");
         resultMap.put("msg", "提交失败");
         log.error(e);
      }
      
@@ -491,10 +491,10 @@
   }
   
   /**
    * APP2.0: 提交收藏本的记录到DB
    * APP2.0: 提交收藏本的记录到DB
    * URL:    /exercise/Extend/submitFavorData
    * 
    * @param records  json字符串
    * @param records  json字符串
    * @return
    */
   @RequestMapping(value = "submitFavorData", method = RequestMethod.POST)
@@ -505,7 +505,7 @@
      Result result = new Result(false);
      try {
         ObjectMapper mapper = new ObjectMapper();
         // 装换json到对象
         // 装换json到对象
         ExciseExtendReqData recordResult = mapper.readValue(records, ExciseExtendReqData.class);
         List<ExerciseExtendRecordData> lstRecords = recordResult.getItems();
         
@@ -513,7 +513,7 @@
            return result; 
         }
         
         // 提交结果
         // 提交结果
         Map<String,Object> resultMap = exerciseExtendService.doOperExerciseFavorRecordData(null, recordResult);
         result.setResult(true);
         result.setData(resultMap);
@@ -528,10 +528,10 @@
   
   
   /**
    * APP2.0: 提交收藏本的记录到DB
    * APP2.0: 提交收藏本的记录到DB
    * URL:    /exercise/Extend/submitFavorData
    * 
    * @param records  json字符串
    * @param records  json字符串
    * @return
    */
   @RequestMapping(value = "submitFavorMutiData", method = RequestMethod.POST)
@@ -547,14 +547,14 @@
         
         ObjectMapper mapper = new ObjectMapper();
         
         // 装换json到对象
         // 装换json到对象
         ExciseExtendReqListData recordData = mapper.readValue(records, ExciseExtendReqListData.class);
         
         //String subjectId = recordData.getSubjectId();
         List<ExciseExtendReqData> recordResults = recordData.getDatas();
         resultList = new ArrayList<Map<String,Object>>(recordResults.size());
         
         // 循环记录
         // 循环记录
         List<ExerciseExtendRecordData> lstRecords = null;
         for(ExciseExtendReqData recordResult:recordResults){
            
@@ -564,14 +564,14 @@
               continue;
            }
            
            // 提交结果
            // 提交结果
            returnMap = exerciseExtendService.doOperExerciseFavorRecordData(null, recordResult);
            
            resultList.add(returnMap);
         }
         resultMap.put("success", true);
         resultMap.put("attrs", resultList);
         resultMap.put("msg", "提交成功");
         resultMap.put("msg", "提交成功");
         
      } catch (Exception e) {
         log.error(e);
@@ -581,8 +581,8 @@
   }
   
   /**
    * 获得多套题答案
    * @param groupId 格式"111,222,333...."
    * 获得多套题答案
    * @param groupId 格式"111,222,333...."
    * @return
    */
   @RequestMapping(value = "getExtendAnswers", method = RequestMethod.GET)
@@ -602,13 +602,13 @@
         for(String exerGroupId:groupIds){
            try{
               
               if(Constants.EXERCISE_TYPE_FAULT.equals(exerciseType)){// 错题本
               if(Constants.EXERCISE_TYPE_FAULT.equals(exerciseType)){// 错题本
                  
                  // 查询结果
                  // 查询结果
                  resultDataLst.add(exerciseExtendService.queryExerciseFaultAnswerData(exerGroupId));
                  
               }else if(Constants.EXERCISE_TYPE_FAVORT.equals(exerciseType)){// 收藏
                  // 查询结果
               }else if(Constants.EXERCISE_TYPE_FAVORT.equals(exerciseType)){// 收藏
                  // 查询结果
                  resultDataLst.add(exerciseExtendService.queryExerciseFavorAnswerData(exerGroupId));
               }else{
                  return null;
@@ -616,7 +616,7 @@
               
            }catch(Exception e){
               
               log.error("获得多套题答案getExtendAnswers结果失败,groupId="+exerGroupId,e);
               log.error("获得多套题答案getExtendAnswers结果失败,groupId="+exerGroupId,e);
            }
         }
         
@@ -625,40 +625,40 @@
   
   
   /**
    * APP2.0: 提交练习答案
    * APP2.0: 提交练习答案
    * URL:    /exercise/Extend/exerExtendAnswers
    * 
    * 请求数据= answers={
             "exerciseGroupId": 组id,
             "exerciseRecordId": 记录id,
    * 请求数据= answers={
             "exerciseGroupId": 组id,
             "exerciseRecordId": 记录id,
             "exerciseExtendId": null, 
             "currTitleNum": "当前题号",
             "status": ״̬,
             "type": 练习类型,// 整型
             "doCount": 练习类型,
             "correctCount": 正确个数,
             "allCount":题目总数,
             "currTitleNum": "当前题号",
             "status": 状态,
             "type": 练习类型,// 整型
             "doCount": 练习类型,
             "correctCount": 正确个数,
             "allCount":题目总数,
             "items": [
                 {
                     "exerciseId": "练习id",
                     "type": 练习类型,// 整数型
                     "answer": "选择答案",
                     "correct": 是否正确(0:错误 1:正确 2:未知)
                     "exerciseId": "练习id",
                     "type": 练习类型,// 整数型
                     "answer": "选择答案",
                     "correct": 是否正确(0:错误 1:正确 2:未知)
                 }, 
                 {
                     "exerciseId": "练习id",
                     "type": 练习类型,
                     "answer": "选择答案",
                     "correct": 是否正确(0:错误 1:正确 2:未知)
                     "exerciseId": "练习id",
                     "type": 练习类型,
                     "answer": "选择答案",
                     "correct": 是否正确(0:错误 1:正确 2:未知)
                 }
             ]
         }
         
      返回数据=   {"success":true,//true:成功 false:失败
            "attrs":{"exerciseRecordId":练习记录id,
                  "updateTime":修改时间
      返回数据=   {"success":true,//true:成功 false:失败
            "attrs":{"exerciseRecordId":练习记录id,
                  "updateTime":修改时间
              },
            "msg":"提交成功",//结果信息
            "msg":"提交成功",//结果信息
      }
    * 
    * @param answers 
@@ -667,21 +667,21 @@
   @RequestMapping(value = "exerExtendAnswers", method = RequestMethod.POST)
   public @ResponseBody Result doSubmitExerExtendAnswer(
         @RequestParam(value = "answers")  String answers)  {
      // 用户本次做题提交的数据
      // 用户本次做题提交的数据
      Result result = new Result(false);
      String initExerciseRecordId = "";
      try {
         ObjectMapper mapper = new ObjectMapper();
         // 装换json到对象
         // 装换json到对象
         ExerciseSubmitAnswerData answerResult = mapper.readValue(answers, ExerciseSubmitAnswerData.class);
         
         // 1.---------记录提交的数据日志
         // 记录id
         // 1.---------记录提交的数据日志
         // 记录id
         initExerciseRecordId = answerResult.getExerciseRecordId();
         
         if(answerResult.getItems().isEmpty() 
               && !ExerciseRecord.STATUS_SUBMIT.equals(answerResult.getStatus()) 
               && answerResult.getSubmitType() != 1){// 提交状态
               && answerResult.getSubmitType() != 1){// 提交状态
            
            exerciseExtendService.doSaveExerciseDataSubmitLog(answers,
                  initExerciseRecordId, ExerciseDataSubmitLog.TYPE_SUBMIT_EXTEND_ANSWER,
@@ -690,7 +690,7 @@
            return result;
         }
         
         // 2.提交答案
         // 2.提交答案
         result = exerciseExtendService.doSubmitExerciseAnswerData(answerResult);
         
         int status = 0;
@@ -700,13 +700,13 @@
            status = ExerciseDataSubmitLog.STATUS_FAILED;
         }
         
         // 记录提交的数据日志
         // 记录提交的数据日志
         String exerciseDataLogId = exerciseExtendService.doSaveExerciseDataSubmitLog(answers,
               initExerciseRecordId, ExerciseDataSubmitLog.TYPE_SUBMIT_EXTEND_ANSWER, 
               status,"/exercise/Extend/exerExtendAnswers");
         
         if(StringUtils.isBlank(initExerciseRecordId) 
               && result.getData("exerciseRecordId") != null){// 为空 说明第一次提交  更新日志记录id
               && result.getData("exerciseRecordId") != null){// 为空 说明第一次提交  更新日志记录id
            exerciseExtendService.doUpdateExerciseDataSubmitLog(exerciseDataLogId, 
                  String.valueOf(result.getData("exerciseRecordId")));
            
@@ -716,7 +716,7 @@
         result = new Result(false);
         log.error(e);
         
         // 记录提交的数据日志
         // 记录提交的数据日志
         exerciseExtendService.doSaveExerciseDataSubmitLog(answers,
               initExerciseRecordId, ExerciseDataSubmitLog.TYPE_SUBMIT_EXTEND_ANSWER,
               ExerciseDataSubmitLog.STATUS_FAILED,"/exercise/Extend/exerExtendAnswers");
@@ -727,40 +727,40 @@
   
   
   /**
    * APP2.0: 提交练习答案
    * APP2.0: 提交练习答案
    * URL:    /exercise/Extend/exerExtendMutiAnswers
    * 
    * 请求数据= answers=[{
             "exerciseGroupId": 组id,
             "exerciseRecordId": 记录id,
    * 请求数据= answers=[{
             "exerciseGroupId": 组id,
             "exerciseRecordId": 记录id,
             "exerciseExtendId": null, 
             "currTitleNum": "当前题号",
             "status": ״̬,
             "type": 练习类型,// 整型
             "doCount": 练习类型,
             "correctCount": 正确个数,
             "allCount":题目总数,
             "currTitleNum": "当前题号",
             "status": 状态,
             "type": 练习类型,// 整型
             "doCount": 练习类型,
             "correctCount": 正确个数,
             "allCount":题目总数,
             "items": [
                 {
                     "exerciseId": "练习id",
                     "type": 练习类型,// 整数型
                     "answer": "选择答案",
                     "correct": 是否正确(0:错误 1:正确 2:未知)
                     "exerciseId": "练习id",
                     "type": 练习类型,// 整数型
                     "answer": "选择答案",
                     "correct": 是否正确(0:错误 1:正确 2:未知)
                 }, 
                 {
                     "exerciseId": "练习id",
                     "type": 练习类型,
                     "answer": "选择答案",
                     "correct": 是否正确(0:错误 1:正确 2:未知)
                     "exerciseId": "练习id",
                     "type": 练习类型,
                     "answer": "选择答案",
                     "correct": 是否正确(0:错误 1:正确 2:未知)
                 }
             ]
         }]
         
      返回数据=   {"success":true,//true:成功 false:失败
            "attrs":{"exerciseRecordId":练习记录id,
                  "updateTime":修改时间
      返回数据=   {"success":true,//true:成功 false:失败
            "attrs":{"exerciseRecordId":练习记录id,
                  "updateTime":修改时间
              },
            "msg":"提交成功",//结果信息
            "msg":"提交成功",//结果信息
      }
    * 
    * @param answers 
@@ -769,21 +769,21 @@
   @RequestMapping(value = "exerExtendMutiAnswers", method = RequestMethod.POST)
   public @ResponseBody Object doSubmitExerExtendMutiAnswer(
         @RequestParam(value = "answers")  String answers)  {
      // 用户本次做题提交的数据
      // 用户本次做题提交的数据
      Map<String,Object> resultMap = new HashMap<String,Object>(2);
      resultMap.put("success", false);
      resultMap.put("attrs", null);
      try {
         ObjectMapper mapper = new ObjectMapper();
         // 装换json到对象
         // 装换json到对象
         ExerciseSubmitAnswerDataList answerDataList = mapper.readValue(answers, ExerciseSubmitAnswerDataList.class);
         
         // 提交答案
         // 提交答案
         resultMap = exerciseExtendService.doSubmitMutiExerciseAnswerData(answerDataList);
         
      } catch (Exception e) {
         log.error(e);
         resultMap.put("msg", "提交练习答案请求异常");
         resultMap.put("msg", "提交练习答案请求异常");
         
         exerciseExtendService.doSaveExerciseDataSubmitLog(answers,
               "exerExtendMutiAnswers", ExerciseDataSubmitLog.TYPE_SUBMIT_EXTEND_ANSWER, 
@@ -794,29 +794,29 @@
   }
   
   /**
    * APP2.0:  app端重新开始做题 更新状态
    * APP2.0:  app端重新开始做题 更新状态
    * URL:    /exercise/Extend/updateNewExerRecordNew
    * 
    * @param groupId 习题组ID  如果为All时,表示全部错题
    * @param groupId 习题组ID  如果为All时,表示全部错题
    * @return
    */
   @RequestMapping(value = "updateNewExerRecordNew", method = RequestMethod.GET)
   public @ResponseBody Result doUpdateExerItemNumber(
         @RequestParam(value = "groupId")  String groupId,// 习题组ID  如果为All时,表示全部错题、全部收藏
         @RequestParam(value = "groupId")  String groupId,// 习题组ID  如果为All时,表示全部错题、全部收藏
         @RequestParam(value = "exerciseType")  String exerciseType)  {
      
      Map<String,Object> map = null;
      Result result = new Result(true, "状态更新成功");
      if(Constants.EXERCISE_TYPE_FAULT.equals(exerciseType)){// 错题本
      Result result = new Result(true, "状态更新成功");
      if(Constants.EXERCISE_TYPE_FAULT.equals(exerciseType)){// 错题本
         
          map = exerciseExtendService.doUpdateFaultExerRecordNew(groupId);
         
      }else if(Constants.EXERCISE_TYPE_FAVORT.equals(exerciseType)){// 收藏
      }else if(Constants.EXERCISE_TYPE_FAVORT.equals(exerciseType)){// 收藏
         
         map = exerciseExtendService.doUpdateFavortExerRecordNew(groupId);
      }else{
         
         result = new Result(false, "exerciseType传值错误:exerciseType="+exerciseType);
         result = new Result(false, "exerciseType传值错误:exerciseType="+exerciseType);
      }
      
      result.setData(map);
@@ -825,29 +825,29 @@
   } 
   
   /**
    * APP2.0: 更新练习作业题号 app端重新开始做题
    * APP2.0: 更新练习作业题号 app端重新开始做题
    * URL:    /exercise/Extend/updateExerciseRecord
    * 
    * @param groupId         习题组ID
    * @param groupId         习题组ID
    * @return
    */
   @RequestMapping(value = "updateExerciseRecord", method = RequestMethod.GET)
   public @ResponseBody Result doUpdateExerciseRecord(
         @RequestParam(value = "groupId")  String groupId,// all 表示全部错误或收藏
         @RequestParam(value = "groupId")  String groupId,// all 表示全部错误或收藏
         @RequestParam(value = "exerciseType")  String exerciseType,
         @RequestParam(value = "exerciseRecordId") String exerciseRecordId,
         @RequestParam(value = "currTitleNum", required = false) String currTitleNum)  {
      
      
      Result result = new Result(true, "状态更新成功");
      Result result = new Result(true, "状态更新成功");
      
      if(StringUtils.isBlank(exerciseRecordId) && !"All".equals(groupId)){
         return new Result(false, "更新失败,exerciseRecordId为空");
         return new Result(false, "更新失败,exerciseRecordId为空");
      }
      if(Constants.EXERCISE_TYPE_FAULT.equals(exerciseType)){// 错题本
      if(Constants.EXERCISE_TYPE_FAULT.equals(exerciseType)){// 错题本
         
         if("All".equals(groupId)){// 全部错题
         if("All".equals(groupId)){// 全部错题
            return exerciseExtendService.doUpdateExerciseFaultBook(currTitleNum);
         }
         
@@ -856,9 +856,9 @@
         
         result = exerciseExtendService.doUpdateExerciseFaultRecord(record);
         
      }else if(Constants.EXERCISE_TYPE_FAVORT.equals(exerciseType)){// 收藏
      }else if(Constants.EXERCISE_TYPE_FAVORT.equals(exerciseType)){// 收藏
         
         if("All".equals(groupId)){// 全部收藏
         if("All".equals(groupId)){// 全部收藏
            return exerciseExtendService.doUpdateExerciseFavorBook(currTitleNum);
         }
         
@@ -868,16 +868,16 @@
         result = exerciseExtendService.doUpdateExerciseFavorRecord(record);
      }else{
         
         result = new Result(false, "exerciseType传值错误:exerciseType="+exerciseType);
         result = new Result(false, "exerciseType传值错误:exerciseType="+exerciseType);
      }
      
      return result;
   }
   /**
    * APP2.0: 查询错题 收藏笔记个数
    * APP2.0: 查询错题 收藏笔记个数
    * URL:    /exercise/Extend/queryExerCount
    * @return 键值对:iFavor 收藏个数   iFault 错误个数
    * @return 键值对:iFavor 收藏个数   iFault 错误个数
    */
   @RequestMapping(value = "exerBookInfo", method = RequestMethod.GET)
   public @ResponseBody Result queryExtendListCount(
@@ -885,45 +885,45 @@
      
      Map<String, Object> map = null;
      Result result = new Result(false);
      if(Constants.EXERCISE_TYPE_FAULT.equals(exerciseType)){// 错题本
      if(Constants.EXERCISE_TYPE_FAULT.equals(exerciseType)){// 错题本
         
         map = exerciseExtendService.queryExerFaultInfo();
         
      }else if(Constants.EXERCISE_TYPE_FAVORT.equals(exerciseType)){// 收藏
      }else if(Constants.EXERCISE_TYPE_FAVORT.equals(exerciseType)){// 收藏
         
         map = exerciseExtendService.queryExerFavorInfo();
      }else{
         
         result = new Result(false, "exerciseType传值错误:exerciseType="+exerciseType);
         result = new Result(false, "exerciseType传值错误:exerciseType="+exerciseType);
      }
      
      result = new Result(true, "查询成功");
      result = new Result(true, "查询成功");
      result.setData(map);
      
      return result; 
   }
   /**
    * APP2.0: 题目答案分析
    * APP2.0: 题目答案分析
    * URL:    /exercise/Extend/itemstatisics
    * 
    * 
    * 
    * @param groupId         习题组ID
    * @param groupId         习题组ID
    * @return
    */
   @RequestMapping(value = "itemStatisics", method = RequestMethod.GET)
   public @ResponseBody List<Map<String, Object>> doQueryExerciseItemStatisics(
         @RequestParam(value = "exerciseType")  String exerciseType)  {
      
      // 查询结果
      // 查询结果
      List<Map<String, Object>> resultLst = exerciseExtendService.queryExerciseItemStatisics(exerciseType);
      
      return resultLst;
   } 
   
   /**
    * 错题统计接口
    * 错题统计接口
    * URL:    /exercise/Extend/faultStatis
    * 
    * @return
@@ -935,10 +935,10 @@
   } 
   
   /**
    *得到 错题统计信息
    *得到 错题统计信息
    * URL:    /exercise/Extend/faultStatis
    * 
    * type :week 最近一周   month:最近一月  year:最近一年
    * type :week 最近一周   month:最近一月  year:最近一年
    * @return
    */
   @RequestMapping(value = "getfaultStatis", method = RequestMethod.GET)
@@ -948,7 +948,7 @@
      return exerciseExtendService.doGetFaultStatisInfo(type);
   } 
   
   /**-----------------------------------------APP  V2.0 接口 end----------------------------------------------------------- */
   /**-----------------------------------------APP  V2.0 接口 end----------------------------------------------------------- */
   
   @RequestMapping(value = "initFaultStatisData", method = RequestMethod.GET)
   public @ResponseBody Result doInitExerRecentRecord()  {
@@ -980,8 +980,8 @@
      
      List<Object[]> lstData2 =commonDAO.findwithRawResult(sql2, new ArrayList<Object>());
      
      if(lstData2.isEmpty()){//抛异常回滚
         return new Result(false,"错题数据为空2222");
      if(lstData2.isEmpty()){//抛异常回滚
         return new Result(false,"错题数据为空2222");
      }
      
      String hql_existRecord = "from ExerciseFaultRecord where  resumeBookId=? and exerciseGroupId=? ";
@@ -1020,7 +1020,7 @@
         i++;
      }
      
      return new Result(true, "更新ExerciseFault条数:"+i);
      return new Result(true, "更新ExerciseFault条数:"+i);
   }
   
   
@@ -1042,8 +1042,8 @@
      
      List<Object[]> lstData2 =commonDAO.findwithRawResult(sql2, new ArrayList<Object>());
      
      if(lstData2.isEmpty()){//抛异常回滚
         return new Result(false,"收藏数据为空2222");
      if(lstData2.isEmpty()){//抛异常回滚
         return new Result(false,"收藏数据为空2222");
      }
      
      String hql_existRecord = "from ExerciseFavoriteRecord where  favoriteBookId=? and exerciseGroupId=? ";
@@ -1083,7 +1083,7 @@
         i++;
      }
      
      return new Result(true,"|更新ExerciseFavorite条数:"+i);
      return new Result(true,"|更新ExerciseFavorite条数:"+i);
   }
   
   @SuppressWarnings("unchecked")
@@ -1136,6 +1136,6 @@
         }
      }
      
      return new Result(true,"|更新ExerciseItemAnswerU条数:"+j);
      return new Result(true,"|更新ExerciseItemAnswerU条数:"+j);
   }*/
}