陈昶聿
7 小时以前 2d3c7bb2b88bdd09b209243fe07e756a8abeb030
smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskServiceImpl.java
@@ -329,18 +329,41 @@
            }
            //获取该患者所有的执行状态
            List<ServiceSubtaskPreachform> serviceSubtaskPreachformList = serviceSubtaskPreachformLists.stream().filter((item -> item.getSubid().equals(serviceSubtask1.getId()) && item.getTaskid().equals(serviceTask.getTaskid()))).collect(Collectors.toList());
            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);
//            List<ServiceSubtaskPreachform> serviceSubtaskPreachformList = serviceSubtaskPreachformLists.stream().filter((item -> item.getSubid().equals(serviceSubtask1.getId()) && item.getTaskid().equals(serviceTask.getTaskid()))).collect(Collectors.toList());
//            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);
        }
        if(StringUtils.isNotEmpty(serviceTaskVO.getPreachformDesc())){
            //直接通过PreachformDesc生成List返回
            try {
                List<Map<String, Object>> mapList = objectMapper.readValue(serviceTaskVO.getPreachformDesc(), List.class);
                serviceTaskVO.setPreachformList(mapList);
            }catch (Exception e) {
            }
        }else {
            if(CollectionUtils.isNotEmpty(list)){
                //获取该患者所有的执行状态
                List<ServiceSubtaskPreachform> serviceSubtaskPreachformList = serviceSubtaskPreachformLists.stream()
                        .filter((item -> item.getSubid().equals(list.get(0).getId()) && item.getTaskid().equals(serviceTask.getTaskid()))).collect(Collectors.toList());
                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);
            }
        }
        serviceTaskVO.setPatTaskRelevances(patTaskRelevances);
        return serviceTaskVO;
