diff --git a/src/main/java/com/docus/demo/config/DbSqlserverLisConfig.java b/src/main/java/com/docus/demo/config/DbSqlserverLisConfig.java new file mode 100644 index 0000000..89495d8 --- /dev/null +++ b/src/main/java/com/docus/demo/config/DbSqlserverLisConfig.java @@ -0,0 +1,45 @@ +package com.docus.demo.config; + +import com.alibaba.druid.pool.DruidDataSource; +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.jdbc.datasource.DataSourceTransactionManager; + +import javax.sql.DataSource; + +@Configuration +@MapperScan(basePackages = DbSqlserverLisConfig.PACKAGE, sqlSessionFactoryRef = "sqlserverlisSqlSessionFactory") +public class DbSqlserverLisConfig { + // 这里一定要指定精准 否则后果不堪设想 + static final String PACKAGE = "com.docus.demo.mapper.sqlserverlis"; + static final String MAPPER_LOCATION = "classpath:mapper/sqlserverlis/*.xml"; + + @Bean(name = "sqlserverlisDataSource") + @ConfigurationProperties(prefix = "spring.datasource.dynamic.datasource.sqlserverlis") + public DataSource secondDataSource(){ + return new DruidDataSource(); + } + + /*注入事务*/ + @Bean(name = "sqlserverlisTransactionManager") + public DataSourceTransactionManager secondTransactionManager() { + return new DataSourceTransactionManager(secondDataSource()); + } + + @Bean(name = "sqlserverlisSqlSessionFactory") + public SqlSessionFactory secondSqlSessionFactory(@Qualifier("sqlserverlisDataSource") DataSource secondDataSource) + throws Exception { + final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean(); + sessionFactory.setDataSource(secondDataSource); + sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver() + .getResources(DbSqlserverLisConfig.MAPPER_LOCATION)); + return sessionFactory.getObject(); + } + +} diff --git a/src/main/java/com/docus/demo/controller/GuangZhouFirstHospController.java b/src/main/java/com/docus/demo/controller/GuangZhouFirstHospController.java index fb54b22..f507bf5 100644 --- a/src/main/java/com/docus/demo/controller/GuangZhouFirstHospController.java +++ b/src/main/java/com/docus/demo/controller/GuangZhouFirstHospController.java @@ -10,6 +10,7 @@ import com.docus.demo.entity.CommonResult; import com.docus.demo.facade.ISyncBasicDataService; import com.docus.demo.facade.ISyncBasicFileService; import com.docus.demo.facade.IWebService; +import com.docus.demo.mapper.sqlserverlis.LisReportMapper; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; @@ -25,6 +26,7 @@ import java.time.format.DateTimeFormatter; import java.time.temporal.TemporalAdjusters; import java.util.Collections; import java.util.List; +import java.util.Map; import java.util.concurrent.ConcurrentHashMap; /** @@ -44,6 +46,9 @@ public class GuangZhouFirstHospController { @Autowired private IWebService webService; + @Autowired + private LisReportMapper lisReportMapper; + @ApiOperation("省厅-同步基础数据") @PostMapping("/syncBasicData") public CommonResult syncBasicData(@RequestBody SyncBasicDataDto syncBasicDataDto) { @@ -191,6 +196,13 @@ public class GuangZhouFirstHospController { return CommonResult.success("导出已完成!"); } + @ApiOperation("检验报告验证查询测试") + @GetMapping("/lisVerifyQuery") + public CommonResult lisVerifyQuery(@RequestParam("inpatientNo") String inpatientNo,@RequestParam("admissTimes") String admissTimes) { + List> data = lisReportMapper.query(inpatientNo, admissTimes); + return CommonResult.success(data); + } + private void validateAndSet(SyncLabReportDto syncLabReportDto) { List basicDtoList = syncLabReportDto.getBasicDtoList(); diff --git a/src/main/java/com/docus/demo/facade/IWebService.java b/src/main/java/com/docus/demo/facade/IWebService.java index 70bde83..14623e3 100644 --- a/src/main/java/com/docus/demo/facade/IWebService.java +++ b/src/main/java/com/docus/demo/facade/IWebService.java @@ -12,6 +12,16 @@ public interface IWebService { void syncLabReport(SyncLabReportDto syncLabReportDto); + + /** + * 同步检验图片方法,并利用LIS数据库验证 + * + * @param tbasic 患者基础数据 + * @param startDate 报告查询时间开始时间,格式 yyyy-MM-dd HH:mm:ss + * @param endDate 报告查询时间结束时间,格式 yyyy-MM-dd HH:mm:ss + */ + void syncVerifyInspection(Tbasic tbasic, String startDate, String endDate); + /** * 同步检验图片方法,调用syncInspection(Tbasic tbasic, String startDate, String endDate,true) * diff --git a/src/main/java/com/docus/demo/job/GzFirstLabReportSyncJob.java b/src/main/java/com/docus/demo/job/GzFirstLabReportSyncJob.java index 81d3bd8..9cba2f8 100644 --- a/src/main/java/com/docus/demo/job/GzFirstLabReportSyncJob.java +++ b/src/main/java/com/docus/demo/job/GzFirstLabReportSyncJob.java @@ -60,7 +60,7 @@ public class GzFirstLabReportSyncJob { if (CollUtil.isNotEmpty(tbasicList)) { for (Tbasic tbasic : tbasicList) { - LAB_SYNC_EXECUTOR.execute(() -> iWebService.syncInspection(tbasic, startDateTime, endDateTime)); + LAB_SYNC_EXECUTOR.execute(() -> iWebService.syncVerifyInspection(tbasic, startDateTime, endDateTime)); } } diff --git a/src/main/java/com/docus/demo/mapper/mysql/ScanAssortMapper.java b/src/main/java/com/docus/demo/mapper/mysql/ScanAssortMapper.java index eb8c8e1..de1f7c2 100644 --- a/src/main/java/com/docus/demo/mapper/mysql/ScanAssortMapper.java +++ b/src/main/java/com/docus/demo/mapper/mysql/ScanAssortMapper.java @@ -14,7 +14,7 @@ public interface ScanAssortMapper { List getListByPid(@Param("pid") String pid); - List getListByAssortId(@Param("assortId") String assortId,@Param("pid") String pid); + List getJyListByAssortId(@Param("assortId") String assortId, @Param("pid") String pid); int insertBatch(@Param("list") List scanAssortList); diff --git a/src/main/java/com/docus/demo/mapper/sqlserverlis/LisReportMapper.java b/src/main/java/com/docus/demo/mapper/sqlserverlis/LisReportMapper.java new file mode 100644 index 0000000..0693ece --- /dev/null +++ b/src/main/java/com/docus/demo/mapper/sqlserverlis/LisReportMapper.java @@ -0,0 +1,16 @@ +package com.docus.demo.mapper.sqlserverlis; + +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +/** + * + * @author YongBin Wen + * @date 2025/12/12 星期五 8:48 + */ +public interface LisReportMapper { + + List> query(@Param("inpatientNo") String inpatientNo, @Param("admissTimes") String admissTimes); +} diff --git a/src/main/java/com/docus/demo/service/SyncBasicDataImpl.java b/src/main/java/com/docus/demo/service/SyncBasicDataImpl.java index 8ac573e..590bf4c 100644 --- a/src/main/java/com/docus/demo/service/SyncBasicDataImpl.java +++ b/src/main/java/com/docus/demo/service/SyncBasicDataImpl.java @@ -214,7 +214,7 @@ public class SyncBasicDataImpl implements ISyncBasicDataService { new File(dir).mkdirs(); } - String fileName= DateUtil.formatDateTime(new Date())+ UUID.randomUUID()+ ".xlsx"; + String fileName= DateUtil.format(new Date(),"yyyyMMddHHmmss")+ UUID.randomUUID()+ ".xlsx"; String filePath=dir+File.separator+fileName; File file = new File(filePath); ExcelWriter excelWriter = EasyExcel.write(file, ExportDto.class).build(); diff --git a/src/main/java/com/docus/demo/service/WebServiceImpl.java b/src/main/java/com/docus/demo/service/WebServiceImpl.java index aba1f9e..06cfa2d 100644 --- a/src/main/java/com/docus/demo/service/WebServiceImpl.java +++ b/src/main/java/com/docus/demo/service/WebServiceImpl.java @@ -14,9 +14,11 @@ import com.docus.demo.entity.Tbasic; import com.docus.demo.facade.IWebService; import com.docus.demo.mapper.mysql.BasicMapper; import com.docus.demo.mapper.mysql.ScanAssortMapper; +import com.docus.demo.mapper.sqlserverlis.LisReportMapper; import com.docus.demo.utils.PDFFileUtils; import com.docus.demo.utils.SnowflakeIdWorker; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.annotation.Resource; @@ -41,6 +43,8 @@ public class WebServiceImpl implements IWebService { private BasicMapper basicMapper; @Resource private ScanAssortMapper scanAssortMapper; + @Autowired + private LisReportMapper lisReportMapper; private SnowflakeIdWorker snowflakeIdWorker = new SnowflakeIdWorker(0, 0); @@ -102,6 +106,20 @@ public class WebServiceImpl implements IWebService { } } + @Override + public void syncVerifyInspection(Tbasic tbasic, String startDate, String endDate) { + List> reportList = lisReportMapper.query(tbasic.getInpatientNo(), tbasic.getAdmissTimes().toString()); + int reportSize = reportList.size(); + log.info("广州市一,病案号 {} 住院次数 {} exec sp_BingAnCheckReport2 查询到数据 {} 条!", tbasic.getInpatientNo(), tbasic.getAdmissTimes().toString(),reportSize); + if(reportSize == 0){ + return; + } + + List jyList = scanAssortMapper.getJyListByAssortId("A5A7AA6796D1715A2F1E35699C706C84", tbasic.getPatientId()); + if(jyList.size() < reportSize){ + syncInspection(tbasic,startDate,endDate,false); + } + } @Override public void syncInspection(Tbasic tbasic, String startDate, String endDate) { @@ -130,7 +148,7 @@ public class WebServiceImpl implements IWebService { String patientId = tbasic.getPatientId(); log.info("同步检验报告,病案号:{},住院次数:{}", inpatientNo, times); - List oldScanAssortList = scanAssortMapper.getListByAssortId("A5A7AA6796D1715A2F1E35699C706C84", patientId); + List oldScanAssortList = scanAssortMapper.getJyListByAssortId("A5A7AA6796D1715A2F1E35699C706C84", patientId); int size = oldScanAssortList.size(); if (skip && size > 0) { log.info("同步检验报告跳过同步,病案号:{},住院次数:{} 已经存在 {} 份检验报告", inpatientNo, times, size); diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 1451d73..24a9349 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -96,7 +96,28 @@ spring: test-on-borrow: false test-on-return: false validation-query: select 1 - + #LIS检验数据库 + sqlserverlis: + driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver + username: jiashi + password: }T:CyW?Q + url: jdbc:sqlserver://192.168.8.128:1433;DatabaseName=clab_gzsy_report + # 初始化配置 + initial-size: 3 + # 最小连接数 + min-idle: 3 + # 最大连接数 + max-active: 15 + # 获取连接超时时间 + max-wait: 5000 + # 连接有效性检测时间 + time-between-eviction-runs-millis: 90000 + # 最大空闲时间 + min-evictable-idle-time-millis: 1800000 + test-while-idle: true + test-on-borrow: false + test-on-return: false + validation-query: select 1 #文件保存路径 savePath: F:\jiashi\lianzhong diff --git a/src/main/resources/mapper/mysql/ScanAssortMapper.xml b/src/main/resources/mapper/mysql/ScanAssortMapper.xml index c3ee6f4..bbe7102 100644 --- a/src/main/resources/mapper/mysql/ScanAssortMapper.xml +++ b/src/main/resources/mapper/mysql/ScanAssortMapper.xml @@ -87,7 +87,7 @@ FROM docus_archivefile.t_scan_assort WHERE patient_id = #{pid} - SELECT id, patient_id, assort_id, diff --git a/src/main/resources/mapper/sqlserverlis/LisReportMapper.xml b/src/main/resources/mapper/sqlserverlis/LisReportMapper.xml new file mode 100644 index 0000000..7481dfe --- /dev/null +++ b/src/main/resources/mapper/sqlserverlis/LisReportMapper.xml @@ -0,0 +1,11 @@ + + + + + + + \ No newline at end of file