liusheng
3 天以前 40fc47ece733ddc3113c2413ae27aadbf102a9e2
smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskServiceImpl.java
@@ -1,6 +1,7 @@
package com.smartor.service.impl;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
@@ -9,9 +10,13 @@
import com.ruoyi.common.dx.MessageSend;
import com.ruoyi.common.exception.base.BaseException;
import com.ruoyi.common.utils.*;
import com.ruoyi.common.core.service.IConfigService;
import com.ruoyi.common.utils.spring.SpringUtils;
import com.smartor.common.FtpService;
import com.smartor.config.PhoneUtils;
import com.smartor.domain.DTO.ServiceSubtaskDetailDTO;
import com.smartor.domain.*;
import com.smartor.domain.VO.ServiceSubtaskCotinueCountVO;
import com.smartor.domain.entity.ServiceSubtaskEntity;
import com.smartor.mapper.*;
import com.smartor.service.*;
@@ -95,6 +100,9 @@
    @Autowired
    private IIvrTaskTemplateScriptService iIvrTaskTemplateScriptService;
    @Autowired
    private IIvrTaskTemplateTargetoptionService iIvrTaskTemplateTargetoptionService;
    @Autowired
    private IServiceOutPathService iServiceOutPathService;
@@ -410,18 +418,18 @@
        // 处理空异常
        if (MapUtils.isEmpty(result)) {
            result = new HashMap<>();
            // 确保所有 key 都有值,避免空指针异常
            // MyBatis 的 SUM 在没有匹配行时会返回 null
            result.putIfAbsent("wzx", 0);
            result.putIfAbsent("ysf", 0);
            result.putIfAbsent("yc", 0);
            result.putIfAbsent("jg", 0);
            result.putIfAbsent("fssb", 0);
            result.putIfAbsent("yfs", 0);
            result.putIfAbsent("blq", 0);
            result.putIfAbsent("dsf", 0);
            result.putIfAbsent("total", 0);
        }
        // 确保所有 key 都有值,避免空指针异常
        // MyBatis 的 SUM 在没有匹配行时会返回 null
        result.putIfAbsent("wzx", 0);
        result.putIfAbsent("ysf", 0);
        result.putIfAbsent("yc", 0);
        result.putIfAbsent("jg", 0);
        result.putIfAbsent("fssb", 0);
        result.putIfAbsent("yfs", 0);
        result.putIfAbsent("blq", 0);
        result.putIfAbsent("dsf", 0);
        return result;
    }
