package com.smartor.service.impl; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.google.gson.Gson; 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.IvrLibaTargetMapper; import com.smartor.mapper.IvrLibaTargetTagMapper; import com.smartor.mapper.IvrLibaTargetoptionMapper; import com.smartor.service.IIvrLibaTargetService; 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 org.springframework.transaction.annotation.Transactional; import java.lang.reflect.Array; import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.stream.Collectors; /** * 指标选项库Service业务层处理 * * @author ruoyi * @date 2023-12-14 */ @Slf4j @Service public class IvrLibaTargetServiceImpl implements IIvrLibaTargetService { @Autowired private IvrLibaTargetMapper ivrLibaTargetMapper; @Autowired private IvrLibaTargetTagMapper ivrLibaTargetTagMapper; @Autowired private IvrLibaTargetoptionMapper ivrLibaTargetoptionMapper; /** * 查询指标选项库 * * @param id 指标选项库主键 * @return 指标选项库 */ @Override public IvrLibaTarget selectIvrLibaTargetByTargetID(Long id) { return ivrLibaTargetMapper.selectIvrLibaTargetByTargetID(id); } /** * 查询指标选项库列表 * * @param ivrLibaTarget 指标选项库 * @return 指标选项库 */ @Override public List selectIvrLibaTargetList(IvrLibaTarget ivrLibaTarget) { return ivrLibaTargetMapper.selectIvrLibaTargetList(ivrLibaTarget); } @Override public List targetInfo(IvrLibaTarget ivrLibaTarget) { List ivrLibaTargets = ivrLibaTargetMapper.selectIvrLibaTargetList(ivrLibaTarget); List ivrLibaTargetVOS = DtoConversionUtils.sourceToTarget(ivrLibaTargets, IvrLibaTargetVO.class); for (IvrLibaTargetVO ivrLibaTarget1 : ivrLibaTargetVOS) { ivrLibaTarget1.setSuitWayList(JSONArray.parseArray(ivrLibaTarget1.getSuitWay(), String.class)); IvrLibaTargetoption ivrLibaTargetoption = new IvrLibaTargetoption(); ivrLibaTargetoption.setTargetid(ivrLibaTarget1.getId()); //获取该指标的选项 List ivrLibaTargetoptions = ivrLibaTargetoptionMapper.selectIvrLibaTargetoptionList(ivrLibaTargetoption); if (CollectionUtils.isNotEmpty(ivrLibaTargetoptions)) { for (IvrLibaTargetoption ivrLibaTargetoption1 : ivrLibaTargetoptions) { ObjectMapper objectMapper = new ObjectMapper(); try { if (StringUtils.isNotEmpty(ivrLibaTargetoption1.getDynamiccruxsJson())) ivrLibaTargetoption1.setDynamiccruxs(objectMapper.readValue(ivrLibaTargetoption1.getDynamiccruxsJson(), List.class)); if (StringUtils.isNotEmpty(ivrLibaTargetoption1.getNodynamiccruxsJson())) ivrLibaTargetoption1.setNodynamiccruxs(objectMapper.readValue(ivrLibaTargetoption1.getNodynamiccruxsJson(), List.class)); } catch (JsonProcessingException e) { e.printStackTrace(); } } ivrLibaTarget1.setTargetoptionList(ivrLibaTargetoptions); } //获取该指标的标签 IvrLibaTargetTag ivrLibaTargetTag = new IvrLibaTargetTag(); ivrLibaTargetTag.setTargetid(ivrLibaTarget1.getId()); List ivrLibaTargetTags = ivrLibaTargetTagMapper.selectIvrLibaTargetTagList(ivrLibaTargetTag); ivrLibaTarget1.setIvrLibaTargetTagList(ivrLibaTargetTags); } //判断入参条件中,tagName是否有值,如果有值,则需要根据给的值进行标签过滤 if (StringUtils.isNotEmpty(ivrLibaTarget.getTagName())) { List ivrLibaTargetVOList = new ArrayList<>(); aa: for (IvrLibaTargetVO ivrLibaTarget1 : ivrLibaTargetVOS) { for (IvrLibaTargetTag ivrLibaTargetTag1 : ivrLibaTarget1.getIvrLibaTargetTagList()) { if (ivrLibaTargetTag1.getTagname().contains(ivrLibaTarget.getTagName().trim())) { ivrLibaTargetVOList.add(ivrLibaTarget1); continue aa; } } } ivrLibaTargetVOS = ivrLibaTargetVOList; } //下面用左外感觉有点问题,where中的option的del会导致左边的查询不全,先不用吧 // ivrLibaTargetMapper.targetInfo(ivrLibaTarget) return ivrLibaTargetVOS; } /** * 新增指标选项库 * * @param ivrLibaTargetVO 指标选项库 * @return 结果 */ @Override @Transactional(rollbackFor = Exception.class) public int insertIvrLibaTarget(IvrLibaTargetVO ivrLibaTargetVO) { //新增指标信息 IvrLibaTarget ivrLibaTarget = DtoConversionUtils.sourceToTarget(ivrLibaTargetVO, IvrLibaTarget.class); ivrLibaTarget.setCreateTime(DateUtils.getNowDate()); ivrLibaTargetMapper.insertIvrLibaTarget(ivrLibaTarget); //新增该指标对应的标签信息 for (IvrLibaTargetTag ivrLibaTargetTag : ivrLibaTargetVO.getIvrLibaTargetTagList()) { ivrLibaTargetTag.setTargetid(ivrLibaTarget.getId()); ivrLibaTargetTag.setGuid(ivrLibaTargetVO.getGuid()); ivrLibaTargetTag.setOrgid(ivrLibaTargetVO.getOrgid()); ivrLibaTargetTagMapper.insertIvrLibaTargetTag(ivrLibaTargetTag); } //新增该指标对应的指标选项信息 for (IvrLibaTargetoption targetoption : ivrLibaTargetVO.getTargetoptionList()) { if (ObjectUtils.isEmpty(targetoption)) continue; log.info("targetoption的数据为:{}", targetoption); targetoption.setTargetid(ivrLibaTarget.getId()); targetoption.setGuid(ivrLibaTargetVO.getGuid()); targetoption.setOrgid(ivrLibaTargetVO.getOrgid()); ivrLibaTargetoptionMapper.insertIvrLibaTargetoption(targetoption); } log.info("指标id为:{}", ivrLibaTarget.getId().intValue()); return ivrLibaTarget.getId().intValue(); } /** * 新增或修改指标选项库 * * @param ivrLibaTargetVO 指标选项库 * @return 结果 */ @Override @Transactional(rollbackFor = Exception.class) public int saveOrupdateIvrLibaTarget(IvrLibaTargetVO ivrLibaTargetVO) { IvrLibaTarget ivrLibaTarget = DtoConversionUtils.sourceToTarget(ivrLibaTargetVO, IvrLibaTarget.class); if (ObjectUtils.isNotEmpty(ivrLibaTargetVO.getSuitWayList())) ivrLibaTarget.setSuitWay(JSON.toJSONString(ivrLibaTargetVO.getSuitWayList())); ivrLibaTarget.setUpdateTime(DateUtils.getNowDate()); if (ivrLibaTargetVO.getIsoperation() != null && ivrLibaTargetVO.getIsoperation() == 1) { //新增 ivrLibaTarget.setCreateTime(new Date()); ivrLibaTarget.setUpdateTime(new Date()); ivrLibaTargetMapper.insertIvrLibaTarget(ivrLibaTarget); } else if (ivrLibaTargetVO.getIsoperation() != null && ivrLibaTargetVO.getIsoperation() == 2) { //修改 ivrLibaTarget.setUpdateTime(new Date()); ivrLibaTargetMapper.updateIvrLibaTarget(ivrLibaTarget); } if (CollectionUtils.isNotEmpty(ivrLibaTargetVO.getIvrLibaTargetTagList())) { for (IvrLibaTargetTag ivrLibaTargetTag : ivrLibaTargetVO.getIvrLibaTargetTagList()) { ivrLibaTargetTag.setGuid(ivrLibaTargetVO.getGuid()); ivrLibaTargetTag.setOrgid(ivrLibaTargetVO.getOrgid()); if (ivrLibaTargetTag.getId() == null) { //新增 ivrLibaTargetTag.setTargetid(ivrLibaTarget.getId()); ivrLibaTargetTagMapper.insertIvrLibaTargetTag(ivrLibaTargetTag); } else if (ivrLibaTargetTag.getId() != null) { //前端页面应该没有修改 ivrLibaTargetTagMapper.updateIvrLibaTargetTag(ivrLibaTargetTag); } } } if (CollectionUtils.isNotEmpty(ivrLibaTargetVO.getTargetoptionList()) && ivrLibaTargetVO.getScriptType().equals("1") || CollectionUtils.isNotEmpty(ivrLibaTargetVO.getTargetoptionList()) && ivrLibaTargetVO.getScriptType().equals("2")) { //选项处理 for (IvrLibaTargetoption ivrLibaTargetoption : ivrLibaTargetVO.getTargetoptionList()) { if (CollectionUtils.isNotEmpty(ivrLibaTargetoption.getNodynamiccruxs())) { ivrLibaTargetoption.setNodynamiccruxsJson(new Gson().toJson(ivrLibaTargetoption.getNodynamiccruxs())); } if (CollectionUtils.isNotEmpty(ivrLibaTargetoption.getDynamiccruxs())) { ivrLibaTargetoption.setDynamiccruxsJson(new Gson().toJson(ivrLibaTargetoption.getDynamiccruxs())); } ivrLibaTargetoption.setGuid(ivrLibaTargetVO.getGuid()); ivrLibaTargetoption.setOrgid(ivrLibaTargetVO.getOrgid()); if (ivrLibaTargetoption.getIsoperation() != null && ivrLibaTargetoption.getIsoperation() == 1) { //新增 ivrLibaTargetoption.setTargetid(ivrLibaTarget.getId()); ivrLibaTargetoptionMapper.insertIvrLibaTargetoption(ivrLibaTargetoption); } else if (ivrLibaTargetoption.getIsoperation() != null && ivrLibaTargetoption.getIsoperation() == 2) { //修改 ivrLibaTargetoptionMapper.updateIvrLibaTargetoption(ivrLibaTargetoption); } else if (ivrLibaTargetoption.getIsoperation() != null && ivrLibaTargetoption.getIsoperation() == 3) { // 删除 ivrLibaTargetoptionMapper.deleteIvrLibaTargetoptionByTargetoptionid(ivrLibaTargetoption.getTargetoptionid()); } } } else if (ivrLibaTargetVO.getScriptType().equals("3") || ivrLibaTargetVO.getScriptType().equals("4")) { //这里先等等 } return ivrLibaTarget.getId().intValue(); } /** * 批量删除指标选项库 * * @return 结果 */ @Override public int deleteIvrLibaTargetByTargetIDs(Long[] ids) { return ivrLibaTargetMapper.deleteIvrLibaTargetByTargetIDs(ids); } /** * 删除指标选项库信息 * * @return 结果 */ @Override public int deleteIvrLibaTargetByTargetID(Long id) { return ivrLibaTargetMapper.deleteIvrLibaTargetByTargetID(id); } /** * 指标测试问题匹配 */ @Override public String targetQuesMate(IvrLibaTargetVO ivrLibaTargetVO) { for (IvrLibaTargetoption ivrLibaTargetoption : ivrLibaTargetVO.getTargetoptionList()) { Matcher matcher = null; if (StringUtils.isNotEmpty(ivrLibaTargetoption.getTargetregex())) { Pattern pattern = Pattern.compile(ivrLibaTargetoption.getTargetregex()); matcher = pattern.matcher(ivrLibaTargetVO.getContent()); } //不包含 Matcher matcher2 = null; if (StringUtils.isNotEmpty(ivrLibaTargetoption.getTargetregex2())) { Pattern pattern2 = Pattern.compile(ivrLibaTargetoption.getTargetregex2()); matcher2 = pattern2.matcher(ivrLibaTargetVO.getContent()); } if (StringUtils.isNotEmpty(ivrLibaTargetoption.getTargetregex2()) && matcher2.matches() && StringUtils.isNotEmpty(ivrLibaTargetoption.getTargetregex()) && matcher.matches() || StringUtils.isEmpty(ivrLibaTargetoption.getTargetregex2()) && StringUtils.isNotEmpty(ivrLibaTargetoption.getTargetregex()) && matcher.matches()) { return ivrLibaTargetoption.getTargetvalue(); } } return null; } }