From 0b8b3be32067368f4c8ca8812f69a7b3f48f1ce8 Mon Sep 17 00:00:00 2001 From: sinake <sinake1@qq.com> Date: 星期二, 26 八月 2025 17:05:05 +0800 Subject: [PATCH] Merge branch 'master' of http://116.62.18.175:6699/r/smartor --- ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/impl/CollectHISMapperServiceImpl.java | 247 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 247 insertions(+), 0 deletions(-) diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/impl/CollectHISMapperServiceImpl.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/impl/CollectHISMapperServiceImpl.java new file mode 100644 index 0000000..2bee790 --- /dev/null +++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/impl/CollectHISMapperServiceImpl.java @@ -0,0 +1,247 @@ +package com.ruoyi.quartz.service.impl; + +import com.ruoyi.common.annotation.DataSource; +import com.ruoyi.common.core.domain.entity.SysDept; +import com.ruoyi.common.core.domain.entity.SysUser; +import com.ruoyi.common.core.domain.entity.SysUserDept; +import com.ruoyi.common.core.domain.entity.SysUserRole; +import com.ruoyi.common.enums.DataSourceType; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.quartz.mapper.CollectHISMapper; +import com.ruoyi.quartz.service.ICollectHISMapperService; +import com.smartor.domain.*; +import com.smartor.mapper.*; +import com.smartor.service.impl.PatArchiveServiceImpl; +import com.smartor.service.impl.PatMedInhospServiceImpl; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.ObjectUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; +import org.springframework.stereotype.Service; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.util.*; + +@Slf4j +@Service +public class CollectHISMapperServiceImpl implements ICollectHISMapperService { + @Autowired + private HNGatherPatArchiveMapper hnGatherPatArchiveMapper; + + @Autowired + private SysUser2Mapper sysUser2Mapper; + + @Autowired + private SysUserRole2Mapper sysUserRoleMapper; + + @Autowired + private SysDept2Mapper sysDept2Mapper; + + @Autowired + private SysUserDeptMapper sysUserDeptMapper; + + @Autowired + private Icd10Mapper icd10Mapper; + + @Autowired + private PatMedOuthospMapper patMedOuthospMapper; + + @Autowired + private PatMedInhospMapper patMedInhospMapper; + + @Autowired + private PatArchiveMapper patArchiveMapper; + + @Autowired + private ThreadPoolTaskExecutor taskExecutor; + + @Autowired + private ShardingMapper shardingMapper; + + private static final long SHARDING_THRESHOLD = 5_000_000L; + private static final String PAT_ARCHIVE_TABLE = "pat_archive"; + private static final String PAT_MED_INHOSP_TABLE = "pat_med_inhosp"; + + + @Override + public List<PatArchive> selectPatArchiveList(PatArchive patArchive) { + return hnGatherPatArchiveMapper.selectPatArchiveList(patArchive); + } + +// @Override +// public Integer selectPatMedInhospList(PatMedInhosp patMedInhosp) { +// // 寮傛鎵ц鏁翠釜鏁版嵁鍚屾浠诲姟 +// taskExecutor.execute(() -> { +// log.info("寮�濮嬫墽琛屾暟鎹悓姝ヤ换鍔�..."); +// syncPatArchivesInOrder(); // 鍏堝悓姝ユ偅鑰� +// syncPatMedInhosp(); // 鍐嶅悓姝ュ嚭鍏ラ櫌 +// log.info("鏁版嵁鍚屾浠诲姟鎻愪氦瀹屾瘯銆�"); +// }); +// return 0; // 杩斿洖0琛ㄧず浠诲姟宸叉彁浜ゅ埌鍚庡彴鎵ц +// } + + + @Override + public Integer selectPatMedInhospList(PatMedInhosp patMedInhosp) { + List<PatMedInhosp> patMedInhospList = hnGatherPatArchiveMapper.selectPatMedInhospList(patMedInhosp); + for (PatMedInhosp pm : patMedInhospList) { + PatArchive patArchive = new PatArchive(); + patArchive.setPatientno(pm.getPatno()); + List<PatArchive> patArchives = hnGatherPatArchiveMapper.selectPatArchiveList(patArchive); + if (CollectionUtils.isEmpty(patArchives)) { + //绌轰簡鐩存帴涓㈡帀 + continue; + } + PatArchive pa = new PatArchive(); + pa.setPatientno(patArchives.get(0).getPatientno()); + List<PatArchive> patArchives1 = patArchiveMapper.selectPatArchiveList(pa); + if (CollectionUtils.isNotEmpty(patArchives1)) { + pm.setPatid(patArchives1.get(0).getId()); + } else { + patArchiveMapper.insertPatArchiveSingle(patArchives.get(0)); + pm.setPatid(patArchives.get(0).getId()); + } + patMedInhospMapper.insertPatMedInhosp(pm); + } + return 0; + } + + @Override + public Boolean hnDataGather(HnDataGatherVO hnDataGatherVO) { + + LocalDate startDate = hnDataGatherVO.getStartOutHospTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); + LocalDate endDate = hnDataGatherVO.getEndOutHospTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); + + Integer po = null; + // 寰幆澶勭悊姣忎竴澶� + for (LocalDate currentDate = startDate; !currentDate.isAfter(endDate); currentDate = currentDate.plusDays(1)) { + PatMedInhosp dailyCondition = new PatMedInhosp(); + LocalDateTime dayStart = currentDate.atStartOfDay(); + LocalDateTime dayEnd = currentDate.atTime(23, 59, 59); + dailyCondition.setStartOutHospTime(Date.from(dayStart.atZone(ZoneId.systemDefault()).toInstant())); + dailyCondition.setEndOutHospTime(Date.from(dayEnd.atZone(ZoneId.systemDefault()).toInstant())); + Integer pi = selectPatMedInhospList(dailyCondition); + + PatMedOuthosp patMedOuthosp = new PatMedOuthosp(); + patMedOuthosp.setBeginTime(Date.from(dayStart.atZone(ZoneId.systemDefault()).toInstant())); + patMedOuthosp.setEndTime(Date.from(dayEnd.atZone(ZoneId.systemDefault()).toInstant())); + po = selectPatMedOuthospList(patMedOuthosp); + } + return true; + } + + + @Override + public Integer selectPatMedOuthospList(PatMedOuthosp patMedOuthosp) { + List<PatMedOuthosp> patMedOuthosps = hnGatherPatArchiveMapper.selectPatMedOuthospList(patMedOuthosp); + log.info("selectPatMedOuthospList鐨勯噰闆嗗埌鐨勬暟閲忎负锛歿}", patMedOuthosps.size()); + Integer i = null; + for (PatMedOuthosp patMedOuthosp1 : patMedOuthosps) { + //鑾峰彇鎮h�呭熀鏈俊鎭� + PatArchive patArchive = new PatArchive(); + patArchive.setPatientno(patMedOuthosp1.getPatno()); + List<PatArchive> patArchives = hnGatherPatArchiveMapper.selectPatArchiveList(patArchive); + + //鏍规嵁patno鍒ゆ柇鏈湴鎮h�呭熀鏈俊鎭槸鍚﹀瓨鍦� + PatArchive pa = new PatArchive(); + pa.setPatientno(patMedOuthosp1.getPatno()); + List<PatArchive> patArchives1 = patArchiveMapper.selectPatArchiveList(pa); + if (CollectionUtils.isNotEmpty(patArchives1)) { + patMedOuthosp1.setPatid(patArchives1.get(0).getId()); + } else { + if (CollectionUtils.isEmpty(patArchives)) { + continue; + } + patArchiveMapper.insertPatArchiveSingle(patArchives.get(0)); + patMedOuthosp1.setPatid(patArchives.get(0).getId()); + } + i = patMedOuthospMapper.insertPatMedOuthosp(patMedOuthosp1); + } + + return i; + } + + @Override + public Integer selectIcd10List(Icd10 icd10) { + List<Icd10> icd10s = hnGatherPatArchiveMapper.selectIcd10List(icd10); + log.info("selectIcd10List鐨勯噰闆嗗埌鐨勬暟閲忎负锛歿}", icd10s.size()); + int i = icd10Mapper.batchIcd10(icd10s); + return i; + } + + @Override + public Integer selectUserList(SysUser sysUser) { + List<SysUser> sysUserList = hnGatherPatArchiveMapper.selectUserList(sysUser); + log.info("sysUserList鐨勯噰闆嗗埌鐨勬暟閲忎负锛歿}", sysUserList.size()); + int i = sysUser2Mapper.batchUser(sysUserList); + for (SysUser sysUser1 : sysUserList) { + log.info("sysUser1鐨処D涓猴細{}", sysUser1.getUserId()); + log.info("sysUser1鐨凥ISUSERID涓猴細{}", sysUser1.getHisUserId()); + //鏂板鐢ㄦ埛涓庤鑹� + SysUserRole yhyjsxx = hnGatherPatArchiveMapper.yhyjsxx(sysUser1); + if (yhyjsxx == null) continue; + yhyjsxx.setUserId(sysUser1.getUserId()); + List<SysUserRole> userRoleList = new ArrayList<>(); + userRoleList.add(yhyjsxx); + sysUserRoleMapper.batchUserRole(userRoleList); + + //鏂板鐢ㄦ埛涓庨儴闂� + if (StringUtils.isEmpty(sysUser1.getHisUserId())) continue; + SysUserDept sysUserDept = hnGatherPatArchiveMapper.yhyksxx(sysUser1); + if (Objects.isNull(sysUserDept) || sysUserDept.getDeptId() == null) continue; + SysDept dept = new SysDept(); + dept.setHisDeptId(sysUserDept.getDeptId().toString()); + List<SysDept> sysDepts = sysDept2Mapper.selectDeptList(dept); + if (CollectionUtils.isNotEmpty(sysDepts)) { + sysUserDept.setDeptId(sysDepts.get(0).getDeptId()); + sysUserDept.setDeptCode(sysDepts.get(0).getDeptCode()); + } + sysUserDept.setUserId(sysUser1.getUserId()); + sysUserDeptMapper.insertSysUserDept(sysUserDept); + + } + + return i; + } + + @Override + public Integer selectDeptList(SysDept dept) { + List<SysDept> sysDepts = hnGatherPatArchiveMapper.selectDeptList(dept); + log.info("selectDeptList鐨勯噰闆嗗埌鐨勬暟閲忎负锛歿}", sysDepts.size()); + int i = sysDept2Mapper.batchDept(sysDepts); + return i; + } + + + /** + * 妫�鏌ュ苟鎵ц鍒嗚〃鐨勬牳蹇冩柟娉� + * + * @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("宸茶缃柊琛� '{}' 鐨勮嚜澧濱D璧峰鍊间负 {}", tableName, maxId + 1); + + log.info("琛� '{}' 鐨勫垎琛ㄦ搷浣滃畬鎴愶紒", tableName); + } + } + +} -- Gitblit v1.9.3