liusheng
3 天以前 0a8f9800a264c848adf1361db5bcab5b2fc32869
smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskServiceImpl.java
@@ -9,6 +9,7 @@
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.*;
@@ -58,9 +59,6 @@
    private IServiceTaskService serviceTaskService;
    @Autowired
    private IvrTaskTemplateTargetoptionMapper serviceTaskScriptTargetoptionMapper;
    @Autowired
    private IvrTaskVisitResultMapper serviceTaskVisitResultMapper;
    @Autowired
@@ -74,12 +72,18 @@
    @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;
@@ -98,9 +102,6 @@
    @Value("${ASRCallBackPath}")
    private String ASRCallBackPath;
    @Autowired
    private SendService sendService;
    @Value("${hangup}")
    private String hangup;
@@ -125,6 +126,7 @@
    @Value("${phoneUpEveryHour}")
    private Integer phoneUpEveryHour;
    @Value("${phoneEndHour}")
    private Integer phoneEndHour;
@@ -251,6 +253,35 @@
    @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;
    }
@@ -267,10 +298,11 @@
    @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;
@@ -439,6 +471,19 @@
                return map;
            }
            //获取随访时间
            Date visitTime = null;
            List<TaskSendTimeVO> sendTimeslot = serviceTaskVO.getSendTimeslot();
            if (CollectionUtils.isNotEmpty(sendTimeslot) && sendTimeslot.size() > 0) {
                String dateString = sendTimeslot.get(0).getBegantime();
                SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                try {
                    visitTime = format.parse(dateString);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            //将任务信息放到服务表中
            ServiceSubtask serviceSubtask = DtoConversionUtils.sourceToTarget(serviceTaskVO, ServiceSubtask.class);
            serviceSubtask.setTaskid(serviceTask.getTaskid().longValue());
@@ -450,13 +495,12 @@
                    //将任务信息新增到随访服务表中
                    serviceSubtask.setSendname(patTaskRelevance.getName());
                    serviceSubtask.setAge(patTaskRelevance.getAge());
//                    serviceSubtask.setLibtemplateid(Long.valueOf(serviceTask.getLibtemplateid()));
                    serviceSubtask.setSfzh(patTaskRelevance.getIdcardno());
                    serviceSubtask.setPhone(patTaskRelevance.getTelcode());
                    serviceSubtask.setAddr(patTaskRelevance.getAddr());
                    serviceSubtask.setPatid(patTaskRelevance.getPatid());
                    serviceSubtask.setCreateTime(DateUtils.getNowDate());
                    serviceSubtask.setSendstate(1L);
                    serviceSubtask.setSendstate(2L);
                    if (serviceTaskVO.getLongTask() != null && serviceTaskVO.getLongTask() == 1)
                        serviceSubtask.setSendstate(2L);
                    serviceSubtask.setDeptcode(patTaskRelevance.getDeptCode());
@@ -472,12 +516,22 @@
                    serviceSubtask.setEndtime(patTaskRelevance.getEndtime());
                    serviceSubtask.setNurseId(patTaskRelevance.getNurseId());
                    serviceSubtask.setNurseName(patTaskRelevance.getNurseName());
                    serviceSubtask.setVisitTime(patTaskRelevance.getVisitTime());
                    serviceSubtask.setVisitTime(visitTime);
                    if (serviceTask.getSendType() == 2) {
                        serviceSubtask.setVisitTime(new Date());
                    }
                    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();
                }
@@ -592,11 +646,20 @@
                    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);
                        if (patTaskRelevance.getIsoperation() == 1) {
                            serviceSubtask.setSendstate(1L);
                            serviceSubtask.setSendstate(2L);
                            serviceSubtask.setCreateTime(new Date());
                            serviceSubtaskMapper.insertServiceSubtask(serviceSubtask);
                        }
@@ -1965,6 +2028,38 @@
        return serviceSubtaskStatistics;
    }
    /**
     * 服务统计查询 - 按时间维度统计出院/门诊随访数据
     *
     * @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 (com.ruoyi.common.utils.StringUtils.isEmpty(request.getTimeType())) {
            request.setTimeType("day");
        }
        List<ServiceStatisticsResponse> result = serviceSubtaskMapper.getServiceStatistics(request);
        log.info("getServiceStatistics返回结果数量:{}", result.size());
        return result;
    }
    private ServiceSubtaskStatistic getStatistic(List<ServiceSubtask> serviceSubtaskList) {
        log.error("-------------serviceSubtaskList的值为:{}", serviceSubtaskList);
        ServiceSubtaskStatistic serviceSubtaskStatistic = new ServiceSubtaskStatistic();
@@ -2128,4 +2223,175 @@
        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 + "&param2=" + patid + "&param3=" + URLEncoder.encode(ivrTask1.getTaskName(), StandardCharsets.UTF_8.toString()) + "&param5=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;
    }
}