package com.qxueyou.scc.school.service.impl; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Service; import com.qxueyou.scc.base.model.Result; import com.qxueyou.scc.base.service.impl.CommonAppService; import com.qxueyou.scc.base.util.ClientUtils; import com.qxueyou.scc.base.util.CollectionUtils; import com.qxueyou.scc.base.util.TraceUtils; import com.qxueyou.scc.exercise.model.ExerciseGroup; import com.qxueyou.scc.exercise.model.ExerciseGroupExtend; import com.qxueyou.scc.exercise.model.ExerciseItemAnswerU; import com.qxueyou.scc.exercise.model.ExerciseRecord; import com.qxueyou.scc.exercise.service.IExerciseService; import com.qxueyou.scc.school.dao.InteractDAO; import com.qxueyou.scc.school.model.InteractResultData; import com.qxueyou.scc.school.model.InterateAnswer; import com.qxueyou.scc.school.model.SchInteract; import com.qxueyou.scc.school.service.IInteractService; @Service public class InteactService extends CommonAppService implements IInteractService { private InteractDAO interactDAO; /** 扩展练习service */ @Autowired private IExerciseService exerciseService; public InteractDAO getInteractDAO() { return interactDAO; } /** * 依赖注入 * * @param interactDAO */ @Autowired(required = false) public void setInteractDAO(@Qualifier("interactDAO") InteractDAO interactDAO) { this.interactDAO = interactDAO; } /* * (non-Javadoc) * @see com.qxueyou.scc.school.service.IInteractService#insertInteract(com.qxueyou.scc.school.model.SchInteract) */ @Override public Result insertInteract(String interactName, String exerciseTime) { // 设置基本字段 ExerciseGroup group = new ExerciseGroup(); TraceUtils.setCreateTrace(group); group.setName(interactName); group.setDeleteFlag(false); group.setType(ExerciseGroup.TYPE_INTERACT); group.setClassId(ClientUtils.getClassId()); group.setOrgId(ClientUtils.getOrgId()); this.exerciseService.saveExerciseGroup(group); // 添加组扩展表信息 ExerciseGroupExtend extend = new ExerciseGroupExtend(); extend.setGroupId(group.getGroupId()); extend.setExerciseTime(exerciseTime); extend.setDeleteFlag(false); TraceUtils.setCreateTrace(extend); save(extend); SchInteract interact = new SchInteract(); interact.setClassId(ClientUtils.getClassId()); interact.setExerciseGroupId(group.getGroupId()); interact.setStatus(SchInteract.STATUS_LOCK); interact.setDeleteFlag(false); TraceUtils.setCreateTrace(interact); save(interact); return new Result(true,interact.getInteractId()); } /* * (non-Javadoc) * @see com.qxueyou.scc.school.service.IInteractService#deleteInteracts(java.lang.String[]) */ @Override public Result deleteInteracts(String[] interactIds) { for(String interactId:interactIds){ SchInteract interact = read(SchInteract.class,interactId); interact.setDeleteFlag(true); TraceUtils.setUpdateTrace(interact); save(interact); } return new Result(true); } @Override public Result doStartInteracts(String[] interactIds) {// 激活 Result result = new Result(true); for(String interactId:interactIds){ SchInteract interact = read(SchInteract.class,interactId); if(SchInteract.STATUS_LOCK == interact.getStatus()){ interact.setStatus(SchInteract.STATUS_INTERACTING); interact.setStartTime(new Date()); TraceUtils.setUpdateTrace(interact); save(interact); }else{ result = new Result(true,"只有锁定的互动才能激活"); } } return result;// changeStatus(interactIds,SchInteract.STATUS_INTERACTING) } @Override public Result doStopInteracts(String[] interactIds) { Result result = new Result(true); for(String interactId:interactIds){ SchInteract interact = read(SchInteract.class,interactId); if(SchInteract.STATUS_LOCK == interact.getStatus() || SchInteract.STATUS_INTERACTING == interact.getStatus()){ interact.setStatus(SchInteract.STATUS_END); interact.setStopTime(new Date()); TraceUtils.setUpdateTrace(interact); save(interact); }else{ result = new Result(true,"只有锁定和正在互动的互动才能停用"); } } return result;// changeStatus(interactIds,SchInteract.STATUS_END) } /** * 修改互动状态 * @param interactIds * @param status * @return private Result changeStatus(String[] interactIds,short status,short selectStatus){ for(String interactId:interactIds){ SchInteract interact = read(SchInteract.class,interactId); interact.setStatus(status); TraceUtils.setUpdateTrace(interact); save(interact); } return new Result(true); }*/ /** * 新增练习记录 * @param groupId * @return */ public String insertExerciseRecord(String groupId,String currTitleNumber) { ExerciseRecord record = new ExerciseRecord(); record.setExerciseGroupId(groupId); if(StringUtils.isBlank(currTitleNumber)){ currTitleNumber="0"; } record.setTitleMaxNumber(currTitleNumber); record.setUserId(ClientUtils.getUserId()); record.setDeleteFlag(false); record.setClassId(ClientUtils.getClassId()); record.setCollegeCourseId(ClientUtils.getCourseId()); record.setOrgId(ClientUtils.getOrgId()); record.setStatus(ExerciseRecord.STATUS_SUBMIT); TraceUtils.setCreateTrace(record); this.save(record); return record.getRecordId(); } /** * 新增练习记录 * @param groupId * @return */ public String updateExerciseRecord(ExerciseRecord record) { TraceUtils.setUpdateTrace(record); this.save(record); return record.getRecordId(); } /** * 新增练习记录答案 * @return */ public Result insertExerciseItemAnswerU(String exerciseId, String exerciseRecordId, String answers, byte corrects) { String userId = ClientUtils.getUserId(); // 组装答案记录 ExerciseItemAnswerU answerU = new ExerciseItemAnswerU(); answerU.setExerciseItemId(exerciseId); answerU.setExerciseRecordId(exerciseRecordId); answerU.setAnswer(answers); answerU.setCorrect(corrects); answerU.setUserId(userId); answerU.setDeleteFlag(false); TraceUtils.setCreateTrace(answerU); // 保存 this.save(answerU); return new Result(true); } /** * 更新练习记录答案 * @return */ public Result updateExerciseItemAnswerU(ExerciseItemAnswerU answerU, String answers, byte corrects) { answerU.setAnswer(answers); answerU.setCorrect(corrects); TraceUtils.setUpdateTrace(answerU); // 保存更新 this.save(answerU); return new Result(true); } /** * 操作互动练习答案记录 * @return */ @Override public Result doOperInteractExerciseAnswer(String interactGroupId, String exerciseId, String answers,byte corrects,String currTitleNumber) { // 1.互动组 判断 是否新纪录 String hql = "from ExerciseRecord where deleteFlag is false " + "and exerciseGroupId=? and userId=? "; List lstRecord = this.find(hql, CollectionUtils.newList(interactGroupId, ClientUtils.getUserId()), ExerciseRecord.class); // 练习记录id String exerciseRecordId= ""; if(lstRecord.isEmpty()){ // 1. 没有 互动组记录 插入一条新数据 exerciseRecordId = this.insertExerciseRecord(interactGroupId,currTitleNumber); }else{ // 更新题号 ExerciseRecord record = lstRecord.get(0); record.setTitleMaxNumber(currTitleNumber); updateExerciseRecord(record); exerciseRecordId = record.getRecordId(); } /*// 判断是否重复提交 已经存在 先删除 再插入 hql = "from ExerciseItemAnswerU where deleteFlag is false " + "and exerciseItemId=? and userId=? and exerciseRecordId=?"; List lstAnswerU = this.find(hql, CollectionUtils.newList(exerciseId, ClientUtils.getUserId(),exerciseRecordId), ExerciseItemAnswerU.class); // 2.已经存在 更新 if(!lstAnswerU.isEmpty()){ // 答案obj ExerciseItemAnswerU answerU = lstAnswerU.get(0); return updateExerciseItemAnswerU(answerU, answers, corrects); }*/ // 3.不存在 插入 Result result = this.insertExerciseItemAnswerU(exerciseId, exerciseRecordId, answers, corrects); return result; } /** * 查询互动练习结果 * @param hql * @param args * @return */ @SuppressWarnings("unchecked") @Override public List> queryResultByInteractExer(String hql, List args) { List lst = this.findBySql(hql, args); List> resultLst = new ArrayList>(lst.size()); Map resultMap = new HashMap(3); for (Object[] obj : lst) { resultMap = new HashMap(); resultMap.put("name", obj[0]); resultMap.put("count", obj[1]); resultMap.put("peopleCount", obj[2]); resultLst.add(resultMap); } return resultLst; } /** * 查询互动练习结果 * @param hql * @param args * @return */ @Override public List> queryResultByInteract(String hql, List args) { return interactDAO.queryResultByInteractExer(hql, args); } /** * 操作互动练习答案记录 * @return */ @Override public Result doOperInteractExerciseAnswerNew( InteractResultData resultData) { String exerciseGroupId = resultData.getExerciseGroupId(); String currTitleNumber = resultData.getCurrTitleNum(); // 1.互动组 判断 是否新纪录 String hql = "from ExerciseRecord where deleteFlag is false " + "and exerciseGroupId=? and userId=? "; List lstRecord = this.find(hql, CollectionUtils.newList(exerciseGroupId, ClientUtils.getUserId()), ExerciseRecord.class); // 练习记录id String exerciseRecordId= ""; if(lstRecord.isEmpty()){ // 1. 没有 互动组记录 插入一条新数据 exerciseRecordId = this.insertExerciseRecord(exerciseGroupId,currTitleNumber); }else{ // 更新题号 ExerciseRecord record = lstRecord.get(0); record.setTitleMaxNumber(currTitleNumber); record.setStatus(ExerciseRecord.STATUS_SUBMIT); this.updateExerciseRecord(record); exerciseRecordId = record.getRecordId(); } // 2.保存答案 this.saveInteractExerciseAnswerBatch(resultData.getItems(), exerciseRecordId); return new Result(true); } /** * 批量保存互动答案 * @param resultData * @param exerciseRecordId * @return */ private Result saveInteractExerciseAnswerBatch(List lstAnswers, String exerciseRecordId){ String userId = ClientUtils.getUserId(); List lstAnswerU = new ArrayList(lstAnswers.size()); ExerciseItemAnswerU answerU = null; for(InterateAnswer answer:lstAnswers){ answerU = new ExerciseItemAnswerU(); answerU.setExerciseItemId(answer.getExerciseId()); answerU.setExerciseRecordId(exerciseRecordId); answerU.setAnswer(answer.getAnswer()); answerU.setCorrect(Byte.valueOf(answer.getCorrect())); answerU.setUserId(userId); answerU.setDeleteFlag(false); TraceUtils.setCreateTrace(answerU); lstAnswerU.add(answerU); } // 保存结果 this.saveOrUpdateAll(lstAnswerU); return new Result(true); } @Override public Result doSubmitInteractResult(String interactGroupId) { // 1.互动组 判断 是否新纪录 String hql = "from ExerciseRecord where deleteFlag is false " + "and exerciseGroupId=? and userId=? "; List lstRecord = this.find(hql, CollectionUtils.newList(interactGroupId, ClientUtils.getUserId()), ExerciseRecord.class); // 练习记录id if(lstRecord.isEmpty()){ // 1. 没有 互动组记录 插入一条新数据 this.insertExerciseRecord(interactGroupId,null); }else{ // 更新题号 ExerciseRecord record = lstRecord.get(0); record.setStatus(ExerciseRecord.STATUS_SUBMIT); this.updateExerciseRecord(record); } return new Result(true); } }