From f864ece65808869bc0faddbf3ee4d9a5d93d77cd Mon Sep 17 00:00:00 2001 From: linjj <850658129@qq.com> Date: Mon, 9 Jun 2025 11:22:12 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96=E6=A8=A1=E6=9D=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 53 +++++ pom.xml | 130 +++++++++++ .../java/com/example/MainApplication.java | 16 ++ .../com/example/config/DataSource1Config.java | 58 +++++ .../com/example/config/DataSource2Config.java | 45 ++++ .../example/config/Knife4jConfiguration.java | 57 +++++ .../com/example/config/MyBatisPlusConfig.java | 34 +++ .../controller/MedRecordController.java | 34 +++ .../com/example/db1/dao/TscanAssortDao.java | 27 +++ .../com/example/db2/dao/LianZhongDao.java | 51 +++++ .../java/com/example/dto/TscanAssortDto.java | 27 +++ .../com/example/service/CollectService.java | 17 ++ .../serviceImpl/CollectServiceImpl.java | 173 +++++++++++++++ src/main/java/com/example/text/test.java | 43 ++++ .../com/example/util/BusinessException.java | 26 +++ .../java/com/example/util/CommonResult.java | 152 +++++++++++++ .../java/com/example/util/ExceptionCode.java | 26 +++ .../java/com/example/util/IErrorCode.java | 12 + .../java/com/example/util/JsonResult.java | 51 +++++ src/main/java/com/example/util/Msg.java | 71 ++++++ .../java/com/example/util/MyDateUtil.java | 208 ++++++++++++++++++ .../java/com/example/util/ResultCode.java | 42 ++++ src/main/java/com/example/vo/CardInfoVo.java | 49 +++++ src/main/java/com/example/vo/Picture.java | 21 ++ src/main/resources/application.properties | 16 ++ src/main/resources/application.yml | 4 + src/main/resources/logback.xml | 42 ++++ .../mapper/db1/TscanAssortMapper.xml | 17 ++ .../resources/mapper/db2/LianZhongMapper.xml | 27 +++ 29 files changed, 1529 insertions(+) create mode 100644 README.md create mode 100644 pom.xml create mode 100644 src/main/java/com/example/MainApplication.java create mode 100644 src/main/java/com/example/config/DataSource1Config.java create mode 100644 src/main/java/com/example/config/DataSource2Config.java create mode 100644 src/main/java/com/example/config/Knife4jConfiguration.java create mode 100644 src/main/java/com/example/config/MyBatisPlusConfig.java create mode 100644 src/main/java/com/example/controller/MedRecordController.java create mode 100644 src/main/java/com/example/db1/dao/TscanAssortDao.java create mode 100644 src/main/java/com/example/db2/dao/LianZhongDao.java create mode 100644 src/main/java/com/example/dto/TscanAssortDto.java create mode 100644 src/main/java/com/example/service/CollectService.java create mode 100644 src/main/java/com/example/service/serviceImpl/CollectServiceImpl.java create mode 100644 src/main/java/com/example/text/test.java create mode 100644 src/main/java/com/example/util/BusinessException.java create mode 100644 src/main/java/com/example/util/CommonResult.java create mode 100644 src/main/java/com/example/util/ExceptionCode.java create mode 100644 src/main/java/com/example/util/IErrorCode.java create mode 100644 src/main/java/com/example/util/JsonResult.java create mode 100644 src/main/java/com/example/util/Msg.java create mode 100644 src/main/java/com/example/util/MyDateUtil.java create mode 100644 src/main/java/com/example/util/ResultCode.java create mode 100644 src/main/java/com/example/vo/CardInfoVo.java create mode 100644 src/main/java/com/example/vo/Picture.java create mode 100644 src/main/resources/application.properties create mode 100644 src/main/resources/application.yml create mode 100644 src/main/resources/logback.xml create mode 100644 src/main/resources/mapper/db1/TscanAssortMapper.xml create mode 100644 src/main/resources/mapper/db2/LianZhongMapper.xml diff --git a/README.md b/README.md new file mode 100644 index 0000000..3294d67 --- /dev/null +++ b/README.md @@ -0,0 +1,53 @@ +# springboot-mybatis2datasource-demo +[![996.icu](https://img.shields.io/badge/link-996.icu-red.svg)](https://996.icu) + +Spring Boot整合MyBatis双数据源Demo +该程序使用方法 +1.copy一个联众的原基础表,取名 t_card_info_upload,加了个状态字段state。 +0代表要同步的基础数据,程序每次取1000个,修改状态为1,代表正在同步的,同步成功的状态改为2,失败的改为3,没有图片数据的,图片表没有数据的 状态改为5。 +SELECT * into t_card_info_upload from T_card_info ; + +ALTER TABLE [dbo].[t_card_info_upload] ADD [state] tinyint NULL; + + +CREATE NONCLUSTERED INDEX [index_state] +ON [dbo].[t_card_info_upload] ( + [state] +) + + +CREATE NONCLUSTERED INDEX [index_outdate] +ON [dbo].[t_card_info_upload] ( + [outdate] +) +2.设置一个目录用来存放图片,比如 每个患者那个id 当次级目录,最后把基础信息和文件信息传这个接口。 +3.将Debug程序放在本目录下 +4.不需要在代码中插入基本信息,将t_card_info_upload表直接导入到我们的基础信息中,省去add的步骤 +5.使用UPDATE t_card_info_upload +SET t_card_info_upload.state = 5 +FROM t_card_info_upload +LEFT JOIN T_picture ON t_card_info_upload.id = T_picture.FileId +WHERE T_picture.FileId IS NULL; +先将没有数据的基本信息状态改为2减少检索内存 +6.将联众分段表数据导入我们的分段表中 +7.导入基础数据查询sql +SELECT + id, + patno, + patname, + outdate, + outdeptname, + patsex, + indate, + indeptname, + fource, + 'Z:\pic\' + CAST(id AS VARCHAR(50)) AS path +FROM + t_card_info_upload +WHERE + state !=5 + + + +8.使用sqlserver自带的导入工具将对应的文件表导入到我们文件表中,这是导入sql +Select a.FileId as patient_id,'lz'+PicKind as assort_id,a.PicName as scan_pagem,'lz' as source_flag from dbo.T_picture a left join t_card_info_upload t on t.id=a.FileId AND t.state=0 \ No newline at end of file diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..82ce668 --- /dev/null +++ b/pom.xml @@ -0,0 +1,130 @@ + + + 4.0.0 + + org.springframework.boot + spring-boot-starter-parent + 2.1.1.RELEASE + + com.example + LianzhongCollect + 0.0.1-SNAPSHOT + jar + springbootDemo + springbootDemo + + 1.8 + + + + + org.apache.commons + commons-lang3 + 3.12.0 + + + + org.apache.httpcomponents + httpclient + 4.5.13 + + + + com.github.xiaoymin + knife4j-spring-boot-starter + 2.0.9 + + + + com.oracle.database.jdbc + ojdbc6 + 11.2.0.4 + + + + org.apache.pdfbox + pdfbox + 2.0.27 + + + org.apache.commons + commons-collections4 + 4.4 + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-test + test + + + org.springframework.plugin + spring-plugin-core + 2.0.0.RELEASE + + + org.springframework.plugin + spring-plugin-metadata + 2.0.0.RELEASE + + + com.baomidou + mybatis-plus-boot-starter + 3.3.1 + + + org.springframework.boot + spring-boot-starter-jdbc + + + org.projectlombok + lombok + true + + + org.springframework.boot + spring-boot-starter-quartz + + + + com.microsoft.sqlserver + sqljdbc4 + 4.0 + + + junit + junit + + + + com.alibaba + fastjson + 2.0.11 + + + org.springframework + spring-test + + + org.springframework.boot + spring-boot-test + + + commons-io + commons-io + 2.6 + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + diff --git a/src/main/java/com/example/MainApplication.java b/src/main/java/com/example/MainApplication.java new file mode 100644 index 0000000..244a6b2 --- /dev/null +++ b/src/main/java/com/example/MainApplication.java @@ -0,0 +1,16 @@ +package com.example; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +/** + * @author potter.fu + * @date 2018-12-07 15:40 + */ +@SpringBootApplication +public class MainApplication { + public static void main(String[] args) { + + SpringApplication.run(MainApplication.class, args); + } +} diff --git a/src/main/java/com/example/config/DataSource1Config.java b/src/main/java/com/example/config/DataSource1Config.java new file mode 100644 index 0000000..28eee31 --- /dev/null +++ b/src/main/java/com/example/config/DataSource1Config.java @@ -0,0 +1,58 @@ +package com.example.config; + +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.SqlSessionTemplate; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.boot.jdbc.DataSourceBuilder; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.jdbc.datasource.DataSourceTransactionManager; + +import javax.sql.DataSource; + + +@Configuration +@MapperScan(basePackages = "com.example.db1.dao", sqlSessionTemplateRef = "db1SqlSessionTemplate") +public class DataSource1Config { + /** + * 生成数据源. @Primary 注解声明为默认数据源 + */ + @Bean(name = "db1DataSource") + @ConfigurationProperties(prefix = "spring.datasource.hikari.db1") + @Primary + public DataSource testDataSource() { + return DataSourceBuilder.create().build(); + } + + /** + * 创建 SqlSessionFactory + */ + @Bean(name = "db1SqlSessionFactory") + @Primary + public SqlSessionFactory testSqlSessionFactory(@Qualifier("db1DataSource") DataSource dataSource) throws Exception { + SqlSessionFactoryBean bean = new SqlSessionFactoryBean(); + bean.setDataSource(dataSource); + bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/db1/*.xml")); + return bean.getObject(); + } + + /** + * 配置事务管理 + */ + @Bean(name = "db1TransactionManager") + @Primary + public DataSourceTransactionManager testTransactionManager(@Qualifier("db1DataSource") DataSource dataSource) { + return new DataSourceTransactionManager(dataSource); + } + + @Bean(name = "db1SqlSessionTemplate") + @Primary + public SqlSessionTemplate testSqlSessionTemplate(@Qualifier("db1SqlSessionFactory") SqlSessionFactory sqlSessionFactory) { + return new SqlSessionTemplate(sqlSessionFactory); + } +} diff --git a/src/main/java/com/example/config/DataSource2Config.java b/src/main/java/com/example/config/DataSource2Config.java new file mode 100644 index 0000000..5c4120e --- /dev/null +++ b/src/main/java/com/example/config/DataSource2Config.java @@ -0,0 +1,45 @@ +package com.example.config; + +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.SqlSessionTemplate; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.boot.jdbc.DataSourceBuilder; +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 = "com.example.db2.dao", sqlSessionTemplateRef = "db2SqlSessionTemplate") +public class DataSource2Config { + + @Bean(name = "db2DataSource") + @ConfigurationProperties(prefix = "spring.datasource.hikari.db2") + public DataSource testDataSource() { + return DataSourceBuilder.create().build(); + } + + @Bean(name = "db2SqlSessionFactory") + public SqlSessionFactory testSqlSessionFactory(@Qualifier("db2DataSource") DataSource dataSource) throws Exception { + SqlSessionFactoryBean bean = new SqlSessionFactoryBean(); + bean.setDataSource(dataSource); + bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/db2/*.xml")); + return bean.getObject(); + } + + @Bean(name = "db2TransactionManager") + public DataSourceTransactionManager testTransactionManager(@Qualifier("db2DataSource") DataSource dataSource) { + return new DataSourceTransactionManager(dataSource); + } + + @Bean(name = "db2SqlSessionTemplate") + public SqlSessionTemplate testSqlSessionTemplate(@Qualifier("db2SqlSessionFactory") SqlSessionFactory sqlSessionFactory) { + return new SqlSessionTemplate(sqlSessionFactory); + } +} diff --git a/src/main/java/com/example/config/Knife4jConfiguration.java b/src/main/java/com/example/config/Knife4jConfiguration.java new file mode 100644 index 0000000..5037cb6 --- /dev/null +++ b/src/main/java/com/example/config/Knife4jConfiguration.java @@ -0,0 +1,57 @@ +package com.example.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import springfox.documentation.builders.ApiInfoBuilder; +import springfox.documentation.builders.ParameterBuilder; +import springfox.documentation.builders.PathSelectors; +import springfox.documentation.builders.RequestHandlerSelectors; +import springfox.documentation.schema.ModelRef; +import springfox.documentation.service.Parameter; +import springfox.documentation.spi.DocumentationType; +import springfox.documentation.spring.web.plugins.Docket; +import springfox.documentation.swagger2.annotations.EnableSwagger2WebMvc; + +import java.util.ArrayList; +import java.util.List; + + +@Configuration +@EnableSwagger2WebMvc +public class Knife4jConfiguration { + /** + * 需要配置controller层包名 + */ + String controllerPackagePath = "com.example"; + @Bean(value = "defaultApi2") + public Docket defaultApi2() { + List pars = new ArrayList<>(); + ParameterBuilder tokenPar = new ParameterBuilder(); + tokenPar.name("token") + .description("用户token") + .defaultValue("") + .modelRef(new ModelRef("string")) + .parameterType("header") + .required(false) + .build(); + pars.add(tokenPar.build()); + //添加head参数end + + Docket docket=new Docket(DocumentationType.SWAGGER_2) + .apiInfo(new ApiInfoBuilder() + //.title("swagger-bootstrap-ui-demo RESTful APIs") + .description("# swagger-bootstrap-ui-demo RESTful APIs") + .termsOfServiceUrl("www.codeleader.top") + .version("1.0") + .build()) + .globalOperationParameters(pars) + //分组名称 + .groupName("2.X版本") + .select() + //这里指定Controller扫描包路径 + .apis(RequestHandlerSelectors.basePackage(controllerPackagePath)) + .paths(PathSelectors.any()) + .build(); + return docket; + } +} diff --git a/src/main/java/com/example/config/MyBatisPlusConfig.java b/src/main/java/com/example/config/MyBatisPlusConfig.java new file mode 100644 index 0000000..f437fd4 --- /dev/null +++ b/src/main/java/com/example/config/MyBatisPlusConfig.java @@ -0,0 +1,34 @@ +package com.example.config; + +import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean; +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import javax.sql.DataSource; + +@Configuration +@MapperScan(basePackages = "com.example.mapper.db1", sqlSessionFactoryRef = "sqlSessionFactoryDb1") +@MapperScan(basePackages = "com.example.mapper.db2", sqlSessionFactoryRef = "sqlSessionFactoryDb2") +public class MyBatisPlusConfig { + + @Bean(name = "sqlSessionFactoryDb1") + public SqlSessionFactory sqlSessionFactoryDb1(@Qualifier("db1DataSource") DataSource dataSource) throws Exception { + MybatisSqlSessionFactoryBean factoryBean = new MybatisSqlSessionFactoryBean(); + factoryBean.setDataSource(dataSource); + factoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() + .getResources("classpath:mapper/db1/*.xml")); + return factoryBean.getObject(); + } + + @Bean(name = "sqlSessionFactoryDb2") + public SqlSessionFactory sqlSessionFactoryDb2(@Qualifier("db2DataSource") DataSource dataSource) throws Exception { + MybatisSqlSessionFactoryBean factoryBean = new MybatisSqlSessionFactoryBean(); + factoryBean.setDataSource(dataSource); + factoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() + .getResources("classpath:mapper/db2/*.xml")); + return factoryBean.getObject(); + } +} \ No newline at end of file diff --git a/src/main/java/com/example/controller/MedRecordController.java b/src/main/java/com/example/controller/MedRecordController.java new file mode 100644 index 0000000..3c12e27 --- /dev/null +++ b/src/main/java/com/example/controller/MedRecordController.java @@ -0,0 +1,34 @@ +package com.example.controller; + +import com.example.service.CollectService; +import com.example.util.CommonResult; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +/** + * @ClassName MedRecordController + * @Description 重耗材采集器接口 + * @Author linjj + * @Date 2025/3/25 16:45 + * @Version 1.0 + */ +@RestController +@RequestMapping("/task") +@Api(value = "重耗材任务接口", tags = "重耗材任务对外接口") +@Slf4j +public class MedRecordController { + @Autowired + private CollectService collectService; + + @PostMapping("/getTask") + @ApiOperation("获取任务接口") + @ResponseBody + public CommonResult GetTask() { + collectService.LianZhongConllect(); + return CommonResult.success("1"); + } + +} diff --git a/src/main/java/com/example/db1/dao/TscanAssortDao.java b/src/main/java/com/example/db1/dao/TscanAssortDao.java new file mode 100644 index 0000000..d752da6 --- /dev/null +++ b/src/main/java/com/example/db1/dao/TscanAssortDao.java @@ -0,0 +1,27 @@ +package com.example.db1.dao; + +import com.example.db2.dao.LianZhongDao; +import com.example.dto.TscanAssortDto; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @InterfaceName Tscan_assort + * @Description 文件表接口 + * @Author linjj + * @Date 2025/6/5 10:25 + * @Version 1.0 + */ +@Mapper +public interface TscanAssortDao { + /** + * @description: 批量增加 + * @params: TscanAssortDto + * @return: boolean + * @author linjj + * @date: 2025/6/5 10:28 + */ + boolean addTscanAssortDto(@Param("list") List list); +} diff --git a/src/main/java/com/example/db2/dao/LianZhongDao.java b/src/main/java/com/example/db2/dao/LianZhongDao.java new file mode 100644 index 0000000..e2fe08a --- /dev/null +++ b/src/main/java/com/example/db2/dao/LianZhongDao.java @@ -0,0 +1,51 @@ +package com.example.db2.dao; + +import com.example.vo.CardInfoVo; +import com.example.vo.Picture; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @InterfaceName LianZhongDao + * @Description 联众dao层 + * @Author linjj + * @Date 2025/6/4 13:15 + * @Version 1.0 + */ +@Mapper +public interface LianZhongDao { + /** + * @description: 查询有多少条为采集记录 + * @params: state + * @return: Integer + * @author linjj + * @date: 2025/6/4 13:17 + */ + Integer getCollectNum(Integer state); + /** + * @description: 根据范围查询1000条记录 + * @params: start end + * @return: CardInfoVo + * @author linjj + * @date: 2025/6/4 14:55 + */ + ListgetCardInfoVo(@Param("start") Integer start, @Param("end") Integer end); + /** + * @description: 跟换患者id查询患者信息 + * @params: fileid + * @return: Picture + * @author linjj + * @date: 2025/6/4 15:25 + */ + ListgetPicture(String fileid); + /** + * @description: 修改病例状态 + * @params: + * @return: + * @author linjj + * @date: 2025/6/5 10:32 + */ + Boolean updateState(@Param("id") String id,@Param("state") Integer state); +} diff --git a/src/main/java/com/example/dto/TscanAssortDto.java b/src/main/java/com/example/dto/TscanAssortDto.java new file mode 100644 index 0000000..0f984c9 --- /dev/null +++ b/src/main/java/com/example/dto/TscanAssortDto.java @@ -0,0 +1,27 @@ +package com.example.dto; + +import lombok.Data; + +/** + * @ClassName TscanAssort + * @Description 文件表实体类 + * @Author linjj + * @Date 2025/6/5 10:12 + * @Version 1.0 + */ +@Data +public class TscanAssortDto { + //病案id + private String patientId; + //分段id + private String assortId; + //文件名 + private String scanPage; + //来源 + private String source; + //是否删除0否 + private String isDel; + //来源标识 + private String sourceFlag; + +} diff --git a/src/main/java/com/example/service/CollectService.java b/src/main/java/com/example/service/CollectService.java new file mode 100644 index 0000000..a175cd1 --- /dev/null +++ b/src/main/java/com/example/service/CollectService.java @@ -0,0 +1,17 @@ +package com.example.service; + +/** + * @InterfaceName CollectService + * @Description 同步联众数据接口 + * @Author linjj + * @Date 2025/6/4 13:11 + * @Version 1.0 + */ +public interface CollectService { + /** + * @description: 同步联众数据 + * @author linjj + * @date: 2025/6/4 13:13 + */ + void LianZhongConllect(); +} diff --git a/src/main/java/com/example/service/serviceImpl/CollectServiceImpl.java b/src/main/java/com/example/service/serviceImpl/CollectServiceImpl.java new file mode 100644 index 0000000..4186915 --- /dev/null +++ b/src/main/java/com/example/service/serviceImpl/CollectServiceImpl.java @@ -0,0 +1,173 @@ +package com.example.service.serviceImpl; + +import com.example.db1.dao.TscanAssortDao; +import com.example.db2.dao.LianZhongDao; +import com.example.service.CollectService; +import com.example.vo.CardInfoVo; +import com.example.vo.Picture; +import com.example.dto.TscanAssortDto; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; +import org.springframework.util.ObjectUtils; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicInteger; + +/** + * @ClassName CollectServiceImpl + * @Description 同步联众数据 + * @Author linjj + * @Date 2025/6/4 13:12 + * @Version 1.0 + */ +@Service +@Slf4j +public class CollectServiceImpl implements CollectService { + @Value("${savePath}") + private String savePath; + @Autowired + private LianZhongDao lianZhongDao; + @Autowired + private TscanAssortDao tscanAssortDao; + private final ExecutorService executorService = Executors.newFixedThreadPool(2); // 创建一个包含两个线程的线程池 + + private final String uniUrl = "http://10.1.1.128"; + + @Override + public void LianZhongConllect() { + //查询所有联众需要同步数据,未开始状态为0,正在同步为1,完成为2,失败为3,不存在文件为5 + Integer collectNum = lianZhongDao.getCollectNum(5); + log.info("需要同步: " + collectNum + "条数据"); + + // 计算需要轮询的次数 + int totalLoops = (collectNum + 999) / 1000; // 向上取整 + + // 使用AtomicInteger来记录当前任务的编号 + AtomicInteger currentTask = new AtomicInteger(0); + // 使用CountDownLatch来控制任务的执行顺序 + CountDownLatch latch = new CountDownLatch(1); + + // 提交所有任务到线程池 + for (int i = 0; i < totalLoops; i++) { + final int taskNum = i; + executorService.submit(() -> { + try { + // 等待前一个任务完成 + latch.await(); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); // 重新设置中断状态 + } + // 计算当前任务处理的数据范围 + int start = taskNum * 1000; + int end = Math.min(start + 999, collectNum); // 确保不超过总条数 + //执行任务 + conllect(taskNum, start, end); + // 通知下一个任务可以开始 + latch.countDown(); + }); + + // 每两个任务提交后,释放一个计数器,允许下一个任务开始 + if (currentTask.incrementAndGet() % 2 == 0) { + latch.countDown(); + } + } + + // 等待所有任务完成 + try { + executorService.shutdown(); + if (!executorService.awaitTermination(60, TimeUnit.SECONDS)) { + executorService.shutdownNow(); + } + } catch (InterruptedException e) { + executorService.shutdownNow(); + Thread.currentThread().interrupt(); + } + } + + /** + * @description: 同步逻辑 + * @author linjj + * @date: 2025/6/4 13:33 + */ + private void conllect(int taskNum, int start, int end) { + log.info("轮询第 " + (taskNum + 1) + " 次,处理数据范围: " + start + " 到 " + end); + //根据start跟end查询记录保证数据不会重复 + List cardInfoVo = lianZhongDao.getCardInfoVo(start, end); + //每个患者进行轮询 + for (CardInfoVo list : cardInfoVo) { + try { +// //用于存储数码影像数据 +// ArrayList tscanAssortDtos = new ArrayList<>(); + log.info("当前同步患者id为:" + list.getId()); + //查询患者当前文件信息 + List pictures = lianZhongDao.getPicture(list.getId()); + if (ObjectUtils.isEmpty(pictures)) { + log.info("当前患者没有文件:" + list.getId()); + continue; + } + //组织cmd命令 + for (Picture picture : pictures) { + try { + //保存目录 + String dir = savePath + File.separatorChar + list.getId(); + //保存地址 + String savePath = dir + File.separatorChar + picture.getPicname(); + // 创建File对象 + File directory = new File(dir); + // 判断目录是否存在 + if (!directory.exists()) { + // 目录不存在,创建目录 + boolean created = directory.mkdirs(); + if (created) { + log.info("目录创建成功:" + dir); + } else { + log.info("目录创建失败:" + dir); + } + } + //组织cmd命令(D:\js\Debug\Debug\lianzhong.exe为路径,10.1.1.128为联众弟子) + String cmd = "D:\\js\\Debug\\Debug\\lianzhong.exe 003 10.1.1.128 " + list.getId() + " " + picture.getPicid() + " " + list.getPatno() + " " + list.getOutdateStr() + " " + picture.getPicname() + " " + savePath + " " + uniUrl + " " + picture.getRotatedegree(); + log.info("CMD:" + cmd); + Process process = Runtime.getRuntime().exec(cmd);//执行命令生成cube + process.waitFor(); + } catch (Exception e) { + log.info("患者同步失败:" + list.getId()); + log.error(e.getMessage(), e); + } +// //完成后保存文件表 +// TscanAssortDto tscanAssortDto =new TscanAssortDto(); +// tscanAssortDto.setPatientId(list.getId()); +// tscanAssortDto.setAssortId("lz"+picture.getPickind()); +// tscanAssortDto.setScanPage(picture.getPicname()); +// tscanAssortDto.setSource("1"); +// tscanAssortDto.setIsDel("0"); +// tscanAssortDto.setSourceFlag("lz"); +// tscanAssortDtos.add(tscanAssortDto); + } +// //保存文件,根据返修改改状态成功2失败3 +// if (tscanAssortDao.addTscanAssortDto(tscanAssortDtos)){ +// lianZhongDao.updateState(list.getId(),2); +// log.info("患者同步完成:"+list.getId()); +// }else { +// lianZhongDao.updateState(list.getId(),3); +// log.info("患者同步失败:"+list.getId()); +// } + + } catch (Exception e) { + lianZhongDao.updateState(list.getId(), 3); + log.info("患者同步失败:" + list.getId()); + log.error(e.getMessage(), e); + continue; + } + lianZhongDao.updateState(list.getId(), 2); + log.info("患者同步完成:" + list.getId()); + } + } +} diff --git a/src/main/java/com/example/text/test.java b/src/main/java/com/example/text/test.java new file mode 100644 index 0000000..dc6fea7 --- /dev/null +++ b/src/main/java/com/example/text/test.java @@ -0,0 +1,43 @@ +package com.example.text; + +import com.example.MainApplication; + +import com.example.service.CollectService; +import lombok.extern.slf4j.Slf4j; +import org.junit.Test; +import org.junit.runner.RunWith; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; + + + +/** + * @ClassName test + * @Description 测试类 + * @Author linjj + * @Date 2024/1/18 9:54 + * @Version 1.0 + */ +@SpringBootTest(classes = MainApplication.class) +@RunWith(SpringRunner.class) +@Slf4j +public class test { + + @Value("${savePath}") + private String savePath; + + private final static Logger logger = LoggerFactory.getLogger(test.class); + + @Autowired + private CollectService collectService; + + @Test + public void testDemo() { + collectService.LianZhongConllect(); + } +} diff --git a/src/main/java/com/example/util/BusinessException.java b/src/main/java/com/example/util/BusinessException.java new file mode 100644 index 0000000..b5dc39e --- /dev/null +++ b/src/main/java/com/example/util/BusinessException.java @@ -0,0 +1,26 @@ +package com.example.util; + + + +/** + * @description: 自定义的异常类 + * @author: ChenJ + * @date: 2022/5/9 17:29 + * @param: + * @return: + **/ +public class BusinessException extends Exception { + /** + * 枚举类型,内含状态码code和信息msg + */ + private final ExceptionCode exceptionCode; + + public ExceptionCode getExceptionCode() { + return exceptionCode; + } + + public BusinessException(ExceptionCode exceptionCode) { + super(exceptionCode.getMessage()); + this.exceptionCode = exceptionCode; + } +} diff --git a/src/main/java/com/example/util/CommonResult.java b/src/main/java/com/example/util/CommonResult.java new file mode 100644 index 0000000..c1cb0aa --- /dev/null +++ b/src/main/java/com/example/util/CommonResult.java @@ -0,0 +1,152 @@ +package com.example.util; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * + * @author docus + * @date 2020/3/28 16:23 + */ +@Data +@ApiModel("响应") +@AllArgsConstructor +@NoArgsConstructor +public class CommonResult { + @ApiModelProperty("响应码") + private Integer code; + @ApiModelProperty("响应消息") + private String msg; + @ApiModelProperty("响应实体") + private T data; + + public CommonResult(Integer code, String msg) { + this.code = code; + this.msg = msg; + } + + /** + * 成功返回结果 + * + * @param data 获取的数据 + * @param + * @return + */ + public static CommonResult success(T data) { + return new CommonResult(ResultCode.SUCCESS.getCode(), ResultCode.SUCCESS.getMessage(), data); + } + + /** + * 成功返回结果 + * + * @param data 获取的数据 + * @param message 提示信息 + * @param + * @return + */ + public static CommonResult success(T data, String message) { + return new CommonResult(ResultCode.SUCCESS.getCode(), message, data); + } + + /** + * 失败返回结果 + * + * @param errorCode 错误码 + * @param + * @return + */ + public static CommonResult failed(IErrorCode errorCode) { + return new CommonResult(errorCode.getCode(), errorCode.getMessage(), null); + } + + /** + * 失败返回结果 + * + * @param errorCode 错误码 + * @param message 提示信息 + * @param + * @return + */ + public static CommonResult failed(IErrorCode errorCode, String message) { + return new CommonResult(errorCode.getCode(), message, null); + } + + /** + * 失败返回结果 + * + * @param message 提示信息 + * @param + * @return + */ + public static CommonResult failed(String message) { + return new CommonResult(ResultCode.FAILED.getCode(), message, null); + } + + + /** + * 失败返回结果 + * + * @param + * @return + */ + public static CommonResult failed() { + return failed(ResultCode.FAILED); + } + + /** + * 参数验证失败返回结果 + * + * @param + * @return + */ + public static CommonResult validateFailed() { + return failed(ResultCode.VALIDATE_FAILED); + } + + /** + * 提示信息 + * + * @param message 提示信息 + * @param + * @return + */ + public static CommonResult validateFailed(String message) { + return new CommonResult(ResultCode.VALIDATE_FAILED.getCode(), message, null); + } + + /** + * 未登录返回结果 + * + * @param data 获取的数据 + * @param + * @return + */ + public static CommonResult unauthorized(T data) { + return new CommonResult(ResultCode.UNAUTHORIZED.getCode(), ResultCode.UNAUTHORIZED.getMessage(), data); + } + + /** + * 重防及重复请求 + * + * @param data 获取的数据 + * @param + * @return + */ + public static CommonResult preventreplay(T data) { + return new CommonResult(ResultCode.PREVENT_REPLAY.getCode(), ResultCode.PREVENT_REPLAY.getMessage(), data); + } + + /** + * 未授权返回结果 + * + * @param data 获取的数据 + * @param + * @return + */ + public static CommonResult forbidden(T data) { + return new CommonResult(ResultCode.FORBIDDEN.getCode(), ResultCode.FORBIDDEN.getMessage(), data); + } +} diff --git a/src/main/java/com/example/util/ExceptionCode.java b/src/main/java/com/example/util/ExceptionCode.java new file mode 100644 index 0000000..343a4ab --- /dev/null +++ b/src/main/java/com/example/util/ExceptionCode.java @@ -0,0 +1,26 @@ +package com.example.util; + + +public enum ExceptionCode { + /** + * 服务器开小差了,请稍后再试 + */ + WRONG_PARAMS("参数不对", 1001); + + + private final String message; + private final Integer code; + + ExceptionCode(String message, int code) { + this.message = message; + this.code = code; + } + + public String getMessage() { + return message; + } + + public Integer getCode() { + return code; + } +} diff --git a/src/main/java/com/example/util/IErrorCode.java b/src/main/java/com/example/util/IErrorCode.java new file mode 100644 index 0000000..62543f7 --- /dev/null +++ b/src/main/java/com/example/util/IErrorCode.java @@ -0,0 +1,12 @@ +package com.example.util; + +/** + * @Description 封装API的错误码 + * @Author JacksonTu + * @Date 2020/3/28 16:26 + */ +public interface IErrorCode { + Integer getCode(); + + String getMessage(); +} diff --git a/src/main/java/com/example/util/JsonResult.java b/src/main/java/com/example/util/JsonResult.java new file mode 100644 index 0000000..2f1223b --- /dev/null +++ b/src/main/java/com/example/util/JsonResult.java @@ -0,0 +1,51 @@ +package com.example.util; + +import java.io.Serializable; +import java.util.HashMap; +import java.util.Map; + +/** + * 这是一个给fastJSON/jackson准备的一个对象 + */ +public class JsonResult implements Serializable { + private Map dataMap = new HashMap<>(3); + + public JsonResult() { + } + + public String getCode() { + return dataMap.get("code").toString(); + } + + public void setCode(String code) { + this.dataMap.put("code", code); + } + + public String getMsg() { + return dataMap.get("msg").toString(); + } + + public void setMsg(String msg) { + this.dataMap.put("msg", msg); + } + + public Object getData() { + return dataMap.get("data"); + } + + public void setData(Object data) { + this.dataMap.put("data", data); + } + + public Map getDataMap() { + return dataMap; + } + + public void setDataMap(Map dataMap) { + this.dataMap = dataMap; + } + + public void put(String name, Object value) { + this.dataMap.put(name, value); + } +} diff --git a/src/main/java/com/example/util/Msg.java b/src/main/java/com/example/util/Msg.java new file mode 100644 index 0000000..6f898fc --- /dev/null +++ b/src/main/java/com/example/util/Msg.java @@ -0,0 +1,71 @@ +/** + * + */ +package com.example.util; + +import java.util.HashMap; +import java.util.Map; + +/** + *

