szq 4 سال پیش
کامیت
abb7aa8f98
46فایلهای تغییر یافته به همراه2505 افزوده شده و 0 حذف شده
  1. 31 0
      .gitignore
  2. 3 0
      README.md
  3. 263 0
      pom.xml
  4. 14 0
      src/main/java/com/miyzh/QingdaoUploadApplication.java
  5. 69 0
      src/main/java/com/miyzh/config/DruidConfig.java
  6. 14 0
      src/main/java/com/miyzh/config/PageHelperConfig.java
  7. 25 0
      src/main/java/com/miyzh/config/SheduledConfig.java
  8. 27 0
      src/main/java/com/miyzh/controller/TestController.java
  9. 12 0
      src/main/java/com/miyzh/dao/ClinicDao.java
  10. 9 0
      src/main/java/com/miyzh/dao/MedicineDao.java
  11. 25 0
      src/main/java/com/miyzh/dao/MedicineReturnDao.java
  12. 30 0
      src/main/java/com/miyzh/dao/MedicineStorageDao.java
  13. 15 0
      src/main/java/com/miyzh/dao/MedicineStoreDao.java
  14. 22 0
      src/main/java/com/miyzh/dao/UploadExcepctionLogMapper.java
  15. 13 0
      src/main/java/com/miyzh/entity/BaseResult.java
  16. 12 0
      src/main/java/com/miyzh/entity/Clinic.java
  17. 75 0
      src/main/java/com/miyzh/entity/Medicine.java
  18. 14 0
      src/main/java/com/miyzh/entity/MedicineReturn.java
  19. 14 0
      src/main/java/com/miyzh/entity/MedicineStorage.java
  20. 14 0
      src/main/java/com/miyzh/entity/MedicineStore.java
  21. 48 0
      src/main/java/com/miyzh/entity/OrderDetails.java
  22. 38 0
      src/main/java/com/miyzh/entity/UploadExceptionLog.java
  23. 29 0
      src/main/java/com/miyzh/entity/dto/MedicineReturnDto.java
  24. 27 0
      src/main/java/com/miyzh/entity/dto/MedicineStorageDto.java
  25. 23 0
      src/main/java/com/miyzh/entity/dto/MedicineStoreDto.java
  26. 42 0
      src/main/java/com/miyzh/service/BaseService.java
  27. 21 0
      src/main/java/com/miyzh/service/ClinicService.java
  28. 99 0
      src/main/java/com/miyzh/service/MedicineReturnService.java
  29. 100 0
      src/main/java/com/miyzh/service/MedicineStorageService.java
  30. 108 0
      src/main/java/com/miyzh/service/MedicineStoreService.java
  31. 99 0
      src/main/java/com/miyzh/service/OrderDetailUploadService.java
  32. 32 0
      src/main/java/com/miyzh/service/UploadExceptionLogService.java
  33. 115 0
      src/main/java/com/miyzh/utils/DesUtil.java
  34. 86 0
      src/main/java/com/miyzh/utils/RestTemplateUtil.java
  35. 85 0
      src/main/resources/application-szq.yml
  36. 84 0
      src/main/resources/application.yml
  37. 220 0
      src/main/resources/logback-spring.xml
  38. 18 0
      src/main/resources/mapper/ClinicMapper.xml
  39. 71 0
      src/main/resources/mapper/MedicineMapper.xml
  40. 99 0
      src/main/resources/mapper/MedicineReturnMapper.xml
  41. 101 0
      src/main/resources/mapper/MedicineStorageMapper.xml
  42. 101 0
      src/main/resources/mapper/MedicineStoreMapper.xml
  43. 56 0
      src/main/resources/mapper/UploadExpectionLogMapping.xml
  44. 29 0
      src/main/resources/mybatis/mybatis-config.xml
  45. 60 0
      src/main/resources/mybatis/mybatis-generator.xml
  46. 13 0
      src/test/java/com/miyzh/YidebProxySrvApplicationTests.java

+ 31 - 0
.gitignore

@@ -0,0 +1,31 @@
+HELP.md
+target/
+!.mvn/wrapper/maven-wrapper.jar
+!**/src/main/**
+!**/src/test/**
+
+### STS ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+.sts4-cache
+
+### IntelliJ IDEA ###
+.idea
+*.iws
+*.iml
+*.ipr
+
+### NetBeans ###
+/nbproject/private/
+/nbbuild/
+/dist/
+/nbdist/
+/.nb-gradle/
+build/
+
+### VS Code ###
+.vscode/

+ 3 - 0
README.md

@@ -0,0 +1,3 @@
+# yideb-proxy-srv
+
+青岛即墨医保上传平台代理

+ 263 - 0
pom.xml

@@ -0,0 +1,263 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.springframework.boot</groupId>
+        <artifactId>spring-boot-starter-parent</artifactId>
+        <version>2.2.0.RELEASE</version>
+        <relativePath/> <!-- lookup parent from repository -->
+    </parent>
+    <groupId>com.miyzh</groupId>
+    <artifactId>yideb-proxy-srv</artifactId>
+    <version>0.0.1-SNAPSHOT</version>
+    <name>yideb-qingdao-upload</name>
+    <description>Demo project for Spring Boot</description>
+
+    <properties>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <java.version>1.8</java.version>
+        <spring.loaded.version>1.2.7.RELEASE</spring.loaded.version>
+
+        <!-- mysql 数据库-->
+        <mysql.version>5.1.38</mysql.version>
+        <!--<mysql.version>8.0.11</mysql.version>-->
+        <druid.version>1.1.16</druid.version>
+        <springboot.mybatis.version>1.3.0</springboot.mybatis.version>
+        <mybatis.generator.version>1.3.7</mybatis.generator.version>
+
+        <!-- 工具类 -->
+        <apache.commons-lang.version>3.2.1</apache.commons-lang.version>
+        <apache.commons-io.version>2.5</apache.commons-io.version>
+        <google.guava.version>21.0</google.guava.version>
+
+        <!-- cache缓存 -->
+        <ehcached.version>2.10.3</ehcached.version>
+        <shiro.ehcache.version>1.3.2</shiro.ehcache.version>
+
+        <java.version>1.8</java.version>
+    </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.mybatis.spring.boot</groupId>
+            <artifactId>mybatis-spring-boot-starter</artifactId>
+            <version>2.1.3</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.github.pagehelper</groupId>
+            <artifactId>pagehelper-spring-boot-starter</artifactId>
+            <version>1.2.10</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-test</artifactId>
+            <scope>test</scope>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.junit.vintage</groupId>
+                    <artifactId>junit-vintage-engine</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+
+        <!--redis-->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-data-redis</artifactId>
+        </dependency>
+        <!-- 添加jedis客户端 -->
+        <dependency>
+            <groupId>redis.clients</groupId>
+            <artifactId>jedis</artifactId>
+        </dependency>
+        <!--数据库-->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-jdbc</artifactId>
+        </dependency>
+        <!--数据库连接-->
+        <dependency>
+            <groupId>mysql</groupId>
+            <artifactId>mysql-connector-java</artifactId>
+            <version>8.0.15</version>
+<!--            <version>${mysql.version}</version>-->
+        </dependency>
+
+        <!-- alibaba的druid数据库连接池 -->
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>druid-spring-boot-starter</artifactId>
+            <version>${druid.version}</version>
+        </dependency>
+
+        <!-- 工具类 -->
+        <dependency>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-lang3</artifactId>
+            <version>${apache.commons-lang.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>commons-io</groupId>
+            <artifactId>commons-io</artifactId>
+            <version>${apache.commons-io.version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <version>4.12</version>
+        </dependency>
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>fastjson</artifactId>
+            <version>1.2.30</version>
+        </dependency>
+
+        <!-- spring热部署-->
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>springloaded</artifactId>
+            <version>${spring.loaded.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-devtools</artifactId>
+            <optional>true</optional>
+        </dependency>
+
+        <!-- cglib 动态代理 -->
+        <dependency>
+            <groupId>cglib</groupId>
+            <artifactId>cglib</artifactId>
+            <version>3.1</version>
+        </dependency>
+        <dependency>
+            <groupId>org.aspectj</groupId>
+            <artifactId>aspectjrt</artifactId>
+            <version>1.9.4</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-aop</artifactId>
+        </dependency>
+        <!--rabbitmq-->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-amqp</artifactId>
+            <version>1.5.2.RELEASE</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+            <version>1.14.4</version>
+            <optional>true</optional>
+            <scope>provided</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-tomcat</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-test</artifactId>
+            <scope>test</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>org.bouncycastle</groupId>
+            <artifactId>bcprov-jdk15on</artifactId>
+            <version>1.56</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.fasterxml.jackson.dataformat</groupId>
+            <artifactId>jackson-dataformat-xml</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>com.fasterxml.jackson.core</groupId>
+            <artifactId>jackson-databind</artifactId>
+            <version>2.9.7</version>
+        </dependency>
+
+        <dependency>
+            <groupId>dom4j</groupId>
+            <artifactId>dom4j</artifactId>
+            <version>1.6.1</version>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+            </plugin>
+            <plugin>
+                <groupId>org.mybatis.generator</groupId>
+                <artifactId>mybatis-generator-maven-plugin</artifactId>
+                <version>${mybatis.generator.version}</version>
+                <executions>
+                    <execution>
+                        <id>Generate MyBatis Artifacts</id>
+                        <phase>deploy</phase>
+                        <goals>
+                            <goal>generate</goal>
+                        </goals>
+                    </execution>
+                </executions>
+                <dependencies>
+                    <dependency>
+                        <groupId>mysql</groupId>
+                        <artifactId>mysql-connector-java</artifactId>
+                        <version>${mysql.version}</version>
+                    </dependency>
+                    <dependency>
+                        <groupId>org.mybatis.generator</groupId>
+                        <artifactId>mybatis-generator-core</artifactId>
+                        <version>${mybatis.generator.version}</version>
+                    </dependency>
+                </dependencies>
+                <configuration>
+                    <!--允许移动生成的文件 -->
+                    <verbose>true</verbose>
+                    <!-- 是否覆盖 -->
+                    <overwrite>true</overwrite>
+                    <!-- 自动生成的配置 -->
+                    <configurationFile>
+                        src/main/resources/mybatis/mybatis-generator.xml</configurationFile>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <version>2.18.1</version>
+                <configuration>
+                    <skipTests>true</skipTests>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <version>3.1</version>
+                <configuration>
+                    <source>1.8</source>
+                    <target>1.8</target>
+                    <encoding>UTF-8</encoding>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+
+</project>

+ 14 - 0
src/main/java/com/miyzh/QingdaoUploadApplication.java

@@ -0,0 +1,14 @@
+package com.miyzh;
+
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.scheduling.annotation.EnableAsync;
+
+@SpringBootApplication
+public class QingdaoUploadApplication {
+    public static void main(String[] args) {
+        SpringApplication.run(QingdaoUploadApplication.class, args);
+    }
+
+}

+ 69 - 0
src/main/java/com/miyzh/config/DruidConfig.java

@@ -0,0 +1,69 @@
+package com.miyzh.config;
+
+import com.alibaba.druid.filter.Filter;
+import com.alibaba.druid.filter.stat.StatFilter;
+import com.alibaba.druid.pool.DruidDataSource;
+import com.alibaba.druid.support.http.StatViewServlet;
+import com.alibaba.druid.support.http.WebStatFilter;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.boot.web.servlet.FilterRegistrationBean;
+import org.springframework.boot.web.servlet.ServletRegistrationBean;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import javax.sql.DataSource;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * description: DruidConfig
+ * date: 2020/6/19 10:29
+ * author: SZQ
+ */
+@Configuration
+public class DruidConfig {
+    @ConfigurationProperties(prefix = "spring.datasource")
+    //加载时读取指定的配置信息,前缀为spring.datasource.druid
+    @Bean
+    public DataSource druid(){
+        return new DruidDataSource();
+    }
+    //配置Druid的监控
+    //1. 配置一个管理后台的servlet
+    @Bean
+    public ServletRegistrationBean statViewServlet() {
+        //创建servlet注册实体
+        ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new StatViewServlet(), "/druid/*");
+        //设置ip白名单
+        servletRegistrationBean.addInitParameter("allow", "192.168.0.1");
+        //设置ip黑名单,如果allow与deny共同存在时,deny优先于allow
+        //servletRegistrationBean.addInitParameter("deny","192.168.0.1");
+        //设置控制台管理用户
+        servletRegistrationBean.addInitParameter("loginUsername", "admin");
+        servletRegistrationBean.addInitParameter("loginPassword", "123456");
+        //是否可以重置数据
+        servletRegistrationBean.addInitParameter("resetEnable", "false");
+        return servletRegistrationBean;
+    }
+    // 2. 配置一个监控的filter
+    @Bean
+    public FilterRegistrationBean webStatFilter(){
+        FilterRegistrationBean bean = new FilterRegistrationBean();
+        bean.setFilter(new WebStatFilter());
+        Map<String,String> initParams = new HashMap<>();
+        initParams.put("exclusions","*.js,*.css,/druid/*");
+        bean.setInitParameters(initParams);
+        bean.setUrlPatterns(Arrays.asList("/*"));
+        return bean;
+    }
+    // 3. 配置druid连接池以及慢日志配置
+    @Bean
+    public Filter statFilter() {
+        StatFilter filter = new StatFilter();
+        filter.setSlowSqlMillis(5000);
+        filter.setLogSlowSql(true);
+        filter.setMergeSql(true);
+        return filter;
+    }
+}

