From 7eb4c98f4d96bebf28685d801e7b978d6c3d251e Mon Sep 17 00:00:00 2001 From: liusheng <337615773@qq.com> Date: 星期四, 24 七月 2025 22:23:40 +0800 Subject: [PATCH] 代码提交 --- smartor/src/main/java/com/smartor/mapper/HNGatherPatArchiveMapper.java | 24 ++ smartor/src/main/resources/mapper/smartor/HNGatherPatArchiveMapper.xml | 123 +++++++---- ruoyi-admin/src/main/resources/application-hn.yml | 4 smartor/src/main/resources/mapper/smartor/ShardingMapper.xml | 31 ++ smartor/src/main/java/com/smartor/mapper/PatArchiveMapper.java | 3 smartor/src/main/java/com/smartor/mapper/SysUserRole2Mapper.java | 65 +++++ ruoyi-admin/src/main/resources/application.yml | 2 smartor/src/main/java/com/smartor/domain/PatMedOuthosp.java | 14 - smartor/src/main/resources/mapper/smartor/PatArchiveMapper.xml | 11 smartor/src/main/resources/mapper/smartor/PatMedInhospMapper.xml | 2 smartor/src/main/java/com/smartor/mapper/ShardingMapper.java | 30 ++ ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/HNGatherPatArchiveController.java | 38 ++ ruoyi-framework/src/main/java/com/ruoyi/framework/config/ThreadPoolConfig.java | 1 smartor/src/main/java/com/smartor/service/impl/HNGatherPatArchiveServiceImpl.java | 188 +++++++++++----- ruoyi-framework/src/main/java/com/ruoyi/framework/interceptor/HospitalFilterInterceptor.java | 22 + smartor/src/main/resources/mapper/smartor/SysUserMapper.xml | 2 smartor/src/main/resources/mapper/smartor/SysUserRole2Mapper.xml | 53 ++++ 17 files changed, 480 insertions(+), 133 deletions(-) diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/HNGatherPatArchiveController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/HNGatherPatArchiveController.java index 6b3a9ed..da5b443 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/HNGatherPatArchiveController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/HNGatherPatArchiveController.java @@ -24,7 +24,13 @@ import javax.servlet.http.HttpServletResponse; import java.lang.reflect.Array; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.util.Date; import java.util.List; + +import static com.ruoyi.framework.datasource.DynamicDataSourceContextHolder.log; /** * 娌冲崡閲囬泦鎮h�呬俊鎭帴鍙ontroller @@ -45,12 +51,32 @@ //@PreAuthorize("@ss.hasPermi('smartor:patouthosp:list')") @PostMapping("/selectGatherList") @ApiOperation("娌冲崡鏁版嵁閲囬泦") - public Integer selectUserList(@RequestBody SysUser sysUser) { -// Integer integer = ihnGatherPatArchiveService.selectUserList(null); -// Integer deptInt = ihnGatherPatArchiveService.selectDeptList(null); -// Integer icdInt = ihnGatherPatArchiveService.selectIcd10List(null); - Integer integer = ihnGatherPatArchiveService.selectPatMedInhospList(new PatMedInhosp()); - return integer; + public Integer selectUserList(@RequestBody PatMedInhosp patMedInhosp) { +// Integer sd = ihnGatherPatArchiveService.selectDeptList(null); +// Integer su = ihnGatherPatArchiveService.selectUserList(null); +// Integer icd = ihnGatherPatArchiveService.selectIcd10List(null); + + log.info("寮�濮嬫寜澶╁悓姝ョ敤鎴锋暟鎹紝鏃堕棿鑼冨洿: {} 鍒� {}", patMedInhosp.getStartOutHospTime(), patMedInhosp.getEndOutHospTime()); + + LocalDate startDate = patMedInhosp.getStartOutHospTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); + LocalDate endDate = patMedInhosp.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 = ihnGatherPatArchiveService.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 = ihnGatherPatArchiveService.selectPatMedOuthospList(patMedOuthosp); + } + return po; } } diff --git a/ruoyi-admin/src/main/resources/application-hn.yml b/ruoyi-admin/src/main/resources/application-hn.yml index 3610632..2bba942 100644 --- a/ruoyi-admin/src/main/resources/application-hn.yml +++ b/ruoyi-admin/src/main/resources/application-hn.yml @@ -17,7 +17,7 @@ slave: # 浠庢暟鎹簮寮�鍏�/榛樿鍏抽棴(鍏徃) enabled: true - url: jdbc:postgresql://10.10.13.108:5432/hdr + url: jdbc:postgresql://10.10.13.108:5432/hdr?socketTimeout=300000 username: mbsjjk password: sjjk@2025 driver-class-name: org.postgresql.Driver @@ -47,7 +47,7 @@ # validationQuery: SELECT 1 FROM DUAL validationQuery: SELECT 1 testWhileIdle: true - testOnBorrow: false + testOnBorrow: true testOnReturn: false webStatFilter: enabled: true diff --git a/ruoyi-admin/src/main/resources/application.yml b/ruoyi-admin/src/main/resources/application.yml index 04e1cc9..e942c14 100644 --- a/ruoyi-admin/src/main/resources/application.yml +++ b/ruoyi-admin/src/main/resources/application.yml @@ -74,7 +74,7 @@ # 鍥介檯鍖栬祫婧愭枃浠惰矾寰� basename: i18n/messages profiles: - active: druid + active: hn # 鏂囦欢涓婁紶 servlet: multipart: diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/ThreadPoolConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/ThreadPoolConfig.java index 7840141..36695a2 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/ThreadPoolConfig.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/ThreadPoolConfig.java @@ -5,6 +5,7 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; + import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledThreadPoolExecutor; import java.util.concurrent.ThreadPoolExecutor; diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/interceptor/HospitalFilterInterceptor.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/interceptor/HospitalFilterInterceptor.java index cc3dbe2..a80f3bd 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/interceptor/HospitalFilterInterceptor.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/interceptor/HospitalFilterInterceptor.java @@ -67,11 +67,29 @@ * 淇敼 SQL锛屾敞鍏� orgid 鏉′欢 * * @param originalSql 鍘熷 SQL - * @param orgId 褰撳墠鍖婚櫌 ID + * @param orgid 褰撳墠鍖婚櫌 ID * @return 淇敼鍚庣殑 SQL */ private String modifySqlWithOrgId(String originalSql, String orgid) { - if (originalSql.contains("insert into") || originalSql.contains("INSERT INTO") || originalSql.contains("from sys_menu") || originalSql.contains("sys_job") || originalSql.contains("update sys_menu") || originalSql.contains("information_schema.tables") || originalSql.contains("information_schema.columns") || originalSql.contains("gen_table") || originalSql.toUpperCase().contains("ORGID IS NULL") || originalSql.toUpperCase().contains("FROM CRYXX") || originalSql.toUpperCase().contains("FROM MZXX") || originalSql.toUpperCase().contains("FROM JBXX") || originalSql.toUpperCase().contains("FROM BMXX")) { + if (originalSql.contains("insert into") + || originalSql.contains("INSERT INTO") + || originalSql.contains("from sys_menu") + || originalSql.contains("sys_job") + || originalSql.contains("update sys_menu") + || originalSql.contains("information_schema.tables") + || originalSql.contains("information_schema.columns") + || originalSql.contains("gen_table") + || originalSql.toUpperCase().contains("ORGID IS NULL") + || originalSql.toUpperCase().contains("FROM CRYXX") + || originalSql.toUpperCase().contains("FROM MZXX") + || originalSql.toUpperCase().contains("FROM JBXX") + || originalSql.toUpperCase().contains("FROM BMXX") + || originalSql.toUpperCase().contains("FROM HZJBXX") + || originalSql.toUpperCase().contains("RENAME TABLE") + || originalSql.toUpperCase().contains("FROM YHYKSXX") + || originalSql.toUpperCase().contains("FROM YHYJSXX") + || originalSql.toUpperCase().contains("ALTER TABLE") + || originalSql.toUpperCase().contains("CREATE TABLE")) { return originalSql; } // 鎻愬彇 orgid 鐨� WHERE 瀛愬彞 diff --git a/smartor/src/main/java/com/smartor/domain/PatMedOuthosp.java b/smartor/src/main/java/com/smartor/domain/PatMedOuthosp.java index ba5e435..be557d9 100644 --- a/smartor/src/main/java/com/smartor/domain/PatMedOuthosp.java +++ b/smartor/src/main/java/com/smartor/domain/PatMedOuthosp.java @@ -220,18 +220,4 @@ private String idcardno; - /** - * 灏辫瘖寮�濮嬫椂闂� - */ - @ApiModelProperty(value = "灏辫瘖寮�濮嬫椂闂�") - @JsonFormat(pattern = "yyyy-MM-dd") - private Date starttime; - - /** - * 灏辫瘖缁撴潫鏃堕棿 - */ - @ApiModelProperty(value = "灏辫瘖缁撴潫鏃堕棿") - @JsonFormat(pattern = "yyyy-MM-dd") - private Date endtime; - } diff --git a/smartor/src/main/java/com/smartor/mapper/HNGatherPatArchiveMapper.java b/smartor/src/main/java/com/smartor/mapper/HNGatherPatArchiveMapper.java index 064c568..db9557a 100644 --- a/smartor/src/main/java/com/smartor/mapper/HNGatherPatArchiveMapper.java +++ b/smartor/src/main/java/com/smartor/mapper/HNGatherPatArchiveMapper.java @@ -3,9 +3,12 @@ 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.smartor.domain.*; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; import java.util.List; @@ -28,6 +31,22 @@ public List<PatArchive> selectPatArchiveList(PatArchive patArchive); /** + * 鐢ㄦ埛涓庤鑹蹭俊鎭� + * + * @param sysUser + * @return + */ + public SysUserRole yhyjsxx(SysUser sysUser); + + /** + * 鐢ㄦ埛涓庣瀹や俊鎭� + * + * @param sysUser + * @return + */ + public SysUserDept yhyksxx(SysUser sysUser); + + /** * 鍑哄叆闄俊鎭� * * @param patMedInhosp @@ -36,6 +55,11 @@ public List<PatMedInhosp> selectPatMedInhospList(PatMedInhosp patMedInhosp); public Long selectPatMedInhospListCount(PatMedInhosp patMedInhosp); + + List<PatArchive> selectPatArchiveListByLastId(@Param("lastRowNumber") long lastRowNumber, @Param("ps") int ps); + + List<PatMedInhosp> selectPatMedInhospListByLastId(@Param("lastRowNumber") long lastRowNumber, @Param("ps") int ps); + public Long selectPatArchiveCount(PatMedInhosp patMedInhosp); /** diff --git a/smartor/src/main/java/com/smartor/mapper/PatArchiveMapper.java b/smartor/src/main/java/com/smartor/mapper/PatArchiveMapper.java index 0fe819f..294b5a3 100644 --- a/smartor/src/main/java/com/smartor/mapper/PatArchiveMapper.java +++ b/smartor/src/main/java/com/smartor/mapper/PatArchiveMapper.java @@ -4,6 +4,7 @@ import com.smartor.domain.PatArchiveOthreInfo; import com.smartor.domain.PatArchiveReq; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; import java.util.List; @@ -23,6 +24,8 @@ */ public PatArchive selectPatArchiveByPatid(Long patid); + List<PatArchive> selectPatArchiveByPatnos(@Param("patnos") List<String> patnos); + /** * 鏌ヨ鎮h�呮。妗堝垪琛� * diff --git a/smartor/src/main/java/com/smartor/mapper/ShardingMapper.java b/smartor/src/main/java/com/smartor/mapper/ShardingMapper.java new file mode 100644 index 0000000..f919cb0 --- /dev/null +++ b/smartor/src/main/java/com/smartor/mapper/ShardingMapper.java @@ -0,0 +1,30 @@ +package com.smartor.mapper; + +import com.smartor.domain.PatArchive; +import com.smartor.domain.PatArchiveOthreInfo; +import com.smartor.domain.PatArchiveReq; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 鎮h�呮。妗圡apper鎺ュ彛 + * + * @author smartor + * @date 2023-03-04 + */ +@Mapper +public interface ShardingMapper { + long getTableCount(@Param("tableName") String tableName); + + Long getMaxId(@Param("tableName") String tableName); + + void renameTable(@Param("oldName") String oldName, @Param("newName") String newName); + + void createLikeTable(@Param("newTableName") String newTableName, @Param("templateTableName") String templateTableName); + + void setAutoIncrement(@Param("tableName") String tableName, @Param("value") long value); + + +} diff --git a/smartor/src/main/java/com/smartor/mapper/SysUserRole2Mapper.java b/smartor/src/main/java/com/smartor/mapper/SysUserRole2Mapper.java new file mode 100644 index 0000000..faf1a55 --- /dev/null +++ b/smartor/src/main/java/com/smartor/mapper/SysUserRole2Mapper.java @@ -0,0 +1,65 @@ +package com.smartor.mapper; + +import com.ruoyi.common.core.domain.entity.SysUserRole; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 鐢ㄦ埛涓庤鑹插叧鑱旇〃 鏁版嵁灞� + * + * @author ruoyi + */ +@Mapper +public interface SysUserRole2Mapper +{ + /** + * 閫氳繃鐢ㄦ埛ID鍒犻櫎鐢ㄦ埛鍜岃鑹插叧鑱� + * + * @param userId 鐢ㄦ埛ID + * @return 缁撴灉 + */ + public int deleteUserRoleByUserId(Long userId); + + /** + * 鎵归噺鍒犻櫎鐢ㄦ埛鍜岃鑹插叧鑱� + * + * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁ID + * @return 缁撴灉 + */ + public int deleteUserRole(Long[] ids); + + /** + * 閫氳繃瑙掕壊ID鏌ヨ瑙掕壊浣跨敤鏁伴噺 + * + * @param roleId 瑙掕壊ID + * @return 缁撴灉 + */ + public int countUserRoleByRoleId(Long roleId); + + /** + * 鎵归噺鏂板鐢ㄦ埛瑙掕壊淇℃伅 + * + * @param userRoleList 鐢ㄦ埛瑙掕壊鍒楄〃 + * @return 缁撴灉 + */ + public int batchUserRole(List<SysUserRole> userRoleList); + + /** + * 鍒犻櫎鐢ㄦ埛鍜岃鑹插叧鑱斾俊鎭� + * + * @param userRole 鐢ㄦ埛鍜岃鑹插叧鑱斾俊鎭� + * @return 缁撴灉 + */ + public int deleteUserRoleInfo(SysUserRole userRole); + + /** + * 鎵归噺鍙栨秷鎺堟潈鐢ㄦ埛瑙掕壊 + * + * @param roleId 瑙掕壊ID + * @param userIds 闇�瑕佸垹闄ょ殑鐢ㄦ埛鏁版嵁ID + * @return 缁撴灉 + */ + public int deleteUserRoleInfos(@Param("roleId") Long roleId, @Param("userIds") Long[] userIds); +} 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 06e766b..2b4c671 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,19 @@ 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.util.*; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; -import java.util.stream.Collectors; /** * 鎮h�呮。妗圫ervice涓氬姟灞傚鐞� @@ -51,7 +32,13 @@ private SysUser2Mapper sysUser2Mapper; @Autowired + private SysUserRole2Mapper sysUserRoleMapper; + + @Autowired private SysDept2Mapper sysDept2Mapper; + + @Autowired + private SysUserDeptMapper sysUserDeptMapper; @Autowired private Icd10Mapper icd10Mapper; @@ -65,62 +52,84 @@ @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 patArchiveCount = hnGatherPatArchiveMapper.selectPatArchiveCount(null); - Long patOffst = (patArchiveCount + 1000 - 1) / 1000; - PatArchive patArchive = new PatArchive(); - Long patSize = 0L; - for (int i = 0; i <= patOffst; i++) { - patArchive.setPs(1000); - patArchive.setPn(1000 * i); + 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 (patArchives != null && !patArchives.isEmpty()) { - patArchiveMapper.insertPatArchive(patArchives); + if (CollectionUtils.isEmpty(patArchives)) { + //绌轰簡鐩存帴涓㈡帀 + continue; } - patSize = patSize + patArchives.size(); + 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); } - log.info("patArchives澶勭悊缁撴潫涓�鍏�:{}", patSize); - - - 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 pa = new PatArchive(); - //鍏堝幓鎴戜滑鑷繁鐨勮〃閲岄�氳繃patno鏌ヨ璇ユ偅鑰呮槸鍚﹀瓨鍦� - pa.setPatientno(patno); - List<PatArchive> patArchives = patArchiveMapper.selectPatArchiveList(pa); - if (CollectionUtils.isEmpty(patArchives)) { - continue; - } else { - //鐩存帴灏唒atid鏀惧埌鍑哄叆闄㈣〃涓� - pm.setPatid(patArchives.get(0).getId()); - } - } - if (patMedInhospList != null && !patMedInhospList.isEmpty()) { - patMedInhospMapper.insertPatMedInhospBatch(patMedInhospList); - } - } - return null; + return 0; } + @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 { + patArchiveMapper.insertPatArchiveSingle(patArchives.get(0)); + patMedOuthosp1.setPatid(patArchives.get(0).getId()); + } + i = patMedOuthospMapper.insertPatMedOuthosp(patMedOuthosp1); + } return i; } @@ -138,6 +147,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; } @@ -148,5 +184,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); + } + } } + diff --git a/smartor/src/main/resources/mapper/smartor/HNGatherPatArchiveMapper.xml b/smartor/src/main/resources/mapper/smartor/HNGatherPatArchiveMapper.xml index 5592a9f..ac28143 100644 --- a/smartor/src/main/resources/mapper/smartor/HNGatherPatArchiveMapper.xml +++ b/smartor/src/main/resources/mapper/smartor/HNGatherPatArchiveMapper.xml @@ -4,6 +4,28 @@ "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.smartor.mapper.HNGatherPatArchiveMapper"> + + <resultMap type="com.ruoyi.common.core.domain.entity.SysUserDept" id="SysUserDeptResult"> + <result property="id" column="id"/> + <result property="orgid" column="orgid"/> + <result property="userId" column="user_id"/> + <result property="deptId" column="dept_id"/> + <result property="delFlag" column="del_flag"/> + <result property="deptCode" column="dept_code"/> + <result property="deptName" column="dept_name"/> + <result property="deptType" column="dept_type"/> + <result property="createTime" column="create_time"/> + <result property="updateTime" column="update_time"/> + </resultMap> + + + <resultMap type="com.ruoyi.common.core.domain.entity.SysUserRole" id="SysUserRoleResult"> + <result property="userId" column="user_id"/> + <result property="roleId" column="role_id"/> + <result property="orgid" column="orgid"/> + </resultMap> + + <resultMap type="com.smartor.domain.PatArchive" id="PatArchiveResult"> <result property="id" column="id"/> <result property="patientno" column="patientno"/> @@ -307,22 +329,16 @@ </resultMap> <sql id="selectPatArchiveVo"> - select id, - notrequired_flag, + select notrequired_flag, notrequiredreason, patientno, - filter_drname, - filter_drcode, patid_his, - age_unit, - age_unit2, sd_flag, name, sex, idcardno, birthdate, age, - age2, nation, native_place, place_of_residence, @@ -335,15 +351,7 @@ idcardtype, orgid, openid, - del_flag, - update_by, - update_time, - create_by, - create_time, - isupload, - pattype, viptype, - upload_time, care_facilities, case_path, degree_of_education, @@ -351,10 +359,29 @@ income, medicare_type, care_person, - guid, case_person_age from hzjbxx </sql> + + + <select id="yhyjsxx" parameterType="com.ruoyi.common.core.domain.entity.SysUser" resultMap="SysUserRoleResult"> + select user_id, role_id, orgid + FROM yhyjsxx + <where> + <if test="hisUserId != null ">and user_id = #{hisUserId}</if> + </where> + </select> + + <select id="yhyksxx" parameterType="com.ruoyi.common.core.domain.entity.SysUser" resultMap="SysUserDeptResult"> + select user_id, user_code, dept_type,department_id as + dept_id,dept_name,deptparent,del_flag,orgid,create_time,create_by,update_time,update_by + FROM yhyksxx + <where> + user_id != 'admin' + <if test="hisUserId != null ">and user_id = #{hisUserId}</if> + </where> + </select> + <select id="selectPatArchiveList" parameterType="com.smartor.domain.PatArchive" resultMap="PatArchiveResult"> <include refid="selectPatArchiveVo"/> @@ -369,7 +396,7 @@ <if test="uploadTime != null ">and upload_time = #{uploadTime}</if> <if test="viptype != null ">and viptype = #{viptype}</if> <if test="pattype != null ">and pattype = #{pattype}</if> - <if test="patientno != null ">and patientno = #{patientno}</if> + <if test="patientno != null ">and patientno = CAST(#{patientno} AS INTEGER)</if> <if test="patidHis != null ">and patid_his = #{patidHis}</if> <if test="sdFlag != null ">and sd_flag = #{sdFlag}</if> <if test="ageUnit != null ">and age_unit = #{ageUnit}</if> @@ -389,7 +416,6 @@ <if test="filterDrname != null ">and filter_drname = #{filterDrname}</if> <if test="filterDrcode != null ">and filter_drcode = #{filterDrcode}</if> </where> - limit #{ps} OFFSET #{pn} </select> @@ -397,6 +423,26 @@ select count(*) FROM cryxx </select> + + <select id="selectPatArchiveListByLastId" resultMap="PatArchiveResult"> + SELECT * + FROM ( + SELECT *, + ROW_NUMBER() OVER (ORDER BY patid_his) as row_num + FROM hzjbxx + ) a + WHERE row_num > #{lastRowNumber} LIMIT #{ps} + </select> + + <select id="selectPatMedInhospListByLastId" resultMap="PatMedInhospResult"> + SELECT * + FROM (SELECT *, + ROW_NUMBER() OVER (ORDER BY patno) as row_num + FROM cryxx + ) a + WHERE row_num > #{lastRowNumber} LIMIT #{ps} + </select> + <select id="selectPatArchiveCount" parameterType="com.smartor.domain.PatMedInhosp" resultType="Long"> select count(*) FROM hzjbxx @@ -449,17 +495,18 @@ FROM cryxx b <where> - <if test="startOutHospTime != null ">and date_format(b.endtime,'%y%m%d') >= - date_format(#{startOutHospTime},'%y%m%d') + + <if test="startOutHospTime != null ">and to_char(b.endtime,'YYMMDD') >= + to_char(#{startOutHospTime}::date,'YYMMDD') </if> - <if test="endOutHospTime != null ">and date_format(b.endtime,'%y%m%d') <= - date_format(#{endOutHospTime},'%y%m%d') + <if test="endOutHospTime != null ">and to_char(b.endtime,'YYMMDD') <= + to_char(#{endOutHospTime}::date,'YYMMDD') </if> - <if test="startInHospTime != null ">and date_format(b.starttime,'%y%m%d') >= - date_format(#{startInHospTime},'%y%m%d') + <if test="startInHospTime != null ">and to_char(b.starttime,'YYMMDD') >= + to_char(#{startInHospTime}::date,'%y%m%d') </if> - <if test="endInHospTime != null ">and date_format(b.starttime,'%y%m%d') <= - date_format(#{endInHospTime},'%y%m%d') + <if test="endInHospTime != null ">and to_char(b.starttime,'YYMMDD') <= + to_char(#{endInHospTime}::date,'YYMMDD') </if> <if test="inhospno != null ">and b.inhospno = #{inhospno}</if> <if test="fuflag != null ">and b.fuflag = #{fuflag}</if> @@ -472,7 +519,6 @@ <if test="outWayName != null ">and b.out_way_name = #{outWayName}</if> <if test="orgid != null ">and b.orgid = #{orgid}</if> </where> - limit #{ps} OFFSET #{pn} </select> @@ -507,19 +553,14 @@ mainsuit from mzxx <where> - <if test="deptname != null and deptname != ''">and deptname like concat('%', #{deptname}, '%')</if> - <if test="drname != null and drname != ''">and drname like concat('%', #{drname}, '%')</if> - <if test="patname != null and patname != ''">and patname like concat('%', #{patname}, '%')</if> - <if test="beginTime != null ">and date_format( admitdate,'%y%m%d') >= - date_format(#{beginTime},'%y%m%d') + + <if test="beginTime != null ">and to_char( admitdate,'YYMMDD') >= + to_char(#{beginTime}::date,'YYMMDD') </if> - <if test="endTime != null ">and date_format( admitdate,'%y%m%d') <= - date_format(#{endTime},'%y%m%d') + <if test="endTime != null ">and to_char( admitdate,'YYMMDD') <= + to_char(#{endTime}::date,'YYMMDD') </if> - <if test="patid != null ">and patid = #{patid}</if> - <if test="patno != null ">and patno = #{patno}</if> - <if test="outhospno != null and outhospno != ''">and outhospno = #{outhospno}</if> - <if test="diagcheckFlag != null and diagcheckFlag != ''">and diagcheck_flag = #{diagcheckFlag}</if> + </where> </select> @@ -585,12 +626,6 @@ </if> <if test="phonenumber != null and phonenumber != ''"> AND u.phonenumber like concat('%', #{phonenumber}, '%') - </if> - <if test="params.beginTime != null and params.beginTime != ''"><!-- 寮�濮嬫椂闂存绱� --> - AND date_format(u.create_time,'%y%m%d') >= date_format(#{params.beginTime},'%y%m%d') - </if> - <if test="params.endTime != null and params.endTime != ''"><!-- 缁撴潫鏃堕棿妫�绱� --> - AND date_format(u.create_time,'%y%m%d') <= date_format(#{params.endTime},'%y%m%d') </if> </where> </select> diff --git a/smartor/src/main/resources/mapper/smartor/PatArchiveMapper.xml b/smartor/src/main/resources/mapper/smartor/PatArchiveMapper.xml index d26ad2d..1ea6f47 100644 --- a/smartor/src/main/resources/mapper/smartor/PatArchiveMapper.xml +++ b/smartor/src/main/resources/mapper/smartor/PatArchiveMapper.xml @@ -266,6 +266,15 @@ where id = #{id} and del_flag=0 </select> + <select id="selectPatArchiveByPatnos" resultMap="PatArchiveResult"> + SELECT id, patientno + FROM pat_archive + WHERE patientno IN + <foreach item="patno" collection="patnos" open="(" separator="," close=")"> + #{patno} + </foreach> + </select> + <insert id="insertPatArchiveSingle" parameterType="com.smartor.domain.PatArchive" useGeneratedKeys="true" keyProperty="id"> insert into pat_archive @@ -369,7 +378,7 @@ </trim> </insert> - <insert id="insertPatArchive"> + <insert id="insertPatArchive" useGeneratedKeys="true" keyProperty="id"> insert into pat_archive(name,viptype,sex,idcardno,birthdate,place_of_residence,age,age2,sourcefrom,archivetime,archiveby,telcode,relativetelcode,idcardtype,orgid,openid,dduserid,update_by,update_time ,create_by,create_time,isupload,upload_time,pattype,nation,birthplace,native_place,patientno,patid_his,sd_flag,age_unit,age_unit2,notrequired_flag,notrequiredreason,care_facilities,case_path, diff --git a/smartor/src/main/resources/mapper/smartor/PatMedInhospMapper.xml b/smartor/src/main/resources/mapper/smartor/PatMedInhospMapper.xml index 28364e0..1e6df5d 100644 --- a/smartor/src/main/resources/mapper/smartor/PatMedInhospMapper.xml +++ b/smartor/src/main/resources/mapper/smartor/PatMedInhospMapper.xml @@ -558,7 +558,7 @@ </insert> - <insert id="insertPatMedInhospBatch" parameterType="java.util.List"> + <insert id="insertPatMedInhospBatch" parameterType="java.util.List" useGeneratedKeys="true" keyProperty="item.inhospid"> insert into pat_med_inhosp ( serialnum, hospitalname, hospitalcode, hospitaldistrictcode, hospitaldistrictname, icd10code, diagname, starttime, endtime, deptcode, deptname, roomno, bed_no, diff --git a/smartor/src/main/resources/mapper/smartor/ShardingMapper.xml b/smartor/src/main/resources/mapper/smartor/ShardingMapper.xml new file mode 100644 index 0000000..3bba44f --- /dev/null +++ b/smartor/src/main/resources/mapper/smartor/ShardingMapper.xml @@ -0,0 +1,31 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!DOCTYPE mapper + PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<mapper namespace="com.smartor.mapper.ShardingMapper"> + <select id="getTableCount" resultType="long"> + SELECT count(*) + FROM ${tableName} + </select> + + <select id="getMaxId" resultType="long"> + SELECT max(id) + FROM ${tableName} + </select> + + <update id="renameTable"> + RENAME + TABLE + ${oldName} + TO + ${newName} + </update> + + <update id="createLikeTable"> + CREATE TABLE ${newTableName} LIKE ${templateTableName} + </update> + + <update id="setAutoIncrement"> + ALTER TABLE ${tableName} AUTO_INCREMENT = #{value} + </update> +</mapper> diff --git a/smartor/src/main/resources/mapper/smartor/SysUserMapper.xml b/smartor/src/main/resources/mapper/smartor/SysUserMapper.xml index 515c620..a5369ee 100644 --- a/smartor/src/main/resources/mapper/smartor/SysUserMapper.xml +++ b/smartor/src/main/resources/mapper/smartor/SysUserMapper.xml @@ -310,7 +310,7 @@ </insert> - <insert id="batchUser"> + <insert id="batchUser" useGeneratedKeys="true" keyProperty="userId"> insert into sys_user( user_id, dept_id, user_name, nick_name, email, avatar, phonenumber, sex, password, status, create_by, remark, user_type, dept_info, hosp_info, searchscope, id_card, title, job_phone, birthday, his_user_id, guid, orgid, diff --git a/smartor/src/main/resources/mapper/smartor/SysUserRole2Mapper.xml b/smartor/src/main/resources/mapper/smartor/SysUserRole2Mapper.xml new file mode 100644 index 0000000..f77a682 --- /dev/null +++ b/smartor/src/main/resources/mapper/smartor/SysUserRole2Mapper.xml @@ -0,0 +1,53 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!DOCTYPE mapper + PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<mapper namespace="com.smartor.mapper.SysUserRole2Mapper"> + + <resultMap type="SysUserRole" id="SysUserRoleResult"> + <result property="userId" column="user_id"/> + <result property="roleId" column="role_id"/> + <result property="guid" column="guid"/> + <result property="orgid" column="orgid"/> + </resultMap> + + <delete id="deleteUserRoleByUserId" parameterType="Long"> + delete + from sys_user_role + where user_id = #{userId} + </delete> + + <select id="countUserRoleByRoleId" resultType="Integer"> + select count(1) + from sys_user_role + where role_id = #{roleId} + </select> + + <delete id="deleteUserRole" parameterType="Long"> + delete from sys_user_role where user_id in + <foreach collection="array" item="userId" open="(" separator="," close=")"> + #{userId} + </foreach> + </delete> + + <insert id="batchUserRole"> + insert into sys_user_role(user_id, role_id,guid,orgid) values + <foreach item="item" index="index" collection="list" separator=","> + (#{item.userId},#{item.roleId},#{item.guid},#{item.orgid}) + </foreach> + </insert> + + <delete id="deleteUserRoleInfo" parameterType="SysUserRole"> + delete + from sys_user_role + where user_id = #{userId} + and role_id = #{roleId} + </delete> + + <delete id="deleteUserRoleInfos"> + delete from sys_user_role where role_id=#{roleId} and user_id in + <foreach collection="userIds" item="userId" open="(" separator="," close=")"> + #{userId} + </foreach> + </delete> +</mapper> -- Gitblit v1.9.3