package com.smartor.service.impl; 
 | 
  
 | 
import com.alibaba.fastjson2.JSON; 
 | 
import com.fasterxml.jackson.annotation.JsonFormat; 
 | 
import com.fasterxml.jackson.core.JsonProcessingException; 
 | 
import com.fasterxml.jackson.databind.ObjectMapper; 
 | 
import com.ruoyi.common.exception.base.BaseException; 
 | 
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.IIvrLibaTemplateService; 
 | 
import lombok.extern.slf4j.Slf4j; 
 | 
import org.apache.commons.collections4.CollectionUtils; 
 | 
import org.springframework.beans.factory.annotation.Autowired; 
 | 
import org.springframework.stereotype.Service; 
 | 
  
 | 
import java.util.*; 
 | 
  
 | 
/** 
 | 
 * 模板库Service业务层处理 
 | 
 * 
 | 
 * @author ruoyi 
 | 
 * @date 2023-12-23 
 | 
 */ 
 | 
@Slf4j 
 | 
@Service 
 | 
public class IvrLibaTemplateServiceImpl implements IIvrLibaTemplateService { 
 | 
    @Autowired 
 | 
    private IvrLibaTemplateMapper ivrLibaTemplateMapper; 
 | 
  
 | 
    @Autowired 
 | 
    private IvrLibaTemplateTagMapper ivrLibaTemplateTagMapper; 
 | 
  
 | 
    @Autowired 
 | 
    private IvrLibaTemplateTargetoptionMapper ivrLibaTemplateTargetOptionMapper; 
 | 
  
 | 
    @Autowired 
 | 
    private IvrLibaTemplateScriptMapper ivrLibaTemplateScriptMapper; 
 | 
  
