package com.ots.project.exam.service.impl; import com.ots.common.utils.StringUtils; import com.ots.framework.web.service.DictService; import com.ots.project.exam.domain.EntDemographyInfo; import com.ots.project.exam.domain.EntDemographyParam; 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.TExamPaper; import com.ots.project.exam.dto.DemographyDto; import com.ots.project.exam.dto.DictItemDto; import com.ots.project.exam.dto.ParamDefine; import com.ots.project.exam.dto.ParamDefineDictData; import com.ots.project.exam.dto.ParamsInfo; import com.ots.project.exam.dto.RelatedParty; import com.ots.project.exam.service.IEntDemographyInfoService; import com.ots.project.exam.service.IEntDemographyParamService; import com.ots.project.exam.service.IEntTestMemberService; import com.ots.project.exam.service.IEntTestPackageService; import com.ots.project.exam.service.ISysUserExtendService; import com.ots.project.exam.service.ITExamPaperService; import com.ots.project.exam.service.MemberService; import com.ots.project.system.dict.domain.DictData; import com.ots.project.tool.exam.JsonUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.Arrays; import java.util.List; import java.util.Objects; import java.util.stream.Collectors; import static com.ots.common.enums.ResponseCode.TEST_MEMBERINFO_EMPTY; import static com.ots.common.enums.ResponseCode.TEST_URL_FAIL; @Service @Slf4j public class MemberServiceImpl implements MemberService { //0未处理 1已完成 2答题中 3作废 private static final String UNTREATED_0 = "0"; private static final String DONE_1 = "1"; private static final String ANSWERING_2 = "2"; private static final String TIMEOUT_6 = "6"; private List status = Arrays.asList(UNTREATED_0, DONE_1, ANSWERING_2, TIMEOUT_6); @Autowired private IEntTestMemberService entTestMemberService; @Autowired private IEntDemographyParamService entDemographyParamService; @Autowired private IEntTestPackageService entTestPackageService; @Autowired private IEntDemographyInfoService entDemographyInfoService; @Autowired private DictService dictService; @Autowired private ISysUserExtendService sysUserExtendService; @Autowired private ITExamPaperService itExamPaperService; @Override public List getParamDefines(String token, String lang) { EntTestMember entTestMember = entTestMemberService.findEntTestMember(token, status); TEST_URL_FAIL.assertNotNull(entTestMember); Long testId = entTestMember.getTestId(); Long memberId = entTestMember.getMemberId(); //找到所属企业ID EntTestPackage entTestPackage = entTestPackageService.selectEntTestPackageById(testId); String paramCodes = entTestPackage.getParamCodes(); if (Objects.isNull(paramCodes)) { return null; } //通过企业编码寻找人口学定义 List entDemographyParams = entDemographyParamService.selectEntDemographyParamListByParamIn(paramCodes); if (Objects.isNull(entDemographyParams) || entDemographyParams.isEmpty()) { return null; } List result = entDemographyParams.stream().map(p -> { ParamDefine paramDefine = new ParamDefine(); String langCodes = p.getLangCodes(); List listCodes = JsonUtil.toJsonListObject(langCodes, DemographyDto.class); List data = listCodes.stream().filter(a -> Objects.equals(a.getLangType(), lang)).collect(Collectors.toList()); if (Objects.isNull(data) || data.isEmpty()) { return null; } BeanUtils.copyProperties(p, paramDefine); paramDefine.setLangType(data.get(0).getLangType()); paramDefine.setParamName(data.get(0).getLangCode()); if (StringUtils.isNotBlank(p.getDicttype())) { List list = dictService.getTypeByLangType(p.getDicttype(),lang).stream().map(dictData -> { ParamDefineDictData paramDefineDictData = new ParamDefineDictData(); BeanUtils.copyProperties(dictData, paramDefineDictData); return paramDefineDictData; }).collect(Collectors.toList()); paramDefine.setDictData(list); } paramDefine.setMemberId(memberId); return paramDefine; }).collect(Collectors.toList()); //过滤空对象 return result.stream().filter(a -> Objects.nonNull(a)).collect(Collectors.toList()); } @Override public List queryDemographyParamInfo(String token) { EntTestMember entTestMember = entTestMemberService.findEntTestMember(token, status); TEST_URL_FAIL.assertNotNull(entTestMember); EntDemographyInfo entDemographyInfo = new EntDemographyInfo(); entDemographyInfo.setMemberId(entTestMember.getMemberId()); List entDemographyInfos = entDemographyInfoService.selectEntDemographyInfoList(entDemographyInfo); TEST_MEMBERINFO_EMPTY.assertNotEmpty(entDemographyInfos); return entDemographyInfos; } @Override @Transactional public void saveDemographyParamInfo(String token, List infos, String langType) { TEST_URL_FAIL.assertNotNull(entTestMemberService.findEntTestMember(token, status)); infos.stream().forEach(p -> { EntDemographyInfo entDemographyInfo = new EntDemographyInfo(); BeanUtils.copyProperties(p, entDemographyInfo); entDemographyInfo.setLangType(langType); if (Objects.nonNull(entDemographyInfo.getInfoId())) { entDemographyInfoService.updateEntDemographyInfo(entDemographyInfo); } else { entDemographyInfoService.insertEntDemographyInfo(entDemographyInfo); } }); } @Override public RelatedParty queryProdidByToken(String token) { RelatedParty party = new RelatedParty(); try { EntTestMember entTestMember = entTestMemberService.findEntTestMember(token, status); Long testId = entTestMember.getTestId(); EntTestPackage entTestPackage = entTestPackageService.selectEntTestPackageById(testId); Long prodid = entTestPackage.getProdId(); party.setProdId(prodid); party.setProdName(entTestPackage.getProdName()); party.setTestId(testId); party.setTestName(entTestPackage.getTestName()); party.setMemberId(entTestMember.getMemberId()); party.setMemberName(entTestMember.getMemberName()); party.setUser_id(entTestPackage.getUserId()); party.setUserName(entTestPackage.getUserName()); party.setReportTemplateId(entTestPackage.getReportTemplateId()); party.setAutoSendReport(entTestPackage.isAutoSendReport()); TExamPaper tExamPaper = itExamPaperService.selectTExamPaperById(prodid); party.setQuestionTemplateId(tExamPaper.getQuestionTemplateId()); party.setStatus(entTestPackage.getStatus()); SysUserExtend sysUserExtend = sysUserExtendService.selectSysUserExtendById(entTestPackage.getUserId()); if (Objects.nonNull(sysUserExtend)) { party.setUser_parent_id(sysUserExtend.getParentUserId()); } party.setPosition(entTestPackage.getPosition()); party.setProfessionalCategory(entTestPackage.getProfessionalCategory()); party.setSuperiorPosition(entTestPackage.getSuperiorPosition()); party.setStartTime(entTestMember.getStartTime()); party.setMemberDept(entTestMember.getMemberDept()); party.setMemberPhone(entTestMember.getMemberPhone()); } catch (Exception ex) { log.error("【通过token获取用户所在企业测试包关联产品包错误:】{}", ex.getMessage(), ex); } return party; } @Override public List queryLang(String token) { EntTestMember entTestMember = entTestMemberService.findEntTestMember(token, status); TEST_URL_FAIL.assertNotNull(entTestMember); List list = dictService.getType("lang_type"); List result = list.stream().map(p -> { DictItemDto dictItemDto = new DictItemDto(); BeanUtils.copyProperties(p, dictItemDto); return dictItemDto; }).collect(Collectors.toList()); return result; } }