|
@@ -3,16 +3,27 @@ package com.qmth.teachcloud.mark.service.impl;
|
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
-import com.qmth.teachcloud.common.bean.dto.mark.manage.MarkArbitrateDto;
|
|
|
|
|
|
+import com.qmth.teachcloud.mark.dto.mark.manage.MarkArbitrateDto;
|
|
|
|
+import com.qmth.teachcloud.mark.dto.mark.manage.MarkArbitrateMarkerDto;
|
|
|
|
+import com.qmth.teachcloud.mark.dto.mark.manage.MarkArbitrateSettingDto;
|
|
|
|
+import com.qmth.teachcloud.common.entity.MarkPaper;
|
|
import com.qmth.teachcloud.common.entity.MarkStudent;
|
|
import com.qmth.teachcloud.common.entity.MarkStudent;
|
|
-import com.qmth.teachcloud.common.service.MarkQuestionService;
|
|
|
|
-import com.qmth.teachcloud.common.service.MarkStudentService;
|
|
|
|
|
|
+import com.qmth.teachcloud.common.entity.SysUser;
|
|
|
|
+import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
|
|
|
|
+import com.qmth.teachcloud.common.service.*;
|
|
|
|
+import com.qmth.teachcloud.common.util.ServletUtil;
|
|
import com.qmth.teachcloud.mark.entity.MarkArbitrateHistory;
|
|
import com.qmth.teachcloud.mark.entity.MarkArbitrateHistory;
|
|
|
|
+import com.qmth.teachcloud.mark.entity.MarkTask;
|
|
|
|
+import com.qmth.teachcloud.mark.entity.MarkUserGroup;
|
|
import com.qmth.teachcloud.mark.mapper.MarkArbitrateHistoryMapper;
|
|
import com.qmth.teachcloud.mark.mapper.MarkArbitrateHistoryMapper;
|
|
import com.qmth.teachcloud.mark.service.MarkArbitrateHistoryService;
|
|
import com.qmth.teachcloud.mark.service.MarkArbitrateHistoryService;
|
|
|
|
+import com.qmth.teachcloud.mark.service.MarkTaskService;
|
|
|
|
+import com.qmth.teachcloud.mark.service.MarkUserGroupService;
|
|
|
|
+import org.apache.commons.lang3.StringUtils;
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
import javax.annotation.Resource;
|
|
|
|
+import java.util.*;
|
|
|
|
|
|
/**
|
|
/**
|
|
* <p>
|
|
* <p>
|
|
@@ -25,10 +36,23 @@ import javax.annotation.Resource;
|
|
@Service
|
|
@Service
|
|
public class MarkArbitrateHistoryServiceImpl extends ServiceImpl<MarkArbitrateHistoryMapper, MarkArbitrateHistory> implements MarkArbitrateHistoryService {
|
|
public class MarkArbitrateHistoryServiceImpl extends ServiceImpl<MarkArbitrateHistoryMapper, MarkArbitrateHistory> implements MarkArbitrateHistoryService {
|
|
|
|
|
|
|
|
+ // 并发处理互斥锁
|
|
|
|
+ private Map<Long, Integer> currentTaskMap = new HashMap<>();
|
|
|
|
+
|
|
|
|
+ @Resource
|
|
|
|
+ private MarkPaperService markPaperService;
|
|
@Resource
|
|
@Resource
|
|
private MarkQuestionService markQuestionService;
|
|
private MarkQuestionService markQuestionService;
|
|
@Resource
|
|
@Resource
|
|
private MarkStudentService markStudentService;
|
|
private MarkStudentService markStudentService;
|
|
|
|
+ @Resource
|
|
|
|
+ private MarkTaskService markTaskService;
|
|
|
|
+ @Resource
|
|
|
|
+ private MarkUserGroupService markUserGroupService;
|
|
|
|
+ @Resource
|
|
|
|
+ private SysUserService sysUserService;
|
|
|
|
+ @Resource
|
|
|
|
+ private TeachcloudCommonService teachcloudCommonService;
|
|
|
|
|
|
@Override
|
|
@Override
|
|
public IPage<MarkArbitrateDto> pageArbitrate(Long examId, String paperNumber, Integer groupNumber, Integer pageNumber, Integer pageSize) {
|
|
public IPage<MarkArbitrateDto> pageArbitrate(Long examId, String paperNumber, Integer groupNumber, Integer pageNumber, Integer pageSize) {
|
|
@@ -47,4 +71,83 @@ public class MarkArbitrateHistoryServiceImpl extends ServiceImpl<MarkArbitrateHi
|
|
}
|
|
}
|
|
return markArbitrateDtoIPage;
|
|
return markArbitrateDtoIPage;
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public void clearArbitrate(Long arbitrateId) {
|
|
|
|
+ SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
|
|
|
|
+ if (arbitrateId != null) {
|
|
|
|
+ releaseTask(arbitrateId);
|
|
|
|
+ } else {
|
|
|
|
+ releaseByUser(sysUser.getId());
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public List<MarkArbitrateMarkerDto> listMarkerArbitrateRecord(Long arbitrateId) {
|
|
|
|
+ MarkArbitrateHistory markArbitrateHistory = this.getById(arbitrateId);
|
|
|
|
+ List<MarkTask> markTaskList = markTaskService.listByExamIdAndPaperNumberAndGroupNumberAndStudentId(markArbitrateHistory.getExamId(), markArbitrateHistory.getPaperNumber(), markArbitrateHistory.getGroupNumber(), markArbitrateHistory.getStudentId());
|
|
|
|
+ List<MarkArbitrateMarkerDto> markArbitrateMarkerDtoList = new ArrayList<>();
|
|
|
|
+ for (MarkTask markTask : markTaskList) {
|
|
|
|
+ MarkArbitrateMarkerDto markArbitrateMarkerDto = new MarkArbitrateMarkerDto();
|
|
|
|
+ MarkUserGroup markUserGroup = markUserGroupService.getByExamIdAndPaperNumberAndGroupNumberAndUserId(markTask.getExamId(), markTask.getPaperNumber(), markTask.getGroupNumber(), markTask.getUserId());
|
|
|
|
+ if (markUserGroup != null) {
|
|
|
|
+ markArbitrateMarkerDto.setUserId(markTask.getUserId());
|
|
|
|
+ SysUser sysUser = sysUserService.getById(markTask.getUserId());
|
|
|
|
+ if (sysUser != null) {
|
|
|
|
+ markArbitrateMarkerDto.setUserLoginName(sysUser.getLoginName());
|
|
|
|
+ markArbitrateMarkerDto.setUserName(sysUser.getRealName());
|
|
|
|
+ }
|
|
|
|
+ markArbitrateMarkerDto.setMarkTime(markTask.getMarkerTime());
|
|
|
|
+ markArbitrateMarkerDto.setScoreList(markTask.getMarkerScoreList());
|
|
|
|
+ markArbitrateMarkerDto.setTotalScore(markTask.getMarkerScore());
|
|
|
|
+ }
|
|
|
|
+ markArbitrateMarkerDtoList.add(markArbitrateMarkerDto);
|
|
|
|
+ }
|
|
|
|
+ return markArbitrateMarkerDtoList;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public MarkArbitrateSettingDto getArbitrateSetting(Long arbitrateId) {
|
|
|
|
+ SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
|
|
|
|
+ MarkArbitrateHistory markArbitrateHistory = this.getById(arbitrateId);
|
|
|
|
+ if (markArbitrateHistory == null) {
|
|
|
|
+ throw ExceptionResultEnum.ERROR.exception("仲裁数据异常");
|
|
|
|
+ }
|
|
|
|
+ MarkPaper markPaper = markPaperService.getByExamIdAndPaperNumber(markArbitrateHistory.getExamId(), markArbitrateHistory.getPaperNumber());
|
|
|
|
+ MarkArbitrateSettingDto markArbitrateSettingDto = new MarkArbitrateSettingDto();
|
|
|
|
+ if (markPaper != null) {
|
|
|
|
+ markArbitrateSettingDto.setMarkMode(markPaper.getMarkMode().name());
|
|
|
|
+ markArbitrateSettingDto.setCourseCode(markPaper.getCourseCode());
|
|
|
|
+ markArbitrateSettingDto.setCourseName(markPaper.getCourseName());
|
|
|
|
+ markArbitrateSettingDto.setPaperNumber(markPaper.getPaperNumber());
|
|
|
|
+ markArbitrateSettingDto.setUserLoginName(sysUser.getLoginName());
|
|
|
|
+ markArbitrateSettingDto.setUserName(sysUser.getRealName());
|
|
|
|
+ if (StringUtils.isNotBlank(markPaper.getPaperFilePath())) {
|
|
|
|
+ markArbitrateSettingDto.setPaperUrl(teachcloudCommonService.filePreview(markPaper.getPaperFilePath()));
|
|
|
|
+ }
|
|
|
|
+ if (StringUtils.isNotBlank(markPaper.getAnswerFilePath())) {
|
|
|
|
+ markArbitrateSettingDto.setAnswerUrl(teachcloudCommonService.filePreview(markPaper.getAnswerFilePath()));
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ return markArbitrateSettingDto;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private void releaseTask(Long taskId) {
|
|
|
|
+ synchronized (currentTaskMap) {
|
|
|
|
+ currentTaskMap.remove(taskId);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private void releaseByUser(Long userId) {
|
|
|
|
+ Set<Long> taskIds = new HashSet<>();
|
|
|
|
+ taskIds.addAll(currentTaskMap.keySet());
|
|
|
|
+ synchronized (currentTaskMap) {
|
|
|
|
+ for (Long taskId : taskIds) {
|
|
|
|
+ Integer value = currentTaskMap.get(taskId);
|
|
|
|
+ if (value != null && value.equals(userId)) {
|
|
|
|
+ currentTaskMap.remove(taskId);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
}
|
|
}
|