@@ -454,18 +462,18 @@
        if (patMedInhospList.size() > 0) {
            serviceSubtask1.setIsVisitAgain(2);
            serviceSubtask1.setRemark(serviceSubtask1.getRemark() + ";患者再入院了");
            serviceSubtask1.setRemark(StringUtils.isNotEmpty(serviceSubtask.getRemark()) ? serviceSubtask.getRemark() + ";患者再入院了" : "患者再入院了");
            serviceSubtaskMapper.updateServiceSubtask(serviceSubtask1);
            return "无需再次随访,患者再入院了";
        } else if (serviceSubtask1.getSendstate() == 4L) {
            serviceSubtask1.setIsVisitAgain(2);
            serviceSubtask1.setRemark(serviceSubtask1.getRemark() + ";无需再次随访,任务被标记不在执行");
            serviceSubtask1.setRemark(StringUtils.isNotEmpty(serviceSubtask.getRemark()) ? serviceSubtask.getRemark() + ";无需再次随访,任务被标记不在执行" : "无需再次随访,任务被标记不在执行");
            serviceSubtaskMapper.updateServiceSubtask(serviceSubtask1);
            return "无需再次随访,任务被标记不在执行";
        } else if (StringUtils.isNotEmpty(patArchive.getNotrequiredFlag()) && patArchive.getNotrequiredFlag().equals("1")) {
            serviceSubtask1.setIsVisitAgain(2);
            serviceSubtaskMapper.updateServiceSubtask(serviceSubtask1);
            serviceSubtask1.setRemark(serviceSubtask1.getRemark() + ";无需再次随访,患者被标记不需要被服务");
            serviceSubtask1.setRemark(StringUtils.isNotEmpty(serviceSubtask.getRemark()) ? serviceSubtask.getRemark() + ";无需再次随访,患者被标记不需要被服务" : "无需再次随访,患者被标记不需要被服务");
            return "无需再次随访,患者被标记不需要被服务";
        } else if (ObjectUtils.isNotEmpty(serviceSubtask1.getIsVisitAgain()) && serviceSubtask1.getIsVisitAgain() == 2) {
            return "无需再次随访,该任务已经再次随访过了";
@@ -576,14 +584,14 @@
            if (StringUtils.isNotEmpty(serviceTaskVO.getLibtemplateid())) {
                serviceTask.setLibtemplateid(serviceTaskVO.getLibtemplateid());
                serviceTask.setLibtemplatename(serviceTaskVO.getLibtemplatename());
            }else {
            } else {
                if (ObjectUtils.isNotEmpty(serviceTaskVO.getSvyTaskTemplateVO())) {
                    serviceTask.setLibtemplateid(""+serviceTaskVO.getSvyTaskTemplateVO().getTemplateid());
                    serviceTask.setLibtemplatename(""+serviceTaskVO.getLibtemplatename());
                    serviceTask.setLibtemplateid("" + serviceTaskVO.getSvyTaskTemplateVO().getTemplateid());
                    serviceTask.setLibtemplatename("" + serviceTaskVO.getLibtemplatename());
                }
                if (ObjectUtils.isNotEmpty(serviceTaskVO.getIvrTaskTemplateVO())) {
                    serviceTask.setLibtemplateid(""+serviceTaskVO.getIvrTaskTemplateVO().getLibtemplateid());
                    serviceTask.setLibtemplatename(""+serviceTaskVO.getIvrTaskTemplateVO().getLibtemplatename());
                    serviceTask.setLibtemplateid("" + serviceTaskVO.getIvrTaskTemplateVO().getLibtemplateid());
                    serviceTask.setLibtemplatename("" + serviceTaskVO.getIvrTaskTemplateVO().getLibtemplatename());
                }
            }
            if (serviceTaskVO.getTemplateid() != null) {
@@ -1591,7 +1599,12 @@
                            subtaskDetailTrace.setAsrtext(phoneCallReqYQVO.getAsrtext());
                            subtaskDetailTrace.setRecordpath(phoneCallReqYQVO.getRecordpath());
                            subtaskDetailTrace.setPatid(serviceSubtask.getPatid());
                            subtaskDetailTrace.setPatdesc(serviceSubtask.getSendname() + "," + serviceSubtask.getPhone() + "," + serviceSubtask.getDeptname());
                            JSONObject patdescJson = new JSONObject();
                            patdescJson.put("sendname", serviceSubtask.getSendname());
                            patdescJson.put("phone", serviceSubtask.getPhone());
                            patdescJson.put("age", serviceSubtask.getAge());
                            patdescJson.put("sex", serviceSubtask.getSex() != null ? serviceSubtask.getSex() == 1 ? "男" : "女" : null);
                            subtaskDetailTrace.setPatdesc(patdescJson.toJSONString());
                            subtaskDetailTrace.setTodeptcode(ivrTaskTemplateScriptVO.getDutyDeptCode());
                            subtaskDetailTrace.setTodeptname(ivrTaskTemplateScriptVO.getDutyDeptName());
                            subtaskDetailTrace.setOrgid(serviceSubtask.getOrgid());
@@ -1976,7 +1989,7 @@
//        if (existSize > 0) return pullTaskVOList;
        int count = 0;
        long size = listOps.size("cache-0");
        log.error("---------打电话之前缓存中的数据量:{}", size);
        log.info("---------打电话之前缓存中的数据量:{}", size);
        if (size > 0) {
            //phoneCount()  通过给出的每个小时需要打出的电话量,算出到晚上8点一点能打出多少个电话,获取到总量
            //如果需要立即执行的数据量大于一天要执行的上限,则只取上限的数量,其它的则放回redis中
@@ -2025,7 +2038,7 @@
            }
        }
//        if (existList.size() != 0) redisCache.setCacheListRight("cache-exist", existList);
        log.error("-----------实际拉取的电话数据量:{}", CollectionUtils.isNotEmpty(pullTaskVOList) ? pullTaskVOList.size() : null);
        log.info("-----------实际拉取的电话数据量:{}", CollectionUtils.isNotEmpty(pullTaskVOList) ? pullTaskVOList.size() : null);
        return pullTaskVOList;
    }
