smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskServiceImpl.java
@@ -25,6 +25,7 @@
import com.smartor.domain.*;
import com.smartor.domain.VO.HeLibraryCountVO;
import com.smartor.domain.VO.ServiceSubtaskCotinueCountVO;
import com.smartor.domain.VO.TransferDeptVO;
import com.smartor.domain.entity.ServiceSubtaskEntity;
import com.smartor.mapper.*;
import com.smartor.service.*;
@@ -462,6 +463,28 @@
        return serviceSubtaskResList;
    }
    @Override
    public Integer transferDept(TransferDeptVO transferDeptVO) {
        log.info("transferDept的入参为:{}", transferDeptVO);
        //查询该患者的子任务信息
        ServiceSubtask serviceSubtask = serviceSubtaskMapper.selectServiceSubtaskById(transferDeptVO.getSubId());
        if (ObjectUtils.isEmpty(serviceSubtask)) throw new BaseException("转患者失败,请联系管理员处理");
        //删除该患者的信息通过subid
        serviceSubtaskMapper.deleteServiceSubtaskById(transferDeptVO.getSubId());
        //修改患者的离院科室病区通过inhospid和患者的任务生成状态
        PatMedInhosp patMedInhosp = new PatMedInhosp();
        patMedInhosp.setInhospid(serviceSubtask.getInhospid());
        patMedInhosp.setLeaveldeptcode(transferDeptVO.getLeavelDeptCode());
        patMedInhosp.setLeaveldeptname(transferDeptVO.getLeavelDeptName());
        patMedInhosp.setLeavehospitaldistrictcode(transferDeptVO.getLeavehospitaldistrictcode());
        patMedInhosp.setLeavehospitaldistrictname(transferDeptVO.getLeavehospitaldistrictname());
        patMedInhosp.setDeptcheckFlag("0");
        patMedInhosp.setWardcheckFlag("0");
        patMedInhosp.setDiagcheckFlag("0");
        return patMedInhospMapper.updatePatMedInhosp(patMedInhosp);
    }
    public Map<String, String> calculateAge(LocalDate birthdate, LocalDate today) {
        if (birthdate == null || today.isBefore(birthdate)) {
            return null;
@@ -625,7 +648,7 @@
        iServiceOutPathService.updateServiceOutPath(serviceOutPath);
        Map<String, Object> result = new HashMap<>();
        result.put("url", localIP + ":" + req_path + "/wt?p=" + format);
        result.put("url", StringUtils.isNotEmpty(req_path) ? localIP + ":" + req_path + "/wt?p=" + format : localIP + "/wt?p=" + format);
        result.put("subId",serviceSubtask.getId());
        return result;
    }
@@ -924,7 +947,7 @@
                            serviceTaskmedical.setMedicalCode(medicalNames[i]);
                            serviceTaskmedical.setMedicalName(medicalcodes[i]);
                            if (ObjectUtils.isNotEmpty(medicalCompanys))
                                serviceTaskmedical.setMedicalCompany(medicalcodes[i]);
                                serviceTaskmedical.setMedicalCompany(medicalCompanys[i]);
                            serviceTaskmedicalService.insertServiceTaskmedical(serviceTaskmedical);
                        }
                    }
@@ -1020,10 +1043,8 @@
                        if (schedule == null) {
                            throw new BaseException("appltype=5 任务组:未找到 taskid=" + serviceTask.getTaskid() + " 的计划");
                        }
                        List<ServiceTaskScheduleDetail> detailList =
                                serviceTaskScheduleService.selectDetailByScheduleid(schedule.getId());
                        scheduleSubtaskBuilder.buildSubtasksForPatient(
                                serviceTask, serviceTaskVO.getPreachformList(), schedule, detailList, patTaskRelevance, serviceSubtask);
                        List<ServiceTaskScheduleDetail> detailList = serviceTaskScheduleService.selectDetailByScheduleid(schedule.getId());
                        scheduleSubtaskBuilder.buildSubtasksForPatient(serviceTask, serviceTaskVO.getPreachformList(), schedule, detailList, patTaskRelevance, serviceSubtask);
                        continue;
                    }
