liusheng
2024-09-18 722fa40345f1fc650eaeae4a721c3ae4106d92a8
smartor/src/main/java/com/smartor/service/impl/SvyLibTemplateServiceImpl.java
@@ -1,21 +1,21 @@
package com.smartor.service.impl;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
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 com.smartor.service.ISvyLibTemplateService;
import org.springframework.transaction.annotation.Transactional;
import java.util.*;
import java.util.stream.Collectors;
/**
 * 问卷Service业务层处理
@@ -29,13 +29,15 @@
    @Autowired
    private SvyLibTemplateMapper svyLibTemplateMapper;
    @Autowired
    private SvyLibTemplateScriptMapper svyLibTemplateScriptMapper;
    @Autowired
    private SvyLibTemplateTargetoptionMapper svyLibTemplateTargetoptionMapper;
    @Autowired
    private TemplateDeptMapper templateDeptMapper;
    @Autowired
    private SvyLibTemplateTagMapper svyLibTemplateTagMapper;
    @Autowired
    private Icd10AssociationMapper icd10AssociationMapper;
    @Autowired
    private SvyLibScriptMapper svyLibScriptMapper;
    @Autowired
    private SvyLibScriptOptionMapper svyLibTopicoptionMapper;
    @Autowired
    private TempDetpRelevanceMapper tempDetpRelevanceMapper;
    /**
     * 查询问卷
@@ -48,6 +50,31 @@
        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());
        List<SvyLibTemplate> svyLibTemplates = svyLibTemplateMapper.selectSvyLibTemplateList(svyLibTemplateReq);
        for (SvyLibTemplate svyLibTemplate1 : svyLibTemplates) {
            SvyLibTemplateScript svyLibTemplateScript = new SvyLibTemplateScript();
            svyLibTemplateScript.setSvyid(svyLibTemplate1.getSvyid());
            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());
                    List<SvyLibTemplateTargetoption> svyLibTemplateTargetoptions = svyLibTemplateTargetoptionMapper.selectSvyLibTemplateTargetoptionList(svyLibTemplateTargetoption);
                    svyLibTemplateScript1.setSvyLibTemplateTargetoptions(svyLibTemplateTargetoptions);
                }
            }
            svyLibTemplate1.setSvyTemplateLibScripts(svyLibTemplateScripts);
        }
        return svyLibTemplates;
    }
    /**
     * 查询问卷列表
     *
@@ -55,149 +82,172 @@
     * @return 问卷
     */
    @Override
    public List<SvyLibTemplate> selectSvyLibTemplateList(SvyLibTemplateReq svyLibTemplateReq) {
    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 < svyLibTemplates.size(); i++) {
            SvyLibScript svyLibTopic = new SvyLibScript();
            svyLibTopic.setSvyid(svyLibTemplates.get(i).getSvyid());
            List<SvyLibScript> svyLibTopics = svyLibScriptMapper.selectSvyLibScriptList(svyLibTopic);
        for (int i = 0; i < svyLibTemplateVOS.size(); i++) {
            SvyLibTemplateScript svyLibTemplateScript = new SvyLibTemplateScript();
            svyLibTemplateScript.setSvyid(svyLibTemplateVOS.get(i).getSvyid());
            List<SvyLibTemplateScript> svyLibTemplateScripts = svyLibTemplateScriptMapper.selectSvyLibTemplateScriptList(svyLibTemplateScript);
            //获取题目选项
            a:
            for (int j = 0; j < svyLibTopics.size(); j++) {
                log.info("问题id为:{}", svyLibTopics.get(j).getSvyscriptId());
                if (StringUtils.isNotEmpty(svyLibTopics.get(j).getScripttype()) && svyLibTopics.get(j).getScripttype().equals("3") || svyLibTopics.get(j).getSvyscriptId() == null) {
            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 {
                    SvyLibScriptOption svyLibTopicoption = new SvyLibScriptOption();
                    svyLibTopicoption.setTopicid(svyLibTopics.get(j).getSvyscriptId());
                    List<SvyLibScriptOption> svyLibTopicoptions = svyLibTopicoptionMapper.selectSvyLibScriptOptionList(svyLibTopicoption);
                    SvyLibTemplateTargetoption svyLibTopicoption = new SvyLibTemplateTargetoption();
                    svyLibTopicoption.setScriptid(svyLibTemplateScripts.get(j).getId());
                    List<SvyLibTemplateTargetoption> svyLibTemplateTargetoptions = svyLibTemplateTargetoptionMapper.selectSvyLibTemplateTargetoptionList(svyLibTopicoption);
                    //将查询出的选项目放到题目中
                    svyLibTopics.get(j).setSvyLibScriptOptions(svyLibTopicoptions);
                    svyLibTemplateScripts.get(j).setSvyLibTemplateTargetoptions(svyLibTemplateTargetoptions);
                }
            }
            //将题目放到问卷列表中
            svyLibTemplates.get(i).setSvyLibTopics(svyLibTopics);
            svyLibTemplateVOS.get(i).setSvyTemplateLibScripts(svyLibTemplateScripts);
            //获取每个问卷对应的科室
            TempDetpRelevance tempDetpRelevance = new TempDetpRelevance();
            tempDetpRelevance.setTempid(svyLibTemplates.get(i).getSvyid());
            List<TempDetpRelevance> tempDetpRelevances = tempDetpRelevanceMapper.selectTempDetpRelevanceList(tempDetpRelevance);
            svyLibTemplates.get(i).setTempDetpRelevances(CollectionUtils.isNotEmpty(tempDetpRelevances) ? tempDetpRelevances : new ArrayList<>());
            TemplateDept templateDept = new TemplateDept();
            templateDept.setTempid(svyLibTemplateVOS.get(i).getSvyid());
            List<TemplateDept> 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<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<SvyLibTemplate> libTemplates = svyLibTemplates.stream().collect(Collectors.groupingBy(SvyLibTemplate::getSvyid, Collectors.mapping(SvyLibTemplate::getIcdname, Collectors.joining(", ")))).entrySet().stream().map(entry -> new SvyLibTemplate(entry.getKey(), entry.getValue())).collect(Collectors.toList());
        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 < svyLibTemplates.size(); j++) {
                if (ObjectUtils.isNotEmpty(libTemplates.get(i).getSvyid()) && libTemplates.get(i).getSvyid() == svyLibTemplates.get(j).getSvyid()) {
            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(svyLibTemplates.get(j), libTemplates.get(i));
                    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 libTemplates;
    }
    /**
     * 新增问卷
     *
     * @param svyLibTemplate 问卷
     * @return 结果
     */
    @Transactional
    @Override
    public int insertSvyLibTemplate(SvyLibTemplate svyLibTemplate) {
        svyLibTemplate.setCreateTime(DateUtils.getNowDate());
        svyLibTemplateMapper.insertSvyLibTemplate(svyLibTemplate);
        //关联问卷疾病
        for (String icdId : svyLibTemplate.getIcdID()) {
            Icd10Association icd10Association = new Icd10Association();
            icd10Association.setIcd10code(icdId);
            icd10Association.setSvyid(svyLibTemplate.getSvyid());
            icd10AssociationMapper.insertIcd10Association(icd10Association);
        }
        //新增问题题目
        for (int i = 0; i < svyLibTemplate.getSvyLibTopics().size(); i++) {
            SvyLibScript svyLibScript = svyLibTemplate.getSvyLibTopics().get(i);
            svyLibScript.setSvyid(svyLibTemplate.getSvyid());
            //题目的选项目,直接用svy_topicoption表,用svyTopicidf去关联
            svyLibScriptMapper.insertSvyLibScript(svyLibScript);
        }
        return 1;
        return svyLibTemplateVOS;
    }
    /**
     * 新增或修改问卷模板信息
     *
     * @param svyLibTemplate
     * @param svyLibTemplateVO
     * @return
     */
    @Transactional(rollbackFor = Exception.class)
    @Override
    public Integer saveOrUpdateTemplate(SvyLibTemplate svyLibTemplate) {
    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());
            i = svyLibTemplateMapper.insertSvyLibTemplate(svyLibTemplate);
            svyLibTemplateMapper.insertSvyLibTemplate(svyLibTemplate);
        } else if (svyLibTemplate.getIsoperation() != null && svyLibTemplate.getIsoperation() == 2) {
            //修改
            svyLibTemplate.setUpdateTime(DateUtils.getNowDate());
            i = svyLibTemplateMapper.updateSvyLibTemplate(svyLibTemplate);
            svyLibTemplateMapper.updateSvyLibTemplate(svyLibTemplate);
        } else if (svyLibTemplate.getIsoperation() != null && svyLibTemplate.getIsoperation() == 3) {
            //删除
            svyLibTemplateMapper.deleteSvyLibTemplateBySvyid(svyLibTemplate.getSvyid());
        }
        i = svyLibTemplate.getSvyid().intValue();
        //处理题目
        if (CollectionUtils.isNotEmpty(svyLibTemplate.getSvyLibTopics())) {
            for (SvyLibScript svyLibTopic : svyLibTemplate.getSvyLibTopics()) {
        if (CollectionUtils.isNotEmpty(svyLibTemplate.getSvyTemplateLibScripts())) {
            for (SvyLibTemplateScript svyLibScript : svyLibTemplate.getSvyTemplateLibScripts()) {
                //对题目进行处理
                if (svyLibTopic.getIsoperation() != null && svyLibTopic.getIsoperation() == 1) {
                    //新增
                    svyLibTopic.setSvyid(svyLibTemplate.getSvyid());
                    //题目的选项目,直接用svy_topicoption表,用svyTopicid去关联
                    svyLibScriptMapper.insertSvyLibScript(svyLibTopic);
                } else if (svyLibTopic.getIsoperation() != null && svyLibTopic.getIsoperation() == 2) {
                    //修改
                    svyLibTopic.setSvyid(svyLibTemplate.getSvyid());
                    svyLibScriptMapper.updateSvyLibScript(svyLibTopic);
                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(svyLibTopic.getSvyLibScriptOptions())) {
                    for (SvyLibScriptOption svyLibTopicoption : svyLibTopic.getSvyLibScriptOptions()) {
                        if (svyLibTopicoption.getIsoperation() != null && svyLibTopicoption.getIsoperation() == 1) {
                            //新增
                            svyLibTopicoption.setTopicid(svyLibTopic.getId());
                            svyLibTopicoptionMapper.insertSvyLibScriptOption(svyLibTopicoption);
                        } else if (svyLibTopicoption.getIsoperation() != null && svyLibTopicoption.getIsoperation() == 2) {
                            //修改
                            svyLibTopicoption.setTopicid(svyLibTopic.getId());
                            svyLibTopicoptionMapper.updateSvyLibScriptOption(svyLibTopicoption);
                if (CollectionUtils.isNotEmpty(svyLibScript.getSvyLibTemplateTargetoptions())) {
                    for (SvyLibTemplateTargetoption svyLibTemplateTargetoption : svyLibScript.getSvyLibTemplateTargetoptions()) {
                        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 (TempDetpRelevance tempDetpRelevance : svyLibTemplate.getTempDetpRelevances()) {
            for (TemplateDept tempDetpRelevance : svyLibTemplate.getTempDetpRelevances()) {
                if (tempDetpRelevance.getId() == null) {
                    //新增
                    tempDetpRelevance.setTempid(svyLibTemplate.getSvyid());
                    tempDetpRelevance.setType(1L);
                    tempDetpRelevanceMapper.insertTempDetpRelevance(tempDetpRelevance);
                    templateDeptMapper.insertTemplateDept(tempDetpRelevance);
                } else {
                    tempDetpRelevanceMapper.updateTempDetpRelevance(tempDetpRelevance);
                    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;
    }
@@ -235,4 +285,39 @@
    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());
        }
    }
}