| | |
| | | package com.smartor.service.impl; |
| | | |
| | | import com.alibaba.fastjson2.JSON; |
| | | import com.fasterxml.jackson.annotation.JsonFormat; |
| | | import com.fasterxml.jackson.core.JsonProcessingException; |
| | | import com.fasterxml.jackson.databind.ObjectMapper; |
| | | import com.google.gson.Gson; |
| | |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.apache.commons.collections4.CollectionUtils; |
| | | import org.apache.commons.lang3.ObjectUtils; |
| | | import org.apache.commons.lang3.StringUtils; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.beans.factory.annotation.Value; |
| | | import org.springframework.data.redis.core.ListOperations; |
| | |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.math.RoundingMode; |
| | | import java.text.DecimalFormat; |
| | | import java.text.SimpleDateFormat; |
| | | import java.time.Duration; |
| | |
| | | public class ServiceSubtaskServiceImpl implements IServiceSubtaskService { |
| | | @Autowired |
| | | private ServiceSubtaskMapper serviceSubtaskMapper; |
| | | |
| | | @Autowired |
| | | private ServiceSubtaskPreachformMapper serviceSubtaskPreachformMapper; |
| | | |
| | | @Autowired |
| | | private ServiceSubtaskDetailMapper serviceSubtaskDetailMapper; |
| | |
| | | |
| | | ServiceTask serviceTask = serviceTaskService.selectServiceTaskByTaskid(serviceSubtask.getTaskid()); |
| | | if (CollectionUtils.isEmpty(list) || list.size() == 0) { |
| | | return DtoConversionUtils.sourceToTarget(serviceTask, ServiceTaskVO.class); |
| | | } |
| | | ServiceTaskVO serviceTaskVO = DtoConversionUtils.sourceToTarget(serviceTask, ServiceTaskVO.class); |
| | | ObjectMapper objectMapper = new ObjectMapper(); |
| | | try { |
| | | List<Map<String, Object>> mapList = objectMapper.readValue(serviceTask.getPreachform(), List.class); |
| | | serviceTaskVO.setPreachformList(mapList); |
| | | |
| | | String result = mapList.stream().map(mapList1 -> mapList1.get("preachform")).map(String::valueOf).collect(Collectors.joining(",")); |
| | | serviceTaskVO.setPreachform(result); |
| | | } catch (JsonProcessingException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | |
| | | |
| | | return serviceTaskVO; |
| | | } |
| | | |
| | | //将查出来的数据倒入ServiceSubtaskVO中 |
| | | ServiceTaskVO serviceTaskVO = DtoConversionUtils.sourceToTarget(serviceTask, ServiceTaskVO.class); |
| | |
| | | patTaskRelevance.setNurseName(serviceSubtask1.getNurseName()); |
| | | patTaskRelevances.add(patTaskRelevance); |
| | | } |
| | | |
| | | //获取该患者所有的执行状态 |
| | | ServiceSubtaskPreachform serviceSubtaskPreachform = new ServiceSubtaskPreachform(); |
| | | serviceSubtaskPreachform.setTaskid(serviceTask.getTaskid()); |
| | | serviceSubtaskPreachform.setSubid(serviceSubtask1.getId()); |
| | | List<ServiceSubtaskPreachform> serviceSubtaskPreachformList = serviceSubtaskPreachformMapper.selectServiceSubtaskPreachformList(serviceSubtaskPreachform); |
| | | List<Map<String, Object>> resultList = serviceSubtaskPreachformList.stream().map(item -> { |
| | | Map<String, Object> map = new HashMap<>(); |
| | | map.put("sort", item.getSort()); |
| | | map.put("preachform", item.getPreachform()); |
| | | map.put("compensateTime", item.getCompensateTime()); |
| | | return map; |
| | | }).collect(Collectors.toList()); |
| | | serviceTaskVO.setPreachformList(resultList); |
| | | |
| | | String result = resultList.stream().map(mapList1 -> mapList1.get("preachform")).map(String::valueOf).collect(Collectors.joining(",")); |
| | | serviceTaskVO.setPreachform(result); |
| | | } |
| | | |
| | | serviceTaskVO.setPatTaskRelevances(patTaskRelevances); |
| | |
| | | if (serviceSubtask.getSendstate() >= 3L || serviceSubtask.getSendstate() == 1L) yfs = yfs + 1; |
| | | if (serviceSubtask.getSendstate() == 2L) dsf = dsf + 1; |
| | | if (serviceSubtask.getSendstate() == 1L) blq = blq + 1; |
| | | if (serviceSubtask.getExcep().equals("1")) yc = yc + 1; |
| | | if (StringUtils.isNotEmpty(serviceSubtask.getExcep()) && !serviceSubtask.getExcep().equals("0")) |
| | | yc = yc + 1; |
| | | } |
| | | map.put("wzx", wzx); |
| | | map.put("ysf", ysf); |
| | |
| | | throw new BaseException("任务入参为空,请检查入参"); |
| | | } |
| | | ServiceTask serviceTask = DtoConversionUtils.sourceToTarget(serviceTaskVO, ServiceTask.class); |
| | | if (CollectionUtils.isEmpty(serviceTaskVO.getPreachformList())) throw new BaseException("任务的发送方式为空"); |
| | | //将preachfromList放到serviceTask中的preachfrom中 |
| | | ObjectMapper mapper = new ObjectMapper(); |
| | | try { |
| | | String preachformList = mapper.writeValueAsString(serviceTaskVO.getPreachformList()); |
| | | serviceTask.setPreachform(preachformList); |
| | | } catch (JsonProcessingException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | |
| | | serviceTask.setTextParam(JSON.toJSONString(serviceTaskVO.getTextParam())); |
| | | if (serviceTaskVO.getIsoperation() != null && serviceTaskVO.getIsoperation() == 1) { |
| | | //新增模板信息 |
| | |
| | | ServiceTaskdiag serviceTaskdiag = new ServiceTaskdiag(); |
| | | serviceTaskdiag.setTaskId(serviceTask.getTaskid()); |
| | | serviceTaskdiag.setTaskName(serviceTask.getTaskName()); |
| | | serviceTaskdiag.setLongtask(0L); |
| | | serviceTaskdiag.setLongtask(Long.valueOf(serviceTask.getLongTask())); |
| | | if (serviceTaskVO.getLongTask() == 1) serviceTaskdiag.setLongtask(1L); |
| | | serviceTaskdiag.setIcd10code(serviceTaskVO.getIcd10code()); |
| | | serviceTaskdiag.setIcd10name(serviceTaskVO.getIcd10name()); |
| | |
| | | serviceTaskoper.setOpdesc(serviceTaskVO.getOpdesc()); |
| | | serviceTaskoper.setTaskId(serviceTask.getTaskid()); |
| | | serviceTaskoper.setTaskName(serviceTask.getTaskName()); |
| | | serviceTaskoper.setLongtask(0L); |
| | | serviceTaskoper.setLongtask(Long.valueOf(serviceTask.getLongTask())); |
| | | serviceTaskoper.setGuid(serviceTask.getGuid()); |
| | | serviceTaskoper.setOrgid(serviceTask.getOrgid()); |
| | | serviceTaskoper.setCreateTime(new Date()); |
| | | if (serviceTaskVO.getLongTask() == 1) serviceTaskoper.setLongtask(1L); |
| | | if (StringUtils.isNotEmpty(serviceTaskVO.getOpcode())) { |
| | | String[] opcodes = serviceTaskVO.getOpcode().split(","); |
| | | for (String opcode : opcodes) { |
| | |
| | | serviceTaskdept.setTaskId(serviceTask.getTaskid()); |
| | | serviceTaskdept.setTaskName(serviceTask.getTaskName()); |
| | | serviceTaskdept.setOrgid(serviceTask.getOrgid()); |
| | | serviceTaskdept.setLongtask(0L); |
| | | if (serviceTaskVO.getLongTask() == 1) serviceTaskdept.setLongtask(1L); |
| | | serviceTaskdept.setLongtask(Long.valueOf(serviceTaskVO.getLongTask())); |
| | | if (StringUtils.isNotEmpty(serviceTaskVO.getDeptcode())) { |
| | | String[] deptcodes = serviceTaskVO.getDeptcode().split(","); |
| | | for (String deptCode : deptcodes) { |
| | |
| | | } |
| | | } |
| | | } |
| | | if (serviceTaskVO.getLongTask() != null && serviceTaskVO.getLongTask() == 1 && serviceTaskVO.getPatCycle() == 0L) { |
| | | Map<String, Integer> map = new HashMap<>(); |
| | | map.put("taskId", serviceTask.getTaskid().intValue()); |
| | | return map; |
| | | } |
| | | //长期任务,也允许加人了 |
| | | // if (serviceTaskVO.getLongTask() != null && serviceTaskVO.getLongTask() == 1 && serviceTaskVO.getPatCycle() == 0L) { |
| | | // Map<String, Integer> map = new HashMap<>(); |
| | | // map.put("taskId", serviceTask.getTaskid().intValue()); |
| | | // return map; |
| | | // } |
| | | |
| | | //将任务信息放到服务表中 |
| | | ServiceSubtask serviceSubtask = DtoConversionUtils.sourceToTarget(serviceTaskVO, ServiceSubtask.class); |
| | |
| | | serviceSubtask.setNurseName(patTaskRelevance.getNurseName()); |
| | | serviceSubtask.setCreateBy(serviceTask.getCreateBy()); |
| | | serviceSubtask.setUpdateBy(serviceTask.getCreateBy()); |
| | | serviceSubtask.setVisitTime(patTaskRelevance.getVisitTime()); |
| | | serviceSubtask.setVisitTime(patTaskRelevance.getVisittime()); |
| | | if (serviceTaskVO.getLongTask() != null && serviceTaskVO.getLongTask() == 1) |
| | | serviceSubtask.setLongSendTime(patTaskRelevance.getLongSendTime()); |
| | | serviceSubtaskMapper.insertServiceSubtask(serviceSubtask); |
| | | serviceSubtask.getId().intValue(); |
| | | |
| | | //需要按service_task里的preachform的顺序将发送方式保存到service_subtask_preachform表中 |
| | | if (StringUtils.isNotEmpty(serviceTaskVO.getPreachformList())) { |
| | | List<Map<String, Object>> pfList = serviceTaskVO.getPreachformList(); |
| | | for (Map<String, Object> map : pfList) { |
| | | ServiceSubtaskPreachform serviceSubtaskPreachform = new ServiceSubtaskPreachform(); |
| | | serviceSubtaskPreachform.setSort(ObjectUtils.isEmpty(map.get("sort")) ? 0 : Long.valueOf(map.get("sort").toString())); |
| | | serviceSubtaskPreachform.setPreachform(ObjectUtils.isEmpty(map.get("preachform")) ? "" : map.get("preachform").toString()); |
| | | serviceSubtaskPreachform.setCompensateTime(ObjectUtils.isEmpty(map.get("compensateTime")) ? "" : map.get("preachcompensateTimeform").toString()); |
| | | serviceSubtaskPreachform.setTaskid(serviceTask.getTaskid()); |
| | | serviceSubtaskPreachform.setSubid(serviceSubtask.getId()); |
| | | //这个sendstate需要在数据库设置一个默认值为“1” |
| | | serviceSubtaskPreachform.setSendstate("1"); |
| | | serviceSubtaskPreachform.setOrgid(serviceTask.getOrgid()); |
| | | serviceSubtaskPreachform.setCreateTime(new Date()); |
| | | serviceSubtaskPreachformMapper.insertServiceSubtaskPreachform(serviceSubtaskPreachform); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | |
| | | serviceTask.setSendTimeSlot(JSON.toJSONString(serviceTaskVO.getSendTimeslot())); |
| | | //修改操作,需要将stopState状态+1 |
| | | ServiceTask serviceTask1 = serviceTaskService.selectServiceTaskByTaskid(serviceTask.getTaskid()); |
| | | // long l = serviceTask1.getStopState() + 1; |
| | | // serviceTask.setStopState(l); |
| | | //获取到该任务所有的服务,并从队列里删除 |
| | | ServiceSubtaskVO serviceSubtaskVO = new ServiceSubtaskVO(); |
| | | serviceSubtaskVO.setTaskid(serviceTask1.getTaskid()); |
| | |
| | | } else { |
| | | if (CollectionUtils.isNotEmpty(serviceSubtaskList1)) serviceSubtaskList = serviceSubtaskList1; |
| | | } |
| | | if (CollectionUtils.isNotEmpty(serviceSubtaskList)) { |
| | | for (ServiceSubtask serviceSubtask : serviceSubtaskList) { |
| | | log.info("insertOrUpdateTask需要移除的subId为:{}", serviceSubtask.getId().toString()); |
| | | serviceSubtaskMapper.deleteServiceSubtaskById(serviceSubtask.getId()); |
| | | redisCache.removeElementFromList("cache-exist", serviceSubtask.getId().toString()); |
| | | redisCache.removeElementFromList("cache-0", serviceSubtask.getId().toString()); |
| | | redisCache.removeElementFromList("cache-1", serviceSubtask.getId().toString()); |
| | | redisCache.removeElementFromList("cache-2", serviceSubtask.getId().toString()); |
| | | redisCache.removeElementFromList("cache-3", serviceSubtask.getId().toString()); |
| | | redisCache.removeElementFromList("cache-4", serviceSubtask.getId().toString()); |
| | | } |
| | | } |
| | | |
| | | if (serviceTaskVO.getLibtemplateid() != null) |
| | | serviceTask.setLibtemplateid(serviceTaskVO.getLibtemplateid().toString()); |
| | |
| | | serviceTask.setUpdateTime(new Date()); |
| | | serviceTaskService.updateServiceTask(serviceTask); |
| | | if (serviceTaskVO.getAppltype().equals("1") || serviceTaskVO.getAppltype().equals("2")) { |
| | | |
| | | |
| | | if (StringUtils.isNotEmpty(serviceTaskVO.getDeptcode())) { |
| | | String[] deptcodes = serviceTaskVO.getDeptcode().split(","); |
| | | for (String deptCode : deptcodes) { |
| | | ServiceTaskdept serviceTaskdept = new ServiceTaskdept(); |
| | | serviceTaskdept.setTaskId(serviceTask.getTaskid()); |
| | | serviceTaskdept.setTaskName(serviceTask.getTaskName()); |
| | | serviceTaskdept.setLongtask(0L); |
| | | serviceTaskdept.setLongtask(Long.valueOf(serviceTask.getLongTask())); |
| | | serviceTaskdept.setOrgid(serviceTaskVO.getOrgid()); |
| | | if (serviceTaskVO.getLongTask() == 1) serviceTaskdept.setLongtask(1L); |
| | | serviceTaskdept.setDeptCode(deptCode); |
| | | serviceTaskdept.setDeptType("1"); |
| | | serviceTaskdept.setServiceType(serviceTaskVO.getServiceType()); |
| | |
| | | ServiceTaskdept serviceTaskdept = new ServiceTaskdept(); |
| | | serviceTaskdept.setTaskId(serviceTask.getTaskid()); |
| | | serviceTaskdept.setTaskName(serviceTask.getTaskName()); |
| | | serviceTaskdept.setLongtask(0L); |
| | | serviceTaskdept.setLongtask(Long.valueOf(serviceTask.getLongTask())); |
| | | serviceTaskdept.setOrgid(serviceTaskVO.getOrgid()); |
| | | if (serviceTaskVO.getLongTask() == 1) serviceTaskdept.setLongtask(1L); |
| | | serviceTaskdept.setDeptCode(districtcode); |
| | | serviceTaskdept.setDeptType("2"); |
| | | serviceTaskdept.setServiceType(serviceTaskVO.getServiceType()); |
| | |
| | | if (StringUtils.isEmpty(serviceTaskVO.getIcd10code())) { |
| | | throw new BaseException("疾病编码为空"); |
| | | } |
| | | // serviceTaskdiag.setIcd10code(serviceTaskVO.getIcd10code()); |
| | | |
| | | serviceTaskdiag.setLongtask(1L); |
| | | serviceTaskdiag.setLongtask(Long.valueOf(serviceTask.getLongTask())); |
| | | serviceTaskdiag.setIcd10name(serviceTaskVO.getIcd10name()); |
| | | serviceTaskdiag.setGuid(serviceTask.getGuid()); |
| | | serviceTaskdiag.setOrgid(serviceTask.getOrgid()); |
| | |
| | | } |
| | | } |
| | | |
| | | |
| | | } else if (serviceTaskVO.getAppltype().equals("4")) { |
| | | ServiceTaskoper serviceTaskoper = new ServiceTaskoper(); |
| | | if (StringUtils.isEmpty(serviceTaskVO.getOpcode())) { |
| | |
| | | serviceTaskoper.setOpdesc(serviceTaskVO.getOpdesc()); |
| | | serviceTaskoper.setTaskId(serviceTask.getTaskid()); |
| | | serviceTaskoper.setTaskName(serviceTask.getTaskName()); |
| | | serviceTaskoper.setLongtask(1L); |
| | | serviceTaskoper.setLongtask(Long.valueOf(serviceTask.getLongTask())); |
| | | serviceTaskoper.setGuid(serviceTask.getGuid()); |
| | | serviceTaskoper.setOrgid(serviceTask.getOrgid()); |
| | | serviceTaskoper.setCreateTime(new Date()); |
| | |
| | | } |
| | | } |
| | | } |
| | | |
| | | } |
| | | if (ObjectUtils.isNotEmpty(serviceTaskVO.getIvrTaskTemplateVO())) { |
| | | IvrTaskTemplate ivrTaskTemplate = new IvrTaskTemplate(); |
| | |
| | | serviceSubtask.setEndtime(patTaskRelevance.getEndtime()); |
| | | serviceSubtask.setNurseId(patTaskRelevance.getNurseId()); |
| | | serviceSubtask.setNurseName(patTaskRelevance.getNurseName()); |
| | | serviceSubtask.setVisitTime(patTaskRelevance.getVisitTime()); |
| | | serviceSubtask.setVisitTime(patTaskRelevance.getVisittime()); |
| | | serviceSubtask.setTextParam(new Gson().toJson(serviceTaskVO.getTextParam())); |
| | | if (patTaskRelevance.getIsoperation() != null) { |
| | | if (patTaskRelevance.getIsoperation() == 2) |
| | | if (patTaskRelevance.getIsoperation() == 2) { |
| | | serviceSubtask.setUpdateBy(serviceTask.getUpdateBy()); |
| | | serviceSubtaskMapper.updateServiceSubtaskByCondition(serviceSubtask); |
| | | serviceSubtaskMapper.updateServiceSubtaskByCondition(serviceSubtask); |
| | | } |
| | | if (patTaskRelevance.getIsoperation() == 1) { |
| | | serviceSubtask.setSendstate(1L); |
| | | serviceSubtask.setUpdateBy(serviceTask.getUpdateBy()); |
| | |
| | | serviceSubtaskMapper.deleteServiceSubtaskByCondition(serviceTaskVO.getTaskid(), patTaskRelevance.getPatid()); |
| | | } |
| | | serviceSubtask.getTaskid().intValue(); |
| | | } |
| | | } |
| | | // 有可能会把发送顺序也修改了(需要根据taskId将所有的sendstate!=4,5,6的subTask拉出来,进行修改一下) |
| | | ServiceSubtaskVO ssVo = new ServiceSubtaskVO(); |
| | | ssVo.setTaskid(serviceTaskVO.getTaskid()); |
| | | ssVo.setDelFlag("0"); |
| | | List<Long> ssList = new ArrayList<>(); |
| | | ssList.add(1l); |
| | | ssList.add(2L); |
| | | ssList.add(3L); |
| | | ssVo.setSendstates(ssList); |
| | | List<ServiceSubtask> ssTaskList = serviceSubtaskMapper.selectServiceSubtaskBySendstate(ssVo); |
| | | for (int i = 0; i < ssTaskList.size(); i++) { |
| | | ServiceSubtask serviceSubtask = ssTaskList.get(i); |
| | | serviceSubtaskPreachformMapper.deleteServiceSubtaskPreachformBySubid(serviceSubtask.getId()); |
| | | if (StringUtils.isNotEmpty(serviceTaskVO.getPreachformList())) { |
| | | List<Map<String, Object>> pfList = serviceTaskVO.getPreachformList(); |
| | | for (Map<String, Object> map : pfList) { |
| | | ServiceSubtaskPreachform serviceSubtaskPreachform = new ServiceSubtaskPreachform(); |
| | | serviceSubtaskPreachform.setSort(ObjectUtils.isEmpty(map.get("sort")) ? 0 : Long.valueOf(map.get("sort").toString())); |
| | | serviceSubtaskPreachform.setPreachform(ObjectUtils.isEmpty(map.get("preachform")) ? "" : map.get("preachform").toString()); |
| | | serviceSubtaskPreachform.setCompensateTime(ObjectUtils.isEmpty(map.get("compensateTime")) ? "" : map.get("preachcompensateTimeform").toString()); |
| | | serviceSubtaskPreachform.setTaskid(serviceTask.getTaskid()); |
| | | serviceSubtaskPreachform.setSubid(serviceSubtask.getId()); |
| | | //这个sendstate需要在数据库设置一个默认值为“1” |
| | | serviceSubtaskPreachform.setSendstate("1"); |
| | | serviceSubtaskPreachform.setOrgid(serviceTask.getOrgid()); |
| | | // serviceSubtaskPreachform.setSort(Long.valueOf(i)); |
| | | serviceSubtaskPreachformMapper.insertServiceSubtaskPreachform(serviceSubtaskPreachform); |
| | | } |
| | | } |
| | | } |
| | | } |
| | |
| | | //有下一题 |
| | | redisCache.setCacheObject(phoneCallBackVO.getUuid() + "noVoice", 0, 120, TimeUnit.MINUTES); |
| | | IvrTaskTemplateScriptVO nextQuestion = getNextQuestion(IvrTaskTemplateScriptVOs, nowQuestion); |
| | | // 问题, 去调用“tts合成和播放”接口 |
| | | // 问题, 去调用"tts合成和播放"接口 |
| | | String date = simpleDateFormat1.format(new Date()); |
| | | log.info("去调用tts合成和播放接口: {},uuid为:{}", date, phoneCallBackVO.getUuid()); |
| | | phoneUtils.ttsPlayback(nowQuestion.getIvrtext(), phoneCallBackVO.getUuid()); |
| | |
| | | redisCache.setCacheObject(phoneCallBackVO.getUuid() + "noVoice", noVoice + 1, 120, TimeUnit.MINUTES); |
| | | //调用ivrLibaTemplateScriptVO中的slienceText(静默话术) |
| | | String slienceText = nowQuestion.getSlienceText(); |
| | | //静默话术 + 问题, 去调用“tts合成和播放”接口 |
| | | //静默话术 + 问题, 去调用"tts合成和播放"接口 |
| | | String date = simpleDateFormat1.format(new Date()); |
| | | log.info("静默话术 + 问题,去调用tts合成和播放接口: {},uuid为:{}", date, phoneCallBackVO.getUuid()); |
| | | phoneUtils.ttsPlayback(slienceText + nowQuestion.getIvrtext(), phoneCallBackVO.getUuid()); |
| | |
| | | redisCache.setCacheObject(phoneCallBackVO.getUuid() + "returnQues", questionMessage, 120, TimeUnit.MINUTES); |
| | | redisCache.setCacheObject(phoneCallBackVO.getUuid() + "isOver", 1, 120, TimeUnit.MINUTES); |
| | | } |
| | | //调用“15、tts合成和播放, tts_playback”将结果传回 |
| | | //调用"15、tts合成和播放, tts_playback"将结果传回 |
| | | String date = simpleDateFormat1.format(new Date()); |
| | | log.info("调用“15、tts合成和播放------: {},uuid为:{}", date, phoneCallBackVO.getUuid()); |
| | | log.info("调用tts合成和播放------: {},uuid为:{}", date, phoneCallBackVO.getUuid()); |
| | | phoneUtils.ttsPlayback(nowQuestion.getIvrtext() + ivrTaskTemplateScriptVO.getSubmoduleText(), phoneCallBackVO.getUuid()); |
| | | } |
| | | break; |
| | |
| | | //判断是否挂机 |
| | | String hangupState = redisCache.getCacheObject(phoneCallReqYQVO.getUuid() + "- hangup"); |
| | | Object cacheObject1 = redisCache.getCacheObject(phoneCallReqYQVO.getTaskid() + "recordAccept-hungup"); |
| | | if (StringUtils.isNotEmpty(hangupState) && hangup.equals("1") || ObjectUtils.isNotEmpty(cacheObject1) && String.valueOf(cacheObject1).equals("1")) { |
| | | if (StringUtils.isNotEmpty(hangupState) && hangupState.equals("1") || ObjectUtils.isNotEmpty(cacheObject1) && String.valueOf(cacheObject1).equals("1")) { |
| | | return new PhoneCallBackYQVO(); |
| | | } |
| | | if ("AsrCallback".equals(phoneCallReqYQVO.getOperate()) && phoneCallReqYQVO.getEnd_time() != null && phoneCallReqYQVO.getEnd_time() != -1) { |
| | | //处理挂断 |
| | | if (phoneCallReqYQVO.getAsrtext().contains("拨叫的用户正忙")) { |
| | | //判断 recordAccept-hungup 是否有值,如果有,则说明不用处理了,之前已经处理过了(recordAccept-hungup这个主要是给“通话记录用的,”) |
| | | //判断 recordAccept-hungup 是否有值,如果有,则说明不用处理了,之前已经处理过了(recordAccept-hungup这个主要是给"通话记录用的,") |
| | | Object cacheObject = redisCache.getCacheObject(phoneCallReqYQVO.getTaskid() + "recordAccept-hungup"); |
| | | if (ObjectUtils.isNotEmpty(cacheObject) && String.valueOf(cacheObject).equals("1")) { |
| | | ServiceSubtask serviceSubtask = serviceSubtaskMapper.selectServiceSubtaskById(Long.valueOf(phoneCallReqYQVO.getTaskid())); |
| | | setFailPreachForm(serviceSubtask, "3", "拨叫的用户正忙", "4"); |
| | | return new PhoneCallBackYQVO(); |
| | | } |
| | | //如果发送状态为6,就说明已经打完了,也没有必要继续往下走了 |
| | |
| | | //先把默认的recordAccept-hungup删除,再更新 |
| | | redisCache.deleteObject(phoneCallReqYQVO.getTaskid() + "recordAccept-hungup"); |
| | | redisCache.setCacheObject(phoneCallReqYQVO.getTaskid() + "recordAccept-hungup", "1", 10, TimeUnit.MINUTES); |
| | | |
| | | //记录电话发送状态 |
| | | setFailPreachForm(serviceSubtask2, "3", "电话发送成功(患者挂断)", "4"); |
| | | |
| | | //这个时候就需要走补偿机制了,先暂定走短信 |
| | | getSmsCompensate(Long.valueOf(phoneCallReqYQVO.getTaskid())); |
| | | // getSmsCompensate(Long.valueOf(phoneCallReqYQVO.getTaskid())); |
| | | return new PhoneCallBackYQVO(); |
| | | } |
| | | } |
| | |
| | | req.put("caller", phoneCallReqYQVO.getPhone()); |
| | | // HttpUtils.sendPost(hangup, new Gson().toJson(req)); |
| | | HttpUtil.postJsonRequest(hangup, new Gson().toJson(req)); |
| | | ServiceSubtask serviceSubtask = serviceSubtaskMapper.selectServiceSubtaskById(Long.valueOf(phoneCallReqYQVO.getTaskid())); |
| | | //记录电话发送状态 |
| | | setFailPreachForm(serviceSubtask, "3", "通话正常结束", "9"); |
| | | //删除结束语的患存 |
| | | redisCache.deleteObject(phoneCallReqYQVO.getUuid() + "- jsy"); |
| | | } else { |
| | |
| | | log.error("-------PlayEventCallbackPlaystop的值为:{}", true); |
| | | } |
| | | } |
| | | |
| | | return phoneCallBackYQVO; |
| | | } |
| | | //获取放音是否结束 |
| | |
| | | serviceSubtask.setUpdateTime(new Date()); |
| | | log.error("先更新一下分数,电话的serviceSubtask的值为:{}", serviceSubtask); |
| | | serviceSubtaskMapper.updateServiceSubtask(serviceSubtask); |
| | | //记录状态 |
| | | setFailPreachForm(serviceSubtask, "3", "静默次数达到" + num + "次", "4"); |
| | | |
| | | Map<String, String> map = delRedisValue(null, id.toString()); |
| | | if (ObjectUtils.isNotEmpty(map)) redisCache.setCacheObject(map.get("cacheName"), map.get("val")); |
| | | redisCache.deleteObject(serviceSubtask.getId() + "-" + serviceSubtask.getPhone()); |
| | |
| | | ss.setSendstate(6L); |
| | | ss.setRemark("电话拨打已完成"); |
| | | serviceSubtaskMapper.updateServiceSubtask(ss); |
| | | //记录状态 |
| | | setFailPreachForm(serviceSubtask, "3", "电话拨打已完成", "9"); |
| | | //可以挂机了 |
| | | redisCache.deleteObject(serviceSubtask.getId() + "-" + serviceSubtask.getPhone()); |
| | | redisCache.deleteObject(phoneCallReqYQVO.getUuid() + "SCORE"); |
| | |
| | | redisCache.setCacheObject(phoneCallReqYQVO.getUuid() + "- jsy", serviceTask.getJsy(), 120, TimeUnit.MINUTES); |
| | | phoneCallBackYQVO.setType("text"); |
| | | phoneCallBackYQVO.setValue(phoneCallBackYQVO.getCommonValue() + serviceTask.getJsy()); |
| | | //记录状态 |
| | | setFailPreachForm(serviceSubtask, "3", "电话拨打已完成", "9"); |
| | | return phoneCallBackYQVO; |
| | | } |
| | | |
| | |
| | | ss.setSendstate(6L); |
| | | ss.setRemark("电话拨打已完成"); |
| | | serviceSubtaskMapper.updateServiceSubtask(ss); |
| | | //记录状态 |
| | | setFailPreachForm(serviceSubtask, "3", "电话拨打已完成", "9"); |
| | | |
| | | redisCache.deleteObject(serviceSubtask.getId() + "-" + serviceSubtask.getPhone()); |
| | | redisCache.deleteObject(phoneCallReqYQVO.getUuid() + "SCORE"); |
| | | redisCache.deleteObject(phoneCallReqYQVO.getUuid() + "PlayEventCallbackPlaystop"); |
| | |
| | | serviceSubtask.setSendstate(6L); |
| | | serviceSubtask.setRemark("电话拨打已完成"); |
| | | serviceSubtaskMapper.updateServiceSubtask(serviceSubtask); |
| | | //记录状态 |
| | | setFailPreachForm(serviceSubtask, "3", "电话拨打已完成", "9"); |
| | | //设置结束语 |
| | | phoneCallBackYQVO.setValue(phoneCallBackYQVO.getCommonValue() + serviceTask1.getJsy()); |
| | | Long id = serviceSubtask.getId(); |
| | |
| | | serviceSubtask.setSendstate(6L); |
| | | serviceSubtask.setRemark("电话拨打已完成"); |
| | | serviceSubtaskMapper.updateServiceSubtask(serviceSubtask); |
| | | |
| | | //记录状态 |
| | | setFailPreachForm(serviceSubtask, "3", "电话拨打已完成", "9"); |
| | | //在redis中保存一下结束语,在调用挂电话的方法时删除 |
| | | ServiceTask serviceTask = serviceTaskService.selectServiceTaskByTaskid(serviceSubtask.getTaskid()); |
| | | redisCache.setCacheObject(phoneCallReqYQVO.getUuid() + "- jsy", serviceTask.getJsy(), 120, TimeUnit.MINUTES); |
| | |
| | | serviceSubtask.setRemark("电话拨打已完成"); |
| | | serviceSubtask.setSendstate(6L); |
| | | serviceSubtaskMapper.updateServiceSubtask(serviceSubtask); |
| | | |
| | | //记录状态 |
| | | setFailPreachForm(serviceSubtask, "3", "电话拨打已完成", "9"); |
| | | //去redis中,把该子任务ID删除 |
| | | Long id = serviceSubtask.getId(); |
| | | Map<String, String> map = delRedisValue(null, id.toString()); |
| | |
| | | } |
| | | |
| | | |
| | | //下面的代码不能删除,上面的方法只是配合电话端联调用的, |
| | | // @Override |
| | | // public PhoneCallBackVO phoneCallBack(PhoneCallBackVO phoneCallBackVO) { |
| | | // log.error("phoneCallBackVO的入参:{},{},{},{},{},{},{}", phoneCallBackVO.getResultType(), phoneCallBackVO.getUuid(), phoneCallBackVO.getErrResult(), phoneCallBackVO.getTextResult(), phoneCallBackVO.getHangUpResult(), phoneCallBackVO.getEnumState(), phoneCallBackVO.getUint8()); |
| | | // //获取数据 |
| | | // Boolean aBoolean = redisCache.hasKey(phoneCallBackVO.getUuid()); |
| | | // if (!aBoolean) { |
| | | // throw new BaseException("该uuid不存在"); |
| | | // } |
| | | // Integer hangupValue = redisCache.getCacheObject(phoneCallBackVO.getUuid() + "hangup"); |
| | | // if (hangupValue != null && hangupValue == 1) { |
| | | // //hangupValue == 1 随访结束,直接可以挂电话 |
| | | // PhoneUtils phoneUtils = new PhoneUtils(); |
| | | // phoneUtils.hangup(phoneCallBackVO.getUuid(), null, null, null, null, null, null, null); |
| | | // |
| | | // } |
| | | // |
| | | // Map<String, Object> map = redisCache.getCacheObject(phoneCallBackVO.getUuid()); |
| | | //// ObjectMapper objectMapper = new ObjectMapper(); |
| | | //// Map<String, Object> map = null; |
| | | //// try { |
| | | //// map = objectMapper.readValue(cacheObject, Map.class); |
| | | //// } catch (JsonProcessingException e) { |
| | | //// e.printStackTrace(); |
| | | //// } |
| | | // |
| | | // ServiceSubtask ServiceSubtask = (ServiceSubtask) map.get("ServiceSubtask"); |
| | | // List<IvrLibaTemplateScriptVO> ivrLibaTemplateScriptVOs = (List<IvrLibaTemplateScriptVO>) map.get("ivrLibaTemplateScriptVO"); |
| | | // //将uuid更新到数据库中 |
| | | // ServiceSubtask.setSenduuid(phoneCallBackVO.getUuid()); |
| | | // ServiceSubtaskMapper.updateServiceSubtask(ServiceSubtask); |
| | | // |
| | | // //获取模板信息 |
| | | // IvrLibaTemplateVO ivrLibaTemplateVO = redisCache.getCacheObject(phoneCallBackVO.getUuid() + "ivrLibaTemplateVO"); |
| | | // |
| | | // |
| | | // //首先判断resultType |
| | | // if (phoneCallBackVO.getResultType() == 1) { |
| | | // //呼叫结果接口: 1 |
| | | // if (phoneCallBackVO.getUint8() == 1) { |
| | | // //呼叫失败,去redis中记录一下失败次数,进行再次呼叫 |
| | | // Integer integer = redisCache.getCacheObject(phoneCallBackVO.getUuid() + "uint8"); |
| | | // if (integer != null) { |
| | | // redisCache.setCacheObject(phoneCallBackVO.getUuid() + "uint8", integer + 1, 120, TimeUnit.MINUTES); |
| | | // } else { |
| | | // redisCache.setCacheObject(phoneCallBackVO.getUuid() + "uint8", 1, 120, TimeUnit.MINUTES); |
| | | // } |
| | | // |
| | | // if (integer != null && integer == ServiceSubtask.getRecallcount().intValue()) { |
| | | // log.info("无人接听:{}, {}", phoneCallBackVO.getErrResult(), phoneCallBackVO.getUuid()); |
| | | // //连续打规定次,如果要没人接,那就结束 |
| | | // ServiceSubtask.setResult(phoneCallBackVO.getErrResult()); |
| | | // ServiceSubtaskMapper.updateServiceSubtask(ServiceSubtask); |
| | | // redisCache.deleteObject(phoneCallBackVO.getUuid() + "uint8"); |
| | | // } else if (integer != null && integer < ServiceSubtask.getRecallcount().intValue()) { |
| | | // //进行重拨 |
| | | // PhoneUtils phoneUtils = new PhoneUtils(); |
| | | // phoneUtils.ob(null, null, null, null, null, null, null, ServiceSubtask.getPhone(), phoneCallBackVO.getUuid(), true); |
| | | // } |
| | | // } |
| | | // |
| | | // } else if (phoneCallBackVO.getResultType() == 2) { |
| | | // //通话状态更新接口: 2 |
| | | // if (phoneCallBackVO.getEnumState() == 0) { |
| | | // // 0-振铃 |
| | | // Integer integer = redisCache.getCacheObject(phoneCallBackVO.getUuid() + "enumState"); |
| | | // |
| | | // if (integer != null && integer < ServiceSubtask.getRecallcount().intValue()) { |
| | | // redisCache.setCacheObject(phoneCallBackVO.getUuid() + "enumState", integer + 1, 120, TimeUnit.MINUTES); |
| | | // } else if (integer == null) { |
| | | // redisCache.setCacheObject(phoneCallBackVO.getUuid() + "enumState", 1, 120, TimeUnit.MINUTES); |
| | | // } else if (integer != null && integer == ServiceSubtask.getRecallcount().intValue()) { |
| | | // ServiceSubtask.setResult("无人接听"); |
| | | // ServiceSubtaskMapper.updateServiceSubtask(ServiceSubtask); |
| | | // redisCache.deleteObject(phoneCallBackVO.getUuid() + "enumState"); |
| | | // } |
| | | // } else if (phoneCallBackVO.getEnumState() == 2) { |
| | | // //患者挂断电话 |
| | | // log.info("患者挂断电话:{}", phoneCallBackVO.getUuid()); |
| | | // ServiceSubtask.setResult(phoneCallBackVO.getHangUpResult()); |
| | | // ServiceSubtaskMapper.updateServiceSubtask(ServiceSubtask); |
| | | // redisCache.deleteObject(phoneCallBackVO.getUuid() + "enumState"); |
| | | // } |
| | | // |
| | | // |
| | | // } else if (phoneCallBackVO.getResultType() == 3) { |
| | | // //语音识别结果上报接口: 3 |
| | | // Integer noVoice = redisCache.getCacheObject(phoneCallBackVO.getUuid() + "noVoice"); |
| | | // QuestionMessage returnQues = redisCache.getCacheObject(phoneCallBackVO.getUuid() + "returnQues"); |
| | | // IvrLibaTemplateScriptVO nowQuestion = returnQues.getNowQuestion(); |
| | | // PhoneUtils phoneUtils = new PhoneUtils(); |
| | | // |
| | | // if (StringUtils.isEmpty(phoneCallBackVO.getTextResult())) { |
| | | // //无回话 |
| | | // //判断noVoice是否已经到了最大值 |
| | | // if (noVoice == ivrLibaTemplateVO.getNoVoiceNum().intValue()) { |
| | | // //已经问了对应的遍数,就判断是否还有下一题 |
| | | // if (nowQuestion.getTargetid() == ivrLibaTemplateScriptVOs.size()) { |
| | | // //没有下一题了,就挂断电话,播放结束语 |
| | | // redisCache.setCacheObject(phoneCallBackVO.getUuid() + "hangup", 1, 120, TimeUnit.MINUTES); |
| | | // phoneUtils.ttsPlayback(ivrLibaTemplateVO.getRevisitAfter(), phoneCallBackVO.getUuid()); |
| | | // } else { |
| | | // //有下一题 |
| | | // redisCache.setCacheObject(phoneCallBackVO.getUuid() + "noVoice", 0, 120, TimeUnit.MINUTES); |
| | | // IvrLibaTemplateScriptVO nextQuestion = getNextQuestion(ivrLibaTemplateScriptVOs, nowQuestion); |
| | | // // 问题, 去调用“tts合成和播放”接口 |
| | | // phoneUtils.ttsPlayback(nowQuestion.getQuestionText(), phoneCallBackVO.getUuid()); |
| | | // } |
| | | // } else { |
| | | // redisCache.setCacheObject(phoneCallBackVO.getUuid() + "noVoice", noVoice + 1, 120, TimeUnit.MINUTES); |
| | | // //调用ivrLibaTemplateScriptVO中的slienceText(静默话术) |
| | | // String slienceText = nowQuestion.getSlienceText(); |
| | | // //静默话术 + 问题, 去调用“tts合成和播放”接口 |
| | | // phoneUtils.ttsPlayback(slienceText + nowQuestion.getQuestionText(), phoneCallBackVO.getUuid()); |
| | | // return new PhoneCallBackVO(); |
| | | // } |
| | | // |
| | | // } else { |
| | | // //有回话,对回答的问题,进行正则匹配(这里只针对选择题,其它题型不行) |
| | | // for (int j = 0; j < nowQuestion.getIvrLibaScriptTargetoptionList().size(); j++) { |
| | | // //包含 |
| | | // Matcher matcher = null; |
| | | // if (StringUtils.isNotEmpty(nowQuestion.getIvrLibaScriptTargetoptionList().get(j).getTargetregex())) { |
| | | // Pattern pattern = Pattern.compile(nowQuestion.getIvrLibaScriptTargetoptionList().get(j).getTargetregex()); |
| | | // matcher = pattern.matcher(phoneCallBackVO.getTextResult()); |
| | | // } |
| | | // //不包含 |
| | | // Matcher matcher2 = null; |
| | | // if (StringUtils.isNotEmpty(nowQuestion.getIvrLibaScriptTargetoptionList().get(j).getTargetregex2())) { |
| | | // Pattern pattern2 = Pattern.compile(nowQuestion.getIvrLibaScriptTargetoptionList().get(j).getTargetregex2()); |
| | | // matcher2 = pattern2.matcher(phoneCallBackVO.getTextResult()); |
| | | // } |
| | | // log.info("phoneCallBack--Targetregex的值为:{}, phoneCallBack--Targetregex2的值为:{}", nowQuestion.getIvrLibaScriptTargetoptionList().get(j).getTargetregex(), nowQuestion.getIvrLibaScriptTargetoptionList().get(j).getTargetregex2()); |
| | | // if (StringUtils.isNotEmpty(nowQuestion.getIvrLibaScriptTargetoptionList().get(j).getTargetregex()) && matcher.matches() && StringUtils.isNotEmpty(nowQuestion.getIvrLibaScriptTargetoptionList().get(j).getTargetregex2()) && matcher2.matches() || StringUtils.isEmpty(nowQuestion.getIvrLibaScriptTargetoptionList().get(j).getTargetregex()) && StringUtils.isNotEmpty(nowQuestion.getIvrLibaScriptTargetoptionList().get(j).getTargetregex2()) && matcher2.matches() || StringUtils.isEmpty(nowQuestion.getIvrLibaScriptTargetoptionList().get(j).getTargetregex2()) && StringUtils.isNotEmpty(nowQuestion.getIvrLibaScriptTargetoptionList().get(j).getTargetregex()) && matcher.matches()) { |
| | | // //说明匹配正确了 |
| | | // //这里应该先判断类型,去再修改,设置IsUserOperation是单选题的改法 |
| | | // nowQuestion.getIvrLibaScriptTargetoptionList().get(j).setIsUserOperation(true); |
| | | // ivrLibaScriptTargetoptionMapper.updateIvrLibaTemplateTargetoption(nowQuestion.getIvrLibaScriptTargetoptionList().get(j)); |
| | | // |
| | | // |
| | | // //将静默置为0 |
| | | // redisCache.setCacheObject(phoneCallBackVO.getUuid() + "noVoice", 0, 120, TimeUnit.MINUTES); |
| | | // redisCache.setCacheObject(phoneCallBackVO.getUuid() + "mateNum", 0, 120, TimeUnit.MINUTES); |
| | | // //获取下一题 |
| | | // Integer nextQuestion = nowQuestion.getIvrLibaScriptTargetoptionList().get(j).getNextQuestion(); |
| | | // for (IvrLibaTemplateScriptVO script : ivrLibaTemplateScriptVOs) { |
| | | // if (script.getTargetid() == nextQuestion) { |
| | | // QuestionMessage questionMessage = new QuestionMessage(); |
| | | // questionMessage.setNowQuestion(script); |
| | | // questionMessage.setQuestionList(ivrLibaTemplateScriptVOs); |
| | | // redisCache.setCacheObject(phoneCallBackVO.getUuid() + "returnQues", questionMessage, 120, TimeUnit.MINUTES); |
| | | // break; |
| | | // } |
| | | // } |
| | | // break; |
| | | // } else { |
| | | // //没有匹配到 |
| | | // Integer mateNum = redisCache.getCacheObject(phoneCallBackVO.getUuid() + "mateNum"); |
| | | // //无匹配次数去判断是否到最大询问次数,并且所有的选项都匹配完了 |
| | | // if (mateNum == ivrLibaTemplateVO.getMateNum().intValue() && j == nowQuestion.getIvrLibaScriptTargetoptionList().size() - 1) { |
| | | // //如果下一题为空.则新的数据返回,并加上感谢语 |
| | | // if (nowQuestion.getTargetid() < ivrLibaTemplateScriptVOs.size()) { |
| | | // QuestionMessage questionMessage = new QuestionMessage(); |
| | | // IvrLibaTemplateScriptVO nextQuestion = getNextQuestion(ivrLibaTemplateScriptVOs, nowQuestion); |
| | | // questionMessage.setQuestionList(ivrLibaTemplateScriptVOs); |
| | | // questionMessage.setNowQuestion(nextQuestion); |
| | | // redisCache.setCacheObject(phoneCallBackVO.getUuid() + "returnQues", questionMessage, 120, TimeUnit.MINUTES); |
| | | // redisCache.setCacheObject(phoneCallBackVO.getUuid() + "mateNum", 0, 120, TimeUnit.MINUTES); |
| | | // } else { |
| | | // //就可以挂断电话了 |
| | | // redisCache.setCacheObject(phoneCallBackVO.getUuid() + "hangup", 1, 120, TimeUnit.MINUTES); |
| | | // phoneUtils.ttsPlayback(ivrLibaTemplateVO.getRevisitAfter(), phoneCallBackVO.getUuid()); |
| | | // break; |
| | | // } |
| | | // } else if (mateNum < ivrLibaTemplateVO.getMateNum().intValue() && j == nowQuestion.getIvrLibaScriptTargetoptionList().size() - 1) { |
| | | // //没有问到规定次数 |
| | | // mateNum = mateNum + 1; |
| | | // redisCache.setCacheObject(phoneCallBackVO.getUuid() + "mateNum", mateNum, 120, TimeUnit.MINUTES); |
| | | // } |
| | | // } |
| | | // |
| | | // } |
| | | // //选项匹配完成后,需要再去通过库再进行匹配一次 |
| | | // String extemplateID = ivrLibaTemplateVO.getSubmoduleID(); |
| | | // String[] split = extemplateID.split(","); |
| | | // List<String> list = Arrays.asList(split); |
| | | // List<Long> list1 = new ArrayList<>(); |
| | | // if (StringUtils.isNotEmpty(extemplateID)) { |
| | | // for (String str : list) { |
| | | // list1.add(Long.valueOf(str)); |
| | | // } |
| | | // List<IvrLibaExtemplatescript> ivrLibaExtemplatescripts = ivrLibaExtemplatescriptMapper.queryIvrLibaExtemplatescriptList(list1); |
| | | // for (IvrLibaExtemplatescript ivrLibaExtemplatescript : ivrLibaExtemplatescripts) { |
| | | // Matcher matcher = null; |
| | | // if (StringUtils.isNotEmpty(ivrLibaExtemplatescript.getSelfRegex())) { |
| | | // Pattern pattern = Pattern.compile(ivrLibaExtemplatescript.getSelfRegex()); |
| | | // matcher = pattern.matcher(returnQues.getContent()); |
| | | // } |
| | | // |
| | | // Matcher matcher2 = null; |
| | | // if (StringUtils.isNotEmpty(ivrLibaExtemplatescript.getSelfRegex2())) { |
| | | // Pattern pattern2 = Pattern.compile(ivrLibaExtemplatescript.getSelfRegex2()); |
| | | // matcher2 = pattern2.matcher(returnQues.getContent()); |
| | | // } |
| | | // log.info("++++++++++++++++++++++++++通用库是否为空:selfRegex : {} , selfRegex2 : {}", ivrLibaExtemplatescript.getSelfRegex(), ivrLibaExtemplatescript.getSelfRegex2()); |
| | | // if (StringUtils.isNotEmpty(ivrLibaExtemplatescript.getSelfRegex()) && matcher.matches() && StringUtils.isNotEmpty(ivrLibaExtemplatescript.getSelfRegex2()) && matcher2.matches() || StringUtils.isEmpty(ivrLibaExtemplatescript.getSelfRegex()) && StringUtils.isNotEmpty(ivrLibaExtemplatescript.getSelfRegex2()) && matcher2.matches() || StringUtils.isEmpty(ivrLibaExtemplatescript.getSelfRegex2()) && StringUtils.isNotEmpty(ivrLibaExtemplatescript.getSelfRegex()) && matcher.matches()) { |
| | | // QuestionMessage questionMessage = redisCache.getCacheObject(phoneCallBackVO.getUuid() + "returnQues"); |
| | | // IvrLibaTemplateScriptVO ivrLibaTemplateScriptVO = returnQues.getNowQuestion(); |
| | | // ivrLibaTemplateScriptVO.setSubmoduleText(ivrLibaExtemplatescript.getSwitchText()); |
| | | // ivrLibaTemplateScriptVO.setSubmoduleVoice(ivrLibaExtemplatescript.getSwitchWav()); |
| | | // redisCache.setCacheObject(phoneCallBackVO.getUuid() + "returnQues", questionMessage, 120, TimeUnit.MINUTES); |
| | | // if (ivrLibaExtemplatescript.getIsEnd() == 1) { |
| | | // //将问题置空 |
| | | // IvrLibaTemplateScriptVO nowQuestion1 = questionMessage.getNowQuestion(); |
| | | // nowQuestion1.setQuestionText(null); |
| | | // nowQuestion1.setQuestionVoice(null); |
| | | // questionMessage.setNowQuestion(nowQuestion1); |
| | | // redisCache.setCacheObject(phoneCallBackVO.getUuid() + "returnQues", questionMessage, 120, TimeUnit.MINUTES); |
| | | // |
| | | // redisCache.setCacheObject(phoneCallBackVO.getUuid() + "isOver", 1, 120, TimeUnit.MINUTES); |
| | | // } |
| | | // |
| | | // //调用“15、tts合成和播放, tts_playback”将结果传回 |
| | | // |
| | | // |
| | | // } |
| | | // break; |
| | | // } |
| | | // } |
| | | // |
| | | // } |
| | | // } |
| | | // return phoneCallBackVO; |
| | | // } |
| | | |
| | | @Override |
| | | public Integer saveQuestionAnswerPhone(ServiceSubTaskDetailReq serviceSubTaskDetailReq) { |
| | | int i = 0; |
| | |
| | | //随访 |
| | | for (ServiceSubtaskDetail serviceSubtaskDetail : serviceSubTaskDetailReq.getServiceSubtaskDetailList()) { |
| | | serviceSubtaskDetail.setSubId(selectServiceSubtaskList.get(0).getId()); |
| | | serviceSubtaskDetail.setId(UUID.randomUUID().toString()); |
| | | // serviceSubtaskDetail.setId(UUID.randomUUID().toString()); |
| | | serviceSubtaskDetail.setCreateTime(new Date()); |
| | | serviceSubtaskDetail.setGuid(selectServiceSubtaskList.get(0).getGuid()); |
| | | serviceSubtaskDetail.setOrgid(serviceSubTaskDetailReq.getOrgid()); |
| | |
| | | Object cacheObject = redisCache.getCacheObject(phoneCallRecordVO.getTaskid() + "recordAccept-hungup"); |
| | | if (phoneCallRecordVO.getHangup_cause().equals("NO_USER_RESPONSE") || ObjectUtils.isNotEmpty(cacheObject) && String.valueOf(cacheObject).equals("1")) { |
| | | //无人接听 |
| | | getSmsCompensate(Long.valueOf(phoneCallRecordVO.getTaskid())); |
| | | //记录电话发送状态 |
| | | ServiceSubtask serviceSubtask = serviceSubtaskMapper.selectServiceSubtaskById(Long.valueOf(phoneCallRecordVO.getTaskid())); |
| | | setFailPreachForm(serviceSubtask, "3", "无人接听", "4"); |
| | | //进行短信补偿 |
| | | // getSmsCompensate(Long.valueOf(phoneCallRecordVO.getTaskid())); |
| | | redisCache.deleteObject(phoneCallRecordVO.getTaskid() + "recordAccept-hungup"); |
| | | redisCache.removeElementFromList("cache-exist", phoneCallRecordVO.getTaskid()); |
| | | } else if (ObjectUtils.isNotEmpty(cacheObject) && String.valueOf(cacheObject).equals("2")) { |
| | |
| | | serviceSubtask.setUpdateTime(new Date()); |
| | | log.error("电话拨打已完成serviceSubtask的值为:{}", serviceSubtask); |
| | | serviceSubtaskMapper.updateServiceSubtask(serviceSubtask); |
| | | setFailPreachForm(serviceSubtask, StringUtils.isNotEmpty(serviceSubtask.getCurrentPreachform()) ? serviceSubtask.getCurrentPreachform() : "3", "电话拨打已完成", "9"); |
| | | //下载文件 |
| | | ftpService.downloadFolder("/" + LocalDate.now().toString(), profile + "/upload/vadio/voice/" + LocalDate.now().toString()); |
| | | redisCache.deleteObject(phoneCallRecordVO.getTaskid() + "recordAccept-hungup"); |
| | |
| | | // int endIndex = phoneCallRecordVO.getRecord_path().lastIndexOf("/"); |
| | | // String result = phoneCallRecordVO.getRecord_path().substring(startIndex, endIndex); |
| | | //下载文件 |
| | | ftpService.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"); |
| | | ServiceSubtask ss = serviceSubtaskMapper.selectServiceSubtaskById(serviceSubtask.getId()); |
| | | setFailPreachForm(ss, StringUtils.isNotEmpty(ss.getCurrentPreachform()) ? ss.getCurrentPreachform() : "3", "电话接通成功,患者拒绝随访", "5"); |
| | | } |
| | | |
| | | return 1; |
| | |
| | | } |
| | | |
| | | /** |
| | | * 服务统计查询 - 按时间维度统计出院/门诊随访数据 |
| | | * |
| | | * @param request 统计请求参数 |
| | | * @return 统计结果列表 |
| | | */ |
| | | @Override |
| | | public List<ServiceStatisticsResponse> getServiceStatistics(ServiceStatisticsRequest request) { |
| | | log.info("getServiceStatistics的入参为:{}", request); |
| | | |
| | | // 参数校验 |
| | | if (request.getStartDate() == null || request.getEndDate() == null) { |
| | | throw new IllegalArgumentException("开始日期和结束日期不能为空"); |
| | | } |
| | | |
| | | if (request.getStartDate().after(request.getEndDate())) { |
| | | throw new IllegalArgumentException("开始日期不能晚于结束日期"); |
| | | } |
| | | |
| | | // 如果timeType为空,默认按天统计 |
| | | if (StringUtils.isEmpty(request.getTimeType())) { |
| | | request.setTimeType("day"); |
| | | } |
| | | |
| | | List<ServiceStatisticsResponse> result = serviceSubtaskMapper.getServiceStatistics(request); |
| | | |
| | | |
| | | log.info("getServiceStatistics返回结果数量:{}", result.size()); |
| | | return result; |
| | | } |
| | | |
| | | /** |
| | | * 获取随访统计比例 |
| | | * |
| | | * @param serviceSubtaskCountReq |
| | |
| | | public List<ServiceSubtaskStatistic> getSfStatistics(ServiceSubtaskCountReq serviceSubtaskCountReq) { |
| | | log.error("getSfStatistics的入参为:{}", serviceSubtaskCountReq); |
| | | List<ServiceSubtaskStatistic> serviceSubtaskStatistics = new ArrayList<>(); |
| | | //Map<String, List<ServiceSubtask>> collect = serviceSubtaskMapper.getSfStatistics(serviceSubtaskCountReq).stream().collect(Collectors.groupingBy(subtask -> Optional.ofNullable(subtask.getLeavehospitaldistrictname()).orElse("Unknown"))); |
| | | Map<String, List<ServiceSubtask>> collect = new HashMap<>(); |
| | | if (serviceSubtaskCountReq.getLeavehospitaldistrictcodes() != null && serviceSubtaskCountReq.getLeavehospitaldistrictcodes().size() > 0) { |
| | | collect = serviceSubtaskMapper.getSfStatistics(serviceSubtaskCountReq).stream().collect(Collectors.groupingBy(subtask -> Optional.ofNullable(subtask.getLeavehospitaldistrictname()).orElse("Unknown"))); |
| | | // List<ServiceSubtask> rawData = serviceSubtaskMapper.getSfStatistics(serviceSubtaskCountReq); |
| | | |
| | | // 根据条件进行分组 |
| | | Map<String, List<ServiceSubtask>> collect = new HashMap<>(); |
| | | |
| | | if (serviceSubtaskCountReq.getLeavehospitaldistrictcodes() != null && serviceSubtaskCountReq.getLeavehospitaldistrictcodes().size() > 0) { |
| | | if (serviceSubtaskCountReq.getDrcode() != null && !serviceSubtaskCountReq.getDrcode().isEmpty()) { |
| | | collect = serviceSubtaskMapper.getSfStatistics(serviceSubtaskCountReq).stream().collect(Collectors.groupingBy(subtask -> Optional.ofNullable(subtask.getDrname()).orElse("Unknown"))); |
| | | } else { |
| | | collect = serviceSubtaskMapper.getSfStatistics(serviceSubtaskCountReq).stream().collect(Collectors.groupingBy(subtask -> Optional.ofNullable(subtask.getLeavehospitaldistrictname()).orElse("Unknown"))); |
| | | } |
| | | } else if (serviceSubtaskCountReq.getDeptcodes() != null && serviceSubtaskCountReq.getDeptcodes().size() > 0) { |
| | | collect = serviceSubtaskMapper.getSfStatistics(serviceSubtaskCountReq).stream().collect(Collectors.groupingBy(subtask -> Optional.ofNullable(subtask.getDeptname()).orElse("Unknown"))); |
| | | if (serviceSubtaskCountReq.getDrcode() != null && !serviceSubtaskCountReq.getDrcode().isEmpty()) { |
| | | collect = serviceSubtaskMapper.getSfStatistics(serviceSubtaskCountReq).stream().collect(Collectors.groupingBy(subtask -> Optional.ofNullable(subtask.getDrname()).orElse("Unknown"))); |
| | | } else { |
| | | collect = serviceSubtaskMapper.getSfStatistics(serviceSubtaskCountReq).stream().collect(Collectors.groupingBy(subtask -> Optional.ofNullable(subtask.getDeptname()).orElse("Unknown"))); |
| | | } |
| | | } |
| | | |
| | | for (List<ServiceSubtask> serviceSubtaskList : collect.values()) { |
| | | if (CollectionUtils.isEmpty(serviceSubtaskList)) { |
| | | continue; |
| | |
| | | //及时率 |
| | | ServiceSubtask ss = new ServiceSubtask(); |
| | | ss.setOrgid(serviceSubtaskList.get(0).getOrgid()); |
| | | if (CollectionUtils.isNotEmpty(serviceSubtaskCountReq.getLeavehospitaldistrictcodes())) { |
| | | ss.setLeavehospitaldistrictcode(serviceSubtaskList.get(0).getLeavehospitaldistrictcode()); |
| | | |
| | | // 如果有医生编码,设置医生编码用于及时率查询 |
| | | if (serviceSubtaskCountReq.getDrcode() != null && !serviceSubtaskCountReq.getDrcode().isEmpty()) { |
| | | ss.setDrcode(serviceSubtaskList.get(0).getDrcode()); |
| | | } else { |
| | | ss.setDeptcode(serviceSubtaskList.get(0).getDeptcode()); |
| | | if (CollectionUtils.isNotEmpty(serviceSubtaskCountReq.getLeavehospitaldistrictcodes())) { |
| | | ss.setLeavehospitaldistrictcode(serviceSubtaskList.get(0).getLeavehospitaldistrictcode()); |
| | | } else if (CollectionUtils.isNotEmpty(serviceSubtaskCountReq.getDeptcodes())) { |
| | | ss.setDeptcode(serviceSubtaskList.get(0).getDeptcode()); |
| | | } |
| | | } |
| | | |
| | | ss.setStarttime(serviceSubtaskCountReq.getStartTime()); |
| | | ss.setEndtime(serviceSubtaskCountReq.getEndTime()); |
| | | if (serviceSubtaskCountReq.getEndTime() != null && new Date().before(serviceSubtaskCountReq.getEndTime())) { |
| | | ss.setEndtime(new Date()); |
| | | } |
| | | Double jsRate = serviceSubtaskMapper.selectTimelyRate(ss); |
| | | statistic.setRate(jsRate); |
| | | |
| | | if (ObjectUtils.isNotEmpty(statistic)) { |
| | | serviceSubtaskStatistics.add(statistic); |
| | | } |
| | | } |
| | | return serviceSubtaskStatistics; |
| | | } |
| | | |
| | | /** |
| | | * 获取随访统计比例 |
| | | * |
| | | * @param serviceSubtaskCountReq |
| | | * @return |
| | | */ |
| | | @Override |
| | | public List<ServiceSubtaskStatistic> getSfStatisticsJoy(ServiceSubtaskCountReq serviceSubtaskCountReq) { |
| | | log.error("getSfStatistics的入参为:{}", serviceSubtaskCountReq); |
| | | List<ServiceSubtaskStatistic> serviceSubtaskStatistics = new ArrayList<>(); |
| | | |
| | | // 根据条件进行分组 |
| | | Map<String, List<ServiceSubtask>> collect = new HashMap<>(); |
| | | |
| | | if (serviceSubtaskCountReq.getLeavehospitaldistrictcodes() != null && serviceSubtaskCountReq.getLeavehospitaldistrictcodes().size() > 0) { |
| | | if (serviceSubtaskCountReq.getDrcode() != null && !serviceSubtaskCountReq.getDrcode().isEmpty()) { |
| | | collect = serviceSubtaskMapper.getSfStatistics(serviceSubtaskCountReq).stream().collect(Collectors.groupingBy(subtask -> Optional.ofNullable(subtask.getDrname()).orElse("Unknown"))); |
| | | |
| | | } else { |
| | | collect = serviceSubtaskMapper.getSfStatistics(serviceSubtaskCountReq).stream().collect(Collectors.groupingBy(subtask -> Optional.ofNullable(subtask.getLeavehospitaldistrictname()).orElse("Unknown"))); |
| | | } |
| | | } else if (serviceSubtaskCountReq.getDeptcodes() != null && serviceSubtaskCountReq.getDeptcodes().size() > 0) { |
| | | if (serviceSubtaskCountReq.getDrcode() != null && !serviceSubtaskCountReq.getDrcode().isEmpty()) { |
| | | collect = serviceSubtaskMapper.getSfStatistics(serviceSubtaskCountReq).stream().collect(Collectors.groupingBy(subtask -> Optional.ofNullable(subtask.getDrname()).orElse("Unknown"))); |
| | | } else { |
| | | collect = serviceSubtaskMapper.getSfStatistics(serviceSubtaskCountReq).stream().collect(Collectors.groupingBy(subtask -> Optional.ofNullable(subtask.getDeptname()).orElse("Unknown"))); |
| | | } |
| | | } |
| | | List<ServiceSubtaskCount> joySubCount = serviceSubtaskMapper.getSfStatisticsJoy(serviceSubtaskCountReq); |
| | | for (List<ServiceSubtask> serviceSubtaskList : collect.values()) { |
| | | if (CollectionUtils.isEmpty(serviceSubtaskList)) { |
| | | continue; |
| | | } |
| | | ServiceSubtaskStatistic statistic = getStatisticJoy(serviceSubtaskList, joySubCount); |
| | | if (statistic.getJoyCount() != 0 && statistic.getJoyAllCount() != 0) { |
| | | Double joyTotal = Double.parseDouble(statistic.getJoyCount() + "") / Double.parseDouble(statistic.getJoyAllCount() + "") * 100; |
| | | statistic.setJoyTotal(String.format("%.2f", joyTotal) + "%"); |
| | | } |
| | | //及时率 |
| | | ServiceSubtask ss = new ServiceSubtask(); |
| | | ss.setOrgid(serviceSubtaskList.get(0).getOrgid()); |
| | | |
| | | // 如果有医生编码,设置医生编码用于及时率查询 |
| | | if (serviceSubtaskCountReq.getDrcode() != null && !serviceSubtaskCountReq.getDrcode().isEmpty()) { |
| | | ss.setDrcode(serviceSubtaskList.get(0).getDrcode()); |
| | | } else { |
| | | if (CollectionUtils.isNotEmpty(serviceSubtaskCountReq.getLeavehospitaldistrictcodes())) { |
| | | ss.setLeavehospitaldistrictcode(serviceSubtaskList.get(0).getLeavehospitaldistrictcode()); |
| | | } else if (CollectionUtils.isNotEmpty(serviceSubtaskCountReq.getDeptcodes())) { |
| | | ss.setDeptcode(serviceSubtaskList.get(0).getDeptcode()); |
| | | } |
| | | } |
| | | |
| | | ss.setStarttime(serviceSubtaskCountReq.getStartTime()); |
| | | ss.setEndtime(serviceSubtaskCountReq.getEndTime()); |
| | | if (serviceSubtaskCountReq.getEndTime() != null && new Date().before(serviceSubtaskCountReq.getEndTime())) { |
| | |
| | | serviceSubtaskStatistic.setDeptcode(serviceSubtaskList.get(0).getDeptcode()); |
| | | serviceSubtaskStatistic.setLeavehospitaldistrictname(serviceSubtaskList.get(0).getLeavehospitaldistrictname()); |
| | | serviceSubtaskStatistic.setLeavehospitaldistrictcode(serviceSubtaskList.get(0).getLeavehospitaldistrictcode()); |
| | | serviceSubtaskStatistic.setDrcode(serviceSubtaskList.get(0).getDrcode()); |
| | | serviceSubtaskStatistic.setDrname(serviceSubtaskList.get(0).getDrname()); |
| | | //出院人次 |
| | | serviceSubtaskStatistic.setDischargeCount(serviceSubtaskList.size()); |
| | | for (ServiceSubtask serviceSubtask : serviceSubtaskList) { |
| | |
| | | if (serviceSubtask.getSendstate() != null && serviceSubtask.getSendstate() == 2) { |
| | | serviceSubtaskStatistic.setPendingFollowUp(serviceSubtaskStatistic.getPendingFollowUp() + 1L); |
| | | } |
| | | if (serviceSubtask.getSendstate() != null && (serviceSubtask.getSendstate() == 6)) { |
| | | serviceSubtaskStatistic.setFollowUpSuccess(serviceSubtaskStatistic.getFollowUpSuccess() + 1L); |
| | | } |
| | | if (serviceSubtask.getSendstate() != null && serviceSubtask.getSendstate() == 5) { |
| | | serviceSubtaskStatistic.setFollowUpFail(serviceSubtaskStatistic.getFollowUpFail() + 1L); |
| | | } |
| | | if (serviceSubtaskStatistic.getNeedFollowUp() > 0) { |
| | | double rate = (double) (serviceSubtaskStatistic.getFollowUpSuccess() + serviceSubtaskStatistic.getFollowUpFail()) / serviceSubtaskStatistic.getNeedFollowUp(); |
| | | serviceSubtaskStatistic.setFollowUpRate(percentFormat.format(rate)); |
| | | } else { |
| | | serviceSubtaskStatistic.setFollowUpRate("0.00%"); |
| | | } |
| | | if (serviceSubtask.getSendstate() != null && serviceSubtask.getPreachform().equals("1")) { |
| | | serviceSubtaskStatistic.setManual(serviceSubtaskStatistic.getManual() + 1L); |
| | | } |
| | | if (serviceSubtask.getSendstate() != null && serviceSubtask.getPreachform().equals("4")) { |
| | | serviceSubtaskStatistic.setSms(serviceSubtaskStatistic.getSms() + 1L); |
| | | } |
| | | if (serviceSubtask.getSendstate() != null && serviceSubtask.getPreachform().equals("5")) { |
| | | serviceSubtaskStatistic.setWeChat(serviceSubtaskStatistic.getWeChat() + 1L); |
| | | } |
| | | if (serviceSubtask.getSendstate() != null && serviceSubtask.getExcep().equals("1")) { |
| | | serviceSubtaskStatistic.setAbnormal(serviceSubtaskStatistic.getAbnormal() + 1L); |
| | | } |
| | | }//二次出院随访 |
| | | else if (serviceSubtask.getVisitCount() != null && serviceSubtask.getVisitCount() > 1) { |
| | | if (serviceSubtask.getSendstate() != null && serviceSubtask.getSendstate() != 4) { |
| | | serviceSubtaskStatistic.setNeedFollowUpAgain(serviceSubtaskStatistic.getNeedFollowUpAgain() + 1L); |
| | | } |
| | | if (serviceSubtask.getSendstate() != null && serviceSubtask.getSendstate() == 2) { |
| | | serviceSubtaskStatistic.setPendingFollowUpAgain(serviceSubtaskStatistic.getPendingFollowUpAgain() + 1L); |
| | | } |
| | | if (serviceSubtask.getSendstate() != null && (serviceSubtask.getSendstate() == 1 || serviceSubtask.getSendstate() == 3 || serviceSubtask.getSendstate() == 6)) { |
| | | serviceSubtaskStatistic.setFollowUpSuccessAgain(serviceSubtaskStatistic.getFollowUpSuccessAgain() + 1L); |
| | | } |
| | | if (serviceSubtask.getSendstate() != null && serviceSubtask.getSendstate() == 5) { |
| | | serviceSubtaskStatistic.setFollowUpFailAgain(serviceSubtaskStatistic.getFollowUpFailAgain() + 1L); |
| | | } |
| | | if (serviceSubtaskStatistic.getNeedFollowUp() > 0) { |
| | | double rate = (double) (serviceSubtaskStatistic.getFollowUpSuccessAgain() + serviceSubtaskStatistic.getFollowUpFailAgain()) / serviceSubtaskStatistic.getNeedFollowUpAgain(); |
| | | serviceSubtaskStatistic.setFollowUpRateAgain(percentFormat.format(rate)); |
| | | } else { |
| | | serviceSubtaskStatistic.setFollowUpRateAgain("0.00%"); |
| | | } |
| | | if (serviceSubtask.getSendstate() != null && serviceSubtask.getPreachform().equals("1")) { |
| | | serviceSubtaskStatistic.setManualAgain(serviceSubtaskStatistic.getManualAgain() + 1L); |
| | | } |
| | | if (serviceSubtask.getSendstate() != null && serviceSubtask.getPreachform().equals("4")) { |
| | | serviceSubtaskStatistic.setSmsAgain(serviceSubtaskStatistic.getSmsAgain() + 1L); |
| | | } |
| | | if (serviceSubtask.getSendstate() != null && serviceSubtask.getPreachform().equals("5")) { |
| | | serviceSubtaskStatistic.setWeChatAgain(serviceSubtaskStatistic.getWeChatAgain() + 1L); |
| | | } |
| | | if (serviceSubtask.getSendstate() != null && serviceSubtask.getExcep().equals("1")) { |
| | | serviceSubtaskStatistic.setAbnormalAgain(serviceSubtaskStatistic.getAbnormalAgain() + 1L); |
| | | } |
| | | } |
| | | |
| | | |
| | | } |
| | | |
| | | |
| | | return serviceSubtaskStatistic; |
| | | } |
| | | |
| | | private ServiceSubtaskStatistic getStatisticJoy(List<ServiceSubtask> serviceSubtaskList, List<ServiceSubtaskCount> joySubCount) { |
| | | ServiceSubtaskStatistic serviceSubtaskStatistic = new ServiceSubtaskStatistic(); |
| | | //格式化为两位小数的百分比 |
| | | DecimalFormat percentFormat = new DecimalFormat("##.##%"); |
| | | serviceSubtaskStatistic.setDeptname(serviceSubtaskList.get(0).getDeptname()); |
| | | serviceSubtaskStatistic.setDeptcode(serviceSubtaskList.get(0).getDeptcode()); |
| | | serviceSubtaskStatistic.setLeavehospitaldistrictname(serviceSubtaskList.get(0).getLeavehospitaldistrictname()); |
| | | serviceSubtaskStatistic.setLeavehospitaldistrictcode(serviceSubtaskList.get(0).getLeavehospitaldistrictcode()); |
| | | serviceSubtaskStatistic.setDrcode(serviceSubtaskList.get(0).getDrcode()); |
| | | serviceSubtaskStatistic.setDrname(serviceSubtaskList.get(0).getDrname()); |
| | | //出院人次 |
| | | serviceSubtaskStatistic.setDischargeCount(serviceSubtaskList.size()); |
| | | serviceSubtaskStatistic.setJoyCount(0); |
| | | serviceSubtaskStatistic.setJoyAllCount(0); |
| | | for (ServiceSubtask serviceSubtask : serviceSubtaskList) { |
| | | //满意度 |
| | | List<ServiceSubtaskCount> joyCountTemp = joySubCount.stream().filter(r -> r.getSubTaskId().equals(serviceSubtask.getId())).collect(Collectors.toList()); |
| | | if (joyCountTemp != null && joyCountTemp.size() > 0) { |
| | | if (ObjectUtils.isNotEmpty(joyCountTemp.get(0).getJoyCount())) |
| | | serviceSubtaskStatistic.setJoyCount(serviceSubtaskStatistic.getJoyCount() + joyCountTemp.get(0).getJoyCount()); |
| | | if (ObjectUtils.isNotEmpty(joyCountTemp.get(0).getJoyAllCount())) |
| | | serviceSubtaskStatistic.setJoyAllCount(serviceSubtaskStatistic.getJoyAllCount() + joyCountTemp.get(0).getJoyAllCount()); |
| | | } |
| | | //无需随访人次 |
| | | if (serviceSubtask.getSendstate() != null && serviceSubtask.getSendstate() == 4) { |
| | | serviceSubtaskStatistic.setNonFollowUp(serviceSubtaskStatistic.getNonFollowUp() + 1L); |
| | | } |
| | | //应随访人次 |
| | | if (serviceSubtask.getSendstate() != null && serviceSubtask.getSendstate() != 4) { |
| | | serviceSubtaskStatistic.setFollowUpNeeded(serviceSubtaskStatistic.getFollowUpNeeded() + 1L); |
| | | } |
| | | |
| | | //首次出院随访 |
| | | if (serviceSubtask.getVisitCount() != null && serviceSubtask.getVisitCount() == 1) { |
| | | if (serviceSubtask.getSendstate() != null && serviceSubtask.getSendstate() != 4) { |
| | | serviceSubtaskStatistic.setNeedFollowUp(serviceSubtaskStatistic.getNeedFollowUp() + 1L); |
| | | } |
| | | if (serviceSubtask.getSendstate() != null && serviceSubtask.getSendstate() == 2) { |
| | | serviceSubtaskStatistic.setPendingFollowUp(serviceSubtaskStatistic.getPendingFollowUp() + 1L); |
| | | } |
| | | if (serviceSubtask.getSendstate() != null && (serviceSubtask.getSendstate() == 6)) { |
| | | serviceSubtaskStatistic.setFollowUpSuccess(serviceSubtaskStatistic.getFollowUpSuccess() + 1L); |
| | | } |
| | | if (serviceSubtask.getSendstate() != null && serviceSubtask.getSendstate() == 5) { |
| | |
| | | return serviceSubtaskDetail; |
| | | } |
| | | |
| | | /** |
| | | * 电话的补偿方法(老) |
| | | * |
| | | * @param subTaskId |
| | | */ |
| | | private void getSmsCompensate(Long subTaskId) { |
| | | ServiceSubtask serviceSubtask = serviceSubtaskMapper.selectServiceSubtaskById(subTaskId); |
| | | RSAPublicKeyExample rsaPublicKeyExample = new RSAPublicKeyExample(); |
| | |
| | | serviceSubtask.setSendstate(3L); |
| | | serviceSubtaskMapper.updateServiceSubtask(serviceSubtask); |
| | | |
| | | //需要在servicePreachform里记录一下短信状态 |
| | | ServiceSubtaskPreachform serviceSubtaskPreachform = new ServiceSubtaskPreachform(); |
| | | serviceSubtaskPreachform.setPreachform("4"); |
| | | serviceSubtaskPreachform.setSubid(subTaskId); |
| | | serviceSubtaskPreachform.setTaskid(serviceSubtask.getTaskid()); |
| | | serviceSubtaskPreachform.setOrgid(serviceSubtask.getOrgid()); |
| | | List<ServiceSubtaskPreachform> serviceSubtaskPreachforms = serviceSubtaskPreachformMapper.selectServiceSubtaskPreachformList(serviceSubtaskPreachform); |
| | | if (CollectionUtils.isNotEmpty(serviceSubtaskPreachforms)) { |
| | | ServiceSubtaskPreachform serviceSubtaskPreachform1 = serviceSubtaskPreachforms.get(0); |
| | | serviceSubtaskPreachform1.setSendstate("9"); |
| | | serviceSubtaskPreachformMapper.updateServiceSubtaskPreachform(serviceSubtaskPreachform1); |
| | | } else if (CollectionUtils.isEmpty(serviceSubtaskPreachforms)) { |
| | | //如果为空的话,说明用户没有选短信发送方式,这个时候需要强制新增一条 |
| | | //获取sort的最大值 |
| | | ServiceSubtaskPreachform ssp = new ServiceSubtaskPreachform(); |
| | | ssp.setSubid(subTaskId); |
| | | ssp.setTaskid(serviceSubtask.getTaskid()); |
| | | ssp.setOrgid(serviceSubtask.getOrgid()); |
| | | List<ServiceSubtaskPreachform> sspf2 = serviceSubtaskPreachformMapper.selectServiceSubtaskPreachformList(ssp); |
| | | |
| | | serviceSubtaskPreachform.setSort(0L); |
| | | if (CollectionUtils.isNotEmpty(sspf2)) { |
| | | serviceSubtaskPreachform.setSort(Long.valueOf(sspf2.size())); |
| | | } |
| | | serviceSubtaskPreachform.setSendstate("2"); |
| | | serviceSubtaskPreachformMapper.insertServiceSubtaskPreachform(serviceSubtaskPreachform); |
| | | } |
| | | |
| | | } |
| | | |
| | | //通过当前时间,拉取电话总数 |
| | |
| | | int remainingCalls = (int) (remainingHours * phoneUpEveryHour); |
| | | return remainingCalls; |
| | | } |
| | | |
| | | public List<ServiceSubtaskCount> getSfStatisticsJoydetails(ServiceSubtaskCountReq serviceSubtaskCountReq) { |
| | | return serviceSubtaskMapper.getSfStatisticsJoydetails(serviceSubtaskCountReq); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * @param serviceSubtask |
| | | * @param preachform |
| | | * @param remark |
| | | * @param failSendstate |
| | | * @return |
| | | */ |
| | | public Boolean setFailPreachForm(ServiceSubtask serviceSubtask, String preachform, String remark, String failSendstate) { |
| | | //将状态设置为失败 |
| | | ServiceSubtaskPreachform serviceSubtaskPreachform = new ServiceSubtaskPreachform(); |
| | | serviceSubtaskPreachform.setSubid(serviceSubtask.getId()); |
| | | serviceSubtaskPreachform.setTaskid(serviceSubtask.getTaskid()); |
| | | serviceSubtaskPreachform.setOrgid(serviceSubtask.getOrgid()); |
| | | //获取该患者的发送方式总数 |
| | | List<ServiceSubtaskPreachform> spSize = serviceSubtaskPreachformMapper.selectServiceSubtaskPreachformList(serviceSubtaskPreachform); |
| | | |
| | | serviceSubtaskPreachform.setPreachform(preachform); |
| | | //1:未发送状态 |
| | | serviceSubtaskPreachform.setSendstate("1"); |
| | | if (preachform.equals("3")) { |
| | | //电话进入队列后,状态会变成2 |
| | | serviceSubtaskPreachform.setSendstate("2"); |
| | | } |
| | | List<ServiceSubtaskPreachform> serviceSubtaskPreachforms = serviceSubtaskPreachformMapper.selectServiceSubtaskPreachformList(serviceSubtaskPreachform); |
| | | if (CollectionUtils.isNotEmpty(serviceSubtaskPreachforms)) { |
| | | ServiceSubtaskPreachform serviceSubtaskPreachform1 = serviceSubtaskPreachforms.get(0); |
| | | serviceSubtaskPreachform1.setSendstate(failSendstate); |
| | | serviceSubtaskPreachform1.setRemark(remark); |
| | | serviceSubtaskPreachformMapper.updateServiceSubtaskPreachform(serviceSubtaskPreachform1); |
| | | |
| | | //如果当前的preachform已经是最后一个了,那直接将serviceSubtask的sendstate状态改成5就行了(全失败了) |
| | | if (serviceSubtaskPreachform1.getSort() == spSize.size() && failSendstate.equals("4")) { |
| | | serviceSubtask.setCurrentPreachform(preachform); |
| | | serviceSubtask.setSendstate(5L); |
| | | serviceSubtaskMapper.updateServiceSubtask(serviceSubtask); |
| | | return true; |
| | | } |
| | | } |
| | | |
| | | serviceSubtask.setCurrentPreachform(preachform); |
| | | serviceSubtask.setSendstate(3L); |
| | | //如果等于9,则说明电话正常结束了 |
| | | if (failSendstate.equals("9")) serviceSubtask.setSendstate(6L); |
| | | serviceSubtask.setVisitTime(getNextVisitTime(serviceSubtask.getId(), serviceSubtask.getTaskid(), serviceSubtask.getVisitTime())); |
| | | serviceSubtaskMapper.updateServiceSubtask(serviceSubtask); |
| | | return true; |
| | | } |
| | | |
| | | private Date getNextVisitTime(Long subid, Long taskid, Date visitTime) { |
| | | ServiceSubtaskPreachform serviceSubtaskPreachform = new ServiceSubtaskPreachform(); |
| | | serviceSubtaskPreachform.setSubid(subid); |
| | | serviceSubtaskPreachform.setTaskid(taskid); |
| | | List<ServiceSubtaskPreachform> serviceSubtaskPreachforms = serviceSubtaskPreachformMapper.selectServiceSubtaskPreachformList(serviceSubtaskPreachform); |
| | | if (CollectionUtils.isNotEmpty(serviceSubtaskPreachforms)) { |
| | | String compensateTime = serviceSubtaskPreachforms.get(0).getCompensateTime(); |
| | | int hoursToAdd = Integer.valueOf(compensateTime) * 24; |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(visitTime); |
| | | calendar.add(Calendar.HOUR_OF_DAY, hoursToAdd); |
| | | Date newDate = calendar.getTime(); |
| | | return newDate; |
| | | } |
| | | return visitTime; |
| | | } |
| | | } |