From a4bc7ba7a708cf2867f3027f593ef72c0d8acf78 Mon Sep 17 00:00:00 2001
From: liusheng <337615773@qq.com>
Date: 星期六, 06 九月 2025 17:46:14 +0800
Subject: [PATCH] 单点登陆白名单访问功能
---
smartor/src/main/java/com/smartor/service/impl/HNGatherPatArchiveServiceImpl.java | 238 ++++++++++++++++++++++++++++++++++++++++++++++-------------
1 files changed, 186 insertions(+), 52 deletions(-)
diff --git a/smartor/src/main/java/com/smartor/service/impl/HNGatherPatArchiveServiceImpl.java b/smartor/src/main/java/com/smartor/service/impl/HNGatherPatArchiveServiceImpl.java
index 78f7303..3ae6888 100644
--- a/smartor/src/main/java/com/smartor/service/impl/HNGatherPatArchiveServiceImpl.java
+++ b/smartor/src/main/java/com/smartor/service/impl/HNGatherPatArchiveServiceImpl.java
@@ -2,38 +2,22 @@
import com.ruoyi.common.core.domain.entity.SysDept;
import com.ruoyi.common.core.domain.entity.SysUser;
-import com.ruoyi.common.core.redis.RedisCache;
-import com.ruoyi.common.exception.base.BaseException;
-import com.ruoyi.common.utils.DateUtils;
-import com.ruoyi.common.utils.DtoConversionUtils;
+import com.ruoyi.common.core.domain.entity.SysUserDept;
+import com.ruoyi.common.core.domain.entity.SysUserRole;
import com.ruoyi.common.utils.StringUtils;
import com.smartor.domain.*;
import com.smartor.mapper.*;
import com.smartor.service.IHNGatherPatArchiveService;
-import com.smartor.service.IPatArchiveService;
-import com.smartor.service.IPatMedInhospService;
-import com.smartor.service.IPatMedPhysicalService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
-import org.apache.commons.lang3.ObjectUtils;
-import org.apache.poi.hssf.usermodel.HSSFDateUtil;
-import org.apache.poi.ss.usermodel.DataFormatter;
-import org.apache.poi.ss.usermodel.Row;
-import org.apache.poi.ss.usermodel.Sheet;
-import org.apache.poi.ss.usermodel.Workbook;
-import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-import org.springframework.web.multipart.MultipartFile;
-import java.io.FileOutputStream;
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.ZoneId;
import java.util.*;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-import java.util.stream.Collectors;
/**
* 鎮h�呮。妗圫ervice涓氬姟灞傚鐞�
@@ -51,7 +35,13 @@
private SysUser2Mapper sysUser2Mapper;
@Autowired
+ private SysUserRole2Mapper sysUserRoleMapper;
+
+ @Autowired
private SysDept2Mapper sysDept2Mapper;
+
+ @Autowired
+ private SysUserDeptMapper sysUserDeptMapper;
@Autowired
private Icd10Mapper icd10Mapper;
@@ -65,53 +55,140 @@
@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) {
- Long count = hnGatherPatArchiveMapper.selectPatMedInhospListCount(null);
- Long aa = (count + 1000 - 1) / 1000;
- //杩涜鍒嗛〉鏌ヨ
- for (int i = 0; i <= aa; i++) {
- patMedInhosp.setPs(1000);
- patMedInhosp.setPn(1000 * i);
- List<PatMedInhosp> patMedInhospList = hnGatherPatArchiveMapper.selectPatMedInhospList(patMedInhosp);
- for (PatMedInhosp pm : patMedInhospList) {
- String patno = pm.getPatno();
- PatArchive patArchive = new PatArchive();
- //鍏堝幓鎴戜滑鑷繁鐨勮〃閲岄�氳繃patno鏌ヨ璇ユ偅鑰呮槸鍚﹀瓨鍦�
- patArchive.setPatientno(patno);
- List<PatArchive> patArchives = patArchiveMapper.selectPatArchiveList(patArchive);
- if (CollectionUtils.isEmpty(patArchives)) {
- //涓嶅瓨鍦紝鍒欓�氳繃patno鍘籋IS琛╤zjbxx鏌ヨ
- List<PatArchive> patArchives1 = hnGatherPatArchiveMapper.selectPatArchiveList(patArchive);
- //鎶婃煡璇㈠嚭鏉ョ殑鏁版嵁瀛樺埌pat_archive琛�
- PatArchive pa = patArchives1.get(0);
- pa.setId(null);
- patArchiveMapper.insertPatArchiveSingle(pa);
- pm.setPatid(pa.getId());
- } else {
- //鐩存帴灏唒atid鏀惧埌鍑哄叆闄㈣〃涓�
- pm.setPatid(patArchives.get(0).getId());
- }
+ 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;
}
- if (patMedInhospList != null && !patMedInhospList.isEmpty()) {
- patMedInhospMapper.insertPatMedInhospBatch(patMedInhospList);
+ 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());
+ }
+ if (!Objects.isNull(patMedInhosp.getStartInHospTime()) && !Objects.isNull(patMedInhosp.getEndInHospTime())) {
+ //鍏ラ櫌
+ pm.setInhospstate("0");
+ pm.setCreateTime(new Date());
+ patMedInhospMapper.insertPatMedInhosp(pm);
+ } else if (!Objects.isNull(patMedInhosp.getStartOutHospTime()) && !Objects.isNull(patMedInhosp.getEndOutHospTime())) {
+ //鍑洪櫌
+ pm.setInhospstate("1");
+ pm.setUpdateTime(new Date());
+ PatMedInhosp pmi = new PatMedInhosp();
+ pmi.setSerialnum(pm.getSerialnum());
+ List<PatMedInhosp> patMedInhospList1 = patMedInhospMapper.selectPatMedInhospList(pmi);
+ if (CollectionUtils.isEmpty(patMedInhospList1)) {
+ pm.setCreateTime(new Date());
+ patMedInhospMapper.insertPatMedInhosp(pm);
+ } else {
+ pm.setInhospid(patMedInhospList1.get(0).getInhospid());
+ patMedInhospMapper.updatePatMedInhosp(pm);
+ }
+
}
}
-
- return null;
+ return 0;
}
+
+ @Override
+ public Boolean hnDataGather(HnDataGatherVO hnDataGatherVO) {
+
+ LocalDate startDate = hnDataGatherVO.getStartTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
+ LocalDate endDate = hnDataGatherVO.getEndTime().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.setStartInHospTime(Date.from(dayStart.atZone(ZoneId.systemDefault()).toInstant()));
+ dailyCondition.setEndInHospTime(Date.from(dayEnd.atZone(ZoneId.systemDefault()).toInstant()));
+ selectPatMedInhospList(dailyCondition);
+
+ //澶勭悊鍑洪櫌
+ dailyCondition.setStartInHospTime(null);
+ dailyCondition.setEndInHospTime(null);
+ dailyCondition.setStartOutHospTime(Date.from(dayStart.atZone(ZoneId.systemDefault()).toInstant()));
+ dailyCondition.setEndOutHospTime(Date.from(dayEnd.atZone(ZoneId.systemDefault()).toInstant()));
+ selectPatMedInhospList(dailyCondition);
+
+ //澶勭悊闂ㄨ瘖
+ PatMedOuthosp patMedOuthosp = new PatMedOuthosp();
+ patMedOuthosp.setBeginTime(Date.from(dayStart.atZone(ZoneId.systemDefault()).toInstant()));
+ patMedOuthosp.setEndTime(Date.from(dayEnd.atZone(ZoneId.systemDefault()).toInstant()));
+ selectPatMedOuthospList(patMedOuthosp);
+ }
+ return true;
+ }
+
@Override
public Integer selectPatMedOuthospList(PatMedOuthosp patMedOuthosp) {
List<PatMedOuthosp> patMedOuthosps = hnGatherPatArchiveMapper.selectPatMedOuthospList(patMedOuthosp);
log.info("selectPatMedOuthospList鐨勯噰闆嗗埌鐨勬暟閲忎负锛歿}", patMedOuthosps.size());
- int i = patMedOuthospMapper.batchPatMedOuthosp(patMedOuthosps);
+ 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;
}
@@ -129,6 +206,33 @@
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;
}
@@ -139,5 +243,35 @@
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