package cn.com.qmth.scancentral.service.impl; import java.util.List; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.qmth.boot.core.collection.PageResult; import cn.com.qmth.scancentral.dao.StudentDao; import cn.com.qmth.scancentral.service.ImageCheckService; import cn.com.qmth.scancentral.service.ToolExportService; import cn.com.qmth.scancentral.util.MathUtil; import cn.com.qmth.scancentral.util.PageUtil; import cn.com.qmth.scancentral.vo.imagecheck.ImageCheckDetailVo; import cn.com.qmth.scancentral.vo.imagecheck.ImageCheckFailedQuery; import cn.com.qmth.scancentral.vo.imagecheck.ImageCheckVo; @Component public class ImageCheckServiceImpl implements ImageCheckService { private static final Logger log = LoggerFactory.getLogger(ImageCheckServiceImpl.class); @Autowired private ToolExportService toolExportService; @Autowired private StudentDao studentDao; @Override public List list(Long examId) { if (examId == null) { throw new IllegalArgumentException("考试ID不能为空"); } List result = studentDao.countImageCheck(examId); for (ImageCheckVo vo : result) { if (vo.getTotalCount() == null || vo.getTotalCount() == 0) { vo.setImageCheckProgress(null); } else { double progress = MathUtil.percentage(vo.getDisposedCount(), vo.getTotalCount()); vo.setImageCheckProgress(progress); } } return result; } @Override public PageResult failedPage(ImageCheckFailedQuery query) { if (query.getExamId() == null) { throw new IllegalArgumentException("考试ID不能为空"); } if (StringUtils.isBlank(query.getSubjectCode())) { throw new IllegalArgumentException("科目代码不能为空"); } IPage page = studentDao.failedPage(new Page<>(query.getPageNumber(), query.getPageSize()), query); for (ImageCheckDetailVo vo : page.getRecords()) { vo.setFailed(vo.getFailedCount() > 0); } return PageUtil.of(page); } /** * 图片检查 */ @Override public void check(Long examId) { log.warn("图片检查开始... examId:{}", examId); long startTime = System.currentTimeMillis(); int batchSize = 1000; int checkedSize = 0; Long startId = 0L; while (true) { List studentIds = studentDao.queryImageCheckWaitingList(examId, startId, batchSize); if (CollectionUtils.isEmpty(studentIds)) { break; } for (Long studentId : studentIds) { toolExportService.studentCheck(studentId); } checkedSize += studentIds.size(); log.info("图片检查中... examId:{} checkedSize:{} startId:{}", examId, checkedSize, startId); startId = studentIds.get(studentIds.size() - 1); } long cost = (System.currentTimeMillis() - startTime) / 1000; log.warn("图片检查结束... examId:{} checkedSize:{} cost:{}s", examId, checkedSize, cost); } }