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.SvyTaskTemplateMapper; import com.smartor.mapper.SvyTaskTemplateScriptMapper; import com.smartor.mapper.SvyTaskTemplateTargetoptionMapper; import com.smartor.service.ISvyTaskTemplateService; 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-06-12 */ @Slf4j @Service public class SvyTaskTemplateServiceImpl implements ISvyTaskTemplateService { @Autowired private SvyTaskTemplateMapper svyTaskTemplateMapper; @Autowired private SvyTaskTemplateScriptMapper svyTaskTemplateScriptMapper; @Autowired private SvyTaskTemplateTargetoptionMapper svyTaskTemplateTargetoptionMapper; /** * 查询任务问卷模板 * * @param svyid 任务问卷模板主键 * @return 任务问卷模板 */ @Override public SvyTaskTemplate selectSvyTaskTemplateBySvyid(Long svyid) { return svyTaskTemplateMapper.selectSvyTaskTemplateBySvyid(svyid); } /** * 查询任务问卷模板列表 * * @param svyTaskTemplate 任务问卷模板 * @return 任务问卷模板 */ @Override public List selectSvyTaskTemplateList(SvyTaskTemplate svyTaskTemplate) { return svyTaskTemplateMapper.selectSvyTaskTemplateList(svyTaskTemplate); } /** * 新增任务问卷模板 * * @param svyTaskTemplate 任务问卷模板 * @return 结果 */ @Override public int insertSvyTaskTemplate(SvyTaskTemplate svyTaskTemplate) { svyTaskTemplate.setCreateTime(DateUtils.getNowDate()); return svyTaskTemplateMapper.insertSvyTaskTemplate(svyTaskTemplate); } /** * 修改任务问卷模板 * * @param svyTaskTemplate 任务问卷模板 * @return 结果 */ @Override public int updateSvyTaskTemplate(SvyTaskTemplate svyTaskTemplate) { svyTaskTemplate.setUpdateTime(DateUtils.getNowDate()); return svyTaskTemplateMapper.updateSvyTaskTemplate(svyTaskTemplate); } /** * 批量删除任务问卷模板 * * @param svyids 需要删除的任务问卷模板主键 * @return 结果 */ @Override public int deleteSvyTaskTemplateBySvyids(Long[] svyids) { return svyTaskTemplateMapper.deleteSvyTaskTemplateBySvyids(svyids); } /** * 删除任务问卷模板信息 * * @param svyid 任务问卷模板主键 * @return 结果 */ @Override public int deleteSvyTaskTemplateBySvyid(Long svyid) { return svyTaskTemplateMapper.deleteSvyTaskTemplateBySvyid(svyid); } /** * 新增或修改问题详情 * * @param svyTaskTemplateVO * @return */ @Override public Integer saveOrUpdateTemplate(SvyTaskTemplateVO svyTaskTemplateVO) { Integer i = null; SvyTaskTemplate svyTaskTemplate = DtoConversionUtils.sourceToTarget(svyTaskTemplateVO, SvyTaskTemplate.class); if (svyTaskTemplateVO.getIsoperation() != null && svyTaskTemplateVO.getIsoperation() == 1) { //新增 svyTaskTemplate.setCreateTime(new Date()); svyTaskTemplateMapper.insertSvyTaskTemplate(svyTaskTemplate); i = svyTaskTemplate.getId().intValue(); } else if (svyTaskTemplateVO.getIsoperation() != null && svyTaskTemplateVO.getIsoperation() == 2) { //修改 svyTaskTemplate.setUpdateTime(new Date()); svyTaskTemplateMapper.updateSvyTaskTemplate(svyTaskTemplate); i = svyTaskTemplate.getId().intValue(); } log.info("新增或修改问卷任务模板详情的id为:{}", svyTaskTemplate.getId()); //对模板话术和选项进行处理(话术表与指标表进行合并了,) if (CollectionUtils.isNotEmpty(svyTaskTemplateVO.getSvyTaskTemplateScriptVOS())) { log.error("ivrTaskTemplateVO.getIvrTaskTemplateScriptVOList()是否有数据哈:{}", svyTaskTemplateVO.getSvyTaskTemplateScriptVOS()); for (SvyTaskTemplateScriptVO svyTaskTemplateScriptVO : svyTaskTemplateVO.getSvyTaskTemplateScriptVOS()) { svyTaskTemplateScriptVO.setGuid(svyTaskTemplateVO.getGuid()); svyTaskTemplateScriptVO.setOrgid(svyTaskTemplateVO.getOrgid()); if (svyTaskTemplateScriptVO.getIsoperation() != null) { SvyTaskTemplateScript svyTaskTemplateScript = scriptHandle(svyTaskTemplate, svyTaskTemplateScriptVO, svyTaskTemplateScriptVO.getIsoperation()); dealOption(svyTaskTemplateScriptVO.getSvyTaskTemplateTargetoptions(), svyTaskTemplateScript, svyTaskTemplate.getId(), svyTaskTemplateScriptVO.getIsoperation()); } else { SvyTaskTemplateScript svyTaskTemplateScript = scriptHandle(svyTaskTemplate, svyTaskTemplateScriptVO, svyTaskTemplateVO.getIsoperation()); dealOption(svyTaskTemplateScriptVO.getSvyTaskTemplateTargetoptions(), svyTaskTemplateScript, svyTaskTemplate.getId(), svyTaskTemplateVO.getIsoperation()); } } } return i; } /** * 查询模板详情根据条件 */ @Override public SvyTaskTemplateVO selectInfoByCondition(SvyTaskTemplateVO svyTaskTemplateVO) { log.info("selectInfoByCondition查询模板详情根据条件的入参为 : {}", svyTaskTemplateVO); //先根据条件查询问题表信息 SvyTaskTemplate svyTaskTemplate = DtoConversionUtils.sourceToTarget(svyTaskTemplateVO, SvyTaskTemplate.class); List svyTaskTemplates = selectSvyTaskTemplateList(svyTaskTemplate); if (CollectionUtils.isEmpty(svyTaskTemplates)) { log.info("模板信息提供的条件,查询模板详情数据为空:{}", svyTaskTemplates); throw new BaseException("模板信息提供的条件,查询模板详情数据为空"); } log.info("svyLibaTemplates的查询结果为:{},数量为 : {}", svyTaskTemplates.get(0), svyTaskTemplates.size()); //定义IvrLibaTemplateVO 用于返参 SvyTaskTemplateVO templateVO = DtoConversionUtils.sourceToTarget(svyTaskTemplates.get(0), SvyTaskTemplateVO.class); //查询话术 SvyTaskTemplateScript svyTaskTemplateScript = new SvyTaskTemplateScript(); svyTaskTemplateScript.setTemplateID(svyTaskTemplates.get(0).getId()); List svyTaskTemplateScripts = svyTaskTemplateScriptMapper.selectSvyTaskTemplateScriptList(svyTaskTemplateScript); List svyTaskTemplateScriptVOS = DtoConversionUtils.sourceToTarget(svyTaskTemplateScripts, SvyTaskTemplateScriptVO.class); //通过话术ID获取选项 for (SvyTaskTemplateScriptVO svyTaskTemplateScriptVO : svyTaskTemplateScriptVOS) { log.info("svyLibaTemplateScriptVO的主键id为:{}", svyTaskTemplateScriptVO.getId()); SvyTaskTemplateTargetoption svyTaskTemplateTargetoption = new SvyTaskTemplateTargetoption(); svyTaskTemplateTargetoption.setScriptid(svyTaskTemplateScriptVO.getId()); List svyTaskTemplateTargetoptions = svyTaskTemplateTargetoptionMapper.selectSvyTaskTemplateTargetoptionList(svyTaskTemplateTargetoption); for (SvyTaskTemplateTargetoption svyTaskTemplateTargetoption1 : svyTaskTemplateTargetoptions) { ObjectMapper mapper = new ObjectMapper(); if (!StringUtils.isEmpty(svyTaskTemplateTargetoption1.getDynamiccruxs())) { try { svyTaskTemplateTargetoption1.setDynamiccruxs(mapper.readValue(svyTaskTemplateTargetoption1.getDynamiccruxsJson(), List.class)); } catch (JsonProcessingException e) { e.printStackTrace(); } } if (!StringUtils.isEmpty(svyTaskTemplateTargetoption1.getNodynamiccruxs())) { try { svyTaskTemplateTargetoption1.setNodynamiccruxs(mapper.readValue(svyTaskTemplateTargetoption1.getNodynamiccruxsJson(), List.class)); } catch (JsonProcessingException e) { e.printStackTrace(); } } } svyTaskTemplateScriptVO.setSvyTaskTemplateTargetoptions(svyTaskTemplateTargetoptions); } Collections.sort(svyTaskTemplateScriptVOS, Comparator.comparing(SvyTaskTemplateScriptVO::getTargetid)); //数据组装 templateVO.setSvyTaskTemplateScriptVOS(svyTaskTemplateScriptVOS); return templateVO; } private SvyTaskTemplateScript scriptHandle(SvyTaskTemplate svyTaskTemplate, SvyTaskTemplateScriptVO svyTaskTemplateScriptVO, Integer isoperation) { SvyTaskTemplateScript svyTaskTemplateScript = DtoConversionUtils.sourceToTarget(svyTaskTemplateScriptVO, SvyTaskTemplateScript.class); if (isoperation == 1) { //新增 svyTaskTemplateScript.setTemplateID(svyTaskTemplate.getId()); svyTaskTemplateScript.setCreateTime(new Date()); svyTaskTemplateScriptMapper.insertSvyTaskTemplateScript(svyTaskTemplateScript); svyTaskTemplateScript.setIsoperation(1); } else if (isoperation == 2) { //修改 svyTaskTemplateScript.setTemplateID(svyTaskTemplate.getId()); svyTaskTemplateScript.setUpdateTime(new Date()); svyTaskTemplateScriptMapper.updateSvyTaskTemplateScript(svyTaskTemplateScript); svyTaskTemplateScript.setIsoperation(2); } else if (isoperation == 3) { if (svyTaskTemplateScriptVO.getId() == null) { log.info("删除失败,模板话术id为空"); } else { svyTaskTemplateScriptVO.setUpdateTime(new Date()); svyTaskTemplateScriptMapper.deleteSvyTaskTemplateScriptByID(svyTaskTemplateScriptVO.getId()); } } return svyTaskTemplateScript; } private void dealOption(List svyTaskTemplateTargetoptions, SvyTaskTemplateScript svyTaskTemplateScript, Long tmpID, Integer isoperation) { log.info("svyTaskTemplateScript的值为:{}", svyTaskTemplateScript); Integer lsIsoperation = isoperation; //对模板指标选项进行处理 if (CollectionUtils.isNotEmpty(svyTaskTemplateTargetoptions)) { for (SvyTaskTemplateTargetoption svyTaskTemplateTargetoption : svyTaskTemplateTargetoptions) { // 如果选项本身的operation不为空,就用自己的;不然,就用传过来的 if (svyTaskTemplateTargetoption.getIsoperation() != null) { isoperation = svyTaskTemplateTargetoption.getIsoperation(); } else { isoperation = lsIsoperation; } if (isoperation == 1) { //新增 svyTaskTemplateTargetoption.setTemplateID(tmpID); svyTaskTemplateTargetoption.setScriptid(svyTaskTemplateScript.getId()); if (CollectionUtils.isNotEmpty(svyTaskTemplateTargetoption.getDynamiccruxs())) svyTaskTemplateTargetoption.setDynamiccruxsJson(JSON.toJSONString(svyTaskTemplateTargetoption.getDynamiccruxs())); if (CollectionUtils.isNotEmpty(svyTaskTemplateTargetoption.getNodynamiccruxs())) svyTaskTemplateTargetoption.setNodynamiccruxsJson(JSON.toJSONString(svyTaskTemplateTargetoption.getNodynamiccruxs())); svyTaskTemplateTargetoptionMapper.insertSvyTaskTemplateTargetoption(svyTaskTemplateTargetoption); } else if (isoperation == 2) { //修改 svyTaskTemplateTargetoption.setTemplateID(tmpID); svyTaskTemplateTargetoption.setScriptid(svyTaskTemplateScript.getId()); if (CollectionUtils.isNotEmpty(svyTaskTemplateTargetoption.getDynamiccruxs())) svyTaskTemplateTargetoption.setDynamiccruxsJson(JSON.toJSONString(svyTaskTemplateTargetoption.getDynamiccruxs())); if (CollectionUtils.isNotEmpty(svyTaskTemplateTargetoption.getNodynamiccruxs())) svyTaskTemplateTargetoption.setNodynamiccruxsJson(JSON.toJSONString(svyTaskTemplateTargetoption.getNodynamiccruxs())); svyTaskTemplateTargetoptionMapper.updateSvyTaskTemplateTargetoption(svyTaskTemplateTargetoption); } else if (isoperation == 3) { //删除 if (svyTaskTemplateTargetoption.getId() == null) { log.info("删除失败,模板指标选项id为空"); } else { svyTaskTemplateTargetoptionMapper.deleteSvyTaskTemplateTargetoptionById(svyTaskTemplateTargetoption.getId()); } } } } } }