liusheng
2025-02-21 86e7cce6159d6d74bcc636327939ec9ea8d3009d
smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskServiceImpl.java
@@ -124,6 +124,8 @@
    @Value("${phoneUpEveryHour}")
    private Integer phoneUpEveryHour;
    @Value("${phoneEndHour}")
    private Integer phoneEndHour;
    /**
     * 查询单一任务(随访)
@@ -197,7 +199,7 @@
                patTaskRelevance.setPhone(serviceSubtask1.getPhone());
                patTaskRelevance.setTelcode(serviceSubtask1.getPhone());
                patTaskRelevance.setAddr(serviceSubtask1.getAddr());
                patTaskRelevance.setDiagname(serviceSubtask1.getDiagname());
                patTaskRelevance.setDiagname(serviceSubtask1.getLeavediagname());
                patTaskRelevance.setPatid(serviceSubtask1.getPatid());
                patTaskRelevance.setSendStatus(serviceSubtask1.getSendstate());
                patTaskRelevance.setDeptCode(serviceSubtask1.getDeptcode());
@@ -224,7 +226,7 @@
                patTaskRelevance.setDeptName(serviceSubtask1.getDeptname());
                patTaskRelevance.setDeptCode(serviceSubtask1.getDeptcode());
                patTaskRelevance.setBedNo(serviceSubtask1.getBedNo());
                patTaskRelevance.setDiagname(serviceSubtask1.getDiagname());
                patTaskRelevance.setDiagname(serviceSubtask1.getLeavediagname());
                patTaskRelevance.setPatid(serviceSubtask1.getPatid());
                patTaskRelevance.setSendStatus(serviceSubtask1.getSendstate());
                patTaskRelevance.setLeavehospitaldistrictcode(serviceSubtask1.getLeavehospitaldistrictcode());
@@ -1452,7 +1454,9 @@
            //phoneCount()  通过给出的每个小时需要打出的电话量,算出到晚上8点一点能打出多少个电话,获取到总量
            //如果需要立即执行的数据量大于一天要执行的上限,则只取上限的数量,其它的则放回redis中
            count = Math.min(phoneCount(), (int) size);
            cacheList = listOps.range("cache-0", 0, count - 1);
            if (count != 0) {
                cacheList = listOps.range("cache-0", 0, count - 1);
            }
        }
        log.error("任务拉取cache-0的值是多少:{}", cacheList);
@@ -1507,6 +1511,10 @@
                PullTaskVO pullTaskVO = new PullTaskVO();
                String subId = subIds.get(i).trim();
                ServiceSubtask serviceSubtask = serviceSubtaskMapper.selectServiceSubtaskById(Long.valueOf(subId));
                if (ObjectUtils.isEmpty(serviceSubtask)) {
                    log.error("该subId有问题,在表中查询不到:{}", subId);
                    continue;
                }
                ServiceTask serviceTask = serviceTaskService.selectServiceTaskByTaskid(serviceSubtask.getTaskid());
                IvrTaskTemplate ivrTaskTemplate = ivrTaskTemplateService.selectIvrTaskTemplateByID(serviceSubtask.getTemplateid());
                if (ObjectUtils.isEmpty(ivrTaskTemplate)) continue;
@@ -1850,6 +1858,7 @@
            //无人接听
            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")) {
//        if (phoneCallRecordVO.getAnswered() != null && phoneCallRecordVO.getAnswered() == true) {
            log.error("有人接电话了,并且完了");
@@ -1867,6 +1876,8 @@
            redisCache.deleteObject(phoneCallRecordVO.getTaskid() + "recordAccept-hungup");
        } else {
            //患者拒绝随访
            //先把该subId从cache_exist中剔除,只要有回调就剔除(目的是,尽快让cache-exist为空,去缓存下一批要打的电话;这里剔除不影响电话的正常业务)
            redisCache.removeElementFromList("cache-exist", phoneCallRecordVO.getTaskid());
            ServiceSubtask serviceSubtask = new ServiceSubtask();
            serviceSubtask.setRemark("电话接通成功,患者拒绝随访");
            serviceSubtask.setId(Long.valueOf(phoneCallRecordVO.getTaskid()));
@@ -2079,13 +2090,17 @@
        // 当前时间
        LocalTime currentTime = LocalTime.now();
        // 目标时间(晚上 8 点)
        LocalTime targetTime = LocalTime.of(20, 0);
        LocalTime targetTime = LocalTime.of(phoneEndHour, 0);
        // 计算当前时间到目标时间的时长
        Duration duration = Duration.between(currentTime, targetTime);
        // 获取剩余时间的小时数
        long remainingHours = duration.toHours();
        long remainingHours = 0;
        long remainingMinutes = duration.toMinutes();
        //如果超过8点,就设置为0
        if (remainingHours < 0) remainingHours = 0;
        //距离结束时间小于20分钟,就不拉取了
        if (remainingMinutes < 20) remainingHours = 0;
        else if (remainingMinutes < 60 && remainingMinutes > 20) remainingHours = 1;
        else if (remainingMinutes > 60) remainingHours = remainingMinutes / 60;
        // 计算剩余可以打的电话数
        int remainingCalls = (int) (remainingHours * phoneUpEveryHour);
        return remainingCalls;