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;
@@ -490,6 +522,16 @@
                    }
                    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();
                }
@@ -604,6 +646,15 @@
                    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);
@@ -2009,7 +2060,6 @@
    }
    private ServiceSubtaskStatistic getStatistic(List<ServiceSubtask> serviceSubtaskList) {
        log.error("-------------serviceSubtaskList的值为:{}", serviceSubtaskList);
        ServiceSubtaskStatistic serviceSubtaskStatistic = new ServiceSubtaskStatistic();
@@ -2173,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;
    }
}