diff --git a/web/src/main/java/com/ibeetl/jlw/service/GeneralQuestionLogService.java b/web/src/main/java/com/ibeetl/jlw/service/GeneralQuestionLogService.java index 6238d815..ca9f1576 100644 --- a/web/src/main/java/com/ibeetl/jlw/service/GeneralQuestionLogService.java +++ b/web/src/main/java/com/ibeetl/jlw/service/GeneralQuestionLogService.java @@ -1,6 +1,7 @@ package com.ibeetl.jlw.service; import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.Assert; @@ -612,7 +613,7 @@ public class GeneralQuestionLogService extends CoreBaseService<GeneralQuestionLo .build(); List<GeneralQuestionLog> logList = generalQuestionLogDao.getValuesByQuery(questionLogQuery); - final List<QuestionLogAddTypeEnum> tempList = Arrays.asList(PRE_SUBMIT, null); + final List<QuestionLogAddTypeEnum> tempList = Arrays.asList(PRE_SUBMIT, LOCK, null); // 只是未提交的数据 logList = logList.stream().filter(item -> tempList.contains(item.getQuestionLogAddType())).collect(Collectors.toList()); Assert.notEmpty(logList, "未查询到题目信息!"); @@ -635,6 +636,9 @@ public class GeneralQuestionLogService extends CoreBaseService<GeneralQuestionLo validateQuestionLogAddTypeThrow(questionLog.getQuestionLogAddType(), questionLogAddDTO.getQuestionLogAddType()); // 学生提交的答案 String answer = questionLogMap.get(questionLog.getGeneralQuestionLogId().toString()); + String answerBySnapshot = questionLogMap.get(questionLog.getGeneralResourcesQuestionSnapshotId().toString()); + + answer = defaultIfNull(answer, answerBySnapshot); // 默认0分 questionLog.setStudentScore(BigDecimal.valueOf(0)); @@ -811,10 +815,23 @@ public class GeneralQuestionLogService extends CoreBaseService<GeneralQuestionLo } List<GeneralQuestionLog> logList = getValuesBySettingIds(questionSettingId.toString()); - GeneralQuestionSetting questionSetting = generalQuestionSettingService.getInfo(questionSettingId); setErrorSuccessCountField(updateList, logList); + // 这里是库里查询到多条记录,但只更新改过值的数据 + updateList.forEach(item -> { + // 直接替换表里查询到的数据 + int index = CollUtil.indexOf(logList, questionLog -> questionLog.getGeneralQuestionLogId().equals(item.getGeneralQuestionLogId())); + Optional<GeneralQuestionLog> optional = logList.stream() + .filter(o -> o.getGeneralQuestionLogId().equals(item.getGeneralQuestionLogId())).findFirst(); + + optional.ifPresent(c -> { + logList.set(index, c); + }); + }); + + GeneralQuestionSetting questionSetting = generalQuestionSettingService.getInfo(questionSettingId); + if (CollectionUtil.isNotEmpty(logList) && questionSetting != null) { String logIds = logList.stream().map(GeneralQuestionLog::getGeneralQuestionLogId).map(Objects::toString).collect(joining(",")); addQuestionLogSummary(logIds, logList, student, questionSetting.getGeneralQuestionSettingName(), questionSetting.getBusinessType(), questionSetting.getGeneralQuestionSettingType()); diff --git a/web/src/main/java/com/ibeetl/jlw/service/GeneralQuestionSettingService.java b/web/src/main/java/com/ibeetl/jlw/service/GeneralQuestionSettingService.java index c8042f26..2813dd30 100644 --- a/web/src/main/java/com/ibeetl/jlw/service/GeneralQuestionSettingService.java +++ b/web/src/main/java/com/ibeetl/jlw/service/GeneralQuestionSettingService.java @@ -4,6 +4,7 @@ import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.Assert; import cn.hutool.core.util.ArrayUtil; +import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import cn.jlw.util.EnumUtil; @@ -40,6 +41,7 @@ import org.springframework.validation.annotation.Validated; import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotNull; import java.io.*; +import java.math.BigDecimal; import java.util.*; import static cn.hutool.core.util.ObjectUtil.defaultIfNull; @@ -768,4 +770,56 @@ public class GeneralQuestionSettingService extends CoreBaseService<GeneralQuesti questionSetting.setQuestionSettingOptions(questionSettingDTOList); } } + + /** + * 设置题目的分数和完成时间 + * @param list + * @param student + */ + public void setMyQuestionLogScoreInfo(List<GeneralQuestionSetting> list, Student student) { + Optional.ofNullable(list).orElse(Collections.emptyList()).forEach(item -> { + Long questionSettingId = item.getGeneralQuestionSettingId(); + if (ObjectUtil.isNotEmpty(student)) { + Long studentId = student.getStudentId(); + + QuestionLogSummaryQuery logSummaryQuery = new QuestionLogSummaryQuery(); + logSummaryQuery.setPersonId(studentId); + logSummaryQuery.setQuestionLogSummaryStatus(1); + logSummaryQuery.setQuestionSettingId(questionSettingId); + List<QuestionLogSummary> myLogSummaryList = questionLogSummaryDao.getValuesByQueryNotWithPermission(logSummaryQuery); + + // 我的得分,完成时间 + if (ObjectUtil.isNotEmpty(myLogSummaryList)) { + QuestionLogSummary myScoreInfo = myLogSummaryList.get(0); + item.set("finishTime", myScoreInfo.getFinishTime()); + item.set("finishSecondTime", myScoreInfo.getFinishSecondTime()); + item.set("myScore", myScoreInfo.getQuestionLogSummaryStudentTotalScore()); + item.set("mySuccessRate", myScoreInfo.getQuestionLogSummarySuccessRate()); + item.set("mySuccessCount", myScoreInfo.getQuestionLogSummarySuccessCount()); + item.set("myErrorCount", myScoreInfo.getQuestionLogSummaryErrorCount()); + } + } + + QuestionLogSummaryQuery logSummaryQuery2 = new QuestionLogSummaryQuery(); + logSummaryQuery2.setQuestionLogSummaryStatus(1); + logSummaryQuery2.setQuestionSettingId(questionSettingId); + List<QuestionLogSummary> logSummaryList2 = questionLogSummaryDao.getValuesByQueryNotWithPermission(logSummaryQuery2); + + // 平均及格率,平均得分等等 + if (ObjectUtil.isNotEmpty(logSummaryList2)) { + BigDecimal studentTotalScore = logSummaryList2.stream().map(QuestionLogSummary::getQuestionLogSummaryStudentTotalScore).reduce(BigDecimal::add).get(); + int passTotalCount = logSummaryList2.stream().map(QuestionLogSummary::getQuestionLogSummaryIsPass).reduce(Integer::sum).get(); + int totalSuccessCount = logSummaryList2.stream().map(QuestionLogSummary::getQuestionLogSummarySuccessCount).reduce(Integer::sum).get(); + int totalErrorCount = logSummaryList2.stream().map(QuestionLogSummary::getQuestionLogSummaryErrorCount).reduce(Integer::sum).get(); + BigDecimal totalSuccessRate = logSummaryList2.stream().map(QuestionLogSummary::getQuestionLogSummarySuccessRate).reduce(BigDecimal::add).get(); + int logSummarySize = logSummaryList2.size(); + + item.set("avgScore", NumberUtil.div(studentTotalScore, logSummarySize, 1)); + item.set("avgPassRate", NumberUtil.div(passTotalCount, logSummarySize, 1)); + item.set("avgSuccessCount", NumberUtil.div(totalSuccessCount, logSummarySize, 1)); + item.set("avgErrorCount", NumberUtil.div(totalErrorCount, logSummarySize, 1)); + item.set("avgSuccessRate", NumberUtil.div(totalSuccessRate, logSummarySize, 1)); + } + }); + } } diff --git a/web/src/main/java/com/ibeetl/jlw/web/GeneralQuestionSettingController.java b/web/src/main/java/com/ibeetl/jlw/web/GeneralQuestionSettingController.java index 2f582096..93100509 100644 --- a/web/src/main/java/com/ibeetl/jlw/web/GeneralQuestionSettingController.java +++ b/web/src/main/java/com/ibeetl/jlw/web/GeneralQuestionSettingController.java @@ -80,6 +80,11 @@ public class GeneralQuestionSettingController{ PageQuery page = condition.getPageQuery(); generalQuestionSettingService.queryByConditionQuery(page); generalQuestionSettingService.fullQuestionSettingOptions(page.getList()); + + if (!condition.getNotSelectOther()) { + // 设置分数和完成时间 + generalQuestionSettingService.setMyQuestionLogScoreInfo(page.getList(), getStudent()); + } return JsonResult.success(page); } } @@ -279,7 +284,7 @@ public class GeneralQuestionSettingController{ @PostMapping(MODEL + "/edit.json") @Function("generalQuestionSetting.edit") - public JsonResult<String> update(@Validated(ValidateConfig.UPDATE.class) GeneralQuestionSettingQuery generalQuestionSettingQuery, BindingResult result) { + public JsonResult<String> update(@Validated(ValidateConfig.UPDATE.class) @RequestBody GeneralQuestionSettingQuery generalQuestionSettingQuery, BindingResult result) { if(result.hasErrors()){ return JsonResult.failMessage(result); }else { diff --git a/web/src/main/java/com/ibeetl/jlw/web/query/GeneralQuestionSettingQuery.java b/web/src/main/java/com/ibeetl/jlw/web/query/GeneralQuestionSettingQuery.java index e58a4bad..3756b8a2 100644 --- a/web/src/main/java/com/ibeetl/jlw/web/query/GeneralQuestionSettingQuery.java +++ b/web/src/main/java/com/ibeetl/jlw/web/query/GeneralQuestionSettingQuery.java @@ -101,6 +101,7 @@ public class GeneralQuestionSettingQuery extends PageParam { private String generalQuestionSettingJsonStr;//json格式 private String _given;//指定更新的特定字段,多个逗号隔开 + private boolean notSelectOther; public GeneralQuestionSetting pojo(){ GeneralQuestionSetting pojo = new GeneralQuestionSetting(); @@ -176,4 +177,12 @@ public class GeneralQuestionSettingQuery extends PageParam { setDefault(this); return this; } + + public boolean getNotSelectOther() { + return notSelectOther; + } + + public void setNotSelectOther(boolean notSelectOther) { + this.notSelectOther = notSelectOther; + } } diff --git a/web/src/main/resources/templates/jlw/courseInfo/examInfoList.html b/web/src/main/resources/templates/jlw/courseInfo/examInfoList.html index df3eded3..69486508 100644 --- a/web/src/main/resources/templates/jlw/courseInfo/examInfoList.html +++ b/web/src/main/resources/templates/jlw/courseInfo/examInfoList.html @@ -146,7 +146,7 @@ data: [], initValue:[xmSeInitValue], on: function(data){ - getQuestionTypeGroupInfo(Common.concatBatchId(data.arr,'id')); + getQuestionTypeGroupInfo(Common.concatBatchId(data.arr,'id'),{}); } }); @@ -306,7 +306,7 @@ //添加考试信息 function addGeneral(data){ - getQuestionTypeGroupInfo($.isEmpty(data.generalQuestionSettingId)?xmSeInitValue:data.sourceCourseInfoIds); + getQuestionTypeGroupInfo($.isEmpty(data.generalQuestionSettingId)?xmSeInitValue:data.sourceCourseInfoIds,data); if (courseInfoList.length <= 0){ var ret = Common.getAjax("/jlw/courseInfo/getValues.json",{"courseLabelType":"考证课程类","courseInfoStatus":1,courseInfoType:1}); if (ret.code == 0){ @@ -324,7 +324,7 @@ }else{ demo1.update({ data: courseInfoList, - initValue: [data.sourceCourseInfoIds] + initValue: $.isEmpty(data.sourceCourseInfoIds)?[]:data.sourceCourseInfoIds.split(",") }); } layer.open({ @@ -407,7 +407,12 @@ param.generalQuestionSettingEndShowTrueFalse = generalQuestionSettingEndShowTrueFalse; param.generalQuestionSettingName = generalQuestionSettingName; param.generalQuestionSettingDoCount = generalQuestionSettingDoCount; - var ret = Common.postJSON("/api/generalQuestionSetting/addQuestionByType.do",JSON.stringify(param)); + param.generalQuestionSettingId = data.generalQuestionSettingId; + var url = "/api/generalQuestionSetting/addQuestionByType.do"; + if (!$.isEmpty(param.generalQuestionSettingId)){ + url = "/jlw/generalQuestionSetting/edit.json"; + } + var ret = Common.postJSON(url,JSON.stringify(param)); layer.msg(ret.code == 0 ? "保存成功!" : ret.msg, { offset: ['50%'], icon: ret.code == 0 ? 1 : 2, @@ -426,12 +431,31 @@ } //根据课程ID获取相应的题目数量及类型 - function getQuestionTypeGroupInfo(ids){ + function getQuestionTypeGroupInfo(ids,item){ + var map = {}; + if (!$.isEmpty(item.questionSettingOptions)){ + item.questionSettingOptions.forEach(function (it,i){ + map[it.questionType] = it; + }) + } var ret = Common.postAjax("/api/resourcesQuestion/questionTypeGroupInfo.do",{courseInfoIdPlural:ids,courseLabelTypePlural:"考证课程类"}); if(ret.code == 0){ + var ctNum = "",hjNum = ""; + if (!$.isEmpty(ret.data)){ + ctNum = 0,hjNum = 0; + ret.data.forEach(function (it,i){ + if (!$.isEmpty(map[it.questionType])){ + ctNum = ctNum + map[it.questionType].selectCount; + hjNum = hjNum + map[it.questionType].singleTypeTotalScore; + it.selectCount = map[it.questionType].selectCount; + it.singleScore = map[it.questionType].singleScore; + it.singleTypeTotalScore = map[it.questionType].singleTypeTotalScore; + } + }); + } var getTpl = question_demo.innerHTML ,view = document.getElementById('question_view'); - laytpl(getTpl).render({list:ret.data}, function(html){ + laytpl(getTpl).render({list:ret.data,ctNum:ctNum,hjNum:hjNum}, function(html){ view.innerHTML = html; $("input[name='tnum'],input[name='tfnum']").unbind(); $("input[name='tnum'],input[name='tfnum']").change(function (){