liusheng
19 小时以前 ab2884ade73fed97d1e7d7daf4b9b5b6dee83fdd
ruoyi-phone/src/main/java/com/ruoyi/phone/service/impl/PhoneServiceImpl.java
@@ -18,9 +18,8 @@
import com.ruoyi.phone.domain.QuestionMessage;
import com.ruoyi.phone.service.IPhoneService;
import com.ruoyi.task.api.TaskSubtaskApi;
import com.ruoyi.task.api.spi.TaskFtpPort;
import com.ruoyi.task.api.spi.TaskPreachformPort;
import com.ruoyi.task.api.spi.TaskSysConfigPort;
import com.ruoyi.common.utils.FtpService;
import com.ruoyi.task.mapper.ServiceSubtaskPreachformMapper;
import com.ruoyi.task.domain.IvrTaskVisitResult;
import com.ruoyi.task.domain.ServiceSubTaskDetailReq;
import com.ruoyi.task.domain.ServiceSubtask;
@@ -60,6 +59,7 @@
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
import com.ruoyi.system.service.ISysConfigService;
/**
 * 电话业务Service实现(原 {@code ruoyi-task} 里 {@code ServiceSubtaskServiceImpl} 的电话部分)。
@@ -110,19 +110,21 @@
     * 该表归 ruoyi-inhospvisit,由 smartor 侧适配实现本端口。
     */
    @Autowired
    private TaskPreachformPort taskPreachformPort;
    private ServiceSubtaskPreachformMapper taskPreachformPort;
    /**
     * 录音文件下载(雨绮通话记录回调里把当天录音从 FTP 拉回本地)
     * <p>2026-11:{@code FtpService} 已从 smartor 下沉到 {@code ruoyi-common},
     * 原来的过渡端口 {@code TaskFtpPort} 随之删除,这里直接注入通用工具。
     */
    @Autowired
    private TaskFtpPort taskFtpPort;
    private FtpService ftpService;
    /**
     * 参数配置读取({@code sys.voice.match.ai.url}:AI 选项匹配服务地址,按机构配置)
     */
    @Autowired
    private TaskSysConfigPort taskSysConfigPort;
    private ISysConfigService sysConfigService;
    /**
     * AI 选项匹配契约(ruoyi-common,实现在 ruoyi-task,即原 {@code matchOptionIndex})
@@ -700,7 +702,7 @@
                //用来标记,是否有匹配上的
                Integer flag = 0;
                //1-AI识别
                String url = taskSysConfigPort.selectConfigValue("sys.voice.match.ai.url", phoneCallReqYQVO.getOrgid());
                String url = sysConfigService.selectConfigByKey("sys.voice.match.ai.url", phoneCallReqYQVO.getOrgid());
                if (ObjectUtils.isNotEmpty(url)) {
                    PhoneCallBackYQVO aiMatchResult = AiMatch(url, phoneCallReqYQVO, phoneCallBackYQVO, ivrTaskTemplateScriptVO, serviceSubtask, ivrTaskTemplate, ivrTaskTemplateScripts, scriptId, flag, phoneCallReqYQVO.getUuid());
@@ -1234,7 +1236,7 @@
    }
    private List<PullTaskVO> getPullTaskList(List<String> subIds, String cacheName) {
        log.error("任务拉取subIds的值是多少:{}", subIds);
        log.info("任务拉取subIds的值是多少:{}", subIds);
        //pullTaskVOList用于数据返回
        List<PullTaskVO> pullTaskVOList = new ArrayList<>();
        //newValue0用于保存没有处理的子 任务
@@ -1259,14 +1261,18 @@
                    taskSubtaskApi.updateSubtask(serviceSubtask);
                    continue;
                }
                log.info("serviceSubtask.getTaskid()有值吗???{}",serviceSubtask.getTaskid());
                ServiceTask serviceTask = taskSubtaskApi.getTask(serviceSubtask.getTaskid());
                log.info("serviceTask有值吗???{}",serviceTask);
                IvrTaskTemplate ivrTaskTemplate = ivrTaskTemplateService.selectIvrTaskTemplateByID(serviceSubtask.getTemplateid());
                log.info("ivrTaskTemplate有值吗???{}",ivrTaskTemplate);
                if (ObjectUtils.isEmpty(ivrTaskTemplate)) continue;
                //通过任务模板中的"第一次问题编号"获取第一个问题;
                IvrTaskTemplateScript ivrTaskTemplateScript = null;
                IvrTaskTemplateScript ivrTaskTemplateScript1 = new IvrTaskTemplateScript();
                ivrTaskTemplateScript1.setTemplateID(ivrTaskTemplate.getId());
                List<IvrTaskTemplateScript> ivrTaskTemplateScripts = iIvrTaskTemplateScriptService.selectIvrTaskTemplateScriptList(ivrTaskTemplateScript1);
                log.info("ivrTaskTemplateScripts有值吗???{}",ivrTaskTemplateScripts.size());
                aa:
                for (IvrTaskTemplateScript ivrTaskTemplateScript2 : ivrTaskTemplateScripts) {
                    if (ivrTaskTemplate.getFirstQuestionNum() == Long.valueOf(ivrTaskTemplateScript2.getSort())) {
@@ -1276,7 +1282,7 @@
                }
                //如果ivrTaskTemplateScript为空,也就没有往下执行的必要了
                if (ObjectUtils.isEmpty(ivrTaskTemplateScript)) {
                    log.error("---------这个ivrTaskTemplate.getId()的问题为空:{}", ivrTaskTemplate.getId());
                    log.info("---------这个ivrTaskTemplate.getId()的问题为空:{}", ivrTaskTemplate.getId());
                    continue;
                }
                //获取通配符匹配过后的问题
@@ -1284,7 +1290,7 @@
                if (StringUtils.isEmpty(scriptContent)) scriptContent = ivrTaskTemplateScript.getScriptContent();
                String scrContent = getObject(serviceSubtask, scriptContent);
                String kcb = serviceTask.getKcb() + "," + scrContent;
                log.info("---------这个kcb是啥:{}", kcb);
                //封装返回数据
                //taskId = 子任务ID + 问题ID +问题序号
                pullTaskVO.setTaskid(subId);
@@ -1295,13 +1301,14 @@
                if (cacheName.equals("cache-0")) pullTaskVO.setDisplayNo("2");
                else pullTaskVO.setDisplayNo("2");
                pullTaskVOList.add(pullTaskVO);
                log.info("---------这个pullTaskVO是啥:{}", pullTaskVO);
                redisCache.setCacheObject(subId.trim() + "-" + serviceSubtask.getPhone().trim(), ivrTaskTemplateScript.getId().toString(), 120, TimeUnit.MINUTES);
            } else {
                newValue0.add(subIds.get(i));
                redisCache.setCacheListRight(cacheName, newValue0);
            }
        }
        log.info("111111111任务拉取pullTaskVOList的值是多少:{}", pullTaskVOList);
        return pullTaskVOList;
    }
@@ -1410,7 +1417,7 @@
            taskSubtaskApi.updateSubtask(serviceSubtask);
            setFailPreachForm(serviceSubtask, StringUtils.isNotEmpty(serviceSubtask.getCurrentPreachform()) ? serviceSubtask.getCurrentPreachform() : "3", "电话拨打已完成", "9");
            //下载文件
            taskFtpPort.downloadFolder("/" + LocalDate.now().toString(), profile + "/upload/vadio/voice/" + LocalDate.now().toString());
            ftpService.downloadFolder("/" + LocalDate.now().toString(), profile + "/upload/vadio/voice/" + LocalDate.now().toString());
            redisCache.deleteObject(phoneCallRecordVO.getTaskid() + "recordAccept-hungup");
        } else {
            //患者拒绝随访
@@ -1647,7 +1654,7 @@
    public PhoneCallBackSHVO processResust(PhoneCallResultYQVO phoneCallResultYQVO) {
        PhoneCallBackSHVO phoneCallBackSHVO = new PhoneCallBackSHVO();
        //通过scriptid,获取所有的结果
        String url = taskSysConfigPort.selectConfigValue("sys.voice.match.ai.url", phoneCallResultYQVO.getOrgid());
        String url = sysConfigService.selectConfigByKey("sys.voice.match.ai.url", phoneCallResultYQVO.getOrgid());
        ServiceSubtask serviceSubtask = taskSubtaskApi.getSubtask(phoneCallResultYQVO.getSubId());
        IvrTaskTemplate ivrTaskTemplate = ivrTaskTemplateService.selectIvrTaskTemplateByID(serviceSubtask.getTemplateid());
        IvrTaskTemplateScriptVO ivrTaskTemplateScriptVO = iIvrTaskTemplateScriptService.getTaskTempScriptInfoByid(Long.valueOf(phoneCallResultYQVO.getScriptId()));