| | |
| | | import com.qxueyou.scc.teach.res.model.ResFile; |
| | | |
| | | /** |
| | | * 考试 |
| | | * 考试 |
| | | * |
| | | * @author lihanqi |
| | | * |
| | |
| | | |
| | | private final String[] EXAM_TYPES = new String[] { "A", "B", "C", "D" }; |
| | | |
| | | /** 练习V2.0版本接口service */ |
| | | /** 练习V2.0版本接口service */ |
| | | @Autowired |
| | | private IExerciseVerService exerciseVerService; |
| | | |
| | |
| | | } |
| | | |
| | | /** |
| | | * 保存作业 |
| | | * 保存作业 |
| | | * |
| | | * @return |
| | | */ |
| | |
| | | this.save(exerciseInfo); |
| | | |
| | | if (exerciseInfo.getType() == ExerciseInfo.EXERCISE_TYPE_ANSWER) { |
| | | // 保存题目类型 |
| | | // 保存题目类型 |
| | | List<ExerciseItemSet> lstExerciseItemSet = exerciseInfo.getExerciseItemSets(); |
| | | this.saveExerciseItemSet(exerciseInfoId,lstExerciseItemSet); |
| | | |
| | | //生成作业题目信息 |
| | | //生成作业题目信息 |
| | | String[] sourceGroupIds = QBeanUtils.listPropertyVal(exerciseInfo.getReGroups(), "groupId").toArray(new String[exerciseInfo.getReGroups().size()]); |
| | | |
| | | String newGroupId = this.exerciseGroupService.doCreateRandomExerciseGroup( |
| | | exerciseInfo.getName() + "-作业",ExerciseGroup.TYPE_EXERCISE_EXAM_ITEM,sourceGroupIds,lstExerciseItemSet); |
| | | exerciseInfo.getName() + "-作业",ExerciseGroup.TYPE_EXERCISE_EXAM_ITEM,sourceGroupIds,lstExerciseItemSet); |
| | | |
| | | if(StringUtils.isEmpty(newGroupId)){ |
| | | return new Result(false, "题目数据不够,请增加题库的题目或者减少试卷的题数",exerciseInfoId); |
| | | return new Result(false, "题目数据不够,请增加题库的题目或者减少试卷的题数",exerciseInfoId); |
| | | } |
| | | |
| | | this.saveExerciseExamReGroup(exerciseInfoId,new String[]{newGroupId},EXAM_TYPES[0],ExerciseExamReGroup.GROUP_TYPE_EXAM); |
| | | |
| | | // 保存关联题库信息 |
| | | // 保存关联题库信息 |
| | | this.saveExerciseExamReGroup(exerciseInfoId,sourceGroupIds,null,ExerciseExamReGroup.GROUP_TYPE_SOURCE); |
| | | } |
| | | |
| | | // 保存关联班级 |
| | | // 保存关联班级 |
| | | this.saveExerciseExamReClass(exerciseInfoId, classIds); |
| | | |
| | | return new Result(true, "", exerciseInfoId); |
| | | } |
| | | |
| | | /** |
| | | * 修改练习 |
| | | * 修改练习 |
| | | * |
| | | * @return |
| | | */ |
| | |
| | | TraceUtils.setUpdateTrace(newExerciseInfo); |
| | | this.save(newExerciseInfo); |
| | | |
| | | //清理旧关系数据 |
| | | //清理旧关系数据 |
| | | this.doClearExerciseExamReData(exerciseInfoId); |
| | | |
| | | // 答题作业默认按照统一卷生成作业题目 |
| | | // 答题作业默认按照统一卷生成作业题目 |
| | | |
| | | if (newExerciseInfo.getType() == ExerciseInfo.EXERCISE_TYPE_ANSWER) { |
| | | |
| | | // 保存题目类型 |
| | | // 保存题目类型 |
| | | List<ExerciseItemSet> lstExerciseItemSet = exerciseInfo.getExerciseItemSets(); |
| | | |
| | | saveExerciseItemSet(exerciseInfoId,lstExerciseItemSet); |
| | | |
| | | //生成作业题目信息 |
| | | //生成作业题目信息 |
| | | String[] groupIds = QBeanUtils.listPropertyVal(exerciseInfo.getReGroups(), "groupId").toArray(new String[exerciseInfo.getReGroups().size()]); |
| | | String newGroupId = this.exerciseGroupService.doCreateRandomExerciseGroup( |
| | | exerciseInfo.getName() + "-作业",ExerciseGroup.TYPE_EXERCISE_EXAM_ITEM,groupIds, lstExerciseItemSet); |
| | | exerciseInfo.getName() + "-作业",ExerciseGroup.TYPE_EXERCISE_EXAM_ITEM,groupIds, lstExerciseItemSet); |
| | | |
| | | if(StringUtils.isEmpty(newGroupId)){ |
| | | return new Result(false, "题目数据不够,请增加题库的题目或者减少试卷的题数"); |
| | | return new Result(false, "题目数据不够,请增加题库的题目或者减少试卷的题数"); |
| | | } |
| | | |
| | | this.saveExerciseExamReGroup(exerciseInfoId,new String[]{newGroupId},EXAM_TYPES[0],ExerciseExamReGroup.GROUP_TYPE_EXAM); |
| | | |
| | | // 保存关联题库信息 |
| | | // 保存关联题库信息 |
| | | this.saveExerciseExamReGroup(exerciseInfoId,groupIds,null,ExerciseExamReGroup.GROUP_TYPE_SOURCE); |
| | | |
| | | |
| | | } |
| | | |
| | | // 保存关联班级 |
| | | // 保存关联班级 |
| | | this.saveExerciseExamReClass(exerciseInfoId, classIds); |
| | | |
| | | return new Result(true, "", exerciseInfoId); |
| | | } |
| | | |
| | | //清除之前的练习关联关系数据 |
| | | //清除之前的练习关联关系数据 |
| | | private void doClearExerciseExamReData(String exerciseInfoId){ |
| | | this.bulkUpdate("update ExerciseExamReGroup set deleteFlag = 1 where examId = ?",new Object[]{exerciseInfoId}); |
| | | this.bulkUpdate("update ExerciseExamReClass set deleteFlag = 1 where examId = ?",new Object[] {exerciseInfoId}); |
| | |
| | | } |
| | | |
| | | /** |
| | | * 删除作业 |
| | | * 删除作业 |
| | | * |
| | | * @param examId |
| | | * @return |
| | |
| | | params.add(subjectId); |
| | | } |
| | | |
| | | //默认全部,0待完成,1已提交 ,2:已批阅,3需重写,4:逾期未交 |
| | | //默认全部,0待完成,1已提交 ,2:已批阅,3需重写,4:逾期未交 |
| | | if(status!=null){ |
| | | Date nowTime = new Date(); |
| | | if(status==0){ |
| | |
| | | params.add(subjectId); |
| | | } |
| | | |
| | | //默认全部,0待完成,1已提交 ,2:已批阅,3需重写,4:逾期未交 |
| | | //默认全部,0待完成,1已提交 ,2:已批阅,3需重写,4:逾期未交 |
| | | if(status!=null){ |
| | | Date nowTime = new Date(); |
| | | if(status==0){ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 初始化平均成绩和最高成绩 |
| | | * 初始化平均成绩和最高成绩 |
| | | * |
| | | * @param groupId |
| | | * @return |
| | |
| | | } |
| | | |
| | | /** |
| | | * 题目得分详情 |
| | | * 题目得分详情 |
| | | * |
| | | * @param groupId |
| | | * @return |
| | |
| | | return new ArrayList<ExerciseItemStatistics>(); |
| | | } |
| | | |
| | | // 默认章节练习 |
| | | // 默认章节练习 |
| | | String hql = "select item from ExerciseItem item,ExerciseGroupItemRe re where re.exerciseGroupId in(" |
| | | + " select c.groupId from ExerciseExamReGroup c where c.examId = ? and c.type = ? and c.deleteFlag is false)" |
| | | + "and re.exerciseItemId=item.exerciseId and item.deleteFlag is false " |
| | | + "and re.deleteFlag is false order by re.itemOrder "; |
| | | |
| | | // 查询当前组的所有题目 |
| | | // 查询当前组的所有题目 |
| | | List<ExerciseItem> itemAllLst = this.find(hql, |
| | | CollectionUtils.newList(examId, ExerciseExamReGroup.GROUP_TYPE_EXAM), ExerciseItem.class); |
| | | |
| | |
| | | return new ArrayList<ExerciseItemStatistics>(); |
| | | } |
| | | |
| | | // 同步编号 |
| | | // 同步编号 |
| | | List<ExerciseItemStatistics> listResult = new ArrayList<ExerciseItemStatistics>(itemStatisLst.size()); |
| | | ExerciseItemStatistics obj = null; |
| | | for (int j = 0; j < itemAllLst.size(); j++) { |
| | |
| | | obj.setClassAccuracyShow(obj.getClassAccuracy() + "%"); |
| | | obj.setOrgAccuracyShow(obj.getOrgAccuracy() + "%"); |
| | | |
| | | // 给类型赋值 |
| | | // 给类型赋值 |
| | | setExerItemTypeNewName(obj); |
| | | listResult.add(obj); |
| | | break; |
| | |
| | | } |
| | | |
| | | private void setExerItemTypeNewName(ExerciseItemStatistics obj) { |
| | | // 判断类型文字显示 |
| | | // 判断类型文字显示 |
| | | if (obj.getExerciseItemType() == ExerciseItem.TYPE_SINGLE_SELECT) { |
| | | obj.setItemTypeName("单选题"); |
| | | obj.setItemTypeName("单选题"); |
| | | } else if (obj.getExerciseItemType() == ExerciseItem.TYPE_MULTI_SELECT) { |
| | | obj.setItemTypeName("多选题"); |
| | | obj.setItemTypeName("多选题"); |
| | | } else if (obj.getExerciseItemType() == ExerciseItem.TYPE_TRUE_OR_FALSE) { |
| | | obj.setItemTypeName("判断题"); |
| | | obj.setItemTypeName("判断题"); |
| | | } else if (obj.getExerciseItemType() == ExerciseItem.TYPE_ESSAY_QUESTION) { |
| | | obj.setItemTypeName("问答题"); |
| | | obj.setItemTypeName("问答题"); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 开始题目作业 |
| | | * 开始题目作业 |
| | | * |
| | | * @param examId |
| | | * @return |
| | |
| | | } |
| | | |
| | | /** |
| | | * 开始题目作业 |
| | | * 开始题目作业 |
| | | * |
| | | * @param examId |
| | | * @return |
| | | */ |
| | | private Result doStartAnswerExercise(ExerciseInfo exerciseInfo, ClsClass clsClass, String studentUserId) { |
| | | Result result = new Result(true); |
| | | // 正在做题数 |
| | | // 正在做题数 |
| | | ExerciseRecord record = this.findUnique( |
| | | "select r from ExerciseRecord r where r.deleteFlag is false and r.userId = ? and r.exerciseGroupId in" |
| | | + " (select g.groupId from ExerciseExamReGroup g where g.examId = ? and g.deleteFlag is false and g.type = ?)", |
| | |
| | | exerciseInfo.getExerciseInfoId(), ExerciseExamReGroup.GROUP_TYPE_EXAM),ExerciseRecord.class); |
| | | |
| | | if (record == null) { |
| | | // 获取分组练习 |
| | | // 获取分组练习 |
| | | String groupId = this.findUnique( |
| | | "select g.groupId from ExerciseExamReGroup g where g.examId = ? and g.deleteFlag is false and g.type = ?", |
| | | CollectionUtils.newList(exerciseInfo.getExerciseInfoId(), ExerciseExamReGroup.GROUP_TYPE_EXAM), |
| | | String.class); |
| | | |
| | | if (StringUtils.isEmpty(groupId)) { |
| | | return new Result(false, "开始作业获取题目失败"); |
| | | return new Result(false, "开始作业获取题目失败"); |
| | | } |
| | | |
| | | Map<String, Object> recordResult = this.insertExerRecord(exerciseInfo,groupId); |
| | | |
| | | // 生成做题记录 |
| | | // 生成做题记录 |
| | | record = (ExerciseRecord) recordResult.get("record"); |
| | | } |
| | | |
| | | // 获取结果 |
| | | // 获取结果 |
| | | ExerItemResponseData responseData = exerciseVerService.queryExerItemResponseData(record.getExerciseGroupId(), |
| | | record.getRecordId(), true, true, ExerciseGroup.TYPE_EXERCISE_EXAM_ITEM); |
| | | responseData.setExerciseRecordId(record.getRecordId()); |
| | |
| | | responseData.setStatus(record.getStatus()); |
| | | result.addData("exerItem", responseData); |
| | | |
| | | // 如果已提交就查询用户答案信息 |
| | | // 如果已提交就查询用户答案信息 |
| | | // if (Integer.valueOf(record.getStatus()) > 0) { |
| | | result.addData("userAnswers", this.findListWithMapByHql( |
| | | "select u.answerUId as answerUId, u.exerciseItemId as exerciseId,u.answer as answer,u.correct as correct,i.type as type,u.teacherScore as teacherScore" |
| | | + " from ExerciseItemAnswerU u,ExerciseItem i where u.exerciseItemId = i.exerciseId and u.exerciseRecordId=:recordId and u.deleteFlag is false order by u.createTime asc ", |
| | | CollectionUtils.newObjectMap("recordId", record.getRecordId()))); |
| | | |
| | | // 查询学生考试总分 |
| | | // 查询学生考试总分 |
| | | result.addData("studentScore", record.getScore()); |
| | | result.addData("objStudentScore", record.getObjScore()==null?BigDecimal.ZERO:record.getObjScore()); |
| | | |
| | |
| | | } |
| | | |
| | | private ExerciseCompleteInfo doGetOrCreateExerciseCompleteInfo(String exerciseInfoId,String classId,String studentUserId){ |
| | | // 判断是否已经初始化 |
| | | // 判断是否已经初始化 |
| | | ExerciseCompleteInfo completeInfo = exerciseCompleteService.queryCompleteInfo(exerciseInfoId,classId , studentUserId); |
| | | |
| | | if(completeInfo==null){ |
| | |
| | | record.setOrgId(ClientUtils.getOrgId()); |
| | | TraceUtils.setCreateTrace(record); |
| | | |
| | | //获取考试题目统计信息,并保存 |
| | | //获取考试题目统计信息,并保存 |
| | | Map<String,Object> result = this.queryItemStatics(exerciseInfo.getExerciseItemSets()); |
| | | record.setTotalScore(new BigDecimal(exerciseInfo.getScore())); |
| | | record.setPassingScore(exerciseInfo.getPassingScore()); |
| | |
| | | float subTotalScore = 0,objTotalScore=0; |
| | | int subItemCount=0,objItemCount=0; |
| | | |
| | | //如果是随机组卷 |
| | | //如果是随机组卷 |
| | | if(itemSets!=null && itemSets.size()>0){ |
| | | for(ExerciseItemSet s:itemSets){ |
| | | if(s.getItemType()==ExerciseItem.TYPE_ESSAY_QUESTION){ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 开始文件和写作作业 |
| | | * 开始文件和写作作业 |
| | | * |
| | | * @param examId |
| | | * @return |
| | | */ |
| | | private Result doStartOtherExercise(ExerciseInfo exerciseInfo, ClsClass clsClass, String studentUserId) { |
| | | // 查询是否已经存在做题记录,如果不存在需要新建 |
| | | // 查询是否已经存在做题记录,如果不存在需要新建 |
| | | ExerciseCompleteInfo exerciseCompleteInfo = exerciseCompleteService.doCheckAndCreateExerciseCompleteInfo( |
| | | exerciseInfo.getExerciseInfoId(), clsClass.getClassId(), studentUserId); |
| | | |
| | |
| | | } |
| | | |
| | | /** |
| | | * 提交写作作业 |
| | | * 提交写作作业 |
| | | * |
| | | * @param exerciseInfoId |
| | | * @param content |
| | |
| | | */ |
| | | private Result doSubmitWritingExerciseInfo(String exerciseCompleteInfoId, String content, short submitType) { |
| | | ExerciseCompleteInfo exerciseCompleteInfo = this.read(ExerciseCompleteInfo.class, exerciseCompleteInfoId); |
| | | // 保存到orgtext |
| | | // 保存到orgtext |
| | | if (StringUtils.isEmpty(exerciseCompleteInfo.getTargetObjectId())) { |
| | | Result result = orgTextService.doInsertOrgText(exerciseCompleteInfoId, OrgText.TABLE_WRITING_EXERCISE, content); |
| | | exerciseCompleteInfo.setTargetObjectId((String)result.getData("orgTextId")); |
| | |
| | | } |
| | | |
| | | /** |
| | | * 提交文件作业 |
| | | * 提交文件作业 |
| | | * |
| | | * @param exerciseCompleteInfoId |
| | | * @param content |
| | |
| | | |
| | | exerciseCompleteInfo.setUploadDesc(content); |
| | | |
| | | // 判断作业提交类型,不同提交类型保存到不同地方 |
| | | // 判断作业提交类型,不同提交类型保存到不同地方 |
| | | if (StringUtils.isNotEmpty(fileId)) { |
| | | String fileType = filePath.substring(filePath.lastIndexOf(".")); |
| | | String fileName = filePath.substring(filePath.lastIndexOf("/")); |
| | |
| | | targetObjectId = handout.getHandoutId(); |
| | | |
| | | if (!"PDF".equals(fileType.toUpperCase())) { |
| | | // 添加到讲义转码队列表 |
| | | // 添加到讲义转码队列表 |
| | | HandoutConverTask task = new HandoutConverTask(); |
| | | task.setCreateTime(new Date(System.currentTimeMillis())); |
| | | task.setUpdateTime(new Date(System.currentTimeMillis())); |
| | |
| | | public Result doSubmitAnswerExerciseInfo(ExerciseSubmitAnswerData answerData, String exerciseInfoId, String exerciseCompleteId) { |
| | | Result result = new Result(true); |
| | | |
| | | // 用户本次做题提交的数据 |
| | | // 用户本次做题提交的数据 |
| | | List<ExerciseItemAnswerData> lstAnswers = null; |
| | | String initRecordId = null; |
| | | ExerciseCompleteInfo exerciseCompleteInfo = null; |
| | | ExerciseInfo exerciseInfo = this.read(ExerciseInfo.class, exerciseInfoId); |
| | | |
| | | try { |
| | | // 提交记录id |
| | | // 提交记录id |
| | | initRecordId = answerData.getExerciseRecordId(); |
| | | lstAnswers = answerData.getItems(); |
| | | |
| | |
| | | ExerciseDataSubmitLog.TYPE_SUBMIT_ANSWER, ExerciseDataSubmitLog.STATUS_FAILED, |
| | | "/exercise/Exercise/exerAnswers"); |
| | | |
| | | return new Result(false, "提交数据异常"); |
| | | return new Result(false, "提交数据异常"); |
| | | } |
| | | |
| | | ExerciseRecord record = this.read(ExerciseRecord.class, initRecordId); |
| | | |
| | | //计算得分 |
| | | //计算得分 |
| | | double studentScore = this.doCalculateExerciseScores(answerData, exerciseInfo.getExerciseItemSets()); |
| | | |
| | | // 提交试卷答案 |
| | | // 提交试卷答案 |
| | | answerData.setScore(new BigDecimal(studentScore)); |
| | | Map<String, Object> resultMap = exerciseVerService.doOperExerciseAnswerData(answerData); |
| | | |
| | | // 更新得分记录及状态 |
| | | // 更新得分记录及状态 |
| | | exerciseCompleteInfo = this.read(ExerciseCompleteInfo.class, exerciseCompleteId); |
| | | resultMap.put("studentScore", studentScore); |
| | | |
| | | |
| | | // 更新完成得分 |
| | | // 更新完成得分 |
| | | if (ExerciseRecord.STATUS_SUBMIT.equals(answerData.getStatus())) { |
| | | resultMap.put("objScore", studentScore); |
| | | exerciseCompleteInfo.setSubmitTime(new Date()); |
| | |
| | | |
| | | this.save(exerciseCompleteInfo); |
| | | |
| | | // 记录提交的数据日志 |
| | | // 记录提交的数据日志 |
| | | exerciseVerService.doSaveExerciseDataSubmitLog(JSON.toJSONString(answerData), initRecordId, |
| | | ExerciseDataSubmitLog.TYPE_SUBMIT_ANSWER, ExerciseDataSubmitLog.STATUS_SUCCESS, |
| | | "/exercise/Exercise/exerAnswers"); |
| | | |
| | | result = new Result(true, "答案提交成功"); |
| | | result = new Result(true, "答案提交成功"); |
| | | result.setData(resultMap); |
| | | |
| | | } catch (Exception e) { |
| | | log.error("考试保存错误", e); |
| | | log.error("考试保存错误", e); |
| | | |
| | | result = new Result(false, "提交练习答案请求异常"); |
| | | result = new Result(false, "提交练习答案请求异常"); |
| | | |
| | | exerciseVerService.doSaveExerciseDataSubmitLog(JSON.toJSONString(answerData), initRecordId, |
| | | ExerciseDataSubmitLog.TYPE_SUBMIT_ANSWER, ExerciseDataSubmitLog.STATUS_FAILED, |
| | |
| | | } |
| | | |
| | | private double doCalculateExerciseScores(ExerciseSubmitAnswerData answerData, List<ExerciseItemSet> lstItemSet) { |
| | | //获取填空题答案信息 |
| | | //获取填空题答案信息 |
| | | Map<String,String> exerciseFillItemMap= null; |
| | | List<Object[]> lstObj = this.find("select i.exerciseId,i.answer from ExerciseGroupItemRe r, ExerciseItem i where r.exerciseItemId=i.exerciseId and r.exerciseGroupId=? and r.deleteFlag is false and i.type=? and i.deleteFlag is false", |
| | | CollectionUtils.newList(answerData.getExerciseGroupId(),ExerciseItem.TYPE_FILL_BLANKS), Object[].class); |
| | |
| | | |
| | | @Override |
| | | public Result doPublishExercise(String[] exerciseIds) { |
| | | // 更新作业状态 |
| | | // 更新作业状态 |
| | | this.bulkUpdateInLoop("update ExerciseInfo set status=" + ExerciseInfo.EXERCISE_STATUS_PUBLISHED + " WHERE exerciseInfoId=?",exerciseIds); |
| | | |
| | | // 初始化作业完成记录 |
| | | // 初始化作业完成记录 |
| | | String hql = null; |
| | | List<Map<String, Object>> students = null; |
| | | ExerciseCompleteInfo temp = null; |
| | | List<ExerciseCompleteInfo> lstCompleteInfos = null; |
| | | for (String exerciseId : exerciseIds) { |
| | | // 判断是否已经初始化,如果已经初始化则继续 -> TODO:需要处理新加入班级学生 |
| | | // 判断是否已经初始化,如果已经初始化则继续 -> TODO:需要处理新加入班级学生 |
| | | int count = this.findCount("from ExerciseCompleteInfo f where f.deleteFlag is false and f.exerciseInfoId=?",CollectionUtils.newList(exerciseId)); |
| | | |
| | | if (count == 0) { |
| | |
| | | } |
| | | } |
| | | |
| | | //发布作业消息 |
| | | //发布作业消息 |
| | | this.doExercisePublishMsg(exerciseId); |
| | | } |
| | | |
| | |
| | | "subjectId",exerciseInfo.getSubjectId(),"subjectName",exerciseInfo.getSubject().getName()); |
| | | |
| | | msgInfoService.doSendTextMsgToUsers(lstUserIds.toArray(new String[lstUserIds.size()]), |
| | | MsgInfo.TYPE_EXERCISE," 发布了作业 ", attrs); |
| | | MsgInfo.TYPE_EXERCISE," 发布了作业 ", attrs); |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public Result doRevokeExercise(String[] exerciseIds) { |
| | | // 更新作业状态 |
| | | // 更新作业状态 |
| | | this.bulkUpdateInLoop("update ExerciseInfo set status=" + ExerciseInfo.EXERCISE_STATUS_DRAFT + " WHERE exerciseInfoId=?",exerciseIds); |
| | | // 清除作业完成情况 |
| | | // 清除作业完成情况 |
| | | this.bulkUpdateInLoop("update ExerciseCompleteInfo set deleteFlag= true WHERE exerciseInfoId=?", exerciseIds); |
| | | |
| | | return new Result(true); |
| | | } |
| | | |
| | | /** |
| | | * 获取逾期未交的作业 |
| | | * 获取逾期未交的作业 |
| | | */ |
| | | @Override |
| | | public int getUnCommitExerciseCount(String classId, String userId) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 获取待完成的作业 |
| | | * 获取待完成的作业 |
| | | */ |
| | | @Override |
| | | public int getToBeCommitExerciseCount(String classId, String userId) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 获取完成的作业个数 |
| | | * 获取完成的作业个数 |
| | | * |
| | | * @param classId |
| | | * @param userId |
| | |
| | | } |
| | | |
| | | /** |
| | | * 获取作业总数 |
| | | * 获取作业总数 |
| | | */ |
| | | @Override |
| | | public int getExerciseCount(String classId, String userId) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 查询作业列表-教师端 |
| | | * 查询作业列表-教师端 |
| | | * |
| | | * @param pageSize |
| | | * @param keyword |