陈昶聿
8 天以前 9bd00d48acd7b80468b7eca0f6d8ec03a82191a9
smartor/src/main/java/com/smartor/service/impl/PatMedInhospServiceImpl.java
@@ -56,7 +56,7 @@
    @Autowired
    private ServiceSubtaskPreachformMapper serviceSubtaskPreachformMapper;
    @Autowired
    private PatMedOperationMapper patMedOperationMapper;
    private ServiceTaskmedicalMapper serviceTaskmedicalMapper;
    @Autowired
    private PatMedOperationItemMapper patMedOperationItemMapper;
    @Autowired
@@ -256,17 +256,18 @@
    @Override
    public int dealOutHospInfo(String config) {
        PatMedInhosp pmks = new PatMedInhosp();
        pmks.setDeptcheckFlag("0");
        pmks.setInhospstate("1");
        pmks.setFuflag("1");
        List<PatMedInhosp> patMedInhosps = patMedInhospMapper.selectPatMedInhospList(pmks);
        //1.入院宣教
        String helibrarySwitch = iSysConfigService.selectConfigByKey("in.helibrary.switch");
        if (StringUtils.isNotEmpty(helibrarySwitch) && "2".equals(helibrarySwitch)) {
            PatMedInhosp inhosp = new PatMedInhosp();
            inhosp.setInDeptcheckFlag("0");
            inhosp.setInhospstate("0");
            inhosp.setFuflag("1");
            List<PatMedInhosp> inPatMedInhosps = patMedInhospMapper.selectPatMedInhospList(inhosp);
            //1.1 科室
            for (PatMedInhosp patMedInhosp1 : inPatMedInhosps) {
            for (PatMedInhosp patMedInhosp1 : patMedInhosps) {
                //获取患者信息
                PatArchive patArchive = patArchiveMapper.selectPatArchiveByPatid(patMedInhosp1.getPatid());
                if (Objects.isNull(patArchive)) {
@@ -306,9 +307,10 @@
            //1.2 病区
            inhosp.setInDeptcheckFlag(null);
            inhosp.setInWardcheckFlag("0");
            List<PatMedInhosp> inPatMedInhospsWard = patMedInhospMapper.selectPatMedInhospList(inhosp);
            pmks.setInDeptcheckFlag(null);
            pmks.setInWardcheckFlag("0");
            pmks.setDeptcheckFlag(null);
            List<PatMedInhosp> inPatMedInhospsWard = patMedInhospMapper.selectPatMedInhospList(pmks);
            for (PatMedInhosp patMedInhosp1 : inPatMedInhospsWard) {
                //获取患者信息
                PatArchive patArchive = patArchiveMapper.selectPatArchiveByPatid(patMedInhosp1.getPatid());
@@ -340,9 +342,42 @@
            }
        }
        //2.出院随访 - 基于规则的任务生成
        addSubTaskByRule(config);
        //根据患者所在病区,获取该病区的长期任务,新华医院可以先不用根据病区和疾病来做
        //2.药品宣教
        for (PatMedInhosp patMedInhosp : patMedInhosps) {
            String medicalCode = patMedInhosp.getMedicalCode();
            if (StringUtils.isNotEmpty(medicalCode)) {
                String[] split = medicalCode.split(",");
                // 防御性编程:确保 medicalCompany 和 medicalName 不为 null
                String medicalCompanyStr = patMedInhosp.getMedicalCompany() != null ? patMedInhosp.getMedicalCompany() : "";
                String medicalNameStr = patMedInhosp.getMedicalName() != null ? patMedInhosp.getMedicalName() : "";
                String[] medicalCompanyArray = medicalCompanyStr.split(",");
                String[] medicalNameArray = medicalNameStr.split(",");
                for (int i = 0; i < split.length; i++) {
                    ServiceTaskmedical serviceTaskmedical = new ServiceTaskmedical();
                    //拿药品编码和公司去查
                    serviceTaskmedical.setMedicalCode(split[i]);
                    // 防止下标越界:如果数组长度不一致,取最小长度
                    if (i < medicalCompanyArray.length) {
                        serviceTaskmedical.setMedicalName(medicalCompanyArray[i]);
                    } else {
                        log.warn("【药品宣教】药品编码{}对应的公司信息下标越界,medicalCompany 数组长度={}, 当前索引={}", split[i], medicalCompanyArray.length, i);
                        serviceTaskmedical.setMedicalName(""); // 越界时设置为空
                    }
                    List<ServiceTaskmedical> serviceTaskmedicals = serviceTaskmedicalMapper.selectServiceTaskmedicalList(serviceTaskmedical);
                    if (CollectionUtils.isNotEmpty(serviceTaskmedicals)) {
                        PatArchive patArchive = patArchiveMapper.selectPatArchiveByPatid(patMedInhosp.getPatid());
                        writeInSubTask(serviceTaskmedicals.get(0).getTaskId(), false, patMedInhosp, patArchive, 0, config);
                    }
                    //查不到的药品就是不需要宣教的,就不管了
                }
            }
        }
        //3.出院随访 - 基于规则的任务生成
        // 获取所有需要处理的出院患者(科室维度未处理)
        addSubTaskByRule(config, patMedInhosps);
        if (!active.equals("xh")) {
            addOperationSubTask(config);
        }
@@ -570,7 +605,7 @@
     * @param check         是否需要校验
     * @param patMedInhosp1 病人出入院信息
     * @param patArchive    病人信息
     * @param type          随访类型(1-科室,2-病区,3-疾病 4-入院科室 5-入院病区)
     * @param type          随访类型(0-宣教,1-科室,2-病区,3-疾病 4-入院科室 5-入院病区)
     * @param config        配置信息 visit.early.day
     */
    //将患者放到subtask中
@@ -1530,15 +1565,7 @@
     * 根据患者离院科室或病区查询service_task_rule,获取deptRule、wradRule、diagRule
     * 根据规则值决定调用哪个方法生成随访任务
     */
    private void addSubTaskByRule(String config) {
        // 获取所有需要处理的出院患者(科室维度未处理)
        PatMedInhosp pmks = new PatMedInhosp();
        pmks.setDeptcheckFlag("0");
        pmks.setInhospstate("1");
        pmks.setFuflag("1");
        List<PatMedInhosp> patMedInhosps = patMedInhospMapper.selectPatMedInhospList(pmks);
        log.info("【基于规则】需要处理的出院患者信息:{}", CollectionUtils.isNotEmpty(patMedInhosps) ? patMedInhosps.size() : null);
    private void addSubTaskByRule(String config, List<PatMedInhosp> patMedInhosps) {
        for (PatMedInhosp patMedInhosp1 : patMedInhosps) {
            // 获取患者基本信息
            PatArchive patArchive = patArchiveMapper.selectPatArchiveByPatid(patMedInhosp1.getPatid());