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
+
+ 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);
+ }
+ }
+}
+