e10c26490d01235ed3781f5cd1d7102e6666a5b3..83ca9abe898107c361550d5f7f99b1c841d3081d
2026-08-25 陈昶聿
【市一】出院数据同步规则调整
83ca9a 对比 | 目录
2026-08-25 陈昶聿
门诊数据查询空指针异常处理
b9c9b1 对比 | 目录
2026-08-25 陈昶聿
手术随访问题调整
8895f1 对比 | 目录
已修改6个文件
60 ■■■■ 文件已修改
ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSubtaskController.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/impl/CollectHISServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/service/impl/PatMedInhospServiceImpl.java 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/service/impl/PatMedOuthospServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/service/impl/ServiceExternalServiceImpl.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSubtaskController.java
@@ -983,6 +983,13 @@
        return AjaxResult.success("同步任务已启动,请稍后查看结果");
    }
    @PostMapping("/syncMedInhospForShiyiDaysBefore")
    public AjaxResult syncMedInhospForShiyiDaysBefore(@RequestParam("day") Long day) {
        // 立即返回,后台异步执行
        ryTask.collectHISDaysBefore(day);
        return AjaxResult.success("【collectHISDaysBefore】同步任务已启动,天数为" + day + "天,请稍后查看结果");
    }
    @PostMapping("/syncMedOperForShiyi")
    public AjaxResult syncMedOperForShiyi(@RequestParam("startTime") String startTime, @RequestParam("endTime") String endTime) {
ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/impl/CollectHISServiceImpl.java
@@ -108,7 +108,7 @@
        Integer count = 0;
        List<Map<String, Object>> syncList = utilsMapper.getList("SELECT id,syncName,DATE_FORMAT(ADDDATE(startTime, INTERVAL -1 MINUTE), '%Y-%m-%d %H:%i:%s') startTime  FROM sys_sync_time  where state=0");
        if (syncList.size() > 0) {
            String endTime = chMapper.getSqlString("select sysdate from healthy_inhosp where rownum=1");
            String endTime = chMapper.getSqlString("select (sysdate-1) as endtime from healthy_inhosp where rownum=1");
            //同步患者基本信息
//            List<Map<String, Object>> syncTemp = syncList.stream().filter(row -> row.get("syncName").equals("pat_archive")).collect(Collectors.toList());
//            if (syncTemp.size() > 0) {
ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java
@@ -1565,12 +1565,12 @@
            String startTime = daysBeforeZeroStart.format(formatter);
            String endTime = daysBeforeZeroEnd.format(formatter);
            // HIS数据采集
            log.info("【collectHISDaysBefore】HIS开始采集数据");
            log.info("【collectHISDaysBefore】HIS开始采集数据: startTime:{}, endtime:{}",startTime, endTime);
            // 立即返回,后台异步执行
            CompletableFuture.runAsync(() -> {
                ichService.syncMedInhosp(startTime, endTime);
            });
            log.info("【collectHISDaysBefore】HIS结束采集数据");
            log.info("【collectHISDaysBefore】HIS结束采集数据: startTime:{}, endtime:{}",startTime, endTime);
        } catch (Exception e) {
            log.error("【collectHISDaysBefore】HIS数据采集异常", e);
        }
smartor/src/main/java/com/smartor/service/impl/PatMedInhospServiceImpl.java
@@ -866,7 +866,7 @@
            log.info("该手术对应手术等级的长期任务不存在,任务ID为:{}", taskid);
            patMedOperationItem.setOpercheckFlag("2");
            patMedOperationItem.setLongTaskReason(longTaskReason + " & 该手术对应手术等级的长期任务不存在,任务ID为:" + taskid);
            patMedOperationItemMapper.insertPatMedOperationItem(patMedOperationItem);
            patMedOperationItemMapper.updatePatMedOperationItem(patMedOperationItem);
            return;
        } else {
            serviceTask = serviceTasks.get(0);
@@ -1292,19 +1292,31 @@
                    continue;
                }
                // 根据患者的疾病,获取该疾病的长期任务
                ServiceTaskoper serviceTaskoper = new ServiceTaskoper();
                serviceTaskoper.setLongtask(1L);
                serviceTaskoper.setOrgid(opItem.getOrgid());
                serviceTaskoper.setOplevelcode(opItem.getOplevelcode());
                //根据科室、病区过滤
                List<ServiceTaskoper> serviceTaskopersDept = new ArrayList<>();
                if(StringUtils.isNotEmpty(opItem.getLeaveldeptcode())){
                    serviceTaskoper.setDeptCode(opItem.getLeaveldeptcode());
                }else {
                    serviceTaskoper.setWardCode(opItem.getLeavehospitaldistrictcode());
                    ServiceTaskoper serviceTaskoper1 = new ServiceTaskoper();
                    serviceTaskoper1.setLongtask(1L);
                    serviceTaskoper1.setOrgid(opItem.getOrgid());
                    serviceTaskoper1.setOplevelcode(opItem.getOplevelcode());
                    serviceTaskoper1.setDeptCode(opItem.getLeaveldeptcode());
                    serviceTaskopersDept = serviceTaskoperMapper.selectServiceTaskoperList(serviceTaskoper1);
                }
                List<ServiceTaskoper> serviceTaskopers = serviceTaskoperMapper.selectServiceTaskoperList(serviceTaskoper);
                List<ServiceTaskoper> serviceTaskopersWard = new ArrayList<>();
                if(StringUtils.isNotEmpty(opItem.getLeavehospitaldistrictcode())){
                    ServiceTaskoper serviceTaskoper2 = new ServiceTaskoper();
                    serviceTaskoper2.setLongtask(1L);
                    serviceTaskoper2.setOrgid(opItem.getOrgid());
                    serviceTaskoper2.setOplevelcode(opItem.getOplevelcode());
                    serviceTaskoper2.setWardCode(opItem.getLeavehospitaldistrictcode());
                    serviceTaskopersWard = serviceTaskoperMapper.selectServiceTaskoperList(serviceTaskoper2);
                }
                List<ServiceTaskoper> serviceTaskopers = new ArrayList<>();
                serviceTaskopers.addAll(serviceTaskopersDept);
                serviceTaskopers.addAll(serviceTaskopersWard);
                //如果部门模板为空(将deptIsNull设置为true)
                if (CollectionUtils.isEmpty(serviceTaskopers) || serviceTaskopers.size() == 0) {
                    PatMedOperationItem patMedOperationItem = patMedOperationItemMapper.selectPatMedOperationItemById(opItem.getId());
@@ -1312,8 +1324,8 @@
                    patMedOperationItem.setLongTaskReason(patMedOperationItem.getLongTaskReason() + "所患的手术未配置长期任务;");
                    patMedOperationItemMapper.updatePatMedOperationItem(patMedOperationItem);
                } else {
                    for (ServiceTaskoper serviceTaskoper1 : serviceTaskopers) {
                        writeInSubTaskForOp(serviceTaskoper1.getTaskId(), true, opItem, config);
                    for (ServiceTaskoper serviceTaskoper : serviceTaskopers) {
                        writeInSubTaskForOp(serviceTaskoper.getTaskId(), true, opItem, config);
                    }
                }
smartor/src/main/java/com/smartor/service/impl/PatMedOuthospServiceImpl.java
@@ -87,7 +87,7 @@
        if (patMedOuthosp.getPageNum() != null) {
            for (PatMedOuthosp patMedOuthosp1 : patMedOuthospQueryResps) {
                PatArchive patArchive = patArchiveMapper.selectPatArchiveByPatid(patMedOuthosp1.getPatid());
                if (patArchive.getBirthdate() != null) {
                if (ObjectUtils.isNotEmpty(patArchive) && patArchive.getBirthdate() != null) {
                    Map<String, String> map = calculateAge(patArchive.getBirthdate().toInstant().atZone(ZoneId.systemDefault()).toLocalDate(), LocalDate.now());
                    patArchive.setAge(ObjectUtils.isNotEmpty(map.get("age")) ? Long.valueOf(map.get("age")) : null);
                    patArchive.setAgeUnit(map.get("ageUnit"));
smartor/src/main/java/com/smartor/service/impl/ServiceExternalServiceImpl.java
@@ -1165,7 +1165,7 @@
        List<PatMedOuthosp> patMedOuthosps = patMedOuthospMapper.callSpQueryOuthosp(patMedOuthospreq);
        for (PatMedOuthosp patMedOuthosp1 : patMedOuthosps) {
            PatArchive pa = patArchiveMapper.selectPatArchiveByPatid(patMedOuthosp1.getPatid());
            if (patArchive.getBirthdate() != null) {
            if (ObjectUtils.isNotEmpty(patArchive) && patArchive.getBirthdate() != null) {
                Map<String, String> map = calculateAge(pa.getBirthdate().toInstant().atZone(ZoneId.systemDefault()).toLocalDate(), LocalDate.now());
                pa.setAge(ObjectUtils.isNotEmpty(map.get("age")) ? Long.valueOf(map.get("age")) : null);
                pa.setAgeUnit(map.get("ageUnit"));
@@ -1458,6 +1458,10 @@
                return info;
            }).collect(Collectors.toList()) : null;
            if(ObjectUtils.isNotEmpty(patMedOperation.getId())){
                patMedOperationItemMapper.deleteHardPatMedOperationItemByOpId(patMedOperation.getId().toString());
            }
            //addMianTableFalg是否需要将主手术的信息放到PatMedOperation表中(只有第一个主手术信息需要放,后面的都不需要放了,也就是说,第一个放完后,就要把这个flag改成false)
            Boolean addMianTableFalg = true;
            for (ExternalOperationDetail externalOperationDetail : externalOperationDetails) {
@@ -1491,6 +1495,7 @@
                    addMianTableFalg = false;
                }
                patMedOperationItem.setCreateTime(new Date());
                patMedOperationItem.setUpdateTime(new Date());
                patMedOperationItemMapper.insertPatMedOperationItem(patMedOperationItem);
            }
        }