liusheng
11 小时以前 8114cd50c016dd4de2c650fe006226defb4bbb8c
smartor/src/main/java/com/smartor/service/impl/PatMedInhospServiceImpl.java
@@ -16,6 +16,7 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.util.ObjectUtils;
import java.io.IOException;
import java.time.Instant;
@@ -258,7 +259,10 @@
            } catch (Exception e) {
                e.printStackTrace();
                log.error("人员处理出异常了:{}", e.getMessage());
                log.error("人员科室处理出异常了:{}", e.getMessage());
                patMedInhosp1.setDeptcheckFlag("2");
                patMedInhosp1.setLongTaskReason("人员科室处理异常:" + e.getMessage());
                patMedInhospMapper.updatePatMedInhosp(patMedInhosp1);
            }
        }
@@ -310,7 +314,10 @@
                } catch (Exception e) {
                    e.printStackTrace();
                    log.error("人员处理出异常了:{}", e.getMessage());
                    log.error("人员病区处理出异常了:{}", e.getMessage());
                    pmiBQ1.setWardcheckFlag("2");
                    pmiBQ1.setLongTaskReason("人员病区处理异常:" + e.getMessage());
                    patMedInhospMapper.updatePatMedInhosp(pmiBQ1);
                }
            }
@@ -362,7 +369,10 @@
                } catch (Exception e) {
                    e.printStackTrace();
                    log.error("人员处理出异常了:{}", e.getMessage());
                    log.error("人员疾病处理出异常了:{}", e.getMessage());
                    pmiJB.setDiagcheckFlag("2");
                    pmiJB.setLongTaskReason("人员疾病处理异常:" + e.getMessage());
                    patMedInhospMapper.updatePatMedInhosp(pmiJB);
                }
            }
        }
