liusheng
2025-09-29 55f5271f893a25a7be671b24938e49976936a67b
ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/impl/CollectHISServiceImpl.java
@@ -85,6 +85,7 @@
    /**
     * 同步任务
     *
     * @param
     * @return
     */
@@ -104,15 +105,15 @@
            //同步住院病人信息
            List<Map<String, Object>> syncTemp = syncList.stream().filter(row -> row.get("syncName").equals("pat_med_inhosp")).collect(Collectors.toList());
            if (syncTemp.size() > 0) {
                count+=syncMedInhosp(syncTemp.get(0).get("startTime") + "", endTime);
                utilsMapper.updateSql("update sys_sync_time set startTime='"+endTime+"' where syncName='pat_med_inhosp' ");
                count += syncMedInhosp(syncTemp.get(0).get("startTime") + "", endTime);
                utilsMapper.updateSql("update sys_sync_time set startTime='" + endTime + "' where syncName='pat_med_inhosp' ");
            }
            //同步门诊信息
            syncTemp = syncList.stream().filter(row -> row.get("syncName").equals("pat_med_outhosp")).collect(Collectors.toList());
            if (syncTemp.size() > 0) {
                count+=syncOuthosp(syncTemp.get(0).get("startTime") + "", endTime);
                utilsMapper.updateSql("update sys_sync_time set startTime='"+endTime+"' where syncName='pat_med_outhosp' ");
                count += syncOuthosp(syncTemp.get(0).get("startTime") + "", endTime);
                utilsMapper.updateSql("update sys_sync_time set startTime='" + endTime + "' where syncName='pat_med_outhosp' ");
            }
@@ -124,10 +125,11 @@
    /**
     * 同步患者基本信息
     *
     * @param
     * @return
     */
    private  Integer syncArchive(String startTime,String endTime) {
    private Integer syncArchive(String startTime, String endTime) {
        Integer count = 0;
        PatArchive pa = new PatArchive();
        pa.setLastStartTime(startTime);
@@ -148,8 +150,8 @@
                    count += patArchiveMapper.insertPatArchiveSingle(pm);
                }
            }catch (Exception ex){
                log.info("可同患者基本信息:"+ex.getMessage());
            } catch (Exception ex) {
                log.info("可同患者基本信息:" + ex.getMessage());
            }
        }