+ 14 - 0
src/main/java/com/miyzh/config/PageHelperConfig.java

@@ -0,0 +1,14 @@
+package com.miyzh.config;
+
+import com.github.pagehelper.PageHelper;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+public class PageHelperConfig {
+    @Bean
+    public PageHelper createPaeHelper(){
+        PageHelper page= new PageHelper();
+        return page;
+    }
+}

+ 25 - 0
src/main/java/com/miyzh/config/SheduledConfig.java

@@ -0,0 +1,25 @@
+package com.miyzh.config;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.Scheduled;
+
+/**
+ * description: SheduledConfig
+ * date: 2020/6/18 17:18
+ * author: SZQ
+ */
+
+@Configuration
+@EnableScheduling
+public class SheduledConfig {
+
+//    @Autowired
+//    private UploadService uploadService;
+//
+//    @Scheduled(fixedRate = 1 * 60 * 1000)
+//    private void rertyUpload() {
+//        uploadService.retryUpload();
+//    }
+}

+ 27 - 0
src/main/java/com/miyzh/controller/TestController.java

@@ -0,0 +1,27 @@
+package com.miyzh.controller;
+
+import com.miyzh.service.BaseService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * Title: TestController
+ * Description:
+ *
+ * @author lyt
+ * @date 2020/6/11 14:26
+ */
+@RestController
+@RequestMapping("test")
+public class TestController {
+    @Autowired
+    private BaseService baseService;
+
+    @RequestMapping("test")
+    public void testIndex(){
+        baseService.runService();
+    }
+
+
+}

+ 12 - 0
src/main/java/com/miyzh/dao/ClinicDao.java

@@ -0,0 +1,12 @@
+package com.miyzh.dao;
+
+import com.miyzh.entity.Clinic;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+@Mapper
+public interface ClinicDao {
+
+    List<Clinic> listClinic();
+}

+ 9 - 0
src/main/java/com/miyzh/dao/MedicineDao.java

@@ -0,0 +1,9 @@
+package com.miyzh.dao;
+
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+@Mapper
+public interface MedicineDao {
+
+}

+ 25 - 0
src/main/java/com/miyzh/dao/MedicineReturnDao.java

@@ -0,0 +1,25 @@
+package com.miyzh.dao;
+
+import com.miyzh.entity.dto.MedicineReturnDto;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+@Mapper
+public interface MedicineReturnDao {
+
+    List<MedicineReturnDto> getPurchasePager();
+
+    List<MedicineReturnDto> getStockDetailPager();
+
+    List<MedicineReturnDto> getChinaStockProfitPager();
+
+    List<MedicineReturnDto> getStockOutbound();
+
+    List<MedicineReturnDto> getChinaStockOutbound();
+
+    List<MedicineReturnDto> getInventory();
+
+    List<MedicineReturnDto> getInventoryDetail();
+
+}

+ 30 - 0
src/main/java/com/miyzh/dao/MedicineStorageDao.java

@@ -0,0 +1,30 @@
+package com.miyzh.dao;
+
+import com.miyzh.entity.MedicineStorage;
+import com.miyzh.entity.dto.MedicineReturnDto;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+@Mapper
+public interface MedicineStorageDao {
+
+    // 西药采购入库记录
+    List<MedicineStorage> listMedicinePurchase(String clinicId);
+
+    // 中药采购入库记录
+    List<MedicineStorage> listChinaMedicinePurchase(String clinicId);
+
+    // 西药销售退回入库记录
+    List<MedicineStorage> listMedicineOutbound(String clinicId);
+
+    // 中药销售退回入库记录
+    List<MedicineStorage> listChinaMedicineOutbound(String clinicId);
+
+    // 西药盘点盘盈入库记录
+    List<MedicineStorage> listMedicineInventory(String clinicId);
+
+    // 中药盘点盘盈入库记录
+    List<MedicineStorage> listChinaMedicineInventory(String clinicId);
+
+}

+ 15 - 0
src/main/java/com/miyzh/dao/MedicineStoreDao.java

@@ -0,0 +1,15 @@
+package com.miyzh.dao;
+
+import com.miyzh.entity.MedicineStore;
+import io.lettuce.core.dynamic.annotation.Param;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+@Mapper
+public interface MedicineStoreDao {
+
+    List<MedicineStore> listMedicineStore(@Param("clinicId") String clinicId);
+
+    List<MedicineStore> listChinaMedicineStore(@Param("clinicId") String clinicId);
+}

+ 22 - 0
src/main/java/com/miyzh/dao/UploadExcepctionLogMapper.java

@@ -0,0 +1,22 @@
+package com.miyzh.dao;
+
+import com.miyzh.entity.UploadExceptionLog;
+import io.lettuce.core.dynamic.annotation.Param;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+/**
+ * description: UploadExpectionLogDao
+ * date: 2020/6/18 12:07
+ * author: SZQ
+ */
+@Mapper
+public interface UploadExcepctionLogMapper {
+
+    List<UploadExceptionLog> selectListLimit(@Param("limit") int limit);
+
+    Integer insert(UploadExceptionLog uploadExceptionLog);
+
+    Integer update(UploadExceptionLog uploadExceptionLog);
+}

+ 13 - 0
src/main/java/com/miyzh/entity/BaseResult.java

@@ -0,0 +1,13 @@
+package com.miyzh.entity;
+
+import lombok.Data;
+
+@Data
+public class BaseResult {
+
+    private boolean success;
+
+    private String resultCode;
+
+    private String message;
+}

+ 12 - 0
src/main/java/com/miyzh/entity/Clinic.java

@@ -0,0 +1,12 @@
+package com.miyzh.entity;
+
+import lombok.Data;
+
+@Data
+public class Clinic {
+
+    private String storeCode; //医药机构编码
+
+    private String clinicId; //诊所id
+
+}

+ 75 - 0
src/main/java/com/miyzh/entity/Medicine.java

@@ -0,0 +1,75 @@
+package com.miyzh.entity;
+
+import lombok.Data;
+
+@Data
+public class Medicine {
+
+
+    private String itemType; //项目类型
+
+    private String storeMedicineCode; //医药机构药品/耗材编码
+
+    private String storeMedicineName; //医药机构药品/耗材名称
+
+    private String storeMedicineTradeName; //医药机构药品/耗材商品名
+
+    private String dosageId; //剂型编号
+
+    private String dosageName; //剂型名称
+
+    private String specification; //规格
+
+    private String manufacturer; //生产厂商
+
+    private String place; //产地
+
+    private String pack; //包装
+
+    private String model; //型号
+
+    private String batchNo; // 批次号
+
+    private String validity; // 有效期
+
+    private String manufactureTime; //生产日期
+
+    private String barCode; //条形码
+
+    private String registNo; //耗材注册号
+
+    private String deliveryCompany; //供应商
+
+    private String distributor; //经销商
+
+    private String price; //采购单价
+
+    private String retailPrice; //零售价(元)
+
+    private String platItemCode; //平台目录编码
+
+    private String platItemName; //平台目录名称
+
+    private String itemCode; //医保药品/耗材编码
+
+    private String itemName; //医保药品/耗材名称
+
+    private String tradeName; //医保药品/耗材商品名
+
+    private String provinceItemCode; //省医保目录编码
+
+    private String provinceItemName; //省医保目录名称
+
+    private String countryItemCode; //国家医保目录编码
+
+    private String countryItemName; //国家医保目录名称
+
+    private String drugEsCode; //电子监管码
+
+    private String warehouseCode; //库房编码
+
+    private String warehouseName; //库房名称
+
+    private String goodsAllocation; //货位/货架号
+
+}

+ 14 - 0
src/main/java/com/miyzh/entity/MedicineReturn.java

@@ -0,0 +1,14 @@
+package com.miyzh.entity;
+
+import lombok.Data;
+
+@Data
+public class MedicineReturn extends Medicine {
+
+    private String currentNum; //当前数量
+
+    private String approvalNumber; //批准文号
+
+}
+
+

+ 14 - 0
src/main/java/com/miyzh/entity/MedicineStorage.java

@@ -0,0 +1,14 @@
+package com.miyzh.entity;
+
+import lombok.Data;
+
+@Data
+public class MedicineStorage extends Medicine {
+
+    private String storageQuantity; //实际入库数量
+
+    private String storeStorageCode; //机构入库编码
+
+}
+
+

+ 14 - 0
src/main/java/com/miyzh/entity/MedicineStore.java

@@ -0,0 +1,14 @@
+package com.miyzh.entity;
+
+import lombok.Data;
+
+@Data
+public class MedicineStore extends Medicine {
+
+    private String currentNum; //当前数量
+
+    private String approvalNumber; //批准文号
+
+}
+
+

+ 48 - 0
src/main/java/com/miyzh/entity/OrderDetails.java

@@ -0,0 +1,48 @@
+package com.miyzh.entity;
+
+import lombok.Data;
+
+@Data
+public class OrderDetails extends Medicine {
+
+    private String storeOrderNo; //机构销售订单编号
+
+    private String misNo; //医保结算单号
+
+    private String settledTypeNo; //结算方式编码
+
+    private String settledTypeName; //结算方式名称
+
+    private String settledstatus; //结算状态
+
+    private String totalAmt; //订单总金额
+
+    private String insuranceAmt; //医保结算金额
+
+    private String operater; //操作员
+
+    private String saleDate; //销售日期
+
+    private String saleTime; //销售时间
+
+    private String buyMedPerson; //购药人
+
+    private String sex; //性别
+
+    private String age; //年龄
+
+    private String idCard; //身份证号
+
+    private String credentialNum; //医保卡号
+
+    private String storeStorageCode; //入库编码
+
+    private String recipeNo; //处方编码
+
+    private String num; //数量
+
+    private String isUnpacking; //拆包标志
+
+    private String queryTime; //查询时间
+
+}

+ 38 - 0
src/main/java/com/miyzh/entity/UploadExceptionLog.java

