diff --git a/web/src/main/java/com/ibeetl/jlw/entity/TeacherOpenCourseQuestionLogScoreInfo.java b/web/src/main/java/com/ibeetl/jlw/entity/TeacherOpenCourseQuestionLogScoreInfo.java index bef73b06..9472f256 100644 --- a/web/src/main/java/com/ibeetl/jlw/entity/TeacherOpenCourseQuestionLogScoreInfo.java +++ b/web/src/main/java/com/ibeetl/jlw/entity/TeacherOpenCourseQuestionLogScoreInfo.java @@ -1,10 +1,10 @@ package com.ibeetl.jlw.entity; import cn.hutool.core.util.NumberUtil; -import cn.hutool.core.util.ObjectUtil; import com.ibeetl.admin.core.entity.BaseEntity; import com.ibeetl.jlw.enums.ResourcesQuestionSnapshotFromTypeEnum; import lombok.Data; +import org.beetl.sql.annotation.entity.Auto; import org.beetl.sql.annotation.entity.Table; import org.beetl.sql.fetch.annotation.Fetch; import org.beetl.sql.fetch.annotation.FetchSql; @@ -21,6 +21,10 @@ import java.util.List; @Table(name = "teacher_open_course_question_log") public class TeacherOpenCourseQuestionLogScoreInfo extends BaseEntity { + + @Auto + private Long teacherOpenCourseQuestionLogId ; + /** ========================================================================= */ /** ========== 这部分数据需要通过BeetlSQL来查询,才能自动触发FetchSql 注解 ========== */ //来源类型(枚举) @@ -41,7 +45,7 @@ public class TeacherOpenCourseQuestionLogScoreInfo extends BaseEntity { "left join resources_question_snapshot ta on ta.resources_question_snapshot_id = t.resources_question_snapshot_id " + "where t.teacher_open_course_question_log_status = 1 " + "and t.student_id = #studentId# " + - "and t.teacher_open_course_question_log_from_type = #teacherOpenCourseQuestionLogFromType# " + + "and t.teacher_open_course_question_log_from_type = #resourcesQuestionSnapshotFromType# " + "and CONCAT(t.teacher_open_course_question_log_answer, ',') = ta.question_answer" ) private int correctCount; @@ -51,7 +55,7 @@ public class TeacherOpenCourseQuestionLogScoreInfo extends BaseEntity { "left join resources_question_snapshot ta on ta.resources_question_snapshot_id = t.resources_question_snapshot_id " + "where t.teacher_open_course_question_log_status = 1 " + "and t.student_id = #studentId# " + - "and t.teacher_open_course_question_log_from_type = #teacherOpenCourseQuestionLogFromType# " + + "and t.teacher_open_course_question_log_from_type = #resourcesQuestionSnapshotFromType# " + "and CONCAT(t.teacher_open_course_question_log_answer, ',') != ta.question_answer" ) private int wrongCount; @@ -62,7 +66,7 @@ public class TeacherOpenCourseQuestionLogScoreInfo extends BaseEntity { "left join resources_question_snapshot ta on ta.resources_question_snapshot_id = t.resources_question_snapshot_id " + "where t.teacher_open_course_question_log_status = 1 " + "and t.student_id = #studentId# " + - "and t.teacher_open_course_question_log_from_type = #teacherOpenCourseQuestionLogFromType# " + + "and t.teacher_open_course_question_log_from_type = #resourcesQuestionSnapshotFromType# " + "and CONCAT(t.teacher_open_course_question_log_answer, ',') != ta.question_answer" ) private float totalScore; @@ -81,8 +85,8 @@ public class TeacherOpenCourseQuestionLogScoreInfo extends BaseEntity { "LEFT JOIN resources_question_snapshot ta ON ta.resources_question_snapshot_id = t.resources_question_snapshot_id " + "WHERE t.teacher_open_course_question_log_status = 1 " + "and t.student_id = #studentId# " + - "and t.teacher_open_course_question_log_from_type = #teacherOpenCourseQuestionLogFromType# " + - "and t.teacher_open_course_question_log_from_id = #teacherOpenCourseQuestionLogFromId# " + "and t.teacher_open_course_question_log_from_type = #resourcesQuestionSnapshotFromType# " + + "and t.teacher_open_course_question_log_from_id = #resourcesQuestionSnapshotFromId# " ) private List questionLogList; @@ -100,11 +104,12 @@ public class TeacherOpenCourseQuestionLogScoreInfo extends BaseEntity { * 尝试计算正确率 */ private void tryCalcCorrectRate() { - if (ObjectUtil.isAllNotEmpty(this.getCorrectCount(), this.getWrongCount())) { + int temp = this.getCorrectCount() + this.getWrongCount(); + if (this.getCorrectCount() > 0 && this.getWrongCount() > 0) { // 计算正确率, 取小数点后2位数 // 计算规则:正确率 = 正确数量 / (正确数量 + 错误数量) * 100 this.setCorrectRate(NumberUtil - .round(this.getCorrectCount() / (this.getCorrectCount() + this.getWrongCount()) * 100, 0) + .round(NumberUtil.div(this.getCorrectCount(), temp) * 100, 0) .intValue()); } } diff --git a/web/src/main/java/com/ibeetl/jlw/service/ResourcesQuestionSnapshotService.java b/web/src/main/java/com/ibeetl/jlw/service/ResourcesQuestionSnapshotService.java index 53496cc2..0d83f5d6 100644 --- a/web/src/main/java/com/ibeetl/jlw/service/ResourcesQuestionSnapshotService.java +++ b/web/src/main/java/com/ibeetl/jlw/service/ResourcesQuestionSnapshotService.java @@ -15,6 +15,7 @@ import com.ibeetl.jlw.entity.TeacherOpenCourseQuestionLogScoreInfo; import com.ibeetl.jlw.enums.ResourcesQuestionSnapshotFromTypeEnum; import com.ibeetl.jlw.web.query.ResourcesQuestionSnapshotQuery; import org.apache.commons.lang3.StringUtils; +import org.beetl.sql.core.SQLReady; import org.beetl.sql.core.SqlId; import org.beetl.sql.core.engine.PageQuery; import org.springframework.stereotype.Service; @@ -163,15 +164,17 @@ public class ResourcesQuestionSnapshotService extends CoreBaseServicequeryByCondition(PageQuery query){ PageQuery ret = teacherOpenCourseQuestionLogDao.queryByCondition(query); @@ -160,7 +165,12 @@ public class TeacherOpenCourseQuestionLogService extends CoreBaseService> questionLogMap, final ResourcesQuestionSnapshotFromTypeEnum fromType) { // 查询学生身份 - Student student = studentDao.getByUserId(getUserId()); + final CoreUser user = getUser(); + final Student student = studentDao.getByUserId(user.getId()); + + ResourcesQuestionSnapshot entity = new ResourcesQuestionSnapshot(); + entity.setResourcesQuestionSnapshotId(CollectionUtils.firstElement(questionLogMap.keySet())); + ResourcesQuestionSnapshot resourcesQuestionSnapshot = resourcesQuestionSnapshotDao.templateOne(entity); List list = new ArrayList<>(); @@ -171,8 +181,10 @@ public class TeacherOpenCourseQuestionLogService extends CoreBaseService @@ -69,6 +70,14 @@ public class BaseTest { TestEnvUtil.setProperty("user.orgId", student.getOrgId().toString()); } + public void putLoginInfoToEnv(final String userId, final String orgId) throws Exception { + Objects.requireNonNull(userId); + Objects.requireNonNull(orgId); + // 换学生身份登录系统 + TestEnvUtil.setProperty("user.id", userId); + TestEnvUtil.setProperty("user.orgId", orgId); + } + /** * 随机一个老师登录信息到配置文件中,用于session登录信息 * 也可以在application-test.properties 修改登录信息 diff --git a/web/src/test/java/com/ibeetl/jlw/web/ResourcesQuestionSnapshotControllerTest.java b/web/src/test/java/com/ibeetl/jlw/web/ResourcesQuestionSnapshotControllerTest.java index 737f5bcc..9b8c34e7 100644 --- a/web/src/test/java/com/ibeetl/jlw/web/ResourcesQuestionSnapshotControllerTest.java +++ b/web/src/test/java/com/ibeetl/jlw/web/ResourcesQuestionSnapshotControllerTest.java @@ -2,7 +2,6 @@ package com.ibeetl.jlw.web; import base.BaseTest; import cn.hutool.core.util.ObjectUtil; -import com.ibeetl.admin.test.util.test.TestEnvUtil; import com.ibeetl.jlw.dao.StudentDao; import com.ibeetl.jlw.dao.TeacherOpenCourseQuestionLogDao; import com.ibeetl.jlw.entity.Student; @@ -54,18 +53,16 @@ class ResourcesQuestionSnapshotControllerTest extends BaseTest { TeacherOpenCourseQuestionLog questionLog = CollectionUtils.firstElement(questionLogs); // 模拟登录学生身份 - Student student = studentDao.single(questionLog.getStudentId()); - TestEnvUtil.setProperty("user.id", student.getUserId().toString()); - TestEnvUtil.setProperty("user.orgId", student.getOrgId().toString()); + Student student = CollectionUtils.firstElement(studentDao.getByIds(questionLog.getStudentId().toString())); // 随机取一个学生的登录信息 - putStudentLoginInfoToEnv(); + putLoginInfoToEnv(student.getUserId().toString(), student.getOrgId().toString()); //构造请求参数 RequestBuilder rb = MockMvcRequestBuilders.post(MODEL + "/getScoreInfo.json") .contentType(MediaType.APPLICATION_FORM_URLENCODED_VALUE) - .param("fromType", questionLog.getTeacherOpenCourseQuestionLogFromType().toString()) - .param("fromId", questionLog.getTeacherOpenCourseQuestionLogFromId().toString()) + .param("snapshotFromType", questionLog.getTeacherOpenCourseQuestionLogFromType().toString()) + .param("snapshotFromId", questionLog.getTeacherOpenCourseQuestionLogFromId().toString()) ; //发送请求,验证返回结果 diff --git a/web/src/test/java/com/ibeetl/jlw/web/TeacherOpenCourseQuestionLogControllerTest.java b/web/src/test/java/com/ibeetl/jlw/web/TeacherOpenCourseQuestionLogControllerTest.java index 55c28142..19e15581 100644 --- a/web/src/test/java/com/ibeetl/jlw/web/TeacherOpenCourseQuestionLogControllerTest.java +++ b/web/src/test/java/com/ibeetl/jlw/web/TeacherOpenCourseQuestionLogControllerTest.java @@ -6,20 +6,17 @@ import cn.hutool.core.util.RandomUtil; import com.ibeetl.jlw.dao.ResourcesQuestionSnapshotDao; import com.ibeetl.jlw.dao.StudentDao; import com.ibeetl.jlw.entity.ResourcesQuestionSnapshot; -import com.ibeetl.jlw.enums.ResourcesQuestionSnapshotFromTypeEnum; import org.junit.jupiter.api.Test; import org.springframework.http.MediaType; import org.springframework.test.web.servlet.RequestBuilder; import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; import org.springframework.test.web.servlet.result.MockMvcResultMatchers; -import org.springframework.util.CollectionUtils; import javax.annotation.Resource; import java.util.*; import java.util.concurrent.ConcurrentHashMap; import static cn.hutool.json.JSONUtil.toJsonStr; -import static com.ibeetl.admin.test.util.test.RandomUtils.randomSet; import static org.apache.commons.lang3.StringUtils.join; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @@ -45,14 +42,17 @@ class TeacherOpenCourseQuestionLogControllerTest extends BaseTest { // 通过查询数据库来random实体类属性 // 随机取一个学生的登录信息 List questionSnapshots = resourcesQuestionSnapshotDao.execute( - "select t.* \n" + - "from resources_question_snapshot t \n" + - "where t.question_status = 1\t\n" + - "order by RAND() \n" + - "limit 10 "); + "select t.*\n" + + " from resources_question_snapshot t\n" + + " where t.question_status = 1\n" + + "\tand resources_question_snapshot_from_id = \n" + + "\t\t(select resources_question_snapshot_from_id from resources_question_snapshot ORDER BY RAND() limit 1) \n" + + " order by RAND()"); - // 随机取题目ID和答案 + // 题目快照ID和答案 Map> answerRandomMap = new ConcurrentHashMap<>(); + + // 自动选择选项 questionSnapshots.stream().forEach(item -> { TreeSet answer = new TreeSet<>(); // 单选 @@ -80,14 +80,10 @@ class TeacherOpenCourseQuestionLogControllerTest extends BaseTest { // 随机取一个学生的登录信息 putStudentLoginInfoToEnv(); - // 随机来源类型 - ResourcesQuestionSnapshotFromTypeEnum fromTypeEnum = CollectionUtils - .firstElement(randomSet(ResourcesQuestionSnapshotFromTypeEnum.class)); - //构造请求参数 RequestBuilder rb = MockMvcRequestBuilders.post(MODEL + "/addQuestionLog.json") .contentType(MediaType.APPLICATION_JSON_VALUE) - .param("fromType", fromTypeEnum.name()) + .param("fromType", questionSnapshots.get(0).getResourcesQuestionSnapshotFromType().toString()) .content(toJsonStr(answerRandomMap)); //发送请求,验证返回结果 String result = mvc.perform(rb)