From 79e2a64f64089ee628a6619dd63efc8b33f96440 Mon Sep 17 00:00:00 2001 From: linbin <4961397@qq.com> Date: Thu, 6 Jun 2024 21:13:57 +0800 Subject: [PATCH] init --- .gitignore | 39 ++++++++++ pom.xml | 78 +++++++++++++++++++ src/main/java/org/example/App.java | 38 +++++++++ src/main/java/org/example/HiDrugReader.java | 67 ++++++++++++++++ .../java/org/example/dto/HiDrugDetail.java | 59 ++++++++++++++ src/main/java/org/example/dto/HiDrugType.java | 33 ++++++++ src/main/resources/log4j2.xml | 32 ++++++++ src/test/java/org/example/AppTest.java | 38 +++++++++ 8 files changed, 384 insertions(+) create mode 100644 .gitignore create mode 100644 pom.xml create mode 100644 src/main/java/org/example/App.java create mode 100644 src/main/java/org/example/HiDrugReader.java create mode 100644 src/main/java/org/example/dto/HiDrugDetail.java create mode 100644 src/main/java/org/example/dto/HiDrugType.java create mode 100644 src/main/resources/log4j2.xml create mode 100644 src/test/java/org/example/AppTest.java diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..f4ffc6f --- /dev/null +++ b/.gitignore @@ -0,0 +1,39 @@ +target/ +!.mvn/wrapper/maven-wrapper.jar +!**/src/main/**/target/ +!**/src/test/**/target/ + +### IntelliJ IDEA ### +.idea/modules.xml +.idea/jarRepositories.xml +.idea/compiler.xml +.idea/libraries/ +.idea/ +*.iws +*.iml +*.ipr + +### Eclipse ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ +!**/src/main/**/build/ +!**/src/test/**/build/ + +### VS Code ### +.vscode/ + +### Mac OS ### +.DS_Store \ No newline at end of file diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..85aae4b --- /dev/null +++ b/pom.xml @@ -0,0 +1,78 @@ + + 4.0.0 + + org.example + readExcel + 1.0-SNAPSHOT + jar + + readExcel + http://maven.apache.org + + + UTF-8 + + + + + com.zaxxer + HikariCP-java6 + 2.3.13 + + + com.mysql + mysql-connector-j + 8.2.0 + + + com.google.protobuf + protobuf-java + + + + + com.jfirer + JfireBoot + 1.0-SNAPSHOT + + + org.apache.logging.log4j + log4j-core + 2.20.0 + + + org.apache.logging.log4j + log4j-slf4j2-impl + 2.20.0 + + + org.slf4j + slf4j-api + 2.0.6 + + + org.projectlombok + lombok + 1.18.30 + provided + + + com.alibaba + easyexcel + 3.3.4 + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + 16 + 16 + + + + + diff --git a/src/main/java/org/example/App.java b/src/main/java/org/example/App.java new file mode 100644 index 0000000..48c0a8e --- /dev/null +++ b/src/main/java/org/example/App.java @@ -0,0 +1,38 @@ +package org.example; + +import com.alibaba.excel.EasyExcel; +import com.alibaba.excel.ExcelReader; +import com.alibaba.excel.read.metadata.ReadSheet; +import com.jfirer.dson.reader.TypeReader; +import com.jfirer.jsql.SessionFactory; +import com.jfirer.jsql.SessionfactoryConfig; +import com.mysql.cj.jdbc.Driver; +import com.zaxxer.hikari.HikariDataSource; + +/** + * Hello world! + */ +public class App +{ + static + { + HikariDataSource dataSource = new HikariDataSource(); + dataSource.setDriverClassName(Driver.class.getName()); + dataSource.setJdbcUrl("jdbc:mysql://yynas.cn:43897/fee_control?useUnicode=true&characterEncoding=utf8&useSSL=false&rewriteBatchedStatements=true"); + dataSource.setUsername("root"); + dataSource.setPassword("xidn983kdhjf"); + SessionfactoryConfig config = new SessionfactoryConfig(); + config.setDataSource(dataSource); + SESSION_FACTORY = config.build(); + } + + public static final SessionFactory SESSION_FACTORY; + + public static void main(String[] args) + { + String fileName = "/Users/linbin/Downloads/国家基本医疗保险、工伤保险和生育保险药品目录(2023 年).xlsx"; + ExcelReader build = EasyExcel.read(fileName).build(); + ReadSheet sheet2 = EasyExcel.readSheet(7).registerReadListener(new HiDrugReader()).build(); + build.read(sheet2); + } +} diff --git a/src/main/java/org/example/HiDrugReader.java b/src/main/java/org/example/HiDrugReader.java new file mode 100644 index 0000000..6ce1c14 --- /dev/null +++ b/src/main/java/org/example/HiDrugReader.java @@ -0,0 +1,67 @@ +package org.example; + +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.model.Model; +import com.jfirer.jsql.session.SqlSession; +import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; +import org.example.dto.HiDrugDetail; +import org.example.dto.HiDrugType; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +@Slf4j +public class HiDrugReader extends AnalysisEventListener> +{ + List list = new ArrayList<>(); + List types = new ArrayList<>(); + private HiDrugType lastest; + + @Override + public void invoke(Map data, AnalysisContext context) + { + log.debug("{}", Dson.toJson(data)); + if (StringUtil.isNotBlank(data.get(5))) + { + log.debug("{}", Dson.toJson(data)); + HiDrugDetail detail = new HiDrugDetail(); + detail.setClassificationCode(lastest.getCode()); + detail.setClassificationName(lastest.getName()); + detail.setHiType(data.get(5)); + detail.setNumber(data.get(6)); + detail.setName(data.get(7)); + detail.setPayStandard(data.get(8)); + detail.setRemarks(data.get(9)); + String time = data.get(10); + String[] split = time.split("至\n"); + detail.setProtocol(true); + detail.setProtocolStart(split[0]); + detail.setProtocolEnd(split[1]); + list.add(detail); + } + else + { + String code = data.get(0); + String name = StringUtil.isNotBlank(data.get(1)) ? data.get(1) : StringUtil.isNotBlank(data.get(2)) ? data.get(2) : StringUtil.isNotBlank(data.get(3)) ? data.get(3) : StringUtil.isNotBlank(data.get(4)) ? data.get(4) : ""; + Integer level = StringUtil.isNotBlank(data.get(1)) ? 1 : StringUtil.isNotBlank(data.get(2)) ? 2 : StringUtil.isNotBlank(data.get(3)) ? 3 : StringUtil.isNotBlank(data.get(4)) ? 4 : 0; + lastest = new HiDrugType().setCode(code).setName(name).setLevel(level).setType("西药"); + types.add(lastest); + } + } + + @SneakyThrows + @Override + public void doAfterAllAnalysed(AnalysisContext context) + { + try (SqlSession session = App.SESSION_FACTORY.openSession()) + { + session.batchInsert(list, 200); +// session.batchInsert(types, 200); + } + } +} diff --git a/src/main/java/org/example/dto/HiDrugDetail.java b/src/main/java/org/example/dto/HiDrugDetail.java new file mode 100644 index 0000000..39c26d0 --- /dev/null +++ b/src/main/java/org/example/dto/HiDrugDetail.java @@ -0,0 +1,59 @@ +package org.example.dto; + +import com.jfirer.jsql.annotation.AutoIncrement; +import com.jfirer.jsql.annotation.Pk; +import com.jfirer.jsql.annotation.TableDef; +import lombok.Data; + +@TableDef("hi_drug_detail") +@Data +public class HiDrugDetail +{ + @Pk + @AutoIncrement + private Integer id; + /** + * 药品分类代码 + */ + private String classificationCode; + /** + * 药品分类名称 + */ + private String classificationName; + /** + * 医保类型,值域:甲、乙 + */ + private String hiType; + /** + * 编号 + */ + private String number; + /** + * 药品名称 + */ + private String name; + /** + * 剂型 + */ + private String dosageform; + /** + * 备注 + */ + private String remarks; + /** + * 医保支付标准 + */ + private String payStandard; + /** + * 是否协议期 + */ + private boolean protocol; + /** + * 协议开始时间 + */ + private String protocolStart; + /** + * 协议结束时间 + */ + private String protocolEnd; +} diff --git a/src/main/java/org/example/dto/HiDrugType.java b/src/main/java/org/example/dto/HiDrugType.java new file mode 100644 index 0000000..3583aae --- /dev/null +++ b/src/main/java/org/example/dto/HiDrugType.java @@ -0,0 +1,33 @@ +package org.example.dto; + +import com.jfirer.jsql.annotation.TableDef; +import lombok.Data; +import lombok.experimental.Accessors; + +@TableDef("hi_drug_type") +@Data +@Accessors(chain = true) +public class HiDrugType +{ + /** + * 药品代码,在第0列 + */ + private String code; + /** + * 药品分类名称 + */ + private String name; + /** + * 药品分类级别,和药品代码相关,值域范围:[1-4] + * 示例: + * 1级:XA,消化道和代谢方面的药物 + * 2级:XA01,口腔科制剂 + * 3级:XA02A,抗酸药 + * 4级:XA02BA,H2-受体拮抗剂 + */ + private Integer level; + /** + * 类别 + */ + private String type; +} diff --git a/src/main/resources/log4j2.xml b/src/main/resources/log4j2.xml new file mode 100644 index 0000000..58c9cd0 --- /dev/null +++ b/src/main/resources/log4j2.xml @@ -0,0 +1,32 @@ + + + + + + + + + %-5level %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] - %X{traceId} + %-80msg %l{%n%ex}%n + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/test/java/org/example/AppTest.java b/src/test/java/org/example/AppTest.java new file mode 100644 index 0000000..d5f435d --- /dev/null +++ b/src/test/java/org/example/AppTest.java @@ -0,0 +1,38 @@ +package org.example; + +import junit.framework.Test; +import junit.framework.TestCase; +import junit.framework.TestSuite; + +/** + * Unit test for simple App. + */ +public class AppTest + extends TestCase +{ + /** + * Create the test case + * + * @param testName name of the test case + */ + public AppTest( String testName ) + { + super( testName ); + } + + /** + * @return the suite of tests being tested + */ + public static Test suite() + { + return new TestSuite( AppTest.class ); + } + + /** + * Rigourous Test :-) + */ + public void testApp() + { + assertTrue( true ); + } +}