修复成绩定时器

beetlsql3-dev
yaodan 2 years ago
parent 82cd5d838a
commit 8f441da858

@ -7,4 +7,7 @@ package com.ibeetl.jlw.constants;
* @date 2023/05/16 04:27:05
*/
public class TeacherOpenCourseScoreDashboardConstant {
public static final String STUDENT_ASK_MAX_SCORE = "30";
public static final String DISCUSS_MAX_SCORE = "30";
}

@ -254,6 +254,7 @@ public class StudentHandsOnTaskReportService extends CoreBaseService<StudentHand
studentHandsOnTaskReportQuery.setStudentId(student.getStudentId());
}
List<StudentHandsOnTaskReport> list = studentHandsOnTaskReportDao.getValuesByQuery(studentHandsOnTaskReportQuery);
if (null != list && list.size() > 0) {
return list.get(0);
} else {

@ -14,6 +14,7 @@ import com.ibeetl.admin.core.util.PlatformException;
import com.ibeetl.admin.core.util.TimeTool;
import com.ibeetl.admin.core.web.JsonResult;
import com.ibeetl.admin.core.web.JsonReturnCode;
import com.ibeetl.jlw.constants.TeacherOpenCourseScoreDashboardConstant;
import com.ibeetl.jlw.dao.*;
import com.ibeetl.jlw.entity.*;
import com.ibeetl.jlw.enums.ChatLogSendTypeEnum;
@ -75,7 +76,7 @@ public class TeacherOpenCourseScoreDashboardService extends CoreBaseService<Teac
private TeacherOpenCourseStudentSigninLogDao studentSigninLogDao;
@Autowired
private QuestionLogSummaryDao questionLogSummaryService;
private QuestionLogSummaryDao questionLogSummaryDao;
@Autowired
private TeacherOpenCourseQuestionSettingDao teacherOpenCourseQuestionSettingDao;
@Autowired
@ -108,6 +109,9 @@ public class TeacherOpenCourseScoreDashboardService extends CoreBaseService<Teac
@Autowired
private HandsOnAchievementService handsOnAchievementService;
@Autowired
private TeacherOpenCourseChatLogService teacherOpenCourseChatLogService;
public PageQuery<TeacherOpenCourseScoreDashboard> queryByCondition(PageQuery query) {
PageQuery ret = teacherOpenCourseScoreDashboardDao.queryByCondition(query);
@ -451,6 +455,62 @@ public class TeacherOpenCourseScoreDashboardService extends CoreBaseService<Teac
* @return
*/
public boolean updateGrades(Long teacherOpenCourseId) {
if (teacherOpenCourseId == null) {
return false;
}
Date now = new Date();
//获取该课程的所有讨论数据
TeacherOpenCourseChatLog teacherOpenCourseChatLog = new TeacherOpenCourseChatLog();
teacherOpenCourseChatLog.setTeacherOpenCourseId(teacherOpenCourseId);
teacherOpenCourseChatLog.setTeacherOpenCourseChatLogStatus(1);
List<TeacherOpenCourseChatLog> teacherOpenCourseChatLogList = teacherOpenCourseChatLogService.queryObjectList(teacherOpenCourseChatLog);
//查询章节练习配置
List<TeacherOpenCourseQuestionSetting> chapterExerciseList = teacherOpenCourseQuestionSettingDao.createLambdaQuery()
.andEq(TeacherOpenCourseQuestionSetting::getTeacherOpenCourseId, teacherOpenCourseId)
.andEq(TeacherOpenCourseQuestionSetting::getTeacherOpenCourseQuestionSettingType, ResourcesQuestionSnapshotFromTypeEnum.CHAPTER_EXERCISE)
.andEq(TeacherOpenCourseQuestionSetting::getTeacherOpenCourseQuestionSettingStatus, 1).select();
//查询本课程的所有实操任务
TeacherOpenCourseHandsOn param = new TeacherOpenCourseHandsOn();
param.setTeacherOpenCourseId(teacherOpenCourseId);
List<TeacherOpenCourseHandsOn> handsOnList = teacherOpenCourseHandsOnService.queryObjectList(param);
//查询本课程的所有实操任务子项
List<TeacherOpenCourseHandsOnSimulationTasks> teacherOpenCourseHandsOnSimulationTasksList = null;
List<Long> handOnIdList = null;
if (CollectionUtil.isNotEmpty(handsOnList)) {
handOnIdList = handsOnList.stream().map(TeacherOpenCourseHandsOn::getHandsOnId).collect(Collectors.toList());
TeacherOpenCourseHandsOnSimulationTasks query = new TeacherOpenCourseHandsOnSimulationTasks();
query.setTeacherOpenCourseId(teacherOpenCourseId);
teacherOpenCourseHandsOnSimulationTasksList = teacherOpenCourseHandsOnSimulationTasksService.queryObjectList(query);
}
if (CollectionUtil.isEmpty(teacherOpenCourseHandsOnSimulationTasksList)) {
teacherOpenCourseHandsOnSimulationTasksList = new ArrayList<>();
}
if (CollectionUtil.isEmpty(handOnIdList)) {
handOnIdList = new ArrayList<>();
}
//查该课程的所有作业
List<TeacherOpenCourseQuestionSetting> homeworkList = teacherOpenCourseQuestionSettingDao.createLambdaQuery()
.andEq(TeacherOpenCourseQuestionSetting::getTeacherOpenCourseId, teacherOpenCourseId)
.andEq(TeacherOpenCourseQuestionSetting::getTeacherOpenCourseQuestionSettingStatus, 1)
.andIn(TeacherOpenCourseQuestionSetting::getTeacherOpenCourseQuestionSettingType, Arrays.asList(ResourcesQuestionSnapshotFromTypeEnum.HOMEWORK_QUESTION, ResourcesQuestionSnapshotFromTypeEnum.HOMEWORK_FILE))
.select();
//查该课程的所有考试
List<TeacherOpenCourseQuestionSetting> examList = teacherOpenCourseQuestionSettingDao.createLambdaQuery()
.andEq(TeacherOpenCourseQuestionSetting::getTeacherOpenCourseId, teacherOpenCourseId)
.andEq(TeacherOpenCourseQuestionSetting::getTeacherOpenCourseQuestionSettingStatus, 1)
.andEq(TeacherOpenCourseQuestionSetting::getTeacherOpenCourseQuestionSettingType, ResourcesQuestionSnapshotFromTypeEnum.EXAM).select();
//查询权重
TeacherOpenCourseScoreWeight weight = weightDao.single(teacherOpenCourseId);
TeacherOpenCourseMergeStudentQuery studentQuery = new TeacherOpenCourseMergeStudentQuery();
@ -459,23 +519,48 @@ public class TeacherOpenCourseScoreDashboardService extends CoreBaseService<Teac
//查开课里面的学生
List<TeacherOpenCourseMergeStudent> students = mergeStudentDao.getValuesByQueryNotWithPermission(studentQuery);
List<TeacherOpenCourseScoreDashboard> studentScores = new ArrayList<>();
//班次数
for (TeacherOpenCourseMergeStudent teacherOpenCourseMergeStudent : students) {
Long studentId = teacherOpenCourseMergeStudent.getStudentId();
//通过id查询学生
Student student = studentService.queryById(studentId);
TeacherOpenCourseScoreDashboard teacherOpenCourseScoreDashboard = teacherOpenCourseScoreDashboardDao.createLambdaQuery()
.andEq(TeacherOpenCourseScoreDashboard::getTeacherOpenCourseId, teacherOpenCourseId)
.andEq(TeacherOpenCourseScoreDashboard::getStudentId, studentId)
.singleSimple();
if (teacherOpenCourseScoreDashboard == null) {
teacherOpenCourseScoreDashboard = new TeacherOpenCourseScoreDashboard();
teacherOpenCourseScoreDashboard.setTeacherOpenCourseId(teacherOpenCourseId);
teacherOpenCourseScoreDashboard.setStudentId(studentId);
teacherOpenCourseScoreDashboard.setOrgId(student.getOrgId());
teacherOpenCourseScoreDashboard.setStudentSn(student.getStudentSn());
teacherOpenCourseScoreDashboard.setStudentName(student.getStudentName());
teacherOpenCourseScoreDashboard.setExamScore(BigDecimal.ZERO);
teacherOpenCourseScoreDashboard.setCourseScore(BigDecimal.ZERO);
teacherOpenCourseScoreDashboard.setChatScore(BigDecimal.ZERO);
teacherOpenCourseScoreDashboard.setSigninScore(BigDecimal.ZERO);
teacherOpenCourseScoreDashboard.setRealOperationScore(BigDecimal.ZERO);
teacherOpenCourseScoreDashboard.setQuestionHomeworkScore(BigDecimal.ZERO);
teacherOpenCourseScoreDashboard.setTotalScore(BigDecimal.ZERO);
teacherOpenCourseScoreDashboard.setManualScore(BigDecimal.ZERO);
teacherOpenCourseScoreDashboard.setUserId(student.getUserId());
teacherOpenCourseScoreDashboard.setCreateTime(now);
teacherOpenCourseScoreDashboardDao.insert(teacherOpenCourseScoreDashboard);
}
if (teacherOpenCourseScoreDashboard.getTeacherOpenCourseScoreDashboardId() == null) {
log.error("teacherOpenCourseScoreDashboard.getTeacherOpenCourseScoreDashboardId()为空studentId:{},openCourseId:{}", studentId, teacherOpenCourseId);
continue;
}
if (student == null) {
log.error("学生不存在studentId={}", studentId);
continue;
}
TeacherOpenCourseScoreDashboard scoreDashboard = new TeacherOpenCourseScoreDashboard();
scoreDashboard.setStudentId(studentId);
scoreDashboard.setTeacherOpenCourseId(teacherOpenCourseId);
scoreDashboard.setTeacherOpenCourseScoreDashboardId(teacherOpenCourseScoreDashboard.getTeacherOpenCourseScoreDashboardId());
//签到成绩
{
@ -522,17 +607,11 @@ public class TeacherOpenCourseScoreDashboardService extends CoreBaseService<Teac
{
scoreDashboard.setCourseScore(BigDecimal.ZERO);
//查询章节练习配置
List<TeacherOpenCourseQuestionSetting> chapterExerciseList = teacherOpenCourseQuestionSettingDao.createLambdaQuery()
.andEq(TeacherOpenCourseQuestionSetting::getTeacherOpenCourseId, teacherOpenCourseId)
.andEq(TeacherOpenCourseQuestionSetting::getTeacherOpenCourseQuestionSettingType, ResourcesQuestionSnapshotFromTypeEnum.CHAPTER_EXERCISE)
.andEq(TeacherOpenCourseQuestionSetting::getTeacherOpenCourseQuestionSettingStatus, 1).select();
if (!CollectionUtil.isEmpty(chapterExerciseList)) {
List<Long> teacherOpenCourseQuestionSettingIdList = chapterExerciseList.stream().map(TeacherOpenCourseQuestionSetting::getTeacherOpenCourseQuestionSettingId).collect(Collectors.toList());
//查询章节练习成绩
List<QuestionLogSummary> questionLogSummaryList = questionLogSummaryService.createLambdaQuery()
List<QuestionLogSummary> questionLogSummaryList = questionLogSummaryDao.createLambdaQuery()
.andEq(QuestionLogSummary::getPersonId, studentId)
.andEq(QuestionLogSummary::getQuestionLogSummaryStatus, 1)
.andIn(QuestionLogSummary::getQuestionSettingId, teacherOpenCourseQuestionSettingIdList).select();
@ -555,13 +634,15 @@ public class TeacherOpenCourseScoreDashboardService extends CoreBaseService<Teac
}
list.sort(Comparator.comparing(QuestionLogSummary::getQuestionLogSummaryAddTime).reversed());
QuestionLogSummary questionLogSummary = list.get(0);
//这里的正确率默认就是百分比不需要再除以100
BigDecimal questionLogSummarySuccessRate = questionLogSummary.getQuestionLogSummarySuccessRate();
if (questionLogSummarySuccessRate != null) {
allSuccessRate = allSuccessRate.add(questionLogSummarySuccessRate);
}
}
//平均正确率*100得出分数
BigDecimal avgSuccessRate = allSuccessRate.divide(BigDecimal.valueOf(baseSize), 3, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100));
//平均正确率得出分数
BigDecimal avgSuccessRate = allSuccessRate.divide(BigDecimal.valueOf(baseSize), 1, RoundingMode.HALF_UP);
scoreDashboard.setCourseScore(avgSuccessRate);
} else if ("2".equals(weight.getCoursePracticeResultSetting())) {
//按完成进度计分:完成进度*100
@ -577,25 +658,7 @@ public class TeacherOpenCourseScoreDashboardService extends CoreBaseService<Teac
//实操成绩
{
scoreDashboard.setRealOperationScore(BigDecimal.ZERO);
//查询本课程的所有实操任务
TeacherOpenCourseHandsOn param = new TeacherOpenCourseHandsOn();
param.setTeacherOpenCourseId(teacherOpenCourseId);
List<TeacherOpenCourseHandsOn> handsOnList = teacherOpenCourseHandsOnService.queryObjectList(param);
if (CollectionUtil.isNotEmpty(handsOnList)) {
List<Long> handOnIdList = handsOnList.stream().map(TeacherOpenCourseHandsOn::getHandsOnId).collect(Collectors.toList());
//查询本课程的所有实操任务子项
TeacherOpenCourseHandsOnSimulationTasks query = new TeacherOpenCourseHandsOnSimulationTasks();
param.setTeacherOpenCourseId(teacherOpenCourseId);
List<TeacherOpenCourseHandsOnSimulationTasks> teacherOpenCourseHandsOnSimulationTasksList = teacherOpenCourseHandsOnSimulationTasksService.queryObjectList(query);
if (CollectionUtil.isNotEmpty(teacherOpenCourseHandsOnSimulationTasksList)) {
Map<Long, List<TeacherOpenCourseHandsOnSimulationTasks>> teacherOpenCourseHandsOnSimulationTasksMap = teacherOpenCourseHandsOnSimulationTasksList.stream().collect(Collectors.groupingBy(TeacherOpenCourseHandsOnSimulationTasks::getHandsOnId));
@ -699,37 +762,43 @@ public class TeacherOpenCourseScoreDashboardService extends CoreBaseService<Teac
}
}
}
}
//作业
{
//假设本课程开了 2门考试为A考试 B考试
//
//A考试 学生考了两遍 第一遍 考了 80分 第二次考了79分 ,下面的计算取最近的一次 也就是79分
//
//B考试 学生考了一遍 得分 100分
//
//
//则成绩页面考试得分 = 79+100/2 = 89.5分
//记得百分制
List<TeacherOpenCourseQuestionSetting> select2 = teacherOpenCourseQuestionSettingDao.createLambdaQuery()
.andEq(TeacherOpenCourseQuestionSetting::getTeacherOpenCourseId, teacherOpenCourseId)
.andEq(TeacherOpenCourseQuestionSetting::getTeacherOpenCourseQuestionSettingType, ResourcesQuestionSnapshotFromTypeEnum.HOMEWORK_QUESTION).select();
if (CollectionUtil.isEmpty(select2)) {
//查询题目类型作业和文件类型作业
scoreDashboard.setQuestionHomeworkScore(BigDecimal.ZERO);
} else {
List<Long> collect = select2.stream().map(TeacherOpenCourseQuestionSetting::getTeacherOpenCourseQuestionSettingId).collect(Collectors.toList());
List<QuestionLogSummary> select1 = questionLogSummaryService.createLambdaQuery()
if (!CollectionUtil.isEmpty(homeworkList)) {
List<Long> settingIdList = homeworkList.stream().map(TeacherOpenCourseQuestionSetting::getTeacherOpenCourseQuestionSettingId).collect(Collectors.toList());
List<QuestionLogSummary> questionLogSummaryList = questionLogSummaryDao.createLambdaQuery()
.andEq(QuestionLogSummary::getPersonId, studentId)
.andIn(QuestionLogSummary::getQuestionSettingId, collect).select();
if (CollectionUtil.isEmpty(select1)) {
scoreDashboard.setQuestionHomeworkScore(BigDecimal.ZERO);
} else {
.andIn(QuestionLogSummary::getQuestionSettingId, settingIdList)
.andEq(QuestionLogSummary::getQuestionLogSummaryStatus, 1).select();
if (!CollectionUtil.isEmpty(questionLogSummaryList)) {
Map<Long, List<QuestionLogSummary>> questionLogSummaryMap = questionLogSummaryList.stream().collect(Collectors.groupingBy(QuestionLogSummary::getQuestionSettingId));
BigDecimal b = BigDecimal.ZERO;
for (QuestionLogSummary questionLogSummary : select1) {
b = b.add(questionLogSummary.getQuestionLogSummaryStudentTotalScore());
for (Map.Entry<Long, List<QuestionLogSummary>> entry : questionLogSummaryMap.entrySet()) {
List<QuestionLogSummary> value = entry.getValue();
//以防万一有多条记录,取最近的一条
value.sort(Comparator.comparing(QuestionLogSummary::getQuestionLogSummaryAddTime).reversed());
QuestionLogSummary questionLogSummary = value.get(0);
if (ResourcesQuestionSnapshotFromTypeEnum.HOMEWORK_FILE.equals(questionLogSummary.getQuestionSettingType())) {
//文件作业类型 没有最大分数,直接取学生得分
b = b.add(ObjectUtil.defaultIfNull(questionLogSummary.getQuestionLogSummaryStudentTotalScore(), BigDecimal.ZERO));
} else {
//题目类型作业 有最大分数,需要转换为百分制
BigDecimal questionSettingTotalScore = ObjectUtil.defaultIfNull(questionLogSummary.getQuestionSettingTotalScore(), BigDecimal.valueOf(100));
BigDecimal questionLogSummaryStudentTotalScore = ObjectUtil.defaultIfNull(questionLogSummary.getQuestionLogSummaryStudentTotalScore(), BigDecimal.ZERO);
//转为百分制
b = b.add(questionLogSummaryStudentTotalScore.multiply(new BigDecimal(100)).divide(questionSettingTotalScore, 1, RoundingMode.HALF_UP));
}
}
//总分除以总作业数得出平均分
b = b.divide(new BigDecimal(homeworkList.size()), 1, RoundingMode.HALF_UP);
scoreDashboard.setQuestionHomeworkScore(b);
}
}
@ -737,78 +806,148 @@ public class TeacherOpenCourseScoreDashboardService extends CoreBaseService<Teac
//考试
{
List<TeacherOpenCourseQuestionSetting> select3 = teacherOpenCourseQuestionSettingDao.createLambdaQuery()
.andEq(TeacherOpenCourseQuestionSetting::getTeacherOpenCourseId, teacherOpenCourseId)
.andEq(TeacherOpenCourseQuestionSetting::getTeacherOpenCourseQuestionSettingType, ResourcesQuestionSnapshotFromTypeEnum.EXAM).select();
if (CollectionUtil.isEmpty(select3)) {
scoreDashboard.setExamScore(BigDecimal.ZERO);
} else {
if (weight == null || "1".equals(weight.getCoursePracticeResultSetting())) {
List<Long> collect = select3.stream().map(TeacherOpenCourseQuestionSetting::getTeacherOpenCourseQuestionSettingId).collect(Collectors.toList());
List<QuestionLogSummary> select1 = questionLogSummaryService.createLambdaQuery()
if (!CollectionUtil.isEmpty(examList)) {
if (weight == null || "1".equals(weight.getExaminationResultSetting())) {
List<Long> settingIdList = examList.stream().map(TeacherOpenCourseQuestionSetting::getTeacherOpenCourseQuestionSettingId).collect(Collectors.toList());
//查询学生考试记录
List<QuestionLogSummary> questionLogSummaryList = questionLogSummaryDao.createLambdaQuery()
.andEq(QuestionLogSummary::getPersonId, studentId)
.andIn(QuestionLogSummary::getQuestionSettingId, collect).select();
if (CollectionUtil.isEmpty(select1)) {
scoreDashboard.setExamScore(BigDecimal.ZERO);
} else {
.andIn(QuestionLogSummary::getQuestionSettingId, settingIdList)
.andEq(QuestionLogSummary::getQuestionLogSummaryStatus, 1)
.select();
if (!CollectionUtil.isEmpty(questionLogSummaryList)) {
Map<Long, List<QuestionLogSummary>> questionLogSummaryMap = questionLogSummaryList.stream().collect(Collectors.groupingBy(QuestionLogSummary::getQuestionSettingId));
BigDecimal b = BigDecimal.ZERO;
for (QuestionLogSummary questionLogSummary : select1) {
b = b.add(questionLogSummary.getQuestionLogSummaryStudentTotalScore());
}
scoreDashboard.setExamScore(b);
for (Map.Entry<Long, List<QuestionLogSummary>> entry : questionLogSummaryMap.entrySet()) {
List<QuestionLogSummary> value = entry.getValue();
//以防万一有多条记录,取最近的一条
value.sort(Comparator.comparing(QuestionLogSummary::getQuestionLogSummaryAddTime).reversed());
QuestionLogSummary questionLogSummary = value.get(0);
BigDecimal questionSettingTotalScore = ObjectUtil.defaultIfNull(questionLogSummary.getQuestionSettingTotalScore(), BigDecimal.valueOf(100));
BigDecimal questionLogSummaryStudentTotalScore = ObjectUtil.defaultIfNull(questionLogSummary.getQuestionLogSummaryStudentTotalScore(), BigDecimal.ZERO);
//转为百分制
b = b.add(questionLogSummaryStudentTotalScore.multiply(new BigDecimal(100)).divide(questionSettingTotalScore, 1, RoundingMode.HALF_UP));
}
//总分除以总作业数得出平均分
b = b.divide(new BigDecimal(examList.size()), 1, RoundingMode.HALF_UP);
scoreDashboard.setQuestionHomeworkScore(b);
}
}
}
}
//互动
List<TeacherOpenCourseChatLog> chatLogList = courseChatLogDao.createLambdaQuery()
.andEq(TeacherOpenCourseChatLog::getStudentId, studentId)
.andEq(TeacherOpenCourseChatLog::getTeacherOpenCourseId, teacherOpenCourseId).select();
//提问次数
long count = chatLogList.stream().filter(v -> v.getChatLogSendType().equals(ChatLogSendTypeEnum.student_ask)
|| v.getChatLogSendType().equals(ChatLogSendTypeEnum.specify_ask)).count();
//回复次数
long count2 = chatLogList.stream().filter(v ->
v.getChatLogSendType().equals(ChatLogSendTypeEnum.normal)).count();
//答题次数
long count3 = chatLogList.stream().filter(v ->
v.getChatLogSendType().equals(ChatLogSendTypeEnum.normal)
&& v.getStudentScore() != null
).count();
BigDecimal chatScore = BigDecimal.ZERO;
if (weight != null && StringUtils.isNotEmpty(weight.getInteractionResultSetting())) {
//互动分数
{
scoreDashboard.setChatScore(BigDecimal.ZERO);
if (CollectionUtil.isNotEmpty(teacherOpenCourseChatLogList) && weight != null && StringUtils.isNotBlank(weight.getInteractionResultSetting())) {
BigDecimal totalChatScore = BigDecimal.ZERO;
//1留言2提问3回答
String interactionResultSetting = weight.getInteractionResultSetting();
if (interactionResultSetting.contains("1")) {
chatScore = NumberUtil.mul(count2, NumberUtil.toBigDecimal(weight.getInteractionResultMessageScore()));
//回答分数处理
{
if (interactionResultSetting.contains("3")) {
//老师提问该学生
List<Long> teacherAskIds = teacherOpenCourseChatLogList.stream().filter(v -> {
return (ChatLogSendTypeEnum.random_ask.equals(v.getChatLogSendType()) || ChatLogSendTypeEnum.specify_ask.equals(v.getChatLogSendType()))
&& ObjectUtil.equals(studentId, v.getStudentId());
}).map(TeacherOpenCourseChatLog::getTeacherOpenCourseChatLogId).collect(Collectors.toList());
if (CollectionUtil.isNotEmpty(teacherAskIds)) {
//学生回答的次数,回答多次也只算一次
long count = teacherOpenCourseChatLogList.stream().filter(v -> {
return ObjectUtil.equals(studentId, v.getStudentId())
&& teacherAskIds.contains(v.getTeacherOpenCourseChatLogParentId());
}).map(TeacherOpenCourseChatLog::getTeacherOpenCourseChatLogParentId).distinct().count();
BigDecimal interactionResultAnswerScore = new BigDecimal(ObjectUtil.defaultIfBlank(weight.getInteractionResultAnswerScore(), "0"));
totalChatScore = totalChatScore.add(interactionResultAnswerScore.multiply(new BigDecimal(count)));
}
}
}
//提问分数处理
{
if (interactionResultSetting.contains("2")) {
chatScore = NumberUtil.mul(count, NumberUtil.toBigDecimal(weight.getInteractionResultQuestionScore()));
//学生提问老师
List<Long> studentAskIds = teacherOpenCourseChatLogList.stream().filter(v -> {
return ChatLogSendTypeEnum.student_ask.equals(v.getChatLogSendType())
&& ObjectUtil.equals(studentId, v.getStudentId());
}).map(TeacherOpenCourseChatLog::getTeacherOpenCourseChatLogId).collect(Collectors.toList());
long count = studentAskIds.size();
BigDecimal interactionResultQuestionScore = new BigDecimal(ObjectUtil.defaultIfBlank(weight.getInteractionResultQuestionScore(), "0"));
BigDecimal multiply = interactionResultQuestionScore.multiply(new BigDecimal(count));
if (multiply.compareTo(new BigDecimal(TeacherOpenCourseScoreDashboardConstant.STUDENT_ASK_MAX_SCORE)) > 0) {
multiply = new BigDecimal(TeacherOpenCourseScoreDashboardConstant.STUDENT_ASK_MAX_SCORE);
}
if (interactionResultSetting.contains("3")) {
chatScore = NumberUtil.mul(count3, NumberUtil.toBigDecimal(weight.getInteractionResultAnswerScore()));
totalChatScore = totalChatScore.add(multiply);
}
} else {
chatScore = BigDecimal.valueOf(count2);
}
scoreDashboard.setChatScore(chatScore);
//留言分数处理
{
if (interactionResultSetting.contains("1")) {
//老师发起的讨论,学生的班级在讨论的班级中
List<Long> discussionIdList = teacherOpenCourseChatLogList.stream().filter(v -> {
return ChatLogSendTypeEnum.discuss.equals(v.getChatLogSendType())
&& (
StringUtils.isBlank(v.getSchoolClassIds())
|| Arrays.asList(v.getSchoolClassIds().split(",")).contains(student.getClassId().toString())
);
}).map(TeacherOpenCourseChatLog::getTeacherOpenCourseChatLogId).collect(Collectors.toList());
BigDecimal totalScore = scoreDashboard.getSigninScore()
.add(scoreDashboard.getCourseScore())
.add(scoreDashboard.getRealOperationScore())
.add(scoreDashboard.getQuestionHomeworkScore())
.add(scoreDashboard.getExamScore())
.add(scoreDashboard.getChatScore());
scoreDashboard.setTotalScore(totalScore);
//学生回复的讨论的次数
long count = teacherOpenCourseChatLogList.stream().filter(v -> {
return (
ObjectUtil.equals(studentId, v.getStudentId())
&& ChatLogSendTypeEnum.normal.equals(v.getChatLogSendType())
&& StringUtils.isNotBlank(v.getChatLogFullId())
&& discussionIdList.contains(Long.valueOf(v.getChatLogFullId().split("_")[0]))
);
}).count();
BigDecimal interactionResultMessageScore = new BigDecimal(ObjectUtil.defaultIfBlank(weight.getInteractionResultMessageScore(), "0"));
BigDecimal multiply = interactionResultMessageScore.multiply(new BigDecimal(count));
if (multiply.compareTo(new BigDecimal(TeacherOpenCourseScoreDashboardConstant.DISCUSS_MAX_SCORE)) > 0) {
multiply = new BigDecimal(TeacherOpenCourseScoreDashboardConstant.DISCUSS_MAX_SCORE);
}
totalChatScore = totalChatScore.add(multiply);
}
}
scoreDashboard.setChatScore(totalChatScore);
}
}
//总分
{
scoreDashboard.setTotalScore(BigDecimal.ZERO);
if (weight != null) {
BigDecimal totalScore = BigDecimal.ZERO;
BigDecimal formatSignScore = scoreDashboard.getSigninScore().multiply(new BigDecimal(ObjectUtil.defaultIfBlank(weight.getSignInResult(), "0")));
BigDecimal formatCourseScore = scoreDashboard.getCourseScore().multiply(new BigDecimal(ObjectUtil.defaultIfBlank(weight.getChapterContactResult(), "0")));
BigDecimal formatRealOperationScore = scoreDashboard.getRealOperationScore().multiply(new BigDecimal(ObjectUtil.defaultIfBlank(weight.getCoursePracticeResult(), "0")));
BigDecimal formatQuestionHomeworkScore = scoreDashboard.getQuestionHomeworkScore().multiply(new BigDecimal(ObjectUtil.defaultIfBlank(weight.getHomeworkResult(), "0")));
BigDecimal formatExamScore = scoreDashboard.getExamScore().multiply(new BigDecimal(ObjectUtil.defaultIfBlank(weight.getExaminationResult(), "0")));
BigDecimal formatChatScore = scoreDashboard.getChatScore().multiply(new BigDecimal(ObjectUtil.defaultIfBlank(weight.getInteractionResult(), "0")));
totalScore = totalScore.add(formatSignScore).add(formatCourseScore).add(formatRealOperationScore).add(formatQuestionHomeworkScore).add(formatExamScore).add(formatChatScore);
//加上手动的分数
totalScore = totalScore.add(ObjectUtil.defaultIfNull(teacherOpenCourseScoreDashboard.getManualScore(), BigDecimal.ZERO));
totalScore = totalScore.setScale(1, RoundingMode.HALF_UP);
scoreDashboard.setTotalScore(totalScore);
//成绩状态
lastStatus(weight, totalScore, scoreDashboard);
}
studentScores.add(scoreDashboard);
}
//通过课程id删除存量数据
teacherOpenCourseScoreDashboardDao.deleteByTeacherOpenCourseId(teacherOpenCourseId);
teacherOpenCourseScoreDashboardDao.insertBatch(studentScores);
updateTemplate(scoreDashboard);
}
return true;
}
@ -907,4 +1046,70 @@ public class TeacherOpenCourseScoreDashboardService extends CoreBaseService<Teac
String filename = StrUtil.format("成绩-导出 {}.xlsx", System.currentTimeMillis());
write(response, filename, "Sheet1", header.values(), convertData(header.keySet(), maps));
}
public void updateManualScore(Long teacherOpenCourseScoreDashboardId, Long studentId, Long teacherOpenCourseId, BigDecimal manualScore) {
TeacherOpenCourseScoreDashboard teacherOpenCourseScoreDashboard = null;
if (teacherOpenCourseScoreDashboardId != null) {
teacherOpenCourseScoreDashboard = this.queryById(teacherOpenCourseScoreDashboardId);
if (teacherOpenCourseScoreDashboard == null) {
throw new PlatformException("参数错误!");
}
}else {
if (studentId==null||teacherOpenCourseId==null){
throw new PlatformException("参数错误!");
}
TeacherOpenCourseScoreDashboard param = new TeacherOpenCourseScoreDashboard();
param.setStudentId(studentId);
param.setTeacherOpenCourseId(teacherOpenCourseId);
teacherOpenCourseScoreDashboard = this.queryObject(param);
if (teacherOpenCourseScoreDashboard == null) {
Student student = studentService.queryById(studentId);
if (student == null) {
throw new PlatformException("参数错误!");
}
teacherOpenCourseScoreDashboard = new TeacherOpenCourseScoreDashboard();
teacherOpenCourseScoreDashboard.setTeacherOpenCourseId(teacherOpenCourseId);
teacherOpenCourseScoreDashboard.setStudentId(studentId);
teacherOpenCourseScoreDashboard.setOrgId(student.getOrgId());
teacherOpenCourseScoreDashboard.setStudentSn(student.getStudentSn());
teacherOpenCourseScoreDashboard.setStudentName(student.getStudentName());
teacherOpenCourseScoreDashboard.setExamScore(BigDecimal.ZERO);
teacherOpenCourseScoreDashboard.setCourseScore(BigDecimal.ZERO);
teacherOpenCourseScoreDashboard.setChatScore(BigDecimal.ZERO);
teacherOpenCourseScoreDashboard.setSigninScore(BigDecimal.ZERO);
teacherOpenCourseScoreDashboard.setRealOperationScore(BigDecimal.ZERO);
teacherOpenCourseScoreDashboard.setQuestionHomeworkScore(BigDecimal.ZERO);
teacherOpenCourseScoreDashboard.setTotalScore(BigDecimal.ZERO);
teacherOpenCourseScoreDashboard.setManualScore(BigDecimal.ZERO);
teacherOpenCourseScoreDashboard.setUserId(student.getUserId());
teacherOpenCourseScoreDashboard.setCreateTime(new Date());
teacherOpenCourseScoreDashboardDao.insert(teacherOpenCourseScoreDashboard);
}
}
teacherOpenCourseScoreDashboard.setManualScore(ObjectUtil.defaultIfNull(manualScore, BigDecimal.ZERO));
teacherOpenCourseScoreDashboard.setTotalScore(ObjectUtil.defaultIfNull(teacherOpenCourseScoreDashboard.getTotalScore(), BigDecimal.ZERO).add(ObjectUtil.defaultIfNull(manualScore, BigDecimal.ZERO)).setScale(1, RoundingMode.HALF_UP));
updateTemplate(teacherOpenCourseScoreDashboard);
}
}

@ -5,11 +5,12 @@ import cn.jlw.util.ToolUtils;
import cn.jlw.validate.ValidateConfig;
import com.ibeetl.admin.core.annotation.Function;
import com.ibeetl.admin.core.entity.CoreUser;
import com.ibeetl.admin.core.file.FileService;
import com.ibeetl.admin.core.util.TimeTool;
import com.ibeetl.admin.core.web.JsonResult;
import com.ibeetl.jlw.entity.StudentHandsOnTaskReport;
import com.ibeetl.jlw.entity.TeacherOpenCourseHandsOnSimulationTasks;
import com.ibeetl.jlw.service.StudentHandsOnTaskReportService;
import com.ibeetl.jlw.service.TeacherOpenCourseHandsOnSimulationTasksService;
import com.ibeetl.jlw.web.query.StudentHandsOnTaskReportQuery;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.logging.Log;
@ -18,6 +19,8 @@ import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.apache.poi.ss.usermodel.VerticalAlignment;
import org.beetl.sql.core.engine.PageQuery;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.validation.BindingResult;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
@ -43,9 +46,14 @@ public class StudentHandsOnTaskReportController{
private static final String API = "/api/studentHandsOnTaskReport";
@Resource private StudentHandsOnTaskReportService studentHandsOnTaskReportService;
@Resource
private StudentHandsOnTaskReportService studentHandsOnTaskReportService;
@Autowired
@Lazy
private TeacherOpenCourseHandsOnSimulationTasksService teacherOpenCourseHandsOnSimulationTasksService;
@Resource FileService fileService;
/* 前端接口 */
@ -67,6 +75,17 @@ public class StudentHandsOnTaskReportController{
return JsonResult.failMessage("请登录后再操作");
} else {
StudentHandsOnTaskReport studentHandsOnTaskReport = studentHandsOnTaskReportService.getInfo(param, coreUser);
if (studentHandsOnTaskReport != null) {
TeacherOpenCourseHandsOnSimulationTasks teacherOpenCourseHandsOnSimulationTasks = new TeacherOpenCourseHandsOnSimulationTasks();
teacherOpenCourseHandsOnSimulationTasks.setTaskId(studentHandsOnTaskReport.getHandsOnTaskId());
TeacherOpenCourseHandsOnSimulationTasks res = teacherOpenCourseHandsOnSimulationTasksService.queryObject(teacherOpenCourseHandsOnSimulationTasks);
if (res != null) {
studentHandsOnTaskReport.set("maxScore", res.getTaskScore());
} else {
studentHandsOnTaskReport.set("maxScore", 100);
}
}
return JsonResult.success(studentHandsOnTaskReport);
}
}
@ -207,10 +226,10 @@ public class StudentHandsOnTaskReportController{
}
@PostMapping(API + "/edit.do")
public JsonResult<String> editStudentHandsOnTaskReport(@RequestBody @Validated(ValidateConfig.UPDATE.class) StudentHandsOnTaskReportQuery studentHandsOnTaskReportQuery,@SCoreUser CoreUser coreUser, BindingResult result) {
if(result.hasErrors()){
return JsonResult.failMessage(result);
}else {
public JsonResult<String> editStudentHandsOnTaskReport(@RequestBody StudentHandsOnTaskReportQuery studentHandsOnTaskReportQuery, @SCoreUser CoreUser coreUser, BindingResult result) {
if(studentHandsOnTaskReportQuery.getStudentHandsOnTaskReportId()==null){
return JsonResult.failMessage("未完成实操任务");
}
studentHandsOnTaskReportQuery.setUserId(coreUser.getId());
studentHandsOnTaskReportQuery.setOrgId(coreUser.getOrgId());
String msg = studentHandsOnTaskReportService.edit(studentHandsOnTaskReportQuery, coreUser);
@ -219,7 +238,7 @@ public class StudentHandsOnTaskReportController{
} else {
return JsonResult.failMessage("更新失败," + msg);
}
}
}
//导出信息
@ -332,7 +351,8 @@ public class StudentHandsOnTaskReportController{
if (null != response && null != response.getOutputStream()) {
response.getOutputStream().close();
}
} catch (Exception e) { }
} catch (Exception e) {
}
}
}
@ -445,7 +465,8 @@ public class StudentHandsOnTaskReportController{
if (null != response && null != response.getOutputStream()) {
response.getOutputStream().close();
}
} catch (Exception e) { }
} catch (Exception e) {
}
}
}

@ -14,7 +14,6 @@ import com.ibeetl.jlw.dao.StudentDao;
import com.ibeetl.jlw.entity.FileEntity;
import com.ibeetl.jlw.entity.Student;
import com.ibeetl.jlw.entity.TeacherOpenCourseScoreDashboard;
import com.ibeetl.jlw.job.TeacherOpenCourseScoreDashboardJob;
import com.ibeetl.jlw.service.TeacherOpenCourseScoreDashboardService;
import com.ibeetl.jlw.web.query.TeacherOpenCourseScoreDashboardQuery;
import org.apache.commons.collections4.MapUtils;
@ -22,6 +21,7 @@ import org.apache.commons.lang3.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.beetl.ext.fn.Json;
import org.beetl.sql.core.engine.PageQuery;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.BindingResult;
@ -338,4 +338,14 @@ public class TeacherOpenCourseScoreDashboardController {
}
}
@PostMapping(API + "/updateManualScore")
public JsonResult<String> updateManualScore(TeacherOpenCourseScoreDashboardQuery teacherOpenCourseScoreDashboardQuery) {
teacherOpenCourseScoreDashboardService.updateManualScore(teacherOpenCourseScoreDashboardQuery.getTeacherOpenCourseScoreDashboardId(),
teacherOpenCourseScoreDashboardQuery.getStudentId(),
teacherOpenCourseScoreDashboardQuery.getTeacherOpenCourseId(),
teacherOpenCourseScoreDashboardQuery.getManualScore());
return JsonResult.success();
}
}

Loading…
Cancel
Save