@@ -350,11 +373,16 @@
    public List<ServiceSubtaskRes> patItem(ServiceSubtaskEntity serviceSubtaskEntity) {
        if (serviceSubtaskEntity.getSendstateView() != null) {
            //            1:待随访(2 待发送);2:随访中(3 已发送、1 被领取)、3:未完成(5 发送失败、7、超时)、4:已完成( 6 已完成)、5:无需随访(4 不执行)
            if (serviceSubtaskEntity.getSendstateView() == 1) serviceSubtaskEntity.setSendstates(new ArrayList<>(Arrays.asList(2L)));
            if (serviceSubtaskEntity.getSendstateView() == 2) serviceSubtaskEntity.setSendstates(new ArrayList<>(Arrays.asList(1L, 3L)));
            if (serviceSubtaskEntity.getSendstateView() == 3) serviceSubtaskEntity.setSendstates(new ArrayList<>(Arrays.asList(5L, 7L)));
            if (serviceSubtaskEntity.getSendstateView() == 4) serviceSubtaskEntity.setSendstates(new ArrayList<>(Arrays.asList(6L)));
            if (serviceSubtaskEntity.getSendstateView() == 5) serviceSubtaskEntity.setSendstates(new ArrayList<>(Arrays.asList(4L)));
            if (serviceSubtaskEntity.getSendstateView() == 1)
                serviceSubtaskEntity.setSendstates(new ArrayList<>(Arrays.asList(2L)));
            if (serviceSubtaskEntity.getSendstateView() == 2)
                serviceSubtaskEntity.setSendstates(new ArrayList<>(Arrays.asList(1L, 3L)));
            if (serviceSubtaskEntity.getSendstateView() == 3)
                serviceSubtaskEntity.setSendstates(new ArrayList<>(Arrays.asList(5L, 7L)));
            if (serviceSubtaskEntity.getSendstateView() == 4)
                serviceSubtaskEntity.setSendstates(new ArrayList<>(Arrays.asList(6L)));
            if (serviceSubtaskEntity.getSendstateView() == 5)
                serviceSubtaskEntity.setSendstates(new ArrayList<>(Arrays.asList(4L)));
        }
        List<ServiceSubtask> selectServiceSubtaskList = this.selectServiceSubtaskList(serviceSubtaskEntity);
@@ -488,6 +516,7 @@
        if (patMedInhospList.size() > 0) {
            serviceSubtask1.setIsVisitAgain(2);
            serviceSubtask1.setRemark(StringUtils.isNotEmpty(serviceSubtask.getRemark()) ? serviceSubtask.getRemark() + ";患者再入院了" : "患者再入院了");
            serviceSubtask1.setSendstate(4L);
            serviceSubtaskMapper.updateServiceSubtask(serviceSubtask1);
            return "无需再次随访,患者再入院了";
        } else if (serviceSubtask1.getSendstate() == 4L) {
@@ -747,11 +776,10 @@
                    serviceSubtask.setPatid(patTaskRelevance.getPatid());
                    serviceSubtask.setCreateTime(DateUtils.getNowDate());
                    serviceSubtask.setInhospid(patTaskRelevance.getHospid());
                    serviceSubtask.setSendstate(1L);
                    if (serviceTaskVO.getLongTask() != null && serviceTaskVO.getLongTask() == 1)
                        serviceSubtask.setSendstate(2L);
                    serviceSubtask.setDeptcode(patTaskRelevance.getDeptcode());
                    serviceSubtask.setDeptname(patTaskRelevance.getDeptName());
                    //新建完成就是待发送状态
                    serviceSubtask.setSendstate(2L);
                    serviceSubtask.setDeptcode(StringUtils.isNotEmpty(patTaskRelevance.getDeptcode())?patTaskRelevance.getDeptcode():serviceTaskVO.getDeptcode());
                    serviceSubtask.setDeptname(StringUtils.isNotEmpty(patTaskRelevance.getDeptName())?patTaskRelevance.getDeptName():serviceTaskVO.getDeptname());
                    serviceSubtask.setLeavehospitaldistrictcode(patTaskRelevance.getLeavehospitaldistrictcode());
                    serviceSubtask.setLeavehospitaldistrictname(patTaskRelevance.getLeavehospitaldistrictname());
                    serviceSubtask.setType(serviceTaskVO.getType());
@@ -772,9 +800,13 @@
                    serviceSubtask.setContinueTimeNow(patTaskRelevance.getContinueTimeNow());
                    serviceSubtask.setCreateBy(serviceTask.getCreateBy());
                    serviceSubtask.setUpdateBy(serviceTask.getCreateBy());
                    serviceSubtask.setVisitTime(patTaskRelevance.getVisittime());
                    if (serviceTaskVO.getLongTask() != null && serviceTaskVO.getLongTask() == 1)
                    serviceSubtask.setVisitTime(DateUtils.parseDate(serviceTaskVO.getShowTimeMorn()));
                    //如果立即执行,时间就是当前时间
                    if(serviceTaskVO.getSendType()!=null&&serviceTaskVO.getSendType()==2) serviceSubtask.setVisitTime(new Date());
                    if (serviceTaskVO.getLongTask() != null && serviceTaskVO.getLongTask() == 1) {
                        serviceSubtask.setLongSendTime(patTaskRelevance.getLongSendTime());
                        serviceSubtask.setVisitTime(patTaskRelevance.getVisittime());
                    }
                    serviceSubtaskMapper.insertServiceSubtask(serviceSubtask);
                    serviceSubtask.getId().intValue();
@@ -826,20 +858,23 @@
                    redisCache.removeElementFromList("cache-3", serviceSubtask.getId().toString());
                    redisCache.removeElementFromList("cache-4", serviceSubtask.getId().toString());
                    //将出入院表的数据,还原成还未处理的状态
                    if(serviceSubtask.getServiceType().equals("2")) {
                        PatMedInhosp patMedInhosp = new PatMedInhosp();
                        patMedInhosp.setDeptcheckFlag("0");
                        patMedInhosp.setWardcheckFlag("0");
                        patMedInhosp.setDiagcheckFlag("0");
                        patMedInhosp.setInhospid(serviceSubtask.getInhospid());
                        patMedInhospMapper.updatePatMedInhosp(patMedInhosp);
                    }else if(serviceSubtask.getServiceType().equals("3")) {
                        if(serviceSubtask.getInhospid()!=null) {
                            PatMedOuthospQueryReq req=new PatMedOuthospQueryReq();
                    if (serviceSubtask.getServiceType().equals("2")) {
                        ServiceTask st = serviceTaskService.selectServiceTaskByTaskid(serviceSubtask.getTaskid());
                        //如果任务是长期任务,需要将该患者的出入院数据还原成还未处理的状态
                        if (st != null && st.getLongTask() == 1) {
                            PatMedInhosp patMedInhosp = new PatMedInhosp();
                            patMedInhosp.setDeptcheckFlag("0");
                            patMedInhosp.setWardcheckFlag("0");
                            patMedInhosp.setDiagcheckFlag("0");
                            patMedInhosp.setInhospid(serviceSubtask.getInhospid());
                            patMedInhospMapper.updatePatMedInhosp(patMedInhosp);
                        }
                    } else if (serviceSubtask.getServiceType().equals("3")) {
                        if (serviceSubtask.getInhospid() != null) {
                            PatMedOuthospQueryReq req = new PatMedOuthospQueryReq();
                            req.setOuthospno(serviceSubtask.getHospno());
                            List<PatMedOuthosp> patMedOuthosps = patMedOuthospMapper.callSpQueryOuthosp(req);
                            if(CollectionUtils.isNotEmpty(patMedOuthosps)) {
                            if (CollectionUtils.isNotEmpty(patMedOuthosps)) {
                                PatMedOuthosp patMedOuthosp = patMedOuthosps.get(0);
                                patMedOuthosp.setServerState("0");
                                patMedOuthospService.updatePatMedOuthosp(patMedOuthosp);
@@ -922,8 +957,10 @@
                    if (StringUtils.isNotEmpty(serviceTaskVO.getIcd10code())) {
                        String[] icd10codes = serviceTaskVO.getIcd10code().split(",");
                        String[] icd10names = serviceTaskVO.getIcd10name().split(",");
                        if (icd10codes.length != icd10names.length) {
                            throw new BaseException("疾病编码和疾病名称数量不一致");
                        if(!active.equals("nhfy")&&!active.equals("druid")){
                            if (icd10codes.length != icd10names.length) {
                                throw new BaseException("疾病编码和疾病名称数量不一致");
                            }
                        }
                        for (int i = 0; i < icd10codes.length; i++) {
                            //先查询一下是否存在
@@ -2214,6 +2251,8 @@
                    IvrTaskTemplateScript ivrTaskTemplateScript = iIvrTaskTemplateScriptService.selectIvrTaskTemplateScriptByID(serviceSubtaskDetail.getScriptid());
                    if (ivrTaskTemplateScript != null)
                        serviceSubtaskDetail.setCategoryid(ivrTaskTemplateScript.getScriptAssortid());
                    serviceSubtaskDetail.setIsMydException(ivrTaskTemplateScript.getIsMydException());
                    serviceSubtaskDetail.setDimension(ivrTaskTemplateScript.getDimension());
                }
                serviceSubtaskDetail.setSubId(selectServiceSubtaskList.get(0).getId());
@@ -2508,6 +2547,29 @@
                serviceSubtaskStatistics.add(statistic);
            }
        }
        return serviceSubtaskStatistics;
    }
    /**
     * 获取专病随访统计比例
     *
     * @param serviceSubtaskCountReq
     * @return
     */
    @Override
//    @Cacheable(value = "specialSfStatistics", key = "T(org.springframework.util.DigestUtils).md5DigestAsHex(#serviceSubtaskCountReq.toString().getBytes())", unless = "#result == null or #result.isEmpty()")
    public List<ServiceSubtaskStatistic> getSpecialSfStatistics(ServiceSubtaskCountReq serviceSubtaskCountReq) {
        log.info("getSpecialSfStatistics的入参为:{}", serviceSubtaskCountReq);
        String groupKey = "drcode";
        if (serviceSubtaskCountReq.getDrcode() != null && !serviceSubtaskCountReq.getDrcode().isEmpty()) {
            groupKey = "drcode";
        } else {
            groupKey = "task_name";
        }
        List<ServiceSubtaskStatistic> serviceSubtaskStatistics = new ArrayList<>();
        serviceSubtaskCountReq.setGroupKey(groupKey);
        serviceSubtaskStatistics = serviceSubtaskMapper.getSpecialSfStatistics(serviceSubtaskCountReq);
        return serviceSubtaskStatistics;
    }
@@ -2818,7 +2880,7 @@
                        if (serviceSubtask.getSendstate() != null && !serviceSubtask.getSendstate().equals(4L) && ObjectUtils.isNotEmpty(serviceSubtask.getCurrentPreachform()) && serviceSubtask.getCurrentPreachform().equals("5")) {
                            serviceSubtaskStatistic.setWeChat(serviceSubtaskStatistic.getWeChat() + 1L);
                        }
                    } else if(StringUtils.isNotEmpty(followUpCountStyle) && followUpCountStyle.equals("3")) {
                    } else if (StringUtils.isNotEmpty(followUpCountStyle) && followUpCountStyle.equals("3")) {
                        //首次随访成功
                        if (serviceSubtask.getSendstate() != null && (serviceSubtask.getSendstate().equals(6L))) {
                            serviceSubtaskStatistic.setFollowUpSuccess(serviceSubtaskStatistic.getFollowUpSuccess() + 1L);
@@ -2839,7 +2901,7 @@
                        if (serviceSubtask.getSendstate() != null && serviceSubtask.getSendstate().equals(6L) && ObjectUtils.isNotEmpty(serviceSubtask.getCurrentPreachform()) && serviceSubtask.getCurrentPreachform().equals("5")) {
                            serviceSubtaskStatistic.setWeChat(serviceSubtaskStatistic.getWeChat() + 1L);
                        }
                    }else {
                    } else {
                        //首次随访成功 - 统计时候加上不执行的,已发送的
                        if (serviceSubtask.getSendstate() != null && (serviceSubtask.getSendstate().equals(6L) || serviceSubtask.getSendstate().equals(3L) || serviceSubtask.getSendstate().equals(4L))) {
                            serviceSubtaskStatistic.setFollowUpSuccess(serviceSubtaskStatistic.getFollowUpSuccess() + 1L);
@@ -2909,7 +2971,7 @@
                        if (serviceSubtask.getSendstate() != null && !serviceSubtask.getSendstate().equals(4L) && ObjectUtils.isNotEmpty(serviceSubtask.getCurrentPreachform()) && serviceSubtask.getCurrentPreachform().equals("5")) {
                            serviceSubtaskStatistic.setWeChatAgain(serviceSubtaskStatistic.getWeChatAgain() + 1L);
                        }
                    } else if(StringUtils.isNotEmpty(followUpCountStyle) && followUpCountStyle.equals("3")) {
                    } else if (StringUtils.isNotEmpty(followUpCountStyle) && followUpCountStyle.equals("3")) {
                        //再次随访成功
                        if (serviceSubtask.getSendstate() != null && (serviceSubtask.getSendstate().equals(6L))) {
                            serviceSubtaskStatistic.setFollowUpSuccessAgain(serviceSubtaskStatistic.getFollowUpSuccessAgain() + 1L);
@@ -2987,7 +3049,6 @@
        }
        return serviceSubtaskStatistic;
    }
    /**
     * 首次随访统计
     *
@@ -3059,7 +3120,7 @@
                    if (serviceSubtask.getSendstate() != null && !serviceSubtask.getSendstate().equals(4L) && ObjectUtils.isNotEmpty(serviceSubtask.getCurrentPreachform()) && serviceSubtask.getCurrentPreachform().equals("5")) {
                        serviceSubtaskStatistic.setWeChat(serviceSubtaskStatistic.getWeChat() + 1L);
                    }
                }  else if(StringUtils.isNotEmpty(followUpCountStyle) && followUpCountStyle.equals("3")) {
                } else if (StringUtils.isNotEmpty(followUpCountStyle) && followUpCountStyle.equals("3")) {
                    //首次随访成功
                    if (serviceSubtask.getSendstate() != null && (serviceSubtask.getSendstate().equals(6L))) {
                        serviceSubtaskStatistic.setFollowUpSuccess(serviceSubtaskStatistic.getFollowUpSuccess() + 1L);
@@ -3206,7 +3267,7 @@
                    if (serviceSubtask.getSendstate() != null && !serviceSubtask.getSendstate().equals(4L) && ObjectUtils.isNotEmpty(serviceSubtask.getCurrentPreachform()) && serviceSubtask.getCurrentPreachform().equals("5")) {
                        serviceSubtaskStatistic.setWeChatAgain(serviceSubtaskStatistic.getWeChatAgain() + 1L);
                    }
                }  else if(StringUtils.isNotEmpty(followUpCountStyle) && followUpCountStyle.equals("3")) {
                } else if (StringUtils.isNotEmpty(followUpCountStyle) && followUpCountStyle.equals("3")) {
                    //再次随访成功
                    if (serviceSubtask.getSendstate() != null && serviceSubtask.getSendstate().equals(6L)) {
                        serviceSubtaskStatistic.setFollowUpSuccessAgain(serviceSubtaskStatistic.getFollowUpSuccessAgain() + 1L);
@@ -3707,8 +3768,8 @@
         */
        if (StringUtils.isNotEmpty(followUpCountStyle) && followUpCountStyle.equals("2")) {
            List<Long> sendstates = serviceSubtaskCountReq.getSendstates();
            if(CollectionUtils.isNotEmpty(sendstates) && sendstates.get(0).equals(6L)){
                List<Long> sendstates1 =new ArrayList<>();
            if (CollectionUtils.isNotEmpty(sendstates) && sendstates.get(0).equals(6L)) {
                List<Long> sendstates1 = new ArrayList<>();
                sendstates1.add(3L);
                sendstates1.add(4L);
                sendstates1.add(6L);
@@ -3884,10 +3945,7 @@
        //获取及时率统计合集
        Map<String, Map<String, Object>> jsRates = getSsRateForSfStatistics(serviceSubtaskCountReq, collect);
        //一次性查询所有分组的题目统计,避免每个分组一次SQL(N+1)
        List<Long> allSubTaskIds = rawData.stream().map(ServiceSubtask::getId)
                .filter(Objects::nonNull)
                .distinct()
                .collect(Collectors.toList());
        List<Long> allSubTaskIds = rawData.stream().map(ServiceSubtask::getId).filter(Objects::nonNull).distinct().collect(Collectors.toList());
        List<ServiceSubtaskCount> subCounts = new ArrayList<>();
        if (CollectionUtils.isNotEmpty(allSubTaskIds)) {
            serviceSubtaskCountReq.setSubTaskIds(allSubTaskIds);