package com.smartor.service.impl; 
 | 
  
 | 
import java.util.*; 
 | 
  
 | 
import com.fasterxml.jackson.core.JsonProcessingException; 
 | 
import com.fasterxml.jackson.databind.ObjectMapper; 
 | 
import com.google.gson.Gson; 
 | 
import com.ruoyi.common.core.redis.RedisCache; 
 | 
import com.ruoyi.common.exception.base.BaseException; 
 | 
import com.ruoyi.common.utils.DateUtils; 
 | 
import com.ruoyi.common.utils.DtoConversionUtils; 
 | 
import com.ruoyi.common.utils.http.HttpUtils; 
 | 
import org.apache.commons.lang3.ObjectUtils; 
 | 
import org.apache.commons.lang3.StringUtils; 
 | 
import com.smartor.domain.*; 
 | 
import com.smartor.mapper.*; 
 | 
import lombok.extern.slf4j.Slf4j; 
 | 
import org.apache.commons.collections4.CollectionUtils; 
 | 
import org.springframework.beans.factory.annotation.Autowired; 
 | 
import org.springframework.scheduling.annotation.Async; 
 | 
import org.springframework.stereotype.Service; 
 | 
import com.smartor.service.IServiceTaskService; 
 | 
import org.springframework.transaction.annotation.Transactional; 
 | 
  
 | 
/** 
 | 
 * 语音任务Service业务层处理 
 | 
 * 
 | 
 * @author smartor 
 | 
 * @date 2023-03-24 
 | 
 */ 
 | 
@Slf4j 
 | 
@Service 
 | 
public class ServiceTaskServiceImpl implements IServiceTaskService { 
 | 
    @Autowired 
 | 
    private ServiceTaskMapper serviceTaskMapper; 
 | 
  
 | 
    @Autowired 
 | 
    private ServiceSubtaskMapper serviceSubtaskMapper; 
 | 
  
 | 
    @Autowired 
 | 
    private ServiceTaskdeptMapper serviceTaskdeptMapper; 
 | 
  
 | 
    @Autowired 
 | 
    private PatArchiveImportMapper patArchiveImportMapper; 
 | 
  
 | 
  
 | 
    @Autowired 
 | 
    private ServiceSubtaskPreachformMapper serviceSubtaskPreachformMapper; 
 | 
  
 | 
    @Autowired 
 | 
    private HeLibraryMapper heLibraryMapper; 
 | 
  
 | 
    @Autowired 
 | 
    private SvyTaskTemplateScriptMapper svyTaskTemplateScriptMapper; 
 | 
    @Autowired 
 | 
    private IvrTaskTemplateScriptMapper ivrTaskTemplateScriptMapper; 
 | 
  
 | 
    @Autowired 
 | 
    private SvyLibTemplateScriptMapper svyLibTemplateScriptMapper; 
 | 
  
 | 
    @Autowired 
 | 
    private PatArchiveMapper patArchiveMapper; 
 | 
  
 | 
    @Autowired 
 | 
    private PatMedInhospMapper patMedInhospMapper; 
 | 
  
 | 
    @Autowired 
 | 
    private PatMedOuthospMapper patMedOuthospMapper; 
 | 
  
 | 
  
 | 
    @Autowired 
 | 
    private SvyLibTemplateTargetoptionMapper svyLibTemplateTargetoptionMapper; 
 | 
    @Autowired 
 | 
    private IvrTaskTemplateTargetoptionMapper ivrTaskTemplateTargetOptionMapper; 
 | 
  
 | 
    @Autowired 
 | 
    private SvyTaskTemplateTargetoptionMapper svyTaskTemplateTargetoptionMapper; 
 | 
  
 | 
    @Autowired 
 | 
    private RedisCache redisCache; 
 | 
  
