package com.ots.project.exam.service.impl;
|
import com.ots.common.enums.TestMemberStatusEnum;
|
import com.ots.common.enums.UsageCountEnum;
|
import com.ots.common.exception.BusinessException;
|
import com.ots.common.utils.DateUtils;
|
import com.ots.common.utils.MessageUtils;
|
import com.ots.common.utils.StringUtils;
|
import com.ots.common.utils.text.Convert;
|
import com.ots.project.exam.domain.EntTestMember;
|
import com.ots.project.exam.domain.EntTestPackage;
|
import com.ots.project.exam.domain.SysUserExtend;
|
import com.ots.project.exam.domain.TExamReport;
|
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.mapper.TExamReportMapper;
|
import com.ots.project.exam.service.IEntTestMemberService;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
import java.util.*;
|
import java.util.stream.Collectors;
|
import static com.ots.common.enums.ResponseCode.*;
|
import static com.ots.common.enums.TestMemberStatusEnum.*;
|
|
@Service
|
@Slf4j
|
public class EntTestMemberServiceImpl implements IEntTestMemberService {
|
@Autowired
|
private EntTestMemberMapper entTestMemberMapper;
|
@Autowired
|
private EntTestPackageMapper entTestPackageMapper;
|
@Autowired
|
private SysUserExtendMapper sysUserExtendMapper;
|
@Autowired
|
private TExamReportMapper tReportTemplateMapper;
|
|
@Override
|
public EntTestMember selectEntTestMemberById(Long memberId) {
|
return entTestMemberMapper.selectEntTestMemberById(memberId);
|
}
|
|
@Override
|
public List<EntTestMember> selectEntTestMemberList(EntTestMember entTestMember) {
|
return entTestMemberMapper.selectEntTestMemberList(entTestMember);
|
}
|
@Override
|
public List<EntTestMember> selectEntTestMemberTopList(EntTestMember entTestMember) {
|
return entTestMemberMapper.selectEntTestMemberTopList(entTestMember);
|
}
|
@Override
|
public List<EntTestMember> selectEntTestMemberQueryList(EntTestMember entTestMember) {
|
List<EntTestMember> entTestMembers = entTestMemberMapper.selectEntTestMemberQueryList(entTestMember);
|
|
List<String> collect = entTestMembers.stream().map(p -> String.valueOf(p.getMemberId())).collect(Collectors.toList());
|
if (Objects.isNull(collect)) {
|
return new ArrayList<>();
|
}
|
String[] memberIds = collect.toArray(new String[collect.size()]);
|
if (Objects.isNull(memberIds) || memberIds.length == 0) {
|
return new ArrayList<>();
|
}
|
List<TExamReport> tExamReports = tReportTemplateMapper.selectTReportTemplatesByMemberId(memberIds);
|
|
Map<String, EntTestMember> map = new HashMap();
|
for (EntTestMember testMember : entTestMembers) {
|
map.put(String.valueOf(testMember.getMemberId()), testMember);
|
}
|
for (TExamReport report : tExamReports) {
|
String memberId = String.valueOf(report.getMemberId());
|
if (map.containsKey(memberId)) {
|
EntTestMember testMember = map.get(memberId);
|
testMember.setSendHrEmail(report.getSendHrStatus());
|
testMember.setReportAddress(report.getReportAddress());
|
testMember.setReportId(report.getId());
|
}
|
}
|
return entTestMembers;
|
}
|
@Override
|
public List<EntTestMember> selectEntTestMemberList(Map params) {
|
return entTestMemberMapper.selectEntTestMemberListByMap(params);
|
}
|
|
@Override
|
@Transactional
|
public int insertEntTestMember(EntTestMember entTestMember) {
|
entTestMember.setCreateTime(DateUtils.getNowDate());
|
entTestMember.setToken(UUID.randomUUID().toString());
|
int result = entTestMemberMapper.insertEntTestMember(entTestMember);
|
usageCount(entTestMember, UsageCountEnum.reduce);
|
return result;
|
}
|
|
private void usageCount(EntTestMember entTestMember, UsageCountEnum op) {
|
MISSING_PARAMETERS.assertNotNull(entTestMember.getTestId(), "测试包编码");
|
EntTestPackage entTestPackage = entTestPackageMapper.selectEntTestPackageById(entTestMember.getTestId());
|
ERROR_MESSAGE_CHECK.assertNotNull(entTestPackage, "测试包信息不存在!");
|
SysUserExtend sysUserExtend = sysUserExtendMapper.selectSysUserExtendById(entTestPackage.getUserId());
|
ERROR_MESSAGE_CHECK.assertNotNull(sysUserExtend, "未配置可使用次数!");
|
USR_TIME_ISOVER.assertIsTrue(sysUserExtend.getTestNum() > 0, entTestPackage.getUserId());
|
sysUserExtend.setTestNum(sysUserExtend.getTestNum() + op.getOp());
|
sysUserExtendMapper.updateSysUserExtend(sysUserExtend);
|
}
|
|
@Override
|
@Transactional
|
public int updateEntTestMember(EntTestMember entTestMember) {
|
entTestMember.setUpdateTime(DateUtils.getNowDate());
|
int reslut = entTestMemberMapper.updateEntTestMember(entTestMember);
|
|
List<String> status = Arrays.asList(TestMemberStatusEnum.recover.getCode(), TestMemberStatusEnum.expiryRecovery.getCode());
|
if (status.contains(entTestMember.getStatus())) {
|
usageCount(entTestMember, UsageCountEnum.add);
|
}
|
return reslut;
|
}
|
|
@Override
|
public int deleteEntTestMemberByIds(String ids) {
|
return entTestMemberMapper.deleteEntTestMemberByIds(Convert.toStrArray(ids));
|
}
|
|
public int deleteEntTestMemberById(Long memberId) {
|
return entTestMemberMapper.deleteEntTestMemberById(memberId);
|
}
|
@Override
|
public String importEntTestMember(List<EntTestMember> entTestMemberList, Boolean isUpdateSupport) {
|
if (StringUtils.isNull(entTestMemberList) || entTestMemberList.size() == 0) {
|
throw new BusinessException("Import user data cannot be empty!");
|
}
|
int successNum = 0;
|
int failureNum = 0;
|
StringBuilder successMsg = new StringBuilder();
|
StringBuilder failureMsg = new StringBuilder();
|
for (EntTestMember entTestMember : entTestMemberList) {
|
try {
|
insertEntTestMember(entTestMember);
|
} catch (Exception ex) {
|
failureNum++;
|
successNum++;
|
failureMsg.append("<br/>" + failureNum + "、" + MessageUtils.message("jsp.testPackage.name") + " " + entTestMember.getMemberName() + " " + MessageUtils.message("import.failed") + ":" + ex.getMessage());
|
successMsg.append("<br/>" + successNum + "、" + MessageUtils.message("dataFormatError"));
|
log.error(entTestMember.getMemberName() + "导入失败:{}", ex.getMessage(), ex);
|
continue;
|
}
|
successNum++;
|
successMsg.append("<br/>" + successNum + "、"+ MessageUtils.message("jsp.testPackage.name") +" " + entTestMember.getMemberName() + MessageUtils.message("imported.successfully"));
|
}
|
if (failureNum > 0) {
|
failureMsg.insert(0, MessageUtils.message("import.internationalization.001") + failureNum + MessageUtils.message("import.internationalization.002"));
|
|
} else {
|
successMsg.insert(0, MessageUtils.message("import.internationalization.003") + successNum + MessageUtils.message("import.internationalization.004"));
|
}
|
return successMsg.toString();
|
}
|
public EntTestMember findEntTestMember(String token, List<String> status) {
|
Map paramMap = new HashMap();
|
paramMap.put("token", token);
|
paramMap.put("status", status);
|
return entTestMemberMapper.findEntTestMember(paramMap);
|
}
|
@Override
|
public int updateTestMemberStatus(TestMemberStatusEnum statusEnum, long memberId) {
|
EntTestMember member = selectEntTestMemberById(memberId);
|
member.setStatus(statusEnum.getCode());
|
if (answering == statusEnum) {
|
member.setStartTime(new Date());
|
} else if (completed == statusEnum || timeOut == statusEnum) {
|
member.setEndTime(new Date());
|
}
|
int result = updateEntTestMember(member);
|
return result;
|
}
|
@Override
|
public boolean checkMemberHasReport(List<String> asList, Long testId) {
|
return false;
|
}
|
}
|