package com.ots.project.exam.service.impl; import com.ots.common.enums.TestMemberStatusEnum; import com.ots.project.exam.domain.*; import com.ots.project.exam.mapper.EntTestMemberMapper; import com.ots.project.exam.mapper.EntTestPackageMapper; import com.ots.project.exam.mapper.SysUserExtendMapper; import com.ots.project.exam.service.CountCalculateService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.util.*; import java.util.stream.Collectors; @Component public class CountCalculateServiceImpl implements CountCalculateService { @Autowired private EntTestMemberMapper entTestMemberMapper; @Autowired private EntTestPackageMapper entTestPackageMapper; @Autowired private SysUserExtendMapper sysUserExtendMapper; @Override public NumberOfUsersByCompany calculateProductPackagesMemberCount(EntTestPackage entTestPackage) { Long userId = entTestPackage.getUserId(); NumberOfUsersByCompany result = new NumberOfUsersByCompany(); if (Objects.nonNull(userId)) { SysUserExtend sysUserExtend = sysUserExtendMapper.selectSysUserExtendById(userId); if (Objects.isNull(sysUserExtend)) { return result; } Long testNum = sysUserExtend.getTestNum(); if (Objects.isNull(testNum)) { return result; } result.setTestNum(testNum.intValue()); } List entTestPackages = findEntTestPackages(entTestPackage); if (Objects.nonNull(entTestPackages) && !entTestPackages.isEmpty()) { result = constructResult(userId, entTestPackages); } return result; } private List findEntTestPackages(EntTestPackage entTestPackage) { return entTestPackageMapper.selectEntTestPackageList(entTestPackage); } private NumberOfUsersByCompany constructResult(Long userId, List entTestPackages) { List collect = entTestPackages.stream().map(p -> p.getId()).collect(Collectors.toList()); List entTestMembers = findEntTestMembers(collect); NumberOfUsersByCompany result = new NumberOfUsersByCompany(); if (Objects.nonNull(userId)) { result.setUserId(userId); } if (Objects.nonNull(result.getTestNum())) { result.setUsedTimes(entTestMembers.size()); } Map> testPackageUsageTimesMap = entTestMembers.stream().collect(Collectors.groupingBy(EntTestMember::getTestId)); entTestPackages.stream().forEach(p -> { NumberOfUsersByPackage numberOfUsersByPackage = new NumberOfUsersByPackage(); List testMembers = testPackageUsageTimesMap.get(p.getId()); long total = Long.valueOf(0); long finishNum = Long.valueOf(0); long unTestNum = Long.valueOf(0); long testIngNum = Long.valueOf(0); if (Objects.nonNull(testMembers)) { total = Long.valueOf(testMembers.size()); finishNum = testMembers.stream().filter(testMember -> TestMemberStatusEnum.completed.getCode().equals(testMember.getStatus())).mapToLong(x -> 1).sum(); testIngNum = testMembers.stream().filter(testMember -> TestMemberStatusEnum.answering.getCode().equals(testMember.getStatus())).mapToLong(x -> 1).sum(); unTestNum = total - testIngNum - finishNum; } numberOfUsersByPackage.setTestNum(total); numberOfUsersByPackage.setFinishNum(finishNum); numberOfUsersByPackage.setUnTestNum(unTestNum); numberOfUsersByPackage.setTestingNum(testIngNum); if (Objects.isNull(result.getTestPackageUsageTimesMap())) { result.setTestPackageUsageTimesMap(new HashMap<>()); } result.getTestPackageUsageTimesMap().put(p.getId(), numberOfUsersByPackage); }); return result; } private List findEntTestMembers(List collect) { Map map = new HashMap(); map.put("testIds", collect); List recyclingStatus = Arrays.asList(TestMemberStatusEnum.unprocessed.getCode(), TestMemberStatusEnum.completed.getCode(), TestMemberStatusEnum.answering.getCode()); map.put("status", recyclingStatus); return entTestMemberMapper.selectEntTestMemberListByMap(map); } }