陈昶聿
2 天以前 933846091c0b8f06158fcab23cfa0b59e8514f9b
smartor/src/main/java/com/smartor/service/impl/ServiceTaskServiceImpl.java
@@ -255,20 +255,6 @@
            }
        }
        if (CollectionUtils.isNotEmpty(selectServiceSubtaskList)) {
            //将当前方式的发送状态改成已领取
            ServiceSubtask serviceSubtask = selectServiceSubtaskList.get(0);
            ServiceSubtaskPreachform serviceSubtaskPreachform = new ServiceSubtaskPreachform();
            serviceSubtaskPreachform.setPreachform(serviceSubtask.getCurrentPreachform());
            serviceSubtaskPreachform.setSubid(serviceSubtask.getId());
            serviceSubtaskPreachform.setTaskid(serviceTask.getTaskid());
            List<ServiceSubtaskPreachform> serviceSubtaskPreachforms = serviceSubtaskPreachformMapper.selectServiceSubtaskPreachformList(serviceSubtaskPreachform);
            if (CollectionUtils.isNotEmpty(serviceSubtaskPreachforms)) {
                ServiceSubtaskPreachform ssp = serviceSubtaskPreachforms.get(0);
                ssp.setSendstate("3");
                serviceSubtaskPreachformMapper.updateServiceSubtaskPreachform(ssp);
            }
        }
        if (serviceTask != null) {
            if (StringUtils.isNotEmpty(serviceTask.getKcb())) map.put("kcb", serviceTask.getKcb());
            map.put("script", info);
@@ -493,7 +479,7 @@
        }
        //通过患者信息和任务信息中的textParam对问题中的变量进行填充
        //通过患者信息和任务信息中的 textParam 对问题中的变量进行填充
        ObjectMapper objectMapper = new ObjectMapper();
        Map<String, Map<String, String>> ivrTaskMap = null;
        try {
@@ -501,28 +487,36 @@
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
        List<Map<String, String>> mapList = new ArrayList<>();
        // 优化 1: 预先合并所有替换规则为一个 Map,避免多次遍历
        Map<String, String> replaceMap = new HashMap<>();
        if (ivrTaskMap != null) {
            for (Map<String, String> map : ivrTaskMap.values()) {
                mapList.add(map);
                replaceMap.putAll(map);
            }
        }
        //将模板问题话术里的通配符替换
        for (SvyTaskTemplateScriptVO svyTaskTemplateScriptVO : svyTaskTemplateScriptVOS) {
            if (StringUtils.isNotEmpty(svyTaskTemplateScriptVO.getScriptContent())) {
                for (Map<String, String> map : mapList) {
                    for (String key : map.keySet()) {
                        svyTaskTemplateScriptVO.setScriptContent(svyTaskTemplateScriptVO.getScriptContent().replace(key, StringUtils.isNotEmpty(map.get(key)) ? map.get(key) : ""));
                    }
                // 优化 2: 使用正则 PatternMatcher 批量替换,提升性能
                String scriptContent = svyTaskTemplateScriptVO.getScriptContent();
                // 批量替换 IVR 任务参数
                for (Map.Entry<String, String> entry : replaceMap.entrySet()) {
                    String value = StringUtils.isNotEmpty(entry.getValue()) ? entry.getValue() : "";
                    scriptContent = scriptContent.replace(entry.getKey(), value);
                }
                //替换患者个人信息数据
                log.info("问题id:{},   问题内容:{}", svyTaskTemplateScriptVO.getId(), svyTaskTemplateScriptVO.getScriptContent());
                if (StringUtils.isNotEmpty(svyTaskTemplateScriptVO.getScriptContent()) && ObjectUtils.isNotEmpty(patArchive)) {
                    svyTaskTemplateScriptVO.setScriptContent(svyTaskTemplateScriptVO.getScriptContent().replace("${name}", StringUtils.isNotEmpty(patArchive.getName()) ? patArchive.getName() : ""));
                    svyTaskTemplateScriptVO.setScriptContent(svyTaskTemplateScriptVO.getScriptContent().replace("${dzz}", StringUtils.isNotEmpty(patArchive.getPlaceOfResidence()) ? patArchive.getPlaceOfResidence() : ""));
                    svyTaskTemplateScriptVO.setScriptContent(svyTaskTemplateScriptVO.getScriptContent().replace("${dhh}", StringUtils.isNotEmpty(patArchive.getTelcode()) ? patArchive.getTelcode() : ""));
                log.info("问题 id:{},   问题内容:{}", svyTaskTemplateScriptVO.getId(), scriptContent);
                if (ObjectUtils.isNotEmpty(patArchive)) {
                    // 优化 3: 减少不必要的非空判断(patArchive 已经判过)
                    scriptContent = scriptContent.replace("${name}", StringUtils.defaultString(patArchive.getName()));
                    scriptContent = scriptContent.replace("${dzz}", StringUtils.defaultString(patArchive.getPlaceOfResidence()));
                    scriptContent = scriptContent.replace("${dhh}", StringUtils.defaultString(patArchive.getTelcode()));
                }
                svyTaskTemplateScriptVO.setScriptContent(scriptContent);
                //获取问题选项
                SvyTaskTemplateTargetoption svyTaskTemplateTargetoption = new SvyTaskTemplateTargetoption();
                svyTaskTemplateTargetoption.setScriptid(svyTaskTemplateScriptVO.getId());