| | |
| | | import com.qxueyou.scc.user.model.ExportUserScore; |
| | | |
| | | /** |
| | | * 练习题目控制 |
| | | * 练习题目控制 |
| | | * @author zhiyong |
| | | * |
| | | */ |
| | | @Controller |
| | | @RequestMapping(value = "/exercise/Exercise") |
| | | public class ExerciseController { |
| | | /** 日志 */ |
| | | /** 日志 */ |
| | | private static final Logger log = LogManager.getLogger("ExerciseController"); |
| | | |
| | | /** commonDAO */ |
| | | @Autowired |
| | | private CommonDAO commonDAO; |
| | | |
| | | /** 练习 service */ |
| | | /** 练习 service */ |
| | | @Autowired |
| | | private IExerciseService exerciseService; |
| | | |
| | | /** 练习导入 service */ |
| | | /** 练习导入 service */ |
| | | @Autowired |
| | | private IExercisePyService exercisePyService; |
| | | |
| | | /** 练习V2.0版本接口service */ |
| | | /** 练习V2.0版本接口service */ |
| | | @Autowired |
| | | private IExerciseVerService exerciseVerService; |
| | | |
| | | /** 练习V2.0版本接口service */ |
| | | /** 练习V2.0版本接口service */ |
| | | // @Autowired |
| | | // IConfigService cfg; |
| | | |
| | |
| | | @Autowired |
| | | IOssService ossService; |
| | | |
| | | /** 消息发送 service */ |
| | | /** 消息发送 service */ |
| | | // @Autowired |
| | | // IMsgVenderService easemobService; |
| | | |
| | | /** 组id */ |
| | | /** 组id */ |
| | | private static final String GROUP_ID = "groupId"; |
| | | |
| | | /** 做题记录id */ |
| | | /** 做题记录id */ |
| | | private static final String EXERCISE_RECORD_ID = "exerciseRecordId"; |
| | | |
| | | /** ---------------------------APP V2.0接口 start----------------------*/ |
| | | /** ---------------------------APP V2.0接口 start----------------------*/ |
| | | /** |
| | | * APP2.0: 获取家庭作业list |
| | | * APP2.0: 获取家庭作业list |
| | | * URL: /exercise/Exercise/homeWorkListNew |
| | | * |
| | | * |
| | | *请求参数={ |
| | | subjectId:课程id,//可选,用于高校版 |
| | | page:当前页,//必传,大于0 |
| | | limit:每页限制条数,//必传,大于0 |
| | | *请求参数={ |
| | | subjectId:课程id,//可选,用于高校版 |
| | | page:当前页,//必传,大于0 |
| | | limit:每页限制条数,//必传,大于0 |
| | | } |
| | | 返回参数=[ |
| | | 返回参数=[ |
| | | { |
| | | GROUP_ID:"组id", |
| | | "classId":班级id, |
| | | "courseId":科目id, |
| | | "orgId":机构id, |
| | | "subjectId":课程id, |
| | | "name":"组名", |
| | | "type":组类型 , |
| | | "updateTime":更新时间, |
| | | "answerUpdateTime":本套题答题更新时间, |
| | | "allCount":题目总数, |
| | | "exerciseTime":"考试时间", |
| | | EXERCISE_RECORD_ID:"记录id", |
| | | "doCount": 做题个数, |
| | | "correctCount": 正确个数, |
| | | "submitNumber":已提交人数(家庭作业), |
| | | "currTitleNumber":当前做题序号, |
| | | "status":做题状态(0:未提交 1:已提交), |
| | | "completionRate": 完成率, |
| | | "accuracy": 正确率, |
| | | "score": 分数, |
| | | "extendAllCount":错题本、收藏本总数 |
| | | GROUP_ID:"组id", |
| | | "classId":班级id, |
| | | "courseId":科目id, |
| | | "orgId":机构id, |
| | | "subjectId":课程id, |
| | | "name":"组名", |
| | | "type":组类型 , |
| | | "updateTime":更新时间, |
| | | "answerUpdateTime":本套题答题更新时间, |
| | | "allCount":题目总数, |
| | | "exerciseTime":"考试时间", |
| | | EXERCISE_RECORD_ID:"记录id", |
| | | "doCount": 做题个数, |
| | | "correctCount": 正确个数, |
| | | "submitNumber":已提交人数(家庭作业), |
| | | "currTitleNumber":当前做题序号, |
| | | "status":做题状态(0:未提交 1:已提交), |
| | | "completionRate": 完成率, |
| | | "accuracy": 正确率, |
| | | "score": 分数, |
| | | "extendAllCount":错题本、收藏本总数 |
| | | }, |
| | | ...循环多个 |
| | | ...循环多个 |
| | | ] |
| | | * |
| | | * @return |
| | |
| | | @RequestParam(value="subjectId", required = false) String subjectId, |
| | | @RequestParam(value="page") int page, |
| | | @RequestParam(value="limit") int limit, |
| | | @RequestParam(value="selected", required = false) Integer selected) {// 0:全部 1:未开始 2:做题中 3:已提交 |
| | | @RequestParam(value="selected", required = false) Integer selected) {// 0:全部 1:未开始 2:做题中 3:已提交 |
| | | |
| | | // 获取group data |
| | | // 获取group data |
| | | List<ExerGroupResponseData> lstResult = getExericseListData(ExerciseGroup.TYPE_HOMEWORK, |
| | | null, page, limit, selected, null); |
| | | |
| | |
| | | |
| | | |
| | | /** |
| | | * APP2.0: 获取章节练习list |
| | | * APP2.0: 获取章节练习list |
| | | * URL: /exercise/Exercise/chapterListNew |
| | | * |
| | | * @return |
| | |
| | | @RequestParam(value="limit") int limit, |
| | | @RequestParam(value="selected", required = false) Integer selected, String chapterId) { |
| | | |
| | | // 获取group data |
| | | // 获取group data |
| | | List<ExerGroupResponseData> lstResult = getExericseListData(ExerciseGroup.TYPE_CHAPTER_ITEM, |
| | | subjectId, page, limit, selected, chapterId); |
| | | |
| | |
| | | } |
| | | |
| | | /** |
| | | * APP2.0: 获取模拟考试list |
| | | * APP2.0: 获取模拟考试list |
| | | * URL: /exercise/Exercise/examsListNew |
| | | * |
| | | * @return |
| | |
| | | @RequestParam(value="limit") int limit, |
| | | @RequestParam(value="selected", required = false) Integer selected) { |
| | | |
| | | // 获取group data |
| | | // 获取group data |
| | | List<ExerGroupResponseData> lstResult = getExericseListData(ExerciseGroup.TYPE_MOCK_EXAM, |
| | | null, page, limit, selected, null); |
| | | |
| | |
| | | } |
| | | |
| | | /** |
| | | * APP2.0: 获取专题练习list |
| | | * APP2.0: 获取专题练习list |
| | | * URL: /exercise/Exercise/topicListNew |
| | | * |
| | | * @return |
| | |
| | | @RequestParam(value="limit") int limit, |
| | | @RequestParam(value="selected", required = false) Integer selected) { |
| | | |
| | | // 获取group data |
| | | // 获取group data |
| | | List<ExerGroupResponseData> lstResult = getExericseListData(ExerciseGroup.TYPE_EXERCISE_TOPIC, |
| | | null, page, limit, selected, null); |
| | | |
| | |
| | | } |
| | | |
| | | /** |
| | | * APP2.0: 获取专题练习list |
| | | * APP2.0: 获取专题练习list |
| | | * URL: /exercise/Exercise/freeListNew |
| | | * |
| | | * @return |
| | |
| | | @RequestParam(value="limit") int limit, |
| | | @RequestParam(value="selected", required = false) Integer selected) { |
| | | |
| | | // 获取group data |
| | | // 获取group data |
| | | List<ExerGroupResponseData> lstResult = getExericseListData(ExerciseGroup.TYPE_EXERCISE_FREE, |
| | | null, page, limit, selected, null); |
| | | |
| | |
| | | } |
| | | |
| | | /** |
| | | * 获取练习列表数据 |
| | | * 获取练习列表数据 |
| | | * @param exerType |
| | | * @param subjectId |
| | | * @param page |
| | | * @param limit |
| | | * @param selected // 0:全部 1:未开始 2:做题中 3:已提交 |
| | | * @param selected // 0:全部 1:未开始 2:做题中 3:已提交 |
| | | * @return |
| | | */ |
| | | private List<ExerGroupResponseData> getExericseListData(short exerType, |
| | |
| | | int pageSize = limit; |
| | | Integer iSelected = selected; |
| | | |
| | | // 1.分页信息 |
| | | // 1.分页信息 |
| | | if(pageNum < 1){ |
| | | pageNum = 1; |
| | | } |
| | | if(pageSize < 1){ |
| | | pageSize = 1; |
| | | } |
| | | if(iSelected == null){//为空设置为 全部 |
| | | if(iSelected == null){//为空设置为 全部 |
| | | iSelected = 0; |
| | | } |
| | | Pager pager = new Pager(); |
| | | pager.setPageNum(pageNum); |
| | | pager.setPageSize(limit); |
| | | |
| | | // 2.得到列表数据 |
| | | // 2.得到列表数据 |
| | | List<ExerGroupResponseData> lstResult = exerciseVerService.queryExericseListData(exerType,subjectId,pager,iSelected, chapterId); |
| | | |
| | | if(null == lstResult){// 结果转换成 [] |
| | | if(null == lstResult){// 结果转换成 [] |
| | | lstResult = new ArrayList<ExerGroupResponseData>(); |
| | | } |
| | | |
| | |
| | | } |
| | | |
| | | /** |
| | | * APP2.0: 查询做题记录 |
| | | * APP2.0: 查询做题记录 |
| | | * URL: /exercise/Exercise/exerRecord |
| | | * 请求参数={ |
| | | exerType:练习类型,//必传 |
| | | subjectId:课程id,//可选,用于高校版 |
| | | page:当前页,//必传,大于0 |
| | | limit:每页限制条数,//必传,大于0 |
| | | * 请求参数={ |
| | | exerType:练习类型,//必传 |
| | | subjectId:课程id,//可选,用于高校版 |
| | | page:当前页,//必传,大于0 |
| | | limit:每页限制条数,//必传,大于0 |
| | | } |
| | | |
| | | 返回参数=[ |
| | | 返回参数=[ |
| | | { |
| | | GROUP_ID:"组id", |
| | | "classId":班级id, |
| | | "courseId":科目id, |
| | | "orgId":机构id, |
| | | "subjectId":课程id, |
| | | "name":"组名", |
| | | "type":组类型 , |
| | | "updateTime":更新时间, |
| | | "answerUpdateTime":本套题答题更新时间, |
| | | "allCount":题目总数, |
| | | "exerciseTime":"考试时间", |
| | | EXERCISE_RECORD_ID:"记录id", |
| | | "doCount": 做题个数, |
| | | "correctCount": 正确个数, |
| | | "submitNumber":已提交人数(家庭作业), |
| | | "currTitleNumber":当前做题序号, |
| | | "status":做题状态(0:未提交 1:已提交), |
| | | "completionRate": 完成率, |
| | | "accuracy": 正确率, |
| | | "score": 分数, |
| | | "extendAllCount":错题本、收藏本总数 |
| | | GROUP_ID:"组id", |
| | | "classId":班级id, |
| | | "courseId":科目id, |
| | | "orgId":机构id, |
| | | "subjectId":课程id, |
| | | "name":"组名", |
| | | "type":组类型 , |
| | | "updateTime":更新时间, |
| | | "answerUpdateTime":本套题答题更新时间, |
| | | "allCount":题目总数, |
| | | "exerciseTime":"考试时间", |
| | | EXERCISE_RECORD_ID:"记录id", |
| | | "doCount": 做题个数, |
| | | "correctCount": 正确个数, |
| | | "submitNumber":已提交人数(家庭作业), |
| | | "currTitleNumber":当前做题序号, |
| | | "status":做题状态(0:未提交 1:已提交), |
| | | "completionRate": 完成率, |
| | | "accuracy": 正确率, |
| | | "score": 分数, |
| | | "extendAllCount":错题本、收藏本总数 |
| | | }, |
| | | ...循环多个 |
| | | ...循环多个 |
| | | ] |
| | | * @param page |
| | | * @param start |
| | |
| | | int pageNum = page; |
| | | int pageSize = limit; |
| | | |
| | | // 1.分页信息 |
| | | // 1.分页信息 |
| | | if(pageNum < 1){ |
| | | pageNum = 1; |
| | | } |
| | |
| | | |
| | | |
| | | StringBuffer hql = new StringBuffer(512); |
| | | // 2.查询结果 |
| | | // 2.查询结果 |
| | | hql.append("select g," |
| | | + " r.recordId,r.updateTime,r.doCount,r.titleMaxNumber,r.status," |
| | | + " r.correctCount,r.completionRate,r.score,r.accuracy,e.repeatFlag,e.classAccuracy, " |
| | |
| | | |
| | | List<ExerGroupResponseData> lstResult = new ArrayList<ExerGroupResponseData>(lstRecord.size()); |
| | | |
| | | // 3.重组字段 |
| | | // 3.重组字段 |
| | | for(Object[] obj:lstRecord){ |
| | | |
| | | // 组装练习做题记录列表数据 |
| | | // 组装练习做题记录列表数据 |
| | | lstResult.add(packagingExerciseRecordListData(exerType, obj)); |
| | | |
| | | } |
| | |
| | | } |
| | | |
| | | /** |
| | | * 组装练习做题记录列表数据 |
| | | * 组装练习做题记录列表数据 |
| | | * @param exerType |
| | | * @param obj |
| | | * @param group |
| | |
| | | ExerciseGroup group = (ExerciseGroup)obj[0]; |
| | | ExerGroupResponseData result = new ExerGroupResponseData(); |
| | | |
| | | // 赋值字段值 |
| | | // 赋值字段值 |
| | | BeanUtils.copyProperties(group, result); |
| | | |
| | | result.setExerciseRecordId(String.valueOf(obj[1])); |
| | |
| | | result.setCurrTitleNumber(String.valueOf(obj[4])); |
| | | result.setStatus(String.valueOf(obj[5])); |
| | | |
| | | // 组装练习做题记录部分参数 |
| | | // 组装练习做题记录部分参数 |
| | | packagingExerciseRecordListParam(obj, result); |
| | | |
| | | result.setExtendAllCount(group.getAllCount()); |
| | | |
| | | if(obj[10] == null){ |
| | | if(exerType == ExerciseGroup.TYPE_HOMEWORK){// 家庭作业 |
| | | if(exerType == ExerciseGroup.TYPE_HOMEWORK){// 家庭作业 |
| | | result.setRepeatFlag(false); |
| | | }else{ |
| | | result.setRepeatFlag(true); |
| | | } |
| | | }else{ |
| | | result.setRepeatFlag(!(boolean)obj[10]);// true 可以重做 false不能重做 |
| | | result.setRepeatFlag(!(boolean)obj[10]);// true 可以重做 false不能重做 |
| | | } |
| | | |
| | | // 班级正确率 |
| | | // 班级正确率 |
| | | result.setClassAccuracy(obj[11] == null ? "--" :obj[11]+"%"); |
| | | |
| | | if(exerType == ExerciseGroup.TYPE_EXERCISE_FREE |
| | | || exerType == ExerciseGroup.TYPE_MOCK_EXAM ){// 自由练习 模拟考试 |
| | | || exerType == ExerciseGroup.TYPE_MOCK_EXAM ){// 自由练习 模拟考试 |
| | | result.setExerciseTime(String.valueOf(obj[12])); |
| | | result.setExerciseStrategy(String.valueOf(obj[13])); |
| | | result.setExerciseSource(String.valueOf(obj[14])); |
| | |
| | | } |
| | | |
| | | /** |
| | | * 组装练习做题记录部分参数 拆分方法 |
| | | * 组装练习做题记录部分参数 拆分方法 |
| | | * @param obj |
| | | * @param result |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * APP2.0: 获取家庭作业练习题目数据 |
| | | * APP2.0: 获取家庭作业练习题目数据 |
| | | * URL: /exercise/Exercise/homeworkExercise |
| | | * |
| | | * 请求参数={ |
| | | groupId:组id,//必传 |
| | | exerciseRecordId:当前页,//必传,没有传"" |
| | | getExercise:是否更新题目,//必传, |
| | | boolean值,没有传false |
| | | getAnswer:是否更新答案,//必传, |
| | | boolean值,没有传false |
| | | * 请求参数={ |
| | | groupId:组id,//必传 |
| | | exerciseRecordId:当前页,//必传,没有传"" |
| | | getExercise:是否更新题目,//必传, |
| | | boolean值,没有传false |
| | | getAnswer:是否更新答案,//必传, |
| | | boolean值,没有传false |
| | | } |
| | | |
| | | 返回参数={ |
| | | "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, |
| | | EXERCISE_RECORD_ID:记录id, |
| | | "userId":用户id |
| | | "exerciseItemId":练习id, |
| | | EXERCISE_RECORD_ID:记录id, |
| | | "userId":用户id |
| | | }, |
| | | ... 循环多个 |
| | | ... 循环多个 |
| | | ] |
| | | } |
| | | * @param groupId 组id |
| | | * @param exerciseRecordId 练习记录id |
| | | * @param getExercise 是否获取练习题 |
| | | * @param getAnswer 是否获取答案 |
| | | * @param groupId 组id |
| | | * @param exerciseRecordId 练习记录id |
| | | * @param getExercise 是否获取练习题 |
| | | * @param getAnswer 是否获取答案 |
| | | * @return |
| | | */ |
| | | @RequestMapping(value = "homeworkExercise", method = RequestMethod.GET) |
| | |
| | | @RequestParam(value = "getExercise") boolean getExercise, |
| | | @RequestParam(value = "getAnswer") boolean getAnswer) { |
| | | |
| | | // 获取结果 |
| | | // 获取结果 |
| | | ExerItemResponseData result = exerciseVerService.queryExerItemResponseData(groupId, |
| | | exerciseRecordId, getExercise, getAnswer, ExerciseGroup.TYPE_HOMEWORK); |
| | | |
| | |
| | | } |
| | | |
| | | /** |
| | | * APP2.0: 获取模拟考试练习题目数据 |
| | | * APP2.0: 获取模拟考试练习题目数据 |
| | | * URL: /exercise/Exercise/examExercise |
| | | * @param groupId 组id |
| | | * @param exerciseRecordId 练习记录id |
| | | * @param getExercise 是否获取练习题 |
| | | * @param getAnswer 是否获取答案 |
| | | * @param groupId 组id |
| | | * @param exerciseRecordId 练习记录id |
| | | * @param getExercise 是否获取练习题 |
| | | * @param getAnswer 是否获取答案 |
| | | * @return |
| | | */ |
| | | @RequestMapping(value = "examExercise", method = RequestMethod.GET) |
| | |
| | | @RequestParam(value = "getExercise") boolean getExercise, |
| | | @RequestParam(value = "getAnswer") boolean getAnswer) { |
| | | |
| | | // 获取结果 |
| | | // 获取结果 |
| | | ExerItemResponseData result = exerciseVerService.queryExerItemResponseData(groupId, |
| | | exerciseRecordId, getExercise, getAnswer, ExerciseGroup.TYPE_MOCK_EXAM); |
| | | |
| | |
| | | |
| | | |
| | | /** |
| | | * APP2.0: 获取章节练习题目数据 |
| | | * APP2.0: 获取章节练习题目数据 |
| | | * URL: /exercise/Exercise/chapterExercise |
| | | * @param groupId 组id |
| | | * @param exerciseRecordId 练习记录id |
| | | * @param getExercise 是否获取练习题 |
| | | * @param getAnswer 是否获取答案 |
| | | * @param groupId 组id |
| | | * @param exerciseRecordId 练习记录id |
| | | * @param getExercise 是否获取练习题 |
| | | * @param getAnswer 是否获取答案 |
| | | * @return |
| | | */ |
| | | @RequestMapping(value = "chapterExercise", method = RequestMethod.GET) |
| | |
| | | @RequestParam(value = "getExercise") boolean getExercise, |
| | | @RequestParam(value = "getAnswer") boolean getAnswer) { |
| | | |
| | | // 获取结果 |
| | | // 获取结果 |
| | | ExerItemResponseData result = exerciseVerService.queryExerItemResponseData(groupId, |
| | | exerciseRecordId, getExercise, getAnswer, ExerciseGroup.TYPE_CHAPTER_ITEM); |
| | | |
| | |
| | | } |
| | | |
| | | /** |
| | | * APP2.0: 获取专题练习题目数据 |
| | | * APP2.0: 获取专题练习题目数据 |
| | | * URL: /exercise/Exercise/topicExercise |
| | | * @param groupId 组id |
| | | * @param exerciseRecordId 练习记录id |
| | | * @param getExercise 是否获取练习题 |
| | | * @param getAnswer 是否获取答案 |
| | | * @param groupId 组id |
| | | * @param exerciseRecordId 练习记录id |
| | | * @param getExercise 是否获取练习题 |
| | | * @param getAnswer 是否获取答案 |
| | | * @return |
| | | */ |
| | | @RequestMapping(value = "topicExercise", method = RequestMethod.GET) |
| | |
| | | @RequestParam(value = "getExercise") boolean getExercise, |
| | | @RequestParam(value = "getAnswer") boolean getAnswer) { |
| | | |
| | | // 获取结果 |
| | | // 获取结果 |
| | | ExerItemResponseData result = exerciseVerService.queryExerItemResponseData(groupId, |
| | | exerciseRecordId, getExercise, getAnswer, ExerciseGroup.TYPE_EXERCISE_TOPIC); |
| | | |
| | |
| | | |
| | | |
| | | /** |
| | | * APP2.0: 获取专题练习题目数据 |
| | | * APP2.0: 获取专题练习题目数据 |
| | | * URL: /exercise/Exercise/freeExercise |
| | | * @param groupId 组id |
| | | * @param exerciseRecordId 练习记录id |
| | | * @param getExercise 是否获取练习题 |
| | | * @param getAnswer 是否获取答案 |
| | | * @param groupId 组id |
| | | * @param exerciseRecordId 练习记录id |
| | | * @param getExercise 是否获取练习题 |
| | | * @param getAnswer 是否获取答案 |
| | | * @return |
| | | */ |
| | | @RequestMapping(value = "freeExercise", method = RequestMethod.GET) |
| | |
| | | @RequestParam(value = "getExercise") boolean getExercise, |
| | | @RequestParam(value = "getAnswer") boolean getAnswer) { |
| | | |
| | | // 获取结果 |
| | | // 获取结果 |
| | | ExerItemResponseData result = exerciseVerService.queryExerItemResponseData(groupId, |
| | | exerciseRecordId, getExercise, getAnswer, ExerciseGroup.TYPE_EXERCISE_FREE); |
| | | |
| | |
| | | } |
| | | |
| | | /** |
| | | * APP2.0: 获取专题练习题目数据 |
| | | * APP2.0: 获取专题练习题目数据 |
| | | * URL: /exercise/Exercise/newFreeExercise |
| | | * |
| | | * { |
| | | * source: 练习来源(1:练习题库 2:考试题库 3:家庭作业) 多个以逗号分开 |
| | | strategy:做题方式(1:未做题优先 2:错题优先) |
| | | mode:做题模式(1:练习模式 2:考试模式) |
| | | count:数量(30 50 100 200) |
| | | exerciseTime:练习时间 |
| | | * source: 练习来源(1:练习题库 2:考试题库 3:家庭作业) 多个以逗号分开 |
| | | strategy:做题方式(1:未做题优先 2:错题优先) |
| | | mode:做题模式(1:练习模式 2:考试模式) |
| | | count:数量(30 50 100 200) |
| | | exerciseTime:练习时间 |
| | | * } |
| | | * |
| | | * @return |
| | |
| | | return null; |
| | | } |
| | | |
| | | // 根据条件获取自由练习 |
| | | // 根据条件获取自由练习 |
| | | ExerItemResponseData result = exerciseVerService.doGetFreeExercise( |
| | | null, source, strategy, mode, count, exerciseTime); |
| | | |
| | |
| | | |
| | | |
| | | /** |
| | | * APP2.0: 提交练习答案 |
| | | * APP2.0: 提交练习答案 |
| | | * URL: /exercise/Exercise/exerAnswers |
| | | * |
| | | * 请求参数={ |
| | | "exerciseGroupId": 组id, |
| | | EXERCISE_RECORD_ID: 记录id, |
| | | * 请求参数={ |
| | | "exerciseGroupId": 组id, |
| | | EXERCISE_RECORD_ID: 记录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":{EXERCISE_RECORD_ID:练习记录id, |
| | | "updateTime":修改时间 |
| | | 返回参数={ |
| | | "success":true,//true:成功 false:失败 |
| | | "attrs":{EXERCISE_RECORD_ID:练习记录id, |
| | | "updateTime":修改时间 |
| | | }, |
| | | "msg":"提交成功",//结果信息 |
| | | "msg":"提交成功",//结果信息 |
| | | } |
| | | |
| | | * |
| | |
| | | public @ResponseBody Object doSubmitExerAnswer( |
| | | @RequestParam(value = "answers") String answers) { |
| | | |
| | | // 用户本次做题提交的数据 |
| | | // 用户本次做题提交的数据 |
| | | List<ExerciseItemAnswerData> lstAnswers = null; |
| | | |
| | | Result result = new Result(false); |
| | |
| | | try { |
| | | ObjectMapper mapper = new ObjectMapper(); |
| | | |
| | | // 装换json到对象 |
| | | // 装换json到对象 |
| | | ExerciseSubmitAnswerData answerData = mapper.readValue(answers, ExerciseSubmitAnswerData.class); |
| | | |
| | | lstAnswers = answerData.getItems(); |
| | | |
| | | // 记录id |
| | | // 记录id |
| | | String initExerciseRecordId = answerData.getExerciseRecordId(); |
| | | |
| | | if(lstAnswers.isEmpty() |
| | |
| | | initExerciseRecordId, ExerciseDataSubmitLog.TYPE_SUBMIT_ANSWER, |
| | | ExerciseDataSubmitLog.STATUS_FAILED, "/exercise/Exercise/exerAnswers"); |
| | | |
| | | return new Result(false,"提交数据异常"); |
| | | return new Result(false,"提交数据异常"); |
| | | } |
| | | |
| | | // 1.---------记录提交的数据日志 |
| | | // 记录提交的数据日志 |
| | | // 1.---------记录提交的数据日志 |
| | | // 记录提交的数据日志 |
| | | String exerciseDataLogId = exerciseVerService.doSaveExerciseDataSubmitLog(answers, |
| | | initExerciseRecordId, ExerciseDataSubmitLog.TYPE_SUBMIT_ANSWER, |
| | | ExerciseDataSubmitLog.STATUS_SUCCESS,"/exercise/Exercise/exerAnswers"); |
| | | |
| | | // 2.-------- 提交答案 |
| | | // 操作练习数据 |
| | | // 2.-------- 提交答案 |
| | | // 操作练习数据 |
| | | Map<String,Object> resultMap = exerciseVerService.doOperExerciseAnswerData(answerData); |
| | | |
| | | result = new Result(true, "答案提交成功"); |
| | | result = new Result(true, "答案提交成功"); |
| | | result.setData(resultMap); |
| | | |
| | | // 3.-------- 班级统计数据 |
| | | // 3.-------- 班级统计数据 |
| | | if(resultMap.get("exerciseGroupId") != null){ |
| | | |
| | | String exerciseGroupId = String.valueOf(resultMap.get("exerciseGroupId")); |
| | | |
| | | // 2.发送班级排名请求 |
| | | // 2.发送班级排名请求 |
| | | exerciseVerService.sendUpdateClassRankMsg(exerciseGroupId); |
| | | |
| | | // 3.发送 题目的全站统计 、个人统计、班级正确率请求消息 |
| | | // 3.发送 题目的全站统计 、个人统计、班级正确率请求消息 |
| | | exerciseVerService.sendUpdateExerItemStatisticsMsg(exerciseGroupId, answerData); |
| | | //exerciseVerService.doStatisUserExerciseItemData(ClientUtils.getUserId(), ClientUtils.getUserName(), answerData); |
| | | } |
| | | |
| | | // 4.---------更新本次提交的数据日志exerciseRecordId |
| | | // 4.---------更新本次提交的数据日志exerciseRecordId |
| | | if(StringUtils.isBlank(initExerciseRecordId) |
| | | && resultMap.get(EXERCISE_RECORD_ID) != null){// 为空 说明第一次提交 更新日志记录id |
| | | && resultMap.get(EXERCISE_RECORD_ID) != null){// 为空 说明第一次提交 更新日志记录id |
| | | |
| | | exerciseRecordId = String.valueOf(resultMap.get(EXERCISE_RECORD_ID)); |
| | | |
| | |
| | | |
| | | } catch (Exception e) { |
| | | |
| | | result = new Result(false, "提交练习答案请求异常"); |
| | | log.error("提交练习答案请求异常===",e); |
| | | result = new Result(false, "提交练习答案请求异常"); |
| | | log.error("提交练习答案请求异常===",e); |
| | | |
| | | exerciseVerService.doSaveExerciseDataSubmitLog(answers, |
| | | exerciseRecordId, ExerciseDataSubmitLog.TYPE_SUBMIT_ANSWER, |
| | |
| | | |
| | | |
| | | /** |
| | | * APP2.0: 提交练习答案 |
| | | * APP2.0: 提交练习答案 |
| | | * URL: /exercise/Exercise/exerAnswers |
| | | * |
| | | * 请求参数=[{ |
| | | "exerciseGroupId": 组id, |
| | | EXERCISE_RECORD_ID: 记录id, |
| | | * 请求参数=[{ |
| | | "exerciseGroupId": 组id, |
| | | EXERCISE_RECORD_ID: 记录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":[{EXERCISE_RECORD_ID:练习记录id, |
| | | exerciseGroupId:练习组id, |
| | | isNewRecord:是否为新增的record(true:是 false:否) |
| | | "updateTime":修改时间 |
| | | 返回参数={"success":true,//true:成功 false:失败 |
| | | "attrs":[{EXERCISE_RECORD_ID:练习记录id, |
| | | exerciseGroupId:练习组id, |
| | | isNewRecord:是否为新增的record(true:是 false:否) |
| | | "updateTime":修改时间 |
| | | },...], |
| | | "msg":"提交成功",//结果信息 |
| | | "msg":"提交成功",//结果信息 |
| | | } |
| | | |
| | | * |
| | |
| | | public @ResponseBody Object doSubmitMutiExerAnswer( |
| | | @RequestParam(value = "answers") String answers) { |
| | | |
| | | // 用户本次做题提交的数据 |
| | | // 用户本次做题提交的数据 |
| | | List<ExerciseSubmitAnswerData> lstRecord = null; |
| | | List<ExerciseItemAnswerData> lstAnswers= null; |
| | | String exerciseRecordId = null; |
| | |
| | | try { |
| | | ObjectMapper mapper = new ObjectMapper(); |
| | | |
| | | // 装换json到对象 |
| | | // 装换json到对象 |
| | | ExerciseSubmitAnswerDataList answerDataList = mapper.readValue(answers, ExerciseSubmitAnswerDataList.class); |
| | | |
| | | lstRecord = answerDataList.getDatas(); |
| | |
| | | continue; |
| | | } |
| | | |
| | | // 记录id |
| | | // 记录id |
| | | String initExerciseRecordId = answerData.getExerciseRecordId(); |
| | | |
| | | // 记录提交的数据日志 |
| | | // 记录提交的数据日志 |
| | | String recordData = JSONObject.toJSONString(answerData); |
| | | |
| | | lstAnswers = answerData.getItems(); |
| | | |
| | | if(lstAnswers.isEmpty() |
| | | && !ExerciseRecord.STATUS_SUBMIT.equals(answerData.getStatus()) |
| | | && answerData.getSubmitType() != 1){// 仅提交 或仅仅本地无网重做 |
| | | && answerData.getSubmitType() != 1){// 仅提交 或仅仅本地无网重做 |
| | | |
| | | exerciseVerService.doSaveExerciseDataSubmitLog(recordData, |
| | | initExerciseRecordId, ExerciseDataSubmitLog.TYPE_SUBMIT_ANSWER, |
| | |
| | | continue; |
| | | } |
| | | |
| | | // 1.---------记录提交的数据日志 |
| | | // 1.---------记录提交的数据日志 |
| | | String exerciseDataLogId = exerciseVerService.doSaveExerciseDataSubmitLog(recordData, |
| | | initExerciseRecordId, ExerciseDataSubmitLog.TYPE_SUBMIT_ANSWER, |
| | | ExerciseDataSubmitLog.STATUS_SUCCESS,"/exercise/Exercise/exerMutiAnswers"); |
| | | |
| | | // 2.-------- 提交答案 |
| | | // 操作练习数据 |
| | | // 2.-------- 提交答案 |
| | | // 操作练习数据 |
| | | returnMap = exerciseVerService.doOperExerciseAnswerData(answerData); |
| | | if(StringUtils.isBlank(initExerciseRecordId)){// 表示recordId为新增 |
| | | if(StringUtils.isBlank(initExerciseRecordId)){// 表示recordId为新增 |
| | | returnMap.put("isNewRecord", true); |
| | | }else{ |
| | | returnMap.put("isNewRecord", false); |
| | | } |
| | | |
| | | resultList.add(returnMap); |
| | | // 3.-------- 班级统计数据; |
| | | // 3.-------- 班级统计数据; |
| | | if(returnMap.get("exerciseGroupId") != null){ |
| | | |
| | | String exerciseGroupId = String.valueOf(returnMap.get("exerciseGroupId")); |
| | | |
| | | // 2.发送班级排名请求 |
| | | // 2.发送班级排名请求 |
| | | exerciseVerService.sendUpdateClassRankMsg(exerciseGroupId); |
| | | |
| | | // 3.发送 题目的全站统计 个人统计请求消息 |
| | | // 3.发送 题目的全站统计 个人统计请求消息 |
| | | exerciseVerService.sendUpdateExerItemStatisticsMsg(exerciseGroupId, answerData); |
| | | } |
| | | |
| | | // 4.---------更新本次提交的数据日志exerciseRecordId |
| | | // 4.---------更新本次提交的数据日志exerciseRecordId |
| | | if(StringUtils.isBlank(initExerciseRecordId) |
| | | && returnMap.get(EXERCISE_RECORD_ID) != null){// 为空 说明第一次提交 更新日志记录id |
| | | && returnMap.get(EXERCISE_RECORD_ID) != null){// 为空 说明第一次提交 更新日志记录id |
| | | |
| | | exerciseRecordId = String.valueOf(returnMap.get(EXERCISE_RECORD_ID)); |
| | | |
| | |
| | | |
| | | resultMap.put("success", true); |
| | | resultMap.put("attrs", resultList); |
| | | resultMap.put("msg", "提交成功"); |
| | | resultMap.put("msg", "提交成功"); |
| | | |
| | | } catch (Exception e) { |
| | | |
| | | log.error("提交练习答案请求异常===",e); |
| | | resultMap.put("msg", "提交练习答案请求异常"); |
| | | log.error("提交练习答案请求异常===",e); |
| | | resultMap.put("msg", "提交练习答案请求异常"); |
| | | |
| | | exerciseVerService.doSaveExerciseDataSubmitLog(answers, |
| | | "exerMutiAnswers", ExerciseDataSubmitLog.TYPE_SUBMIT_ANSWER, |
| | |
| | | } |
| | | |
| | | /** |
| | | * APP2.0: 更新练习家庭作业、模拟考试是否提交 |
| | | * APP2.0: 更新练习家庭作业、模拟考试是否提交 |
| | | * URL: /exercise/Exercise/updateHomeExerSubmitNew |
| | | * |
| | | * @param exerciseRecordId 练习记录ID |
| | | * @param exerciseRecordId 练习记录ID |
| | | * @return |
| | | */ |
| | | @RequestMapping(value = "updateHomeExerSubmitNew", method = RequestMethod.GET) |
| | |
| | | ExerciseRecord record = commonDAO.read(ExerciseRecord.class, exerciseRecordId); |
| | | if(record == null |
| | | || !ClientUtils.getUserId().equals(record.getUserId())){ |
| | | return new Result(false, "非法操作,不是当前用户操作"); |
| | | return new Result(false, "非法操作,不是当前用户操作"); |
| | | } |
| | | |
| | | record.setStatus(ExerciseRecord.STATUS_SUBMIT); |
| | |
| | | } |
| | | |
| | | /** |
| | | * APP2.0: 更新练习家庭作业、模拟考试是否提交 |
| | | * APP2.0: 更新练习家庭作业、模拟考试是否提交 |
| | | * URL: /exercise/Exercise/updateExerciseRecord |
| | | * |
| | | * @param exerciseRecordId 练习记录ID |
| | | * @param exerciseRecordId 练习记录ID |
| | | * @return |
| | | */ |
| | | @RequestMapping(value = "updateExerciseRecord", method = RequestMethod.GET) |
| | |
| | | } |
| | | |
| | | /** |
| | | * APP2.0: 更新练习作业题号 app端重新开始做题 |
| | | * APP2.0: 更新练习作业题号 app端重新开始做题 |
| | | * URL: /exercise/Exercise/updateNewExerRecordNew |
| | | * |
| | | * @param groupId 习题组ID |
| | | * @param groupId 习题组ID |
| | | * @return |
| | | */ |
| | | @RequestMapping(value = "updateNewExerRecordNew", method = RequestMethod.GET) |
| | |
| | | |
| | | Map<String,Object> map = exerciseVerService.doInsertExerRecord(groupId); |
| | | |
| | | Result result = new Result(true, "状态更新成功"); |
| | | Result result = new Result(true, "状态更新成功"); |
| | | result.setData(map); |
| | | |
| | | return result; |
| | | } |
| | | |
| | | /** |
| | | * APP2.0: 题目答案分析 |
| | | * APP2.0: 题目答案分析 |
| | | * URL: /exercise/Exercise/itemstatisics |
| | | * |
| | | * |
| | | * |
| | | * @param groupId 习题组ID |
| | | * @param groupId 习题组ID |
| | | * @return |
| | | */ |
| | | @RequestMapping(value = "itemStatisics", method = RequestMethod.GET) |
| | | public @ResponseBody List<Map<String, Object>> doQueryExerciseItemStatisics( |
| | | @RequestParam(value = GROUP_ID) String groupId) { |
| | | |
| | | // 查询结果 |
| | | // 查询结果 |
| | | List<Map<String, Object>> resultLst = exerciseVerService.queryExerciseItemStatisics(groupId); |
| | | |
| | | return resultLst; |
| | |
| | | |
| | | |
| | | |
| | | /** -----------------------------------------------APP V2.0接口 end--------------------------------------------------------*/ |
| | | /** -----------------------------------------------APP V2.0接口 end--------------------------------------------------------*/ |
| | | |
| | | |
| | | /**------------------------------ web 后端------------------------------------------------------------------------*/ |
| | | /**------------------------------ web 后端------------------------------------------------------------------------*/ |
| | | |
| | | /** |
| | | * 练习管理主页 |
| | | * 练习管理主页 |
| | | * |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 机构练习管理主页 |
| | | * 机构练习管理主页 |
| | | * |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * (后台管理系统) |
| | | * (后台管理系统) |
| | | * |
| | | * 练习管理列表,获取列表数据 |
| | | * 练习管理列表,获取列表数据 |
| | | * |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | sql = sql.concat(" order by g.order_num asc"); |
| | | |
| | | //剔除互动及教学评估 |
| | | //剔除互动及教学评估 |
| | | List<ExerciseGroup> result = new ArrayList<ExerciseGroup>(); |
| | | if(StringUtils.isNotBlank(tid)){ |
| | | result = exerciseService.queryExerciceGroupList(sql, CollectionUtils.newList(ExerciseGroup.TYPE_EXERCISE_FREE, |
| | |
| | | } |
| | | |
| | | /** |
| | | * (后台管理系统) |
| | | * (后台管理系统) |
| | | * |
| | | * 机构练习管理列表,获取列表数据 |
| | | * 机构练习管理列表,获取列表数据 |
| | | * |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 查看练习已经指定的机构和班级 |
| | | * 查看练习已经指定的机构和班级 |
| | | * @param groupId |
| | | * @return |
| | | */ |
| | |
| | | return result; |
| | | } |
| | | /** |
| | | * 获取练习组数据 |
| | | * 获取练习组数据 |
| | | * |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 获取练习数据 |
| | | * 获取练习数据 |
| | | * |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 获取练习数据 |
| | | * 获取练习数据 |
| | | * |
| | | * @return |
| | | */ |
| | |
| | | |
| | | |
| | | /** |
| | | * (后台管理系统) |
| | | * 删除练习组(优化) |
| | | * (后台管理系统) |
| | | * 删除练习组(优化) |
| | | * |
| | | * 更新20150907:更新习题组最后修改时间 |
| | | * 更新20150907:更新习题组最后修改时间 |
| | | * @return |
| | | */ |
| | | @RequestMapping(value = "deleteNew", method = RequestMethod.POST) |
| | |
| | | } |
| | | |
| | | /** |
| | | * (后台管理系统) |
| | | * 删除练习组(优化) |
| | | * (后台管理系统) |
| | | * 删除练习组(优化) |
| | | * |
| | | * 更新20150907:更新习题组最后修改时间 |
| | | * 更新20150907:更新习题组最后修改时间 |
| | | * @return |
| | | */ |
| | | @RequestMapping(value = "deleteOrg", method = RequestMethod.POST) |
| | |
| | | |
| | | |
| | | /** |
| | | * 获取习题列表 |
| | | * 获取习题列表 |
| | | * |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * (后台管理系统) |
| | | * 管理员同步习题到班级 |
| | | * (后台管理系统) |
| | | * 管理员同步习题到班级 |
| | | * |
| | | * @param exerciseItemId |
| | | * @return |
| | |
| | | } |
| | | |
| | | /** |
| | | * (后台管理系统) |
| | | * 增加习题 |
| | | * (后台管理系统) |
| | | * 增加习题 |
| | | * |
| | | * 更新20150617:更新习题组最后修改时间 |
| | | * 更新20150617:更新习题组最后修改时间 |
| | | * @return |
| | | */ |
| | | @RequestMapping(value = "item/addOrUpdate", method = RequestMethod.POST) |
| | |
| | | createItemOption(getOptionOrder(type,'N'),params.getOptionN(), checkN, params.getOptionN_Id(), params.getOptionN_imgIds(), lstOptions); |
| | | createItemOption(getOptionOrder(type,'O'),params.getOptionO(), checkO, params.getOptionO_Id(), params.getOptionO_imgIds(), lstOptions); |
| | | |
| | | // 得到正确答案 |
| | | // 得到正确答案 |
| | | if(StringUtils.isBlank(params.getOptionE())){ |
| | | checkE=false; |
| | | } |
| | |
| | | item.setTitle(params.getTitle()); |
| | | item.setType(type); |
| | | item.setImgs(getExerciseTitleImgs(params.getTitle_imgsIds())); |
| | | if(groupId.contains("#")){// groupid结尾多# |
| | | if(groupId.contains("#")){// groupid结尾多# |
| | | groupId = groupId.substring(0, groupId.indexOf('#')); |
| | | } |
| | | // 练习不发系统通知 |
| | | // 练习不发系统通知 |
| | | //sendSysNotice(0, groupId); |
| | | return exerciseService.insertExerciseItem(groupId, item, lstOptions,params.getAnalysis()); |
| | | }else{ |
| | |
| | | item.setAnswer(answer); |
| | | item.setTitle(params.getTitle()); |
| | | item.setType(type); |
| | | // 练习不发系统通知 |
| | | // 练习不发系统通知 |
| | | //sendSysNotice(1, groupId); |
| | | return exerciseService.updateExerciseItem(item, lstOptions,params.getAnalysis()); |
| | | } |
| | |
| | | |
| | | |
| | | /** |
| | | * 得到正确答案 |
| | | * 得到正确答案 |
| | | * @param checkA |
| | | * @param checkB |
| | | * @param checkC |
| | |
| | | private String getCorrectAnswer(ExerciseAddItemParams params,short type){ |
| | | StringBuffer answer = new StringBuffer(64); |
| | | |
| | | if(ExerciseItem.TYPE_TRUE_OR_FALSE==type){//判断 |
| | | if(ExerciseItem.TYPE_TRUE_OR_FALSE==type){//判断 |
| | | return params.getCheckA()?"True":params.getCheckB()?"False":null; |
| | | } |
| | | |
| | |
| | | answer.append(',').append('B'); |
| | | } |
| | | |
| | | // 组装余下正确答案 |
| | | // 组装余下正确答案 |
| | | packagingCorrectAnswer(params, answer); |
| | | |
| | | String answers = answer.toString(); |
| | |
| | | } |
| | | |
| | | /** |
| | | * 组装正确答案 |
| | | * 组装正确答案 |
| | | * @param checkC |
| | | * @param checkD |
| | | * @param checkE |
| | |
| | | } |
| | | |
| | | /** |
| | | * 组装正确答案 |
| | | * 组装正确答案 |
| | | * @param checkC |
| | | * @param checkD |
| | | * @param checkE |
| | |
| | | } |
| | | |
| | | /** |
| | | * 得到练习题目图片list |
| | | * 得到练习题目图片list |
| | | * @param title_imgsIds |
| | | * @return |
| | | */ |
| | | private List<ExerciseObjectImg> getExerciseTitleImgs(String title_imgsIds){ |
| | | if(StringUtils.isBlank(title_imgsIds)){//新增图片 |
| | | if(StringUtils.isBlank(title_imgsIds)){//新增图片 |
| | | return null; |
| | | } |
| | | String[] strImgsId = title_imgsIds.split(","); |
| | |
| | | } |
| | | |
| | | /** |
| | | * 创建习题选项 |
| | | * 创建习题选项 |
| | | * @param option |
| | | * @param check |
| | | * @param lstOptions |
| | |
| | | } |
| | | |
| | | ExerciseItemOption a = new ExerciseItemOption(); |
| | | if(StringUtils.isNotBlank(optionId)){// 更新 |
| | | if(StringUtils.isNotBlank(optionId)){// 更新 |
| | | a.setOptionId(optionId); |
| | | }else{ |
| | | if(StringUtils.isEmpty(option)){ |
| | |
| | | } |
| | | } |
| | | |
| | | if(StringUtils.isNotBlank(imgsId)){//新增图片 |
| | | if(StringUtils.isNotBlank(imgsId)){//新增图片 |
| | | String[] strImgsId = imgsId.split(","); |
| | | List<ExerciseObjectImg> imgs = new ArrayList<ExerciseObjectImg>(strImgsId.length); |
| | | ExerciseObjectImg objImg = null; |
| | |
| | | } |
| | | |
| | | /** |
| | | * 更新习题 |
| | | * 更新习题 |
| | | * |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * (后台管理) |
| | | * 删除习题 |
| | | * 更新20150617:更新习题组最后修改时间 |
| | | * (后台管理) |
| | | * 删除习题 |
| | | * 更新20150617:更新习题组最后修改时间 |
| | | * |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 根据classID获取所有课程 |
| | | * 根据classID获取所有课程 |
| | | * |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 获取组名称 |
| | | * 获取组名称 |
| | | * |
| | | * @return |
| | | */ |
| | |
| | | List<Map<String,Object>> lstMap = new ArrayList<Map<String,Object>>(1); |
| | | Map<String,Object> map = null; |
| | | |
| | | if(group.getType() == ExerciseGroup.TYPE_CHAPTER_ITEM || group.getType() == ExerciseGroup.TYPE_EXERCISE_TOPIC || group.getType() == ExerciseGroup.TYPE_EXERCISE_EXAM){ // 章节练习 、 专项练习 |
| | | if(group.getType() == ExerciseGroup.TYPE_CHAPTER_ITEM || group.getType() == ExerciseGroup.TYPE_EXERCISE_TOPIC || group.getType() == ExerciseGroup.TYPE_EXERCISE_EXAM){ // 章节练习 、 专项练习 |
| | | map = new HashMap<String, Object>(7); |
| | | map.put("groupId", group.getGroupId()); |
| | | map.put("name", group.getName()); |
| | |
| | | } |
| | | |
| | | /** |
| | | * 编辑练习保存 |
| | | * 编辑练习保存 |
| | | * |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 根据lessionId获取所有章节,排除掉当前班级 |
| | | * 根据lessionId获取所有章节,排除掉当前班级 |
| | | * |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 根据classID获取顺序练习 |
| | | * 根据classID获取顺序练习 |
| | | * |
| | | * @return |
| | | */ |
| | |
| | | |
| | | int result = commonDAO.findCount(hql, CollectionUtils.newList(ClientUtils.getClassId(),ExerciseGroup.TYPE_EXERCISE_SEQUENCE)); |
| | | List<ClsClass> lstResult = new ArrayList<ClsClass>(); |
| | | //存在顺序练习,将班级信息传回 |
| | | //存在顺序练习,将班级信息传回 |
| | | if( result > 0){ |
| | | hql = "from ClsClass where classId = ? "; |
| | | lstResult = commonDAO.find(hql, CollectionUtils.newList(ClientUtils.getClassId()), ClsClass.class); |
| | |
| | | } |
| | | |
| | | /** |
| | | * 根据classID获取顺序练习 |
| | | * 根据classID获取顺序练习 |
| | | * |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 新增练习 |
| | | * 新增练习 |
| | | * |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 机构新增练习 |
| | | * 机构新增练习 |
| | | * |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 机构指定练习 |
| | | * 机构指定练习 |
| | | * |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * ORG 获取机构科目列表 |
| | | * ORG 获取机构科目列表 |
| | | * |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 新增图片路径到数据库 |
| | | * 新增图片路径到数据库 |
| | | * @param fullPaths |
| | | * @param imgObjId |
| | | * @param imgObjType |
| | |
| | | } |
| | | String[] imgPaths = fullPaths.split(";"); |
| | | |
| | | // 更新路径到数据库 |
| | | // 更新路径到数据库 |
| | | List<Map<String,Object>> lstResult = exerciseService.doAddExerciseObjImg(imgPaths, imgObjId, imgObjType); |
| | | |
| | | return lstResult; |
| | | } |
| | | |
| | | /** 新增图片路径到数据库 */ |
| | | /** 新增图片路径到数据库 */ |
| | | @RequestMapping(value = "delExerObjImg",method = RequestMethod.POST) |
| | | public @ResponseBody Result dodelExerciseObjImg( |
| | | @RequestParam("imgId") String imgId){ |
| | |
| | | return result; |
| | | } |
| | | |
| | | /** 查询图片路径 */ |
| | | /** 查询图片路径 */ |
| | | @RequestMapping(value = "queryExerObjImg",method = RequestMethod.POST) |
| | | public @ResponseBody List<Map<String,Object>> doQueryExerciseObjImg( |
| | | @RequestParam("imgObjId") String imgObjId, |
| | |
| | | return null; |
| | | } |
| | | String hql = "from ExerciseObjectImg where deleteFlag is false and exerciseObjectId=? and objectType=? order by imgOrder"; |
| | | // 查询此练习是否已经存在记录 |
| | | // 查询此练习是否已经存在记录 |
| | | List<ExerciseObjectImg> lstObjImg = commonDAO.find(hql, |
| | | CollectionUtils.newList(imgObjId,imgObjType), ExerciseObjectImg.class); |
| | | |
| | |
| | | } |
| | | |
| | | /** |
| | | * (后台管理系统:导入习题模块) |
| | | * 导入习题-习题导入深度解析 |
| | | * (后台管理系统:导入习题模块) |
| | | * 导入习题-习题导入深度解析 |
| | | * |
| | | * @param groupId 习题组ID |
| | | * @param groupId 习题组ID |
| | | * @param uuid uuid |
| | | * @param fileName 文件名称 |
| | | * @param fileName 文件名称 |
| | | * @return |
| | | */ |
| | | @RequestMapping(value = "/item/deepAnalysisDoc", method = RequestMethod.POST) |
| | |
| | | |
| | | |
| | | /** |
| | | * (后台管理系统:导入习题模块) |
| | | * 导入习题-第一次将word解析结果返回给前台,并不保存到数据库 |
| | | * (后台管理系统:导入习题模块) |
| | | * 导入习题-第一次将word解析结果返回给前台,并不保存到数据库 |
| | | * |
| | | * @param groupId 习题组ID |
| | | * @param groupId 习题组ID |
| | | * @param uuid uuid |
| | | * @param fileName 文件名称 |
| | | * @param fileName 文件名称 |
| | | * @return |
| | | */ |
| | | @RequestMapping(value = "/item/import/parser/{groupId}", method = RequestMethod.POST) |
| | |
| | | } |
| | | |
| | | /** |
| | | * (后台管理系统:导入习题模块) |
| | | * 校验内容,返回解析结果 |
| | | * (后台管理系统:导入习题模块) |
| | | * 校验内容,返回解析结果 |
| | | * |
| | | * @param content 文本内容 |
| | | * @param content 文本内容 |
| | | * @return |
| | | */ |
| | | @RequestMapping(value = "/item/import/validateExercise", method = RequestMethod.POST) |
| | |
| | | } |
| | | |
| | | /** |
| | | * 获取所有班级,当前班级除外,增加过滤没有习题的班级 |
| | | * 获取所有班级,当前班级除外,增加过滤没有习题的班级 |
| | | * @return |
| | | */ |
| | | @RequestMapping(value = "loadClasses", method = RequestMethod.GET) |
| | |
| | | } |
| | | |
| | | /** |
| | | * 复制习题 |
| | | * 复制习题 |
| | | * @param fromClassId |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 学员得分详情列表 |
| | | * 学员得分详情列表 |
| | | * @param groupId |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 初始化平均成绩和最高成绩 |
| | | * 初始化平均成绩和最高成绩 |
| | | * @param groupId |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 每道题得分详情 |
| | | * 每道题得分详情 |
| | | * @param groupId |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 加载题目选项详情 - 班级、机构 |
| | | * 加载题目选项详情 - 班级、机构 |
| | | * @param groupId |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 刷新更新统计 |
| | | * 刷新更新统计 |
| | | * @param groupId |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 导出练习每道题得分详情 |
| | | * 导出练习每道题得分详情 |
| | | * |
| | | * @return |
| | | * @throws IOException |
| | |
| | | public String exportItemStatis(@PathVariable String groupId,HttpServletResponse response) throws IOException { |
| | | ExerciseGroup exeGroup= this.commonDAO.read(ExerciseGroup.class, groupId); |
| | | |
| | | //获取每道题得分详情列表 |
| | | //获取每道题得分详情列表 |
| | | List<ExerciseItemStatistics> itemStatisLst = exerciseService.itemDetailList(groupId); |
| | | |
| | | ExcelExportUtils<ExerciseItemStatistics> ex = new ExcelExportUtils<ExerciseItemStatistics>(); |
| | | ExcelExportParam<ExerciseItemStatistics> obj = new ExcelExportParam<ExerciseItemStatistics>(); |
| | | obj.setColData(itemStatisLst); |
| | | String[] headers = { "序号","题号","题目", "类型", "正确答案","班级正确率","全站正确率"}; |
| | | String[] headers = { "序号","题号","题目", "类型", "正确答案","班级正确率","全站正确率"}; |
| | | |
| | | obj.setHeaders(headers); |
| | | obj.setLstColumn(new ArrayList<String>(Arrays.asList("itemNo","exerciseItemTitel","itemTypeName","correctAnswer","classAccuracyShow","orgAccuracyShow"))); |
| | |
| | | |
| | | response.reset(); |
| | | response.setContentType("application/vnd.ms-excel;charset=utf-8"); |
| | | response.setHeader("Content-Disposition", "attachment;filename="+ new String((ClientUtils.getClassName()+ "_" + exeGroup.getName() + "_详情.xls").getBytes(), "iso-8859-1")); |
| | | response.setHeader("Content-Disposition", "attachment;filename="+ new String((ClientUtils.getClassName()+ "_" + exeGroup.getName() + "_详情.xls").getBytes(), "iso-8859-1")); |
| | | response.setCharacterEncoding("utf-8"); |
| | | OutputStream ouputStream = response.getOutputStream(); |
| | | obj.setOut(ouputStream); |
| | |
| | | } |
| | | |
| | | /** |
| | | * 导出练习学员得分详情 |
| | | * 导出练习学员得分详情 |
| | | * |
| | | * @return |
| | | * @throws IOException |
| | | */ |
| | | @RequestMapping(value = "userScoreStatis/data/{groupId}", method = RequestMethod.GET) |
| | | public String exportUserScore(@PathVariable String groupId,HttpServletResponse response) throws IOException { |
| | | // 获取组名称 |
| | | // 获取组名称 |
| | | ExerciseGroup exeGroup= this.commonDAO.read(ExerciseGroup.class, groupId); |
| | | |
| | | // 获取之前组装的排名List<Map<String, Object>>列表 |
| | | // 获取之前组装的排名List<Map<String, Object>>列表 |
| | | List<Map<String, Object>> userScoreMap = exerciseService.resultList(groupId); |
| | | List<ExportUserScore> userLst = new ArrayList<ExportUserScore>(userScoreMap.size()); |
| | | ExportUserScore user = null; |
| | | |
| | | if(userScoreMap != null){ |
| | | // 将获取的Map列表转换为List列表 |
| | | // 将获取的Map列表转换为List列表 |
| | | for(Map<String, Object> userScore:userScoreMap){ |
| | | user = new ExportUserScore(); |
| | | user.setName(String.valueOf(userScore.get("name"))); |
| | |
| | | ExcelExportUtils<ExportUserScore> ex = new ExcelExportUtils<ExportUserScore>(); |
| | | ExcelExportParam<ExportUserScore> obj = new ExcelExportParam<ExportUserScore>(); |
| | | obj.setColData(userLst); |
| | | String[] headers = { "排名","学员姓名","报名码","报名时间","手机号码", "提交时间", "成绩"}; |
| | | String[] headers = { "排名","学员姓名","报名码","报名时间","手机号码", "提交时间", "成绩"}; |
| | | |
| | | obj.setHeaders(headers); |
| | | obj.setLstColumn(new ArrayList<String>(Arrays.asList("name","salesCode","createTime","mobilePhone","submitTime","score"))); |
| | |
| | | |
| | | response.reset(); |
| | | response.setContentType("application/vnd.ms-excel;charset=utf-8"); |
| | | response.setHeader("Content-Disposition", "attachment;filename="+ new String((ClientUtils.getClassName() + "_" + exeGroup.getName() + "_成绩.xls").getBytes(), "iso-8859-1")); |
| | | response.setHeader("Content-Disposition", "attachment;filename="+ new String((ClientUtils.getClassName() + "_" + exeGroup.getName() + "_成绩.xls").getBytes(), "iso-8859-1")); |
| | | response.setCharacterEncoding("utf-8"); |
| | | OutputStream ouputStream = response.getOutputStream(); |
| | | obj.setOut(ouputStream); |
| | |
| | | |
| | | |
| | | /** |
| | | * 习题组排序 |
| | | * 习题组排序 |
| | | * |
| | | * @param key |
| | | * @return |
| | |
| | | } |
| | | |
| | | /** |
| | | * 习题排序 |
| | | * 习题排序 |
| | | * |
| | | * @param key |
| | | * @return |
| | |
| | | |
| | | |
| | | |
| | | /******************************************py导入******************************************************************/ |
| | | /******************************************py导入******************************************************************/ |
| | | /** |
| | | * (后台管理系统:导入习题模块) |
| | | * 导入习题-第一次将word解析结果返回给前台,并不保存到数据库 |
| | | * (后台管理系统:导入习题模块) |
| | | * 导入习题-第一次将word解析结果返回给前台,并不保存到数据库 |
| | | * |
| | | * @param groupId 习题组ID |
| | | * @param groupId 习题组ID |
| | | * @param uuid uuid |
| | | * @param fileName 文件名称 |
| | | * @param fileName 文件名称 |
| | | * @return |
| | | */ |
| | | @RequestMapping(value = "/item/importpy/parse/{groupId}", method = RequestMethod.POST) |
| | |
| | | } |
| | | |
| | | /** |
| | | * (后台管理系统:导入习题模块) |
| | | * 校验内容,返回解析结果 |
| | | * (后台管理系统:导入习题模块) |
| | | * 校验内容,返回解析结果 |
| | | * |
| | | * @param content 文本内容 |
| | | * @param content 文本内容 |
| | | * @return |
| | | */ |
| | | @RequestMapping(value = "/item/importpy/validate", method = RequestMethod.POST) |
| | |
| | | } |
| | | |
| | | /** |
| | | * (后台管理系统:导入习题模块) |
| | | * 导入内容,返回解析结果 |
| | | * (后台管理系统:导入习题模块) |
| | | * 导入内容,返回解析结果 |
| | | * |
| | | * @param content 文本内容 |
| | | * @param content 文本内容 |
| | | * @return |
| | | */ |
| | | @SuppressWarnings("unchecked") |
| | |
| | | return exercisePyService.doImportPyExercise(lst,groupId); |
| | | |
| | | } catch (Exception e) { |
| | | log.error("提交数据有误" + e ); |
| | | log.error("提交数据有误" + e ); |
| | | } |
| | | |
| | | return new Result(false,"解析json失败"); |
| | | return new Result(false,"解析json失败"); |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | /**----------------- 问卷调查----start-----------------------------------*/ |
| | | /**----------------- 问卷调查----start-----------------------------------*/ |
| | | /** |
| | | * 评估模块添加问答 |
| | | * 评估模块添加问答 |
| | | * |
| | | * @param jsonExerciseItemDTO |
| | | * @return |
| | |
| | | boolean mustAnswer = jsonObject.getBooleanValue("mustAnswer"); |
| | | short type = jsonObject.getShort("type"); |
| | | String analysis = jsonObject.getString("analysis"); |
| | | JSONArray titleImgs = jsonObject.getJSONArray("imags");// 题目的图片路径 |
| | | JSONArray titleImgs = jsonObject.getJSONArray("imags");// 题目的图片路径 |
| | | |
| | | //获取选项 |
| | | //获取选项 |
| | | List<ExerciseItemOption> lstOptions = JSONArray.parseArray(jsonObject.getString("lstOptions"), ExerciseItemOption.class); |
| | | ExerciseItem item = null; |
| | | |
| | | if(StringUtils.isEmpty(exerciseId)){// 新增 |
| | | if(StringUtils.isEmpty(exerciseId)){// 新增 |
| | | item = new ExerciseItem(); |
| | | item.setTitle(title); |
| | | item.setType(type); |
| | | item.setMustAnswer(mustAnswer); |
| | | exerciseService.insertExerciseItem4Evaluate(groupId, item, lstOptions,analysis,titleImgs); |
| | | }else{// 编辑 |
| | | }else{// 编辑 |
| | | item = this.commonDAO.read(ExerciseItem.class, exerciseId); |
| | | item.setTitle(title); |
| | | item.setType(type); |
| | |
| | | |
| | | |
| | | /** |
| | | * 获取问卷习题列表 |
| | | * 获取问卷习题列表 |
| | | * |
| | | * @return |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 查看学员答卷情况 |
| | | * 查看学员答卷情况 |
| | | * |
| | | * @param recordId 答题记录id |
| | | * @param recordId 答题记录id |
| | | * @param schEvaluateId |
| | | * @return |
| | | */ |
| | |
| | | return exerciseService.queryUserEvaExerciseDetail(recordId, evaluateId); |
| | | } |
| | | |
| | | /** 查询图片路径 */ |
| | | /** 查询图片路径 */ |
| | | @RequestMapping(value = "evaluate/queryExerObjImg",method = RequestMethod.GET) |
| | | public @ResponseBody ResultJson queryEvaExerciseObjImg( |
| | | @RequestParam("imgObjId") String imgObjId, |
| | | @RequestParam("imgObjType") int imgObjType){ |
| | | |
| | | if(StringUtils.isBlank(imgObjId)){ |
| | | return new ResultJson(false,"参数为空"); |
| | | return new ResultJson(false,"参数为空"); |
| | | } |
| | | |
| | | List<Map<String,Object>> lstResult = exerciseService.queryEvaExerciseObjImg(imgObjId, imgObjType); |
| | |
| | | } |
| | | |
| | | /** |
| | | * 新增图片路径到数据库 |
| | | * 新增图片路径到数据库 |
| | | * @param fullPaths |
| | | * @param imgObjId |
| | | * @param imgObjType |
| | |
| | | } |
| | | String[] imgPaths = fullPaths.split(";"); |
| | | |
| | | // 更新路径到数据库 |
| | | // 更新路径到数据库 |
| | | List<Map<String,Object>> lstResult = exerciseService.doAddEvaExerciseObjImg(imgPaths, imgObjId, imgObjType); |
| | | |
| | | return new ResultJson(true,"success",lstResult); |
| | | } |
| | | |
| | | /** 删除图片路径到数据库 */ |
| | | /** 删除图片路径到数据库 */ |
| | | @RequestMapping(value = "evaluate/delExerObjImg",method = RequestMethod.POST) |
| | | public @ResponseBody ResultJson dodelEvaExerciseObjImg( |
| | | @RequestParam("imgId") String imgId){ |
| | |
| | | |
| | | return result; |
| | | } |
| | | /**------------------ 问卷调查----end------------------------------------*/ |
| | | /**------------------ 问卷调查----end------------------------------------*/ |
| | | |
| | | |
| | | /**------------------------------ web 后端----end--------------------------------------------------------------------*/ |
| | | /**------------------------------ web 后端----end--------------------------------------------------------------------*/ |
| | | |
| | | } |