@@ -2296,7 +2309,7 @@
            String deptcodes = CollectionUtils.isEmpty(request.getDeptcodes()) ? null : String.join(",", request.getDeptcodes());
            if (!request.getTimeType().equals("month")) {
                req.setBeginAdmitdate(DateUtils.parseDate(serviceStatisticsResponse.getTimePeriod()));
                req.setEndAdmitdate(DateUtils.parseDate(serviceStatisticsResponse.getTimePeriod()));
                req.setEndAdmitdate(DateUtils.addDays(DateUtils.parseDate(serviceStatisticsResponse.getTimePeriod()), 1));
            } else {
                // year 类型:timePeriod 格式为 "yyyy-MM",取当月第一天和最后一天
                java.time.YearMonth ym = java.time.YearMonth.parse(serviceStatisticsResponse.getTimePeriod());
@@ -2364,13 +2377,13 @@
    public List<ServiceSubtaskStatistic> getSfStatistics(ServiceSubtaskCountReq serviceSubtaskCountReq) {
        log.info("getSfStatistics的入参为:{}", serviceSubtaskCountReq);
        String groupKey = "drcode";
        if (serviceSubtaskCountReq.getLeavehospitaldistrictcodes() != null && !serviceSubtaskCountReq.getLeavehospitaldistrictcodes().isEmpty()) {
        if (serviceSubtaskCountReq.getStatisticaltype() != null && serviceSubtaskCountReq.getStatisticaltype() == 1) {
            if (serviceSubtaskCountReq.getDrcode() != null && !serviceSubtaskCountReq.getDrcode().isEmpty()) {
                groupKey = "drcode";
            } else {
                groupKey = "leavehospitaldistrictcode";
            }
        } else if (serviceSubtaskCountReq.getDeptcodes() != null && !serviceSubtaskCountReq.getDeptcodes().isEmpty()) {
        } else if (serviceSubtaskCountReq.getStatisticaltype() != null && serviceSubtaskCountReq.getStatisticaltype() == 2) {
            if (serviceSubtaskCountReq.getDrcode() != null && !serviceSubtaskCountReq.getDrcode().isEmpty()) {
                groupKey = "drcode";
            } else {
@@ -2659,9 +2672,9 @@
        if (visitCount != null && visitCount > 1) {
            serviceSubtaskStatistic = getStatisticAgain(serviceSubtaskList, followUpCountStyle);
        }else if(visitCount != null && visitCount == 1){
        } else if (visitCount != null && visitCount == 1) {
            serviceSubtaskStatistic = getStatisticFirst(serviceSubtaskList, followUpCountStyle);
        }else {
        } else {
            //格式化为两位小数的百分比
            DecimalFormat percentFormat = new DecimalFormat("##.##%");
            serviceSubtaskStatistic.setDeptname(serviceSubtaskList.get(0).getDeptname());
@@ -2672,6 +2685,8 @@
            serviceSubtaskStatistic.setDrname(serviceSubtaskList.get(0).getDrname());
            //出院人次
            serviceSubtaskStatistic.setDischargeCount(serviceSubtaskList.size());
            //无需随访详情
            List<ServiceSubtask> nonFollowUpInfo = new ArrayList<>();
            //记录过滤患者详情
            List<ServiceSubtask> filterServiceSubtasks = new ArrayList<>();
            //记录首次应随访详情
@@ -2708,6 +2723,7 @@
                //无需随访人次
                if (serviceSubtask.getSendstate() != null && serviceSubtask.getSendstate() == 4) {
                    serviceSubtaskStatistic.setNonFollowUp(serviceSubtaskStatistic.getNonFollowUp() + 1L);
                    nonFollowUpInfo.add(serviceSubtask);
                    if (serviceSubtask.getTaskSituation() != null && serviceSubtask.getTaskSituation() == 6) {
                        serviceSubtaskStatistic.setFilterCount(serviceSubtaskStatistic.getFilterCount() + 1L);
                        filterServiceSubtasks.add(serviceSubtask);
@@ -2886,6 +2902,8 @@
                }
            }
            serviceSubtaskStatistic.setFilterCountList(filterServiceSubtasks);
            //记录无需随访详情
            serviceSubtaskStatistic.setNonFollowUpInfo(nonFollowUpInfo);
            //记录首次应随访详情
            serviceSubtaskStatistic.setNeedFollowUpInfo(needFollowUpInfo);
            //记录首次待随访详情
@@ -2921,6 +2939,7 @@
    /**
     * 首次随访统计
     *
     * @param serviceSubtaskList
     * @param followUpCountStyle
     * @return
@@ -2937,6 +2956,8 @@
        serviceSubtaskStatistic.setDrname(serviceSubtaskList.get(0).getDrname());
        //出院人次
        serviceSubtaskStatistic.setDischargeCount(serviceSubtaskList.size());
        //无需随访详情
        List<ServiceSubtask> nonFollowUpInfo = new ArrayList<>();
        //记录过滤患者详情
        List<ServiceSubtask> filterServiceSubtasks = new ArrayList<>();
        //记录首次应随访详情
@@ -2958,6 +2979,7 @@
            //无需随访人次
            if (serviceSubtask.getSendstate() != null && serviceSubtask.getSendstate() == 4) {
                serviceSubtaskStatistic.setNonFollowUp(serviceSubtaskStatistic.getNonFollowUp() + 1L);
                nonFollowUpInfo.add(serviceSubtask);
                if (serviceSubtask.getTaskSituation() != null && serviceSubtask.getTaskSituation() == 6) {
                    serviceSubtaskStatistic.setFilterCount(serviceSubtaskStatistic.getFilterCount() + 1L);
                    filterServiceSubtasks.add(serviceSubtask);
@@ -3063,6 +3085,8 @@
            }
        }
        serviceSubtaskStatistic.setFilterCountList(filterServiceSubtasks);
        //记录无需随访详情
        serviceSubtaskStatistic.setNonFollowUpInfo(nonFollowUpInfo);
        //记录首次应随访详情
        serviceSubtaskStatistic.setNeedFollowUpInfo(needFollowUpInfo);
        //记录首次待随访详情
@@ -3082,6 +3106,7 @@
    /**
     * 再次随访统计
     *
     * @param serviceSubtaskList
     * @param followUpCountStyle
     * @return
@@ -3098,6 +3123,8 @@
        serviceSubtaskStatistic.setDrname(serviceSubtaskList.get(0).getDrname());
        //出院人次
        serviceSubtaskStatistic.setDischargeCount(serviceSubtaskList.size());
        //无需随访详情
        List<ServiceSubtask> nonFollowUpInfo = new ArrayList<>();
        //记录过滤患者详情
        List<ServiceSubtask> filterServiceSubtasks = new ArrayList<>();
@@ -3120,6 +3147,7 @@
            //无需随访人次
            if (serviceSubtask.getSendstate() != null && serviceSubtask.getSendstate() == 4) {
                serviceSubtaskStatistic.setNonFollowUp(serviceSubtaskStatistic.getNonFollowUp() + 1L);
                nonFollowUpInfo.add(serviceSubtask);
                if (serviceSubtask.getTaskSituation() != null && serviceSubtask.getTaskSituation() == 6) {
                    serviceSubtaskStatistic.setFilterCount(serviceSubtaskStatistic.getFilterCount() + 1L);
                    filterServiceSubtasks.add(serviceSubtask);
@@ -3225,6 +3253,8 @@
            }
        }
        serviceSubtaskStatistic.setFilterCountList(filterServiceSubtasks);
        //记录无需随访详情
        serviceSubtaskStatistic.setNonFollowUpInfo(nonFollowUpInfo);
        //记录再次应随访详情
        serviceSubtaskStatistic.setNeedFollowUpAgainInfo(needFollowUpAgainInfo);
        //记录再次待随访详情
@@ -3839,7 +3869,7 @@
            if (serviceSubtaskPreachform1.getSort() == spSize.size() && failSendstate.equals("4")) {
                serviceSubtask.setCurrentPreachform(preachform);
                serviceSubtask.setSendstate(5L);
                serviceSubtask.setRemark("setFailPreachForm方法 当前的preachform已经是最后一个了,全失败了");
                serviceSubtask.setRemark("所有发送方式均未获取结果,任务失败");
                serviceSubtaskMapper.updateServiceSubtask(serviceSubtask);
                return true;
            }
@@ -4009,4 +4039,278 @@
    public Map<String, Object> getCurrentUserServiceSubtaskCount(ServiceSubtaskEntity entity) {
        return serviceSubtaskMapper.getCurrentUserServiceSubtaskCount(entity);
    }
    @Override
    public Map<String, Object> getContinueNurseCount(ServiceSubtaskCotinueCountVO vo) {
        boolean hasDistrict = !CollectionUtils.isEmpty(vo.getLeavehospitaldistrictcodes());
        boolean hasDept = !CollectionUtils.isEmpty(vo.getDeptcodes());
        List<Map<String, Object>> districtRows;
        List<Map<String, Object>> deptRows;
        if (hasDistrict) {
            // 只传了病区:仅按病区维度统计
            districtRows = serviceSubtaskMapper.getContinueNurseCount(vo);
            deptRows = Collections.emptyList();
        } else if (hasDept) {
            // 只传了科室:仅按科室维度统计
            districtRows = Collections.emptyList();
            deptRows = serviceSubtaskMapper.getContinueNurseCountByDept(vo);
        } else {
            // 都未传:病区和科室各统计一遍
            districtRows = serviceSubtaskMapper.getContinueNurseCount(vo);
            deptRows = serviceSubtaskMapper.getContinueNurseCountByDept(vo);
        }
        long totalNoContinue = 0L;
        long totalContinue = 0L;
        List<Map<String, Object>> detail = new ArrayList<>();
        for (Map<String, Object> row : districtRows) {
            String groupName = row.get("groupName") == null ? (row.get("groupCode") == null ? "" : row.get("groupCode").toString()) : row.get("groupName").toString();
            long noCnt = row.get("noContinueCnt") == null ? 0L : Long.parseLong(row.get("noContinueCnt").toString());
            long yesCnt = row.get("continueCnt") == null ? 0L : Long.parseLong(row.get("continueCnt").toString());
            totalNoContinue += noCnt;
            totalContinue += yesCnt;
            Map<String, Object> item = new LinkedHashMap<>();
            item.put("未延续_" + groupName, noCnt);
            item.put("已延续_" + groupName, yesCnt);
            detail.add(item);
        }
        for (Map<String, Object> row : deptRows) {
            String groupName = row.get("groupName") == null ? (row.get("groupCode") == null ? "" : row.get("groupCode").toString()) : row.get("groupName").toString();
            long noCnt = row.get("noContinueCnt") == null ? 0L : Long.parseLong(row.get("noContinueCnt").toString());
            long yesCnt = row.get("continueCnt") == null ? 0L : Long.parseLong(row.get("continueCnt").toString());
            totalNoContinue += noCnt;
            totalContinue += yesCnt;
            Map<String, Object> item = new LinkedHashMap<>();
            item.put("未延续_" + groupName, noCnt);
            item.put("已延续_" + groupName, yesCnt);
            detail.add(item);
        }
        Map<String, Object> result = new LinkedHashMap<>();
        result.put("未延续总数量", totalNoContinue);
        result.put("已延续总数量", totalContinue);
        result.put("详情", detail);
        return result;
    }
    /**
     * 设置失败任务默认值,并将失败任务重新置为成功
     *
     * @param failDay (失败天数:距离当前日期失败天数)
     * @return
     */
    @Override
    public void setFailSubTaskDefalutVal(Long failDay) {
        //1.先去sys_config中,获取哪些科室或病区需要默认问卷默认值
        IConfigService configService = SpringUtils.getBean(IConfigService.class);
        String deptConfigValue = configService.selectConfigByKey("hosp.default.dept");
        String wardConfigValue = configService.selectConfigByKey("hosp.default.ward");
        List<String> leaveWard = null;
        List<String> leaveDept = null;
        if (deptConfigValue != null && !deptConfigValue.isEmpty()) {
            leaveDept = Arrays.stream(deptConfigValue.split(",")).filter(s -> !s.trim().isEmpty()).collect(Collectors.toList());
        }
        if (wardConfigValue != null && !wardConfigValue.isEmpty()) {
            leaveWard = Arrays.stream(wardConfigValue.split(",")).filter(s -> !s.trim().isEmpty()).collect(Collectors.toList());
        }
        log.info("离院病区leaveWard: {}, 离院科室leaveDept: {}", leaveWard, leaveDept);
        if (leaveWard == null && leaveDept == null) return;
        //2.获取leaveWard,leaveDept中的servic_subtask表中sendstate=5的任务
        ServiceSubtaskEntity serviceSubtaskEntity = new ServiceSubtaskEntity();
        serviceSubtaskEntity.setSendstate(5L);
        serviceSubtaskEntity.setLeavehospitaldistrictcodes(leaveWard);
        serviceSubtaskEntity.setLeaveldeptcodes(leaveDept);
        if (!Objects.isNull(leaveWard) && !Objects.isNull(leaveDept)) serviceSubtaskEntity.setDeptOrDistrict("2");
        List<ServiceSubtask> serviceSubtasks = serviceSubtaskMapper.selectServiceSubtaskList(serviceSubtaskEntity);
        if (CollectionUtils.isEmpty(serviceSubtasks)) return;
        //3.如果查出来的集合不为空,则进行循环
        for (ServiceSubtask serviceSubtask : serviceSubtasks) {
            Integer preachformSize = 0;
            Boolean flag = false;
            ServiceSubtaskPreachform serviceSubtaskPreachform = new ServiceSubtaskPreachform();
            serviceSubtaskPreachform.setSubid(serviceSubtask.getId());
            List<ServiceSubtaskPreachform> serviceSubtaskPreachforms = serviceSubtaskPreachformMapper.selectServiceSubtaskPreachformList(serviceSubtaskPreachform);
            if (CollectionUtils.isNotEmpty(serviceSubtaskPreachforms))
                preachformSize = serviceSubtaskPreachforms.size();
            if (serviceSubtask.getUpdateTime() != null && DateUtils.differentDaysByMillisecond(new Date(), serviceSubtask.getUpdateTime()) >= failDay) {
                //3.1 判断当前serviceSubtask的updateTime是不是为空,如果不为空,则判断当前时间是不是与updateTime差距大于等于failDay
                flag = saveServiceSubtaskDetail(serviceSubtask);
            } else if (serviceSubtask.getVisitTime() != null && DateUtils.differentDaysByMillisecond(new Date(), serviceSubtask.getVisitTime()) >= failDay + preachformSize) {
                //3.2 如果当前serviceSubtask的updateTime为空,根据当前serviceSubtask的subid去查service_subtask_preachform得到size(如果size为空,则默认0),则根据当前时间是不是与当前serviceSubtask的visitTime差距大于等于failDay + size
                flag = saveServiceSubtaskDetail(serviceSubtask);
            } else {
                //3.3 如果2.1且2.2都为false,则continue
                continue;
            }
            //4.如果flag为true,则更新service_subtask表中的sendstate为6,preachform为1
            if (flag) {
                serviceSubtask.setSendstate(6L);
                serviceSubtask.setPreachform("1");
                serviceSubtaskMapper.updateServiceSubtask(serviceSubtask);
            } else {
                //删除误新增detail里的数据
                ServiceSubtaskDetail serviceSubtaskDetail = new ServiceSubtaskDetail();
                serviceSubtaskDetail.setSubId(serviceSubtask.getId());
                List<ServiceSubtaskDetail> serviceSubtaskDetails = serviceSubtaskDetailMapper.selectServiceSubtaskDetailList(serviceSubtaskDetail);
                if (CollectionUtils.isNotEmpty(serviceSubtaskDetails)) {
                    for (ServiceSubtaskDetail serviceSubtaskDetail1 : serviceSubtaskDetails) {
                        serviceSubtaskDetail1.setDelFlag("1");
                        serviceSubtaskDetailMapper.updateServiceSubtaskDetail(serviceSubtaskDetail1);
                    }
                }
            }
        }
    }
    private Boolean saveServiceSubtaskDetail(ServiceSubtask serviceSubtask) {
        Boolean result = true;
        //3.4 如果3.1或3.2为true的话,根据type判断什么类型
        if (serviceSubtask.getType().equals("1")) {
            //3.3.1    如果type是 1 ,则用当前serviceSubtask的templateid去ivr_task_temaplate_script中获取问题和选项,将问题和选项的默认值放到service_detail中
            IvrTaskTemplateScript ivrTaskTemplateScript = new IvrTaskTemplateScript();
            ivrTaskTemplateScript.setTemplateID(serviceSubtask.getTemplateid());
            List<IvrTaskTemplateScript> ivrTaskTemplateScripts = iIvrTaskTemplateScriptService.selectIvrTaskTemplateScriptList(ivrTaskTemplateScript);
            for (IvrTaskTemplateScript its : ivrTaskTemplateScripts) {
                IvrTaskTemplateScriptVO ivrTaskTemplateScriptVO = DtoConversionUtils.sourceToTarget(its, IvrTaskTemplateScriptVO.class);
                IvrTaskTemplateTargetoption ivrTaskTemplateTargetoption = new IvrTaskTemplateTargetoption();
                ivrTaskTemplateTargetoption.setScriptid(ivrTaskTemplateScriptVO.getId());
                List<IvrTaskTemplateTargetoption> ivrTaskTemplateTargetoptions = iIvrTaskTemplateTargetoptionService.selectIvrTaskTemplateTargetoptionList(ivrTaskTemplateTargetoption);
                ivrTaskTemplateScriptVO.setIvrTaskScriptTargetoptionList(ivrTaskTemplateTargetoptions);
                Integer integer = setSFDetailInfo(ivrTaskTemplateScriptVO, serviceSubtask);
                if (Objects.isNull(integer) || integer == 0) result = false;
            }
        } else if (serviceSubtask.getType().equals("2")) {
            //3.3.2    如果type是 2,则用当前serviceSubtask的templateid去svy_task_temaplate_script中获取问题和选项,将问题和选项的默认值放到service_detail中
            SvyTaskTemplateScript svyTaskTemplateScript = new SvyTaskTemplateScript();
            svyTaskTemplateScript.setTemplateID(serviceSubtask.getTemplateid());
            List<SvyTaskTemplateScript> svyTaskTemplateScripts = svyTaskTemplateScriptService.selectSvyTaskTemplateScriptList(svyTaskTemplateScript);
            for (SvyTaskTemplateScript taskTemplateScript : svyTaskTemplateScripts) {
                SvyTaskTemplateScriptVO svyTaskTemplateScriptVO = DtoConversionUtils.sourceToTarget(taskTemplateScript, SvyTaskTemplateScriptVO.class);
                SvyTaskTemplateScriptVO svyTaskTemplateScriptVO1 = svyTaskTemplateScriptService.selectInfoByCondition(svyTaskTemplateScriptVO);
                Integer integer = setWJDetailInfo(svyTaskTemplateScriptVO1, serviceSubtask);
                if (Objects.isNull(integer) || integer == 0) result = false;
            }
        }
        return result;
    }
    private Integer setWJDetailInfo(SvyTaskTemplateScriptVO svyTaskTemplateScriptVO, ServiceSubtask serviceSubtask) {
        log.info("-----setWJDetailInfo的入参为:{}", svyTaskTemplateScriptVO);
        ServiceSubtaskDetailVO serviceSubtaskDetailVO = new ServiceSubtaskDetailVO();
        if (svyTaskTemplateScriptVO.getScriptType().equals("1") || svyTaskTemplateScriptVO.getScriptType().equals("2")) {
            //1、2为单选或多选
            for (SvyTaskTemplateTargetoption svyTaskTemplateTargetoption : svyTaskTemplateScriptVO.getSvyTaskTemplateTargetoptions()) {
                //将问题选项记录下来
                if (StringUtils.isEmpty(serviceSubtaskDetailVO.getTargetvalue())) {
                    serviceSubtaskDetailVO.setTargetvalue(svyTaskTemplateTargetoption.getOptioncontent());
                } else {
                    serviceSubtaskDetailVO.setTargetvalue(serviceSubtaskDetailVO.getTargetvalue() + "&" + svyTaskTemplateTargetoption.getOptioncontent());
                }
                if (svyTaskTemplateTargetoption.getDefaultValue() != null && svyTaskTemplateTargetoption.getDefaultValue() == 2) {
                    serviceSubtaskDetailVO.setAsrtext(StringUtils.isNotBlank(serviceSubtaskDetailVO.getAsrtext()) ? serviceSubtaskDetailVO.getAsrtext() + "&" + svyTaskTemplateTargetoption.getOptioncontent() : svyTaskTemplateTargetoption.getOptioncontent());
                    serviceSubtaskDetailVO.setMatchedtext(StringUtils.isNotBlank(serviceSubtaskDetailVO.getMatchedtext()) ? serviceSubtaskDetailVO.getMatchedtext() + "&" + svyTaskTemplateTargetoption.getOptioncontent() : svyTaskTemplateTargetoption.getOptioncontent());
                }
            }
            //如果asrtext和matchedtext都为空,则没有默认值,则不进行处理
            if (StringUtils.isEmpty(serviceSubtaskDetailVO.getAsrtext()) && StringUtils.isEmpty(serviceSubtaskDetailVO.getMatchedtext())) {
                return 0;
            }
        }
        ServiceTask serviceTask = serviceTaskService.selectServiceTaskByTaskid(serviceSubtask.getTaskid());
        serviceSubtaskDetailVO.setQuestiontext(svyTaskTemplateScriptVO.getScriptContent());
        serviceSubtaskDetailVO.setCategoryid(svyTaskTemplateScriptVO.getCategoryid());
        serviceSubtaskDetailVO.setTaskid(serviceSubtask.getTaskid());
        serviceSubtaskDetailVO.setTargetid(svyTaskTemplateScriptVO.getTargetid() != null ? svyTaskTemplateScriptVO.getTargetid().intValue() : null);
        serviceSubtaskDetailVO.setPatid(serviceSubtask.getPatid());
        serviceSubtaskDetailVO.setScriptid(svyTaskTemplateScriptVO.getId());
        serviceSubtaskDetailVO.setTemplatequestionnum(StringUtils.isNotEmpty(svyTaskTemplateScriptVO.getScriptno()) ? Long.valueOf(svyTaskTemplateScriptVO.getScriptno()) : null);
        serviceSubtaskDetailVO.setValueType(svyTaskTemplateScriptVO.getScriptType());
        serviceSubtaskDetailVO.setComment(null);
        serviceSubtaskDetailVO.setCreateTime(new Date());
        serviceSubtaskDetailVO.setUpdateTime(new Date());
        serviceSubtaskDetailVO.setTemplateType(2);
        serviceSubtaskDetailVO.setLibTemplateid(serviceSubtask.getLibtemplateid() != null ? serviceSubtask.getLibtemplateid().intValue() : null);
        if (ObjectUtils.isNotEmpty(serviceTask)) {
            serviceSubtaskDetailVO.setGuid(serviceTask.getGuid());
            serviceSubtaskDetailVO.setOrgid(serviceTask.getOrgid());
        }
        serviceSubtaskDetailVO.setSubId(serviceSubtask.getId());
        serviceSubtaskDetailVO.setTemplatequestionnum(svyTaskTemplateScriptVO.getId());
        ServiceSubtaskDetail serviceSubtaskDetail = DtoConversionUtils.sourceToTarget(serviceSubtaskDetailVO, ServiceSubtaskDetail.class);
        //先用subid和scriptid查询一下是否存在,如果存在则更新,不存在则插入
        ServiceSubtaskDetailDTO existServiceSubtaskDetail = serviceSubtaskDetailMapper.isExistServiceSubtaskDetail(serviceSubtaskDetailVO.getSubId(), serviceSubtaskDetailVO.getScriptid());
        if (ObjectUtils.isNotEmpty(existServiceSubtaskDetail)) {
            serviceSubtaskDetail.setId(existServiceSubtaskDetail.getId());
            serviceSubtaskDetail.setUpdateTime(new Date());
            return serviceSubtaskDetailMapper.updateServiceSubtaskDetail(serviceSubtaskDetail);
        } else {
            return serviceSubtaskDetailMapper.insertServiceSubtaskDetail(serviceSubtaskDetail);
        }
    }
    private Integer setSFDetailInfo(IvrTaskTemplateScriptVO ivrTaskTemplateScriptVO, ServiceSubtask serviceSubtask) {
        ServiceSubtaskDetailVO serviceSubtaskDetailVO = new ServiceSubtaskDetailVO();
        if (ivrTaskTemplateScriptVO.getScriptType() != null && (ivrTaskTemplateScriptVO.getScriptType().equals("1") || ivrTaskTemplateScriptVO.getScriptType().equals("2"))) {
            //1、2为单选或多选
            for (IvrTaskTemplateTargetoption ivrTaskTemplateTargetoption : ivrTaskTemplateScriptVO.getIvrTaskScriptTargetoptionList()) {
                //将问题选项记录下来
                if (StringUtils.isEmpty(serviceSubtaskDetailVO.getTargetvalue())) {
                    serviceSubtaskDetailVO.setTargetvalue(ivrTaskTemplateTargetoption.getTargetvalue());
                } else {
                    serviceSubtaskDetailVO.setTargetvalue(serviceSubtaskDetailVO.getTargetvalue() + "&" + ivrTaskTemplateTargetoption.getTargetvalue());
                }
                if (ivrTaskTemplateTargetoption.getDefaultValue() != null && ivrTaskTemplateTargetoption.getDefaultValue() == 2) {
                    //医生手动填报时,值是在ivrtext中
                    serviceSubtaskDetailVO.setAsrtext(StringUtils.isEmpty(serviceSubtaskDetailVO.getAsrtext()) ? ivrTaskTemplateTargetoption.getTargetvalue() : serviceSubtaskDetailVO.getAsrtext() + "&" + ivrTaskTemplateTargetoption.getTargetvalue());
                    serviceSubtaskDetailVO.setMatchedtext(StringUtils.isEmpty(serviceSubtaskDetailVO.getMatchedtext()) ? ivrTaskTemplateTargetoption.getTargetvalue() : serviceSubtaskDetailVO.getMatchedtext() + "&" + ivrTaskTemplateTargetoption.getTargetvalue());
                }
            }
            //如果asrtext和matchedtext都为空,则没有默认值,不进行处理
            if (StringUtils.isEmpty(serviceSubtaskDetailVO.getAsrtext()) && StringUtils.isEmpty(serviceSubtaskDetailVO.getMatchedtext())) {
                return 0;
            }
        }
        serviceSubtaskDetailVO.setTargetid(ivrTaskTemplateScriptVO.getTargetid() != null ? ivrTaskTemplateScriptVO.getTargetid().intValue() : null);
        serviceSubtaskDetailVO.setQuestiontext(ivrTaskTemplateScriptVO.getScriptContent());
        serviceSubtaskDetailVO.setTaskid(serviceSubtask.getTaskid());
        serviceSubtaskDetailVO.setPatid(serviceSubtask.getPatid());
        serviceSubtaskDetailVO.setScriptid(ivrTaskTemplateScriptVO.getScriptID() == null ? ivrTaskTemplateScriptVO.getId() : ivrTaskTemplateScriptVO.getScriptID());
        serviceSubtaskDetailVO.setTemplatequestionnum(ivrTaskTemplateScriptVO.getId());
        serviceSubtaskDetailVO.setValueType(ivrTaskTemplateScriptVO.getScriptType());
        serviceSubtaskDetailVO.setComment(null);
        serviceSubtaskDetailVO.setCreateTime(new Date());
        serviceSubtaskDetailVO.setGuid(ivrTaskTemplateScriptVO.getGuid());
        serviceSubtaskDetailVO.setOrgid(ivrTaskTemplateScriptVO.getOrgid());
        serviceSubtaskDetailVO.setUpdateTime(new Date());
        serviceSubtaskDetailVO.setSubId(serviceSubtask.getId());
        serviceSubtaskDetailVO.setTemplatequestionnum(ivrTaskTemplateScriptVO.getId());
        serviceSubtaskDetailVO.setTemplateType(1);
        serviceSubtaskDetailVO.setTemplateid(ivrTaskTemplateScriptVO.getTemplateID() == null ? null : ivrTaskTemplateScriptVO.getTemplateID().toString());
        serviceSubtaskDetailVO.setLibTemplateid(serviceSubtask.getLibtemplateid() != null ? serviceSubtask.getLibtemplateid().intValue() : null);
        ServiceSubtaskDetail serviceSubtaskDetail = DtoConversionUtils.sourceToTarget(serviceSubtaskDetailVO, ServiceSubtaskDetail.class);
        //先用subid和scriptid查询一下是否存在,如果存在则更新,不存在则插入
        ServiceSubtaskDetailDTO existServiceSubtaskDetail = serviceSubtaskDetailMapper.isExistServiceSubtaskDetail(serviceSubtaskDetailVO.getSubId(), serviceSubtaskDetailVO.getScriptid());
        if (ObjectUtils.isNotEmpty(existServiceSubtaskDetail)) {
            serviceSubtaskDetail.setId(existServiceSubtaskDetail.getId());
            serviceSubtaskDetail.setUpdateTime(new Date());
            return serviceSubtaskDetailMapper.updateServiceSubtaskDetail(serviceSubtaskDetail);
        } else {
            return serviceSubtaskDetailMapper.insertServiceSubtaskDetail(serviceSubtaskDetail);
        }
    }
}