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.mapper.TemplateDeptMapper; import com.smartor.service.IIvrTaskTemplateService; 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.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; @Autowired private TemplateDeptMapper templateDeptMapper; /** * 查询随访任务随访模板库 * * @param ID 随访任务随访模板库主键 * @return 随访任务随访模板库 */ @Override public IvrTaskTemplate selectIvrTaskTemplateByID(Long ID) { return ivrTaskTemplateMapper.selectIvrTaskTemplateByID(ID); } @Override public IvrTaskTemplateVO selectIvrTaskTemplateInfoByID(Long ID) { IvrTaskTemplate ivrTaskTemplate = ivrTaskTemplateMapper.selectIvrTaskTemplateByID(ID); IvrTaskTemplateVO ivrTaskTemplateVO = DtoConversionUtils.sourceToTarget(ivrTaskTemplate, IvrTaskTemplateVO.class); IvrTaskTemplateScript ivrTaskTemplateScript = new IvrTaskTemplateScript(); ivrTaskTemplateScript.setTemplateID(ivrTaskTemplate.getId()); List ivrTaskTemplateScripts = ivrTaskTemplateScriptMapper.selectIvrTaskTemplateScriptList(ivrTaskTemplateScript); List ivrTaskTemplateScriptVOS = DtoConversionUtils.sourceToTarget(ivrTaskTemplateScripts, IvrTaskTemplateScriptVO.class); for (IvrTaskTemplateScriptVO ivrTaskTemplateScriptVO : ivrTaskTemplateScriptVOS) { IvrTaskTemplateTargetoption ivrTaskTemplateTargetoption = new IvrTaskTemplateTargetoption(); ivrTaskTemplateTargetoption.setScriptid(ivrTaskTemplateScriptVO.getId()); List 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 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) { if (IDs[0] != null) { IvrTaskTemplate ivrTaskTemplate = selectIvrTaskTemplateByID(IDs[0]); if (StringUtils.isNotEmpty(ivrTaskTemplate.getLongTemp()) && ivrTaskTemplate.getLongTemp().equals("1")) { //如果这个模板是长期任务,则需要删除模板与部门的关联 TemplateDept templateDept = new TemplateDept(); templateDept.setType(21L); templateDept.setTempid(IDs[0]); templateDeptMapper.deleteTemplateDeptByTemplateId(templateDept); } } 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 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 ivrLibaTemplateTags = ivrLibaTemplateTagMapper.selectIvrLibaTemplateTagList(ivrLibaTemplateTag); //查询话术 IvrTaskTemplateScript ivrTaskTemplateScript = new IvrTaskTemplateScript(); ivrTaskTemplateScript.setTemplateID(ivrTaskTemplates.get(0).getId()); List ivrTaskTemplateScripts = ivrTaskTemplateScriptMapper.selectIvrTaskTemplateScriptList(ivrTaskTemplateScript); List 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 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 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()); } } } } } }