@@ -1050,7 +1071,8 @@
                }
            }
        } else if (serviceTaskVO.getIsoperation() != null && serviceTaskVO.getIsoperation() == 2) {
        }
        else if (serviceTaskVO.getIsoperation() != null && serviceTaskVO.getIsoperation() == 2) {
            //任务修改
            if (ObjectUtils.isNotEmpty(serviceTaskVO.getSendTimeslot()))
                serviceTask.setSendTimeSlot(JSON.toJSONString(serviceTaskVO.getSendTimeslot()));
@@ -1205,7 +1227,7 @@
                    ServiceTaskmedical serviceTaskmedical = new ServiceTaskmedical();
                    serviceTaskmedical.setTaskId(serviceTask.getTaskid());
                    serviceTaskmedical.setTaskName(serviceTask.getTaskName());
                    if (StringUtils.isEmpty(serviceTaskVO.getIcd10code())) {
                    if (StringUtils.isEmpty(serviceTaskVO.getMedicalCode())) {
                        throw new BaseException("药品编码为空");
                    }
                    serviceTaskmedical.setLongtask(Long.valueOf(serviceTask.getLongTask()));
@@ -1221,21 +1243,24 @@
                    if (StringUtils.isNotEmpty(serviceTaskVO.getMedicalCode())) {
                        String[] medicalCodes = serviceTaskVO.getMedicalCode().split(",");
                        String[] medicalNames = serviceTaskVO.getMedicalName().split(",");
                        String[] medicalCompany = serviceTaskVO.getMedicalCompany().split(",");
                        String[] medicalCompanys = serviceTaskVO.getMedicalCompany().split(",");
                        if (!active.equals("nhfy") && !active.equals("druid")) {
                            if (medicalCodes.length != medicalNames.length) {
                                throw new BaseException("药品编码和药品名称数量不一致");
                            if (medicalCodes.length != medicalNames.length && medicalNames.length != medicalCompanys.length) {
                                throw new BaseException("药品编码和药品名称数量不一致或者药品名称和药品公司数量不一致");
                            }
                        }
                        for (int i = 0; i < medicalCodes.length; i++) {
                            //先查询一下是否存在
                            ServiceTaskmedical serviceTaskmedical1 = new ServiceTaskmedical();
                            serviceTaskmedical1.setTaskId(serviceTaskVO.getTaskid());
                            serviceTaskmedical1.setMedicalCode(medicalCodes[i]);
                            serviceTaskmedical1.setMedicalName(medicalNames[i]);
                            serviceTaskmedical1.setMedicalCompany(medicalCompanys[i]);
                            List<ServiceTaskmedical> serviceTaskmedicals = serviceTaskmedicalService.selectServiceTaskmedicalList(serviceTaskmedical1);
                            serviceTaskmedical.setMedicalCode(medicalCodes[i]);
                            serviceTaskmedical.setMedicalName(medicalNames[i]);
                            serviceTaskmedical.setMedicalCompany(medicalCompanys[i]);
                            log.info("----serviceTaskmedical更新的值为:{}", serviceTaskmedical);
                            if (CollectionUtils.isNotEmpty(serviceTaskmedicals)) {
                                serviceTaskmedical.setId(serviceTaskmedicals.get(0).getId());
@@ -1363,12 +1388,10 @@
                            if (schedule == null) {
                                throw new BaseException("appltype=5 任务组:未找到 taskid=" + serviceTask.getTaskid() + " 的计划");
                            }
                            List<ServiceTaskScheduleDetail> detailList =
                                    serviceTaskScheduleService.selectDetailByScheduleid(schedule.getId());
                            List<ServiceTaskScheduleDetail> detailList = serviceTaskScheduleService.selectDetailByScheduleid(schedule.getId());
                            serviceSubtask.setUpdateBy(serviceTask.getUpdateBy());
                            serviceSubtask.setCreateBy(serviceTask.getUpdateBy());
                            scheduleSubtaskBuilder.buildSubtasksForPatient(
                                    serviceTask, serviceTaskVO.getPreachformList(), schedule, detailList, patTaskRelevance, serviceSubtask);
                            scheduleSubtaskBuilder.buildSubtasksForPatient(serviceTask, serviceTaskVO.getPreachformList(), schedule, detailList, patTaskRelevance, serviceSubtask);
                            continue;
                        }
                        if (patTaskRelevance.getIsoperation() == 2) {
@@ -1830,7 +1853,7 @@
                Long id = serviceSubtask.getId();
                //先更新一下分数
                double score = redisCache.getCacheObject(phoneCallReqYQVO.getUuid() + "SCORE");
                serviceSubtask.setScore(BigDecimal.valueOf(score));
                serviceSubtask.setScore(String.valueOf(score));
                serviceSubtask.setFinishtime(new Date());
                serviceSubtask.setUpdateTime(new Date());
                log.error("先更新一下分数,电话的serviceSubtask的值为:{}", serviceSubtask);
@@ -1927,9 +1950,7 @@
                String url = configService.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());
                    PhoneCallBackYQVO aiMatchResult = AiMatch(url, phoneCallReqYQVO, phoneCallBackYQVO, ivrTaskTemplateScriptVO, serviceSubtask, ivrTaskTemplate, ivrTaskTemplateScripts, scriptId, flag, phoneCallReqYQVO.getUuid());
                if(aiMatchResult != null){
                    return aiMatchResult;
                }
@@ -2062,14 +2083,14 @@
                                nextQuestion = ivrTaskTemplateScriptVO.getIvrTaskScriptTargetoptionList().get(j).getNextQuestion();
                                //更新分数
                                double score = redisCache.getCacheObject(phoneCallReqYQVO.getUuid() + "SCORE");
                                score = BigDecimal.valueOf(score).add(ivrTaskTemplateScriptVO.getIvrTaskScriptTargetoptionList().get(j).getScore()).doubleValue();
                                    score = BigDecimal.valueOf(score).add(new BigDecimal(ivrTaskTemplateScriptVO.getIvrTaskScriptTargetoptionList().get(j).getScore())).doubleValue();
                                redisCache.setCacheObject(phoneCallReqYQVO.getUuid() + "SCORE", score);
                            } else {
                                nextQuestion = ivrTaskTemplateScriptVO.getNextScriptno();
                                //更新分数
                                Object obj = redisCache.getCacheObject(phoneCallReqYQVO.getUuid() + "SCORE");
                                Double score = (obj == null ? new Double(0.00) : new Double(((Double) obj).doubleValue()));
                                score = BigDecimal.valueOf(score).add(ivrTaskTemplateScriptVO.getIvrTaskScriptTargetoptionList().get(j).getScore()).doubleValue();
                                    score = BigDecimal.valueOf(score).add(new BigDecimal(ivrTaskTemplateScriptVO.getIvrTaskScriptTargetoptionList().get(j).getScore())).doubleValue();
                                redisCache.setCacheObject(phoneCallReqYQVO.getUuid() + "SCORE", score, 120, TimeUnit.MINUTES);
                            }
                            if (nextQuestion == null || nextQuestion == 0L) {
@@ -2124,7 +2145,7 @@
                            double score = 0.0;
                            Object scoreObj = redisCache.getCacheObject(phoneCallReqYQVO.getUuid() + "SCORE");
                            if (ObjectUtils.isNotEmpty(scoreObj)) score = (double) scoreObj;
                            serviceSubtask.setScore(BigDecimal.valueOf(score));
                                serviceSubtask.setScore(String.valueOf(score));
                            serviceSubtask.setFinishtime(new Date());
                            serviceSubtask.setSendstate(6L);
                            serviceSubtask.setRemark("电话拨打已完成");
@@ -2197,7 +2218,7 @@
                            Double score = null;
                            Object scoreObj = redisCache.getCacheObject(phoneCallReqYQVO.getUuid() + "SCORE");
                            if (ObjectUtils.isNotEmpty(scoreObj)) score = (Double) scoreObj;
                            serviceSubtask.setScore(BigDecimal.valueOf(score));
                            serviceSubtask.setScore(String.valueOf(score));
                            serviceSubtask.setFinishtime(new Date());
                            serviceSubtask.setSendstate(6L);
                            serviceSubtask.setRemark("电话拨打已完成");
@@ -2231,7 +2252,7 @@
                                    Double score = null;
                                    Object scoreObj = redisCache.getCacheObject(phoneCallReqYQVO.getUuid() + "SCORE");
                                    if (ObjectUtils.isNotEmpty(scoreObj)) score = (Double) scoreObj;
                                    score = BigDecimal.valueOf(score).add(script.getScore()).doubleValue();
                                    score = BigDecimal.valueOf(score).add(new BigDecimal(script.getScore())).doubleValue();
                                    redisCache.setCacheObject(phoneCallReqYQVO.getUuid() + "SCORE", score, 120, TimeUnit.MINUTES);
                                }
@@ -2286,7 +2307,7 @@
                            Double score = null;
                            Object scoreObj = redisCache.getCacheObject(phoneCallReqYQVO.getUuid() + "SCORE");
                            if (ObjectUtils.isNotEmpty(scoreObj)) score = (Double) scoreObj;
                            score = BigDecimal.valueOf(score).add(ivrTaskTemplateScriptVO.getScore()).doubleValue();
                            score = BigDecimal.valueOf(score).add(new BigDecimal(ivrTaskTemplateScriptVO.getScore())).doubleValue();
                            redisCache.setCacheObject(phoneCallReqYQVO.getUuid() + "SCORE", score, 120, TimeUnit.MINUTES);
                        }
@@ -2302,7 +2323,7 @@
                    Double score = null;
                    Object scoreObj = redisCache.getCacheObject(phoneCallReqYQVO.getUuid() + "SCORE");
                    if (ObjectUtils.isNotEmpty(scoreObj)) score = (Double) scoreObj;
                    serviceSubtask.setScore(BigDecimal.valueOf(score));
                    serviceSubtask.setScore(String.valueOf(score));
                    serviceSubtask.setFinishtime(new Date());
                    serviceSubtask.setRemark("电话拨打已完成");
                    serviceSubtask.setSendstate(6L);
@@ -4901,9 +4922,10 @@
            if (smsResult != null && smsResult.get("result") != null && smsResult.get("result").toString().equals("0")) {
                resultMap.put("code", "200");
                resultMap.put("msg", "发送成功");
                serviceSubtask.setRemark(StringUtils.isNotEmpty(serviceSubtask.getRemark()) ? serviceSubtask.getRemark() + ";短信发送成功" : "短信发送成功");
                serviceSubtask.setRemark(StringUtils.isNotEmpty(serviceSubtask.getRemark()) ? serviceSubtask.getRemark() + ";短信发送成功(手动提交)" : "短信发送成功(手动提交)");
                log.info("是否发送成功:{}", serviceSubtask.getRemark());
                updateServiceSubtask(serviceSubtask);
                serviceSubtask.setSendstate(3L);
                serviceSubtask.setCurrentPreachform("4");
            }
        }
        return resultMap;
@@ -4911,6 +4933,11 @@
    @Override
    public List<ServiceSubtaskDetailRatioExport> statQuestionOption(List<Long> taskIds, Date startOutHospTime, Date endOutHospTime) {
        //先清理一下重复数据
        List<Long> repeatIds = serviceSubtaskDetailMapper.selectRepeatDetailIds();
        if (!CollectionUtils.isEmpty(repeatIds)) {
            serviceSubtaskDetailMapper.deleteRepeatDetailByIds(repeatIds);
        }
        return serviceSubtaskMapper.statQuestionOption(taskIds, startOutHospTime, endOutHospTime);
    }
@@ -5102,7 +5129,7 @@
                        String format = String.format("%03X", serviceOutPath.getId());
                        serviceOutPath.setRadix(format);
                        serviceOutPath.setUpdateTime(new Date());
                        String url = ip + ":" + req_path + "/wt?p=" + format;
                        String url = StringUtils.isNotEmpty(req_path) ? ip + ":" + req_path + "/wt?p=" + format : ip + "/wt?p=" + format;
                        content = url;
                        serviceOutPath.setUrl(url);
                        iServiceOutPathService.updateServiceOutPath(serviceOutPath);
@@ -5164,6 +5191,7 @@
    /**
     * Ai 匹配选项
     *
     * @param questionText
     * @param voiceText
     * @param options
@@ -5196,9 +5224,7 @@
        }
    }
    public PhoneCallBackYQVO AiMatch(String url, PhoneCallReqYQVO phoneCallReqYQVO, PhoneCallBackYQVO phoneCallBackYQVO,
                        IvrTaskTemplateScriptVO ivrTaskTemplateScriptVO, ServiceSubtask serviceSubtask, IvrTaskTemplate ivrTaskTemplate,
                        List<IvrTaskTemplateScript> ivrTaskTemplateScripts, String scriptId, Integer flag, String uuid){
    public PhoneCallBackYQVO AiMatch(String url, PhoneCallReqYQVO phoneCallReqYQVO, PhoneCallBackYQVO phoneCallBackYQVO, IvrTaskTemplateScriptVO ivrTaskTemplateScriptVO, ServiceSubtask serviceSubtask, IvrTaskTemplate ivrTaskTemplate, List<IvrTaskTemplateScript> ivrTaskTemplateScripts, String scriptId, Integer flag, String uuid) {
        PhoneCallBackYQVO back = null;
        List<IvrTaskTemplateTargetoption> options = ivrTaskTemplateScriptVO.getIvrTaskScriptTargetoptionList();
        String voiceText = phoneCallReqYQVO.getAsrtext();
@@ -5311,14 +5337,14 @@
                    nextQuestion = chosenOption.getNextQuestion();
                    //更新分数
                    double score = redisCache.getCacheObject(phoneCallReqYQVO.getUuid() + "SCORE");
                    score = BigDecimal.valueOf(score).add(chosenOption.getScore()).doubleValue();
                    score = BigDecimal.valueOf(score).add(new BigDecimal(chosenOption.getScore())).doubleValue();
                    redisCache.setCacheObject(phoneCallReqYQVO.getUuid() + "SCORE", score);
                } else {
                    nextQuestion = ivrTaskTemplateScriptVO.getNextScriptno();
                    //更新分数
                    Object obj = redisCache.getCacheObject(phoneCallReqYQVO.getUuid() + "SCORE");
                    Double score = (obj == null ? new Double(0.00) : new Double(((Double) obj).doubleValue()));
                    score = BigDecimal.valueOf(score).add(chosenOption.getScore()).doubleValue();
                    score = BigDecimal.valueOf(score).add(new BigDecimal(String.valueOf(chosenOption.getScore()))).doubleValue();
                    redisCache.setCacheObject(phoneCallReqYQVO.getUuid() + "SCORE", score, 120, TimeUnit.MINUTES);
                }
                if (nextQuestion == null || nextQuestion == 0L) {
@@ -5373,7 +5399,7 @@
                double score = 0.0;
                Object scoreObj = redisCache.getCacheObject(phoneCallReqYQVO.getUuid() + "SCORE");
                if (ObjectUtils.isNotEmpty(scoreObj)) score = (double) scoreObj;
                serviceSubtask.setScore(BigDecimal.valueOf(score));
                serviceSubtask.setScore(String.valueOf(score));
                serviceSubtask.setFinishtime(new Date());
                serviceSubtask.setSendstate(6L);
                serviceSubtask.setRemark("电话拨打已完成");
@@ -5385,8 +5411,7 @@
                Long id = serviceSubtask.getId();
                Map<String, String> map = delRedisValue(null, id.toString());
                log.error("map的值为:{}", map);
                if (ObjectUtils.isNotEmpty(map))
                    redisCache.setCacheObject(map.get("cacheName"), map.get("val"));
                if (ObjectUtils.isNotEmpty(map)) redisCache.setCacheObject(map.get("cacheName"), map.get("val"));
                redisCache.deleteObject(serviceSubtask.getId() + "-" + serviceSubtask.getPhone());
                redisCache.deleteObject(phoneCallReqYQVO.getTaskid().trim() + "&&" + "mate" + "&&" + phoneCallReqYQVO.getUuid());
                redisCache.deleteObject(phoneCallReqYQVO.getUuid() + "SCORE");