@@ -540,13 +550,14 @@
    //将患者放到subtask中
    private void writeInSubTask(Long taskid, Boolean check, PatMedInhosp patMedInhosp1, PatArchive patArchive, Integer type, String config) {
        String longTaskReason = patMedInhosp1.getLongTaskReason();
        String orgId = patMedInhosp1.getOrgid();
        if (StringUtils.isEmpty(longTaskReason)) longTaskReason = "";
        ServiceTask st = new ServiceTask();
        st.setTaskid(taskid);
        st.setSendState(2L);
        List<ServiceTask> serviceTasks = serviceTaskMapper.selectServiceTaskList(st);
        ServiceTask serviceTask = null;
        if(CollectionUtils.isEmpty(serviceTasks)){
        if (CollectionUtils.isEmpty(serviceTasks)) {
            if (type == 1) {
                log.info("该患者出院随访长期任务不存在,任务ID为:{}", taskid);
                patMedInhosp1.setDeptcheckFlag("2");
@@ -564,7 +575,7 @@
                patMedInhospMapper.updatePatMedInhosp(patMedInhosp1);
                return;
            }
        }else {
        } else {
            serviceTask = serviceTasks.get(0);
        }
        if (Objects.isNull(patMedInhosp1.getEndtime())) {
@@ -572,6 +583,9 @@
        }
        //封装serviceSubtask
        ServiceSubtask serviceSubtask = boxedServiceSubtask(serviceTask, patMedInhosp1, patArchive, config);
        if (ObjectUtils.isEmpty(serviceSubtask)) {
            return;
        }
        if (type != 2) {
            //科室和疾病 都用 科室填充
            serviceSubtask.setVisitDeptCode(patMedInhosp1.getLeaveldeptcode());
@@ -580,6 +594,7 @@
            serviceSubtask.setVisitDeptCode(patMedInhosp1.getLeavehospitaldistrictcode());
            serviceSubtask.setVisitDeptName(patMedInhosp1.getLeavehospitaldistrictname());
        }
        //记录insertServiceSubtask语句返回状态
        Integer i = 0;
        try {
            //先判断一下,是否需要校验
@@ -602,16 +617,16 @@
                            Date endTime = serviceSubtask.getEndtime();
                            Date endTime1 = serviceSubtask1.getEndtime();
                            //出院时间判空,如果为空跳过
                            if(Objects.isNull(endTime)){
                            if (ObjectUtils.isEmpty(endTime)) {
                                serviceSubtask.setResult("error");
                                serviceSubtask.setRemark("出院时间为空,serviceSubtask的Id为" + serviceSubtask.getId());
                                serviceSubtask.setUpdateBy(serviceTask.getUpdateBy());
                                serviceSubtask.setUpdateTime(new Date());
                                Boolean aBoolean = serviceSubtaskMapper.updateServiceSubtask(serviceSubtask1);
                                Boolean aBoolean = serviceSubtaskMapper.updateServiceSubtask(serviceSubtask);
                                if (aBoolean) i = 1;
                                continue;
                            }
                            if(Objects.isNull(endTime1)){
                            if (ObjectUtils.isEmpty(endTime1)) {
                                serviceSubtask1.setResult("error");
                                serviceSubtask1.setRemark("出院时间为空,serviceSubtask的Id为" + serviceSubtask1.getId());
                                serviceSubtask1.setUpdateBy(serviceTask.getUpdateBy());
@@ -620,29 +635,36 @@
                                if (aBoolean) i = 1;
                                continue;
                            }
                            if (endTime1.before(endTime) && serviceSubtask1.getServiceType().equals("2")) {
                                //如果当前循环的子任务的出院时间在“准备新增的子任务”的出院时间之前,则将循环的子任务停掉
                                serviceSubtask1.setSendstate(4L);
                                if (StringUtils.isNotEmpty(serviceSubtask.getRemark()))
                                    serviceSubtask.setRemark(serviceSubtask.getRemark() + ",疾病患者再入院");
                                else serviceSubtask.setRemark("疾病患者再入院");
                                serviceSubtask1.setResult("error");
//                            serviceSubtask1.setFinishtime(new Date());
                                serviceSubtask1.setUpdateBy(serviceTask.getUpdateBy());
                                serviceSubtask1.setUpdateTime(new Date());
                                Boolean aBoolean = serviceSubtaskMapper.updateServiceSubtask(serviceSubtask1);
                                if (aBoolean) i = 1;
                            } else {
                                //相反,则将当有的数据停掉
                                serviceSubtask.setResult("error");
//                            serviceSubtask.setFinishtime(new Date());
                                serviceSubtask.setSendstate(4L);
                                if (StringUtils.isNotEmpty(serviceSubtask.getRemark()))
                                    serviceSubtask.setRemark(serviceSubtask.getRemark() + ",当前患者出院时间后有待执行的出院随访长期任务");
                                else serviceSubtask.setRemark("当前患者出院时间后有待执行的出院随访长期任务");
                                serviceSubtask.setCreateBy(serviceTask.getCreateBy());
                                serviceSubtask.setCreateTime(new Date());
                                i = serviceSubtaskMapper.insertServiceSubtask(serviceSubtask);
                            //再入院逻辑
                            //景宁 出院首次(7天)随访一定要做
                            boolean firstVisit = false;
                            if (orgId.equals("47255004333112711A1001") && serviceSubtask1.getVisitCount() != null && serviceSubtask1.getVisitCount() == 1) {
                                firstVisit = true;
                            }
                            if (!firstVisit) {
                                //景宁的不需要将之前的任务停掉,全生成
                                if (endTime1.before(endTime) && serviceSubtask1.getServiceType().equals("2")) {
                                    //如果当前循环的子任务的出院时间在“准备新增的子任务”的出院时间之前,则将循环的子任务停掉
                                    serviceSubtask1.setSendstate(4L);
                                    if (StringUtils.isNotEmpty(serviceSubtask.getRemark()))
                                        serviceSubtask.setRemark(serviceSubtask.getRemark() + ",科室/病区患者再入院");
                                    else serviceSubtask.setRemark("科室/病区患者再入院");
                                    serviceSubtask1.setResult("error");
                                    serviceSubtask1.setUpdateBy(serviceTask.getUpdateBy());
                                    serviceSubtask1.setUpdateTime(new Date());
                                    Boolean aBoolean = serviceSubtaskMapper.updateServiceSubtask(serviceSubtask1);
                                    if (aBoolean) i = 1;
                                } else {
                                    //相反,则将当有的数据停掉
                                    serviceSubtask.setResult("error");
                                    serviceSubtask.setSendstate(4L);
                                    if (StringUtils.isNotEmpty(serviceSubtask.getRemark()))
                                        serviceSubtask.setRemark(serviceSubtask.getRemark() + ",当前患者出院时间后有待执行的出院随访长期任务");
                                    else serviceSubtask.setRemark("当前患者出院时间后有待执行的出院随访长期任务");
                                    serviceSubtask.setCreateBy(serviceTask.getCreateBy());
                                    serviceSubtask.setCreateTime(new Date());
                                    i = serviceSubtaskMapper.insertServiceSubtask(serviceSubtask);
                                }
                            }
                        } else if (type == 3) {
                            //type=3 表示疾病
@@ -695,14 +717,14 @@
            }
            //将check_flag改成1(已处理)
            if(i == 1){
            if (i == 1) {
                PatMedInhosp patMedInhosp2 = new PatMedInhosp();
                patMedInhosp2.setInhospid(patMedInhosp1.getInhospid());
                if (type == 1) patMedInhosp2.setDeptcheckFlag("1");
                if (type == 2) patMedInhosp2.setWardcheckFlag("1");
                if (type == 3) patMedInhosp2.setDiagcheckFlag("1");
                patMedInhospMapper.updatePatMedInhosp(patMedInhosp2);
            }else {
            } else {
                //生成子任务失败,
                log.info("生成子任务失败serviceSubtask的taskid为:{},patid为:{}", serviceSubtask.getTaskid(), serviceSubtask.getPatid());
                PatMedInhosp patMedInhosp2 = new PatMedInhosp();
@@ -716,6 +738,13 @@
        } catch (Exception e) {
            //出错回滚事务
            log.info("生成子任务报错回滚serviceSubtask的taskid为:{},patid为:{}", serviceSubtask.getTaskid(), serviceSubtask.getPatid());
            PatMedInhosp patMedInhosp2 = new PatMedInhosp();
            patMedInhosp2.setInhospid(patMedInhosp1.getInhospid());
            if (type == 1) patMedInhosp2.setDeptcheckFlag("2");
            if (type == 2) patMedInhosp2.setWardcheckFlag("2");
            if (type == 3) patMedInhosp2.setDiagcheckFlag("2");
            patMedInhosp2.setRemark("生成子任务报错回滚 " + type);
            patMedInhospMapper.updatePatMedInhosp(patMedInhosp2);
            e.printStackTrace();
        }
    }
@@ -815,13 +844,19 @@
        //如果是通知的话,需要提前几天将通过短信发出去(具体几天,这个可以配置在sys_conf表中)
        if ("3".equals(serviceTask.getType())) {
            serviceSubtask.setVisitTime(minusDay(newDate, StringUtils.isNotEmpty(config) ? Integer.parseInt(config) : 0));
            //判断是不是景宁
            if (patMedInhosp1.getOrgid().equals("47255004333112711A1001"))
                serviceSubtask.setVisitTime(null);
            //如果该出院记录有随访时间,则用他自己的随访时间
            if (patMedInhosp1.getFudate() != null)
            if (patMedInhosp1.getFudate() != null) {
                serviceSubtask.setVisitTime(minusDay(patMedInhosp1.getFudate(), StringUtils.isNotEmpty(config) ? Integer.parseInt(config) : 0));
            } else {
                //判断是不是景宁
                if (patMedInhosp1.getOrgid().equals("47255004333112711A1001")) {
                    serviceSubtask.setVisitTime(null);
                    //不执行
                    serviceSubtask.setSendstate(4L);
                    serviceSubtask.setRemark("景宁没有给随访时间,不发送通知短信");
                }
            }
        }
        //患者发送时间
@@ -864,7 +899,7 @@
                subtask.setSendstate(2L);
                List<ServiceSubtask> selectServiceSubtaskList = serviceSubtaskMapper.selectServiceSubtaskList(subtask);
//                log.error("入院的患者待执行的任务:{}", selectServiceSubtaskList);
                if (CollectionUtils.isNotEmpty(selectServiceSubtaskList) && selectServiceSubtaskList.size() > 0) {
                if (CollectionUtils.isNotEmpty(selectServiceSubtaskList)) {
                    for (ServiceSubtask serviceSubtask1 : selectServiceSubtaskList) {
                        if (Objects.isNull(serviceSubtask1.getLongSendTime())) {
                            //不是长期任务,不处理