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<ExerciseRecord> 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<ExerciseItemAnswerU> 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<Map<String, Object>> queryResultByInteractExer(String hql,
|
List<Object> args) {
|
|
List<Object[]> lst = this.findBySql(hql, args);
|
|
List<Map<String, Object>> resultLst = new ArrayList<Map<String, Object>>(lst.size());
|
|
Map<String, Object> resultMap = new HashMap<String, Object>(3);
|
for (Object[] obj : lst) {
|
resultMap = new HashMap<String, Object>();
|
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<Map<String, Object>> queryResultByInteract(String hql,
|
List<Object> 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<ExerciseRecord> 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<InterateAnswer> lstAnswers,
|
String exerciseRecordId){
|
String userId = ClientUtils.getUserId();
|
List<ExerciseItemAnswerU> lstAnswerU = new ArrayList<ExerciseItemAnswerU>(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<ExerciseRecord> 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);
|
}
|
|
}
|