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.
tianze-pro/web/src/main/java/com/ibeetl/jlw/service/TeacherOpenCourseHandsOnSer...

631 lines
34 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.hutool.core.collection.CollectionUtil;
import cn.hutool.core.lang.Snowflake;
import cn.hutool.core.util.NumberUtil;
import cn.jlw.util.ToolUtils;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.ibeetl.admin.core.entity.CoreUser;
import com.ibeetl.admin.core.service.CoreBaseService;
import com.ibeetl.admin.core.util.PlatformException;
import com.ibeetl.admin.core.web.JsonResult;
import com.ibeetl.admin.core.web.JsonReturnCode;
import com.ibeetl.jlw.dao.TeacherOpenCourseHandsOnDao;
import com.ibeetl.jlw.entity.*;
import com.ibeetl.jlw.entity.vo.StudentHandsOnVO;
import com.ibeetl.jlw.enums.GlobalUpStatusEnum;
import com.ibeetl.jlw.enums.HandsOnTaskEnum;
import com.ibeetl.jlw.web.query.*;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.beetl.sql.core.SqlId;
import org.beetl.sql.core.engine.PageQuery;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
import javax.annotation.Nullable;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;
import static com.ibeetl.admin.core.util.user.CacheUserUtil.getUser;
/**
* 教师开课-课程实操 Service
* 当分布式ID开启后请勿使用insert(*,true)
*/
@Service
@Transactional
@Validated
@Slf4j
public class TeacherOpenCourseHandsOnService extends CoreBaseService<TeacherOpenCourseHandsOn> implements DeleteResourcesBy {
@Autowired
private TeacherOpenCourseHandsOnDao teacherOpenCourseHandsOnDao;
@Autowired
private HandsOnService handsOnService;
@Autowired
private TeacherOpenCourseHandsOnSimulationTasksService teacherOpenCourseHandsOnSimulationTasksService;
@Autowired
private HandsOnSimulationTasksService handsOnSimulationTasksService;
@Autowired
private HandsOnAchievementService handsOnAchievementService;
@Autowired
private StudentService studentService;
@Autowired
private StudentHandsOnTaskVideoService videoService;
@Autowired
private StudentHandsOnTaskPptService pptService;
@Autowired
private StudentHandsOnTaskStepService stepService;
@Autowired
private StudentHandsOnTaskTheoryService theoryService;
@Autowired
private StudentHandsOnTaskReportService reportService;
@Autowired
private TeacherOpenCourseScoreDashboardService teacherOpenCourseScoreDashboardService;
@Autowired
private HandsOnSimulationTasksAssessmentService handsOnSimulationTasksAssessmentService;
@Autowired
private TeacherOpenCourseHandsOnSimulationTasksAssessmentService teacherOpenCourseHandsOnSimulationTasksAssessmentService;
@Autowired
private HandsOnSimulationTasksFileService handsOnSimulationTasksFileService;
@Autowired
private TeacherOpenCourseHandsOnSimulationTasksFileService teacherOpenCourseHandsOnSimulationTasksFileService;
// 这里简单使用一个雪花算法来生成新的ID
private static final Snowflake snowflake = new Snowflake();
public PageQuery<TeacherOpenCourseHandsOn> queryByCondition(PageQuery query) {
PageQuery ret = teacherOpenCourseHandsOnDao.queryByCondition(query);
queryListAfter(ret.getList());
return ret;
}
public PageQuery<TeacherOpenCourseHandsOn> queryByConditionQuery(PageQuery query) {
PageQuery ret = teacherOpenCourseHandsOnDao.queryByConditionQuery(query);
queryListAfter(ret.getList());
return ret;
}
public void deleteByList(List list) {
String ids = "";
ToolUtils.deleteNullList(list);
for (int i = 0; null != list && i < list.size(); i++) {
ids += list.get(i).toString() + (i == list.size() - 1 ? "" : ",");
}
if (StringUtils.isNotBlank(ids)) {
teacherOpenCourseHandsOnDao.deleteTeacherOpenCourseHandsOnByIds(ids);
}
}
public void deleteTeacherOpenCourseHandsOn(String ids) {
try {
teacherOpenCourseHandsOnDao.deleteTeacherOpenCourseHandsOnByIds(ids);
} catch (Exception e) {
throw new PlatformException("批量删除教师开课-课程实操失败", e);
}
}
public String addAll(TeacherOpenCourseHandsOnQuery teacherOpenCourseHandsOnQuery) {
String msg = "";
List<TeacherOpenCourseHandsOn> teacherOpenCourseHandsOnList = new ArrayList<>();
try {
teacherOpenCourseHandsOnList = JSON.parseArray(teacherOpenCourseHandsOnQuery.getTeacherOpenCourseHandsOnJsonStr(), TeacherOpenCourseHandsOn.class);
} catch (Exception e) {
try {
teacherOpenCourseHandsOnList.add(JSONObject.parseObject(teacherOpenCourseHandsOnQuery.getTeacherOpenCourseHandsOnJsonStr(), TeacherOpenCourseHandsOn.class));
} catch (Exception e1) {
}
}
ToolUtils.deleteNullList(teacherOpenCourseHandsOnList);
if (null != teacherOpenCourseHandsOnList && teacherOpenCourseHandsOnList.size() > 0) {
for (int i = 0; i < teacherOpenCourseHandsOnList.size(); i++) {
TeacherOpenCourseHandsOn teacherOpenCourseHandsOn = teacherOpenCourseHandsOnList.get(i);
teacherOpenCourseHandsOn.setUserId(teacherOpenCourseHandsOnQuery.getUserId());
teacherOpenCourseHandsOn.setOrgId(teacherOpenCourseHandsOnQuery.getOrgId());
}
insertBatch(teacherOpenCourseHandsOnList);
}
return msg;
}
public JsonResult add(TeacherOpenCourseHandsOnQuery teacherOpenCourseHandsOnQuery) {
String msg = "";
TeacherOpenCourseHandsOn teacherOpenCourseHandsOn = teacherOpenCourseHandsOnQuery.pojo();
teacherOpenCourseHandsOnDao.insert(teacherOpenCourseHandsOn);
teacherOpenCourseHandsOnQuery.setHandsOnId(teacherOpenCourseHandsOn.getHandsOnId());
JsonResult jsonResult = new JsonResult();
jsonResult.setData(teacherOpenCourseHandsOn.getHandsOnId());//自增的ID丢进去
jsonResult.setCode(JsonReturnCode.SUCCESS.getCode());
jsonResult.setMsg(msg);
return jsonResult;
}
public String edit(TeacherOpenCourseHandsOnQuery teacherOpenCourseHandsOnQuery) {
String msg = "";
TeacherOpenCourseHandsOn teacherOpenCourseHandsOn = teacherOpenCourseHandsOnQuery.pojo();
teacherOpenCourseHandsOnDao.updateTemplateById(teacherOpenCourseHandsOn);
return msg;
}
public String updateGivenByIds(TeacherOpenCourseHandsOnQuery teacherOpenCourseHandsOnQuery) {
String msg = "";
if (StringUtils.isNotBlank(teacherOpenCourseHandsOnQuery.get_given())) {
boolean flag = teacherOpenCourseHandsOnDao.updateGivenByIds(teacherOpenCourseHandsOnQuery) > 0;
if (!flag) {
msg = "更新指定参数失败";
}
} else {
msg = "指定参数为空";
}
return msg;
}
public List<TeacherOpenCourseHandsOn> getValues(Object paras) {
return sqlManager.select(SqlId.of("jlw.teacherOpenCourseHandsOn.getTeacherOpenCourseHandsOnValues"), TeacherOpenCourseHandsOn.class, paras);
}
public List<TeacherOpenCourseHandsOn> getValuesByQuery(TeacherOpenCourseHandsOnQuery teacherOpenCourseHandsOnQuery) {
return teacherOpenCourseHandsOnDao.getValuesByQuery(teacherOpenCourseHandsOnQuery);
}
public List<TeacherOpenCourseHandsOn> getValuesByQueryNotWithPermission(TeacherOpenCourseHandsOnQuery teacherOpenCourseHandsOnQuery) {
return teacherOpenCourseHandsOnDao.getValuesByQueryNotWithPermission(teacherOpenCourseHandsOnQuery);
}
public TeacherOpenCourseHandsOn getInfo(Long handsOnId) {
TeacherOpenCourseHandsOnQuery teacherOpenCourseHandsOnQuery = new TeacherOpenCourseHandsOnQuery();
teacherOpenCourseHandsOnQuery.setHandsOnId(handsOnId);
List<TeacherOpenCourseHandsOn> list = teacherOpenCourseHandsOnDao.getValuesByQuery(teacherOpenCourseHandsOnQuery);
if (null != list && list.size() > 0) {
return list.get(0);
} else {
return null;
}
}
public TeacherOpenCourseHandsOn getInfo(TeacherOpenCourseHandsOnQuery teacherOpenCourseHandsOnQuery) {
List<TeacherOpenCourseHandsOn> list = teacherOpenCourseHandsOnDao.getValuesByQuery(teacherOpenCourseHandsOnQuery);
if (null != list && list.size() > 0) {
return list.get(0);
} else {
return null;
}
}
/**
* 同步课程实操
*
* @param courseInfoId 课程id
* @param teacherOpenCourseId 开课ID
* @return
*/
public void syncHandson(Long courseInfoId, Long teacherOpenCourseId) {
HandsOnQuery handsOnQuery = new HandsOnQuery();
handsOnQuery.setCourseInfoId(courseInfoId);
List<HandsOn> handsOnList = handsOnService.getValuesByQuery(handsOnQuery);
sqlManager.lambdaQuery(TeacherOpenCourseHandsOn.class).andEq(TeacherOpenCourseHandsOn::getCourseInfoId, courseInfoId).delete();
List<TeacherOpenCourseHandsOn> teacherOpenCourseHandsOns = BeanUtil.copyToList(handsOnList, TeacherOpenCourseHandsOn.class);
StringJoiner joiner = new StringJoiner(",");
for (TeacherOpenCourseHandsOn teacherOpenCourseHandsOn : teacherOpenCourseHandsOns) {
teacherOpenCourseHandsOn.setTeacherOpenCourseId(teacherOpenCourseId);
joiner.add(teacherOpenCourseHandsOn.getHandsOnId() + "");
}
insertBatch(teacherOpenCourseHandsOns);
if (StringUtils.isNoneEmpty(joiner.toString())) {
HandsOnSimulationTasksQuery query = new HandsOnSimulationTasksQuery();
query.setHandsOnIdPlural(joiner.toString());
List<HandsOnSimulationTasks> tasksList = handsOnSimulationTasksService.getValuesByQuery(query);
List<TeacherOpenCourseHandsOnSimulationTasks> teacherOpenCourseHandsOnSimulationTasksList = BeanUtil.copyToList(tasksList, TeacherOpenCourseHandsOnSimulationTasks.class);
teacherOpenCourseHandsOnSimulationTasksService.insertBatch(teacherOpenCourseHandsOnSimulationTasksList);
}
}
public PageQuery<TeacherOpenCourseHandsOnList> getHandsOnList(GetHandsOnListParam param) {
PageQuery<TeacherOpenCourseHandsOnList> teacherOpenCourseHandsOns = teacherOpenCourseHandsOnDao.getHandsOnList(param.getPageQuery());
handsOnListHandler(teacherOpenCourseHandsOns.getList(), param);
return teacherOpenCourseHandsOns;
}
public List<TeacherOpenCourseHandsOnList> getHandsOnListNotPage(GetHandsOnListParam param) {
List<TeacherOpenCourseHandsOnList> teacherOpenCourseHandsOns = teacherOpenCourseHandsOnDao.getHandsOnListNotPage(param);
handsOnListHandler(teacherOpenCourseHandsOns, param);
return teacherOpenCourseHandsOns;
}
private void handsOnListHandler(List<TeacherOpenCourseHandsOnList> teacherOpenCourseHandsOnLists, GetHandsOnListParam param) {
List<Long> handIds = teacherOpenCourseHandsOnLists.stream().map(TeacherOpenCourseHandsOnList::getHandsOnId).collect(Collectors.toList());
List<HandsOnAchievement> achievementList = new ArrayList<>();
if (CollectionUtils.isNotEmpty(handIds)) {
achievementList = handsOnAchievementService.getListByhandIdsAndClassId(handIds, param.getClassId());
}
for (TeacherOpenCourseHandsOnList teacherOpenCourseHandsOnList : teacherOpenCourseHandsOnLists) {
List<HandsOnAchievement> collect = achievementList.stream().filter(v -> v.getHandOnId().equals(teacherOpenCourseHandsOnList.getHandsOnId())).collect(Collectors.toList());
Double videoScore = collect.stream().map(HandsOnAchievement::getVideoScore).collect(Collectors.averagingDouble(Double::parseDouble));
Double pptAvgScore = collect.stream().map(HandsOnAchievement::getPptScore).collect(Collectors.averagingDouble(Double::parseDouble));
Double theoryAvgScore = collect.stream().map(HandsOnAchievement::getTheoryScore).collect(Collectors.averagingDouble(Double::parseDouble));
Double stepAvgScore = collect.stream().map(HandsOnAchievement::getPracticalTrainingScore).collect(Collectors.averagingDouble(Double::parseDouble));
Double reportAvgScore = collect.stream().map(HandsOnAchievement::getReportWritingScore).collect(Collectors.averagingDouble(Double::parseDouble));
teacherOpenCourseHandsOnList.setVideoAvgScore(videoScore);
teacherOpenCourseHandsOnList.setPptAvgScore(pptAvgScore);
teacherOpenCourseHandsOnList.setTheoryAvgScore(theoryAvgScore);
teacherOpenCourseHandsOnList.setStepAvgScore(stepAvgScore);
teacherOpenCourseHandsOnList.setReportAvgScore(reportAvgScore);
}
}
public List<Map<String, Object>> getExcelValues(TeacherOpenCourseHandsOnQuery teacherOpenCourseHandsOnQuery) {
return teacherOpenCourseHandsOnDao.getExcelValues(teacherOpenCourseHandsOnQuery);
}
public PageQuery<TaskTypeParam> getTaskTypeParam(TeacherOpenCourseHandsOnQuery query) {
PageQuery pageQuery = query.getPageQuery();
PageQuery<TeacherOpenCourseHandsOn> teacherOpenCourseHandsOnPageQuery = queryByCondition(pageQuery);
List<TeacherOpenCourseHandsOn> values = teacherOpenCourseHandsOnPageQuery.getList();
List<TaskTypeParam> taskTypeParamList = new ArrayList<>();
for (TeacherOpenCourseHandsOn value : values) {
TeacherOpenCourseHandsOnSimulationTasksQuery teacherOpenCourseHandsOnSimulationTasksQuery = new TeacherOpenCourseHandsOnSimulationTasksQuery();
teacherOpenCourseHandsOnSimulationTasksQuery.setHandsOnId(value.getHandsOnId());
List<TeacherOpenCourseHandsOnSimulationTasks> valuesByQuery = teacherOpenCourseHandsOnSimulationTasksService.getValuesByQuery(teacherOpenCourseHandsOnSimulationTasksQuery);
long count1 = valuesByQuery.stream().filter(v -> "1".equals(v.getTaskType())).count();
long count2 = valuesByQuery.stream().filter(v -> "2".equals(v.getTaskType())).count();
long count3 = valuesByQuery.stream().filter(v -> "3".equals(v.getTaskType())).count();
long count4 = valuesByQuery.stream().filter(v -> "4".equals(v.getTaskType())).count();
long count5 = valuesByQuery.stream().filter(v -> "5".equals(v.getTaskType())).count();
TaskTypeParam taskTypeParam = new TaskTypeParam();
taskTypeParam.setHandsOnName(value.getHandsOnName());
taskTypeParam.setHandsOnId(value.getHandsOnId());
taskTypeParam.setTypeNum(count1 + count2 + count3 + count4 + count5);
taskTypeParam.setIsVideo(!(count1 == 0));
taskTypeParam.setIsPpt(!(count2 == 0));
taskTypeParam.setIsTheory(!(count3 == 0));
taskTypeParam.setIsStep(!(count4 == 0));
taskTypeParam.setIsRreport(!(count5 == 0));
taskTypeParamList.add(taskTypeParam);
}
pageQuery.setList(taskTypeParamList);
pageQuery.setTotalRow(teacherOpenCourseHandsOnPageQuery.getTotalRow());
pageQuery.setPageSize(teacherOpenCourseHandsOnPageQuery.getPageSize());
pageQuery.setPageNumber(teacherOpenCourseHandsOnPageQuery.getPageNumber());
return pageQuery;
}
public TeacherOpenCourseHandsOnList getHandsOnListCount(GetHandsOnListParam param) {
PageQuery<TeacherOpenCourseHandsOnList> teacherOpenCourseHandsOns = teacherOpenCourseHandsOnDao.getHandsOnList(param.getPageQuery());
List<TeacherOpenCourseHandsOnList> teacherOpenCourseHandsOnLists = teacherOpenCourseHandsOns.getList();
List<Long> handIds = teacherOpenCourseHandsOnLists.stream().map(v -> v.getHandsOnId()).collect(Collectors.toList());
List<HandsOnAchievement> achievementList = new ArrayList<>();
if (CollectionUtils.isNotEmpty(handIds)) {
achievementList = handsOnAchievementService.getListByhandIdsAndClassId(handIds, param.getClassId());
}
TeacherOpenCourseHandsOnList teacherOpenCourseHandsOnList = new TeacherOpenCourseHandsOnList();
Double videoScore = achievementList.stream().map(HandsOnAchievement::getVideoScore).collect(Collectors.averagingDouble(Double::parseDouble));
Double pptAvgScore = achievementList.stream().map(HandsOnAchievement::getPptScore).collect(Collectors.averagingDouble(Double::parseDouble));
Double theoryAvgScore = achievementList.stream().map(HandsOnAchievement::getTheoryScore).collect(Collectors.averagingDouble(Double::parseDouble));
Double stepAvgScore = achievementList.stream().map(HandsOnAchievement::getPracticalTrainingScore).collect(Collectors.averagingDouble(Double::parseDouble));
Double reportAvgScore = achievementList.stream().map(HandsOnAchievement::getReportWritingScore).collect(Collectors.averagingDouble(Double::parseDouble));
teacherOpenCourseHandsOnList.setVideoAvgScore(videoScore);
teacherOpenCourseHandsOnList.setPptAvgScore(pptAvgScore);
teacherOpenCourseHandsOnList.setTheoryAvgScore(theoryAvgScore);
teacherOpenCourseHandsOnList.setStepAvgScore(stepAvgScore);
teacherOpenCourseHandsOnList.setReportAvgScore(reportAvgScore);
return teacherOpenCourseHandsOnList;
}
@Override
public void resetOperationByTeacherOpenCourseId(Long teacherOpenCourseId) {
log.info("可能需要实现重置操作!");
}
@Override
public void deleteTeacherOpenCourseAllRelatedByTeacherOpenCourseId(@NotNull(message = "开课ID不能为空") Long teacherOpenCourseId) {
log.info("需要实现删除操作!");
}
/**
* 查询课程实操
*
* @param teacherOpenCourseId
* @param coreUser
* @return
*/
public JsonResult<List<StudentHandsOnVO>> getHandsListByOpenCourseIdAndStudent(Long teacherOpenCourseId, CoreUser coreUser) {
Long userId = coreUser.getId();
Student student = studentService.getByUserId(userId);
if (student == null) {
return JsonResult.fail();
}
Long studentId = student.getStudentId();
TeacherOpenCourseHandsOnQuery handsOnQuery = new TeacherOpenCourseHandsOnQuery();
handsOnQuery.setTeacherOpenCourseId(teacherOpenCourseId);
List<TeacherOpenCourseHandsOn> handsOnList = this.getValuesByQueryNotWithPermission(handsOnQuery);
List<TeacherOpenCourseHandsOnSimulationTasks> tasksList = new ArrayList<>();
if (CollectionUtils.isNotEmpty(handsOnList)) {
List<Long> handIds = handsOnList.stream().map(TeacherOpenCourseHandsOn::getHandsOnId).collect(Collectors.toList());
TeacherOpenCourseHandsOnSimulationTasksQuery tasksQuery = new TeacherOpenCourseHandsOnSimulationTasksQuery();
tasksQuery.setHandsOnIdPlural(CollectionUtil.join(handIds, ","));
tasksList = teacherOpenCourseHandsOnSimulationTasksService.getValuesByQueryNotWithPermission(tasksQuery);
}
List<StudentHandsOnVO> studentHandsOnVOS = new ArrayList<>();
BigDecimal b = BigDecimal.ZERO;
for (TeacherOpenCourseHandsOn handsOn : handsOnList) {
StudentHandsOnVO studentHandsOnVO = new StudentHandsOnVO();
Long handsOnId = handsOn.getHandsOnId();
studentHandsOnVO.setTeacherOpenCourseId(handsOn.getTeacherOpenCourseId());
List<TeacherOpenCourseHandsOnSimulationTasks> tasks = tasksList.stream().filter(v -> v.getHandsOnId().equals(handsOnId)).collect(Collectors.toList());
studentHandsOnVO.setHandsOnId(handsOnId);
studentHandsOnVO.setHandsOnName(handsOn.getHandsOnName());
studentHandsOnVO.setHandsOnTaskNum(tasks.size());
//总分
BigDecimal bigDecimal = BigDecimal.ZERO;
if (CollectionUtils.isNotEmpty(tasks)) {
//做题数
BigDecimal decimal = BigDecimal.ZERO;
for (TeacherOpenCourseHandsOnSimulationTasks task : tasks) {
Long taskId = task.getTaskId();
if (HandsOnTaskEnum.TASK_VIDEO.status.equals(task.getTaskType())) {
StudentHandsOnTaskVideoQuery videoQuery = new StudentHandsOnTaskVideoQuery();
videoQuery.setHandsOnTaskId(taskId);
videoQuery.setStudentId(studentId);
List<StudentHandsOnTaskVideo> videoList = videoService.getValuesByQueryNotWithPermission(videoQuery);
if (CollectionUtils.isNotEmpty(videoList)) {
StudentHandsOnTaskVideo studentHandsOnTaskVideo = videoList.get(0);
BigDecimal videoScore = studentHandsOnTaskVideo.getVideoScore();
bigDecimal = bigDecimal.add(videoScore == null ? BigDecimal.ZERO : videoScore);
decimal = decimal.add(BigDecimal.ONE);
}
} else if (HandsOnTaskEnum.TASK_PPT.status.equals(task.getTaskType())) {
StudentHandsOnTaskPptQuery pptQuery = new StudentHandsOnTaskPptQuery();
pptQuery.setHandsOnTaskId(taskId);
pptQuery.setStudentId(studentId);
List<StudentHandsOnTaskPpt> pptList = pptService.getValuesByQueryNotWithPermission(pptQuery);
if (CollectionUtils.isNotEmpty(pptList)) {
StudentHandsOnTaskPpt studentHandsOnTaskPpt = pptList.get(0);
BigDecimal videoScore = studentHandsOnTaskPpt.getPptScore();
bigDecimal = bigDecimal.add(videoScore == null ? BigDecimal.ZERO : videoScore);
decimal = decimal.add(BigDecimal.ONE);
}
} else if (HandsOnTaskEnum.TASK_THEORY.status.equals(task.getTaskType())) {
StudentHandsOnTaskTheoryQuery theoryQuery = new StudentHandsOnTaskTheoryQuery();
theoryQuery.setHandsOnTaskId(taskId);
theoryQuery.setStudentId(studentId);
List<StudentHandsOnTaskTheory> taskTheoryList = theoryService.getValuesByQueryNotWithPermission(theoryQuery);
if (CollectionUtils.isNotEmpty(taskTheoryList)) {
BigDecimal videoScore = taskTheoryList.stream().map(StudentHandsOnTaskTheory::getTheoryScore).reduce(BigDecimal.ZERO, BigDecimal::add);
bigDecimal = bigDecimal.add(videoScore == null ? BigDecimal.ZERO : videoScore);
decimal = decimal.add(BigDecimal.ONE);
}
} else if (HandsOnTaskEnum.TASK_PRACTICAL_TRAINING.status.equals(task.getTaskType())) {
StudentHandsOnTaskStepQuery stepQuery = new StudentHandsOnTaskStepQuery();
stepQuery.setHandsOnTaskId(taskId);
stepQuery.setStudentId(studentId);
List<StudentHandsOnTaskStep> stepList = stepService.getValuesByQueryNotWithPermission(stepQuery);
if (CollectionUtils.isNotEmpty(stepList)) {
StudentHandsOnTaskStep taskTheory = stepList.get(0);
BigDecimal videoScore = taskTheory.getTheoryScore();
bigDecimal = bigDecimal.add(videoScore == null ? BigDecimal.ZERO : videoScore);
decimal = decimal.add(BigDecimal.ONE);
}
} else if (HandsOnTaskEnum.TASK_REPORT_WRITING.status.equals(task.getTaskType())) {
StudentHandsOnTaskReportQuery reportQuery = new StudentHandsOnTaskReportQuery();
reportQuery.setHandsOnTaskId(taskId);
reportQuery.setStudentId(studentId);
List<StudentHandsOnTaskReport> reportList = reportService.getValuesByQueryNotWithPermission(reportQuery);
if (CollectionUtils.isNotEmpty(reportList)) {
StudentHandsOnTaskReport taskTheory = reportList.get(0);
BigDecimal videoScore = taskTheory.getReportScore();
bigDecimal = bigDecimal.add(videoScore == null ? BigDecimal.ZERO : videoScore);
decimal = decimal.add(BigDecimal.ONE);
}
}
}
int schedule = NumberUtil.div(decimal, BigDecimal.valueOf(tasksList.size()), 2).multiply(BigDecimal.valueOf(100)).intValue();
studentHandsOnVO.setSchedule(schedule);
} else {
studentHandsOnVO.setSchedule(0);
}
studentHandsOnVO.setStudentScore(bigDecimal);
studentHandsOnVOS.add(studentHandsOnVO);
b = b.add(bigDecimal);
}
try {
TeacherOpenCourseScoreDashboard dashboard = new TeacherOpenCourseScoreDashboard();
dashboard.setStudentId(studentId);
dashboard.setTeacherOpenCourseId(teacherOpenCourseId);
List<TeacherOpenCourseScoreDashboard> serviceValues = teacherOpenCourseScoreDashboardService.getValues(dashboard);
if (CollectionUtils.isEmpty(serviceValues)) {
dashboard.setRealOperationScore(b);
teacherOpenCourseScoreDashboardService.insert(dashboard);
dashboard.setCreateTime(new Date());
} else {
TeacherOpenCourseScoreDashboard dashboard1 = serviceValues.get(0);
dashboard1.setRealOperationScore(b);
teacherOpenCourseScoreDashboardService.update(dashboard1);
}
} catch (Exception e) {
}
return JsonResult.success(studentHandsOnVOS);
}
/**
* 复制系统授权课实训到开课
*
* @param teacherOpenCourseId 老师公开课id
* @param courseInfoId 课程信息id传最顶级即可
* @param courseInfoIdPair 课程信息id对
* @author zhouzhao
* @date 2023/04/28 03:59:44
*/
public void copySystemHandsToOpenCourse(@NotNull(message = "开课ID不能为空") Long teacherOpenCourseId,
@NotNull(message = "课程ID不能为空") Long courseInfoId,
@Nullable Map<Long, Long> courseInfoIdPair,
@Nullable Map<Long, Long> resourcesQuestionIdPair
) {
Date now = new Date();
CoreUser currentUser = getUser();
if (currentUser==null){
throw new PlatformException("请先登录");
}
HandsOnQuery handsOnQuery = new HandsOnQuery();
//归属课程
handsOnQuery.setCourseInfoId(courseInfoId);
// 已上架的
handsOnQuery.setHandsOnStatus(GlobalUpStatusEnum.UP.getCode());
List<HandsOn> handsOnList = handsOnService.getValuesByQuery(handsOnQuery);
if (CollectionUtils.isEmpty(handsOnList)) {
return;
}
//handsOnList 转换为 TeacherOpenCourseHandsOn
// 拷贝部分字段映射
// 拷贝
List<TeacherOpenCourseHandsOn> teacherOpenCourseHandsOnList = new ArrayList<>(BeanUtil.copyToList(handsOnList, TeacherOpenCourseHandsOn.class));
Map<Long, Long> handsOnIdOldToNewMap = new HashMap<>();
for (TeacherOpenCourseHandsOn teacherOpenCourseHandsOn : teacherOpenCourseHandsOnList) {
Long handsOnIdTemp = teacherOpenCourseHandsOn.getHandsOnId();
String courseChildNodeTemp = teacherOpenCourseHandsOn.getCourseChildNode();
Long newHandsOnId = snowflake.nextId();
handsOnIdOldToNewMap.put(handsOnIdTemp, newHandsOnId);
teacherOpenCourseHandsOn.setCourseChildNode(courseInfoIdPair.get(Long.parseLong(courseChildNodeTemp)).toString());
teacherOpenCourseHandsOn.setHandsOnId(newHandsOnId);
teacherOpenCourseHandsOn.setTeacherOpenCourseId(teacherOpenCourseId);
//别问我这里为什么放这个,他们自己的代码就是这样的
teacherOpenCourseHandsOn.setCourseInfoId(teacherOpenCourseId);
teacherOpenCourseHandsOn.setOrgId(currentUser.getOrgId());
teacherOpenCourseHandsOn.setUserId(currentUser.getId());
teacherOpenCourseHandsOn.setAddTime(now);
}
// 批量插入
insertBatch(teacherOpenCourseHandsOnList);
String handsOnIds = handsOnIdOldToNewMap.keySet().stream().map(String::valueOf).collect(Collectors.joining(","));
HandsOnSimulationTasksQuery handsOnSimulationTasksQuery = new HandsOnSimulationTasksQuery();
handsOnSimulationTasksQuery.setHandsOnIdPlural(handsOnIds);
List<HandsOnSimulationTasks> handsOnSimulationTasksList = handsOnSimulationTasksService.getValuesByQuery(handsOnSimulationTasksQuery);
// 拷贝部分字段映射
// 拷贝
List<TeacherOpenCourseHandsOnSimulationTasks> teacherOpenCourseHandsOnSimulationTasksList = new ArrayList<>(BeanUtil.copyToList(handsOnSimulationTasksList, TeacherOpenCourseHandsOnSimulationTasks.class));
Map<Long, Long> simulationTaskOldToNewMap = new HashMap<>();
teacherOpenCourseHandsOnSimulationTasksList.forEach(teacherOpenCourseHandsOnSimulationTasks -> {
Long newHandsOnId = handsOnIdOldToNewMap.get(teacherOpenCourseHandsOnSimulationTasks.getHandsOnId());
teacherOpenCourseHandsOnSimulationTasks.setHandsOnId(newHandsOnId);
teacherOpenCourseHandsOnSimulationTasks.setTeacherOpenCourseId(teacherOpenCourseId);
teacherOpenCourseHandsOnSimulationTasks.setOrgId(currentUser.getOrgId());
teacherOpenCourseHandsOnSimulationTasks.setUserId(currentUser.getId());
teacherOpenCourseHandsOnSimulationTasks.setAddTime(now);
Long oldTaskId = teacherOpenCourseHandsOnSimulationTasks.getTaskId();
Long newTaskId = snowflake.nextId();
simulationTaskOldToNewMap.put(oldTaskId, newTaskId);
teacherOpenCourseHandsOnSimulationTasks.setTaskId(newTaskId);
if (StringUtils.isNotBlank(teacherOpenCourseHandsOnSimulationTasks.getTaskList())){
List<Long> newIdList = new ArrayList<>();
String[] split = teacherOpenCourseHandsOnSimulationTasks.getTaskList().split(",");
for (String s : split) {
Long oldQuestionId = Long.parseLong(s);
Long newQuestionId = resourcesQuestionIdPair.get(oldQuestionId);
newIdList.add(newQuestionId!=null ? newQuestionId : oldQuestionId);
}
String collect = newIdList.stream().map(String::valueOf).collect(Collectors.joining(","));
teacherOpenCourseHandsOnSimulationTasks.setTaskList(collect);
}
});
// 批量插入
teacherOpenCourseHandsOnSimulationTasksService.insertBatch(teacherOpenCourseHandsOnSimulationTasksList);
HandsOnSimulationTasksAssessmentQuery handsOnSimulationTasksAssessmentQuery = new HandsOnSimulationTasksAssessmentQuery();
handsOnSimulationTasksAssessmentQuery.setHandsOnIdPlural(handsOnIds);
List<HandsOnSimulationTasksAssessment> handsOnSimulationTasksAssessmentList = handsOnSimulationTasksAssessmentService.getValuesByQuery(handsOnSimulationTasksAssessmentQuery);
// 拷贝部分字段映射
// 拷贝
List<TeacherOpenCourseHandsOnSimulationTasksAssessment> teacherOpenCourseHandsOnSimulationTasksAssessmentList = new ArrayList<>(BeanUtil.copyToList(handsOnSimulationTasksAssessmentList, TeacherOpenCourseHandsOnSimulationTasksAssessment.class));
teacherOpenCourseHandsOnSimulationTasksAssessmentList.forEach(teacherOpenCourseHandsOnSimulationTasksAssessment -> {
teacherOpenCourseHandsOnSimulationTasksAssessment.setHandsOnTaskId(simulationTaskOldToNewMap.get(teacherOpenCourseHandsOnSimulationTasksAssessment.getHandsOnTaskId()));
teacherOpenCourseHandsOnSimulationTasksAssessment.setHandsOnId(handsOnIdOldToNewMap.get(teacherOpenCourseHandsOnSimulationTasksAssessment.getHandsOnId()));
teacherOpenCourseHandsOnSimulationTasksAssessment.setOrgId(currentUser.getOrgId());
teacherOpenCourseHandsOnSimulationTasksAssessment.setUserId(currentUser.getId());
teacherOpenCourseHandsOnSimulationTasksAssessment.setHandsOnSimulationTasksAssessmentId(snowflake.nextId());
teacherOpenCourseHandsOnSimulationTasksAssessment.setAddTime(now);
});
// 批量插入
teacherOpenCourseHandsOnSimulationTasksAssessmentService.insertBatch(teacherOpenCourseHandsOnSimulationTasksAssessmentList);
HandsOnSimulationTasksFileQuery handsOnSimulationTasksFileQuery = new HandsOnSimulationTasksFileQuery();
handsOnSimulationTasksFileQuery.setHandsOnIdPlural(handsOnIds);
List<HandsOnSimulationTasksFile> handsOnSimulationTasksFileList = handsOnSimulationTasksFileService.getValuesByQuery(handsOnSimulationTasksFileQuery);
// 拷贝部分字段映射
// 拷贝
List<TeacherOpenCourseHandsOnSimulationTasksFile> teacherOpenCourseHandsOnSimulationTasksFileList = new ArrayList<>(BeanUtil.copyToList(handsOnSimulationTasksFileList, TeacherOpenCourseHandsOnSimulationTasksFile.class));
teacherOpenCourseHandsOnSimulationTasksFileList.forEach(item -> {
item.setTaskId(simulationTaskOldToNewMap.get(item.getTaskId()));
item.setHandsOnId(handsOnIdOldToNewMap.get(item.getHandsOnId()));
item.setTeacherOpenCourseId(teacherOpenCourseId);
item.setOrgId(currentUser.getOrgId());
item.setUserId(currentUser.getId());
item.setTaskFileId(snowflake.nextId());
item.setAddTime(now);
});
// 批量插入
teacherOpenCourseHandsOnSimulationTasksFileService.insertBatch(teacherOpenCourseHandsOnSimulationTasksFileList);
}
}