From 9c24b6e2cf3f79abcf2d0d92d744a4072c51d311 Mon Sep 17 00:00:00 2001 From: linbin <4961397@qq.com> Date: Mon, 5 Aug 2024 17:07:56 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E8=AF=BB=E5=8F=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 40 +++++++- src/main/java/org/example/ReadQinhai.java | 93 ++++++++++++++++++ src/main/java/org/example/Repeat.java | 21 ++++ src/main/java/org/example/{ => drug}/App.java | 4 +- .../example/{ => drug}/EastHiDrugReader.java | 6 +- .../{ => drug}/ProtocolHiDrugReader.java | 7 +- src/main/java/org/example/drug/ReadPdf.java | 81 ++++++++++++++++ .../example/{ => drug}/WestHiDrugReader.java | 6 +- src/main/java/org/example/drug/dto/Drug.java | 87 +++++++++++++++++ .../example/{ => drug}/dto/HiDrugDetail.java | 2 +- .../example/{ => drug}/dto/HiDrugType.java | 2 +- .../java/org/example/zhejiang/HiTrtServ.java | 32 ++++++ .../java/org/example/zhejiang/ReadHunan.java | 93 ++++++++++++++++++ .../org/example/zhejiang/ReadZhejiang.java | 97 +++++++++++++++++++ 14 files changed, 555 insertions(+), 16 deletions(-) create mode 100644 src/main/java/org/example/ReadQinhai.java create mode 100644 src/main/java/org/example/Repeat.java rename src/main/java/org/example/{ => drug}/App.java (97%) rename src/main/java/org/example/{ => drug}/EastHiDrugReader.java (95%) rename src/main/java/org/example/{ => drug}/ProtocolHiDrugReader.java (94%) create mode 100644 src/main/java/org/example/drug/ReadPdf.java rename src/main/java/org/example/{ => drug}/WestHiDrugReader.java (95%) create mode 100644 src/main/java/org/example/drug/dto/Drug.java rename src/main/java/org/example/{ => drug}/dto/HiDrugDetail.java (97%) rename src/main/java/org/example/{ => drug}/dto/HiDrugType.java (95%) create mode 100644 src/main/java/org/example/zhejiang/HiTrtServ.java create mode 100644 src/main/java/org/example/zhejiang/ReadHunan.java create mode 100644 src/main/java/org/example/zhejiang/ReadZhejiang.java diff --git a/pom.xml b/pom.xml index 85aae4b..bea7db4 100644 --- a/pom.xml +++ b/pom.xml @@ -62,6 +62,42 @@ easyexcel 3.3.4 + + javax.xml.bind + jaxb-api + 2.4.0-b180830.0359 + + + com.sun.xml.bind + jaxb-impl + 4.0.1 + + + com.sun.xml.bind + jaxb-core + 4.0.1 + + + javax.activation + activation + 1.1.1 + + + cn.hutool + hutool-all + 5.6.5 + + + + com.itextpdf + pdfa + 7.1.11 + + + e-iceblue + spire.pdf + 10.6.0 + @@ -69,8 +105,8 @@ org.apache.maven.plugins maven-compiler-plugin - 16 - 16 + 21 + 21 diff --git a/src/main/java/org/example/ReadQinhai.java b/src/main/java/org/example/ReadQinhai.java new file mode 100644 index 0000000..e063f3c --- /dev/null +++ b/src/main/java/org/example/ReadQinhai.java @@ -0,0 +1,93 @@ +package org.example; + +import com.jfirer.jsql.SessionFactory; +import com.jfirer.jsql.SessionfactoryConfig; +import com.jfirer.jsql.session.SqlSession; +import com.spire.pdf.PdfDocument; +import com.spire.pdf.utilities.PdfTable; +import com.spire.pdf.utilities.PdfTableExtractor; +import com.zaxxer.hikari.HikariDataSource; +import org.example.zhejiang.HiTrtServ; + +import java.util.LinkedList; +import java.util.List; +import java.util.Queue; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.LinkedTransferQueue; +import java.util.concurrent.atomic.AtomicReferenceArray; + +public class ReadQinhai +{ + public static void main(String[] args) throws InterruptedException + { + ExecutorService executorService = Executors.newVirtualThreadPerTaskExecutor(); + int start = 3; + int num = 41; + CountDownLatch countDownLatch = new CountDownLatch(num - start + 1); + AtomicReferenceArray> array = new AtomicReferenceArray<>(num + 1); + Queue queue = new LinkedTransferQueue<>(); + HiTrtServ lastCodedRecord; + for (int i = start; i <= num; i++) + { + int finalI = i; + executorService.submit(() -> { + PdfDocument pdf = new PdfDocument(); + //加载PDF文档 + pdf.loadFromFile("/Users/linbin/Downloads/2023年医保智能审核新增规则(诊疗项目)-/2023年医保智能审核新增规则(诊疗项目)- " + finalI + ".pdf"); + //创建StringBuilder类的实例 + //创建PdfTableExtractor类的对象 + PdfTableExtractor extractor = new PdfTableExtractor(pdf); + //遍历每一页 + for (int page = 0; page < pdf.getPages().getCount(); page++) + { + //提取页面中的表格存入PdfTable[]数组 + PdfTable[] tableLists = extractor.extractTable(page); + List list = new LinkedList<>(); + if (tableLists != null && tableLists.length > 0) + { + PdfTable table = tableLists[0]; + //获取表格中的行数和列数 + int rowCount = table.getRowCount(); + //遍历表格中的每一个单元格 + for (int row = 1; row < rowCount; row++) + { + Repeat repeat = new Repeat(); + repeat.setACode(table.getText(row, 1).replace("\n", "")); + repeat.setAName(table.getText(row, 2).replace("\n", "")); + repeat.setBCode(table.getText(row, 3).replace("\n", "")); + repeat.setBName(table.getText(row, 4).replace("\n", "")); + repeat.setACode(repeat.getACode().substring(0, repeat.getACode().indexOf("-"))); + repeat.setBCode(repeat.getBCode().substring(0, repeat.getBCode().indexOf("-"))); + if (repeat.getACode().equals(repeat.getBCode()) == false) + { + list.add(repeat); + } + } + } + array.set(finalI, list); + } + countDownLatch.countDown(); + }); + } + countDownLatch.await(); + for (int i = start; i <= num; i++) + { + List hiTrtServs = array.get(i); + queue.addAll(hiTrtServs); + } + SessionfactoryConfig config = new SessionfactoryConfig(); + HikariDataSource dataSource = new HikariDataSource(); + dataSource.setJdbcUrl("jdbc:mysql://yynas.cn:53306/fee_control"); + dataSource.setDriverClassName(com.mysql.cj.jdbc.Driver.class.getName()); + dataSource.setUsername("root"); + dataSource.setPassword("root"); + config.setDataSource(dataSource); + SessionFactory sessionFactory = config.build(); + try (SqlSession session = sessionFactory.openSession()) + { + session.batchInsert(queue, 1000); + } + } +} diff --git a/src/main/java/org/example/Repeat.java b/src/main/java/org/example/Repeat.java new file mode 100644 index 0000000..e2b5c10 --- /dev/null +++ b/src/main/java/org/example/Repeat.java @@ -0,0 +1,21 @@ +package org.example; + +import com.jfirer.jsql.annotation.AutoIncrement; +import com.jfirer.jsql.annotation.Pk; +import com.jfirer.jsql.annotation.TableDef; +import lombok.Data; +import lombok.experimental.Accessors; + +@TableDef("qinhai_repeat") +@Data +@Accessors(chain = true) +public class Repeat +{ + @Pk + @AutoIncrement + private Integer id; + private String aCode; + private String aName; + private String bCode; + private String bName; +} diff --git a/src/main/java/org/example/App.java b/src/main/java/org/example/drug/App.java similarity index 97% rename from src/main/java/org/example/App.java rename to src/main/java/org/example/drug/App.java index d8efc4a..d65c95a 100644 --- a/src/main/java/org/example/App.java +++ b/src/main/java/org/example/drug/App.java @@ -1,4 +1,4 @@ -package org.example; +package org.example.drug; import com.alibaba.excel.EasyExcel; import com.alibaba.excel.ExcelReader; @@ -9,7 +9,7 @@ import com.jfirer.jsql.SessionfactoryConfig; import com.jfirer.jsql.session.SqlSession; import com.mysql.cj.jdbc.Driver; import com.zaxxer.hikari.HikariDataSource; -import org.example.dto.HiDrugType; +import org.example.drug.dto.HiDrugType; import java.util.ArrayList; import java.util.HashMap; diff --git a/src/main/java/org/example/EastHiDrugReader.java b/src/main/java/org/example/drug/EastHiDrugReader.java similarity index 95% rename from src/main/java/org/example/EastHiDrugReader.java rename to src/main/java/org/example/drug/EastHiDrugReader.java index 9cffe72..0b01535 100644 --- a/src/main/java/org/example/EastHiDrugReader.java +++ b/src/main/java/org/example/drug/EastHiDrugReader.java @@ -1,4 +1,4 @@ -package org.example; +package org.example.drug; import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.event.AnalysisEventListener; @@ -8,8 +8,8 @@ import com.jfirer.jsql.session.SqlSession; import lombok.Data; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; -import org.example.dto.HiDrugDetail; -import org.example.dto.HiDrugType; +import org.example.drug.dto.HiDrugDetail; +import org.example.drug.dto.HiDrugType; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/org/example/ProtocolHiDrugReader.java b/src/main/java/org/example/drug/ProtocolHiDrugReader.java similarity index 94% rename from src/main/java/org/example/ProtocolHiDrugReader.java rename to src/main/java/org/example/drug/ProtocolHiDrugReader.java index a84c289..7d3e085 100644 --- a/src/main/java/org/example/ProtocolHiDrugReader.java +++ b/src/main/java/org/example/drug/ProtocolHiDrugReader.java @@ -1,15 +1,14 @@ -package org.example; +package org.example.drug; import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.event.AnalysisEventListener; import com.jfirer.baseutil.StringUtil; -import com.jfirer.dson.Dson; import com.jfirer.jsql.session.SqlSession; import lombok.Data; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; -import org.example.dto.HiDrugDetail; -import org.example.dto.HiDrugType; +import org.example.drug.dto.HiDrugDetail; +import org.example.drug.dto.HiDrugType; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/org/example/drug/ReadPdf.java b/src/main/java/org/example/drug/ReadPdf.java new file mode 100644 index 0000000..b64988c --- /dev/null +++ b/src/main/java/org/example/drug/ReadPdf.java @@ -0,0 +1,81 @@ +package org.example.drug; + +import com.jfirer.jsql.session.SqlSession; +import com.spire.pdf.PdfDocument; +import com.spire.pdf.utilities.PdfTable; +import com.spire.pdf.utilities.PdfTableExtractor; +import org.example.drug.dto.Drug; + +import java.util.Queue; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.LinkedTransferQueue; + +public class ReadPdf +{ + public static void main(String[] args) throws InterruptedException + { + Queue drugs = new LinkedTransferQueue<>(); + CountDownLatch countDownLatch = new CountDownLatch(17950); + for (int index = 1; index <= 17950; index++) + { + int finalIndex = index; + Thread.startVirtualThread(() -> { + //实例化PdfDocument类的对象 + PdfDocument pdf = new PdfDocument(); + //加载PDF文档 + pdf.loadFromFile("/Users/linbin/Downloads/未命名文件夹/医保药品分类与代码数据(西药、中成药)截至2024年3月29日-part/医保药品分类与代码数据(西药、中成药)截至2024年3月29日-part " + finalIndex + ".pdf"); + //创建StringBuilder类的实例 + //创建PdfTableExtractor类的对象 + PdfTableExtractor extractor = new PdfTableExtractor(pdf); + //遍历每一页 + for (int page = 0; page < pdf.getPages().getCount(); page++) + { + //提取页面中的表格存入PdfTable[]数组 + PdfTable[] tableLists = extractor.extractTable(page); + if (tableLists != null && tableLists.length > 0) + { + //遍历表 + for (PdfTable table : tableLists) + { + int row = table.getRowCount();//获取表格行 + int startRow = finalIndex == 1 ? 3 : 2; + for (int i = startRow; i < row; i++) + { + Drug drug = new Drug(); + drug.setDrugCode(table.getText(i, 0).replace("\n", "")); + drug.setRegisterName(table.getText(i, 1).replace("\n", "")); + drug.setRegisterDosageform(table.getText(i, 2).replace("\n", "")); + drug.setRegisterSpec(table.getText(i, 3).replace("\n", "")); + drug.setProductName(table.getText(i, 4).replace("\n", "")); + drug.setDosageform(table.getText(i, 5).replace("\n", "")); + drug.setSpec(table.getText(i, 6).replace("\n", "")); + drug.setPackagingMaterial(table.getText(i, 7).replace("\n", "")); + drug.setMinPackageNum(table.getText(i, 8).replace("\n", "")); + drug.setMinPreparationUnit(table.getText(i, 9).replace("\n", "")); + drug.setMinPackageUnit(table.getText(i, 10).replace("\n", "")); + drug.setEnterprise(table.getText(i, 11).replace("\n", "")); + drug.setApprovalNum(table.getText(i, 12).replace("\n", "")); + drug.setDrugStandardNum(table.getText(i, 13).replace("\n", "")); + drug.setHiType(table.getText(i, 14).replace("\n", "")); + drug.setHiNum(table.getText(i, 15).replace("\n", "")); + drug.setHiName(table.getText(i, 16).replace("\n", "")); + drug.setHiDosageform(table.getText(i, 17).replace("\n", "")); + drugs.add(drug); + } + } + } + } + System.out.println("第" + finalIndex + "页结束"); + countDownLatch.countDown(); + pdf.close(); + }); + } + countDownLatch.await(); + long t0 = System.currentTimeMillis(); + try (SqlSession session = App.SESSION_FACTORY.openSession()) + { + session.batchInsert(drugs, 1000); + } + System.out.println("插入耗时:" + (System.currentTimeMillis() - t0)); + } +} diff --git a/src/main/java/org/example/WestHiDrugReader.java b/src/main/java/org/example/drug/WestHiDrugReader.java similarity index 95% rename from src/main/java/org/example/WestHiDrugReader.java rename to src/main/java/org/example/drug/WestHiDrugReader.java index 9d3ed27..72f4a49 100644 --- a/src/main/java/org/example/WestHiDrugReader.java +++ b/src/main/java/org/example/drug/WestHiDrugReader.java @@ -1,4 +1,4 @@ -package org.example; +package org.example.drug; import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.event.AnalysisEventListener; @@ -8,8 +8,8 @@ import com.jfirer.jsql.session.SqlSession; import lombok.Data; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; -import org.example.dto.HiDrugDetail; -import org.example.dto.HiDrugType; +import org.example.drug.dto.HiDrugDetail; +import org.example.drug.dto.HiDrugType; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/org/example/drug/dto/Drug.java b/src/main/java/org/example/drug/dto/Drug.java new file mode 100644 index 0000000..92083fe --- /dev/null +++ b/src/main/java/org/example/drug/dto/Drug.java @@ -0,0 +1,87 @@ +package org.example.drug.dto; + +import com.jfirer.jsql.annotation.AutoIncrement; +import com.jfirer.jsql.annotation.Pk; +import com.jfirer.jsql.annotation.TableDef; +import lombok.Data; + +@TableDef("all_drug_data") +@Data +public class Drug +{ + @Pk + @AutoIncrement + private Integer id; + /** + * 药品代码 + */ + private String drugCode; + /** + * 注册名称 + */ + private String registerName; + /** + * 注册剂型 + */ + private String registerDosageform; + /** + * 注册规格 + */ + private String registerSpec; + /** + * 商品名称 + */ + private String productName; + /** + * 剂型 + */ + private String dosageform; + /** + * 规格 + */ + private String spec; + /** + * 包装材质 + */ + private String packagingMaterial; + /** + * 最小包装数量 + */ + private String minPackageNum; + /** + * 最小制剂单位 + */ + private String minPreparationUnit; + /** + * 最小包装单位 + */ + private String minPackageUnit; + /** + * 药品企业 + */ + private String enterprise; + /** + * 批准文号 + */ + private String approvalNum; + /** + * 药品本位码 + */ + private String drugStandardNum; + /** + * 医保类型 + */ + private String hiType; + /** + * 医保编码 + */ + private String hiNum; + /** + * 医保药品名称 + */ + private String hiName; + /** + * 医保剂型 + */ + private String hiDosageform; +} diff --git a/src/main/java/org/example/dto/HiDrugDetail.java b/src/main/java/org/example/drug/dto/HiDrugDetail.java similarity index 97% rename from src/main/java/org/example/dto/HiDrugDetail.java rename to src/main/java/org/example/drug/dto/HiDrugDetail.java index d4a18b7..f6346e9 100644 --- a/src/main/java/org/example/dto/HiDrugDetail.java +++ b/src/main/java/org/example/drug/dto/HiDrugDetail.java @@ -1,4 +1,4 @@ -package org.example.dto; +package org.example.drug.dto; import com.jfirer.jsql.annotation.AutoIncrement; import com.jfirer.jsql.annotation.Pk; diff --git a/src/main/java/org/example/dto/HiDrugType.java b/src/main/java/org/example/drug/dto/HiDrugType.java similarity index 95% rename from src/main/java/org/example/dto/HiDrugType.java rename to src/main/java/org/example/drug/dto/HiDrugType.java index 3583aae..8a860a1 100644 --- a/src/main/java/org/example/dto/HiDrugType.java +++ b/src/main/java/org/example/drug/dto/HiDrugType.java @@ -1,4 +1,4 @@ -package org.example.dto; +package org.example.drug.dto; import com.jfirer.jsql.annotation.TableDef; import lombok.Data; diff --git a/src/main/java/org/example/zhejiang/HiTrtServ.java b/src/main/java/org/example/zhejiang/HiTrtServ.java new file mode 100644 index 0000000..bfa859e --- /dev/null +++ b/src/main/java/org/example/zhejiang/HiTrtServ.java @@ -0,0 +1,32 @@ +package org.example.zhejiang; + +import com.jfirer.jsql.annotation.AutoIncrement; +import com.jfirer.jsql.annotation.Pk; +import com.jfirer.jsql.annotation.TableDef; +import lombok.Data; + +@Data +@TableDef("hi_trt_serv_hunan") +public class HiTrtServ +{ + @AutoIncrement + @Pk + private Integer id; + private String hilistCode; + private String hilistName; + /** + * 项目内涵 + */ + private String connotation; + private String ext_contents; + /** + * 计价单位 + */ + private String unit; + private String remark; + private String hiLevel; + /** + * 限定支付范围 + */ + private String limitPayScope; +} diff --git a/src/main/java/org/example/zhejiang/ReadHunan.java b/src/main/java/org/example/zhejiang/ReadHunan.java new file mode 100644 index 0000000..26d55cb --- /dev/null +++ b/src/main/java/org/example/zhejiang/ReadHunan.java @@ -0,0 +1,93 @@ +package org.example.zhejiang; + +import com.jfirer.baseutil.StringUtil; +import com.jfirer.jsql.SessionFactory; +import com.jfirer.jsql.SessionfactoryConfig; +import com.jfirer.jsql.session.SqlSession; +import com.spire.pdf.PdfDocument; +import com.spire.pdf.utilities.PdfTable; +import com.spire.pdf.utilities.PdfTableExtractor; +import com.zaxxer.hikari.HikariDataSource; + +import java.util.LinkedList; +import java.util.List; +import java.util.Queue; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.LinkedTransferQueue; +import java.util.concurrent.atomic.AtomicReferenceArray; + +public class ReadHunan +{ + public static void main(String[] args) throws InterruptedException + { + ExecutorService executorService = Executors.newVirtualThreadPerTaskExecutor(); + int num = 332; + CountDownLatch countDownLatch = new CountDownLatch(num); + AtomicReferenceArray> array = new AtomicReferenceArray<>(num + 1); + Queue queue = new LinkedTransferQueue<>(); + HiTrtServ lastCodedRecord; + for (int i = 1; i <= num; i++) + { + int finalI = i; + executorService.submit(() -> { + PdfDocument pdf = new PdfDocument(); + //加载PDF文档 + pdf.loadFromFile("/Users/linbin/Downloads/湖南省医疗服务价格项目目录(2024 年版)-part/湖南省医疗服务价格项目目录(2024 年版)-part " + finalI + ".pdf"); + //创建StringBuilder类的实例 + //创建PdfTableExtractor类的对象 + PdfTableExtractor extractor = new PdfTableExtractor(pdf); + //遍历每一页 + for (int page = 0; page < pdf.getPages().getCount(); page++) + { + //提取页面中的表格存入PdfTable[]数组 + PdfTable[] tableLists = extractor.extractTable(page); + List list = new LinkedList<>(); + if (tableLists != null && tableLists.length > 0) + { + PdfTable table = tableLists[0]; + //获取表格中的行数和列数 + int rowCount = table.getRowCount(); + //遍历表格中的每一个单元格 + for (int row = 1; row < rowCount; row++) + { + HiTrtServ serv = new HiTrtServ(); + //忽略第一列,财务列 + serv.setHilistCode(table.getText(row, 1).replace("\n", "")); + serv.setHilistName(table.getText(row, 2).replace("\n", "")); + serv.setConnotation(table.getText(row, 5).replace("\n", "")); + serv.setExt_contents(table.getText(row, 6).replace("\n", "")); + serv.setUnit(table.getText(row, 7).replace("\n", "")); + if (StringUtil.isNotBlank(serv.getHilistCode())) + { + list.add(serv); + } + } + } + array.set(finalI, list); + } + countDownLatch.countDown(); + }); + } + countDownLatch.await(); + for (int i = 1; i <= num; i++) + { + List hiTrtServs = array.get(i); + queue.addAll(hiTrtServs); + } + SessionfactoryConfig config = new SessionfactoryConfig(); + HikariDataSource dataSource = new HikariDataSource(); + dataSource.setJdbcUrl("jdbc:mysql://yynas.cn:53306/fee_control"); + dataSource.setDriverClassName(com.mysql.cj.jdbc.Driver.class.getName()); + dataSource.setUsername("root"); + dataSource.setPassword("root"); + config.setDataSource(dataSource); + SessionFactory sessionFactory = config.build(); + try (SqlSession session = sessionFactory.openSession()) + { + session.batchInsert(queue, 1000); + } + } +} + diff --git a/src/main/java/org/example/zhejiang/ReadZhejiang.java b/src/main/java/org/example/zhejiang/ReadZhejiang.java new file mode 100644 index 0000000..418b9a7 --- /dev/null +++ b/src/main/java/org/example/zhejiang/ReadZhejiang.java @@ -0,0 +1,97 @@ +package org.example.zhejiang; + +import com.jfirer.baseutil.StringUtil; +import com.jfirer.jsql.SessionFactory; +import com.jfirer.jsql.SessionfactoryConfig; +import com.jfirer.jsql.session.SqlSession; +import com.spire.pdf.PdfDocument; +import com.spire.pdf.utilities.PdfTable; +import com.spire.pdf.utilities.PdfTableExtractor; +import com.zaxxer.hikari.HikariDataSource; + +import java.util.LinkedList; +import java.util.List; +import java.util.Queue; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.LinkedTransferQueue; +import java.util.concurrent.atomic.AtomicReferenceArray; + +public class ReadZhejiang +{ + public static void main(String[] args) throws InterruptedException + { + ExecutorService executorService = Executors.newVirtualThreadPerTaskExecutor(); + int num = 354; + CountDownLatch countDownLatch = new CountDownLatch(num); + AtomicReferenceArray> array = new AtomicReferenceArray<>(num + 1); + Queue queue = new LinkedTransferQueue<>(); + HiTrtServ lastCodedRecord; + for (int i = 1; i <= num; i++) + { + int finalI = i; + executorService.submit(() -> { + PdfDocument pdf = new PdfDocument(); + //加载PDF文档 + pdf.loadFromFile("/Users/linbin/Downloads/吉林省基本医疗保险、工伤保险和生育保险诊疗项目及医疗服务设施项目目录(2022年)-part/吉林省基本医疗保险、工伤保险和生育保险诊疗项目及医疗服务设施项目目录(2022年)-part " + finalI + ".pdf"); + //创建StringBuilder类的实例 + //创建PdfTableExtractor类的对象 + PdfTableExtractor extractor = new PdfTableExtractor(pdf); + //遍历每一页 + for (int page = 0; page < pdf.getPages().getCount(); page++) + { + //提取页面中的表格存入PdfTable[]数组 + PdfTable[] tableLists = extractor.extractTable(page); + List list = new LinkedList<>(); + if (tableLists != null && tableLists.length > 0) + { + PdfTable table = tableLists[0]; + //获取表格中的行数和列数 + int rowCount = table.getRowCount(); + //遍历表格中的每一个单元格 + for (int row = 1; row < rowCount; row++) + { + HiTrtServ serv = new HiTrtServ(); + serv.setHilistCode(table.getText(row, 0).replace("\n", "")); + serv.setHilistName(table.getText(row, 1).replace("\n", "")); + serv.setConnotation(table.getText(row, 2).replace("\n", "")); + serv.setExt_contents(table.getText(row, 3).replace("\n", "")); + serv.setUnit(table.getText(row, 4).replace("\n", "")); + //跳过升级价格这一项 + serv.setRemark(table.getText(row, 6).replace("\n", "")); + serv.setHiLevel(table.getText(row, 7).replace("\n", "")); + if (StringUtil.isNotBlank(serv.getHilistCode())) + { + list.add(serv); + } + System.out.println(serv); + } + array.set(finalI, list); + } + } + countDownLatch.countDown(); + }); + + } + countDownLatch.await(); + for (int i = 1; i <= num; i++) + { + List hiTrtServs = array.get(i); + queue.addAll(hiTrtServs); + } + SessionfactoryConfig config = new SessionfactoryConfig(); + HikariDataSource dataSource = new HikariDataSource(); + dataSource.setJdbcUrl("jdbc:mysql://yynas.cn:53306/fee_control"); + dataSource.setDriverClassName(com.mysql.cj.jdbc.Driver.class.getName()); + dataSource.setUsername("root"); + dataSource.setPassword("root"); + config.setDataSource(dataSource); + SessionFactory sessionFactory = config.build(); + try (SqlSession session = sessionFactory.openSession()) + { + session.batchInsert(queue, 1000); + } + } +} +