liusheng
8 天以前 7eb4c98f4d96bebf28685d801e7b978d6c3d251e
代码提交
已添加4个文件
已修改13个文件
613 ■■■■ 文件已修改
ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/HNGatherPatArchiveController.java 38 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/resources/application-hn.yml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/resources/application.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-framework/src/main/java/com/ruoyi/framework/config/ThreadPoolConfig.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-framework/src/main/java/com/ruoyi/framework/interceptor/HospitalFilterInterceptor.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/domain/PatMedOuthosp.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/mapper/HNGatherPatArchiveMapper.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/mapper/PatArchiveMapper.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/mapper/ShardingMapper.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/mapper/SysUserRole2Mapper.java 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/service/impl/HNGatherPatArchiveServiceImpl.java 188 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/resources/mapper/smartor/HNGatherPatArchiveMapper.xml 123 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/resources/mapper/smartor/PatArchiveMapper.xml 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/resources/mapper/smartor/PatMedInhospMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/resources/mapper/smartor/ShardingMapper.xml 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/resources/mapper/smartor/SysUserMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/resources/mapper/smartor/SysUserRole2Mapper.xml 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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;
/**
 * æ²³å—采集患者信息接口Controller
@@ -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;
    }
}
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
ruoyi-admin/src/main/resources/application.yml
@@ -74,7 +74,7 @@
    # å›½é™…化资源文件路径
    basename: i18n/messages
  profiles:
    active: druid
    active: hn
  # æ–‡ä»¶ä¸Šä¼ 
  servlet:
    multipart:
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;
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 å­å¥
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;
}
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);
    /**
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);
    /**
     * æŸ¥è¯¢æ‚£è€…档案列表
     *
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;
/**
 * æ‚£è€…档案Mapper接口
 *
 * @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);
}
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);
}
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;
/**
 * æ‚£è€…档案Service业务层处理
@@ -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 {
                    //直接将patid放到出入院表中
                    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) {
            //获取患者基本信息
            PatArchive patArchive = new PatArchive();
            patArchive.setPatientno(patMedOuthosp1.getPatno());
            List<PatArchive> patArchives = hnGatherPatArchiveMapper.selectPatArchiveList(patArchive);
            //根据patno判断本地患者基本信息是否存在
            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的ID为:{}", sysUser1.getUserId());
            log.info("sysUser1的HISUSERID为:{}", 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("已设置新表 '{}' çš„自增ID起始值为 {}", tableName, maxId + 1);
            log.info("表 '{}' çš„分表操作完成!", tableName);
        }
    }
}
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') &gt;=
                date_format(#{startOutHospTime},'%y%m%d')
            <if test="startOutHospTime != null ">and to_char(b.endtime,'YYMMDD') &gt;=
                to_char(#{startOutHospTime}::date,'YYMMDD')
            </if>
            <if test="endOutHospTime != null ">and date_format(b.endtime,'%y%m%d') &lt;=
                date_format(#{endOutHospTime},'%y%m%d')
            <if test="endOutHospTime != null ">and to_char(b.endtime,'YYMMDD') &lt;=
                to_char(#{endOutHospTime}::date,'YYMMDD')
            </if>
            <if test="startInHospTime != null ">and date_format(b.starttime,'%y%m%d') &gt;=
                date_format(#{startInHospTime},'%y%m%d')
            <if test="startInHospTime != null ">and to_char(b.starttime,'YYMMDD') &gt;=
                to_char(#{startInHospTime}::date,'%y%m%d')
            </if>
            <if test="endInHospTime != null ">and date_format(b.starttime,'%y%m%d') &lt;=
                date_format(#{endInHospTime},'%y%m%d')
            <if test="endInHospTime != null ">and to_char(b.starttime,'YYMMDD') &lt;=
                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') &gt;=
                date_format(#{beginTime},'%y%m%d')
            <if test="beginTime != null ">and to_char( admitdate,'YYMMDD') &gt;=
                to_char(#{beginTime}::date,'YYMMDD')
            </if>
            <if test="endTime != null ">and date_format( admitdate,'%y%m%d') &lt;=
                date_format(#{endTime},'%y%m%d')
            <if test="endTime != null ">and to_char( admitdate,'YYMMDD') &lt;=
                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') &gt;= 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') &lt;= date_format(#{params.endTime},'%y%m%d')
            </if>
        </where>
    </select>
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,
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,
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>
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,
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>