package com.ots.project.monitor.job.task; import com.ots.common.enums.TestMemberStatusEnum; import com.ots.common.enums.TestPackageStatusEnum; import com.ots.project.exam.domain.EntTestMember; import com.ots.project.exam.domain.EntTestPackage; import com.ots.project.exam.service.IEntTestMemberService; import com.ots.project.exam.service.IEntTestPackageService; import com.ots.project.exam.service.impl.EntOperLogServiceImpl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.util.*; import java.util.stream.Collectors; import static com.ots.common.enums.OpertypeEnum.DIS_USER; /** * 控制测试包状态 * 到期后需要回收次数的独立程序 */ @Component("recoverTask") public class RecoverTask { @Autowired IEntTestPackageService entTestPackageService; @Autowired IEntTestMemberService entTestMemberService; @Autowired private EntOperLogServiceImpl entOperLogService; /** * 过期回收评测资格,变更 */ public void expiredRecyclingTestEligibility() { Map paramMap = testPackageParams(); //过期测试包 List entTestPackages = entTestPackageService.selectEntTestPackageListByIdAndStatusIn(paramMap); //需要根据企业用户分组,要登记日志和统计 Map> collect = entTestPackages.stream().collect(Collectors.groupingBy(EntTestPackage::getUserId)); collect.forEach((userId, value) -> { List testIds = entTestPackages.stream().map(p -> p.getId()).collect(Collectors.toList()); Map map = testMemberParams(testIds); List entTestMembers = entTestMemberService.selectEntTestMemberList(map); entTestMembers.stream().forEach(it -> { it.setStatus(TestMemberStatusEnum.expiryRecovery.getCode()); entTestMemberService.updateEntTestMember(it); //记录日志 entOperLogService.saveLog(userId, "", DIS_USER, Long.valueOf(entTestMembers.size())); }); entTestPackages.stream().forEach(it -> { it.setStatus(TestPackageStatusEnum.ending.getCode()); entTestPackageService.updateEntTestPackage(it); }); }); } /** * 评测人员查询参数 * * @param testIds * @return */ private Map testMemberParams(List testIds) { Map map = new HashMap(); map.put("testIds", testIds); List recyclingStatus = Arrays.asList(TestMemberStatusEnum.unprocessed.getCode(), TestMemberStatusEnum.answering.getCode()); map.put("status", recyclingStatus); return map; } /** * 测试包查询参数 * * @return */ private Map testPackageParams() { Map paramMap = new HashMap(); List status = Arrays.asList(TestPackageStatusEnum.enable.getCode(), TestPackageStatusEnum.pause.getCode()); paramMap.put("status", status); paramMap.put("invalid", new Date()); return paramMap; } }