package com.qxueyou.scc.exam.service.impl; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import org.springframework.beans.factory.annotation.Autowired; 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.CollectionUtils; import com.qxueyou.scc.base.util.TraceUtils; import com.qxueyou.scc.base.util.UUIDUtils; import com.qxueyou.scc.exam.model.ExamPaperInfo; import com.qxueyou.scc.exam.service.IExamPaperSectionService; import com.qxueyou.scc.exam.service.IExamPaperService; import com.qxueyou.scc.exercise.model.ExerciseGroup; import com.qxueyou.scc.exercise.model.ExerciseItem; import com.qxueyou.scc.exercise.service.IExerciseGroupService; /** * 试卷管理服务层 * * @author kevin * @createTime 2017-11-1 */ @Service public class ExamPaperService extends CommonAppService implements IExamPaperService { @Autowired IExerciseGroupService exerciseGroupService; @Autowired IExamPaperSectionService examPaperSectionService; @Override public Result addExamPaper(ExamPaperInfo examPaperInfo) { Result result = new Result(true); String examPaperId = null, groupId = null; ExerciseGroup exerciseGroup = null; //创建试卷关联题库 exerciseGroup = new ExerciseGroup(); exerciseGroup.setName(examPaperInfo.getExamPaperName()+"-试卷题库"); exerciseGroup.setType(ExerciseGroup.TYPE_EXERCISE_EXAM_ITEM); groupId = exerciseGroupService.addExerciseGroup(exerciseGroup); //保存试卷 examPaperId = UUIDUtils.generateUUID().replace("-", ""); examPaperInfo.setExamPaperId(examPaperId); examPaperInfo.setPaperStatus(ExamPaperInfo.STATUS_DRAFT); examPaperInfo.setGroupId(groupId); TraceUtils.setCreateTrace(examPaperInfo); this.insert(examPaperInfo); result.addData("examPaperId", examPaperId); return result; } @Override public Result deleteExamPaper(String[] examPaperIds) { Result result = new Result(true) ; if(examPaperIds!=null && examPaperIds.length>0 ){ String hql = "update ExamPaperInfo set deleteFlag = true where examPaperId=?"; result = bulkUpdateInLoop(hql, examPaperIds); } return result; } @Override public Result updateExamPaper(ExamPaperInfo param) { ExamPaperInfo examPaperInfo = read(ExamPaperInfo.class, param.getExamPaperId()); if(examPaperInfo!=null){ TraceUtils.setUpdateTrace(examPaperInfo); examPaperInfo.setDifficultLevel(param.getDifficultLevel()); examPaperInfo.setExamPaperName(param.getExamPaperName()); } return save(examPaperInfo); } @Override public Result doPublishExamPaper(String[] examPaperIds) { Map pramMap = null; if(examPaperIds!=null && examPaperIds.length>0){ pramMap = new HashMap(1); pramMap.put("examPaperIds", examPaperIds); String hql = "from ExamPaperInfo where examPaperId in (:examPaperIds)"; List lstExamPaperInfo = this.findByComplexHql(hql,pramMap, ExamPaperInfo.class); for (ExamPaperInfo examPaperInfo : lstExamPaperInfo) { if(ExamPaperInfo.STATUS_DRAFT!=examPaperInfo.getPaperStatus()){ return new Result(false, "只有草稿状态的试卷,才能发布。"); } if(examPaperInfo.getTotalScore()<=0){ return new Result(false, "试卷总分大于零,才能发布。"); } examPaperInfo.setPaperStatus(ExamPaperInfo.STATUS_PUBLISH); TraceUtils.setUpdateTrace(examPaperInfo); save(examPaperInfo); } }else{ return new Result(false, "没有选择要发布的试卷。"); } return new Result(true); } @Override public Result doRevokeExamPaper(String[] examPaperIds) { Map pramMap = null; if(examPaperIds!=null && examPaperIds.length>0){ pramMap = new HashMap(1); pramMap.put("examPaperIds", examPaperIds); String hql = "from ExamPaperInfo where examPaperId in (:examPaperIds)"; List lstExamPaperInfo = this.findByComplexHql(hql,pramMap, ExamPaperInfo.class); for (ExamPaperInfo examPaperInfo : lstExamPaperInfo) { if(ExamPaperInfo.STATUS_PUBLISH!=examPaperInfo.getPaperStatus()){ return new Result(false, "只有发布状态的试卷,才能撤回。"); } examPaperInfo.setPaperStatus(ExamPaperInfo.STATUS_DRAFT); TraceUtils.setUpdateTrace(examPaperInfo); save(examPaperInfo); } }else{ return new Result(false, "没有选择要撤回的试卷。"); } return new Result(true); } @Override public ExamPaperInfo queryExamPaperDetail(String examPaperId) { ExamPaperInfo examPaperInfo= this.read(ExamPaperInfo.class, examPaperId); ExerciseGroup exerciseGroup = exerciseGroupService.queryExerciseGroupDetail(examPaperInfo.getGroupId()); examPaperInfo.setExerciseGroup(exerciseGroup); return examPaperInfo; } @Override public Map queryExamPaperItemsStatistic(String[] examPaperIds){ Map resultMap =null; if(examPaperIds!=null &&examPaperIds.length>0){ resultMap = new LinkedHashMap(examPaperIds.length); String hql = " select p.examPaperId, i.type,count(i.type) from ExamPaperInfo p, ExerciseGroupItemRe r,ExerciseItem i where p.examPaperId in (:examPaperIds) " + "and p.groupId=r.exerciseGroupId and r.exerciseItemId = i.exerciseId and r.deleteFlag is false group by p.examPaperId,i.type"; Map param =new HashMap(); param.put("examPaperIds", examPaperIds); List lstItemStatics = this.findByComplexHql(hql, param, Object[].class); ExamPaperInfo tempPaperInfo = null; String tempPaperId = null; short tempType= 0; int tempCount=0; for(int i=0;i