@@ -158,10 +160,11 @@
    /**
     * 同步出入院信息
     *
     * @param
     * @return
     */
    private  Integer syncMedInhosp(String startTime,String endTime) {
    private Integer syncMedInhosp(String startTime, String endTime) {
        Integer count = 0;
        PatMedInhosp patMedInhosp = new PatMedInhosp();
        patMedInhosp.setLastStartTime(startTime);
@@ -169,11 +172,11 @@
        List<PatMedInhosp> patMedInhospList = chMapper.selectPatMedInhospList(patMedInhosp);
        log.info("可同步出入院数量" + patMedInhospList.size());
        for (PatMedInhosp pm : patMedInhospList) {
            List<PatArchive> patArchives1=new ArrayList<>();
            List<PatArchive> patArchives1 = new ArrayList<>();
            try {
                //患者基本信息
                if(ObjectUtils.isNotEmpty(pm.getPatno())) {
                if (ObjectUtils.isNotEmpty(pm.getPatno())) {
                    PatArchive patArchive = new PatArchive();
                    patArchive.setPatientno(pm.getPatno());
                    patArchive.setPageSize(5);
@@ -193,12 +196,12 @@
                        }
                    }
                }
            }catch (Exception ex) {
            } catch (Exception ex) {
                log.info("同患者基本信息:" + ex.getMessage());
            }
            try {
                if(patArchives1.size()>0) {
                if (patArchives1.size() > 0) {
                    pm.setPatid(patArchives1.get(0).getId());
                }
                //同步出入院
@@ -222,10 +225,11 @@
    /**
     * 同步门诊信息
     *
     * @param
     * @return
     */
    private  Integer syncOuthosp(String startTime,String endTime) {
    private Integer syncOuthosp(String startTime, String endTime) {
        Integer count = 0;
        PatMedOuthosp patMedOuthosp = new PatMedOuthosp();
        patMedOuthosp.setLastStartTime(startTime);
@@ -252,7 +256,7 @@
                    }
                }
            }catch (Exception ex) {
            } catch (Exception ex) {
                log.info("同患者基本信息:" + ex.getMessage());
            }
@@ -278,7 +282,7 @@
    @Override
    public Integer selectPatMedInhospList(PatMedInhosp patMedInhosp) {
        List<PatMedInhosp> patMedInhospList = chMapper.selectPatMedInhospList(patMedInhosp);
        log.info("可同步病人数量"+patMedInhospList.size());
        log.info("可同步病人数量" + patMedInhospList.size());
        for (PatMedInhosp pm : patMedInhospList) {
            PatArchive patArchive = new PatArchive();
            patArchive.setPatientno(pm.getPatno());
@@ -323,10 +327,8 @@
    @Override
    public Boolean hnDataGather(HnDataGatherVO hnDataGatherVO) {
        if(ObjectUtils.isEmpty(hnDataGatherVO.getStartTime()) )
            hnDataGatherVO.setStartTime(new Date());
        if(ObjectUtils.isEmpty(hnDataGatherVO.getEndTime()) )
            hnDataGatherVO.setEndTime(new Date());
        if (ObjectUtils.isEmpty(hnDataGatherVO.getStartTime())) hnDataGatherVO.setStartTime(new Date());
        if (ObjectUtils.isEmpty(hnDataGatherVO.getEndTime())) hnDataGatherVO.setEndTime(new Date());
        LocalDate startDate = hnDataGatherVO.getStartTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
        LocalDate endDate = hnDataGatherVO.getEndTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
@@ -415,10 +417,10 @@
    @Override
    public Integer selectUserList(SysUser sysUser) {
        List<SysUser> sysUserList = chMapper.selectUserList(sysUser);
        SysUser suerTemp=new SysUser();
        SysUser suerTemp = new SysUser();
        List<SysUserDept> sysUserDeptAll = chMapper.yhyksxx(suerTemp);
        log.info("sysUserList的采集到的数量为:{}", sysUserList.size());
        int i =0;// sysUser2Mapper.batchUser(sysUserList);
        int i = 0;// sysUser2Mapper.batchUser(sysUserList);
        for (SysUser sysUser1 : sysUserList) {
//            log.info("sysUser1的ID为:{}", sysUser1.getUserId());
//            log.info("sysUser1的HISUSERID为:{}", sysUser1.getHisUserId());
@@ -438,16 +440,11 @@
            //新增用户与部门
            //List<SysUserDept> sysUserDept = chMapper.yhyksxx(sysUser1);
            List<SysUserDept> sysUserDept = sysUserDeptAll.stream()
                    .filter((SysUserDept b) -> b.getUserCode().equals(sysUser1.getHisUserId()))
                    .collect(Collectors.toList());
            List<SysUserDept> sysUserDept = sysUserDeptAll.stream().filter((SysUserDept b) -> b.getUserCode().equals(sysUser1.getHisUserId())).collect(Collectors.toList());
            for (SysUserDept sud : sysUserDept) {
                if (usersTemp.size() > 0) {
                    sud.setUserId(usersTemp.get(0).getUserId());
                    SysDept sysDeptTemp = sysDept2Mapper.selectDeptByCode(sud.getDeptCode());
                    if (sysDeptTemp != null)
                        sud.setDeptId(sysDeptTemp.getDeptId());
                    sysUserDeptMapper.insertSysUserDept(sud);
                }
            }
@@ -458,20 +455,49 @@
    @Override
    public Integer selectDeptList(SysDept dept) {
        int count=0;
        int count = 0;
        List<SysDept> sysDepts = chMapper.selectDeptList(dept);
        log.info("selectDeptList的采集到的数量为:{}", sysDepts.size());
       // count = sysDept2Mapper.batchDept(sysDepts);
        for(SysDept row : sysDepts){
            SysDept sysDeptTemp= sysDept2Mapper.selectDeptByCode(row.getDeptCode());
            if(sysDeptTemp!=null&&sysDeptTemp.getDeptName()!=null){
        // count = sysDept2Mapper.batchDept(sysDepts);
        for (SysDept row : sysDepts) {
            SysDept sysDeptTemp = sysDept2Mapper.selectDeptByCode(row.getDeptCode(), null);
            if (sysDeptTemp != null && sysDeptTemp.getDeptName() != null) {
                row.setDeptId(sysDeptTemp.getDeptId());
                count+=sysDept2Mapper.updateDept(row);
            }else{
                count+=sysDept2Mapper.insertDept(row);
                count += sysDept2Mapper.updateDept(row);
            } else {
                count += sysDept2Mapper.insertDept(row);
            }
        }
        return count;
    }
    /**
     * 检查并执行分表的核心方法
     *
     * @param tableName 要检查的表名
     */
    private synchronized void checkAndShard(String tableName) {
        long currentCount = shardingMapper.getTableCount(tableName);
        if (currentCount >= SHARDING_THRESHOLD) {
            log.warn("表 '{}' 已达到分表阈值 {},准备执行分表操作...", tableName, SHARDING_THRESHOLD);
            String newTableName = tableName + "_" + java.time.LocalDate.now().format(java.time.format.DateTimeFormatter.ofPattern("yyyy_MM"));
            Long maxId = shardingMapper.getMaxId(tableName);
            if (maxId == null) maxId = 0L;
            shardingMapper.renameTable(tableName, newTableName);
            log.info("已将表 '{}' 重命名为 '{}'", tableName, newTableName);
            shardingMapper.createLikeTable(tableName, newTableName);
            log.info("已创建新表 '{}'", tableName);
            shardingMapper.setAutoIncrement(tableName, maxId + 1);
            log.info("已设置新表 '{}' 的自增ID起始值为 {}", tableName, maxId + 1);
            log.info("表 '{}' 的分表操作完成!", tableName);
        }
    }
}