You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1353 lines
77 KiB
Java

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

package com.ibeetl.jlw.service;
import cn.hutool.core.bean.BeanUtil;
import cn.jlw.aliPay.utils.StringUtils;
import cn.jlw.util.NumberUtil;
import cn.jlw.util.ToolUtils;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.ibeetl.admin.core.service.CoreBaseService;
import com.ibeetl.admin.core.service.CorePlatformService;
import com.ibeetl.admin.core.util.PlatformException;
import com.ibeetl.admin.core.util.TimeTool;
import com.ibeetl.admin.core.web.JsonResult;
import com.ibeetl.jlw.dao.*;
import com.ibeetl.jlw.entity.*;
import com.ibeetl.jlw.web.query.*;
import org.beetl.sql.core.SqlId;
import org.beetl.sql.core.engine.PageQuery;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;
/**
* Competition Service
*/
@Service
@Transactional
public class CompetitionService extends CoreBaseService<Competition>{
@Autowired private CompetitionDao competitionDao;
@Autowired private CompetitionStudentsService competitionStudentsService;
@Autowired private CompetitionStudentsDao competitionStudentsDao;
@Autowired private CompetitionNewsService competitionNewsService;
@Autowired private ResourcesQuestionService resourcesQuestionService;
@Autowired private CompetitionTaskOneQuestionService competitionTaskOneQuestionService;
@Autowired private CompetitionTaskOneQuestionDao competitionTaskOneQuestionDao;
@Autowired private ResourcesCompetitionService resourcesCompetitionService;
@Autowired private ResourcesCompetitionStepService resourcesCompetitionStepService;
@Autowired private CompetitionTaskSecondQuestionService competitionTaskSecondQuestionService;
@Autowired private CompetitionTaskSecondQuestionDao competitionTaskSecondQuestionDao;
@Autowired private CompetitionTaskSecondQuestionStepService competitionTaskSecondQuestionStepService;
@Autowired private CompetitionTaskSecondQuestionStepDao competitionTaskSecondQuestionStepDao;
@Lazy
@Autowired private StudentService studentService;
@Autowired private CompetitionTeacherEvaluationService competitionTeacherEvaluationService;
@Autowired private CorePlatformService platformService;
@Autowired private CompetitionTaskMainService taskMainService;
public PageQuery<Competition>queryByCondition(PageQuery query){
PageQuery ret = competitionDao.queryByCondition(query);
queryListAfter(ret.getList());
return ret;
}
public PageQuery<Competition>queryByCondition2Student(PageQuery query){
PageQuery ret = competitionDao.queryByCondition2Student(query);
queryListAfter(ret.getList());
return ret;
}
public void deleteCompetition(String ids){
try {
competitionDao.deleteCompetitionByIds(ids);
} catch (Exception e) {
throw new PlatformException("批量删除Competition失败", e);
}
}
public List<Competition> getValuesByQuery (CompetitionQuery competitionQuery){
try {
UniversitiesCollegesJurisdictionExperimentalSystem uSystem = (UniversitiesCollegesJurisdictionExperimentalSystem)platformService.getOther();
if(null != uSystem && ((Integer)1).equals(uSystem.getType())){
competitionQuery.setResourcesApplicationId(uSystem.getTypeId());
}
}catch (Exception e){}
return competitionDao.getValuesByQuery(competitionQuery);
}
public Competition getById(Long competitionId){
return competitionDao.getById(competitionId);
}
public List<Competition> getValues (Object paras){
return sqlManager.select(SqlId.of("jlw.competition.getCompetitionValues"),Competition.class,paras);
}
public JsonResult add(CompetitionQuery competitionQuery){
competitionQuery.setCompetitionStatus(2);//默认禁用
Competition competition = competitionQuery.pojo();
competitionDao.insert(competition);
//参赛学生
//删除以前的
competitionStudentsService.deleteByCompetitionId(competition.getCompetitionId());
if(ToolUtils.findInSet("1,2",competition.getCompetitionType())){
List<CompetitionStudentsQuery> csList = new ArrayList<>();
try {
csList = JSON.parseArray(competitionQuery.getCompetitionStudentsJson(), CompetitionStudentsQuery.class);
} catch (Exception e) {
try {
csList.add(JSONObject.parseObject(competitionQuery.getCompetitionStudentsJson(), CompetitionStudentsQuery.class));
} catch (Exception e1) {}
}
ToolUtils.deleteNullList(csList);
if(null != csList && csList.size()>0){
List<CompetitionStudents> competitionStudentsList = new ArrayList<>();
for(int i=0;i<csList.size();i++){
if(((Integer)1).equals(competition.getCompetitionType()) && null != csList.get(i).getStudentsId()){
CompetitionStudents competitionStudents = new CompetitionStudents();
competitionStudents.setCompetitionId(competition.getCompetitionId());
competitionStudents.setStudentsId(csList.get(i).getStudentsId());
competitionStudentsList.add(competitionStudents);
}else if(((Integer)2).equals(competition.getCompetitionType())
&& StringUtils.isNotBlank(competition.getCompetitionTeamLimit())
&& ToolUtils.isNotSplitBlank(csList.get(i).getStudentsIds(),",",0)){
String studentsIds = csList.get(i).getStudentsId() + "," + csList.get(i).getStudentsIds();
Integer length = Integer.parseInt(competition.getCompetitionTeamLimit().split("\\-")[1]);
//选多了也只取符合的算
for(int j = 0; j<(studentsIds.split(",").length<length?studentsIds.split(",").length:length);j++){
CompetitionStudents competitionStudents = new CompetitionStudents();
competitionStudents.setCompetitionId(competition.getCompetitionId());
competitionStudents.setStudentsId(Long.parseLong(studentsIds.split(",")[j]));
competitionStudents.setTeamFlag(competition.getCompetitionId()+"_"+i);
competitionStudents.setTeamName(StringUtils.isNotBlank(csList.get(i).getTeamName())?csList.get(i).getTeamName():"团队"+ NumberUtil.int2chineseNum(i+1));
if(j == 0){
competitionStudents.setIsCaptain(1);
}else {
competitionStudents.setIsCaptain(2);
}
competitionStudentsList.add(competitionStudents);
}
}
}
if(competitionStudentsList.size()>0){
competitionStudentsService.insertBatch(competitionStudentsList);
}
}
}
//任务一题目
//先删除旧的
competitionTaskOneQuestionService.deleteByCompetitionId(competition.getCompetitionId());
if(ToolUtils.isNotSplitBlank(competitionQuery.getCt1QuestionIds(),",",0)){
List<ResourcesQuestion> resourcesQuestionList = resourcesQuestionService.getByIds(competitionQuery.getCt1QuestionIds());
List<CompetitionTaskOneQuestion> competitionTaskOneQuestionList = new ArrayList<>();
for(int i=0;i<resourcesQuestionList.size();i++){
CompetitionTaskOneQuestion competitionTaskOneQuestion = new CompetitionTaskOneQuestion();
competitionTaskOneQuestion.setCompetitionId(competition.getCompetitionId());
competitionTaskOneQuestion.setQuestionType(resourcesQuestionList.get(i).getQuestionType());
if(((Integer)1).equals(resourcesQuestionList.get(i).getQuestionType())){
competitionTaskOneQuestion.setQuestionScore(competitionQuery.getCt1SingleChoiceSource());
}else if(((Integer)2).equals(resourcesQuestionList.get(i).getQuestionType())){
competitionTaskOneQuestion.setQuestionScore(competitionQuery.getCt1MultipleSource());
}else if(((Integer)3).equals(resourcesQuestionList.get(i).getQuestionType())){
competitionTaskOneQuestion.setQuestionScore(competitionQuery.getCt1JudgeSource());
}
competitionTaskOneQuestion.setQuestionStem(resourcesQuestionList.get(i).getQuestionStem());
competitionTaskOneQuestion.setQuestionOptionA(resourcesQuestionList.get(i).getQuestionOptionA());
competitionTaskOneQuestion.setQuestionOptionB(resourcesQuestionList.get(i).getQuestionOptionB());
competitionTaskOneQuestion.setQuestionOptionC(resourcesQuestionList.get(i).getQuestionOptionC());
competitionTaskOneQuestion.setQuestionOptionD(resourcesQuestionList.get(i).getQuestionOptionD());
competitionTaskOneQuestion.setQuestionOptionE(resourcesQuestionList.get(i).getQuestionOptionE());
competitionTaskOneQuestion.setQuestionAnswer(resourcesQuestionList.get(i).getQuestionAnswer());
competitionTaskOneQuestion.setQuestionAnalysis(resourcesQuestionList.get(i).getQuestionAnalysis());
competitionTaskOneQuestion.setResourcesQuestionId(resourcesQuestionList.get(i).getResourcesQuestionId());
competitionTaskOneQuestionList.add(competitionTaskOneQuestion);
}
if(competitionTaskOneQuestionList.size()>0){
competitionTaskOneQuestionService.insertBatch(competitionTaskOneQuestionList);
}
}
//任务二题目
//先删除旧的
competitionTaskSecondQuestionStepService.deleteByCompetitionId(competition.getCompetitionId());
competitionTaskSecondQuestionService.deleteByCompetitionId(competition.getCompetitionId());
if(ToolUtils.isNotSplitBlank(competitionQuery.getCt2QuestionIds(),",",0)){
List<ResourcesCompetition> resourcesCompetitionList = resourcesCompetitionService.getByIds(competitionQuery.getCt2QuestionIds());
List<ResourcesCompetitionStep> resourcesCompetitionStepList = resourcesCompetitionStepService.getByResourcesCompetitionIds(competitionQuery.getCt2QuestionIds());
Map<Long, List<ResourcesCompetitionStep>> groupByResourcesCompetitionId = null;
try{
groupByResourcesCompetitionId = resourcesCompetitionStepList.stream().collect(Collectors.groupingBy(e -> e.getResourcesCompetitionId()));
}catch (Exception e){}
List<CompetitionTaskSecondQuestion> competitionTaskSecondQuestionList = new ArrayList<>();
for(int i=0;i<resourcesCompetitionList.size();i++){
CompetitionTaskSecondQuestion competitionTaskSecondQuestion = new CompetitionTaskSecondQuestion();
competitionTaskSecondQuestion.setCompetitionId(competition.getCompetitionId());
competitionTaskSecondQuestion.setResourcesCompetitionName(resourcesCompetitionList.get(i).getResourcesCompetitionName());
competitionTaskSecondQuestion.setResourcesCompetitionContent(resourcesCompetitionList.get(i).getResourcesCompetitionContent());
competitionTaskSecondQuestion.setResourcesCompetitionData(resourcesCompetitionList.get(i).getResourcesCompetitionData());
competitionTaskSecondQuestion.setResourcesCompetitionId(resourcesCompetitionList.get(i).getResourcesCompetitionId());
competitionTaskSecondQuestionList.add(competitionTaskSecondQuestion);
}
if(competitionTaskSecondQuestionList.size()>0){
competitionTaskSecondQuestionService.insertBatch(competitionTaskSecondQuestionList);
}
List<CompetitionTaskSecondQuestionStep> competitionTaskSecondQuestionStepList = new ArrayList<>();
String[] ct2QuestionSource = competitionQuery.getCt2QuestionSources().split(",");
for(int i=0;i<competitionTaskSecondQuestionList.size();i++){
Long resourcesCompetitionId = competitionTaskSecondQuestionList.get(i).getResourcesCompetitionId();
List<ResourcesCompetitionStep> rcsList = groupByResourcesCompetitionId.get(resourcesCompetitionId);
for(int j=0;null != rcsList && j<rcsList.size();j++) {
CompetitionTaskSecondQuestionStep competitionTaskSecondQuestionStep = new CompetitionTaskSecondQuestionStep();
competitionTaskSecondQuestionStep.setCompetitionTaskSecondQuestionId(competitionTaskSecondQuestionList.get(i).getCompetitionTaskSecondQuestionId());
competitionTaskSecondQuestionStep.setCompetitionTaskSecondQuestionStepTitle(rcsList.get(j).getResourcesCompetitionStepTitle());
competitionTaskSecondQuestionStep.setCompetitionTaskSecondQuestionStepContent(rcsList.get(j).getResourcesCompetitionStepContent());
competitionTaskSecondQuestionStep.setCompetitionTaskSecondQuestionStepQuestion(rcsList.get(j).getResourcesCompetitionStepQuestionOriginal());//存原数据
competitionTaskSecondQuestionStep.setCompetitionTaskSecondQuestionStepAnswer(rcsList.get(j).getResourcesCompetitionStepAnswerOriginal());//存原数据
competitionTaskSecondQuestionStep.setCompetitionTaskSecondQuestionStepSort(rcsList.get(j).getResourcesCompetitionStepSort());
competitionTaskSecondQuestionStep.setCompetitionTaskSecondQuestionStepScore(ct2QuestionSource.length > i && !"null".equals(ct2QuestionSource[i]) && StringUtils.isNotBlank(ct2QuestionSource[i])?new BigDecimal(ct2QuestionSource[i]):null);
competitionTaskSecondQuestionStepList.add(competitionTaskSecondQuestionStep);
}
}
if(competitionTaskSecondQuestionStepList.size()>0){
competitionTaskSecondQuestionStepService.insertBatch(competitionTaskSecondQuestionStepList);
}
}
CompetitionTaskMainQuery taskMain = BeanUtil.copyProperties(competitionQuery, CompetitionTaskMainQuery.class);
if (taskMain != null) {
taskMainService.add(taskMain);
}
return JsonResult.success(competition.getCompetitionId());
}
public JsonResult edit(CompetitionQuery competitionQuery){ //修改的删除都放里面
// competitionQuery.setCompetitionStatus(2);//默认禁用
Competition oldCompetition = getById(competitionQuery.getCompetitionId());
Competition competition = competitionQuery.pojo();
competition.setCompetitionStatus(oldCompetition.getCompetitionStatus());
if(("-1").equals(competition.getClassIds())){
competitionDao.updateClassIdsNullById(competition.getCompetitionId());
}
competitionDao.updateTemplateById(competition);
competition = getById(competition.getCompetitionId());
//参赛学生
if(null != oldCompetition.getCompetitionType() && null != competition.getCompetitionType()
&& !oldCompetition.getCompetitionType().equals(competition.getCompetitionType())){//切换大赛模式,则删除参赛学生
//删除以前的
competitionStudentsService.deleteByCompetitionId(competition.getCompetitionId());
}
if(ToolUtils.findInSet("1,2",competition.getCompetitionType())){
List<CompetitionStudentsQuery> csList = new ArrayList<>();
try {
csList = JSON.parseArray(competitionQuery.getCompetitionStudentsJson(), CompetitionStudentsQuery.class);
} catch (Exception e) {
try {
csList.add(JSONObject.parseObject(competitionQuery.getCompetitionStudentsJson(), CompetitionStudentsQuery.class));
} catch (Exception e1) {}
}
ToolUtils.deleteNullList(csList);
if(null != csList && csList.size()>0){
//查出来以前的
CompetitionStudents oldCompetitionStudents = new CompetitionStudents();
oldCompetitionStudents.setCompetitionId(competition.getCompetitionId());
List<CompetitionStudents> oldCompetitionStudentsList = competitionStudentsDao.template(oldCompetitionStudents);
Map<Long, List<CompetitionStudents>> groupByStudentsId = null;
try{
groupByStudentsId = oldCompetitionStudentsList.stream().collect(Collectors.groupingBy(e -> e.getStudentsId()));
}catch (Exception e){}
List<CompetitionStudents> competitionStudentsList = new ArrayList<>();
for(int i=0;i<csList.size();i++){
if(((Integer)1).equals(competition.getCompetitionType()) && null != csList.get(i).getStudentsId()){
if(null != groupByStudentsId && groupByStudentsId.size()>0 && null != groupByStudentsId.get(csList.get(i).getStudentsId())){
groupByStudentsId.remove(csList.get(i).getStudentsId());
}else{
CompetitionStudents competitionStudents = new CompetitionStudents();
competitionStudents.setCompetitionId(competition.getCompetitionId());
competitionStudents.setStudentsId(csList.get(i).getStudentsId());
competitionStudentsList.add(competitionStudents);
}
}else if(((Integer)2).equals(competition.getCompetitionType())
&& StringUtils.isNotBlank(competition.getCompetitionTeamLimit())
&& ToolUtils.isNotSplitBlank(csList.get(i).getStudentsIds(),",",0)){
String studentsIds = csList.get(i).getStudentsId() + "," + csList.get(i).getStudentsIds();
Integer length = Integer.parseInt(competition.getCompetitionTeamLimit().split("\\-")[1]);
//选多了也只取符合的算
for(int j = 0; j<(studentsIds.split(",").length<length?studentsIds.split(",").length:length);j++){
if(null != groupByStudentsId && groupByStudentsId.size()>0 && null != groupByStudentsId.get(Long.parseLong(studentsIds.split(",")[j]))){
groupByStudentsId.remove(Long.parseLong(studentsIds.split(",")[j]));
}else{
CompetitionStudents competitionStudents = new CompetitionStudents();
competitionStudents.setCompetitionId(competition.getCompetitionId());
competitionStudents.setStudentsId(Long.parseLong(studentsIds.split(",")[j]));
competitionStudents.setTeamFlag(competition.getCompetitionId()+"_"+i);
competitionStudents.setTeamName(StringUtils.isNotBlank(csList.get(i).getTeamName())?csList.get(i).getTeamName():"团队"+ NumberUtil.int2chineseNum(i+1));
if(j == 0){
competitionStudents.setIsCaptain(1);
}else {
competitionStudents.setIsCaptain(2);
}
competitionStudentsList.add(competitionStudents);
}
}
}
}
if(competitionStudentsList.size()>0){
competitionStudentsService.insertBatch(competitionStudentsList);
}
if(null != groupByStudentsId && groupByStudentsId.size()>0){
String ids = "";
for(List<CompetitionStudents> competitionStudents : groupByStudentsId.values()){
for(int i=0;null != competitionStudents && i<competitionStudents.size();i++){
ids += competitionStudents.get(i).getCompetitionStudentsId()+",";
}
}
if(StringUtils.isNotBlank(ids)){
competitionStudentsService.deleteCompetitionStudents(ids);
}
}
}
}
//大赛动态
List<CompetitionNewsQuery> cnList = new ArrayList<>();
try {
cnList = JSON.parseArray(competitionQuery.getCompetitionNewsJson(), CompetitionNewsQuery.class);
} catch (Exception e) {
try {
cnList.add(JSONObject.parseObject(competitionQuery.getCompetitionNewsJson(), CompetitionNewsQuery.class));
} catch (Exception e1) {}
}
ToolUtils.deleteNullList(cnList);
if(null != cnList && cnList.size()>0){
//删除以前的
competitionNewsService.deleteByCompetitionId(competition.getCompetitionId());
List<CompetitionNews> competitionNewsList = new ArrayList<>();
for(int i=0;i<cnList.size();i++){
CompetitionNews competitionNews = cnList.get(i).pojo();
if(null != competitionNews){
competitionNews.setCompetitionId(competition.getCompetitionId());
}
competitionNewsList.add(competitionNews);
}
if(competitionNewsList.size()>0){
competitionNewsService.insertBatch(competitionNewsList);
}
}
//任务一题目
if(ToolUtils.isNotSplitBlank(competitionQuery.getCt1QuestionIds(),",",0)){
//先删除旧的
competitionTaskOneQuestionService.deleteByCompetitionId(competition.getCompetitionId());
List<ResourcesQuestion> resourcesQuestionList = resourcesQuestionService.getByIds(competitionQuery.getCt1QuestionIds());
List<CompetitionTaskOneQuestion> competitionTaskOneQuestionList = new ArrayList<>();
for(int i=0;i<resourcesQuestionList.size();i++){
CompetitionTaskOneQuestion competitionTaskOneQuestion = new CompetitionTaskOneQuestion();
competitionTaskOneQuestion.setCompetitionId(competition.getCompetitionId());
competitionTaskOneQuestion.setQuestionType(resourcesQuestionList.get(i).getQuestionType());
if(((Integer)1).equals(resourcesQuestionList.get(i).getQuestionType())){
competitionTaskOneQuestion.setQuestionScore(competitionQuery.getCt1SingleChoiceSource());
}else if(((Integer)2).equals(resourcesQuestionList.get(i).getQuestionType())){
competitionTaskOneQuestion.setQuestionScore(competitionQuery.getCt1MultipleSource());
}else if(((Integer)3).equals(resourcesQuestionList.get(i).getQuestionType())){
competitionTaskOneQuestion.setQuestionScore(competitionQuery.getCt1JudgeSource());
}
competitionTaskOneQuestion.setQuestionStem(resourcesQuestionList.get(i).getQuestionStem());
competitionTaskOneQuestion.setQuestionOptionA(resourcesQuestionList.get(i).getQuestionOptionA());
competitionTaskOneQuestion.setQuestionOptionB(resourcesQuestionList.get(i).getQuestionOptionB());
competitionTaskOneQuestion.setQuestionOptionC(resourcesQuestionList.get(i).getQuestionOptionC());
competitionTaskOneQuestion.setQuestionOptionD(resourcesQuestionList.get(i).getQuestionOptionD());
competitionTaskOneQuestion.setQuestionOptionE(resourcesQuestionList.get(i).getQuestionOptionE());
competitionTaskOneQuestion.setQuestionAnswer(resourcesQuestionList.get(i).getQuestionAnswer());
competitionTaskOneQuestion.setQuestionAnalysis(resourcesQuestionList.get(i).getQuestionAnalysis());
competitionTaskOneQuestion.setResourcesQuestionId(resourcesQuestionList.get(i).getResourcesQuestionId());
competitionTaskOneQuestionList.add(competitionTaskOneQuestion);
}
if(competitionTaskOneQuestionList.size()>0){
competitionTaskOneQuestionService.insertBatch(competitionTaskOneQuestionList);
}
}
//任务二题目
if(ToolUtils.isNotSplitBlank(competitionQuery.getCt2QuestionIds(),",",0)){
//先删除旧的
competitionTaskSecondQuestionStepService.deleteByCompetitionId(competition.getCompetitionId());
competitionTaskSecondQuestionService.deleteByCompetitionId(competition.getCompetitionId());
List<ResourcesCompetition> resourcesCompetitionList = resourcesCompetitionService.getByIds(competitionQuery.getCt2QuestionIds());
List<ResourcesCompetitionStep> resourcesCompetitionStepList = resourcesCompetitionStepService.getByResourcesCompetitionIds(competitionQuery.getCt2QuestionIds());
Map<Long, List<ResourcesCompetitionStep>> groupByResourcesCompetitionId = null;
try{
groupByResourcesCompetitionId = resourcesCompetitionStepList.stream().collect(Collectors.groupingBy(e -> e.getResourcesCompetitionId()));
}catch (Exception e){}
List<CompetitionTaskSecondQuestion> competitionTaskSecondQuestionList = new ArrayList<>();
for(int i=0;i<resourcesCompetitionList.size();i++){
CompetitionTaskSecondQuestion competitionTaskSecondQuestion = new CompetitionTaskSecondQuestion();
competitionTaskSecondQuestion.setCompetitionId(competition.getCompetitionId());
competitionTaskSecondQuestion.setResourcesCompetitionName(resourcesCompetitionList.get(i).getResourcesCompetitionName());
competitionTaskSecondQuestion.setResourcesCompetitionContent(resourcesCompetitionList.get(i).getResourcesCompetitionContent());
competitionTaskSecondQuestion.setResourcesCompetitionData(resourcesCompetitionList.get(i).getResourcesCompetitionData());
competitionTaskSecondQuestion.setResourcesCompetitionId(resourcesCompetitionList.get(i).getResourcesCompetitionId());
competitionTaskSecondQuestionList.add(competitionTaskSecondQuestion);
}
if(competitionTaskSecondQuestionList.size()>0){
competitionTaskSecondQuestionService.insertBatch(competitionTaskSecondQuestionList);
}
List<CompetitionTaskSecondQuestionStep> competitionTaskSecondQuestionStepList = new ArrayList<>();
String[] ct2QuestionSource = competitionQuery.getCt2QuestionSources().split(",");
for(int i=0;i<competitionTaskSecondQuestionList.size();i++){
Long resourcesCompetitionId = competitionTaskSecondQuestionList.get(i).getResourcesCompetitionId();
List<ResourcesCompetitionStep> rcsList = groupByResourcesCompetitionId.get(resourcesCompetitionId);
for(int j=0;null != rcsList && j<rcsList.size();j++) {
CompetitionTaskSecondQuestionStep competitionTaskSecondQuestionStep = new CompetitionTaskSecondQuestionStep();
competitionTaskSecondQuestionStep.setCompetitionTaskSecondQuestionId(competitionTaskSecondQuestionList.get(i).getCompetitionTaskSecondQuestionId());
competitionTaskSecondQuestionStep.setCompetitionTaskSecondQuestionStepTitle(rcsList.get(j).getResourcesCompetitionStepTitle());
competitionTaskSecondQuestionStep.setCompetitionTaskSecondQuestionStepContent(rcsList.get(j).getResourcesCompetitionStepContent());
competitionTaskSecondQuestionStep.setCompetitionTaskSecondQuestionStepQuestion(rcsList.get(j).getResourcesCompetitionStepQuestionOriginal());//存原数据
competitionTaskSecondQuestionStep.setCompetitionTaskSecondQuestionStepAnswer(rcsList.get(j).getResourcesCompetitionStepAnswerOriginal());//存原数据
competitionTaskSecondQuestionStep.setCompetitionTaskSecondQuestionStepSort(rcsList.get(j).getResourcesCompetitionStepSort());
competitionTaskSecondQuestionStep.setCompetitionTaskSecondQuestionStepScore(ct2QuestionSource.length > i && !"null".equals(ct2QuestionSource[i]) && StringUtils.isNotBlank(ct2QuestionSource[i])?new BigDecimal(ct2QuestionSource[i]):null);
competitionTaskSecondQuestionStepList.add(competitionTaskSecondQuestionStep);
}
}
if(competitionTaskSecondQuestionStepList.size()>0){
competitionTaskSecondQuestionStepService.insertBatch(competitionTaskSecondQuestionStepList);
}
}
CompetitionTaskMainQuery taskMain = BeanUtil.copyProperties(competitionQuery, CompetitionTaskMainQuery.class);
if (taskMain != null) {
taskMainService.add(taskMain);
}
return JsonResult.success(competition.getCompetitionId());
}
public String autoTeam(CompetitionQuery competitionQuery){
Competition competition = getById(competitionQuery.getCompetitionId());
Integer teamMinLimit = Integer.parseInt(competition.getCompetitionTeamLimit().split("\\-")[0]);
Integer teamMaxLimit = Integer.parseInt(competition.getCompetitionTeamLimit().split("\\-")[1]);
StudentQuery studentQuery = new StudentQuery();
studentQuery.setClassIds(competitionQuery.getClassIds());
studentQuery.setStudentStatus(1);
studentQuery.setOrderByRand(1);
List<Student> studentList = studentService.getValuesByQuery(studentQuery);
Map<Long,Long[]> teamMap = new HashMap<>();
for(int i=0;;){
Long[] teamMembers = new Long[teamMaxLimit];
Long captain = studentList.get(i).getStudentId();
i++;
if(i<studentList.size()){
break;
}
int teamMembersCount = 0;
for(int j=0;j<teamMaxLimit;j++){
teamMembers[j] = studentList.get(i).getStudentId();
teamMembersCount++;
i++;
if(i<studentList.size()){
break;
}
}
if(teamMembersCount >= teamMinLimit.intValue()){
teamMap.put(captain,teamMembers);
}
}
//删除以前的
competitionNewsService.deleteByCompetitionId(competition.getCompetitionId());
List<CompetitionStudents> competitionStudentsList = new ArrayList<>();
int i = 0;
for(Map.Entry<Long,Long[]> entry : teamMap.entrySet()){
String studentsIds = entry.getKey()+",";
for(int n=0;n<entry.getValue().length;n++){
studentsIds += entry.getValue()[n] + ",";
}
for(int j = 0;j<studentsIds.split(",").length;j++){
if(StringUtils.isNotBlank(studentsIds.split(",")[j])){
CompetitionStudents competitionStudents = new CompetitionStudents();
competitionStudents.setCompetitionId(competition.getCompetitionId());
competitionStudents.setStudentsId(Long.parseLong(studentsIds.split(",")[j]));
competitionStudents.setTeamFlag(competition.getCompetitionId()+"_"+i);
competitionStudents.setTeamName("团队"+ NumberUtil.int2chineseNum(i+1));
if(j == 0){
competitionStudents.setIsCaptain(1);
}else {
competitionStudents.setIsCaptain(2);
}
competitionStudentsList.add(competitionStudents);
}
}
i++;
}
if(competitionStudentsList.size()>0){
competitionStudentsService.insertBatch(competitionStudentsList);
}
return "自动组队成功,共选"+studentList.size()+"参与组队,组"+(studentList.size()/teamMaxLimit)+"队"+(studentList.size()-(studentList.size()/teamMaxLimit*teamMaxLimit) > 0?(",剩余"+(studentList.size()-(studentList.size()/teamMaxLimit*teamMaxLimit))+"人待分配"):(""));
}
//大赛是否可以发布验证
public String verification(Long competitionId){
Competition competition = queryById(competitionId);
if(null == competition){
return "";
}else if(StringUtils.isBlank(competition.getCompetitionName())){
return "请填写大赛名称";
}else if(null == competition.getCompetitionType()){
return "请选择大赛模式";
}else if(StringUtils.isBlank(competition.getCompetitionSponsorName())){
return "请填写主办方名称";
}else if(((Integer)2).equals(competition.getCompetitionType()) && ToolUtils.isNotSplitBlank(competition.getCompetitionAwardList(),"-",0)){
return "请设置团队赛人数限制";
}else if(null == competition.getCompetitionFinalsLimit()){
return "请设置决赛人数限制";
}else if(StringUtils.isBlank(competition.getCompetitionGeneralization())){
return "请填写大赛概况";
}else if(null == competition.getCompetitionEnrollStartTime()){
return "请设置报名开始时间";
}else if(null == competition.getCompetitionEnrollEndTime()){
return "请设置报名结束时间";
}else if(TimeTool.timeAccordWithOrder(new Date[]{competition.getCompetitionEnrollStartTime(),competition.getCompetitionEnrollEndTime()})){
return "报名开始时间应小于报名结束时间";
}else if(null == competition.getCompetitionContestStartTime()){
return "请设置竞赛开始时间";
}else if(null == competition.getCompetitionContestEndTime()){
return "请设置竞赛结束时间";
}else if(TimeTool.timeAccordWithOrder(new Date[]{competition.getCompetitionContestStartTime(),competition.getCompetitionContestEndTime()})){
return "竞赛开始时间应小于竞赛结束时间";
}else if(TimeTool.timeAccordWithOrder(new Date[]{competition.getCompetitionEnrollStartTime(),competition.getCompetitionEnrollEndTime(),competition.getCompetitionContestStartTime(),competition.getCompetitionContestEndTime()})){
return "报名时间应小于竞赛时间";
}else if(!ToolUtils.isNotSplitBlank(competition.getCompetitionJudgeIds(),",",0)){
return "请设置评委";
}else if(!ToolUtils.isNotSplitBlank(competition.getCompetitionWeight(),",",2)){
return "请进行权重设置";
}else {
//参赛学员 如果不可报名,则管有没有人参赛
if(StringUtils.isBlank(competition.getClassIds())){
if(((Integer)1).equals(competition.getCompetitionType())){//个人赛
CompetitionStudentsQuery competitionStudentsQuery = new CompetitionStudentsQuery();
competitionStudentsQuery.setCompetitionId(competitionId);
List<CompetitionStudents> competitionStudentsList = competitionStudentsService.getCompetitionPersonalInfo(competitionStudentsQuery);
if(null != competitionStudentsList && competitionStudentsList.size()>0){}else {
return "请设置参赛学员";
}
}else if(((Integer)2).equals(competition.getCompetitionType())){ //团队赛
CompetitionStudentsQuery competitionStudentsQuery = new CompetitionStudentsQuery();
competitionStudentsQuery.setCompetitionId(competitionId);
List<CompetitionStudents> competitionStudentsList = competitionStudentsService.getCompetitionTeamInfo(competitionStudentsQuery);
if(null != competitionStudentsList && competitionStudentsList.size()>0){}else {
return "请设置参赛学员";
}
}
}
//任务一题目
CompetitionTaskOneQuestion competitionTaskOneQuestion = new CompetitionTaskOneQuestion();
competitionTaskOneQuestion.setCompetitionId(competitionId);
List<CompetitionTaskOneQuestion> competitionTaskOneQuestionList = competitionTaskOneQuestionDao.template(competitionTaskOneQuestion);
if(null != competitionTaskOneQuestionList && competitionTaskOneQuestionList.size()>0){
if(null == competition.getCompetitionTaskOneStartTime()){
return "请设置任务一开始时间";
}else if(null == competition.getCompetitionTaskOneEndTime()){
return "请设置任务一结束时间";
}else if(TimeTool.timeAccordWithOrder(new Date[]{competition.getCompetitionTaskOneStartTime(),competition.getCompetitionTaskOneEndTime()})){
return "任务一开始时间应小于任务一结束时间";
}
for(int i=0;i<competitionTaskOneQuestionList.size();i++){
if(null == competitionTaskOneQuestionList.get(i).getQuestionScore()){
return "请设置任务一的题目的分值";
}
}
}else{
return "请设置任务一的题目";
}
//任务二题目
CompetitionTaskSecondQuestion competitionTaskSecondQuestion = new CompetitionTaskSecondQuestion();
competitionTaskSecondQuestion.setCompetitionId(competitionId);
List<CompetitionTaskSecondQuestion> competitionTaskSecondQuestionList = competitionTaskSecondQuestionDao.template(competitionTaskSecondQuestion);
if(null != competitionTaskSecondQuestionList && competitionTaskSecondQuestionList.size()>0){
if(null == competition.getCompetitionTaskSecondStartTime()){
return "请设置任务二开始时间";
}else if(null == competition.getCompetitionTaskSecondEndTime()){
return "请设置任务二结束时间";
}else if(TimeTool.timeAccordWithOrder(new Date[]{competition.getCompetitionTaskSecondStartTime(),competition.getCompetitionTaskSecondEndTime()})){
return "任务二开始时间应小于任务二结束时间";
}
List<CompetitionTaskSecondQuestionStep> competitionTaskSecondQuestionStepList = competitionTaskSecondQuestionStepService.getByCompetitionId(competitionId);
if(null != competitionTaskSecondQuestionStepList && competitionTaskSecondQuestionStepList.size()>0){ }else{
return "任务二的题目中不存在步骤,请重新选择题目";
}
for(int i=0;i<competitionTaskSecondQuestionStepList.size();i++){
if(null == competitionTaskSecondQuestionStepList.get(i).getCompetitionTaskSecondQuestionStepScore()){
return "请设置任务二的题目中步骤的分值";
}
}
}
if(null != competition.getCompetitionTaskOneStartTime() && null != competition.getCompetitionTaskOneEndTime()
&& null != competition.getCompetitionTaskSecondStartTime() && null != competition.getCompetitionTaskSecondEndTime()){
if(TimeTool.timeAccordWithOrder(new Date[]{
competition.getCompetitionEnrollStartTime(),
competition.getCompetitionEnrollEndTime(),
competition.getCompetitionContestStartTime(),
competition.getCompetitionTaskOneStartTime(),
competition.getCompetitionTaskOneEndTime(),
competition.getCompetitionTaskSecondStartTime(),
competition.getCompetitionTaskSecondEndTime(),
competition.getCompetitionContestEndTime()
})){
return "竞报名时间应小于竞赛时间,任务一时间应小于任务二时间,任务时间应在竞赛时间内";
}
}else if(null != competition.getCompetitionTaskOneStartTime() && null != competition.getCompetitionTaskOneEndTime()){
if(TimeTool.timeAccordWithOrder(new Date[]{
competition.getCompetitionEnrollStartTime(),
competition.getCompetitionEnrollEndTime(),
competition.getCompetitionContestStartTime(),
competition.getCompetitionTaskOneStartTime(),
competition.getCompetitionTaskOneEndTime(),
competition.getCompetitionContestEndTime()
})){
return "竞报名时间应小于竞赛时间,任务时间应在竞赛时间内";
}
}else if(null != competition.getCompetitionTaskSecondStartTime() && null != competition.getCompetitionTaskSecondEndTime()){
if(TimeTool.timeAccordWithOrder(new Date[]{
competition.getCompetitionEnrollStartTime(),
competition.getCompetitionEnrollEndTime(),
competition.getCompetitionContestStartTime(),
competition.getCompetitionTaskSecondStartTime(),
competition.getCompetitionTaskSecondEndTime(),
competition.getCompetitionContestEndTime()
})){
return "竞报名时间应小于竞赛时间,任务时间应在竞赛时间内";
}
}
}
return "";
}
//part 代表部分值 1大赛概况 2竞赛时间 3参赛学员 4大赛任务 5成绩权重 6大赛评委 7获奖名单 8大赛动态 9常见问题
public JsonResult queryInfo(Long competitionId,String ct1QuestionIds,Integer singleChoiceNum,Integer multipleChoiceNum,Integer judgeNum,String ct2QuestionIds,Integer part){
Long resourcesApplicationId = null;
UniversitiesCollegesJurisdictionExperimentalSystem uSystem = (UniversitiesCollegesJurisdictionExperimentalSystem)platformService.getOther();
if (uSystem != null) {
Integer type = uSystem.getType();
if(type != null && type == 1){
resourcesApplicationId = uSystem.getTypeId();
}
}
Map<String,Object>result = new HashMap<>();
Competition competition = new Competition();
CompetitionTaskMain info = taskMainService.getInfo(competitionId);
competition.set("competitionTaskMain", info);
CompetitionQuery competitionQuery = new CompetitionQuery();
competitionQuery.setCompetitionId(competitionId);
//大赛概况
if(((Integer)1).equals(part) || null == part){
competitionQuery.setShowCompetitionGeneralization(1);
}
//成绩权重
if(((Integer)5).equals(part) || null == part){
competitionQuery.setShowCompetitionDefenceScoreStandard(1);
}
//获奖名单
if(((Integer)7).equals(part) || null == part){
competitionQuery.setShowCompetitionAwardList(1);
}
//常见问题
if(((Integer)9).equals(part) || null == part){
competitionQuery.setShowCompetitionCommonProblem(1);
}
//竞赛时间 没得特殊的
// if(((Integer)2).equals(part) || null == part){
//
// }
List<Competition> competitionList = getValuesByQuery(competitionQuery);
if(null != competitionList && competitionList.size() == 1 && null != competitionList.get(0)){
competition = competitionList.get(0);
//参赛学员 分页剔出去
// if(((Integer)3).equals(part) || null == part){
//
// }
//大赛任务
if(((Integer)4).equals(part) || null == part){
String ct1QIds = "";
//客观题
Map<String,Object> m = new HashMap<>();
BigDecimal ct1QuestionTotalScore = BigDecimal.ZERO;
Map<Integer, List<ResourcesQuestion>> groupByQuestionType = null;
try{
if(ToolUtils.isNotSplitBlank(ct1QuestionIds,",",0)){
List<ResourcesQuestion> resourcesQuestionTempList = resourcesQuestionService.getByIds(ct1QuestionIds);
groupByQuestionType = resourcesQuestionTempList.stream().collect(Collectors.groupingBy(e -> e.getQuestionType()));
}
}catch (Exception e){}
if(null != singleChoiceNum){
if(singleChoiceNum >= 0){
ResourcesQuestionQuery resourcesQuestionQuery = new ResourcesQuestionQuery();
resourcesQuestionQuery.setQuestionType(1);
resourcesQuestionQuery.setResourcesApplicationId(resourcesApplicationId);
resourcesQuestionQuery.setSingleChoiceNum(singleChoiceNum);
List<ResourcesQuestion> resourcesQuestionList = resourcesQuestionService.getValuesByQuery(resourcesQuestionQuery);
if(null != resourcesQuestionList){
if(null == groupByQuestionType){
groupByQuestionType =new HashMap<>();
}
groupByQuestionType.put(1,resourcesQuestionList);
}
}else {
if(null == groupByQuestionType){
groupByQuestionType =new HashMap<>();
}
groupByQuestionType.put(1,new ArrayList<ResourcesQuestion>());
}
}
if(null != multipleChoiceNum){
if(multipleChoiceNum >= 0){
ResourcesQuestionQuery resourcesQuestionQuery = new ResourcesQuestionQuery();
resourcesQuestionQuery.setQuestionType(2);
resourcesQuestionQuery.setResourcesApplicationId(resourcesApplicationId);
resourcesQuestionQuery.setMultipleChoiceNum(multipleChoiceNum);
List<ResourcesQuestion> resourcesQuestionList = resourcesQuestionService.getValuesByQuery(resourcesQuestionQuery);
if(null != resourcesQuestionList){
if(null == groupByQuestionType){
groupByQuestionType =new HashMap<>();
}
groupByQuestionType.put(2,resourcesQuestionList);
}
}else {
if(null == groupByQuestionType){
groupByQuestionType =new HashMap<>();
}
groupByQuestionType.put(2,new ArrayList<ResourcesQuestion>());
}
}
if(null != judgeNum){
if(judgeNum >= 0){
ResourcesQuestionQuery resourcesQuestionQuery = new ResourcesQuestionQuery();
resourcesQuestionQuery.setQuestionType(3);
resourcesQuestionQuery.setResourcesApplicationId(resourcesApplicationId);
resourcesQuestionQuery.setJudgeNum(judgeNum);
List<ResourcesQuestion> resourcesQuestionList = resourcesQuestionService.getValuesByQuery(resourcesQuestionQuery);
if(null != resourcesQuestionList){
if(null == groupByQuestionType){
groupByQuestionType =new HashMap<>();
}
groupByQuestionType.put(3,resourcesQuestionList);
}
}else {
if(null == groupByQuestionType){
groupByQuestionType =new HashMap<>();
}
groupByQuestionType.put(3,new ArrayList<ResourcesQuestion>());
}
}
Integer[] typeChoiceNum = {null,singleChoiceNum,multipleChoiceNum,judgeNum};
for(int i=1;i<4;i++){
Integer choiceNumber = 0;
Map<String,Object> map = new HashMap<>();
ResourcesQuestionQuery resourcesQuestionQuery = new ResourcesQuestionQuery();
resourcesQuestionQuery.setQuestionType(i);
resourcesQuestionQuery.setResourcesApplicationId(resourcesApplicationId);
List<ResourcesQuestion> resourcesQuestionList = resourcesQuestionService.getValuesByQuery(resourcesQuestionQuery);
map.put("totalNumber",null != resourcesQuestionList?resourcesQuestionList.size():0);
CompetitionTaskOneQuestion competitionTaskOneQuestion = new CompetitionTaskOneQuestion();
competitionTaskOneQuestion.setQuestionType(i);
competitionTaskOneQuestion.setCompetitionId(competitionId);
List<CompetitionTaskOneQuestion> competitionTaskOneQuestionList = competitionTaskOneQuestionDao.template(competitionTaskOneQuestion);
for(int j=0;null != groupByQuestionType && null != groupByQuestionType.get(i) && j<groupByQuestionType.get(i).size();j++){
if(!ToolUtils.findInSet(ct1QIds,groupByQuestionType.get(i).get(j).getResourcesQuestionId())){
ct1QIds +=groupByQuestionType.get(i).get(j).getResourcesQuestionId() + ",";
choiceNumber++;
}
}
for(int j=0;null == groupByQuestionType && null != competitionTaskOneQuestionList && j<competitionTaskOneQuestionList.size();j++){
if(!ToolUtils.findInSet(ct1QIds,competitionTaskOneQuestionList.get(j).getResourcesQuestionId())){
ct1QIds += competitionTaskOneQuestionList.get(j).getResourcesQuestionId() + ",";
choiceNumber++;
}
}
map.put("choiceNumber",null != typeChoiceNum[i] && typeChoiceNum[i] >= 0?choiceNumber:(choiceNumber>0?choiceNumber:null));
map.put("questionScore",null != competitionTaskOneQuestionList
&& competitionTaskOneQuestionList.size()>0
&& null != competitionTaskOneQuestionList.get(0)
&& null != competitionTaskOneQuestionList.get(0).getQuestionScore()?
competitionTaskOneQuestionList.get(0).getQuestionScore():"");
BigDecimal totalQuestionScore =
null != competitionTaskOneQuestionList
&& competitionTaskOneQuestionList.size()>0
&& null != competitionTaskOneQuestionList.get(0)
&& null != competitionTaskOneQuestionList.get(0).getQuestionScore()?
competitionTaskOneQuestionList.get(0).getQuestionScore().multiply(new BigDecimal(competitionTaskOneQuestionList.size())):null;
map.put("totalQuestionScore",totalQuestionScore);
ct1QuestionTotalScore = ct1QuestionTotalScore.add(null != totalQuestionScore?totalQuestionScore:BigDecimal.ZERO);
m.put(i+"",map);
}
m.put("ct1QuestionTotalScore",ct1QuestionTotalScore);
competition.set("cT1QuestionList",m);
String ct2QIds = "";
//竞赛案例
BigDecimal ct2QuestionTotalScore = BigDecimal.ZERO;
List<CompetitionTaskSecondQuestion>cT2QuestionList = new ArrayList<>();
List<CompetitionTaskSecondQuestion> resourcesCompetitionList = resourcesCompetitionService.getByIdsToCompetitionTaskSecondQuestion(ct2QuestionIds);
if(null != resourcesCompetitionList && resourcesCompetitionList.size()>0){
cT2QuestionList.addAll(resourcesCompetitionList);
}
if(StringUtils.isBlank(ct2QuestionIds)){
CompetitionTaskSecondQuestionQuery competitionTaskSecondQuestionQuery = new CompetitionTaskSecondQuestionQuery();
competitionTaskSecondQuestionQuery.setCompetitionId(competitionId);
List<CompetitionTaskSecondQuestion>competitionTaskSecondQuestionList = competitionTaskSecondQuestionDao.getValuesByQuery(competitionTaskSecondQuestionQuery);
if(null != competitionTaskSecondQuestionList && competitionTaskSecondQuestionList.size()>0){
cT2QuestionList.addAll(competitionTaskSecondQuestionList);
}
}
//去重
cT2QuestionList = cT2QuestionList.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(CompetitionTaskSecondQuestion :: getResourcesCompetitionId))), ArrayList::new));
for(int i=0;i<cT2QuestionList.size();i++){
ct2QIds += cT2QuestionList.get(i).getResourcesCompetitionId()+",";
if(null != cT2QuestionList.get(i).get("totalStepScore") && StringUtils.isNotBlank(cT2QuestionList.get(i).get("totalStepScore").toString())){
ct2QuestionTotalScore = ct2QuestionTotalScore.add(new BigDecimal(cT2QuestionList.get(i).get("totalStepScore").toString()));
}
}
competition.set("cT2QuestionList",cT2QuestionList);
competition.set("ct2QuestionTotalScore",ct2QuestionTotalScore);
result.put("ct1QuestionIds",StringUtils.isNotBlank(ct1QIds)?(ct1QIds.indexOf(",") == ct1QIds.length()?ct1QIds.substring(0,ct1QIds.length()-1):ct1QIds).replace(",,",","):"");
result.put("ct2QuestionIds",StringUtils.isNotBlank(ct2QIds)?(ct2QIds.indexOf(",") == ct2QIds.length()?ct2QIds.substring(0,ct2QIds.length()-1):ct2QIds).replace(",,",","):"");
}
//大赛评委 分页剔出去
// if(((Integer)6).equals(part) || null == part){
//
//
// }
//大赛动态
if(((Integer)8).equals(part) || null == part){
CompetitionNews competitionNews = new CompetitionNews();
competitionNews.setCompetitionId(competitionId);
List<CompetitionNews>competitionNewsList = competitionNewsService.getValues(competitionNews);
competition.set("competitionNewsList",competitionNewsList);
}
}
result.put("data",competition);
return JsonResult.successMap(result);
}
//part 代表部分值 1大赛概况 2大赛任务 3排行榜 4大赛答辩 5参赛学员参赛团队 6获奖名单 7大赛动态 8常见问题
public Competition queryInfo(Long competitionId,Long studentId,Integer part){
Competition competition = new Competition();
CompetitionQuery competitionQuery = new CompetitionQuery();
competitionQuery.setCompetitionId(competitionId);
//大赛概况
if(((Integer)1).equals(part) || null == part){
competitionQuery.setShowCompetitionGeneralization(1);
}
//大赛任务 都是时间什么的,不用特殊搞
// if(((Integer)2).equals(part) || null == part){
//
// }
//排行榜 都是分页,剔出来
// if(((Integer)3).equals(part) || null == part){
//
// }
//大赛答辩
if(((Integer)4).equals(part) || null == part){
competitionQuery.setShowCompetitionDefenceScoreStandard(1);
}
//参赛学员(参赛团队)都是分页,剔出来
// if(((Integer)5).equals(part) || null == part){
// competitionQuery.setShowCompetitionDefenceScoreStandard(1);
// }
//获奖名单
if(((Integer)6).equals(part) || null == part){
competitionQuery.setShowCompetitionAwardList(1);
}
//常见问题
if(((Integer)8).equals(part) || null == part){
competitionQuery.setShowCompetitionCommonProblem(1);
}
List<Competition> competitionList = getValuesByQuery(competitionQuery);
if(null != competitionList && competitionList.size() == 1 && null != competitionList.get(0)){
competition = competitionList.get(0);
//是否参赛 1是 2否
CompetitionStudentsQuery competitionStudentsQuery = new CompetitionStudentsQuery();
competitionStudentsQuery.setCompetitionId(competitionId);
competitionStudentsQuery.setStudentsId(studentId);
List<CompetitionStudents> competitionStudentsList = null;
if(((Integer)1).equals(competition.getCompetitionType())){
competitionStudentsList = competitionStudentsDao.getCompetitionPersonalInfo(competitionStudentsQuery);
}else if(((Integer)2).equals(competition.getCompetitionType())){
competitionStudentsList = competitionStudentsDao.getCompetitionTeamInfo(competitionStudentsQuery);
}
if(null != competitionStudentsList && competitionStudentsList.size()>0){
competition.set("beCompetitionStudents",1);
}else {
competition.set("beCompetitionStudents",2);
}
//是否可进入任务三 1是 2否
if(null != competitionStudentsList && competitionStudentsList.size()>0 && null != competitionStudentsList.get(0) && null != competitionStudentsList.get(0).competitionStudentsRanking() && competitionStudentsList.get(0).competitionStudentsRanking() >= competition.getCompetitionFinalsLimit()){
competition.set("beCompetitionFinalsLimit",1);
}else {
competition.set("beCompetitionFinalsLimit",2);
}
//大赛答辩
if(((Integer)4).equals(part) || null == part){
CompetitionTeacherEvaluation competitionTeacherEvaluation = new CompetitionTeacherEvaluation();
competitionTeacherEvaluation.setCompetitionStudentsId(competitionStudentsList.get(0).getCompetitionStudentsId());
List<CompetitionTeacherEvaluation> competitionTeacherEvaluationList = competitionTeacherEvaluationService.getValues(competitionTeacherEvaluation);
if(((Integer)1).equals(competition.getCompetitionType())){
competition.set("competitionStudents",null != competitionStudentsList && competitionStudentsList.size()>0?competitionStudentsList.get(0):new CompetitionStudents());
competition.set("competitionTeacherEvaluationList",competitionTeacherEvaluationList);
}else if(((Integer)2).equals(competition.getCompetitionType())){
competition.set("competitionStudents",null != competitionStudentsList && competitionStudentsList.size()>0?competitionStudentsList.get(0):new CompetitionStudents());
competition.set("competitionTeacherEvaluationList",competitionTeacherEvaluationList);
}
}
//大赛动态
if(((Integer)7).equals(part) || null == part){
CompetitionNews competitionNews = new CompetitionNews();
competitionNews.setCompetitionId(competitionId);
List<CompetitionNews>competitionNewsList = competitionNewsService.getValues(competitionNews);
competition.set("competitionNewsList",competitionNewsList);
}
}
competition.set("currentTime",TimeTool.getNowTime());
return competition;
}
// 生成学生试卷
public String createPaper(Long competitionId,Long studentId){
Long competitionStudentsId = null;
if(null != studentId){
CompetitionStudents competitionStudents = new CompetitionStudents();
competitionStudents.setCompetitionId(competitionId);
competitionStudents.setStudentsId(studentId);
competitionStudentsId = competitionStudentsService.getValues(competitionStudents).get(0).getCompetitionStudentsId();
}
if(null != competitionStudentsId){
//根据大赛ID查出模板试卷
CompetitionTaskOneQuestion competitionTaskOneQuestion = new CompetitionTaskOneQuestion();
competitionTaskOneQuestion.setCompetitionStudentsId(competitionStudentsId);
List<CompetitionTaskOneQuestion> competitionTaskOneQuestionList = competitionTaskOneQuestionDao.template(competitionTaskOneQuestion);
if(null != competitionTaskOneQuestionList && competitionTaskOneQuestionList.size()>0){
return "生成失败,已生成试卷";
}
CompetitionTaskSecondQuestion competitionTaskSecondQuestion = new CompetitionTaskSecondQuestion();
competitionTaskSecondQuestion.setCompetitionStudentsId(competitionStudentsId);
List<CompetitionTaskSecondQuestion> competitionTaskSecondQuestionList = competitionTaskSecondQuestionDao.template(competitionTaskSecondQuestion);
if(null != competitionTaskSecondQuestionList && competitionTaskSecondQuestionList.size()>0){
return "生成失败,已生成试卷";
}
}else {
return "生成失败,学生信息丢失";
}
//根据大赛ID查出模板试卷
CompetitionTaskOneQuestion competitionTaskOneQuestion = new CompetitionTaskOneQuestion();
competitionTaskOneQuestion.setCompetitionId(competitionId);
List<CompetitionTaskOneQuestion> competitionTaskOneQuestionList = competitionTaskOneQuestionDao.template(competitionTaskOneQuestion);
Map<Integer, List<CompetitionTaskOneQuestion>> groupByQuestionType = null;
if(null != competitionTaskOneQuestionList && competitionTaskOneQuestionList.size()>0){
try{
groupByQuestionType = competitionTaskOneQuestionList.stream().collect(Collectors.groupingBy(e -> e.getQuestionType()));
}catch (Exception e){}
}
CompetitionTaskSecondQuestion competitionTaskSecondQuestion = new CompetitionTaskSecondQuestion();
competitionTaskSecondQuestion.setCompetitionId(competitionId);
List<CompetitionTaskSecondQuestion> competitionTaskSecondQuestionList = competitionTaskSecondQuestionDao.template(competitionTaskSecondQuestion);
List<CompetitionTaskSecondQuestionStep> competitionTaskSecondQuestionStepList = null;
Map<Long, List<CompetitionTaskSecondQuestionStep>> groupByCompetitionTaskSecondQuestionId = null;
if(null != competitionTaskSecondQuestionList && competitionTaskSecondQuestionList.size()>0){
competitionTaskSecondQuestionStepList = competitionTaskSecondQuestionStepService.getByCompetitionId(competitionId);
if(null != competitionTaskSecondQuestionStepList && competitionTaskSecondQuestionStepList.size()>0){
try{
groupByCompetitionTaskSecondQuestionId = competitionTaskSecondQuestionStepList.stream().collect(Collectors.groupingBy(e -> e.getCompetitionTaskSecondQuestionId()));
}catch (Exception e){}
}
}
List<CompetitionStudents> competitionStudentsList = new ArrayList<>();
if(null != competitionStudentsId){//指定生成
CompetitionStudents competitionStudents = new CompetitionStudents();
competitionStudents.setCompetitionStudentsId(competitionStudentsId);
competitionStudentsList.add(competitionStudents);
}else {//全部生成
CompetitionStudents competitionStudents = new CompetitionStudents();
competitionStudents.setCompetitionId(competitionId);
competitionStudentsList = competitionStudentsDao.template(competitionStudents);
}
if(null != competitionStudentsList && competitionStudentsList.size()>0){
String competitionStudentsIds = "";
for(int i=0;i<competitionStudentsList.size();i++) {
competitionStudentsIds += competitionStudentsList.get(i).getCompetitionStudentsId() + ",";
}
//任务一
List<CompetitionTaskOneQuestion> competitionTaskOneQuestions = new ArrayList<>();
List<CompetitionTaskOneQuestion> oldCompetitionTaskOneQuestionList = competitionTaskOneQuestionDao.getByCompetitionStudentsIds(competitionStudentsIds);//为了防止重复添加
Map<Long, List<CompetitionTaskOneQuestion>> oneGroupByCompetitionStudentsId = null;
try{
oneGroupByCompetitionStudentsId = oldCompetitionTaskOneQuestionList.stream().collect(Collectors.groupingBy(e -> e.getCompetitionStudentsId()));
}catch (Exception e){}
//任务二
List<CompetitionTaskSecondQuestion> competitionTaskSecondQuestions = new ArrayList<>();
List<CompetitionTaskSecondQuestion> oldCompetitionTaskSecondQuestionList = competitionTaskSecondQuestionDao.getByCompetitionStudentsIds(competitionStudentsIds);//为了防止重复添加
Map<Long, List<CompetitionTaskSecondQuestion>> secondGroupByCompetitionStudentsId = null;
try{
secondGroupByCompetitionStudentsId = oldCompetitionTaskSecondQuestionList.stream().collect(Collectors.groupingBy(e -> e.getCompetitionStudentsId()));
}catch (Exception e){}
for(int i=0;i<competitionStudentsList.size();i++){
if(null != oneGroupByCompetitionStudentsId && null != oneGroupByCompetitionStudentsId.get(competitionStudentsList.get(i).getCompetitionStudentsId())){ }else {
Random rand=new Random(i);//随机种子
//任务一的题目
List<CompetitionTaskOneQuestion>singleChoiceList = ToolUtils.deepCopyList(groupByQuestionType.get(1));//单选
List<CompetitionTaskOneQuestion>multipleChoiceList = ToolUtils.deepCopyList(groupByQuestionType.get(2));//多选
List<CompetitionTaskOneQuestion>judgeList = ToolUtils.deepCopyList(groupByQuestionType.get(3));//判断
//打乱选项顺序
if(null != singleChoiceList && singleChoiceList.size()>0){
scramblingOptions(singleChoiceList);
}
if(null != multipleChoiceList && multipleChoiceList.size()>0){
scramblingOptions(multipleChoiceList);
}
//打乱题目顺序
if(null != singleChoiceList && singleChoiceList.size()>0){
Collections.shuffle(singleChoiceList,rand);
}
if(null != multipleChoiceList && multipleChoiceList.size()>0){
Collections.shuffle(multipleChoiceList,rand);
}
if(null != judgeList && judgeList.size()>0){
Collections.shuffle(judgeList,rand);
}
for(int j=0;null != singleChoiceList && j<singleChoiceList.size();j++){
singleChoiceList.get(j).setCompetitionTaskOneQuestionId(null);
singleChoiceList.get(j).setCompetitionId(null);
singleChoiceList.get(j).setCompetitionStudentsId(competitionStudentsList.get(i).getCompetitionStudentsId());
}
for(int j=0;null != multipleChoiceList && j<multipleChoiceList.size();j++){
multipleChoiceList.get(j).setCompetitionTaskOneQuestionId(null);
multipleChoiceList.get(j).setCompetitionId(null);
multipleChoiceList.get(j).setCompetitionStudentsId(competitionStudentsList.get(i).getCompetitionStudentsId());
}
for(int j=0;null != judgeList && j<judgeList.size();j++){
judgeList.get(j).setCompetitionTaskOneQuestionId(null);
judgeList.get(j).setCompetitionId(null);
judgeList.get(j).setCompetitionStudentsId(competitionStudentsList.get(i).getCompetitionStudentsId());
}
if(null != singleChoiceList && singleChoiceList.size()>0){
competitionTaskOneQuestions.addAll(singleChoiceList);
}
if(null != multipleChoiceList && multipleChoiceList.size()>0){
competitionTaskOneQuestions.addAll(multipleChoiceList);
}
if(null != judgeList && judgeList.size()>0){
competitionTaskOneQuestions.addAll(judgeList);
}
}
if(null != secondGroupByCompetitionStudentsId && null != secondGroupByCompetitionStudentsId.get(competitionStudentsList.get(i).getCompetitionStudentsId())){ }else {
//任务二的题目
List<CompetitionTaskSecondQuestion> contestQuestionList = ToolUtils.deepCopyList(competitionTaskSecondQuestionList);
for(int j=0;j<contestQuestionList.size();j++){
Long ctsqId = contestQuestionList.get(j).getCompetitionTaskSecondQuestionId();
contestQuestionList.get(j).setCompetitionTaskSecondQuestionId(null);
contestQuestionList.get(j).setCompetitionId(null);
contestQuestionList.get(j).setCompetitionStudentsId(competitionStudentsList.get(i).getCompetitionStudentsId());
contestQuestionList.get(j).set("ctsqId",ctsqId);
}
competitionTaskSecondQuestions.addAll(contestQuestionList);
}
}
//任务一题目批量保存
ToolUtils.deleteNullList(competitionTaskOneQuestions);
if(null != competitionTaskOneQuestions && competitionTaskOneQuestions.size()>0){
competitionTaskOneQuestionService.insertBatch(competitionTaskOneQuestions);
}
//任务二题目批量保存
ToolUtils.deleteNullList(competitionTaskSecondQuestions);
if(null != competitionTaskSecondQuestions && competitionTaskSecondQuestions.size()>0){
competitionTaskSecondQuestionService.insertBatch(competitionTaskSecondQuestions);
}
//任务二题目步骤处理
List<CompetitionTaskSecondQuestionStep> competitionTaskSecondQuestionSteps = new ArrayList<>();
for(int i=0;i<competitionTaskSecondQuestions.size();i++){
Long ctsqId = Long.parseLong(competitionTaskSecondQuestions.get(i).get("ctsqId").toString());
List<CompetitionTaskSecondQuestionStep> ctsqsList = ToolUtils.deepCopyList(groupByCompetitionTaskSecondQuestionId.get(ctsqId));
for(int j=0;j<ctsqsList.size();j++){
ctsqsList.get(j).setCompetitionTaskSecondQuestionStepId(null);
ctsqsList.get(j).setCompetitionTaskSecondQuestionId(competitionTaskSecondQuestions.get(i).getCompetitionTaskSecondQuestionId());
}
competitionTaskSecondQuestionSteps.addAll(ctsqsList);
}
//任务二题目步骤批量保存
ToolUtils.deleteNullList(competitionTaskSecondQuestionSteps);
if(null != competitionTaskSecondQuestionSteps && competitionTaskSecondQuestionSteps.size()>0){
competitionTaskSecondQuestionStepDao.insertBatch(competitionTaskSecondQuestionSteps);
}
}
return "";
}
//打乱选项顺序
public void scramblingOptions(List<CompetitionTaskOneQuestion> competitionTaskOneQuestionList){
String[] answer = {"A","B","C","D","E"};
for(int i=0;null != competitionTaskOneQuestionList && i<competitionTaskOneQuestionList.size();i++){
if(ToolUtils.findInSet("1,2",competitionTaskOneQuestionList.get(i).getQuestionType())){//单选、多选
Random rand=new Random(i);//随机种子
List<String[]> options = new ArrayList<>();
if(StringUtils.isNotBlank(competitionTaskOneQuestionList.get(i).getQuestionOptionA())){
options.add(new String[]{competitionTaskOneQuestionList.get(i).getQuestionOptionA(),
ToolUtils.findInSet(competitionTaskOneQuestionList.get(i).getQuestionAnswer(),"A")?"A":""});
}
if(StringUtils.isNotBlank(competitionTaskOneQuestionList.get(i).getQuestionOptionB())){
options.add(new String[]{competitionTaskOneQuestionList.get(i).getQuestionOptionB(),
ToolUtils.findInSet(competitionTaskOneQuestionList.get(i).getQuestionAnswer(),"B")?"B":""});
}
if(StringUtils.isNotBlank(competitionTaskOneQuestionList.get(i).getQuestionOptionC())){
options.add(new String[]{competitionTaskOneQuestionList.get(i).getQuestionOptionC(),
ToolUtils.findInSet(competitionTaskOneQuestionList.get(i).getQuestionAnswer(),"C")?"C":""});
}
if(StringUtils.isNotBlank(competitionTaskOneQuestionList.get(i).getQuestionOptionD())){
options.add(new String[]{competitionTaskOneQuestionList.get(i).getQuestionOptionD(),
ToolUtils.findInSet(competitionTaskOneQuestionList.get(i).getQuestionAnswer(),"D")?"D":""});
}
if(StringUtils.isNotBlank(competitionTaskOneQuestionList.get(i).getQuestionOptionE())){
options.add(new String[]{competitionTaskOneQuestionList.get(i).getQuestionOptionE(),
ToolUtils.findInSet(competitionTaskOneQuestionList.get(i).getQuestionAnswer(),"E")?"E":""});
}
Collections.shuffle(options,rand);//打乱顺序
competitionTaskOneQuestionList.get(i).setQuestionOptionA(options.size()>0?options.get(0)[0]:null);
competitionTaskOneQuestionList.get(i).setQuestionOptionB(options.size()>1?options.get(1)[0]:null);
competitionTaskOneQuestionList.get(i).setQuestionOptionC(options.size()>2?options.get(2)[0]:null);
competitionTaskOneQuestionList.get(i).setQuestionOptionD(options.size()>3?options.get(3)[0]:null);
competitionTaskOneQuestionList.get(i).setQuestionOptionE(options.size()>4?options.get(4)[0]:null);
String questionAnswer = "";
for(int j=0;j<options.size();j++){
if(StringUtils.isNotBlank(options.get(j)[1])){
questionAnswer += answer[j]+",";
}
}
competitionTaskOneQuestionList.get(i).setQuestionAnswer(questionAnswer);
}
}
}
//part 代表部分值 1大赛概况 2大赛任务 3排行榜 4大赛答辩 5参赛学员参赛团队 6获奖名单 7大赛动态 8常见问题
public Competition queryInfo2Teacher(Long competitionId,Integer part){
Competition competition = new Competition();
CompetitionQuery competitionQuery = new CompetitionQuery();
competitionQuery.setCompetitionId(competitionId);
//大赛概况
if(((Integer)1).equals(part) || null == part){
competitionQuery.setShowCompetitionGeneralization(1);
}
//大赛任务 每个人的分页,提出来
// if(((Integer)2).equals(part) || null == part){
//
// }
//排行榜 都是分页,剔出来
// if(((Integer)3).equals(part) || null == part){
//
// }
//大赛答辩
if(((Integer)4).equals(part) || null == part){
competitionQuery.setShowCompetitionDefenceScoreStandard(1);
}
//参赛学员(参赛团队)都是分页,剔出来
// if(((Integer)5).equals(part) || null == part){
// competitionQuery.setShowCompetitionDefenceScoreStandard(1);
// }
//获奖名单
if(((Integer)6).equals(part) || null == part){
competitionQuery.setShowCompetitionAwardList(1);
}
//常见问题
if(((Integer)8).equals(part) || null == part){
competitionQuery.setShowCompetitionCommonProblem(1);
}
List<Competition> competitionList = getValuesByQuery(competitionQuery);
if(null != competitionList && competitionList.size() == 1 && null != competitionList.get(0)){
competition = competitionList.get(0);
//大赛答辩 每个人的分页,提出来
// if(((Integer)4).equals(part) || null == part){
//
// }
//大赛动态
if(((Integer)7).equals(part) || null == part){
CompetitionNews competitionNews = new CompetitionNews();
competitionNews.setCompetitionId(competitionId);
List<CompetitionNews>competitionNewsList = competitionNewsService.getValues(competitionNews);
competition.set("competitionNewsList",competitionNewsList);
}
}
return competition;
}
}