package com.smartor.service.impl; import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.DtoConversionUtils; import com.ruoyi.common.utils.StringUtils; import com.smartor.domain.*; import com.smartor.mapper.*; import com.smartor.service.ISvyLibTemplateService; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.ObjectUtils; 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.*; import java.util.stream.Collectors; /** * 问卷Service业务层处理 * * @author ruoyi * @date 2023-03-02 */ @Slf4j @Service public class SvyLibTemplateServiceImpl implements ISvyLibTemplateService { @Autowired private SvyLibTemplateMapper svyLibTemplateMapper; @Autowired private SvyLibTemplateScriptMapper svyLibTemplateScriptMapper; @Autowired private SvyLibTemplateTargetoptionMapper svyLibTemplateTargetoptionMapper; @Autowired private TemplateDeptMapper templateDeptMapper; @Autowired private SvyLibTemplateTagMapper svyLibTemplateTagMapper; @Autowired private Icd10AssociationMapper icd10AssociationMapper; /** * 查询问卷 * * @param svyid 问卷主键 * @return 问卷 */ @Override public SvyLibTemplate selectSvyLibTemplateBySvyid(Long svyid) { return svyLibTemplateMapper.selectSvyLibTemplateBySvyid(svyid); } @Override public List getSviLibTemplate(SvyLibTemplate svyLibTemplate) { SvyLibTemplateReq svyLibTemplateReq = new SvyLibTemplateReq(); svyLibTemplateReq.setSvyid(svyLibTemplate.getSvyid()); svyLibTemplateReq.setCategoryid(svyLibTemplate.getCategoryid()); svyLibTemplateReq.setDescription(svyLibTemplate.getDescription()); svyLibTemplateReq.setSvyname(svyLibTemplate.getSvyname()); List svyLibTemplates = svyLibTemplateMapper.selectSvyLibTemplateList(svyLibTemplateReq); for (SvyLibTemplate svyLibTemplate1 : svyLibTemplates) { SvyLibTemplateScript svyLibTemplateScript = new SvyLibTemplateScript(); svyLibTemplateScript.setSvyid(svyLibTemplate1.getSvyid()); List svyLibTemplateScripts = svyLibTemplateScriptMapper.selectSvyLibTemplateScriptList(svyLibTemplateScript); for (SvyLibTemplateScript svyLibTemplateScript1 : svyLibTemplateScripts) { if (svyLibTemplateScript1.getScriptType().equals("1") || svyLibTemplateScript1.getScriptType().equals("2")) { SvyLibTemplateTargetoption svyLibTemplateTargetoption = new SvyLibTemplateTargetoption(); svyLibTemplateTargetoption.setScriptid(svyLibTemplateScript1.getId()); List svyLibTemplateTargetoptions = svyLibTemplateTargetoptionMapper.selectSvyLibTemplateTargetoptionList(svyLibTemplateTargetoption); svyLibTemplateScript1.setSvyLibTemplateTargetoptions(svyLibTemplateTargetoptions); } } svyLibTemplate1.setSvyTemplateLibScripts(svyLibTemplateScripts); } return svyLibTemplates; } /** * 查询问卷列表 * * @param svyLibTemplateReq 问卷 * @return 问卷 */ @Override public List selectSvyLibTemplateList(SvyLibTemplateReq svyLibTemplateReq) { List svyLibTemplates = svyLibTemplateMapper.selectSvyLibTemplateList(svyLibTemplateReq); List svyLibTemplateVOS = DtoConversionUtils.sourceToTarget(svyLibTemplates, SvyLibTemplateVO.class); //添加题目 for (int i = 0; i < svyLibTemplateVOS.size(); i++) { SvyLibTemplateScript svyLibTemplateScript = new SvyLibTemplateScript(); svyLibTemplateScript.setSvyid(svyLibTemplateVOS.get(i).getSvyid()); List svyLibTemplateScripts = svyLibTemplateScriptMapper.selectSvyLibTemplateScriptList(svyLibTemplateScript); //获取题目选项 a: for (int j = 0; j < svyLibTemplateScripts.size(); j++) { log.info("问题id为:{}", svyLibTemplateScripts.get(j).getId()); if (StringUtils.isNotEmpty(svyLibTemplateScripts.get(j).getScriptType()) && svyLibTemplateScripts.get(j).getScriptType().equals("3") || svyLibTemplateScripts.get(j).getId() == null) { //作答题,不需要选项 continue a; } else { SvyLibTemplateTargetoption svyLibTopicoption = new SvyLibTemplateTargetoption(); svyLibTopicoption.setScriptid(svyLibTemplateScripts.get(j).getId()); List svyLibTemplateTargetoptions = svyLibTemplateTargetoptionMapper.selectSvyLibTemplateTargetoptionList(svyLibTopicoption); //将查询出的选项目放到题目中 svyLibTemplateScripts.get(j).setSvyLibTemplateTargetoptions(svyLibTemplateTargetoptions); } } //将题目放到问卷列表中 svyLibTemplateVOS.get(i).setSvyTemplateLibScripts(svyLibTemplateScripts); //获取每个问卷对应的科室 TemplateDept templateDept = new TemplateDept(); templateDept.setTempid(svyLibTemplateVOS.get(i).getSvyid()); List tempDetpRelevances = templateDeptMapper.selectTemplateDeptList(templateDept); svyLibTemplateVOS.get(i).setTempDetpRelevances(CollectionUtils.isNotEmpty(tempDetpRelevances) ? tempDetpRelevances : new ArrayList<>()); //获取标签 SvyLibTemplateTag svyLibTemplateTag = new SvyLibTemplateTag(); svyLibTemplateTag.setTemplateid(svyLibTemplateVOS.get(i).getSvyid()); List svyLibTemplateTags = svyLibTemplateTagMapper.selectSvyLibTemplateTagList(svyLibTemplateTag); svyLibTemplateVOS.get(i).setSvyLibTemplateTagList(svyLibTemplateTags); //获取疾病 Icd10Association icd10Association = new Icd10Association(); icd10Association.setType(5L); icd10Association.setOutid(svyLibTemplateVOS.get(i).getSvyid()); svyLibTemplateVOS.get(i).setIcd10AssociationList(icd10AssociationMapper.selectIcd10AssociationList(icd10Association)); } //先将相同的id的icdname,整理到一块 List libTemplates = svyLibTemplateVOS.stream().collect(Collectors.groupingBy(SvyLibTemplateVO::getSvyid, Collectors.mapping(SvyLibTemplateVO::getIcdname, Collectors.joining(", ")))).entrySet().stream().map(entry -> new SvyLibTemplateVO(entry.getKey(), entry.getValue())).collect(Collectors.toList()); //临时变量,用来保存疾病名称 String icdname = null; for (int i = 0; i < libTemplates.size(); i++) { for (int j = 0; j < svyLibTemplateVOS.size(); j++) { if (ObjectUtils.isNotEmpty(libTemplates.get(i).getSvyid()) && libTemplates.get(i).getSvyid() == svyLibTemplateVOS.get(j).getSvyid()) { icdname = libTemplates.get(i).getIcdname(); // 将原数据拷贝到整理的好的对象上 BeanUtils.copyProperties(svyLibTemplateVOS.get(j), libTemplates.get(i)); //再将整理好的“疾病名称”替换 libTemplates.get(i).setIcdname(icdname); } //将问题按序号排一下序 Collections.sort(svyLibTemplateVOS.get(j).getSvyTemplateLibScripts(), new Comparator() { @Override public int compare(SvyLibTemplateScript o1, SvyLibTemplateScript o2) { return Integer.compare(o1.getSort().intValue(), o2.getSort().intValue()); } }); } } return svyLibTemplateVOS; } /** * 新增或修改问卷模板信息 * * @param svyLibTemplateVO * @return */ @Transactional(rollbackFor = Exception.class) @Override public Integer saveOrUpdateTemplate(SvyLibTemplateVO svyLibTemplateVO) { SvyLibTemplate svyLibTemplate = DtoConversionUtils.sourceToTarget(svyLibTemplateVO, SvyLibTemplate.class); Integer i = null; if (svyLibTemplate.getIsoperation() != null && svyLibTemplate.getIsoperation() == 1) { //新增 svyLibTemplate.setCreateTime(DateUtils.getNowDate()); svyLibTemplateMapper.insertSvyLibTemplate(svyLibTemplate); } else if (svyLibTemplate.getIsoperation() != null && svyLibTemplate.getIsoperation() == 2) { //修改 svyLibTemplate.setUpdateTime(DateUtils.getNowDate()); svyLibTemplateMapper.updateSvyLibTemplate(svyLibTemplate); } else if (svyLibTemplate.getIsoperation() != null && svyLibTemplate.getIsoperation() == 3) { //删除 svyLibTemplateMapper.deleteSvyLibTemplateBySvyid(svyLibTemplate.getSvyid()); } i = svyLibTemplate.getSvyid().intValue(); //处理题目 if (CollectionUtils.isNotEmpty(svyLibTemplate.getSvyTemplateLibScripts())) { for (SvyLibTemplateScript svyLibScript : svyLibTemplate.getSvyTemplateLibScripts()) { svyLibScript.setGuid(svyLibTemplateVO.getGuid()); svyLibScript.setOrgid(svyLibTemplateVO.getOrgid()); //对题目进行处理 if (svyLibScript.getIsoperation() != null) { //问题的操作不为空 scriptHandle(svyLibTemplate.getSvyid(), svyLibScript, svyLibScript.getIsoperation()); } else if (svyLibScript.getIsoperation() == null && svyLibTemplate.getIsoperation() != null) { //模板的操作不为空 scriptHandle(svyLibTemplate.getSvyid(), svyLibScript, svyLibTemplate.getIsoperation()); } //对题目选项进行处理 if (CollectionUtils.isNotEmpty(svyLibScript.getSvyLibTemplateTargetoptions())) { for (SvyLibTemplateTargetoption svyLibTemplateTargetoption : svyLibScript.getSvyLibTemplateTargetoptions()) { svyLibTemplateTargetoption.setGuid(svyLibTemplateVO.getGuid()); svyLibTemplateTargetoption.setOrgid(svyLibTemplateVO.getOrgid()); if (svyLibTemplateTargetoption.getIsoperation() != null) { //选选项的操作不为空 optionHandle(svyLibTemplateTargetoption, svyLibScript.getId(), svyLibTemplateTargetoption.getIsoperation()); } else if (svyLibTemplateTargetoption.getIsoperation() == null && svyLibScript.getIsoperation() != null) { //问题的操作不为空 optionHandle(svyLibTemplateTargetoption, svyLibScript.getId(), svyLibScript.getIsoperation()); } else if (svyLibTemplateTargetoption.getIsoperation() == null && svyLibScript.getIsoperation() == null && svyLibTemplate.getIsoperation() != null) { //模板的操作不为空 optionHandle(svyLibTemplateTargetoption, svyLibScript.getId(), svyLibTemplate.getIsoperation()); } } } } } if (CollectionUtils.isNotEmpty(svyLibTemplate.getTempDetpRelevances())) { for (TemplateDept tempDetpRelevance : svyLibTemplate.getTempDetpRelevances()) { tempDetpRelevance.setGuid(svyLibTemplateVO.getGuid()); tempDetpRelevance.setOrgid(svyLibTemplateVO.getOrgid()); if (tempDetpRelevance.getId() == null) { //新增 tempDetpRelevance.setTempid(svyLibTemplate.getSvyid()); tempDetpRelevance.setType(1L); templateDeptMapper.insertTemplateDept(tempDetpRelevance); } else { templateDeptMapper.updateTemplateDept(tempDetpRelevance); } } } //标签处理 if (CollectionUtils.isNotEmpty(svyLibTemplate.getSvyLibTemplateTagList())) { for (SvyLibTemplateTag svyLibTemplateTag : svyLibTemplate.getSvyLibTemplateTagList()) { if (svyLibTemplateTag.getId() == null) { //新增 svyLibTemplateTag.setTemplateid(svyLibTemplate.getSvyid()); svyLibTemplateTagMapper.insertSvyLibTemplateTag(svyLibTemplateTag); } else { svyLibTemplateTag.setTemplateid(svyLibTemplate.getSvyid()); svyLibTemplateTagMapper.updateSvyLibTemplateTag(svyLibTemplateTag); } } } if (CollectionUtils.isNotEmpty(svyLibTemplateVO.getIcd10AssociationList())) { for (Icd10Association icd10Association : svyLibTemplateVO.getIcd10AssociationList()) { if (icd10Association.getId() == null) { icd10Association.setType(5L); icd10Association.setOutid(svyLibTemplate.getSvyid()); icd10AssociationMapper.insertIcd10Association(icd10Association); } else { icd10Association.setType(5L); icd10Association.setOutid(svyLibTemplate.getSvyid()); icd10AssociationMapper.updateIcd10Association(icd10Association); } } } return i; } /** * 修改问卷 * * @param svyLibTemplate 问卷 * @return 结果 */ @Override public int updateSvyLibTemplate(SvyLibTemplate svyLibTemplate) { svyLibTemplate.setUpdateTime(DateUtils.getNowDate()); return svyLibTemplateMapper.updateSvyLibTemplate(svyLibTemplate); } /** * 批量删除问卷 * * @param svyids 需要删除的问卷主键 * @return 结果 */ @Override public int deleteSvyLibTemplateBySvyids(Long[] svyids) { return svyLibTemplateMapper.deleteSvyLibTemplateBySvyids(svyids); } /** * 删除问卷信息 * * @param svyid 问卷主键 * @return 结果 */ @Override public int deleteSvyLibTemplateBySvyid(Long svyid) { return svyLibTemplateMapper.deleteSvyLibTemplateBySvyid(svyid); } private void scriptHandle(Long svyid, SvyLibTemplateScript svyLibScript, Integer isoperation) { if (isoperation == 1) { //新增 svyLibScript.setSvyid(svyid); svyLibScript.setId(null); svyLibScript.setCreateTime(new Date()); svyLibTemplateScriptMapper.insertSvyLibTemplateScript(svyLibScript); } else if (isoperation == 2) { //修改 svyLibScript.setSvyid(svyid); svyLibScript.setUpdateTime(new Date()); svyLibTemplateScriptMapper.updateSvyLibTemplateScript(svyLibScript); } else if (isoperation == 3) { svyLibTemplateScriptMapper.deleteSvyLibTemplateScriptByTopicid(svyLibScript.getId()); } } private void optionHandle(SvyLibTemplateTargetoption svyLibTemplateTargetoption, Long scriptId, Integer isoperation) { if (isoperation == 1) { //新增 svyLibTemplateTargetoption.setScriptid(scriptId); svyLibTemplateTargetoption.setCreateTime(new Date()); svyLibTemplateTargetoptionMapper.insertSvyLibTemplateTargetoption(svyLibTemplateTargetoption); } else if (isoperation == 2) { //修改 svyLibTemplateTargetoption.setScriptid(scriptId); svyLibTemplateTargetoption.setUpdateTime(new Date()); svyLibTemplateTargetoptionMapper.updateSvyLibTemplateTargetoption(svyLibTemplateTargetoption); } else if (isoperation == 3) { //删除 svyLibTemplateTargetoptionMapper.deleteSvyLibTemplateTargetoptionById(svyLibTemplateTargetoption.getId()); } } }