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 SvyLibTemplateTagMapper svyLibTemplateTagMapper; 
 | 
    @Autowired 
 | 
    private Icd10AssociationMapper icd10AssociationMapper; 
 | 
  
 | 
    /** 
 | 
     * 查询问卷 
 | 
     * 
 | 
     * @param svyid 问卷主键 
 | 
     * @return 问卷 
 | 
     */ 
 | 
    @Override 
 | 
    public SvyLibTemplate selectSvyLibTemplateBySvyid(Long svyid) { 
 | 
        return svyLibTemplateMapper.selectSvyLibTemplateBySvyid(svyid); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public List<SvyLibTemplate> getSviLibTemplate(SvyLibTemplate svyLibTemplate) { 
 | 
        SvyLibTemplateReq svyLibTemplateReq = new SvyLibTemplateReq(); 
 | 
        svyLibTemplateReq.setSvyid(svyLibTemplate.getSvyid()); 
 | 
        svyLibTemplateReq.setCategoryid(svyLibTemplate.getCategoryid()); 
 | 
        svyLibTemplateReq.setDescription(svyLibTemplate.getDescription()); 
 | 
        svyLibTemplateReq.setSvyname(svyLibTemplate.getSvyname()); 
 | 
        svyLibTemplateReq.setOrgid(svyLibTemplate.getOrgid()); 
 | 
        List<SvyLibTemplate> svyLibTemplates = svyLibTemplateMapper.selectSvyLibTemplateList(svyLibTemplateReq); 
 | 
        for (SvyLibTemplate svyLibTemplate1 : svyLibTemplates) { 
 | 
            SvyLibTemplateScript svyLibTemplateScript = new SvyLibTemplateScript(); 
 | 
            svyLibTemplateScript.setSvyid(svyLibTemplate1.getSvyid()); 
 | 
            svyLibTemplateScript.setOrgid(svyLibTemplate1.getOrgid()); 
 | 
            List<SvyLibTemplateScript> 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()); 
 | 
                    svyLibTemplateTargetoption.setOrgid(svyLibTemplateScript1.getOrgid()); 
 | 
                    List<SvyLibTemplateTargetoption> svyLibTemplateTargetoptions = svyLibTemplateTargetoptionMapper.selectSvyLibTemplateTargetoptionList(svyLibTemplateTargetoption); 
 | 
                    svyLibTemplateScript1.setSvyLibTemplateTargetoptions(svyLibTemplateTargetoptions); 
 | 
                } 
 | 
            } 
 | 
            svyLibTemplate1.setSvyTemplateLibScripts(svyLibTemplateScripts); 
 | 
        } 
 | 
  
 | 
        return svyLibTemplates; 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 查询问卷列表 
 | 
     * 
 | 
     * @param svyLibTemplateReq 问卷 
 | 
     * @return 问卷 
 | 
     */ 
 | 
    @Override 
 | 
    public List<SvyLibTemplateVO> selectSvyLibTemplateList(SvyLibTemplateReq svyLibTemplateReq) { 
 | 
        List<SvyLibTemplate> svyLibTemplates = svyLibTemplateMapper.selectSvyLibTemplateList(svyLibTemplateReq); 
 | 
        List<SvyLibTemplateVO> svyLibTemplateVOS = DtoConversionUtils.sourceToTarget(svyLibTemplates, SvyLibTemplateVO.class); 
 | 
        //添加题目 
 | 
        for (int i = 0; i < svyLibTemplateVOS.size(); i++) { 
 | 
            SvyLibTemplateScript svyLibTemplateScript = new SvyLibTemplateScript(); 
 | 
            svyLibTemplateScript.setSvyid(svyLibTemplateVOS.get(i).getSvyid()); 
 | 
            svyLibTemplateScript.setOrgid(svyLibTemplateVOS.get(i).getOrgid()); 
 | 
            List<SvyLibTemplateScript> 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()); 
 | 
                    svyLibTopicoption.setOrgid(svyLibTemplateVOS.get(i).getOrgid()); 
 | 
                    List<SvyLibTemplateTargetoption> svyLibTemplateTargetoptions = svyLibTemplateTargetoptionMapper.selectSvyLibTemplateTargetoptionList(svyLibTopicoption); 
 | 
                    //将查询出的选项目放到题目中 
 | 
                    svyLibTemplateScripts.get(j).setSvyLibTemplateTargetoptions(svyLibTemplateTargetoptions); 
 | 
                } 
 | 
            } 
 | 
            //将题目放到问卷列表中 
 | 
            svyLibTemplateVOS.get(i).setSvyTemplateLibScripts(svyLibTemplateScripts); 
 | 
  
 | 
            //获取标签 
 | 
            SvyLibTemplateTag svyLibTemplateTag = new SvyLibTemplateTag(); 
 | 
            svyLibTemplateTag.setTemplateid(svyLibTemplateVOS.get(i).getSvyid()); 
 | 
            List<SvyLibTemplateTag> 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<SvyLibTemplateVO> 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<SvyLibTemplateScript>() { 
 | 
                    @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.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()); 
 | 
        } 
 | 
    } 
 | 
} 
 |