package com.smartor.service.impl; 
 | 
  
 | 
import com.alibaba.fastjson2.JSON; 
 | 
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.IvrTaskTemplateMapper; 
 | 
import com.smartor.mapper.IvrTaskTemplateScriptMapper; 
 | 
import com.smartor.mapper.IvrTaskTemplateTargetoptionMapper; 
 | 
import com.smartor.service.IIvrTaskTemplateService; 
 | 
import lombok.extern.slf4j.Slf4j; 
 | 
import org.apache.commons.collections4.CollectionUtils; 
 | 
import org.apache.commons.lang3.ObjectUtils; 
 | 
import org.springframework.beans.factory.annotation.Autowired; 
 | 
import org.springframework.stereotype.Service; 
 | 
  
 | 
import java.util.Collections; 
 | 
import java.util.Comparator; 
 | 
import java.util.Date; 
 | 
import java.util.List; 
 | 
  
 | 
/** 
 | 
 * 随访任务随访模板库Service业务层处理 
 | 
 * 
 | 
 * @author ruoyi 
 | 
 * @date 2024-05-13 
 | 
 */ 
 | 
@Slf4j 
 | 
@Service 
 | 
public class IvrTaskTemplateServiceImpl implements IIvrTaskTemplateService { 
 | 
    @Autowired 
 | 
    private IvrTaskTemplateMapper ivrTaskTemplateMapper; 
 | 
  
 | 
    @Autowired 
 | 
    private IvrTaskTemplateScriptMapper ivrTaskTemplateScriptMapper; 
 | 
  
 | 
    @Autowired 
 | 
    private IvrTaskTemplateTargetoptionMapper ivrTaskTemplateTargetoptionMapper; 
 | 
  
 | 
  