 | 
    /** 
 | 
     * 查询模板库 
 | 
     * 
 | 
     * @param ID 模板库主键 
 | 
     * @return 模板库 
 | 
     */ 
 | 
    @Override 
 | 
    public IvrLibaTemplate selectIvrLibaTemplateByID(Long ID) { 
 | 
        return ivrLibaTemplateMapper.selectIvrLibaTemplateByID(ID); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 查询模板库列表 
 | 
     * 
 | 
     * @param ivrLibaTemplate 模板库 
 | 
     * @return 模板库 
 | 
     */ 
 | 
    @Override 
 | 
    public List<IvrLibaTemplate> selectIvrLibaTemplateList(IvrLibaTemplate ivrLibaTemplate) { 
 | 
        return ivrLibaTemplateMapper.selectIvrLibaTemplateList(ivrLibaTemplate); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 新增模板库 
 | 
     * 
 | 
     * @param ivrLibaTemplate 模板库 
 | 
     * @return 结果 
 | 
     */ 
 | 
    @Override 
 | 
    public int insertIvrLibaTemplate(IvrLibaTemplate ivrLibaTemplate) { 
 | 
        ivrLibaTemplate.setCreateTime(DateUtils.getNowDate()); 
 | 
        return ivrLibaTemplateMapper.insertIvrLibaTemplate(ivrLibaTemplate); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 修改模板库 
 | 
     * 
 | 
     * @param ivrLibaTemplate 模板库 
 | 
     * @return 结果 
 | 
     */ 
 | 
    @Override 
 | 
    public int updateIvrLibaTemplate(IvrLibaTemplate ivrLibaTemplate) { 
 | 
        ivrLibaTemplate.setUpdateTime(DateUtils.getNowDate()); 
 | 
        return ivrLibaTemplateMapper.updateIvrLibaTemplate(ivrLibaTemplate); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 批量删除模板库 
 | 
     * 
 | 
     * @param IDs 需要删除的模板库主键 
 | 
     * @return 结果 
 | 
     */ 
 | 
    @Override 
 | 
    public int deleteIvrLibaTemplateByIDs(Long[] IDs) { 
 | 
        Integer i = null; 
 | 
        for (Long id : IDs) { 
 | 
            i = ivrLibaTemplateMapper.deleteIvrLibaTemplateByID(id); 
 | 
        } 
 | 
        return i; 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 删除模板库信息 
 | 
     * 
 | 
     * @param ID 模板库主键 
 | 
     * @return 结果 
 | 
     */ 
 | 
    @Override 
 | 
    public int deleteIvrLibaTemplateByID(Long ID) { 
 | 
        return ivrLibaTemplateMapper.deleteIvrLibaTemplateByID(ID); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 新增或修改问题详情 
 | 
     * 
 | 
     * @param ivrLibaTemplateVO 
 | 
     * @return 
 | 
     */ 
 | 
    @Override 
 | 
    public Integer saveOrUpdateTemplate(IvrLibaTemplateVO ivrLibaTemplateVO) { 
 | 
        Integer i = null; 
 | 
        IvrLibaTemplate ivrLibaTemplate = DtoConversionUtils.sourceToTarget(ivrLibaTemplateVO, IvrLibaTemplate.class); 
 | 
        if (ivrLibaTemplateVO.getIsoperation() != null && ivrLibaTemplateVO.getIsoperation() == 1) { 
 | 
            //新增 
 | 
            ivrLibaTemplate.setCreateTime(new Date()); 
 | 
            ivrLibaTemplateMapper.insertIvrLibaTemplate(ivrLibaTemplate); 
 | 
            i = ivrLibaTemplate.getId().intValue(); 
 | 
        } else if (ivrLibaTemplateVO.getIsoperation() != null && ivrLibaTemplateVO.getIsoperation() == 2) { 
 | 
            //修改 
 | 
            ivrLibaTemplate.setUpdateTime(new Date()); 
 | 
            ivrLibaTemplateMapper.updateIvrLibaTemplate(ivrLibaTemplate); 
 | 
            i = ivrLibaTemplate.getId().intValue(); 
 | 
        } 
 | 
        log.info("新增或修改模板详情的id为:{}", ivrLibaTemplate.getId()); 
 | 
  
 | 
        //对模板标签进行处理 
 | 
        if (CollectionUtils.isNotEmpty(ivrLibaTemplateVO.getIvrLibaTemplateTagList())) { 
 | 
            for (IvrLibaTemplateTag ivrLibaTemplateTag : ivrLibaTemplateVO.getIvrLibaTemplateTagList()) { 
 | 
                ivrLibaTemplateTag.setGuid(ivrLibaTemplateVO.getGuid()); 
 | 
                ivrLibaTemplateTag.setOrgid(ivrLibaTemplateVO.getOrgid()); 
 | 
                if (ivrLibaTemplateTag.getIsoperation() != null && ivrLibaTemplateTag.getIsoperation() == 1) { 
 | 
                    //新增 
 | 
                    ivrLibaTemplateTag.setTemplateid(ivrLibaTemplate.getId()); 
 | 
                    ivrLibaTemplateTag.setCreateTime(new Date()); 
 | 
                    ivrLibaTemplateTagMapper.insertIvrLibaTemplateTag(ivrLibaTemplateTag); 
 | 
                } else if (ivrLibaTemplateTag.getIsoperation() != null && ivrLibaTemplateTag.getIsoperation() == 2) { 
 | 
                    //修改 
 | 
                    ivrLibaTemplateTag.setTemplateid(ivrLibaTemplate.getId()); 
 | 
                    ivrLibaTemplateTag.setUploadTime(new Date()); 
 | 
                    ivrLibaTemplateTagMapper.updateIvrLibaTemplateTag(ivrLibaTemplateTag); 
 | 
                } else if (ivrLibaTemplateTag.getIsoperation() != null && ivrLibaTemplateTag.getIsoperation() == 3) { 
 | 
                    //删除 
 | 
                    if (ivrLibaTemplateTag.getId() == null) { 
 | 
                        log.info("删除失败,模板指标id为空"); 
 | 
                    } else { 
 | 
                        ivrLibaTemplateTag.setUploadTime(new Date()); 
 | 
                        ivrLibaTemplateTagMapper.deleteIvrLibaTemplateTagById(ivrLibaTemplateTag.getId()); 
 | 
                    } 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
  
 | 
        //对模板话术和选项进行处理(话术表与指标表进行合并了,) 
 | 
        if (CollectionUtils.isNotEmpty(ivrLibaTemplateVO.getIvrLibaTemplateScriptVOList())) { 
 | 
            for (IvrLibaTemplateScriptVO ivrLibaTemplateScriptVO : ivrLibaTemplateVO.getIvrLibaTemplateScriptVOList()) { 
 | 
                ivrLibaTemplateScriptVO.setGuid(ivrLibaTemplateVO.getGuid()); 
 | 
                ivrLibaTemplateScriptVO.setOrgid(ivrLibaTemplateVO.getOrgid()); 
 | 
                if (ivrLibaTemplateScriptVO.getIsoperation() != null) { 
 | 
                    IvrLibaTemplateScript ivrLibaTemplateScript = scriptHandle(ivrLibaTemplate, ivrLibaTemplateScriptVO, ivrLibaTemplateScriptVO.getIsoperation()); 
 | 
//                    dealOption(ivrLibaTemplateScriptVO.getIvrLibaScriptTargetoptionList(), ivrLibaTemplateScript, ivrLibaTemplate.getId(), ivrLibaTemplateScriptVO.getIsoperation()); 
 | 
                } else { 
 | 
                    IvrLibaTemplateScript ivrLibaTemplateScript = scriptHandle(ivrLibaTemplate, ivrLibaTemplateScriptVO, ivrLibaTemplateVO.getIsoperation()); 
 | 
//                    dealOption(ivrLibaTemplateScriptVO.getIvrLibaScriptTargetoptionList(), ivrLibaTemplateScript, ivrLibaTemplate.getId(), ivrLibaTemplateVO.getIsoperation()); 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
  
 | 
        return i; 
 | 
    } 
 | 
  
 | 
    private IvrLibaTemplateScript scriptHandle(IvrLibaTemplate ivrLibaTemplate, IvrLibaTemplateScriptVO ivrLibaTemplateScriptVO, Integer isoperation) { 
 | 
        IvrLibaTemplateScript ivrLibaTemplateScript = DtoConversionUtils.sourceToTarget(ivrLibaTemplateScriptVO, IvrLibaTemplateScript.class); 
 | 
        ivrLibaTemplateScript.setScriptno(ivrLibaTemplateScript.getSort()); 
 | 
        if (isoperation == 1) { 
 | 
            //新增 
 | 
            ivrLibaTemplateScript.setTemplateid(ivrLibaTemplate.getId()); 
 | 
            ivrLibaTemplateScript.setCreateTime(new Date()); 
 | 
            ivrLibaTemplateScriptMapper.insertIvrLibaTemplateScript(ivrLibaTemplateScript); 
 | 
            //对选项目进行处理 
 | 
            dealOption(ivrLibaTemplateScriptVO.getIvrLibaScriptTargetoptionList(), ivrLibaTemplateScript, ivrLibaTemplate.getId(), isoperation); 
 | 
  
 | 
        } else if (isoperation == 2) { 
 | 
            //修改 
 | 
            ivrLibaTemplateScript.setTemplateid(ivrLibaTemplate.getId()); 
 | 
            ivrLibaTemplateScript.setUpdateTime(new Date()); 
 | 
            ivrLibaTemplateScriptMapper.updateIvrLibaTemplateScript(ivrLibaTemplateScript); 
 | 
            //对选项目进行处理 
 | 
            dealOption(ivrLibaTemplateScriptVO.getIvrLibaScriptTargetoptionList(), ivrLibaTemplateScript, ivrLibaTemplate.getId(), isoperation); 
 | 
  
 | 
        } else if (isoperation == 3) { 
 | 
            //删除 
 | 
            if (ivrLibaTemplateScriptVO.getId() == null) { 
 | 
                log.info("删除失败,模板话术id为空"); 
 | 
            } else { 
 | 
                ivrLibaTemplateScriptVO.setUpdateTime(new Date()); 
 | 
                ivrLibaTemplateScriptMapper.deleteIvrLibaTemplateScriptByID(ivrLibaTemplateScriptVO.getId()); 
 | 
            } 
 | 
        } 
 | 
        return ivrLibaTemplateScript; 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 选项处理 
 | 
     * 
 | 
     * @param ivrLibaTemplateTargetoptionList 
 | 
     * @param ivrLibaTemplateScript 
 | 
     * @param tmpID 
 | 
     */ 
 | 
    private void dealOption(List<IvrLibaTemplateTargetoption> ivrLibaTemplateTargetoptionList, IvrLibaTemplateScript ivrLibaTemplateScript, Long tmpID, Integer isoperation) { 
 | 
        log.info("ivrLibaTemplateScript的值为:{}", ivrLibaTemplateScript); 
 | 
        //对模板指标选项进行处理 
 | 
        Integer lsIsoperation = isoperation; 
 | 
        if (CollectionUtils.isNotEmpty(ivrLibaTemplateTargetoptionList)) { 
 | 
            for (IvrLibaTemplateTargetoption ivrLibaTemplateTargetoption : ivrLibaTemplateTargetoptionList) { 
 | 
                if (ivrLibaTemplateTargetoption.getIsoperation() != null) { 
 | 
                    isoperation = ivrLibaTemplateTargetoption.getIsoperation(); 
 | 
                } else { 
 | 
                    isoperation = lsIsoperation; 
 | 
                } 
 | 
                if (isoperation == 1) { 
 | 
                    //新增 
 | 
                    ivrLibaTemplateTargetoption.setTemplateID(tmpID); 
 | 
                    ivrLibaTemplateTargetoption.setScriptid(ivrLibaTemplateScript.getId()); 
 | 
                    if (CollectionUtils.isNotEmpty(ivrLibaTemplateTargetoption.getDynamiccruxs())) 
 | 
                        ivrLibaTemplateTargetoption.setDynamiccruxsJson(JSON.toJSONString(ivrLibaTemplateTargetoption.getDynamiccruxs())); 
 | 
                    if (CollectionUtils.isNotEmpty(ivrLibaTemplateTargetoption.getNodynamiccruxs())) 
 | 
                        ivrLibaTemplateTargetoption.setNodynamiccruxsJson(JSON.toJSONString(ivrLibaTemplateTargetoption.getNodynamiccruxs())); 
 | 
                    ivrLibaTemplateTargetOptionMapper.insertIvrLibaTemplateTargetoption(ivrLibaTemplateTargetoption); 
 | 
                } else if (isoperation == 2) { 
 | 
                    //修改 
 | 
                    ivrLibaTemplateTargetoption.setTemplateID(tmpID); 
 | 
                    ivrLibaTemplateTargetoption.setScriptid(ivrLibaTemplateScript.getId()); 
 | 
                    if (CollectionUtils.isNotEmpty(ivrLibaTemplateTargetoption.getDynamiccruxs())) 
 | 
                        ivrLibaTemplateTargetoption.setDynamiccruxsJson(JSON.toJSONString(ivrLibaTemplateTargetoption.getDynamiccruxs())); 
 | 
                    if (CollectionUtils.isNotEmpty(ivrLibaTemplateTargetoption.getNodynamiccruxs())) 
 | 
                        ivrLibaTemplateTargetoption.setNodynamiccruxsJson(JSON.toJSONString(ivrLibaTemplateTargetoption.getNodynamiccruxs())); 
 | 
                    ivrLibaTemplateTargetOptionMapper.updateIvrLibaTemplateTargetoption(ivrLibaTemplateTargetoption); 
 | 
  
 | 
  
 | 
                    if (CollectionUtils.isEmpty(ivrLibaTemplateTargetoption.getDynamiccruxs())) { 
 | 
                        ivrLibaTemplateTargetoption.setDynamiccruxsJson(null); 
 | 
                        ivrLibaTemplateTargetOptionMapper.updateDynamiccruxs(ivrLibaTemplateTargetoption); 
 | 
                    } 
 | 
                    if (CollectionUtils.isEmpty(ivrLibaTemplateTargetoption.getNodynamiccruxs())) { 
 | 
                        ivrLibaTemplateTargetoption.setNodynamiccruxsJson(null); 
 | 
                        ivrLibaTemplateTargetOptionMapper.updateDynamiccruxs(ivrLibaTemplateTargetoption); 
 | 
                    } 
 | 
                } else if (isoperation == 3) { 
 | 
                    //删除 
 | 
                    if (ivrLibaTemplateTargetoption.getId() == null) { 
 | 
                        log.info("删除失败,模板指标选项id为空"); 
 | 
                    } else { 
 | 
                        ivrLibaTemplateTargetOptionMapper.deleteIvrLibaTemplateTargetoptionById(ivrLibaTemplateTargetoption.getId()); 
 | 
                    } 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 查询模板详情根据条件 
 | 
     */ 
 | 
    @Override 
 | 
    public IvrLibaTemplateVO selectInfoByCondition(IvrLibaTemplateVO ivrLibaTemplateVO) { 
 | 
        log.info("查询模板详情根据条件的入参为 : {}", ivrLibaTemplateVO); 
 | 
        //先根据条件查询问题表信息 
 | 
        IvrLibaTemplate ivrLibaTemplate = DtoConversionUtils.sourceToTarget(ivrLibaTemplateVO, IvrLibaTemplate.class); 
 | 
        List<IvrLibaTemplate> ivrLibaTemplates = selectIvrLibaTemplateList(ivrLibaTemplate); 
 | 
        if (CollectionUtils.isEmpty(ivrLibaTemplates)) { 
 | 
            log.info("提供的条件,查询模板详情数据为空:{}", ivrLibaTemplates); 
 | 
            throw new BaseException("提供的条件,查询模板详情数据为空"); 
 | 
        } 
 | 
        //定义IvrLibaTemplateVO 用于返参 
 | 
        IvrLibaTemplateVO templateVO = DtoConversionUtils.sourceToTarget(ivrLibaTemplates.get(0), IvrLibaTemplateVO.class); 
 | 
  
 | 
        //获取tag信息 
 | 
        IvrLibaTemplateTag ivrLibaTemplateTag = new IvrLibaTemplateTag(); 
 | 
        ivrLibaTemplateTag.setTemplateid(ivrLibaTemplates.get(0).getId()); 
 | 
        List<IvrLibaTemplateTag> ivrLibaTemplateTags = ivrLibaTemplateTagMapper.selectIvrLibaTemplateTagList(ivrLibaTemplateTag); 
 | 
  
 | 
        //查询话术 
 | 
        IvrLibaTemplateScript ivrLibaTemplateScript = new IvrLibaTemplateScript(); 
 | 
        ivrLibaTemplateScript.setTemplateid(ivrLibaTemplates.get(0).getId()); 
 | 
        List<IvrLibaTemplateScript> ivrLibaTemplateScripts = ivrLibaTemplateScriptMapper.selectIvrLibaTemplateScriptList(ivrLibaTemplateScript); 
 | 
        List<IvrLibaTemplateScriptVO> ivrLibaTemplateScriptVOS = DtoConversionUtils.sourceToTarget(ivrLibaTemplateScripts, IvrLibaTemplateScriptVO.class); 
 | 
  
 | 
        //通过话术ID获取选项 
 | 
        for (IvrLibaTemplateScriptVO ivrLibaTemplateScriptVO : ivrLibaTemplateScriptVOS) { 
 | 
            log.error("ivrLibaTemplateScriptVO的主键id为:{}", ivrLibaTemplateScriptVO.getId()); 
 | 
            IvrLibaTemplateTargetoption ivrLibaTemplateTargetoption = new IvrLibaTemplateTargetoption(); 
 | 
            ivrLibaTemplateTargetoption.setScriptid(ivrLibaTemplateScriptVO.getId()); 
 | 
            List<IvrLibaTemplateTargetoption> ivrLibaTemplateTargetoptions = ivrLibaTemplateTargetOptionMapper.selectIvrLibaTemplateTargetoptionList(ivrLibaTemplateTargetoption); 
 | 
            for (IvrLibaTemplateTargetoption ivrLibaTemplateTargetoption1 : ivrLibaTemplateTargetoptions) { 
 | 
                ObjectMapper mapper = new ObjectMapper(); 
 | 
                if (!StringUtils.isEmpty(ivrLibaTemplateTargetoption1.getDynamiccruxsJson())) { 
 | 
                    try { 
 | 
                        ivrLibaTemplateTargetoption1.setDynamiccruxs(mapper.readValue(ivrLibaTemplateTargetoption1.getDynamiccruxsJson(), List.class)); 
 | 
                    } catch (JsonProcessingException e) { 
 | 
                        e.printStackTrace(); 
 | 
                    } 
 | 
                } 
 | 
  
 | 
                if (!StringUtils.isEmpty(ivrLibaTemplateTargetoption1.getNodynamiccruxsJson())) { 
 | 
                    try { 
 | 
                        ivrLibaTemplateTargetoption1.setNodynamiccruxs(mapper.readValue(ivrLibaTemplateTargetoption1.getNodynamiccruxsJson(), List.class)); 
 | 
                    } catch (JsonProcessingException e) { 
 | 
                        e.printStackTrace(); 
 | 
                    } 
 | 
                } 
 | 
  
 | 
            } 
 | 
            ivrLibaTemplateScriptVO.setIvrLibaScriptTargetoptionList(ivrLibaTemplateTargetoptions); 
 | 
        } 
 | 
        Collections.sort(ivrLibaTemplateScriptVOS, Comparator.comparing(IvrLibaTemplateScriptVO::getSort)); 
 | 
        //数据组装 
 | 
        templateVO.setIvrLibaTemplateTagList(ivrLibaTemplateTags); 
 | 
        templateVO.setIvrLibaTemplateScriptVOList(ivrLibaTemplateScriptVOS); 
 | 
        return templateVO; 
 | 
    } 
 | 
  
 | 
} 
 |