 | 
    /** 
 | 
     * 查询语音任务 
 | 
     * 
 | 
     * @param taskid 语音任务主键 
 | 
     * @return 语音任务 
 | 
     */ 
 | 
    @Override 
 | 
    public ServiceTask selectServiceTaskByTaskid(Long taskid) { 
 | 
        return serviceTaskMapper.selectServiceTaskByTaskid(taskid); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public List<ServiceTask> selectServiceTaskAndtaskDeptList(ServiceTask serviceTask) { 
 | 
        //如果为0不置空,会影响到我的查询 
 | 
        if (CollectionUtils.isEmpty(serviceTask.getLeaveldeptcodes()) || serviceTask.getLeaveldeptcodes().size() == 0) 
 | 
            serviceTask.setLeaveldeptcodes(new ArrayList<>()); 
 | 
        if (!CollectionUtils.isEmpty(serviceTask.getLeavehospitaldistrictcodes()) && serviceTask.getLeavehospitaldistrictcodes().size() > 0) { 
 | 
            List<String> leaveldeptcodes = serviceTask.getLeaveldeptcodes(); 
 | 
            leaveldeptcodes.addAll(serviceTask.getLeavehospitaldistrictcodes()); 
 | 
            serviceTask.setLeaveldeptcodes(leaveldeptcodes); 
 | 
        } 
 | 
        return serviceTaskMapper.selectServiceTaskAndtaskDeptList(serviceTask); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 查询语音任务列表 
 | 
     * 
 | 
     * @param serviceTask 语音任务 
 | 
     * @return 语音任务 
 | 
     */ 
 | 
    @Override 
 | 
  
 | 
    public List<ServiceTask> selectServiceTaskList(ServiceTask serviceTask) { 
 | 
        //如果为0不置空,会影响到我的查询 
 | 
        if (CollectionUtils.isEmpty(serviceTask.getLeaveldeptcodes()) || serviceTask.getLeaveldeptcodes().size() == 0) 
 | 
            serviceTask.setLeaveldeptcodes(null); 
 | 
        if (CollectionUtils.isEmpty(serviceTask.getLeavehospitaldistrictcodes()) || serviceTask.getLeavehospitaldistrictcodes().size() == 0) 
 | 
            serviceTask.setLeavehospitaldistrictcodes(null); 
 | 
        return serviceTaskMapper.selectServiceTaskList(serviceTask); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 新增语音任务 
 | 
     * 
 | 
     * @param serviceTask 语音任务 
 | 
     * @return 结果 
 | 
     */ 
 | 
    @Override 
 | 
    public int insertServiceTask(ServiceTask serviceTask) { 
 | 
        serviceTask.setCreateTime(DateUtils.getNowDate()); 
 | 
        serviceTask.setUpdateTime(DateUtils.getNowDate()); 
 | 
        return serviceTaskMapper.insertServiceTask(serviceTask); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 修改语音任务 
 | 
     * 
 | 
     * @param serviceTask 语音任务 
 | 
     * @return 结果 
 | 
     */ 
 | 
    @Override 
 | 
    public int updateServiceTask(ServiceTask serviceTask) { 
 | 
        serviceTask.setUpdateTime(DateUtils.getNowDate()); 
 | 
        return serviceTaskMapper.updateServiceTask(serviceTask); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 批量删除语音任务 
 | 
     * 
 | 
     * @param taskids 需要删除的语音任务主键 
 | 
     * @return 结果 
 | 
     */ 
 | 
    @Override 
 | 
    public int deleteServiceTaskByTaskids(Long[] taskids) { 
 | 
        return serviceTaskMapper.deleteServiceTaskByTaskids(taskids); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 删除语音任务信息 
 | 
     * 
 | 
     * @param taskid 语音任务主键 
 | 
     * @return 结果 
 | 
     */ 
 | 
    @Transactional(rollbackFor = Exception.class) 
 | 
    @Override 
 | 
    public Boolean deleteServiceTaskByTaskid(Long taskid) { 
 | 
        ServiceSubtask serviceSubtask = new ServiceSubtask(); 
 | 
        serviceSubtask.setTaskid(taskid); 
 | 
  
 | 
        //查询子任务 
 | 
        ServiceSubtaskVO serviceSubtaskVO = DtoConversionUtils.sourceToTarget(serviceSubtask, ServiceSubtaskVO.class); 
 | 
        List<ServiceSubtask> serviceSubtaskList = serviceSubtaskMapper.selectServiceSubtaskList(serviceSubtaskVO); 
 | 
        for (ServiceSubtask ss : serviceSubtaskList) { 
 | 
            log.error("sfSend需要移除的subId为:{}", ss.getId().toString()); 
 | 
            redisCache.removeElementFromList("cache-exist", ss.getId().toString()); 
 | 
            redisCache.removeElementFromList("cache-0", ss.getId().toString()); 
 | 
            redisCache.removeElementFromList("cache-1", ss.getId().toString()); 
 | 
            redisCache.removeElementFromList("cache-2", ss.getId().toString()); 
 | 
            redisCache.removeElementFromList("cache-3", ss.getId().toString()); 
 | 
            redisCache.removeElementFromList("cache-4", ss.getId().toString()); 
 | 
        } 
 | 
  
 | 
        serviceSubtask.setDelFlag("1"); 
 | 
        Boolean aBoolean = serviceSubtaskMapper.updateServiceSubtaskByPatId(serviceSubtask); 
 | 
  
 | 
        //关联表删除 
 | 
        ServiceTaskdept serviceTaskdept = new ServiceTaskdept(); 
 | 
        serviceTaskdept.setTaskId(taskid); 
 | 
        int i = serviceTaskdeptMapper.deleteServiceTaskdeptByTaskId(serviceTaskdept); 
 | 
  
 | 
        Boolean isSuccess = false; 
 | 
        if (!aBoolean || i <= 0) { 
 | 
            new BaseException("任务删除失败"); 
 | 
        } 
 | 
        isSuccess = serviceTaskMapper.deleteServiceTaskByTaskid(taskid); 
 | 
        return isSuccess; 
 | 
    } 
 | 
  
 | 
  
 | 
    /** 
 | 
     * 获取随访及时率 
 | 
     * 
 | 
     * @param serviceSubtask 
 | 
     * @return 
 | 
     */ 
 | 
    public Map<String, Object> selectTimelyRate(ServiceSubtask serviceSubtask) { 
 | 
        if (serviceSubtask.getEndtime() != null && new Date().before(serviceSubtask.getEndtime())) { 
 | 
            serviceSubtask.setEndtime(new Date()); 
 | 
        } 
 | 
        Double dob = serviceSubtaskMapper.selectTimelyRate(serviceSubtask); 
 | 
        // 1. 查询全部数据(SQL不分页) 
 | 
        List<ServiceSubtask> allList = serviceSubtaskMapper.selectTimelyRateDetail(serviceSubtask); 
 | 
        // 2. Java代码分页 
 | 
        int pageNum = serviceSubtask.getPn() != null ? serviceSubtask.getPn() : 1; 
 | 
        int pageSize = serviceSubtask.getPs() != null ? serviceSubtask.getPs() : 10; 
 | 
        int fromIndex = (pageNum - 1) * pageSize; 
 | 
        int toIndex = Math.min(fromIndex + pageSize, allList.size()); 
 | 
        List<ServiceSubtask> pageList = new ArrayList<>(); 
 | 
        if (fromIndex < allList.size()) { 
 | 
            pageList = allList.subList(fromIndex, toIndex); 
 | 
        } 
 | 
        log.info("代码分页参数: pageNum={}, pageSize={}, fromIndex={}, toIndex={}, total={}", pageNum, pageSize, fromIndex, toIndex, allList.size()); 
 | 
        Map<String, Object> map = new HashMap<>(); 
 | 
        map.put("rate", dob); 
 | 
        map.put("detail", pageList); 
 | 
        map.put("total", allList.size()); // 可选:返回总数 
 | 
        return map; 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public Map<String, Object> getScriptInfoByCondition(Long taskid, Long patid, Boolean isFinish, String patfrom) { 
 | 
        Map<String, Object> map = new HashMap<>(); 
 | 
        ServiceSubtaskVO serviceSubtaskVO = new ServiceSubtaskVO(); 
 | 
        serviceSubtaskVO.setPatid(patid); 
 | 
        serviceSubtaskVO.setTaskid(taskid); 
 | 
        serviceSubtaskVO.setSendstate(3L); 
 | 
        List<ServiceSubtask> selectServiceSubtaskList = serviceSubtaskMapper.selectServiceSubtaskList(serviceSubtaskVO); 
 | 
//        //查询患者是否重覆做题 
 | 
//        if (CollectionUtils.isEmpty(selectServiceSubtaskList)) { 
 | 
//            Long submit = selectServiceSubtaskList.get(0).getSubmit(); 
 | 
//            if (submit == 1L) { 
 | 
//                map.put("submit", "1"); 
 | 
//                return map; 
 | 
//            } 
 | 
//        } 
 | 
        //通过任务ID获取模板ID 
 | 
        ServiceTask serviceTask = selectServiceTaskByTaskid(taskid); 
 | 
        List info = new ArrayList(); 
 | 
        if (serviceTask.getType().equals("1")) { 
 | 
            //随访 
 | 
            log.error("文本随访问题"); 
 | 
            info = sfInfo(serviceTask, patid, patfrom); 
 | 
        } else if (serviceTask.getType().equals("2")) { 
 | 
            //问卷 
 | 
            log.error("文本问卷问题"); 
 | 
            info = wjInfo(serviceTask, patid, isFinish, patfrom); 
 | 
        } else { 
 | 
            //宣教 
 | 
            info = xjInfo(Long.valueOf(serviceTask.getLibtemplateid()), taskid, patid, isFinish); 
 | 
            //只要打开了页面,就算成功 
 | 
            if (isFinish) { 
 | 
                ServiceSubtask ss = new ServiceSubtask(); 
 | 
                ss.setTaskid(taskid); 
 | 
                ss.setPatid(patid); 
 | 
                Integer integer = serviceSubtaskMapper.selectSendstateByCondition(ss); 
 | 
                if (integer != null && integer != 6) { 
 | 
                    ss.setSendstate(1L); 
 | 
                    serviceSubtaskMapper.updateServiceSubtaskByCondition(ss); 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
  
 | 
        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 (StringUtils.isNotEmpty(serviceTask.getKcb())) map.put("kcb", serviceTask.getKcb()); 
 | 
        map.put("script", info); 
 | 
        if (StringUtils.isNotEmpty(serviceTask.getJsy())) map.put("jsy", serviceTask.getJsy()); 
 | 
        map.put("type", serviceTask.getType()); 
 | 
        map.put("taskName", serviceTask.getTaskName()); 
 | 
        map.put("submit", "0"); 
 | 
        return map; 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public Map<String, Object> getScriptByCondition(Long taskid, String zyserialnum, String mzserialnum, String tsserialnum) { 
 | 
        //通过任务ID获取模板ID 
 | 
        ServiceTask serviceTask = selectServiceTaskByTaskid(taskid); 
 | 
        //通过模板ID获取问题信息 
 | 
        SvyTaskTemplateScript svyTaskTemplateScript = new SvyTaskTemplateScript(); 
 | 
        svyTaskTemplateScript.setTemplateID(Long.valueOf(serviceTask.getTemplateid())); 
 | 
        svyTaskTemplateScript.setDelFlag("0"); 
 | 
        List<SvyTaskTemplateScript> svyTaskTemplateScripts = svyTaskTemplateScriptMapper.selectSvyTaskTemplateScriptList(svyTaskTemplateScript); 
 | 
        if (CollectionUtils.isEmpty(svyTaskTemplateScripts) || svyTaskTemplateScripts.size() == 0) { 
 | 
            log.error("svyTaskTemplateScripts为空了,请尽快联系管理员处理"); 
 | 
            throw new BaseException("svyTaskTemplateScripts为空了,请尽快联系管理员处理"); 
 | 
        } 
 | 
        PatArchive patArchive = null; 
 | 
        if (StringUtils.isNotEmpty(zyserialnum)) { 
 | 
            PatMedInhospVO patMedInhospVO = new PatMedInhospVO(); 
 | 
            patMedInhospVO.setSerialnum(zyserialnum); 
 | 
            List<PatMedInhosp> patMedInhospList = patMedInhospMapper.selectPatMedInhospListByCondition(patMedInhospVO); 
 | 
            if (CollectionUtils.isNotEmpty(patMedInhospList)) { 
 | 
                patArchive = patArchiveMapper.selectPatArchiveByPatid(patMedInhospList.get(0).getPatid()); 
 | 
            } 
 | 
        } else if (StringUtils.isNotEmpty(mzserialnum)) { 
 | 
            PatMedOuthosp patMedOuthosp = new PatMedOuthosp(); 
 | 
            patMedOuthosp.setSerialnum(mzserialnum); 
 | 
            List<PatMedOuthosp> patMedOuthosps = patMedOuthospMapper.selectPatMedOuthospList(patMedOuthosp); 
 | 
            if (CollectionUtils.isNotEmpty(patMedOuthosps)) { 
 | 
                patArchive = patArchiveMapper.selectPatArchiveByPatid(patMedOuthosps.get(0).getPatid()); 
 | 
            } 
 | 
        } else if (StringUtils.isNotEmpty(tsserialnum)) { 
 | 
            PatArchive pa = new PatArchive(); 
 | 
            pa.setPatientno(tsserialnum); 
 | 
            List<PatArchive> patArchives = patArchiveMapper.selectPatArchiveList(pa); 
 | 
            if (CollectionUtils.isNotEmpty(patArchives)) patArchive = patArchives.get(0); 
 | 
        } 
 | 
  
 | 
        //判断一下今天是否已经做过题,做过就不让再做了 
 | 
        ServiceSubtaskVO serviceSubtaskVO = new ServiceSubtaskVO(); 
 | 
        serviceSubtaskVO.setTaskid(taskid); 
 | 
        serviceSubtaskVO.setPatid(patArchive.getId()); 
 | 
        serviceSubtaskVO.setVisitTime(new Date()); 
 | 
        List<ServiceSubtask> serviceSubtaskList = serviceSubtaskMapper.selectServiceSubtaskList(serviceSubtaskVO); 
 | 
        if (CollectionUtils.isNotEmpty(serviceSubtaskList) && serviceSubtaskList.size() > 0) { 
 | 
            Map<String, Object> map = new HashMap<>(); 
 | 
            map.put("result", "今日已经做过满意度调查 ,无需再重复做答!"); 
 | 
            return map; 
 | 
        } 
 | 
  
 | 
        List<SvyTaskTemplateScriptVO> svyTaskTemplateScriptVOS = DtoConversionUtils.sourceToTarget(svyTaskTemplateScripts, SvyTaskTemplateScriptVO.class); 
 | 
        //将模板问题话术里的通配符替换 
 | 
        ObjectMapper objectMapper = new ObjectMapper(); 
 | 
        Map<String, Map<String, String>> serviceTaskMap = null; 
 | 
        try { 
 | 
            serviceTaskMap = objectMapper.readValue(serviceTask.getTextParam(), Map.class); 
 | 
        } catch (JsonProcessingException e) { 
 | 
            e.printStackTrace(); 
 | 
        } 
 | 
        List<Map<String, String>> mapList = new ArrayList<>(); 
 | 
  
 | 
        for (Map<String, String> map : serviceTaskMap.values()) { 
 | 
            mapList.add(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) : "")); 
 | 
                    } 
 | 
                } 
 | 
                //替换患者个人信息数据 
 | 
                log.error("问题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() : "")); 
 | 
                } 
 | 
                //获取问题选项 
 | 
                SvyTaskTemplateTargetoption svyTaskTemplateTargetoption = new SvyTaskTemplateTargetoption(); 
 | 
                svyTaskTemplateTargetoption.setScriptid(svyTaskTemplateScriptVO.getId()); 
 | 
                List<SvyTaskTemplateTargetoption> svyTaskTemplateTargetoptions = svyTaskTemplateTargetoptionMapper.selectSvyTaskTemplateTargetoptionList(svyTaskTemplateTargetoption); 
 | 
                svyTaskTemplateScriptVO.setSvyTaskTemplateTargetoptions(svyTaskTemplateTargetoptions); 
 | 
            } 
 | 
        } 
 | 
        Map<String, Object> map = new HashMap<>(); 
 | 
        map.put("result", null); 
 | 
        map.put("svyLibTemplateScriptVOS", svyTaskTemplateScriptVOS); 
 | 
        return map; 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 随访信息 
 | 
     * 
 | 
     * @param serviceTask 
 | 
     * @param patid 
 | 
     * @return 
 | 
     */ 
 | 
    public List sfInfo(ServiceTask serviceTask, Long patid, String patfrom) { 
 | 
        //通过模板ID获取问题信息 
 | 
        IvrTaskTemplateScript ivrTaskTemplateScript = new IvrTaskTemplateScript(); 
 | 
        ivrTaskTemplateScript.setTemplateID(Long.valueOf(serviceTask.getTemplateid())); 
 | 
        ivrTaskTemplateScript.setDelFlag("0"); 
 | 
        List<IvrTaskTemplateScript> ivrTaskTemplateScripts = ivrTaskTemplateScriptMapper.selectIvrTaskTemplateScriptList(ivrTaskTemplateScript); 
 | 
        if (CollectionUtils.isEmpty(ivrTaskTemplateScripts) || ivrTaskTemplateScripts.size() == 0) { 
 | 
            log.info("ivrLibaTemplateScripts为空了,请尽快联系管理员处理"); 
 | 
            return new ArrayList<>(); 
 | 
        } 
 | 
        List<IvrTaskTemplateScriptVO> ivrTaskTemplateScriptVOS = DtoConversionUtils.sourceToTarget(ivrTaskTemplateScripts, IvrTaskTemplateScriptVO.class); 
 | 
  
 | 
        //获取患者信息 
 | 
        PatArchive patArchive = null; 
 | 
        if (patfrom.equals("0")) patArchive = patArchiveMapper.selectPatArchiveByPatid(patid); 
 | 
        else if (patfrom.equals("1")) { 
 | 
            PatArchiveImport patArchiveImport = patArchiveImportMapper.selectPatArchiveImportById(patid); 
 | 
            patArchive = DtoConversionUtils.sourceToTarget(patArchiveImport, PatArchive.class); 
 | 
        } 
 | 
  
 | 
        //通过患者信息和任务信息中的textParam对问题中的变量进行填充 
 | 
        ObjectMapper objectMapper = new ObjectMapper(); 
 | 
        Map<String, Map<String, String>> serviceTaskMap = null; 
 | 
        try { 
 | 
            serviceTaskMap = objectMapper.readValue(serviceTask.getTextParam(), Map.class); 
 | 
        } catch (JsonProcessingException e) { 
 | 
            e.printStackTrace(); 
 | 
        } 
 | 
        List<Map<String, String>> mapList = new ArrayList<>(); 
 | 
  
 | 
        for (Map<String, String> map : serviceTaskMap.values()) { 
 | 
            mapList.add(map); 
 | 
        } 
 | 
  
 | 
        //将模板问题话术里的通配符替换 
 | 
        for (IvrTaskTemplateScriptVO ivrTaskTemplateScriptVO : ivrTaskTemplateScriptVOS) { 
 | 
            if (StringUtils.isNotEmpty(ivrTaskTemplateScriptVO.getScriptContent())) { 
 | 
                for (Map<String, String> map : mapList) { 
 | 
                    for (String key : map.keySet()) { 
 | 
  
 | 
                        ivrTaskTemplateScriptVO.setScriptContent(ivrTaskTemplateScriptVO.getScriptContent().replace(key, StringUtils.isNotEmpty(map.get(key)) ? map.get(key) : "")); 
 | 
                    } 
 | 
                } 
 | 
                //替换患者个人信息数据 
 | 
                ivrTaskTemplateScriptVO.setScriptContent(ivrTaskTemplateScriptVO.getScriptContent().replace("${name}", StringUtils.isNotEmpty(patArchive.getName()) ? patArchive.getName() : "")); 
 | 
                ivrTaskTemplateScriptVO.setScriptContent(ivrTaskTemplateScriptVO.getScriptContent().replace("${dzz}", StringUtils.isNotEmpty(patArchive.getPlaceOfResidence()) ? patArchive.getPlaceOfResidence() : "")); 
 | 
                ivrTaskTemplateScriptVO.setScriptContent(ivrTaskTemplateScriptVO.getScriptContent().replace("${dhh}", StringUtils.isNotEmpty(patArchive.getTelcode()) ? patArchive.getTelcode() : "")); 
 | 
  
 | 
                //获取问题选项 
 | 
                IvrTaskTemplateTargetoption ivrTaskTemplateTargetoption = new IvrTaskTemplateTargetoption(); 
 | 
                ivrTaskTemplateTargetoption.setScriptid(ivrTaskTemplateScriptVO.getId()); 
 | 
                List<IvrTaskTemplateTargetoption> ivrTaskTemplateTargetoptions = ivrTaskTemplateTargetOptionMapper.selectIvrTaskTemplateTargetoptionList(ivrTaskTemplateTargetoption); 
 | 
                ivrTaskTemplateScriptVO.setIvrTaskScriptTargetoptionList(ivrTaskTemplateTargetoptions); 
 | 
            } 
 | 
        } 
 | 
        Collections.sort(ivrTaskTemplateScriptVOS, Comparator.comparingLong(IvrTaskTemplateScriptVO::getSort)); 
 | 
  
 | 
        return ivrTaskTemplateScriptVOS; 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 问卷信息 
 | 
     * 
 | 
     * @param serviceTask 
 | 
     * @param patid 
 | 
     * @return 
 | 
     */ 
 | 
    private List wjInfo(ServiceTask serviceTask, Long patid, Boolean isFinish, String patfrom) { 
 | 
        //用户点击了外链,就算他领取了 
 | 
        //这样做会有一个问题,如果固定任务,会出现一个任务里,有多个该患者 
 | 
        ServiceSubtaskVO serviceSubtaskVO = new ServiceSubtaskVO(); 
 | 
        serviceSubtaskVO.setTaskid(serviceTask.getTaskid()); 
 | 
        serviceSubtaskVO.setPatid(patid); 
 | 
        List<ServiceSubtask> serviceSubtaskList = serviceSubtaskMapper.selectServiceSubtaskList(serviceSubtaskVO); 
 | 
        if (CollectionUtils.isNotEmpty(serviceSubtaskList) && serviceSubtaskList.size() == 1) { 
 | 
            if (serviceSubtaskList.get(0).getSendstate() == 3 && isFinish == true) { 
 | 
                ServiceSubtask serviceSubtask = new ServiceSubtask(); 
 | 
                serviceSubtask.setSendstate(1L); 
 | 
                serviceSubtask.setPatid(patid); 
 | 
                serviceSubtask.setTaskid(serviceTask.getTaskid()); 
 | 
                serviceSubtaskMapper.updateServiceSubtaskByPatId(serviceSubtask); 
 | 
            } 
 | 
        } 
 | 
        //通过模板ID获取问题信息 
 | 
        SvyTaskTemplateScript svyTaskTemplateScript = new SvyTaskTemplateScript(); 
 | 
        svyTaskTemplateScript.setTemplateID(Long.valueOf(serviceTask.getTemplateid())); 
 | 
        svyTaskTemplateScript.setDelFlag("0"); 
 | 
        List<SvyTaskTemplateScript> svyTaskTemplateScripts = svyTaskTemplateScriptMapper.selectSvyTaskTemplateScriptList(svyTaskTemplateScript); 
 | 
        if (CollectionUtils.isEmpty(svyTaskTemplateScripts) || svyTaskTemplateScripts.size() == 0) { 
 | 
            insertSvyTaskTempScript(null, serviceTask); 
 | 
            svyTaskTemplateScripts = svyTaskTemplateScriptMapper.selectSvyTaskTemplateScriptList(svyTaskTemplateScript); 
 | 
            if (CollectionUtils.isEmpty(svyTaskTemplateScripts)) { 
 | 
                throw new BaseException("请联系管理员,检查问题模板信息!"); 
 | 
            } 
 | 
        } 
 | 
        List<SvyTaskTemplateScriptVO> svyTaskTemplateScriptVOS = DtoConversionUtils.sourceToTarget(svyTaskTemplateScripts, SvyTaskTemplateScriptVO.class); 
 | 
  
 | 
        //获取患者信息 
 | 
        PatArchive patArchive = null; 
 | 
        if (patfrom.equals("0")) patArchive = patArchiveMapper.selectPatArchiveByPatid(patid); 
 | 
        else if (patfrom.equals("1")) { 
 | 
            PatArchiveImport patArchiveImport = patArchiveImportMapper.selectPatArchiveImportById(patid); 
 | 
            patArchive = DtoConversionUtils.sourceToTarget(patArchiveImport, PatArchive.class); 
 | 
        } 
 | 
  
 | 
  
 | 
        //通过患者信息和任务信息中的textParam对问题中的变量进行填充 
 | 
        ObjectMapper objectMapper = new ObjectMapper(); 
 | 
        Map<String, Map<String, String>> ivrTaskMap = null; 
 | 
        try { 
 | 
            ivrTaskMap = objectMapper.readValue(serviceTask.getTextParam(), Map.class); 
 | 
        } catch (JsonProcessingException e) { 
 | 
            e.printStackTrace(); 
 | 
        } 
 | 
        List<Map<String, String>> mapList = new ArrayList<>(); 
 | 
  
 | 
        for (Map<String, String> map : ivrTaskMap.values()) { 
 | 
            mapList.add(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) : "")); 
 | 
                    } 
 | 
                } 
 | 
                //替换患者个人信息数据 
 | 
                log.error("问题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() : "")); 
 | 
                } 
 | 
                //获取问题选项 
 | 
                SvyTaskTemplateTargetoption svyTaskTemplateTargetoption = new SvyTaskTemplateTargetoption(); 
 | 
                svyTaskTemplateTargetoption.setScriptid(svyTaskTemplateScriptVO.getId()); 
 | 
                if (svyTaskTemplateTargetoption.getDynamiccruxs().size() == 0) 
 | 
                    svyTaskTemplateTargetoption.setDynamiccruxs(null); 
 | 
                if (svyTaskTemplateTargetoption.getNodynamiccruxs().size() == 0) 
 | 
                    svyTaskTemplateTargetoption.setNodynamiccruxs(null); 
 | 
                List<SvyTaskTemplateTargetoption> svyTaskTemplateTargetoptions = svyTaskTemplateTargetoptionMapper.selectSvyTaskTemplateTargetoptionList(svyTaskTemplateTargetoption); 
 | 
                if (CollectionUtils.isNotEmpty(svyTaskTemplateTargetoptions)) { 
 | 
                    svyTaskTemplateScriptVO.setSvyTaskTemplateTargetoptions(svyTaskTemplateTargetoptions); 
 | 
                } else { 
 | 
                    //如果选项没有查到,需要去基础模板库将选项查询出来,放到任务模板选项库中 
 | 
                    insertSvyTaskTempScript(svyTaskTemplateScriptVO, serviceTask); 
 | 
  
 | 
                } 
 | 
            } 
 | 
        } 
 | 
        Collections.sort(svyTaskTemplateScriptVOS, Comparator.comparingLong(SvyTaskTemplateScriptVO::getSort)); 
 | 
        return svyTaskTemplateScriptVOS; 
 | 
    } 
 | 
  
 | 
  
 | 
    private void insertSvyTaskTempScript(SvyTaskTemplateScriptVO svyTaskTemplateScriptVO, ServiceTask serviceTask) { 
 | 
        log.info("-------基础模板libtemplateid的值为:{}", serviceTask.getLibtemplateid()); 
 | 
        if (StringUtils.isEmpty(serviceTask.getLibtemplateid())) { 
 | 
            return; 
 | 
        } 
 | 
  
 | 
        SvyLibTemplateScript svyLibTemplateScript = new SvyLibTemplateScript(); 
 | 
        svyLibTemplateScript.setSvyid(Long.valueOf(serviceTask.getLibtemplateid())); 
 | 
        List<SvyLibTemplateScript> svyLibTemplateScripts = svyLibTemplateScriptMapper.selectSvyLibTemplateScriptList(svyLibTemplateScript); 
 | 
        log.info("-------基础模板svyLibTemplateScripts问题值为:{}", svyLibTemplateScripts.size()); 
 | 
        for (SvyLibTemplateScript sll : svyLibTemplateScripts) { 
 | 
            if (ObjectUtils.isNotEmpty(svyTaskTemplateScriptVO)) { 
 | 
                if (sll.getScriptContent().trim().equals(svyTaskTemplateScriptVO.getScriptContent().trim())) { 
 | 
                    SvyLibTemplateTargetoption sltto = new SvyLibTemplateTargetoption(); 
 | 
                    sltto.setScriptid(sll.getId()); 
 | 
                    List<SvyLibTemplateTargetoption> svyLibTemplateTargetoptions = svyLibTemplateTargetoptionMapper.selectSvyLibTemplateTargetoptionList(sltto); 
 | 
  
 | 
                    //将查出来的选项,放到svyTaskTemplateTargetoption中 
 | 
                    List<SvyTaskTemplateTargetoption> svyTaskTemplateTargetoptionList = DtoConversionUtils.sourceToTarget(svyLibTemplateTargetoptions, SvyTaskTemplateTargetoption.class); 
 | 
                    for (int i = 0; i < svyTaskTemplateTargetoptionList.size(); i++) { 
 | 
                        svyTaskTemplateTargetoptionList.get(i).setTemplateID(svyTaskTemplateScriptVO.getTemplateID()); 
 | 
                        svyTaskTemplateTargetoptionList.get(i).setScriptid(svyTaskTemplateScriptVO.getId()); 
 | 
                        svyTaskTemplateTargetoptionMapper.insertSvyTaskTemplateTargetoption(svyTaskTemplateTargetoptionList.get(i)); 
 | 
                        log.info("-------新增完之后的选项ID值为:{}", svyTaskTemplateTargetoptionList.get(i).getId()); 
 | 
                    } 
 | 
                    svyTaskTemplateScriptVO.setSvyTaskTemplateTargetoptions(svyTaskTemplateTargetoptionList); 
 | 
                } 
 | 
            } else { 
 | 
                //新增问题 
 | 
                SvyTaskTemplateScript stts = DtoConversionUtils.sourceToTarget(sll, SvyTaskTemplateScript.class); 
 | 
                stts.setId(null); 
 | 
                stts.setTaskid(serviceTask.getTaskid()); 
 | 
                stts.setTemplateID(serviceTask.getTemplateid()); 
 | 
                svyTaskTemplateScriptMapper.insertSvyTaskTemplateScript(stts); 
 | 
  
 | 
                //新增问题选项 
 | 
                SvyLibTemplateTargetoption sltto = new SvyLibTemplateTargetoption(); 
 | 
                sltto.setScriptid(sll.getId()); 
 | 
                List<SvyLibTemplateTargetoption> svyLibTemplateTargetoptions = svyLibTemplateTargetoptionMapper.selectSvyLibTemplateTargetoptionList(sltto); 
 | 
                List<SvyTaskTemplateTargetoption> svyTaskTemplateTargetoptionList = DtoConversionUtils.sourceToTarget(svyLibTemplateTargetoptions, SvyTaskTemplateTargetoption.class); 
 | 
                for (int i = 0; i < svyTaskTemplateTargetoptionList.size(); i++) { 
 | 
                    svyTaskTemplateTargetoptionList.get(i).setTemplateID(serviceTask.getTemplateid()); 
 | 
                    svyTaskTemplateTargetoptionList.get(i).setScriptid(stts.getId()); 
 | 
                    svyTaskTemplateTargetoptionMapper.insertSvyTaskTemplateTargetoption(svyTaskTemplateTargetoptionList.get(i)); 
 | 
                } 
 | 
  
 | 
            } 
 | 
        } 
 | 
    } 
 | 
  
 | 
    private List xjInfo(Long templateId, Long taskid, Long patid, Boolean isFinish) { 
 | 
        if (isFinish == true) { 
 | 
            ServiceSubtask serviceSubtask = new ServiceSubtask(); 
 | 
            serviceSubtask.setTaskid(taskid); 
 | 
            serviceSubtask.setPatid(patid); 
 | 
            Integer integer = serviceSubtaskMapper.selectSendstateByCondition(serviceSubtask); 
 | 
            if (integer == 3) { 
 | 
                serviceSubtask.setResult("完成"); 
 | 
                serviceSubtask.setFinishtime(new Date()); 
 | 
                serviceSubtask.setSendstate(6L); 
 | 
                serviceSubtaskMapper.updateServiceSubtaskByCondition(serviceSubtask); 
 | 
            } 
 | 
        } 
 | 
        HeLibrary heLibrary = heLibraryMapper.selectHeLibraryById(Long.valueOf(templateId)); 
 | 
        List list = new ArrayList(); 
 | 
        list.add(heLibrary); 
 | 
        return list; 
 | 
  
 | 
    } 
 | 
} 
 |