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; @Autowired private TemplateDeptMapper tempDetpRelevanceMapper; /** * 查询模板库 * * @param ID 模板库主键 * @return 模板库 */ @Override public IvrLibaTemplate selectIvrLibaTemplateByID(Long ID) { return ivrLibaTemplateMapper.selectIvrLibaTemplateByID(ID); } /** * 查询模板库列表 * * @param ivrLibaTemplate 模板库 * @return 模板库 */ @Override public List 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()); } } } //对科室进行处理 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 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 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 ivrLibaTemplateTags = ivrLibaTemplateTagMapper.selectIvrLibaTemplateTagList(ivrLibaTemplateTag); //查询话术 IvrLibaTemplateScript ivrLibaTemplateScript = new IvrLibaTemplateScript(); ivrLibaTemplateScript.setTemplateid(ivrLibaTemplates.get(0).getId()); List ivrLibaTemplateScripts = ivrLibaTemplateScriptMapper.selectIvrLibaTemplateScriptList(ivrLibaTemplateScript); List 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 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; } }