@@ -0,0 +1,38 @@
+package com.miyzh.entity;
+
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * description: 日志记录
+ * date: 2020/6/18 11:32
+ * author: SZQ
+ */
+@Data
+public class UploadExceptionLog {
+
+    private Long id;
+
+    private String tradeCode; //交易码
+
+    private String uploadInfo; //报文信息
+
+    private String serialNumber; //业务流水号
+
+    private String errorMsg; //错误信息
+
+    private Integer retryCount; //重试次数
+
+    private Integer status; // 1:成功, 2:执行中, 3:失败
+
+    private Integer isDel; //标记删除 0:删除 1:正常
+
+    private Date createDate;
+
+    private Date modifyDate;
+    
+
+
+
+}

+ 29 - 0
src/main/java/com/miyzh/entity/dto/MedicineReturnDto.java

@@ -0,0 +1,29 @@
+package com.miyzh.entity.dto;
+
+import com.miyzh.entity.MedicineReturn;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class MedicineReturnDto {
+
+    private String storeCode; // 医药机构编码
+
+    private String storeReturnCode; //机构出库编码
+
+    private String storePrecordCode; // 采购记录编码(医药机构)
+
+    private String storStorageCode; // 入库编码(医药机构)
+
+    private String returnTime; //出库时间
+
+    private String stockoutType; //出库类型
+
+    private String returnAnnotation; //出库原因
+
+    private String returnMan; //出库人
+
+    private List<MedicineReturn> medicineInfos; //药品/耗材列表
+
+}

+ 27 - 0
src/main/java/com/miyzh/entity/dto/MedicineStorageDto.java

@@ -0,0 +1,27 @@
+package com.miyzh.entity.dto;
+
+import com.miyzh.entity.MedicineStorage;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class MedicineStorageDto {
+
+    private String storeCode; //医药机构编码
+
+    private String storeStorageCode; //机构入库编码
+
+    private String storePrecordCode; //机构采购记录编码
+
+    private String storageTime; //入库时间
+
+    private String storageMan; //入库人
+
+    private String storageType; //入库类型
+
+    private String storePurchaseType; // 采购平台标识
+
+    private List<MedicineStorage> medicineInfos; //药品/耗材列表
+
+}

+ 23 - 0
src/main/java/com/miyzh/entity/dto/MedicineStoreDto.java

@@ -0,0 +1,23 @@
+package com.miyzh.entity.dto;
+
+import com.miyzh.entity.MedicineStore;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class MedicineStoreDto {
+
+    private String storeCode; //医药机构编码
+
+    private String srpNo; //机构采购记录编码
+
+    private String  checkTime; //盘点时间
+
+    private String checkMan; //盘点人
+
+    private List<MedicineStore> medicineInfos; //药品/耗材列表
+
+
+
+}

+ 42 - 0
src/main/java/com/miyzh/service/BaseService.java

@@ -0,0 +1,42 @@
+package com.miyzh.service;
+
+import com.miyzh.entity.Clinic;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Slf4j
+@Service
+public class BaseService {
+
+    @Autowired
+    private ClinicService clinicService;
+
+    @Autowired
+    private MedicineStoreService medicineStoreService;
+    @Autowired
+    private MedicineStorageService medicineStorageService;
+
+
+    public void runService () {
+        try{
+            long startTime = System.currentTimeMillis();
+            List<Clinic> clinicList = clinicService.listClinic();
+//            storeUploadService.uploadMedicine(clinicList);
+//            medicineStoreService.uploadChinaMedicine(clinicList);
+            medicineStorageService.uploadMedicine(clinicList);
+
+            long syncTime = System.currentTimeMillis();
+            log.info("总耗时--{}", startTime - syncTime);
+        } catch (Exception e) {
+            e.printStackTrace();
+            log.error(e.getMessage());
+        }
+
+    }
+
+
+
+}

+ 21 - 0
src/main/java/com/miyzh/service/ClinicService.java

@@ -0,0 +1,21 @@
+package com.miyzh.service;
+
+
+import com.miyzh.dao.ClinicDao;
+import com.miyzh.entity.Clinic;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service
+public class ClinicService {
+
+    @Autowired
+    private ClinicDao clinicDao;
+
+    List<Clinic> listClinic() {
+        return clinicDao.listClinic();
+    }
+
+}

+ 99 - 0
src/main/java/com/miyzh/service/MedicineReturnService.java

