linzhijie
2021-03-11 93af1c6ffb9ae0e894689ad3a37b548e57d54cff
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
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<EntTestPackage> entTestPackages = entTestPackageService.selectEntTestPackageListByIdAndStatusIn(paramMap);
 
        //需要根据企业用户分组,要登记日志和统计
        Map<Long, List<EntTestPackage>> collect = entTestPackages.stream().collect(Collectors.groupingBy(EntTestPackage::getUserId));
 
        collect.forEach((userId, value) -> {
            List<Long> testIds = entTestPackages.stream().map(p -> p.getId()).collect(Collectors.toList());
            Map map = testMemberParams(testIds);
            List<EntTestMember> 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<Long> testIds) {
        Map map = new HashMap();
        map.put("testIds", testIds);
        List<String> recyclingStatus = Arrays.asList(TestMemberStatusEnum.unprocessed.getCode(), TestMemberStatusEnum.answering.getCode());
        map.put("status", recyclingStatus);
        return map;
    }
 
    /**
     * 测试包查询参数
     *
     * @return
     */
    private Map testPackageParams() {
        Map paramMap = new HashMap();
        List<String> status = Arrays.asList(TestPackageStatusEnum.enable.getCode(), TestPackageStatusEnum.pause.getCode());
        paramMap.put("status", status);
        paramMap.put("invalid", new Date());
        return paramMap;
    }
}