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 selectEntTestMemberList(EntTestMember entTestMember) { return entTestMemberMapper.selectEntTestMemberList(entTestMember); } @Override public List selectEntTestMemberTopList(EntTestMember entTestMember) { return entTestMemberMapper.selectEntTestMemberTopList(entTestMember); } @Override public List selectEntTestMemberQueryList(EntTestMember entTestMember) { List entTestMembers = entTestMemberMapper.selectEntTestMemberQueryList(entTestMember); List 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 tExamReports = tReportTemplateMapper.selectTReportTemplatesByMemberId(memberIds); Map 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 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 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 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("
" + failureNum + "、" + MessageUtils.message("jsp.testPackage.name") + " " + entTestMember.getMemberName() + " " + MessageUtils.message("import.failed") + ":" + ex.getMessage()); successMsg.append("
" + successNum + "、" + MessageUtils.message("dataFormatError")); log.error(entTestMember.getMemberName() + "导入失败:{}", ex.getMessage(), ex); continue; } successNum++; successMsg.append("
" + 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 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 asList, Long testId) { return false; } }