@@ -0,0 +1,99 @@
+package com.miyzh.service;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import com.miyzh.dao.ClinicDao;
+import com.miyzh.dao.MedicineStoreDao;
+import com.miyzh.entity.Clinic;
+import com.miyzh.entity.MedicineStore;
+import com.miyzh.entity.dto.MedicineStoreDto;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.stereotype.Service;
+
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.List;
+
+/**
+ * 库存信息同步
+ */
+
+@Slf4j
+@Service
+public class MedicineReturnService {
+
+    @Autowired
+    private ClinicDao clinicDao;
+    @Autowired
+    private MedicineStoreDao medicineStoreDao;
+    @Value ("${postApi.storeUrl}")
+    private String url;
+    @Value("${postApi.pageSize}")
+    private int pageSize;
+
+    @Async
+    public void uploadMedicine(List<Clinic> clinicList) throws InterruptedException, JsonProcessingException {
+        long startTime = System.currentTimeMillis();
+        MedicineStoreDto storeInfo = new MedicineStoreDto();
+        storeInfo.setCheckMan("");
+        storeInfo.setCheckTime(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss")));
+        for(Clinic clinic : clinicList) {
+            storeInfo.setStoreCode(clinic.getStoreCode());
+            PageInfo<MedicineStore> page = PageHelper.startPage(1, pageSize).doSelectPageInfo(() -> {
+                medicineStoreDao.listMedicineStore(clinic.getClinicId());
+            });
+            storeInfo.setMedicineInfos(page.getList());
+            this.upload(storeInfo);
+            if (page.getPages() > 1) {
+                for(int i = 2; i <= page.getPages(); i++) {
+                    PageHelper.startPage(i, pageSize).doSelectPageInfo(() -> {
+                        medicineStoreDao.listMedicineStore(clinic.getClinicId());
+                    });
+                    storeInfo.setMedicineInfos(page.getList());
+                    this.upload(storeInfo);
+                }
+            }
+        };
+        long syncTime = System.currentTimeMillis();
+        log.info("1方法执行用时--{}", startTime - syncTime);
+    };
+
+    @Async
+    public void uploadChinaMedicine(List<Clinic> clinicList) throws JsonProcessingException {
+        long startTime = System.currentTimeMillis();
+        MedicineStoreDto storeInfo = new MedicineStoreDto();
+        storeInfo.setCheckMan("");
+        storeInfo.setCheckTime(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss")));
+        for(Clinic clinic : clinicList) {
+            storeInfo.setStoreCode(clinic.getStoreCode());
+            PageInfo<MedicineStore> page = PageHelper.startPage(1, pageSize).doSelectPageInfo(() -> {
+                medicineStoreDao.listChinaMedicineStore(clinic.getClinicId());
+            });
+            storeInfo.setMedicineInfos(page.getList());
+            this.upload(storeInfo);
+            if (page.getPages() > 1) {
+                for(int i = 2; i <= page.getPages(); i++) {
+                    PageHelper.startPage(i, pageSize).doSelectPageInfo(() -> {
+                        medicineStoreDao.listChinaMedicineStore(clinic.getClinicId());
+                    });
+                    storeInfo.setMedicineInfos(page.getList());
+                    this.upload(storeInfo);
+                }
+            }
+        };
+        long syncTime = System.currentTimeMillis();
+        log.info("2方法执行用时--{}", startTime - syncTime);
+    };
+
+    public void upload (Object o) throws JsonProcessingException {
+        ObjectMapper objectMapper = new ObjectMapper();
+        String params = objectMapper.writeValueAsString(o);
+//            System.out.println(objectMapper.writeValueAsString(RestTemplateUtil.postHttp(url, params)));
+    }
+
+}

+ 100 - 0
src/main/java/com/miyzh/service/MedicineStorageService.java

@@ -0,0 +1,100 @@
+package com.miyzh.service;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import com.miyzh.dao.ClinicDao;
+import com.miyzh.dao.MedicineStorageDao;
+import com.miyzh.dao.MedicineStoreDao;
+import com.miyzh.entity.Clinic;
+import com.miyzh.entity.MedicineStorage;
+import com.miyzh.entity.MedicineStore;
+import com.miyzh.entity.dto.MedicineStoreDto;
+import com.miyzh.utils.RestTemplateUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.stereotype.Service;
+
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * 库存信息同步
+ */
+
+@Slf4j
+@Service
+public class MedicineStorageService {
+
+    @Autowired
+    private MedicineStorageDao medicineStorageDao;
+    @Value ("${postApi.storeUrl}")
+    private String url;
+    @Value("${postApi.pageSize}")
+    private int pageSize;
+
+    @Async
+    public void uploadMedicine(List<Clinic> clinicList) throws InterruptedException, JsonProcessingException {
+        long startTime = System.currentTimeMillis();
+        for(Clinic clinic : clinicList) {
+            PageInfo<MedicineStorage> page = PageHelper.startPage(1, pageSize).doSelectPageInfo(() -> {
+                medicineStorageDao.listMedicinePurchase(clinic.getClinicId());
+            });
+            Map<String, List<MedicineStorage>> map =  page.getList().stream()
+                    .collect(Collectors.groupingBy(MedicineStorage::getStoreStorageCode, Collectors.toList()));
+//            storeInfo.setMedicineInfos(page.getList());
+//            this.upload(storeInfo);
+//            if (page.getPages() > 1) {
+//                for(int i = 2; i <= page.getPages(); i++) {
+//                    PageHelper.startPage(i, pageSize).doSelectPageInfo(() -> {
+//                        medicineStoreDao.listMedicineStore(clinic.getClinicId());
+//                    });
+//                    storeInfo.setMedicineInfos(page.getList());
+//                    this.upload(storeInfo);
+//                }
+//            }
+        };
+        long syncTime = System.currentTimeMillis();
+        log.info("1方法执行用时--{}", startTime - syncTime);
+    };
+
+    @Async
+    public void uploadChinaMedicine(List<Clinic> clinicList) throws JsonProcessingException {
+        long startTime = System.currentTimeMillis();
+        MedicineStoreDto storeInfo = new MedicineStoreDto();
+        storeInfo.setCheckMan("");
+        storeInfo.setCheckTime(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss")));
+        for(Clinic clinic : clinicList) {
+            storeInfo.setStoreCode(clinic.getStoreCode());
+            PageInfo<MedicineStore> page = PageHelper.startPage(1, pageSize).doSelectPageInfo(() -> {
+                medicineStorageDao.listMedicinePurchase(clinic.getClinicId());
+            });
+            storeInfo.setMedicineInfos(page.getList());
+            this.upload(storeInfo);
+            if (page.getPages() > 1) {
+                for(int i = 2; i <= page.getPages(); i++) {
+                    PageHelper.startPage(i, pageSize).doSelectPageInfo(() -> {
+                        medicineStorageDao.listMedicinePurchase(clinic.getClinicId());
+                    });
+                    storeInfo.setMedicineInfos(page.getList());
+                    this.upload(storeInfo);
+                }
+            }
+        };
+        long syncTime = System.currentTimeMillis();
+        log.info("2方法执行用时--{}", startTime - syncTime);
+    };
+
+    public void upload (Object o) throws JsonProcessingException {
+        ObjectMapper objectMapper = new ObjectMapper();
+        String params = objectMapper.writeValueAsString(o);
+            System.out.println(objectMapper.writeValueAsString(RestTemplateUtil.postHttp(url, params)));
+    }
+
+}

+ 108 - 0
src/main/java/com/miyzh/service/MedicineStoreService.java

@@ -0,0 +1,108 @@
+package com.miyzh.service;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import com.miyzh.dao.ClinicDao;
+import com.miyzh.dao.MedicineStoreDao;
+import com.miyzh.entity.BaseResult;
+import com.miyzh.entity.Clinic;
+import com.miyzh.entity.MedicineStore;
+import com.miyzh.entity.dto.MedicineStoreDto;
+import com.miyzh.utils.RestTemplateUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.stereotype.Service;
+
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.List;
+
+/**
+ * 库存信息同步
+ */
+
+@Slf4j
+@Service
+public class MedicineStoreService {
+
+    @Autowired
+    private ClinicDao clinicDao;
+    @Autowired
+    private MedicineStoreDao medicineStoreDao;
+    @Value ("${postApi.storeUrl}")
+    private String url;
+    @Value("${postApi.pageSize}")
+    private int pageSize;
+
+    @Async
+    public void uploadMedicine(List<Clinic> clinicList) throws InterruptedException, JsonProcessingException {
+        long startTime = System.currentTimeMillis();
+        MedicineStoreDto storeInfo = new MedicineStoreDto();
+        storeInfo.setCheckMan("");
+        storeInfo.setCheckTime(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss")));
+        for(Clinic clinic : clinicList) {
+            storeInfo.setStoreCode(clinic.getStoreCode());
+            PageInfo<MedicineStore> page = PageHelper.startPage(1, pageSize).doSelectPageInfo(() -> {
+                medicineStoreDao.listMedicineStore(clinic.getClinicId());
+            });
+            storeInfo.setMedicineInfos(page.getList());
+            this.upload(storeInfo);
+            if (page.getPages() > 1) {
+                for(int i = 2; i <= page.getPages(); i++) {
+                    PageHelper.startPage(i, pageSize).doSelectPageInfo(() -> {
+                        medicineStoreDao.listMedicineStore(clinic.getClinicId());
+                    });
+                    storeInfo.setMedicineInfos(page.getList());
+                    this.upload(storeInfo);
+                }
+            }
+        };
+        long syncTime = System.currentTimeMillis();
+        log.info("uploadMedicine方法执行用时--{}", startTime - syncTime);
+    };
+
+    @Async
+    public void uploadChinaMedicine(List<Clinic> clinicList) throws JsonProcessingException {
+        long startTime = System.currentTimeMillis();
+        MedicineStoreDto storeInfo = new MedicineStoreDto();
+        storeInfo.setCheckMan("");
+        storeInfo.setCheckTime(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss")));
+        for(Clinic clinic : clinicList) {
+            storeInfo.setStoreCode(clinic.getStoreCode());
+            PageInfo<MedicineStore> page = PageHelper.startPage(1, pageSize).doSelectPageInfo(() -> {
+                medicineStoreDao.listChinaMedicineStore(clinic.getClinicId());
+            });
+            storeInfo.setMedicineInfos(page.getList());
+            this.upload(storeInfo);
+            if (page.getPages() > 1) {
+                for(int i = 2; i <= page.getPages(); i++) {
+                    PageHelper.startPage(i, pageSize).doSelectPageInfo(() -> {
+                        medicineStoreDao.listChinaMedicineStore(clinic.getClinicId());
+                    });
+                    storeInfo.setMedicineInfos(page.getList());
+                    this.upload(storeInfo);
+                }
+            }
+        };
+        long syncTime = System.currentTimeMillis();
+        log.info("uploadChinaMedicine方法执行用时--{}", startTime - syncTime);
+    };
+
+    public void upload (MedicineStoreDto storeInfo) throws JsonProcessingException {
+        ObjectMapper objectMapper = new ObjectMapper();
+        String params = objectMapper.writeValueAsString(storeInfo);
+        BaseResult baseResult = RestTemplateUtil.postHttp(url, params);
+        if (baseResult.isSuccess()) {
+            log.info(storeInfo.getStoreCode() + baseResult.getMessage());
+        } else {
+            log.error(storeInfo.getStoreCode() + baseResult.getMessage());
+        }
+
+
+    }
+
+}

+ 99 - 0
src/main/java/com/miyzh/service/OrderDetailUploadService.java

@@ -0,0 +1,99 @@
+package com.miyzh.service;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import com.miyzh.dao.ClinicDao;
+import com.miyzh.dao.MedicineStoreDao;
+import com.miyzh.entity.Clinic;
+import com.miyzh.entity.MedicineStore;
+import com.miyzh.entity.dto.MedicineStoreDto;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.stereotype.Service;
+
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.List;
+
+/**
+ * 库存信息同步
+ */
+
+@Slf4j
+@Service
+public class OrderDetailUploadService {
+
+    @Autowired
+    private ClinicDao clinicDao;
+    @Autowired
+    private MedicineStoreDao medicineStoreDao;
+    @Value ("${postApi.storeUrl}")
+    private String url;
+    @Value("${postApi.pageSize}")
+    private int pageSize;
+
+    @Async
+    public void uploadMedicine(List<Clinic> clinicList) throws InterruptedException, JsonProcessingException {
+        long startTime = System.currentTimeMillis();
+        MedicineStoreDto storeInfo = new MedicineStoreDto();
+        storeInfo.setCheckMan("");
+        storeInfo.setCheckTime(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss")));
+        for(Clinic clinic : clinicList) {
+            storeInfo.setStoreCode(clinic.getStoreCode());
+            PageInfo<MedicineStore> page = PageHelper.startPage(1, pageSize).doSelectPageInfo(() -> {
+                medicineStoreDao.listMedicineStore(clinic.getClinicId());
+            });
+            storeInfo.setMedicineInfos(page.getList());
+            this.upload(storeInfo);
+            if (page.getPages() > 1) {
+                for(int i = 2; i <= page.getPages(); i++) {
+                    PageHelper.startPage(i, pageSize).doSelectPageInfo(() -> {
+                        medicineStoreDao.listMedicineStore(clinic.getClinicId());
+                    });
+                    storeInfo.setMedicineInfos(page.getList());
+                    this.upload(storeInfo);
+                }
+            }
+        };
+        long syncTime = System.currentTimeMillis();
+        log.info("1方法执行用时--{}", startTime - syncTime);
+    };
+
+    @Async
+    public void uploadChinaMedicine(List<Clinic> clinicList) throws JsonProcessingException {
+        long startTime = System.currentTimeMillis();
+        MedicineStoreDto storeInfo = new MedicineStoreDto();
+        storeInfo.setCheckMan("");
+        storeInfo.setCheckTime(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss")));
+        for(Clinic clinic : clinicList) {
+            storeInfo.setStoreCode(clinic.getStoreCode());
+            PageInfo<MedicineStore> page = PageHelper.startPage(1, pageSize).doSelectPageInfo(() -> {
+                medicineStoreDao.listChinaMedicineStore(clinic.getClinicId());
+            });
+            storeInfo.setMedicineInfos(page.getList());
+            this.upload(storeInfo);
+            if (page.getPages() > 1) {
+                for(int i = 2; i <= page.getPages(); i++) {
+                    PageHelper.startPage(i, pageSize).doSelectPageInfo(() -> {
+                        medicineStoreDao.listChinaMedicineStore(clinic.getClinicId());
+                    });
+                    storeInfo.setMedicineInfos(page.getList());
+                    this.upload(storeInfo);
+                }
+            }
+        };
+        long syncTime = System.currentTimeMillis();
+        log.info("2方法执行用时--{}", startTime - syncTime);
+    };
+
+    public void upload (Object o) throws JsonProcessingException {
+        ObjectMapper objectMapper = new ObjectMapper();
+        String params = objectMapper.writeValueAsString(o);
+//            System.out.println(objectMapper.writeValueAsString(RestTemplateUtil.postHttp(url, params)));
+    }
+
+}

+ 32 - 0
src/main/java/com/miyzh/service/UploadExceptionLogService.java

@@ -0,0 +1,32 @@
+package com.miyzh.service;
+
+import com.miyzh.entity.UploadExceptionLog;
+import com.miyzh.dao.UploadExcepctionLogMapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * description: UploadExceptionLogService
+ * date: 2020/6/18 15:36
+ * author: SZQ
+ */
+@Service
+public class UploadExceptionLogService {
+
+    @Autowired
+    private UploadExcepctionLogMapper uploadExcepctionLogMapper;
+
+    public List<UploadExceptionLog> listUploadExceptionLogLimit(int count) {
+        return uploadExcepctionLogMapper.selectListLimit(count);
+    }
+
+    public Integer update(UploadExceptionLog uploadExceptionLog) {
+        return uploadExcepctionLogMapper.update(uploadExceptionLog);
+    }
+
+    public Integer inster(UploadExceptionLog uploadExceptionLog) {
+        return uploadExcepctionLogMapper.insert(uploadExceptionLog);
+    }
+}

+ 115 - 0
src/main/java/com/miyzh/utils/DesUtil.java

@@ -0,0 +1,115 @@
+package com.miyzh.utils;
+
+import javax.crypto.Cipher;
+import javax.crypto.SecretKey;
+import javax.crypto.SecretKeyFactory;
+import javax.crypto.spec.DESKeySpec;
+import java.security.SecureRandom;
+
+/**
+ * Created by Administrator on 2016/8/31.
+ */
+public class DesUtil {
+    /** 加密、解密key. */
+    private static final String PASSWORD_CRYPT_KEY = "kEHrDooxWHCWtfeSxvDvgqZq";
+    /** 加密算法,可用 DES,DESede,Blowfish. */
+    private final static String ALGORITHM = "DES";
+    public static void main(String[] args) throws Exception {
+        String md5Password = "/ysbj/31.htm";
+        String str = DesUtil.encrypt(md5Password);
+        System.out.println("str: " + str);
+        str = DesUtil.decrypt(str);
+        System.out.println("str: " + str);
+    }
+    /**
+     * 对数据进行DES加密.
+     * @param data 待进行DES加密的数据
+     * @return 返回经过DES加密后的数据
+     * @throws Exception
+     * @author zhursh
+     */
+    public final static String decrypt(String data) throws Exception {
+        return new String(decrypt(hex2byte(data.getBytes()), PASSWORD_CRYPT_KEY.getBytes()));
+    }
+    /**
+     * 对用DES加密过的数据进行解密.
+     * @param data DES加密数据
+     * @return 返回解密后的数据
+     * @throws Exception
+     * @author zhursh
+     */
+    public final static String encrypt(String data) throws Exception {
+        return byte2hex(encrypt(data.getBytes(), PASSWORD_CRYPT_KEY.getBytes()));
+    }
+    /**
+     * 用指定的key对数据进行DES加密.
+     * @param data 待加密的数据
+     * @param key DES加密的key
+     * @return 返回DES加密后的数据
+     * @throws Exception
+     * @author zhursh
+     */
+    private static byte[] encrypt(byte[] data, byte[] key) throws Exception {
+        // DES算法要求有一个可信任的随机数源
+        SecureRandom sr = new SecureRandom();
+        // 从原始密匙数据创建DESKeySpec对象
+        DESKeySpec dks = new DESKeySpec(key);
+        // 创建一个密匙工厂,然后用它把DESKeySpec转换成
+        // 一个SecretKey对象
+        SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(ALGORITHM);
+        SecretKey securekey = keyFactory.generateSecret(dks);
+        // Cipher对象实际完成加密操作
+        Cipher cipher = Cipher.getInstance(ALGORITHM);
+        // 用密匙初始化Cipher对象
+        cipher.init(Cipher.ENCRYPT_MODE, securekey, sr);
+        // 现在,获取数据并加密
+        // 正式执行加密操作
+        return cipher.doFinal(data);
+    }
+    /**
+     * 用指定的key对数据进行DES解密.
+     * @param data 待解密的数据
+     * @param key DES解密的key
+     * @return 返回DES解密后的数据
+     * @throws Exception
+     * @author zhursh
+     */
+    private static byte[] decrypt(byte[] data, byte[] key) throws Exception {
+        // DES算法要求有一个可信任的随机数源
+        SecureRandom sr = new SecureRandom();
+        // 从原始密匙数据创建一个DESKeySpec对象
+        DESKeySpec dks = new DESKeySpec(key);
+        // 创建一个密匙工厂,然后用它把DESKeySpec对象转换成
+        // 一个SecretKey对象
+        SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(ALGORITHM);
+        SecretKey securekey = keyFactory.generateSecret(dks);
+        // Cipher对象实际完成解密操作
+        Cipher cipher = Cipher.getInstance(ALGORITHM);
+        // 用密匙初始化Cipher对象
+        cipher.init(Cipher.DECRYPT_MODE, securekey, sr);
+        // 现在,获取数据并解密
+        // 正式执行解密操作
+        return cipher.doFinal(data);
+    }
+    public static byte[] hex2byte(byte[] b) {
+        if ((b.length % 2) != 0) throw new IllegalArgumentException("长度不是偶数");
+        byte[] b2 = new byte[b.length / 2];
+        for (int n = 0; n < b.length; n += 2) {
+            String item = new String(b, n, 2);
+            b2[n / 2] = (byte) Integer.parseInt(item, 16);
+        }
+        return b2;
+    }
+    public static String byte2hex(byte[] b) {
+        String hs = "";
+        String stmp = "";
+        for (int n = 0; n < b.length; n++) {
+            stmp = (Integer.toHexString(b[n] & 0XFF));
+            if (stmp.length() == 1)
+                hs = hs + "0" + stmp;
+            else
+                hs = hs + stmp;
+        }
+        return hs.toUpperCase();
+    }
+}

+ 86 - 0
src/main/java/com/miyzh/utils/RestTemplateUtil.java

@@ -0,0 +1,86 @@
+package com.miyzh.utils;
+
+import com.alibaba.fastjson.JSONObject;
+import com.miyzh.entity.BaseResult;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.MediaType;
+import org.springframework.http.client.ClientHttpResponse;
+import org.springframework.http.client.SimpleClientHttpRequestFactory;
+import org.springframework.http.converter.StringHttpMessageConverter;
+import org.springframework.util.MultiValueMap;
+import org.springframework.web.client.ResponseErrorHandler;
+import org.springframework.web.client.RestClientException;
+import org.springframework.web.client.RestTemplate;
+import javax.servlet.http.HttpServletResponse;
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.nio.charset.StandardCharsets;
+import java.util.Map;
+
+@Slf4j
+public class RestTemplateUtil {
+
+    // 默认时间五秒,不重试。
+    private final static int CONNEC_TIMEOUT = 5000;
+    private final static int READ_TIMEOUT   = 5000;
+    private final static int RETRY_COUNT    = 1;
+
+
+    public static BaseResult postHttp(String url, String params) {
+        RestTemplate restTemplate = simpeClient(url, CONNEC_TIMEOUT, READ_TIMEOUT);
+        // 设置·header信息
+        HttpHeaders headers = new HttpHeaders();
+        headers.setContentType(MediaType.APPLICATION_JSON);
+        for (int i = 1; i <= RETRY_COUNT; i++) {
+            try {
+                return restTemplate.postForObject(url, params, BaseResult.class);
+            } catch (RestClientException e) {
+                log.error("-----------开始-----------重试count: " + i);
+                e.printStackTrace();
+            }
+        }
+        return null;
+    }
+
+    private static RestTemplate simpeClient(String url, int connecTimeout, int readTimeout) {
+        SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory();
+        requestFactory.setConnectTimeout(connecTimeout);
+        requestFactory.setReadTimeout(readTimeout);
+        RestTemplate restTemplate = new RestTemplate(requestFactory);
+        restTemplate.getMessageConverters().set(1, new StringHttpMessageConverter(StandardCharsets.UTF_8)); // 设置编码集
+//        restTemplate.setErrorHandler(new DefaultResponseErrorHandler()); //error处理
+        return restTemplate;
+    }
+
+    private static class DefaultResponseErrorHandler implements ResponseErrorHandler {
+
+        /**
+         * 对response进行判断,如果是异常情况,返回true
+         */
+        @Override
+        public boolean hasError(ClientHttpResponse response) throws IOException {
+            return response.getStatusCode().value() != HttpServletResponse.SC_OK;
+        }
+
+        /**
+         * 异常情况时的处理方法
+         */
+        @Override
+        public void handleError(ClientHttpResponse response) throws IOException {
+            BufferedReader br = new BufferedReader(new InputStreamReader(response.getBody()));
+            StringBuilder sb = new StringBuilder();
+            String str = null;
+            while ((str = br.readLine()) != null) {
+                sb.append(str);
+            }
+            try {
+                throw new Exception(sb.toString());
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+    }
+}

+ 85 - 0
src/main/resources/application-szq.yml

@@ -0,0 +1,85 @@
+spring:
+  application:
+    name: yideb-proxy-srv
+#druid数据源相关配置配置
+  datasource:
+    url: jdbc:mysql://www.yidab.com:61002/yideb2-pre?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&rewriteBatchedStatements=true&serverTimezone=Asia/Shanghai
+    username: yideb2pre
+    password: yideb2pre1234YDB
+    driver-class-name: com.mysql.jdbc.Driver
+    type: com.alibaba.druid.pool.DruidDataSource
+
+    #连接池的配置信息
+    initialSize: 5 #连接池初始化大小
+    minIdle: 5 #最小空闲连接数
+    maxActive: 20 #最大连接数
+    maxWait: 60000 #获取连接等待超时时间
+    timeBetweenEvictionRunsMillis: 60000 #间隔多久进行一次检测,检测需要关闭的空闲连接
+    minEvictableIdleTimeMillis: 300000
+    validationQuery: SELECT 1 FROM DUAL
+    testWhileIdle: true
+    testOnBorrow: false
+    testOnReturn: false
+    poolPreparedStatements: true
+    #   配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
+    filters: stat,wall
+    maxPoolPreparedStatementPerConnectionSize: 20
+    useGlobalDataSourceStat: true
+    connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
+
+
+  #redis配置数据
+#  redis:
+#    hostName: 192.168.140.131
+#    hostName: 47.104.236.202
+#    port: 6379
+#    password: 123456
+    #  连接超时时间
+#    timeout: 5000
+#    jedis:
+#      pool:
+#    最大连接数(使用负值表示没有限制)
+#        max-active: 10
+#    连接池最大阻塞等待时间(使用负值表示没有限制)
+#        max-wait: -1
+#      连接池中最大空闲连接(使用负值表示没有限制)
+#        max-idle: 2
+#      连接池中最小空闲连接
+#        min-idle: 0
+    # 下面为连接池的补充设置,应用到上面所有数据源中
+    # 初始化大小,最小,最大
+
+  rabbitmq:
+    host: 47.95.29.209
+    port: 5672
+    username: admin
+    password: myzhrabbit1234YDB
+    listener:
+      simple:
+        #并发消费者的初始化值
+        concurrency: 10
+        #并发消费者的最大值
+        max-concurrency: 20
+        #每个消费者每次监听时可拉取处理的消息数量
+        prefetch: 5
+        #必须配置这个才会确认回调
+    publisher-confirm-type: correlated
+#    publisher-confirms: true
+    publisher-returns: true
+#mybatis 配置信息
+mybatis:
+  mapperLocations: classpath:/mapper/*.xml
+  configLocation: classpath:mybatis/mybatis-config.xml
+
+
+server:
+  port: 18099
+
+scheduling:
+  limit: 100
+postApi:
+  pageSize: 2000
+  storeUrl: http://localhost:8080/mhis-pisp/api/pis/inventory-balance/upload
+
+
+

+ 84 - 0
src/main/resources/application.yml

@@ -0,0 +1,84 @@
+spring:
+  application:
+    name: yideb-proxy-srv
+  #druid数据源相关配置配置
+  datasource:
+    url: jdbc:mysql://www.yidab.com:61002/yideb2-pre?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&rewriteBatchedStatements=true&serverTimezone=Asia/Shanghai
+    username: yideb2pre
+    password: yideb2pre1234YDB
+    driver-class-name: com.mysql.jdbc.Driver
+    type: com.alibaba.druid.pool.DruidDataSource
+
+    #连接池的配置信息
+    initialSize: 5 #连接池初始化大小
+    minIdle: 5 #最小空闲连接数
+    maxActive: 20 #最大连接数
+    maxWait: 60000 #获取连接等待超时时间
+    timeBetweenEvictionRunsMillis: 60000 #间隔多久进行一次检测,检测需要关闭的空闲连接
+    minEvictableIdleTimeMillis: 300000
+    validationQuery: SELECT 1 FROM DUAL
+    testWhileIdle: true
+    testOnBorrow: false
+    testOnReturn: false
+    poolPreparedStatements: true
+    #   配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
+    filters: stat,wall
+    maxPoolPreparedStatementPerConnectionSize: 20
+    useGlobalDataSourceStat: true
+    connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
+
+
+    #redis配置数据
+    #  redis:
+    #    hostName: 192.168.140.131
+    #    hostName: 47.104.236.202
+    #    port: 6379
+    #    password: 123456
+    #  连接超时时间
+    #    timeout: 5000
+    #    jedis:
+    #      pool:
+    #    最大连接数(使用负值表示没有限制)
+    #        max-active: 10
+    #    连接池最大阻塞等待时间(使用负值表示没有限制)
+    #        max-wait: -1
+    #      连接池中最大空闲连接(使用负值表示没有限制)
+    #        max-idle: 2
+    #      连接池中最小空闲连接
+    #        min-idle: 0
+    # 下面为连接池的补充设置,应用到上面所有数据源中
+    # 初始化大小,最小,最大
+
+  rabbitmq:
+    host: 47.95.29.209
+    port: 5672
+    username: admin
+    password: myzhrabbit1234YDB
+    listener:
+      simple:
+        #并发消费者的初始化值
+        concurrency: 10
+        #并发消费者的最大值
+        max-concurrency: 20
+        #每个消费者每次监听时可拉取处理的消息数量
+        prefetch: 5
+        #必须配置这个才会确认回调
+    publisher-confirm-type: correlated
+    #    publisher-confirms: true
+    publisher-returns: true
+#mybatis 配置信息
+mybatis:
+  mapperLocations: classpath:/mapper/*.xml
+  configLocation: classpath:mybatis/mybatis-config.xml
+
+server:
+  port: 18080
+
+scheduling:
+  limit: 100
+ws:
+  webUrl: http://15.72.29.170:86/qdmmib/webservice/runservice?wsdl
+
+
+
+

+ 220 - 0
src/main/resources/logback-spring.xml

@@ -0,0 +1,220 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<configuration scan="true" scanPeriod="60 seconds" debug="false">
+
+    <!-- 从高到地低 OFF 、 FATAL 、 ERROR 、 WARN 、 INFO 、 DEBUG 、 TRACE 、 ALL -->
+    <!-- 日志输出规则  根据当前ROOT 级别,日志输出时,级别高于root默认的级别时  会输出 -->
+    <!-- 以下  每个配置的 filter 是过滤掉输出文件里面,会出现高级别文件,依然出现低级别的日志信息,通过filter 过滤只记录本级别的日志-->
+
+
+    <!-- 属性描述 scan:性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。
+        debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。 -->
+    <!-- 定义日志文件 输入位置 -->
+    <property name="log_dir" value="/opt/yideb-proxy-srv/logs"/>
+    <!-- 日志最大的历史 30天 -->
+    <property name="maxHistory" value="30"/>
+
+    <!-- ConsoleAppender 控制台输出日志 -->
+    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
+        <!--过滤掉所有低于INFO级别的日志。-->
+        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
+            <level>INFO</level>
+        </filter>
+        <!-- 对日志进行格式化 -->
+        <encoder>
+            <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger -%msg%n</pattern>
+            <charset>UTF-8</charset> <!-- 此处设置字符集 -->
+        </encoder>
+    </appender>
+
+    <!-- ERROR级别日志 -->
+    <!-- 滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件 RollingFileAppender-->
+    <appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <!-- 过滤器,只记录WARN级别的日志 -->
+        <filter class="ch.qos.logback.classic.filter.LevelFilter">
+            <level>ERROR</level>
+            <onMatch>ACCEPT</onMatch>
+            <onMismatch>DENY</onMismatch>
+        </filter>
+        <!-- 最常用的滚动策略,它根据时间来制定滚动策略.既负责滚动也负责出发滚动 -->
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <!--日志输出位置  可相对、和绝对路径 -->
+            <fileNamePattern>${log_dir}/%d{yyyy-MM-dd}/error-log.log</fileNamePattern>
+            <!-- 可选节点,控制保留的归档文件的最大数量,超出数量就删除旧文件假设设置每个月滚动,且<maxHistory>是6,
+            则只保存最近6个月的文件,删除之前的旧文件。注意,删除旧文件是,那些为了归档而创建的目录也会被删除-->
+            <maxHistory>${maxHistory}</maxHistory>
+        </rollingPolicy>
+
+        <!--&lt;!&ndash; 按照固定窗口模式生成日志文件,当文件大于20MB时,生成新的日志文件。窗口大小是1到3,当保存了3个归档文件后,将覆盖最早的日志。  &ndash;&gt;-->
+        <!--<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">-->
+        <!--<fileNamePattern>${log_dir}/%d{yyyy-MM-dd}/.log.zip</fileNamePattern>-->
+        <!--<minIndex>1</minIndex>-->
+        <!--<maxIndex>3</maxIndex>-->
+        <!--</rollingPolicy>-->
+        <!--&lt;!&ndash; 查看当前活动文件的大小,如果超过指定大小会告知RollingFileAppender 触发当前活动文件滚动  &ndash;&gt;-->
+        <!--<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">-->
+        <!--<maxFileSize>5MB</maxFileSize>-->
+        <!--</triggeringPolicy>-->
+
+        <encoder>
+            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>
+            <charset>UTF-8</charset> <!-- 此处设置字符集 -->
+        </encoder>
+    </appender>
+
+
+    <!--&lt;!&ndash;  异步输出,异步的log片段必须在同步段后面,否则不起作用  &ndash;&gt;-->
+    <!--<appender name="ASYNC_ERROR" class="ch.qos.logback.classic.AsyncAppender">-->
+    <!--&lt;!&ndash; 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 &ndash;&gt;-->
+    <!--<discardingThreshold>0</discardingThreshold>-->
+    <!--&lt;!&ndash; 更改默认的队列的深度,该值会影响性能.默认值为512 &ndash;&gt;-->
+    <!--<queueSize>512</queueSize>-->
+    <!--&lt;!&ndash; 添加附加的appender,最多只能添加一个 &ndash;&gt;-->
+    <!--<appender-ref ref="ERROR"/>-->
+    <!--</appender>-->
+
+    <!-- WARN级别日志 appender -->
+    <appender name="WARN" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <!-- 过滤器,只记录WARN级别的日志 -->
+        <filter class="ch.qos.logback.classic.filter.LevelFilter">
+            <level>WARN</level>
+            <onMatch>ACCEPT</onMatch>
+            <onMismatch>DENY</onMismatch>
+        </filter>
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <!-- 按天回滚 daily -->
+            <fileNamePattern>${log_dir}/%d{yyyy-MM-dd}/warn-log.log
+            </fileNamePattern>
+            <!-- 日志最大的历史 60天 -->
+            <maxHistory>${maxHistory}</maxHistory>
+        </rollingPolicy>
+        <encoder>
+            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>
+            <charset>UTF-8</charset> <!-- 此处设置字符集 -->
+        </encoder>
+    </appender>
+
+
+    <!--&lt;!&ndash;  异步输出,异步的log片段必须在同步段后面,否则不起作用  &ndash;&gt;-->
+    <!--<appender name="ASYNC_WARN" class="ch.qos.logback.classic.AsyncAppender">-->
+    <!--&lt;!&ndash; 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 &ndash;&gt;-->
+    <!--<discardingThreshold>0</discardingThreshold>-->
+    <!--&lt;!&ndash; 更改默认的队列的深度,该值会影响性能.默认值为512 &ndash;&gt;-->
+    <!--<queueSize>512</queueSize>-->
+    <!--&lt;!&ndash; 添加附加的appender,最多只能添加一个 &ndash;&gt;-->
+    <!--<appender-ref ref="WARN"/>-->
+    <!--</appender>-->
+
+
+    <!-- INFO级别日志 appender -->
+    <appender name="INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <!-- 过滤器,只记录INFO级别的日志 -->
+        <filter class="ch.qos.logback.classic.filter.LevelFilter">
+            <level>INFO</level>
+            <onMatch>ACCEPT</onMatch>
+            <onMismatch>DENY</onMismatch>
+        </filter>
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <!-- 按天回滚 daily -->
+            <fileNamePattern>${log_dir}/%d{yyyy-MM-dd}/info-log.log
+            </fileNamePattern>
+            <!-- 日志最大的历史 60天 -->
+            <maxHistory>${maxHistory}</maxHistory>
+        </rollingPolicy>
+        <encoder>
+            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>
+            <charset>UTF-8</charset> <!-- 此处设置字符集 -->
+        </encoder>
+    </appender>
+
+    <!--&lt;!&ndash;  异步输出,异步的log片段必须在同步段后面,否则不起作用  &ndash;&gt;-->
+    <!--<appender name="ASYNC_INFO" class="ch.qos.logback.classic.AsyncAppender">-->
+    <!--&lt;!&ndash; 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 &ndash;&gt;-->
+    <!--<discardingThreshold>0</discardingThreshold>-->
+    <!--&lt;!&ndash; 更改默认的队列的深度,该值会影响性能.默认值为512 &ndash;&gt;-->
+    <!--<queueSize>512</queueSize>-->
+    <!--&lt;!&ndash; 添加附加的appender,最多只能添加一个 &ndash;&gt;-->
+    <!--<appender-ref ref="INFO"/>-->
+    <!--</appender>-->
+
+
+    <!-- DEBUG级别日志 appender -->
+    <appender name="DEBUG" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <!-- 过滤器,只记录DEBUG级别的日志 -->
+        <filter class="ch.qos.logback.classic.filter.LevelFilter">
+            <level>DEBUG</level>
+            <onMatch>ACCEPT</onMatch>
+            <onMismatch>DENY</onMismatch>
+        </filter>
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <!-- 按天回滚 daily -->
+            <fileNamePattern>${log_dir}/%d{yyyy-MM-dd}/debug-log.log</fileNamePattern>
+            <!-- 日志最大的历史 60天 -->
+            <maxHistory>${maxHistory}</maxHistory>
+        </rollingPolicy>
+        <encoder>
+            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>
+            <charset>UTF-8</charset> <!-- 此处设置字符集 -->
+        </encoder>
+    </appender>
+
+    <!--&lt;!&ndash; 异步输出 &ndash;&gt;-->
+    <!--<appender name="ASYNC_DEBUG" class="ch.qos.logback.classic.AsyncAppender">-->
+    <!--&lt;!&ndash; 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 &ndash;&gt;-->
+    <!--<discardingThreshold>0</discardingThreshold>-->
+    <!--&lt;!&ndash; 更改默认的队列的深度,该值会影响性能.默认值为512 &ndash;&gt;-->
+    <!--<queueSize>512</queueSize>-->
+    <!--&lt;!&ndash; 添加附加的appender,最多只能添加一个 &ndash;&gt;-->
+    <!--<appender-ref ref="DEBUG"/>-->
+    <!--</appender>-->
+
+
+    <!-- TRACE级别日志 appender -->
+    <appender name="TRACE" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <!-- 过滤器,只记录ERROR级别的日志 -->
+        <filter class="ch.qos.logback.classic.filter.LevelFilter">
+            <level>TRACE</level>
+            <onMatch>ACCEPT</onMatch>
+            <onMismatch>DENY</onMismatch>
+        </filter>
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <!-- 按天回滚 daily -->
+            <fileNamePattern>${log_dir}/%d{yyyy-MM-dd}/trace-log.log
+            </fileNamePattern>
+            <!-- 日志最大的历史 60天 -->
+            <maxHistory>${maxHistory}</maxHistory>
+        </rollingPolicy>
+        <encoder>
+            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>
+            <charset>UTF-8</charset> <!-- 此处设置字符集 -->
+        </encoder>
+    </appender>
+
+    <!--&lt;!&ndash; 异步输出 &ndash;&gt;-->
+    <!--<appender name="ASYNC_TRACE" class="ch.qos.logback.classic.AsyncAppender">-->
+    <!--&lt;!&ndash; 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 &ndash;&gt;-->
+    <!--<discardingThreshold>0</discardingThreshold>-->
+    <!--&lt;!&ndash; 更改默认的队列的深度,该值会影响性能.默认值为512 &ndash;&gt;-->
+    <!--<queueSize>512</queueSize>-->
+    <!--&lt;!&ndash; 添加附加的appender,最多只能添加一个 &ndash;&gt;-->
+    <!--<appender-ref ref="TRACE"/>-->
+    <!--</appender>-->
+
+
+    <!-- root级别   DEBUG -->
+    <root level="DEBUG">
+        <!-- 控制台输出 -->
+        <appender-ref ref="CONSOLE"/>
+        <!-- 文件输出 -->
+        <appender-ref ref="ERROR"/>
+        <appender-ref ref="WARN"/>
+        <appender-ref ref="INFO"/>
+        <appender-ref ref="DEBUG"/>
+        <appender-ref ref="TRACE"/>
+        <!--&lt;!&ndash; 文件异步输出 &ndash;&gt;-->
+        <!--<appender-ref ref="ASYNC_ERROR"/>-->
+        <!--<appender-ref ref="ASYNC_WARN"/>-->
+        <!--<appender-ref ref="ASYNC_INFO"/>-->
+        <!--<appender-ref ref="ASYNC_DEBUG"/>-->
+        <!--<appender-ref ref="ASYNC_TRACE"/>-->
+    </root>
+</configuration>

+ 18 - 0
src/main/resources/mapper/ClinicMapper.xml

@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.miyzh.dao.ClinicDao">
+
+    <resultMap id="BaseResultMap" type="com.miyzh.entity.Clinic">
+        <result column="ins_code" jdbcType="VARCHAR" property="storeCode" />
+        <result column="clinic_id" jdbcType="VARCHAR" property="clinicId" />
+    </resultMap>
+
+    <select id="listClinic" resultMap="BaseResultMap">
+
+        select
+        cci.clinic_id, cci.ins_code
+        from clc_clinic_ins cci
+    </select>
+
+
+</mapper>

+ 71 - 0
src/main/resources/mapper/MedicineMapper.xml

@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.miyzh.dao.MedicineDao">
+    <resultMap id="BaseResultMap" type="com.miyzh.entity.Medicine">
+        <!--项目类型-->
+        <result column="item_type" jdbcType="VARCHAR" property="itemType" />
+        <!--药品编码-->
+        <result column="store_medicine_code" jdbcType="VARCHAR" property="storeMedicineCode" />
+        <!--耗材名称-->
+        <result column="store_medicine_name" jdbcType="VARCHAR" property="storeMedicineName" />
+        <!--商品名-->
+        <result column="store_medicine_trade_name" jdbcType="VARCHAR" property="storeMedicineTradeName" />
+        <!--剂型编号-->
+        <result column="dosage_id" jdbcType="VARCHAR" property="dosageId" />
+        <!--剂型名称-->
+        <result column="dosage_name" jdbcType="VARCHAR" property="dosageName" />
+        <!--规格-->
+        <result column="specification" jdbcType="VARCHAR" property="specification" />
+        <!--厂商-->
+        <result column="manufacturer" jdbcType="VARCHAR" property="manufacturer" />
+        <!--产地-->
+        <result column="place" jdbcType="VARCHAR" property="place" />
+        <!--包装-->
+        <result column="pack" jdbcType="VARCHAR" property="pack" />
+        <!--型号-->
+        <result column="model" jdbcType="VARCHAR" property="model" />
+        <!--批次号-->
+        <result column="batch_no" jdbcType="VARCHAR" property="batchNo" />
+        <!--有效期-->
+        <result column="validity" jdbcType="VARCHAR" property="validity" />
+        <!--生产日期-->
+        <result column="manufacture_time" jdbcType="VARCHAR" property="manufactureTime" />
+        <!--条形码-->
+        <result column="bar_code" jdbcType="VARCHAR" property="barCode" />
+        <!--注册号-->
+        <result column="regist_no" jdbcType="VARCHAR" property="registNo" />
+        <!--供应商-->
+        <result column="delivery_company" jdbcType="VARCHAR" property="deliveryCompany" />
+        <!--经销商-->
+        <result column="distributor" jdbcType="VARCHAR" property="distributor" />
+        <!--采购单价-->
+        <result column="price" jdbcType="VARCHAR" property="price" />
+        <!--零售价-->
+        <result column="retail_price" jdbcType="VARCHAR" property="retailPrice" />
+        <!--平台目录编码-->
+        <result column="plat_item_code" jdbcType="VARCHAR" property="platItemCode" />
+        <!--平台目录名称-->
+        <result column="plat_item_name" jdbcType="VARCHAR" property="platItemName" />
+        <!--医保药材编码-->
+        <result column="item_code" jdbcType="VARCHAR" property="itemCode" />
+        <!--医保药材名称-->
+        <result column="item_name" jdbcType="VARCHAR" property="itemName" />
+        <!--医保药材商品名-->
+        <result column="trade_name" jdbcType="VARCHAR" property="tradeName" />
+        <!--省医保目录编码-->
+        <result column="province_item_code" jdbcType="VARCHAR" property="provinceItemCode" />
+        <!--省医保目录名称-->
+        <result column="province_item_name" jdbcType="VARCHAR" property="provinceItemName" />
+        <!--国家医保目录编码-->
+        <result column="country_item_code" jdbcType="VARCHAR" property="countryItemCode" />
+        <!--国家医保目录名称-->
+        <result column="country_item_name" jdbcType="VARCHAR" property="countryItemName" />
+        <!--库房编码-->
+        <result column="warehouse_code" jdbcType="VARCHAR" property="warehouseCode" />
+        <!--库房名称-->
+        <result column="warehouse_name" jdbcType="VARCHAR" property="warehouseName" />
+        <!--货架号-->
+        <result column="goods_allocation" jdbcType="VARCHAR" property="goodsAllocation" />
+    </resultMap>
+
+</mapper>

+ 99 - 0
src/main/resources/mapper/MedicineReturnMapper.xml

@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.miyzh.dao.MedicineReturnDao">
+
+    <resultMap id="BaseResultMap" type="com.miyzh.entity.MedicineStore" extends="com.miyzh.dao.MedicineDao.BaseResultMap">
+        <!--剩余数量-->
+        <result column="current_num" jdbcType="VARCHAR" property="currentNum" />
+    </resultMap>
+
+    <select id="listMedicineStore" resultMap="BaseResultMap" parameterType="java.lang.String">
+        select
+        cm.medicine_category as item_type,
+        cm.med_ins_backup_id as store_medicine_code,
+        cm.medicine_c_name as store_medicine_name,
+        cm.medicine_name_goods as store_medicine_trade_name,
+        ifnull(idm.formulation, " ") as dosage_id,
+        cm.medicine_dosage_forms as dosage_name,
+        cm.medicine_specifications as specification,
+        cm.medicine_manufacturer_name as manufacturer,
+        cm.medicine_place as place,
+        idm.medicine_package as pack,
+        " " as model,
+        csd.stock_batch_number as batch_no,
+        csd.create_time as medicine_deadline,
+        csd.medicine_deadline as manufacture_time,
+        cm.medicine_barcode as bar_code,
+        "" as regist_no,
+        csd.stock_channel as delivery_company,
+        "999999999" as distributor,
+        csd.stock_bid as price,
+        idm.sale_price as retail_price,
+        "" as plat_item_code,
+        "" as plat_item_name,
+        idm.standard_menu_code as item_code,
+        idm.insurance_medicine_name as item_name,
+        "999999999" as approval_number,
+        csd.remain_number as current_num
+        from
+            clc_stock_detail csd
+        left join
+            clc_medicine cm
+        on
+            cm.clinic_id = csd.clinic_id and csd.medicine_id=cm.medicine_id
+        left join
+            ins_d_medicine idm
+        on
+            csd.clinic_id = idm.clinic_id and csd.medicine_id=idm.medicine_id
+        where
+            csd.clinic_id = #{clinicId}
+        GROUP BY
+            csd.medicine_id
+    </select>
+
+    <select id="listChinaMedicineStore" resultMap="BaseResultMap" parameterType="java.lang.String">
+        select
+        ccm.medicine_category as item_type,
+        ccm.med_ins_backup_id as store_medicine_code,
+        ccm.medicine_name as store_medicine_name,
+        ccm.medicine_name as store_medicine_trade_name,
+        ifnull(idm.formulation, " ") as dosage_id,
+        ccm.medicine_rate_last as dosage_name,
+        ccm.medicine_specifications as specification,
+        ccm.medicine_manufacturer_name as manufacturer,
+        ccm.medicine_address as place,
+        idm.medicine_package as pack,
+        " " as model,
+        ccsp.stock_batch_number as batch_no,
+        ccm.create_time as medicine_deadline,
+        ccsp.medicine_deadline as manufacture_time,
+        "0000000000000" as bar_code,
+        "" as regist_no,
+        ccsp.stock_channel as delivery_company,
+        "999999999" as distributor,
+        ccsp.stock_bid as price,
+        idm.sale_price as retail_price,
+        "" as plat_item_code,
+        "" as plat_item_name,
+        idm.standard_menu_code as item_code,
+        idm.insurance_medicine_name as item_name,
+        "999999999" as approval_number,
+        ccsp.remain_number as current_num
+        from
+            clc_china_stock_profit ccsp
+        left join
+            clc_china_medicine ccm
+        on
+            ccm.clinic_id = ccsp.clinic_id and ccsp.medicine_id=ccm.medicine_id
+        left join
+            ins_d_medicine idm
+        on
+            ccsp.clinic_id = idm.clinic_id and ccsp.medicine_id=idm.medicine_id
+        where
+            ccsp.clinic_id = #{clinicId}
+        GROUP BY
+            ccsp.medicine_id
+    </select>
+
+
+</mapper>

+ 101 - 0
src/main/resources/mapper/MedicineStorageMapper.xml

@@ -0,0 +1,101 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.miyzh.dao.MedicineStorageDao">
+
+    <resultMap id="BaseResultMap" type="com.miyzh.entity.MedicineStorage" extends="com.miyzh.dao.MedicineDao.BaseResultMap">
+        <!--实际入库数量-->
+        <result column="storage_quantity" jdbcType="VARCHAR" property="storageQuantity" />
+        <!--机构入库编码-->
+        <result column="store_storage_code" jdbcType="VARCHAR" property="storeStorageCode" />
+    </resultMap>
+
+    <select id="listMedicinePurchase" resultMap="BaseResultMap" parameterType="java.lang.String">
+        SELECT DISTINCT
+            cm.medicine_category as item_type,
+            IF
+            ( length( cm.med_ins_backup_id )> 0, cm.med_ins_backup_id, cm.medicine_id ) AS store_medicine_code,
+            cm.medicine_c_name as store_medicine_name,
+            cm.medicine_specifications AS YPGG,
+            cm.medicine_unit AS YPDW,
+            '采购入库' BRXM,
+            cp.purchase_no as store_storage_code,
+            sum( csd.stock_change_number ) AS YPSL,
+            csd.stock_bid AS JHJG,
+            cs.medicine_retail_price AS YPDJ,
+            sum( csd.stock_change_number * cs.medicine_retail_price ) AS YPJE,
+            cp.create_time AS CZRQ,
+            cp.create_username AS CZGH,
+            cp.id AS HIS_ID
+        FROM
+            clc_stock_detail csd,
+            clc_medicine cm,
+            clc_stock cs,
+            clc_stock_inbound csi,
+            clc_purchase cp
+        WHERE
+            csd.medicine_id = cm.medicine_id
+            AND csd.clinic_id = cm.clinic_id
+            AND csd.clinic_id = cs.clinic_id
+            AND csd.medicine_id = cs.medicine_id
+            AND cs.warehouse_code = '1'
+            AND csd.clinic_id = csi.clinic_id
+            AND csd.id = csi.id
+            AND csd.clinic_id = cp.clinic_id
+            AND cp.id = csi.purchase_id
+            AND csd.clinic_id = #{clinicId}
+            AND timestamp_number != 'default'
+            AND cm.is_base = 1
+        GROUP BY
+            cp.id,
+            csd.medicine_id
+        ORDER BY
+            cp.create_time,
+            csd.medicine_id
+    </select>
+
+    <select id="listChinaMedicineStore" resultMap="BaseResultMap" parameterType="java.lang.String">
+        select
+        ccm.medicine_category as item_type,
+        ccm.med_ins_backup_id as store_medicine_code,
+        ccm.medicine_name as store_medicine_name,
+        ccm.medicine_name as store_medicine_trade_name,
+        ifnull(idm.formulation, " ") as dosage_id,
+        ccm.medicine_rate_last as dosage_name,
+        ccm.medicine_specifications as specification,
+        ccm.medicine_manufacturer_name as manufacturer,
+        ccm.medicine_address as place,
+        idm.medicine_package as pack,
+        " " as model,
+        ccsp.stock_batch_number as batch_no,
+        ccm.create_time as medicine_deadline,
+        ccsp.medicine_deadline as manufacture_time,
+        "0000000000000" as bar_code,
+        "" as regist_no,
+        ccsp.stock_channel as delivery_company,
+        "999999999" as distributor,
+        ccsp.stock_bid as price,
+        idm.sale_price as retail_price,
+        "" as plat_item_code,
+        "" as plat_item_name,
+        idm.standard_menu_code as item_code,
+        idm.insurance_medicine_name as item_name,
+        "999999999" as approval_number,
+        ccsp.remain_number as current_num
+        from
+            clc_china_stock_profit ccsp
+        left join
+            clc_china_medicine ccm
+        on
+            ccm.clinic_id = ccsp.clinic_id and ccsp.medicine_id=ccm.medicine_id
+        left join
+            ins_d_medicine idm
+        on
+            ccsp.clinic_id = idm.clinic_id and ccsp.medicine_id=idm.medicine_id
+        where
+            ccsp.clinic_id = #{clinicId}
+        GROUP BY
+            ccsp.medicine_id
+    </select>
+
+
+</mapper>

+ 101 - 0
src/main/resources/mapper/MedicineStoreMapper.xml

@@ -0,0 +1,101 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.miyzh.dao.MedicineStoreDao">
+
+    <resultMap id="BaseResultMap" type="com.miyzh.entity.MedicineStore" extends="com.miyzh.dao.MedicineDao.BaseResultMap">
+        <!--批准文号-->
+        <result column="approval_number" jdbcType="VARCHAR" property="approvalNumber" />
+        <!--剩余数量-->
+        <result column="current_num" jdbcType="VARCHAR" property="currentNum" />
+    </resultMap>
+
+    <select id="listMedicineStore" resultMap="BaseResultMap" parameterType="java.lang.String">
+        select
+        cm.medicine_category as item_type,
+        cm.med_ins_backup_id as store_medicine_code,
+        cm.medicine_c_name as store_medicine_name,
+        cm.medicine_name_goods as store_medicine_trade_name,
+        ifnull(idm.formulation, " ") as dosage_id,
+        cm.medicine_dosage_forms as dosage_name,
+        cm.medicine_specifications as specification,
+        cm.medicine_manufacturer_name as manufacturer,
+        cm.medicine_place as place,
+        idm.medicine_package as pack,
+        " " as model,
+        csd.stock_batch_number as batch_no,
+        csd.create_time as medicine_deadline,
+        csd.medicine_deadline as manufacture_time,
+        cm.medicine_barcode as bar_code,
+        "" as regist_no,
+        csd.stock_channel as delivery_company,
+        "999999999" as distributor,
+        csd.stock_bid as price,
+        idm.sale_price as retail_price,
+        "" as plat_item_code,
+        "" as plat_item_name,
+        idm.standard_menu_code as item_code,
+        idm.insurance_medicine_name as item_name,
+        "999999999" as approval_number,
+        csd.remain_number as current_num
+        from
+            clc_stock_detail csd
+        left join
+            clc_medicine cm
+        on
+            cm.clinic_id = csd.clinic_id and csd.medicine_id=cm.medicine_id
+        left join
+            ins_d_medicine idm
+        on
+            csd.clinic_id = idm.clinic_id and csd.medicine_id=idm.medicine_id
+        where
+            csd.clinic_id = #{clinicId}
+        GROUP BY
+            csd.medicine_id
+    </select>
+
+    <select id="listChinaMedicineStore" resultMap="BaseResultMap" parameterType="java.lang.String">
+        select
+        ccm.medicine_category as item_type,
+        ccm.med_ins_backup_id as store_medicine_code,
+        ccm.medicine_name as store_medicine_name,
+        ccm.medicine_name as store_medicine_trade_name,
+        ifnull(idm.formulation, " ") as dosage_id,
+        ccm.medicine_rate_last as dosage_name,
+        ccm.medicine_specifications as specification,
+        ccm.medicine_manufacturer_name as manufacturer,
+        ccm.medicine_address as place,
+        idm.medicine_package as pack,
+        " " as model,
+        ccsp.stock_batch_number as batch_no,
+        ccm.create_time as medicine_deadline,
+        ccsp.medicine_deadline as manufacture_time,
+        "0000000000000" as bar_code,
+        "" as regist_no,
+        ccsp.stock_channel as delivery_company,
+        "999999999" as distributor,
+        ccsp.stock_bid as price,
+        idm.sale_price as retail_price,
+        "" as plat_item_code,
+        "" as plat_item_name,
+        idm.standard_menu_code as item_code,
+        idm.insurance_medicine_name as item_name,
+        "999999999" as approval_number,
+        ccsp.remain_number as current_num
+        from
+            clc_china_stock_profit ccsp
+        left join
+            clc_china_medicine ccm
+        on
+            ccm.clinic_id = ccsp.clinic_id and ccsp.medicine_id=ccm.medicine_id
+        left join
+            ins_d_medicine idm
+        on
+            ccsp.clinic_id = idm.clinic_id and ccsp.medicine_id=idm.medicine_id
+        where
+            ccsp.clinic_id = #{clinicId}
+        GROUP BY
+            ccsp.medicine_id
+    </select>
+
+
+</mapper>

+ 56 - 0
src/main/resources/mapper/UploadExpectionLogMapping.xml

@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.miyzh.dao.UploadExcepctionLogMapper">
+
+    <resultMap id="BaseResultMap" type="com.miyzh.entity.UploadExceptionLog">
+        <result column="id" jdbcType="BIGINT" property="id" />
+        <result column="trade_code" jdbcType="VARCHAR" property="tradeCode" />
+        <result column="serial_number" jdbcType="VARCHAR" property="serialNumber" />
+        <result column="upload_info" jdbcType="LONGVARCHAR" property="uploadInfo" />
+        <result column="error_msg" jdbcType="VARCHAR" property="errorMsg" />
+        <result column="retry_count" jdbcType="INTEGER" property="retryCount" />
+        <result column="status" jdbcType="INTEGER" property="status" />
+        <result column="is_del" jdbcType="INTEGER" property="isDel" />
+        <result column="create_date" jdbcType="TIMESTAMP" property="createDate" />
+        <result column="modify_date" jdbcType="TIMESTAMP" property="modifyDate" />
+    </resultMap>
+
+    <select id="selectListLimit" resultMap="BaseResultMap">
+        select
+            id, trade_code, serial_number, upload_info, error_msg, retry_count, status, is_del, create_date, modify_date
+        from
+            upload_exception_log
+        where
+            is_del = 1
+            and status = 0
+            order by modify_date asc
+            limit 0, #{limit}
+    </select>
+
+    <insert id="insert" parameterType="com.miyzh.entity.UploadExceptionLog">
+        insert into upload_exception_log
+        (trade_code, serial_number, upload_info, error_msg, retry_count, status, is_del,modify_date,create_date)
+        values
+        (#{tradeCode},#{serialNumber}, #{uploadInfo}, #{errorMsg}, 1, #{status}, #{isDel}, now(), now())
+    </insert>
+    <update id="update" parameterType="com.miyzh.entity.UploadExceptionLog">
+        update upload_exception_log
+        set
+        <if test="serialNumber">
+            serial_number = #{serialNumber},
+        </if>
+        <if test="errorMsg">
+            error_msg = #{errorMsg},
+        </if>
+        <if test="status">
+            status = #{status},
+        </if>
+        <if test="isDel">
+            is_del = #{isDel},
+        </if>
+        modify_date = now(),
+        retry_count = retry_count+1
+        where id=#{id}
+    </update>
+
+</mapper>

+ 29 - 0
src/main/resources/mybatis/mybatis-config.xml

@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE configuration
+        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-config.dtd">
+<configuration>
+    <!-- 设置运行参数 -->
+    <settings>
+        <!-- 全局映射器启用缓存 -->
+        <setting name="cacheEnabled" value="true" />
+        <!-- 查询时,关闭关联对象及时加载以提高性能 -->
+        <setting name="lazyLoadingEnabled" value="false" />
+        <!-- 设置关联对象加载的形态,此处为按需加载字段(加载字段由SQL指定),不会加载关联表的所有字段,以提高性能 -->
+        <setting name="aggressiveLazyLoading" value="false" />
+        <!-- 对于位置的SQL查询,允许返回不同的结果集以达到通用的效果 -->
+        <setting name="multipleResultSetsEnabled" value="true" />
+        <!-- 允许使用列标签代替列明 -->
+        <setting name="useColumnLabel" value="true" />
+        <!-- 允许使用自定义的主键值(比如由程序生成的UUID 32位编码作为键值), 数据表的pk生成策略将被覆盖 -->
+        <setting name="useGeneratedKeys" value="true" />
+        <!-- 给予被嵌套的resultMap以字段-属性的映射支持 -->
+        <setting name="autoMappingBehavior" value="PARTIAL" />
+        <!-- 对于批量更新操作缓存SQL以提高性能 -->
+        <setting name="defaultExecutorType" value="REUSE" />
+        <!-- 数据库超过25000秒仍未响应则超时 -->
+        <setting name="defaultStatementTimeout" value="25000" />
+        <!-- 打印查询语句,如果将它注释,你的sql就可以打印进日志;如果将它放开,你的sql就打印到了控制台 -->
+        <!-- <setting name="logImpl" value="STDOUT_LOGGING" /> -->
+    </settings>
+</configuration>

+ 60 - 0
src/main/resources/mybatis/mybatis-generator.xml

@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
+        "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
+<generatorConfiguration>
+
+    <context id="DB2Tables" targetRuntime="MyBatis3">
+        <!--覆盖生成XML文件,1.3.7及之后-->
+        <plugin type="org.mybatis.generator.plugins.UnmergeableXmlMappersPlugin" />
+        <commentGenerator>
+            <property name="javaFileEncoding" value="UTF-8"/>
+            <!-- 是否去除自动生成的注释 true:是 : false:否 -->
+            <property name="suppressAllComments" value="true" />
+            <property name="suppressDate" value="true" />
+        </commentGenerator>
+        <!--数据库链接地址账号密码-->
+        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
+                        connectionURL="jdbc:mysql://localhost:3306/test"
+                        userId="root"
+                        password="root">
+        </jdbcConnection>
+        <javaTypeResolver type="org.mybatis.generator.internal.types.JavaTypeResolverDefaultImpl">
+            <property name="forceBigDecimals" value="false"/>
+        </javaTypeResolver>
+        <!--生成Model类存放位置-->
+        <javaModelGenerator targetPackage="com.daohe.financeplus.domain.auto" targetProject="src/main/java">
+            <property name="enableSubPackages" value="true"/>
+            <property name="trimStrings" value="true"/>
+        </javaModelGenerator>
+        <!--生成映射文件存放位置-->
+        <sqlMapGenerator targetPackage="mappers.auto" targetProject="src/main/resources">
+            <property name="enableSubPackages" value="true"/>
+        </sqlMapGenerator>
+        <!--生成Dao类存放位置-->
+        <!-- 客户端代码,生成易于使用的针对Model对象和XML配置文件 的代码
+                type="ANNOTATEDMAPPER",生成Java Model 和基于注解的Mapper对象
+                type="MIXEDMAPPER",生成基于注解的Java Model 和相应的Mapper对象
+                type="XMLMAPPER",生成SQLMap XML文件和独立的Mapper接口
+        -->
+        <javaClientGenerator type="XMLMAPPER" targetPackage="com.daohe.financeplus.mapper.auto" targetProject="src/main/java">
+            <property name="enableSubPackages" value="true"/>
+        </javaClientGenerator>
+        <!--生成对应表及类名-->
+        <table tableName="tb_newbee_mall_order" domainObjectName="Order">
+            <generatedKey column="id" sqlStatement="Mysql" identity="true" />
+        </table>
+        <!--<table tableName="notice"-->
+               <!--domainObjectName="Notice"-->
+               <!--enableCountByExample="false"-->
+               <!--enableUpdateByExample="false"-->
+               <!--enableDeleteByExample="false"-->
+               <!--enableSelectByExample="false"-->
+               <!--selectByExampleQueryId="false">-->
+            <!--&lt;!&ndash;<columnOverride column="power_type" jdbcType="TINYINT" javaType="java.lang.Integer"/>&ndash;&gt;-->
+        <!--</table>-->
+    </context>
+</generatorConfiguration>
+        <!-- CMD下执行 -->
+        <!-- mvn install:install-file -Dfile=D:/workspace-zxpt-trunk/zxpt/zxpt-mybatis-generator/target/zxpt-mybatis-generator-1.0-SNAPSHOT.jar -DgroupId=zxpt -DartifactId=zxpt-mybatis-generator -Dversion=1.0-SNAPSHOT -Dpackaging=jar -->
+        <!-- ta-mybatis-generator 工程上右键->Run As->Maven Build打开窗口后在Goals栏填写: mybatis-generator:generate -->
+        <!-- 然后run可生成代码 -->

+ 13 - 0
src/test/java/com/miyzh/YidebProxySrvApplicationTests.java

@@ -0,0 +1,13 @@
+package com.miyzh;
+
+import org.junit.jupiter.api.Test;
+import org.springframework.boot.test.context.SpringBootTest;
+
+@SpringBootTest
+class YidebProxySrvApplicationTests {
+
+    @Test
+    void contextLoads() {
+    }
+
+}