liusheng
2024-11-22 5389773b2d1ae86daec68b00f67c3682dc907e01
smartor/src/main/java/com/smartor/service/impl/IvrLibaTemplateServiceImpl.java
@@ -1,96 +1,344 @@
package com.smartor.service.impl;
import java.util.List;
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 com.smartor.mapper.IvrLibaTemplateMapper;
import com.smartor.domain.IvrLibaTemplate;
import com.smartor.service.IIvrLibaTemplateService;
import java.util.*;
/**
 * 话术模板库Service业务层处理
 *
 * @author smartor
 * @date 2023-03-22
 * 模板库Service业务层处理
 *
 * @author ruoyi
 * @date 2023-12-23
 */
@Slf4j
@Service
public class IvrLibaTemplateServiceImpl implements IIvrLibaTemplateService
{
public class IvrLibaTemplateServiceImpl implements IIvrLibaTemplateService {
    @Autowired
    private IvrLibaTemplateMapper ivrLibaTemplateMapper;
    @Autowired
    private IvrLibaTemplateTagMapper ivrLibaTemplateTagMapper;
    @Autowired
    private IvrLibaTemplateTargetoptionMapper ivrLibaTemplateTargetOptionMapper;
    @Autowired
    private IvrLibaTemplateScriptMapper ivrLibaTemplateScriptMapper;
    @Autowired
    private TemplateDeptMapper tempDetpRelevanceMapper;
    /**
     * 查询话术模板库
     *
     * @param templateID 话术模板库主键
     * @return 话术模板库
     * 查询模板库
     *
     * @param ID 模板库主键
     * @return 模板库
     */
    @Override
    public IvrLibaTemplate selectIvrLibaTemplateByTemplateID(String templateID)
    {
        return ivrLibaTemplateMapper.selectIvrLibaTemplateByTemplateID(templateID);
    public IvrLibaTemplate selectIvrLibaTemplateByID(Long ID) {
        return ivrLibaTemplateMapper.selectIvrLibaTemplateByID(ID);
    }
    /**
     * 查询话术模板库列表
     *
     * @param ivrLibaTemplate 话术模板库
     * @return 话术模板库
     * 查询模板库列表
     *
     * @param ivrLibaTemplate 模板库
     * @return 模板库
     */
    @Override
    public List<IvrLibaTemplate> selectIvrLibaTemplateList(IvrLibaTemplate ivrLibaTemplate)
    {
    public List<IvrLibaTemplate> selectIvrLibaTemplateList(IvrLibaTemplate ivrLibaTemplate) {
        return ivrLibaTemplateMapper.selectIvrLibaTemplateList(ivrLibaTemplate);
    }
    /**
     * 新增话术模板库
     *
     * @param ivrLibaTemplate 话术模板库
     * 新增模板库
     *
     * @param ivrLibaTemplate 模板库
     * @return 结果
     */
    @Override
    public int insertIvrLibaTemplate(IvrLibaTemplate ivrLibaTemplate)
    {
    public int insertIvrLibaTemplate(IvrLibaTemplate ivrLibaTemplate) {
        ivrLibaTemplate.setCreateTime(DateUtils.getNowDate());
        return ivrLibaTemplateMapper.insertIvrLibaTemplate(ivrLibaTemplate);
    }
    /**
     * 修改话术模板库
     *
     * @param ivrLibaTemplate 话术模板库
     * 修改模板库
     *
     * @param ivrLibaTemplate 模板库
     * @return 结果
     */
    @Override
    public int updateIvrLibaTemplate(IvrLibaTemplate ivrLibaTemplate)
    {
    public int updateIvrLibaTemplate(IvrLibaTemplate ivrLibaTemplate) {
        ivrLibaTemplate.setUpdateTime(DateUtils.getNowDate());
        return ivrLibaTemplateMapper.updateIvrLibaTemplate(ivrLibaTemplate);
    }
    /**
     * 批量删除话术模板库
     *
     * @param templateIDs 需要删除的话术模板库主键
     * 批量删除模板库
     *
     * @param IDs 需要删除的模板库主键
     * @return 结果
     */
    @Override
    public int deleteIvrLibaTemplateByTemplateIDs(String[] templateIDs)
    {
        return ivrLibaTemplateMapper.deleteIvrLibaTemplateByTemplateIDs(templateIDs);
    public int deleteIvrLibaTemplateByIDs(Long[] IDs) {
        Integer i = null;
        for (Long id : IDs) {
            i = ivrLibaTemplateMapper.deleteIvrLibaTemplateByID(id);
        }
        return i;
    }
    /**
     * 删除话术模板库信息
     *
     * @param templateID 话术模板库主键
     * 删除模板库信息
     *
     * @param ID 模板库主键
     * @return 结果
     */
    @Override
    public int deleteIvrLibaTemplateByTemplateID(String templateID)
    {
        return ivrLibaTemplateMapper.deleteIvrLibaTemplateByTemplateID(templateID);
    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()) {
                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()) {
                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());
                }
            }
        }
        //对科室进行处理
        for (TemplateDept tempDetpRelevance : ivrLibaTemplateVO.getTempDetpRelevances()) {
            if (tempDetpRelevance.getId() == null) {
                //新增
                tempDetpRelevance.setTempid(ivrLibaTemplate.getId());
                tempDetpRelevance.setType(2L);
                tempDetpRelevance.setCreateTime(new Date());
                tempDetpRelevanceMapper.insertTemplateDept(tempDetpRelevance);
            } else {
                tempDetpRelevance.setUpdateTime(new Date());
                tempDetpRelevanceMapper.updateTemplateDept(tempDetpRelevance);
            }
        }
        return i;
    }
    private IvrLibaTemplateScript scriptHandle(IvrLibaTemplate ivrLibaTemplate, IvrLibaTemplateScriptVO ivrLibaTemplateScriptVO, Integer isoperation) {
        IvrLibaTemplateScript ivrLibaTemplateScript = DtoConversionUtils.sourceToTarget(ivrLibaTemplateScriptVO, IvrLibaTemplateScript.class);
        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;
    }
}