 | 
    /** 
 | 
     * 查询随访任务随访模板库 
 | 
     * 
 | 
     * @param ID 随访任务随访模板库主键 
 | 
     * @return 随访任务随访模板库 
 | 
     */ 
 | 
    @Override 
 | 
    public IvrTaskTemplate selectIvrTaskTemplateByID(Long ID) { 
 | 
        return ivrTaskTemplateMapper.selectIvrTaskTemplateByID(ID); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public IvrTaskTemplateVO selectIvrTaskTemplateInfoByID(Long ID) { 
 | 
        IvrTaskTemplate ivrTaskTemplate = ivrTaskTemplateMapper.selectIvrTaskTemplateByID(ID); 
 | 
        if (ObjectUtils.isEmpty(ivrTaskTemplate)) throw new BaseException("该随访模板不存在,请检查后再查询"); 
 | 
        IvrTaskTemplateVO ivrTaskTemplateVO = DtoConversionUtils.sourceToTarget(ivrTaskTemplate, IvrTaskTemplateVO.class); 
 | 
        IvrTaskTemplateScript ivrTaskTemplateScript = new IvrTaskTemplateScript(); 
 | 
        ivrTaskTemplateScript.setTemplateID(ivrTaskTemplate.getId()); 
 | 
        List<IvrTaskTemplateScript> ivrTaskTemplateScripts = ivrTaskTemplateScriptMapper.selectIvrTaskTemplateScriptList(ivrTaskTemplateScript); 
 | 
        List<IvrTaskTemplateScriptVO> ivrTaskTemplateScriptVOS = DtoConversionUtils.sourceToTarget(ivrTaskTemplateScripts, IvrTaskTemplateScriptVO.class); 
 | 
        for (IvrTaskTemplateScriptVO ivrTaskTemplateScriptVO : ivrTaskTemplateScriptVOS) { 
 | 
            IvrTaskTemplateTargetoption ivrTaskTemplateTargetoption = new IvrTaskTemplateTargetoption(); 
 | 
            ivrTaskTemplateTargetoption.setScriptid(ivrTaskTemplateScriptVO.getId()); 
 | 
            List<IvrTaskTemplateTargetoption> ivrTaskTemplateTargetoptions = ivrTaskTemplateTargetoptionMapper.selectIvrTaskTemplateTargetoptionList(ivrTaskTemplateTargetoption); 
 | 
            ObjectMapper mapper = new ObjectMapper(); 
 | 
            for (int i = 0; i < ivrTaskTemplateTargetoptions.size(); i++) { 
 | 
                if (!StringUtils.isEmpty(ivrTaskTemplateTargetoptions.get(i).getNodynamiccruxsJson())) { 
 | 
                    try { 
 | 
                        ivrTaskTemplateTargetoptions.get(i).setNodynamiccruxs(mapper.readValue(ivrTaskTemplateTargetoptions.get(i).getNodynamiccruxsJson(), List.class)); 
 | 
                    } catch (JsonProcessingException e) { 
 | 
                        e.printStackTrace(); 
 | 
                    } 
 | 
                } 
 | 
  
 | 
                if (!StringUtils.isEmpty(ivrTaskTemplateTargetoptions.get(i).getDynamiccruxsJson())) { 
 | 
                    try { 
 | 
                        ivrTaskTemplateTargetoptions.get(i).setDynamiccruxs(mapper.readValue(ivrTaskTemplateTargetoptions.get(i).getDynamiccruxsJson(), List.class)); 
 | 
                    } catch (JsonProcessingException e) { 
 | 
                        e.printStackTrace(); 
 | 
                    } 
 | 
                } 
 | 
            } 
 | 
            ivrTaskTemplateScriptVO.setIvrTaskScriptTargetoptionList(ivrTaskTemplateTargetoptions); 
 | 
        } 
 | 
        ivrTaskTemplateVO.setIvrTaskTemplateScriptVOList(ivrTaskTemplateScriptVOS); 
 | 
  
 | 
  
 | 
        return ivrTaskTemplateVO; 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 查询随访任务随访模板库列表 
 | 
     * 
 | 
     * @param ivrTaskTemplate 随访任务随访模板库 
 | 
     * @return 随访任务随访模板库 
 | 
     */ 
 | 
    @Override 
 | 
    public List<IvrTaskTemplate> selectIvrTaskTemplateList(IvrTaskTemplate ivrTaskTemplate) { 
 | 
        return ivrTaskTemplateMapper.selectIvrTaskTemplateList(ivrTaskTemplate); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 新增随访任务随访模板库 
 | 
     * 
 | 
     * @param ivrTaskTemplate 随访任务随访模板库 
 | 
     * @return 结果 
 | 
     */ 
 | 
    @Override 
 | 
    public int insertIvrTaskTemplate(IvrTaskTemplate ivrTaskTemplate) { 
 | 
        ivrTaskTemplate.setCreateTime(DateUtils.getNowDate()); 
 | 
        return ivrTaskTemplateMapper.insertIvrTaskTemplate(ivrTaskTemplate); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public int saveOrUpdateTempScript(IvrTaskTemplateVO ivrTaskTemplateVO) { 
 | 
        Integer i = null; 
 | 
        IvrTaskTemplate ivrTaskTemplate = DtoConversionUtils.sourceToTarget(ivrTaskTemplateVO, IvrTaskTemplate.class); 
 | 
  
 | 
        if (ivrTaskTemplateVO.getIsoperation() != null && ivrTaskTemplateVO.getIsoperation() == 1) { 
 | 
            //传过来的静默时间是秒,需要改成毫秒 
 | 
            if (ivrTaskTemplate.getSilencetime() != null) 
 | 
                ivrTaskTemplate.setSilencetime(ivrTaskTemplate.getSilencetime() * 1000); 
 | 
  
 | 
            //新增 
 | 
            ivrTaskTemplate.setCreateTime(new Date()); 
 | 
            insertIvrTaskTemplate(ivrTaskTemplate); 
 | 
            i = ivrTaskTemplate.getId().intValue(); 
 | 
        } else if (ivrTaskTemplateVO.getIsoperation() != null && ivrTaskTemplateVO.getIsoperation() == 2) { 
 | 
            //修改 
 | 
            ivrTaskTemplate.setUpdateTime(new Date()); 
 | 
            updateIvrTaskTemplate(ivrTaskTemplate); 
 | 
            i = ivrTaskTemplate.getId().intValue(); 
 | 
        } 
 | 
        log.info("新增随访任务随访模板的id为:{}", ivrTaskTemplate.getId()); 
 | 
  
 | 
        //对模板话术和选项进行处理(话术表与指标表进行合并了,) 
 | 
        if (CollectionUtils.isNotEmpty(ivrTaskTemplateVO.getIvrTaskTemplateScriptVOList())) { 
 | 
            log.error("ivrTaskTemplateVO.getIvrTaskTemplateScriptVOList()是否有数据哈:{}", ivrTaskTemplateVO.getIvrTaskTemplateScriptVOList()); 
 | 
            for (IvrTaskTemplateScriptVO ivrTaskTemplateScriptVO : ivrTaskTemplateVO.getIvrTaskTemplateScriptVOList()) { 
 | 
                ivrTaskTemplateScriptVO.setGuid(ivrTaskTemplateVO.getGuid()); 
 | 
                ivrTaskTemplateScriptVO.setOrgid(ivrTaskTemplateVO.getOrgid()); 
 | 
                if (ivrTaskTemplateScriptVO.getIsoperation() != null) { 
 | 
                    IvrTaskTemplateScript ivrTaskTemplateScript = scriptHandle(ivrTaskTemplate, ivrTaskTemplateScriptVO, ivrTaskTemplateScriptVO.getIsoperation()); 
 | 
                    dealOption(ivrTaskTemplateScriptVO.getIvrTaskScriptTargetoptionList(), ivrTaskTemplateScript, ivrTaskTemplate.getId(), ivrTaskTemplateScriptVO.getIsoperation()); 
 | 
                } else { 
 | 
                    IvrTaskTemplateScript ivrTaskTemplateScript = scriptHandle(ivrTaskTemplate, ivrTaskTemplateScriptVO, ivrTaskTemplateVO.getIsoperation()); 
 | 
                    dealOption(ivrTaskTemplateScriptVO.getIvrTaskScriptTargetoptionList(), ivrTaskTemplateScript, ivrTaskTemplate.getId(), ivrTaskTemplateVO.getIsoperation()); 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
        return ivrTaskTemplate.getId().intValue(); 
 | 
    } 
 | 
  
 | 
  
 | 
    /** 
 | 
     * 修改随访任务随访模板库 
 | 
     * 
 | 
     * @param ivrTaskTemplate 随访任务随访模板库 
 | 
     * @return 结果 
 | 
     */ 
 | 
    @Override 
 | 
    public int updateIvrTaskTemplate(IvrTaskTemplate ivrTaskTemplate) { 
 | 
        ivrTaskTemplate.setUpdateTime(DateUtils.getNowDate()); 
 | 
        return ivrTaskTemplateMapper.updateIvrTaskTemplate(ivrTaskTemplate); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 批量删除随访任务随访模板库 
 | 
     * 
 | 
     * @param IDs 需要删除的随访任务随访模板库主键 
 | 
     * @return 结果 
 | 
     */ 
 | 
    @Override 
 | 
    public int deleteIvrTaskTemplateByIDs(Long[] IDs) { 
 | 
        return ivrTaskTemplateMapper.deleteIvrTaskTemplateByIDs(IDs); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 删除随访任务随访模板库信息 
 | 
     * 
 | 
     * @param ID 随访任务随访模板库主键 
 | 
     * @return 结果 
 | 
     */ 
 | 
    @Override 
 | 
    public int deleteIvrTaskTemplateByID(Long ID) { 
 | 
        return ivrTaskTemplateMapper.deleteIvrTaskTemplateByID(ID); 
 | 
    } 
 | 
  
 | 
  
 | 
    /** 
 | 
     * 查询模板详情根据条件 
 | 
     */ 
 | 
    @Override 
 | 
    public IvrTaskTemplateVO selectInfoByCondition(IvrTaskTemplateVO ivrTaskTemplateVO) { 
 | 
        log.info("查询模板详情根据条件的入参为 : {}", ivrTaskTemplateVO); 
 | 
        //先根据条件查询问题表信息 
 | 
        IvrTaskTemplate ivrTaskTemplate = DtoConversionUtils.sourceToTarget(ivrTaskTemplateVO, IvrTaskTemplate.class); 
 | 
        List<IvrTaskTemplate> ivrTaskTemplates = selectIvrTaskTemplateList(ivrTaskTemplate); 
 | 
        if (CollectionUtils.isEmpty(ivrTaskTemplates)) { 
 | 
            log.info("提供的条件,查询模板详情数据为空:{}", ivrTaskTemplates); 
 | 
            throw new BaseException("提供的条件,查询模板详情数据为空"); 
 | 
        } 
 | 
  
 | 
        log.info("ivrLibaTemplates的查询结果为:{},数量为 : {}", ivrTaskTemplates.get(0), ivrTaskTemplates.size()); 
 | 
        //定义IvrLibaTemplateVO 用于返参 
 | 
        IvrTaskTemplateVO templateVO = DtoConversionUtils.sourceToTarget(ivrTaskTemplates.get(0), IvrTaskTemplateVO.class); 
 | 
// 
 | 
//        //获取tag信息 
 | 
//        IvrLibaTemplateTag ivrLibaTemplateTag = new IvrLibaTemplateTag(); 
 | 
//        ivrLibaTemplateTag.setTemplateid(ivrTaskTemplates.get(0).getID()); 
 | 
//        List<IvrLibaTemplateTag> ivrLibaTemplateTags = ivrLibaTemplateTagMapper.selectIvrLibaTemplateTagList(ivrLibaTemplateTag); 
 | 
  
 | 
        //查询话术 
 | 
        IvrTaskTemplateScript ivrTaskTemplateScript = new IvrTaskTemplateScript(); 
 | 
        ivrTaskTemplateScript.setTemplateID(ivrTaskTemplates.get(0).getId()); 
 | 
        List<IvrTaskTemplateScript> ivrTaskTemplateScripts = ivrTaskTemplateScriptMapper.selectIvrTaskTemplateScriptList(ivrTaskTemplateScript); 
 | 
        List<IvrTaskTemplateScriptVO> ivrTaskTemplateScriptVOS = DtoConversionUtils.sourceToTarget(ivrTaskTemplateScripts, IvrTaskTemplateScriptVO.class); 
 | 
  
 | 
        //通过话术ID获取选项 
 | 
        for (IvrTaskTemplateScriptVO ivrTaskTemplateScriptVO : ivrTaskTemplateScriptVOS) { 
 | 
            log.info("ivrLibaTemplateScriptVO的主键id为:{}", ivrTaskTemplateScriptVO.getId()); 
 | 
            IvrTaskTemplateTargetoption ivrTaskTemplateTargetoption = new IvrTaskTemplateTargetoption(); 
 | 
            ivrTaskTemplateTargetoption.setScriptid(ivrTaskTemplateScriptVO.getId()); 
 | 
            List<IvrTaskTemplateTargetoption> ivrTaskTemplateTargetoptions = ivrTaskTemplateTargetoptionMapper.selectIvrTaskTemplateTargetoptionList(ivrTaskTemplateTargetoption); 
 | 
            for (IvrTaskTemplateTargetoption ivrTaskTemplateTargetoption1 : ivrTaskTemplateTargetoptions) { 
 | 
                ObjectMapper mapper = new ObjectMapper(); 
 | 
                if (!StringUtils.isEmpty(ivrTaskTemplateTargetoption1.getDynamiccruxs())) { 
 | 
                    try { 
 | 
                        ivrTaskTemplateTargetoption1.setDynamiccruxs(mapper.readValue(ivrTaskTemplateTargetoption1.getDynamiccruxsJson(), List.class)); 
 | 
                    } catch (JsonProcessingException e) { 
 | 
                        e.printStackTrace(); 
 | 
                    } 
 | 
                } 
 | 
  
 | 
                if (!StringUtils.isEmpty(ivrTaskTemplateTargetoption1.getNodynamiccruxs())) { 
 | 
                    try { 
 | 
                        ivrTaskTemplateTargetoption1.setNodynamiccruxs(mapper.readValue(ivrTaskTemplateTargetoption1.getNodynamiccruxsJson(), List.class)); 
 | 
                    } catch (JsonProcessingException e) { 
 | 
                        e.printStackTrace(); 
 | 
                    } 
 | 
                } 
 | 
  
 | 
            } 
 | 
            ivrTaskTemplateScriptVO.setIvrTaskScriptTargetoptionList(ivrTaskTemplateTargetoptions); 
 | 
        } 
 | 
        Collections.sort(ivrTaskTemplateScriptVOS, Comparator.comparing(IvrTaskTemplateScriptVO::getTargetid)); 
 | 
        //数据组装 
 | 
//        templateVO.setIvrTaskTemplateTagList(ivrLibaTemplateTags); 
 | 
        templateVO.setIvrTaskTemplateScriptVOList(ivrTaskTemplateScriptVOS); 
 | 
        return templateVO; 
 | 
    } 
 | 
  
 | 
    private IvrTaskTemplateScript scriptHandle(IvrTaskTemplate ivrTaskTemplate, IvrTaskTemplateScriptVO ivrTaskTemplateScriptVO, Integer isoperation) { 
 | 
        IvrTaskTemplateScript ivrTaskTemplateScript = DtoConversionUtils.sourceToTarget(ivrTaskTemplateScriptVO, IvrTaskTemplateScript.class); 
 | 
  
 | 
        if (isoperation == 1) { 
 | 
            //新增 
 | 
            ivrTaskTemplateScript.setTemplateID(ivrTaskTemplate.getId()); 
 | 
            ivrTaskTemplateScript.setCreateTime(new Date()); 
 | 
            ivrTaskTemplateScriptMapper.insertIvrTaskTemplateScript(ivrTaskTemplateScript); 
 | 
            ivrTaskTemplateScript.setIsoperation(1); 
 | 
        } else if (isoperation == 2) { 
 | 
            //修改 
 | 
            ivrTaskTemplateScript.setTemplateID(ivrTaskTemplate.getId()); 
 | 
            ivrTaskTemplateScript.setUpdateTime(new Date()); 
 | 
            ivrTaskTemplateScriptMapper.updateIvrTaskTemplateScript(ivrTaskTemplateScript); 
 | 
            ivrTaskTemplateScript.setIsoperation(2); 
 | 
  
 | 
        } else if (isoperation == 3) { 
 | 
            //删除 
 | 
            if (ivrTaskTemplateScriptVO.getId() == null) { 
 | 
                log.info("删除失败,模板话术id为空"); 
 | 
            } else { 
 | 
                ivrTaskTemplateScriptVO.setUpdateTime(new Date()); 
 | 
                ivrTaskTemplateScriptMapper.deleteIvrTaskTemplateScriptByID(ivrTaskTemplateScriptVO.getId()); 
 | 
            } 
 | 
        } 
 | 
        return ivrTaskTemplateScript; 
 | 
    } 
 | 
  
 | 
    private void dealOption(List<IvrTaskTemplateTargetoption> ivrTaskTemplateTargetoptionList, IvrTaskTemplateScript ivrTaskTemplateScript, Long tmpID, Integer isoperation) { 
 | 
        log.info("ivrLibaTemplateScript的值为:{}", ivrTaskTemplateScript); 
 | 
        Integer lsisoperation = isoperation; 
 | 
        //对模板指标选项进行处理 
 | 
        if (CollectionUtils.isNotEmpty(ivrTaskTemplateTargetoptionList)) { 
 | 
            for (IvrTaskTemplateTargetoption ivrTaskTemplateTargetoption : ivrTaskTemplateTargetoptionList) { 
 | 
                if (ivrTaskTemplateTargetoption.getIsoperation() != null) { 
 | 
                    isoperation = ivrTaskTemplateTargetoption.getIsoperation(); 
 | 
                } else { 
 | 
                    isoperation = lsisoperation; 
 | 
                } 
 | 
                ivrTaskTemplateTargetoption.setGuid(ivrTaskTemplateScript.getGuid()); 
 | 
                ivrTaskTemplateTargetoption.setOrgid(ivrTaskTemplateScript.getOrgid()); 
 | 
                if (isoperation == 1) { 
 | 
                    //新增 
 | 
                    ivrTaskTemplateTargetoption.setTemplateID(tmpID); 
 | 
                    ivrTaskTemplateTargetoption.setScriptid(ivrTaskTemplateScript.getId()); 
 | 
                    if (CollectionUtils.isNotEmpty(ivrTaskTemplateTargetoption.getDynamiccruxs())) 
 | 
                        ivrTaskTemplateTargetoption.setDynamiccruxsJson(JSON.toJSONString(ivrTaskTemplateTargetoption.getDynamiccruxs())); 
 | 
                    if (CollectionUtils.isNotEmpty(ivrTaskTemplateTargetoption.getNodynamiccruxs())) 
 | 
                        ivrTaskTemplateTargetoption.setNodynamiccruxsJson(JSON.toJSONString(ivrTaskTemplateTargetoption.getNodynamiccruxs())); 
 | 
                    ivrTaskTemplateTargetoptionMapper.insertIvrTaskTemplateTargetoption(ivrTaskTemplateTargetoption); 
 | 
                } else if (isoperation == 2) { 
 | 
                    //修改 
 | 
                    ivrTaskTemplateTargetoption.setTemplateID(tmpID); 
 | 
                    ivrTaskTemplateTargetoption.setScriptid(ivrTaskTemplateScript.getId()); 
 | 
                    if (CollectionUtils.isNotEmpty(ivrTaskTemplateTargetoption.getDynamiccruxs())) 
 | 
                        ivrTaskTemplateTargetoption.setDynamiccruxsJson(JSON.toJSONString(ivrTaskTemplateTargetoption.getDynamiccruxs())); 
 | 
                    if (CollectionUtils.isNotEmpty(ivrTaskTemplateTargetoption.getNodynamiccruxs())) 
 | 
                        ivrTaskTemplateTargetoption.setNodynamiccruxsJson(JSON.toJSONString(ivrTaskTemplateTargetoption.getNodynamiccruxs())); 
 | 
                    ivrTaskTemplateTargetoptionMapper.updateIvrTaskTemplateTargetoption(ivrTaskTemplateTargetoption); 
 | 
                } else if (isoperation == 3) { 
 | 
                    //删除 
 | 
                    if (ivrTaskTemplateTargetoption.getId() == null) { 
 | 
                        log.info("删除失败,模板指标选项id为空"); 
 | 
                    } else { 
 | 
                        ivrTaskTemplateTargetoptionMapper.deleteIvrTaskTemplateTargetoptionById(ivrTaskTemplateTargetoption.getId()); 
 | 
                    } 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
    } 
 | 
  
 | 
} 
 |