| | |
| | | import com.ruoyi.common.exception.base.BaseException; |
| | | import com.ruoyi.common.utils.*; |
| | | import com.ruoyi.common.core.service.IConfigService; |
| | | import com.ruoyi.common.utils.http.HttpUtils; |
| | | import com.ruoyi.common.utils.spring.SpringUtils; |
| | | import com.ruoyi.system.domain.SysConfig; |
| | | import com.ruoyi.system.mapper.SysConfigMapper; |
| | | import com.ruoyi.system.service.ISysConfigService; |
| | | import com.smartor.common.DeepSeekApi; |
| | | import com.smartor.common.FtpService; |
| | | import com.smartor.common.MtSubmitSmUtil; |
| | |
| | | |
| | | @Value("${ASRCallBackPath}") |
| | | private String ASRCallBackPath; |
| | | |
| | | @Autowired |
| | | private ISysConfigService configService; |
| | | |
| | | @Autowired |
| | | private MtSubmitSmUtil mtSubmitSmUtil; |
| | |
| | | if (ivrTaskTemplateScriptVO.getScriptType().equals("1")) { |
| | | //用来标记,是否有匹配上的 |
| | | Integer flag = 0; |
| | | // //2-AI识别 |
| | | // SysConfig configVoiceMatchType = new SysConfig(); |
| | | // configVoiceMatchType.setOrgid(phoneCallReqYQVO.getOrgid()); |
| | | // configVoiceMatchType.setConfigKey("sys.voice.match.type"); |
| | | // SysConfig matchType = sysConfigMapper.selectConfig(configVoiceMatchType); |
| | | // |
| | | // if (ObjectUtils.isNotEmpty(matchType) && StringUtils.isNotEmpty(matchType.getConfigValue()) |
| | | // && matchType.getConfigValue().equals("2")) { |
| | | //1-AI识别 |
| | | SysConfig configVoiceMatchAi = new SysConfig(); |
| | | configVoiceMatchAi.setOrgid(phoneCallReqYQVO.getOrgid()); |
| | | configVoiceMatchAi.setConfigKey("sys.voice.match.ai"); |
| | | SysConfig matchAi = sysConfigMapper.selectConfig(configVoiceMatchAi); |
| | | |
| | | // if (ObjectUtils.isNotEmpty(matchAi) && StringUtils.isNotEmpty(matchAi.getConfigValue()) |
| | | // && matchAi.getConfigValue().equals("1")) { |
| | | // PhoneCallBackYQVO aiMatchResult = AiMatch(phoneCallReqYQVO, phoneCallBackYQVO, |
| | | // ivrTaskTemplateScriptVO, serviceSubtask, ivrTaskTemplate, |
| | | // ivrTaskTemplateScripts, scriptId, flag); |
| | |
| | | * @param options |
| | | * @return |
| | | */ |
| | | public String matchOptionIndex(String questionText, String voiceText, List<IvrTaskTemplateTargetoption> options) { |
| | | public Integer matchOptionIndex(String questionText, String voiceText, List<IvrTaskTemplateTargetoption> options){ |
| | | JSONObject jsonObject = new JSONObject(); |
| | | jsonObject.put("userQuestion",questionText); |
| | | jsonObject.put("userAnswer",voiceText); |
| | | jsonObject.put("options", options); |
| | | String jsonString = jsonObject.toJSONString(); |
| | | String result = null; |
| | | try { |
| | | result = OkHttpExample.post("http://localhost:8099/matchOptionIndex", jsonString); |
| | | } catch (IOException e) { |
| | | throw new RuntimeException(e); |
| | | |
| | | String url = "http://localhost:8099/matchOptionIndex"; |
| | | // String url = configService.selectConfigByKey("sys.voice.match.ai.url"); |
| | | if(StringUtils.isNotEmpty(url)){ |
| | | try { |
| | | Map<String, String> headers = new HashMap<>(); |
| | | headers.put("Content-Type", "application/json"); |
| | | |
| | | result = HttpUtils.sendPostByHeader(url, jsonString, headers); |
| | | } catch (Exception e) { |
| | | log.error("AI识别失败", e); |
| | | } |
| | | } |
| | | return result; |
| | | if(StringUtils.isNotEmpty(result) && result.matches("^-?\\d+$")){ |
| | | return Integer.parseInt(result); |
| | | }else { |
| | | return -1; |
| | | } |
| | | } |
| | | |
| | | public PhoneCallBackYQVO AiMatch(PhoneCallReqYQVO phoneCallReqYQVO, PhoneCallBackYQVO phoneCallBackYQVO, |
| | | IvrTaskTemplateScriptVO ivrTaskTemplateScriptVO, ServiceSubtask serviceSubtask, IvrTaskTemplate ivrTaskTemplate, |
| | | List<IvrTaskTemplateScript> ivrTaskTemplateScripts, String scriptId, Integer flag){ |
| | | PhoneCallBackYQVO back = null; |
| | | String result = "0"; |
| | | List<IvrTaskTemplateTargetoption> options = ivrTaskTemplateScriptVO.getIvrTaskScriptTargetoptionList(); |
| | | String voiceText = phoneCallReqYQVO.getAsrtext(); |
| | | String questionText = StringUtils.isNotEmpty(ivrTaskTemplateScriptVO.getIvrtext()) ? ivrTaskTemplateScriptVO.getIvrtext() : ivrTaskTemplateScriptVO.getScriptContent(); |
| | | result = matchOptionIndex(questionText, voiceText, options); |
| | | Integer matched = Integer.valueOf(result); |
| | | IvrTaskTemplateTargetoption chosenOption = options.get(matched); |
| | | Integer matched = -1; |
| | | matched = matchOptionIndex(questionText, voiceText, options); |
| | | //说明匹配正确了 |
| | | if(matched != null && matched != 0){ |
| | | if(matched != null && matched >= 0){ |
| | | IvrTaskTemplateTargetoption chosenOption = options.get(matched); |
| | | //这里应该先判断类型,去再修改,设置IsUserOperation是单选题的改法 |
| | | log.info("匹配正确了吗--------------"); |
| | | chosenOption.setIsUserOperation(1); |
| | |
| | | public void TestMatch(){ |
| | | String questionText = "您好,请问您是患者本人还是家属?\n"; |
| | | String voiceText = "我自己"; |
| | | Long scriptid = 31231L; |
| | | String matchedText = ""; |
| | | List<IvrTaskTemplateTargetoption> options = new ArrayList<>(); |
| | | IvrTaskTemplateTargetoption ivrTaskTemplateTargetoption1 = new IvrTaskTemplateTargetoption(); |
| | | ivrTaskTemplateTargetoption1.setTargetvalue("本人"); |
| | |
| | | IvrTaskTemplateTargetoption ivrTaskTemplateTargetoption3 = new IvrTaskTemplateTargetoption(); |
| | | ivrTaskTemplateTargetoption3.setTargetvalue("其他"); |
| | | options.add(ivrTaskTemplateTargetoption3); |
| | | matchOptionIndex(questionText,voiceText,options); |
| | | |
| | | Integer matched = matchOptionIndex(questionText,voiceText,options); |
| | | if(ObjectUtils.isNotEmpty(matched)){ |
| | | if(matched >= 0){ |
| | | matchedText = options.get(matched).getTargetvalue(); |
| | | } |
| | | } |
| | | log.info("ai匹配成功,匹配结果是:" + matchedText); |
| | | } |
| | | } |