Title:Msg

+ *

Description:common return class

+ *

Company:

+ * @author hu + * @date + */ +public class Msg { + //state:100-success 200-fail + private int code; + //提示信息 + private String msg; + //用户要返回给浏览器的数据 + private Map extend=new HashMap(); + + + + public static Msg fail(String msg){ + Msg result=new Msg(); + result.setCode(100); + result.setMsg(msg); + return result; + } + + + public static Msg success(String msg){ + Msg result=new Msg(); + result.setCode(200); + result.setMsg(msg); + return result; + } + + public Msg add(String key, Object value){ + this.getExtend().put(key, value); + return this; + } + + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public String getMsg() { + return msg; + } + + public void setMsg(String msg) { + this.msg = msg; + } + + public Map getExtend() { + return extend; + } + + public void setExtend(Map extend) { + this.extend = extend; + } + +} diff --git a/src/main/java/com/example/util/MyDateUtil.java b/src/main/java/com/example/util/MyDateUtil.java new file mode 100644 index 0000000..ef04f69 --- /dev/null +++ b/src/main/java/com/example/util/MyDateUtil.java @@ -0,0 +1,208 @@ +package com.example.util; + +import lombok.SneakyThrows; + +import java.text.DateFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.Locale; + +public class MyDateUtil { + + //获取之前的年限 + public static String getBeforeAgeYear(int age) { + Calendar calBegin = Calendar.getInstance(); + calBegin.setTime(new Date()); + calBegin.add(Calendar.YEAR, -age); + Date time = calBegin.getTime(); + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + return format.format(time); + } + + + //计算两个日期相差年数 + public static int yearDateDiff(String startDate, Date endDate) { + Calendar calBegin = Calendar.getInstance(); //获取日历实例 + Calendar calEnd = Calendar.getInstance(); + calBegin.setTime(stringTodate(startDate, "yyyy-MM-dd")); //字符串按照指定格式转化为日期 + calEnd.setTime(endDate); + return calEnd.get(Calendar.YEAR) - calBegin.get(Calendar.YEAR); + } + + /** + *    *字符串的日期格式的计算 + */ + @SneakyThrows + public static int daysBetween(String smdate, String bdate) { + SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); + Calendar cal = Calendar.getInstance(); + cal.setTime(sdf.parse(smdate)); + long time1 = cal.getTimeInMillis(); + cal.setTime(sdf.parse(bdate)); + long time2 = cal.getTimeInMillis(); + long between_days = (time2 - time1) / (1000 * 3600 * 24); + + return Integer.parseInt(String.valueOf(between_days)); + } + + + @SneakyThrows + public static int daysBetween(Date smdate, Date bdate) { + Calendar cal = Calendar.getInstance(); + cal.setTime(smdate); + long time1 = cal.getTimeInMillis(); + cal.setTime(bdate); + long time2 = cal.getTimeInMillis(); + long between_days = (time2 - time1) / (1000 * 3600 * 24); + + return Integer.parseInt(String.valueOf(between_days)); + } + + + public static int hoursBetween(Date smdate, Date bdate) { + Calendar cal = Calendar.getInstance(); + cal.setTime(smdate); + long time1 = cal.getTimeInMillis(); + cal.setTime(bdate); + long time2 = cal.getTimeInMillis(); + long between_days = (time2 - time1) / (1000 * 3600); + + return Integer.parseInt(String.valueOf(between_days)); + } + + //字符串按照指定格式转化为日期 + public static Date stringTodate(String dateStr, String formatStr) { + // 如果时间为空则默认当前时间 + Date date = null; + SimpleDateFormat format = new SimpleDateFormat(formatStr); + if (dateStr != null && !dateStr.equals("")) { + String time = ""; + try { + Date dateTwo = format.parse(dateStr); + time = format.format(dateTwo); + date = format.parse(time); + } catch (ParseException e) { + e.printStackTrace(); + } + + } else { + String timeTwo = format.format(new Date()); + try { + date = format.parse(timeTwo); + } catch (ParseException e) { + e.printStackTrace(); + } + } + return date; + } + + @SneakyThrows + public static String getYearAgoAndAfter(int year, int y) { + DateFormat df = new SimpleDateFormat("yyyy"); + Date date = df.parse(String.valueOf(year)); + Calendar instance = Calendar.getInstance(); + instance.setTime(date); + instance.add(Calendar.YEAR, y); + Date time = instance.getTime(); + DateFormat yyyyMMdd = new SimpleDateFormat("yyyyMMdd"); + return yyyyMMdd.format(time); + } + + @SneakyThrows + public static String getyyyyAgoAndAfter(int year, int y) { + DateFormat df = new SimpleDateFormat("yyyy"); + Date date = df.parse(String.valueOf(year)); + Calendar instance = Calendar.getInstance(); + instance.setTime(date); + instance.add(Calendar.YEAR, y); + Date time = instance.getTime(); + return df.format(time); + } + + + @SneakyThrows + public static boolean isTodayTrade(Date currDate, Date tradeDate) { + //判断当前时间是否大于当天21:00 ,如果是是在今天内。 + //判断当前时间是否大于昨天21:00,则不在当天内 + Calendar calendar = Calendar.getInstance(Locale.CHINA); + calendar.setTime(currDate); + calendar.add(Calendar.DAY_OF_YEAR, -1); + DateFormat df = new SimpleDateFormat("yyyy-MM-dd"); + String yyyyMMddYestoday = df.format(calendar.getTime()); + String yes21 = yyyyMMddYestoday + " 21:00:00"; + DateFormat yyyyMMddHHmmss = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Date yes21Date = yyyyMMddHHmmss.parse(yes21); + + + String yyyyMMddToday = df.format(currDate); + String today21 = yyyyMMddToday + " 21:00:00"; + Date toy21Date = yyyyMMddHHmmss.parse(today21); + + + //交易时间小于昨天的21点,一定是昨天开的仓 + if (tradeDate.before(yes21Date)) { + return false; + } + + //交易时间大于昨天的21点。交易时间小于今天的21点。且当前时间小于今天的21点。 + if (tradeDate.after(yes21Date) && tradeDate.before(toy21Date) && currDate.before(toy21Date)) { + return true; + } + + //交易时间大与今天的21点。 + if (tradeDate.after(toy21Date) && currDate.after(toy21Date)) { + return true; + } + + return false; + } + + + public static String dateToString(Date date, String format) { + DateFormat df = new SimpleDateFormat(format); + return df.format(date); + } + + /** + * 前后相等 + * + * @param date + * @param timeStr1 + * @param timeStr2 + * @return + */ + public static boolean dateBetweenTime1AndTime2(Date date, String timeStr1, String timeStr2) { + String formatStr = "HH:mm:ss"; + Date date1 = stringTodate(timeStr1, formatStr); + Date date2 = stringTodate(timeStr2, formatStr); + Date curdate = stringTodate(dateToString(date, formatStr), formatStr); + if ((date1.before(curdate) || date1.equals(curdate)) && (curdate.before(date2) || curdate.equals(date2))) { + return true; + } + return false; + } + + + + public static boolean dateBetweenTime1AndTime3(Date date, String timeStr1, String timeStr2) { + String formatStr = "HH:mm:ss"; + Date date1 = stringTodate(timeStr1, formatStr); + Date date2 = stringTodate(timeStr2, formatStr); + Date curdate = stringTodate(dateToString(date, formatStr), formatStr); + if ((date1.before(curdate) && (curdate.before(date2) || curdate.equals(date2)))) { + return true; + } + return false; + } + + + public static boolean dateBefore(String timeStr1, String timeStr2) { + String formatStr = "HH:mm:ss"; + Date date1 = stringTodate(timeStr1, formatStr); + Date date2 = stringTodate(timeStr2, formatStr); + return date1.before(date2); + } + +} diff --git a/src/main/java/com/example/util/ResultCode.java b/src/main/java/com/example/util/ResultCode.java new file mode 100644 index 0000000..f12a66a --- /dev/null +++ b/src/main/java/com/example/util/ResultCode.java @@ -0,0 +1,42 @@ +package com.example.util; + + +/** + * @Description 枚举一些常用API操作码 + * @Author JacksonTu + * @Date 2020/3/28 16:26 + */ +public enum ResultCode implements IErrorCode { + + SUCCESS(0, "操作成功"), + FAILED(500, "操作失败"), + VALIDATE_FAILED(404, "参数检验失败"), + UNAUTHORIZED(401, "暂未登录或token已经过期"), + FORBIDDEN(403, "没有相关权限"), + PREVENT_REPLAY(405,"重复请求"), + NOT_EXIST(601,"数据不存在"), + NOT_ENABLE(600,"数据未启用"); + + + + + private Integer code; + private String message; + + private ResultCode(Integer code, String message) { + this.code = code; + this.message = message; + } + + @Override + public Integer getCode() { + return code; + } + + @Override + public String getMessage() { + return message; + } + + +} diff --git a/src/main/java/com/example/vo/CardInfoVo.java b/src/main/java/com/example/vo/CardInfoVo.java new file mode 100644 index 0000000..dd9aa96 --- /dev/null +++ b/src/main/java/com/example/vo/CardInfoVo.java @@ -0,0 +1,49 @@ +package com.example.vo; + +import com.example.util.MyDateUtil; +import lombok.Data; + +import java.util.Date; + +/** + * @ClassName CardInfo + * @Description 联众信息表 + * @Author linjj + * @Date 2025/6/4 15:05 + * @Version 1.0 + */ +@Data +public class CardInfoVo { + + + private String id; + //住院号 + private String patno; + //患者姓名 + private String patname; + //出院时间 + private Date outdate; + //出院科室 + private String outdeptname; + //性别 + private String patsex; + //住院时间 + private Date indate; + //住院科室 + private String indeptname; + //同步状态0未开始 2完成 3失败 5缺失 + private Integer state; + + public String getOutdateStr(){ + return MyDateUtil.dateToString(this.outdate,"yyyy-MM-dd"); + } + + public String getOutdateStr2(){ + return MyDateUtil.dateToString(this.outdate,"yyyy-MM-dd HH:mm:ss"); + } + + + public String getIndateStr(){ + return MyDateUtil.dateToString(this.indate,"yyyy-MM-dd HH:mm:ss"); + } +} diff --git a/src/main/java/com/example/vo/Picture.java b/src/main/java/com/example/vo/Picture.java new file mode 100644 index 0000000..2c8da00 --- /dev/null +++ b/src/main/java/com/example/vo/Picture.java @@ -0,0 +1,21 @@ +package com.example.vo; + + +import lombok.Data; + + +@Data +public class Picture { + //文件id + private String picid; + //文件名 + private String picname; + //患者id + private String fileid; + //工具要用的参数 旋转角度 + private Double rotatedegree; + //分段id + private String pickind; + + +} diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties new file mode 100644 index 0000000..e7cf98a --- /dev/null +++ b/src/main/resources/application.properties @@ -0,0 +1,16 @@ +server.port=7998 +# SQL Server +spring.datasource.hikari.db1.jdbc-url=jdbc:sqlserver://10.1.1.147:1433;DatabaseName=csssemrrcord +spring.datasource.hikari.db1.username=sa +spring.datasource.hikari.db1.password=xjgs+docus911 +spring.datasource.hikari.db1.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver + +#SQL Server +spring.datasource.hikari.db2.jdbc-url=jdbc:sqlserver://10.1.1.128:1433;DatabaseName=u_medrecord +spring.datasource.hikari.db2.username=sa +spring.datasource.hikari.db2.password=17931 +spring.datasource.hikari.db2.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver + +# MyBatis-Plus ?? +mybatis-plus.configuration.map-underscore-to-camel=true + diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml new file mode 100644 index 0000000..49179ff --- /dev/null +++ b/src/main/resources/application.yml @@ -0,0 +1,4 @@ +#文件保存路径 +savePath: Z:\pic +#文件保存路径 +collectFlag: 6 diff --git a/src/main/resources/logback.xml b/src/main/resources/logback.xml new file mode 100644 index 0000000..d927b56 --- /dev/null +++ b/src/main/resources/logback.xml @@ -0,0 +1,42 @@ + + + logback + + + + + %d{HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n + + + + + + true + + + LianzhongCollect/%d{yyyy-MM-dd}/%d{yyyy-MM-dd}.log + + + + + %d{yyyy-MM-dd HH:mm:ss} -%msg%n + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/mapper/db1/TscanAssortMapper.xml b/src/main/resources/mapper/db1/TscanAssortMapper.xml new file mode 100644 index 0000000..4c79a8e --- /dev/null +++ b/src/main/resources/mapper/db1/TscanAssortMapper.xml @@ -0,0 +1,17 @@ + + + + + + + + insert into + t_scan_assort(patient_id,assort_id,scan_page,source,is_del,source_flag) + values + + (#{item.patientId},#{item.assortId},#{item.scanPage},#{item.source},#{item.isDel}, + #{item.sourceFlag}) + + + \ No newline at end of file diff --git a/src/main/resources/mapper/db2/LianZhongMapper.xml b/src/main/resources/mapper/db2/LianZhongMapper.xml new file mode 100644 index 0000000..c704d47 --- /dev/null +++ b/src/main/resources/mapper/db2/LianZhongMapper.xml @@ -0,0 +1,27 @@ + + + + + + UPDATE t_card_info_upload SET state=#{state} WHERE id=#{id} + + + + + + + \ No newline at end of file