| | |
| | | import com.ruoyi.common.exception.base.BaseException; |
| | | import com.ruoyi.common.utils.*; |
| | | import com.smartor.common.FtpService; |
| | | import com.smartor.common.RandomStringGenerator; |
| | | import com.smartor.common.SendService; |
| | | import com.smartor.config.PhoneUtils; |
| | | import com.smartor.domain.*; |
| | |
| | | private IServiceTaskService serviceTaskService; |
| | | |
| | | @Autowired |
| | | private IvrTaskTemplateTargetoptionMapper serviceTaskScriptTargetoptionMapper; |
| | | |
| | | @Autowired |
| | | private IvrTaskVisitResultMapper serviceTaskVisitResultMapper; |
| | | |
| | | @Autowired |
| | |
| | | |
| | | @Autowired |
| | | private IIvrTaskTemplateService ivrTaskTemplateService; |
| | | @Autowired |
| | | private IIvrTaskTemplateScriptService iIvrTaskTemplateScriptService; |
| | | @Autowired |
| | | private IvrTaskTemplateTargetoptionMapper serviceTaskScriptTargetoptionMapper; |
| | | |
| | | @Autowired |
| | | private ISvyTaskTemplateService svyTaskTemplateService; |
| | | |
| | | @Autowired |
| | | private IIvrTaskTemplateScriptService iIvrTaskTemplateScriptService; |
| | | private ISvyLibTemplateScriptService svyLibTemplateScriptService; |
| | | @Autowired |
| | | private ISvyLibTemplateTargetoptionService svyLibTemplateTargetoptionService; |
| | | |
| | | |
| | | @Autowired |
| | | private IServiceOutPathService iServiceOutPathService; |
| | |
| | | |
| | | @Value("${ASRCallBackPath}") |
| | | private String ASRCallBackPath; |
| | | |
| | | @Autowired |
| | | private SendService sendService; |
| | | |
| | | @Value("${hangup}") |
| | | private String hangup; |
| | |
| | | |
| | | @Value("${phoneUpEveryHour}") |
| | | private Integer phoneUpEveryHour; |
| | | |
| | | @Value("${phoneEndHour}") |
| | | private Integer phoneEndHour; |
| | | |
| | |
| | | @Override |
| | | public List<ServiceSubtask> patItem(ServiceSubtaskVO serviceSubtaskVO) { |
| | | List<ServiceSubtask> selectServiceSubtaskList = this.selectServiceSubtaskList(serviceSubtaskVO); |
| | | List<ServiceSubtask> serviceSubtaskList = new ArrayList<>(); |
| | | //获取分数 |
| | | // for (ServiceSubtask serviceSubtask : selectServiceSubtaskList) { |
| | | // //计算患者的分数 |
| | | // if (serviceSubtask.getScore() == null || BigDecimal.ZERO.equals(serviceSubtask.getScore())) { |
| | | // //如果为空的话,去detail里拿到每个题的选项分,如果是作答题,直接拿题目分(前题,该模板是分数类型) |
| | | // Map<String, Object> map = getScore(serviceSubtask, serviceSubtaskVO.getDetailResult()); |
| | | // serviceSubtask.setScore((BigDecimal) map.get("score")); |
| | | // serviceSubtaskMapper.updateServiceSubtask(serviceSubtask); |
| | | // if ((Boolean) map.get("isExist") == true) { |
| | | // //测试完删除(应付测试用的) |
| | | // serviceSubtaskList.add(serviceSubtask); |
| | | // } |
| | | // } else { |
| | | // //测试完删除(应付测试用的) |
| | | // if (!StringUtils.isEmpty(serviceSubtaskVO.getDetailResult())) { |
| | | // ServiceSubtaskDetail serviceSubtaskDetail = new ServiceSubtaskDetail(); |
| | | // serviceSubtaskDetail.setSubId(serviceSubtask.getId()); |
| | | // List<ServiceSubtaskDetail> serviceSubtaskDetails = serviceSubtaskDetailMapper.selectServiceSubtaskDetailList(serviceSubtaskDetail); |
| | | // for (ServiceSubtaskDetail ssd : serviceSubtaskDetails) { |
| | | // if (ssd.getAsrtext().equals(serviceSubtaskVO.getDetailResult())) { |
| | | // serviceSubtaskList.add(serviceSubtask); |
| | | // } |
| | | // } |
| | | // }else { |
| | | // serviceSubtaskList.add(serviceSubtask); |
| | | // } |
| | | // } |
| | | // } |
| | | return selectServiceSubtaskList; |
| | | } |
| | | |
| | |
| | | |
| | | @Override |
| | | public Map<String, Object> patItemCount(ServiceSubtaskVO serviceSubtaskVO) { |
| | | serviceSubtaskVO.setSendstate(null); |
| | | serviceSubtaskVO.setPageSize(99999999); |
| | | serviceSubtaskVO.setPageNum(1); |
| | | List<ServiceSubtask> selectServiceSubtaskList = this.selectServiceSubtaskList(serviceSubtaskVO); |
| | | ServiceSubtaskVO serviceSubtaskVO1 = DtoConversionUtils.sourceToTarget(serviceSubtaskVO, ServiceSubtaskVO.class); |
| | | serviceSubtaskVO1.setSendstate(null); |
| | | serviceSubtaskVO1.setPageSize(99999999); |
| | | serviceSubtaskVO1.setPageNum(1); |
| | | List<ServiceSubtask> selectServiceSubtaskList = this.selectServiceSubtaskList(serviceSubtaskVO1); |
| | | Map<String, Object> map = new HashMap<>(); |
| | | Integer wzx = 0; |
| | | Integer ysf = 0; |
| | |
| | | } |
| | | if (serviceTaskVO.getLongTask() != null && serviceTaskVO.getLongTask() == 1) |
| | | serviceSubtask.setLongSendTime(patTaskRelevance.getLongSendTime()); |
| | | |
| | | //生成外链地址 |
| | | String outPath = null; |
| | | if (serviceTaskVO.getType().equals("1")) |
| | | outPath = getOutPath(serviceSubtask.getPhone(), serviceSubtask.getTaskid(), serviceSubtask.getTaskName(), serviceSubtask.getPatid(), 1); |
| | | else if (serviceTaskVO.getType().equals("2")) |
| | | outPath = getOutPath(serviceSubtask.getPhone(), serviceSubtask.getTaskid(), serviceSubtask.getTaskName(), serviceSubtask.getPatid(), 2); |
| | | else if (serviceTaskVO.getType().equals("3")) |
| | | outPath = getOutPath(serviceSubtask.getPhone(), serviceSubtask.getTaskid(), serviceSubtask.getTaskName(), serviceSubtask.getPatid(), 3); |
| | | serviceSubtask.setOutPath(outPath); |
| | | serviceSubtaskMapper.insertServiceSubtask(serviceSubtask); |
| | | serviceSubtask.getId().intValue(); |
| | | } |
| | |
| | | serviceSubtask.setNurseName(patTaskRelevance.getNurseName()); |
| | | serviceSubtask.setVisitTime(patTaskRelevance.getVisitTime()); |
| | | serviceSubtask.setTextParam(new Gson().toJson(serviceTaskVO.getTextParam())); |
| | | //生成外链地址 |
| | | String outPath = null; |
| | | if (serviceTaskVO.getType().equals("1")) |
| | | outPath = getOutPath(serviceSubtask.getPhone(), serviceSubtask.getTaskid(), serviceSubtask.getTaskName(), serviceSubtask.getPatid(), 1); |
| | | else if (serviceTaskVO.getType().equals("2")) |
| | | outPath = getOutPath(serviceSubtask.getPhone(), serviceSubtask.getTaskid(), serviceSubtask.getTaskName(), serviceSubtask.getPatid(), 2); |
| | | else if (serviceTaskVO.getType().equals("3")) |
| | | outPath = getOutPath(serviceSubtask.getPhone(), serviceSubtask.getTaskid(), serviceSubtask.getTaskName(), serviceSubtask.getPatid(), 3); |
| | | |
| | | if (patTaskRelevance.getIsoperation() != null) { |
| | | if (patTaskRelevance.getIsoperation() == 2) serviceSubtask.setUpdateTime(new Date()); |
| | | serviceSubtaskMapper.updateServiceSubtaskByCondition(serviceSubtask); |
| | |
| | | } |
| | | |
| | | |
| | | |
| | | private ServiceSubtaskStatistic getStatistic(List<ServiceSubtask> serviceSubtaskList) { |
| | | log.error("-------------serviceSubtaskList的值为:{}", serviceSubtaskList); |
| | | ServiceSubtaskStatistic serviceSubtaskStatistic = new ServiceSubtaskStatistic(); |
| | |
| | | int remainingCalls = (int) (remainingHours * phoneUpEveryHour); |
| | | return remainingCalls; |
| | | } |
| | | |
| | | private String getOutPath(String phone, Long tid, String taskName, Long pId, Integer type) { |
| | | log.info("tid的值为:{},pid的值为:{}",tid,pId); |
| | | //对url中两个参数加密 |
| | | RSAPublicKeyExample rsaPublicKeyExample = new RSAPublicKeyExample(); |
| | | String taskId = rsaPublicKeyExample.encryptedData(tid.toString(), pub_key).toString(); |
| | | String outpath = null; |
| | | try { |
| | | String patid = rsaPublicKeyExample.encryptedData(pId.toString(), pub_key).toString(); |
| | | |
| | | log.info("tid加密后的值为:{},pid加密后的值为:{}",taskId,patid); |
| | | SendMagParam sendMagParam = new SendMagParam(); |
| | | sendMagParam.setType("4"); |
| | | if (type == 1) { |
| | | //随访 |
| | | ServiceOutPath serviceOutPath = new ServiceOutPath(); |
| | | serviceOutPath.setParam1(taskId); |
| | | serviceOutPath.setParam2(patid); |
| | | serviceOutPath.setCreateTime(new Date()); |
| | | serviceOutPath.setType(1); |
| | | iServiceOutPathService.insertServiceOutPath(serviceOutPath); |
| | | //转成16进制 |
| | | String format = String.format("%03X", serviceOutPath.getId()) + RandomStringGenerator.generateRandomString(); |
| | | serviceOutPath.setRadix(format); |
| | | outpath = localIP + ":" + req_path + "/sf?p=" + format; |
| | | serviceOutPath.setUpdateTime(new Date()); |
| | | iServiceOutPathService.updateServiceOutPath(serviceOutPath); |
| | | sendMagParam.setPhone(phone); |
| | | sendMagParam.setUrl(outpath); |
| | | sendMagParam.setContent("您好,邀请您填写出院随访调查表,请点击" + sendMagParam.getUrl() + " 填写。感谢您配合!"); |
| | | } else if (type == 2) { |
| | | //问券(问题) |
| | | ServiceOutPath serviceOutPath = new ServiceOutPath(); |
| | | serviceOutPath.setParam1(taskId); |
| | | serviceOutPath.setParam2(patid); |
| | | serviceOutPath.setParam3(taskName); |
| | | serviceOutPath.setCreateTime(new Date()); |
| | | serviceOutPath.setType(2); |
| | | iServiceOutPathService.insertServiceOutPath(serviceOutPath); |
| | | String format = String.format("%03X", serviceOutPath.getId()) + RandomStringGenerator.generateRandomString(); |
| | | serviceOutPath.setRadix(format); |
| | | serviceOutPath.setUpdateTime(new Date()); |
| | | outpath = localIP + ":" + req_path + "/wt?p=" + format; |
| | | iServiceOutPathService.updateServiceOutPath(serviceOutPath); |
| | | |
| | | // sendMagParam.setUrl(ip + ":" + req_path + "/outsideChainwt?param1=" + taskId + "¶m2=" + patid + "¶m3=" + URLEncoder.encode(ivrTask1.getTaskName(), StandardCharsets.UTF_8.toString()) + "¶m5=false"); |
| | | sendMagParam.setPhone(phone); |
| | | sendMagParam.setUrl(outpath); |
| | | sendMagParam.setContent("您好,邀请您填写出院调查表,请点击" + sendMagParam.getUrl() + " 填写。感谢您配合!"); |
| | | log.info("您好,邀请您填写出院调查表,请点击,{}", sendMagParam.getUrl()); |
| | | } else if (type == 3) { |
| | | //宣教 |
| | | ServiceOutPath serviceOutPath = new ServiceOutPath(); |
| | | serviceOutPath.setParam1(taskId); |
| | | serviceOutPath.setParam2(patid); |
| | | serviceOutPath.setParam3(taskName); |
| | | serviceOutPath.setCreateTime(new Date()); |
| | | serviceOutPath.setType(3); |
| | | iServiceOutPathService.insertServiceOutPath(serviceOutPath); |
| | | String format = String.format("%03X", serviceOutPath.getId()) + RandomStringGenerator.generateRandomString(); |
| | | serviceOutPath.setRadix(format); |
| | | serviceOutPath.setUpdateTime(new Date()); |
| | | outpath = localIP + ":" + req_path + "/xj?p=" + format; |
| | | iServiceOutPathService.updateServiceOutPath(serviceOutPath); |
| | | sendMagParam.setPhone(phone); |
| | | sendMagParam.setUrl(outpath); |
| | | sendMagParam.setContent("您好,邀请您填写出院宣教调查表,请点击" + sendMagParam.getUrl() + "查看。感谢您配合!"); |
| | | log.info("-----------sendMagParam的值为:{}", sendMagParam); |
| | | } |
| | | } catch (Exception e) { |
| | | log.error("生成失败了:{}", e.getMessage()); |
| | | } |
| | | return outpath; |
| | | } |
| | | |
| | | private Map<String, Object> getScore(ServiceSubtask serviceSubtask, String detailResult) { |
| | | Map<String, Object> map = new HashMap<>(); |
| | | Boolean isExist = false; |
| | | //统计总分 |
| | | BigDecimal bigDecimal = BigDecimal.ZERO; |
| | | if (serviceSubtask.getScore() != null && !BigDecimal.ZERO.equals(serviceSubtask.getScore())) { |
| | | //如果有分数,直接返回 |
| | | map.put("score", serviceSubtask.getScore()); |
| | | //isExist应付测试用的,测试完后删除 |
| | | map.put("isExist", true); |
| | | return map; |
| | | } |
| | | |
| | | if (serviceSubtask.getScore() == null || BigDecimal.ZERO.equals(serviceSubtask.getScore())) { |
| | | //如果为空的话,去detail里拿到每个题的选项分,如果是作答题,直接拿题目分(前题,该模板是分数类型) |
| | | ServiceTask serviceTask = serviceTaskService.selectServiceTaskByTaskid(serviceSubtask.getTaskid()); |
| | | if (serviceTask.getType().equals("1")) { |
| | | //如果是机器人语音 |
| | | IvrTaskTemplate ivrTaskTemplate = ivrTaskTemplateService.selectIvrTaskTemplateByID(serviceTask.getTemplateid()); |
| | | //判断是不是评分 |
| | | if (StringUtils.isNotEmpty(ivrTaskTemplate.getScoreType()) && ivrTaskTemplate.getScoreType().equals("1")) { |
| | | ServiceSubtaskDetail serviceSubtaskDetail = new ServiceSubtaskDetail(); |
| | | serviceSubtaskDetail.setSubId(serviceSubtask.getId()); |
| | | List<ServiceSubtaskDetail> serviceSubtaskDetailList = serviceSubtaskDetailMapper.selectServiceSubtaskDetailList(serviceSubtaskDetail); |
| | | for (ServiceSubtaskDetail serviceSubtaskDetail1 : serviceSubtaskDetailList) { |
| | | Long scriptid = serviceSubtaskDetail1.getScriptid(); |
| | | IvrTaskTemplateScript ivrTaskTemplateScript = iIvrTaskTemplateScriptService.selectIvrTaskTemplateScriptByID(scriptid); |
| | | if (StringUtils.isNotEmpty(ivrTaskTemplateScript.getScriptType())) { |
| | | if (ivrTaskTemplateScript.getScriptType().equals("3") || ivrTaskTemplateScript.getScriptType().equals("4")) { |
| | | if (StringUtils.isNotEmpty(serviceSubtaskDetail1.getAsrtext())) { |
| | | //不是选择题,直接拿题目分 |
| | | bigDecimal = bigDecimal.add(ivrTaskTemplateScript.getScore()); |
| | | } |
| | | } else if (ivrTaskTemplateScript.getScriptType().equals("1") || ivrTaskTemplateScript.getScriptType().equals("2")) { |
| | | IvrTaskTemplateTargetoption ivrTaskTemplateTargetoption = new IvrTaskTemplateTargetoption(); |
| | | ivrTaskTemplateTargetoption.setScriptid(scriptid); |
| | | List<IvrTaskTemplateTargetoption> ivrTaskTemplateTargetoptions = serviceTaskScriptTargetoptionMapper.selectIvrTaskTemplateTargetoptionList(ivrTaskTemplateTargetoption); |
| | | //获取选项,用选中的值去选项里匹配,拿到选项分 |
| | | for (IvrTaskTemplateTargetoption ivrTaskTemplateTargetoption1 : ivrTaskTemplateTargetoptions) { |
| | | if (ivrTaskTemplateTargetoption1.getTargetvalue().equals(serviceSubtaskDetail1.getMatchedtext())) { |
| | | bigDecimal = bigDecimal.add(ivrTaskTemplateTargetoption1.getScore()); |
| | | //测试完删除 |
| | | if (StringUtils.isEmpty(detailResult) || ivrTaskTemplateTargetoption1.getTargetvalue().equals(detailResult)) { |
| | | isExist = true; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | if (serviceTask.getType().equals("2")) { |
| | | //如果是问卷 |
| | | SvyTaskTemplate svyTaskTemplate = svyTaskTemplateService.selectSvyTaskTemplateBySvyid(serviceTask.getTemplateid()); |
| | | //判断是不是评分 |
| | | if (StringUtils.isNotEmpty(svyTaskTemplate.getScoreType()) && svyTaskTemplate.getScoreType().equals("1")) { |
| | | ServiceSubtaskDetail serviceSubtaskDetail = new ServiceSubtaskDetail(); |
| | | serviceSubtaskDetail.setSubId(serviceSubtask.getId()); |
| | | List<ServiceSubtaskDetail> serviceSubtaskDetailList = serviceSubtaskDetailMapper.selectServiceSubtaskDetailList(serviceSubtaskDetail); |
| | | for (ServiceSubtaskDetail serviceSubtaskDetail1 : serviceSubtaskDetailList) { |
| | | Long scriptid = serviceSubtaskDetail1.getScriptid(); |
| | | SvyLibTemplateScript svyLibTemplateScript = svyLibTemplateScriptService.selectSvyLibTemplateScriptByTopicid(scriptid); |
| | | if (StringUtils.isNotEmpty(svyLibTemplateScript.getScriptType())) { |
| | | if (svyLibTemplateScript.getScriptType().equals("3") || svyLibTemplateScript.getScriptType().equals("4")) { |
| | | if (StringUtils.isNotEmpty(serviceSubtaskDetail1.getAsrtext())) { |
| | | //不是选择题,直接拿题目分 |
| | | bigDecimal = bigDecimal.add(svyLibTemplateScript.getScore()); |
| | | } |
| | | } else if (svyLibTemplateScript.getScriptType().equals("1") || svyLibTemplateScript.getScriptType().equals("2")) { |
| | | SvyLibTemplateTargetoption svyLibTemplateTargetoption = new SvyLibTemplateTargetoption(); |
| | | svyLibTemplateTargetoption.setScriptid(scriptid); |
| | | List<SvyLibTemplateTargetoption> svyLibTemplateTargetoptions = svyLibTemplateTargetoptionService.selectSvyLibTemplateTargetoptionList(svyLibTemplateTargetoption); |
| | | //获取选项,用选中的值去选项里匹配,拿到选项分 |
| | | for (SvyLibTemplateTargetoption svyLibTemplateTargetoption1 : svyLibTemplateTargetoptions) { |
| | | if (svyLibTemplateTargetoption1.getOptioncontent().equals(serviceSubtaskDetail1.getAsrtext())) { |
| | | bigDecimal = bigDecimal.add(svyLibTemplateTargetoption1.getScore()); |
| | | //测试完删除 |
| | | if (StringUtils.isEmpty(detailResult) || svyLibTemplateTargetoption1.getOptioncontent().equals(detailResult)) { |
| | | isExist = true; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | } |
| | | |
| | | } |
| | | map.put("score", bigDecimal); |
| | | map.put("isExist", isExist); |
| | | return map; |
| | | } |
| | | |
| | | } |