Index: src/main/java/com/novaone/common/Application.java
===================================================================
--- src/main/java/com/novaone/common/Application.java	(revision 28720)
+++ src/main/java/com/novaone/common/Application.java	(revision 28721)
@@ -31,33 +31,5 @@
     public static void main(String[] args) {
         SpringApplication.run(Application.class, args);
     }
-
-    @Autowired
-    private DataSource dataSource;
-
-    // 创建SqlSessionFactory
-    @Bean("sqlSessionFactory")
-    public SqlSessionFactoryBean sqlSessionFactoryBean() throws Exception {
-
-        SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
-        sqlSessionFactoryBean.setDataSource(dataSource);
-
-        PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
-
-        sqlSessionFactoryBean.setMapperLocations(resolver.getResources("classpath:/com/novaone/dao/Mapper/*.xml"));
-
-        return sqlSessionFactoryBean;
-    }
-
-    @Bean
-    public SqlSessionTemplate sqlSessionTemplate(SqlSessionFactory sqlSessionFactory) {
-        return new SqlSessionTemplate(sqlSessionFactory);
-    }
-
-    // 创建事物管理器
-    @Bean
-    public PlatformTransactionManager transactionManager() {
-        return new DataSourceTransactionManager(dataSource);
-    }
 	
 }
Index: src/main/java/com/novaone/common/DruidDataSourceConfiguration.java
===================================================================
--- src/main/java/com/novaone/common/DruidDataSourceConfiguration.java	(revision 28720)
+++ src/main/java/com/novaone/common/DruidDataSourceConfiguration.java	(revision 28721)
@@ -4,28 +4,31 @@
 
 import org.apache.ibatis.session.SqlSessionFactory;
 import org.mybatis.spring.SqlSessionFactoryBean;
+import org.mybatis.spring.SqlSessionTemplate;
+import org.mybatis.spring.annotation.MapperScan;
 import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.boot.context.properties.ConfigurationProperties;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.context.annotation.Primary;
 import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
+import org.springframework.jdbc.datasource.DataSourceTransactionManager;
 
 import com.alibaba.druid.pool.DruidDataSource;
 
 @Configuration
+@MapperScan(basePackages = { "com.novaone.dao" }, sqlSessionFactoryRef = "mysqlSqlSessionFactory")
 public class DruidDataSourceConfiguration {
     @Bean("druidDataSource")
-	@ConfigurationProperties(prefix = "spring.datasource")
-	public DataSource druidDataSource(){
-		DataSource druidDataSource = new DruidDataSource();
-		return druidDataSource;
-	}
+    @ConfigurationProperties(prefix = "spring.datasource")
+    @Primary
+    public DataSource druidDataSource() {
+        return new DruidDataSource();
+    }
 
-    @Bean(name = "vopSqlSessionFactory")
-    @Qualifier
+    @Bean(name = "mysqlSqlSessionFactory")
     @Primary
-    public SqlSessionFactory vopSqlSessionFactory(@Qualifier("druidDataSource") DataSource druidDataSource)
+    public SqlSessionFactory mysqlSqlSessionFactory(@Qualifier("druidDataSource") DataSource druidDataSource)
             throws Exception {
         final SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean();
         sessionFactoryBean.setDataSource(druidDataSource);
@@ -36,4 +39,18 @@
 
         return sessionFactoryBean.getObject();
     }
+    
+    @Bean(name = "mysqlTransactionManager") // 配置事务
+    @Primary
+    public DataSourceTransactionManager mysqlTransactionManager(
+            @Qualifier("druidDataSource") DataSource druidDataSource) {
+        return new DataSourceTransactionManager(druidDataSource);
+    }
+
+    @Bean(name = "mysqlSqlSessionTemplate")
+    @Primary
+    public SqlSessionTemplate testSqlSessionTemplate(
+            @Qualifier("mysqlSqlSessionFactory") SqlSessionFactory sqlSessionFactory) {
+        return new SqlSessionTemplate(sqlSessionFactory);
+    }
 }
Index: src/main/java/com/novaone/common/DruidDataSourceConfigurationFruitease.java
===================================================================
--- src/main/java/com/novaone/common/DruidDataSourceConfigurationFruitease.java	(revision 0)
+++ src/main/java/com/novaone/common/DruidDataSourceConfigurationFruitease.java	(revision 28721)
@@ -0,0 +1,51 @@
+package com.novaone.common;
+
+import javax.sql.DataSource;
+
+import org.apache.ibatis.session.SqlSessionFactory;
+import org.mybatis.spring.SqlSessionFactoryBean;
+import org.mybatis.spring.SqlSessionTemplate;
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
+import org.springframework.jdbc.datasource.DataSourceTransactionManager;
+
+@Configuration
+@MapperScan(basePackages = { "com.novaone.fdao" }, sqlSessionFactoryRef = "fruiteaseSqlSessionFactory")
+public class DruidDataSourceConfigurationFruitease {
+    @Bean("fruiteaseDataSource")
+    @ConfigurationProperties(prefix = "spring.datasource.fruitease")
+    public DataSource fruiteaseDataSource() {
+        return DataSourceBuilder.create().build();
+    }
+
+    @Bean(name = "fruiteaseSqlSessionFactory")
+    public SqlSessionFactory fruiteaseSqlSessionFactory(
+            @Qualifier("fruiteaseDataSource") DataSource fruiteaseDataSource) throws Exception {
+        final SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean();
+        sessionFactoryBean.setDataSource(fruiteaseDataSource);
+
+         PathMatchingResourcePatternResolver resolver = new
+         PathMatchingResourcePatternResolver();
+         sessionFactoryBean.setMapperLocations(resolver.getResources("classpath:/com/novaone/fdao/Mapper/*.xml"));
+        sessionFactoryBean.getObject().getConfiguration().setMapUnderscoreToCamelCase(true);
+
+        return sessionFactoryBean.getObject();
+    }
+
+    @Bean(name = "fruiteaseTransactionManager") // 配置事务
+    public DataSourceTransactionManager fruiteaseTransactionManager(
+            @Qualifier("fruiteaseDataSource") DataSource fruiteaseDataSource) {
+        return new DataSourceTransactionManager(fruiteaseDataSource);
+    }
+
+    @Bean(name = "fruiteaseSqlSessionTemplate")
+    public SqlSessionTemplate fruiteaseSqlSessionTemplate(
+            @Qualifier("fruiteaseSqlSessionFactory") SqlSessionFactory fruiteaseSqlSessionFactory) {
+        return new SqlSessionTemplate(fruiteaseSqlSessionFactory);
+    }
+}
Index: src/main/java/com/novaone/control/Corn.java
===================================================================
--- src/main/java/com/novaone/control/Corn.java	(revision 28720)
+++ src/main/java/com/novaone/control/Corn.java	(revision 28721)
@@ -1,56 +1,47 @@
 package com.novaone.control;
 
-import java.io.IOException;
-import java.util.Date;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-
 import javax.annotation.Resource;
 
 import org.apache.commons.lang.time.FastDateFormat;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
 
+import com.novaone.entity.TaxCompany;
+import com.novaone.fdao.HddzMapper;
 import com.novaone.service.MainService;
 
+
 @Component
 public class Corn {
 
     @Resource
     private MainService mainService;
 
-    // @Autowired
-    // private Environment env;
-
     FastDateFormat fdf = FastDateFormat.getInstance("yyyy-MM-dd HH:mm:ss");
 
     private final Logger log = LoggerFactory.getLogger(this.getClass());
-
-    ExecutorService executorService = Executors.newFixedThreadPool(30);
-
-    // 每天晚上8-23点开始 每5分钟执行一次
-    @Scheduled(cron = "0 0/3 10-23 * * ?")
+    
+    @Value("${CURRENT_COMPANY_CODE}")
+    public String CURRENT_COMPANY_CODE;
+    
+    @Resource
+    private HddzMapper hddzMapper;
+    
+//    @Scheduled(cron = "0 0/1 * * * ?")
+    @Scheduled(cron = "0 0/20 7 * * ?")
     public void core() {
-        log.info(fdf.format(new Date()) + " start core");
+        log.info("core开始");
         try {
-            mainService.checkDownloadFiles();
+        	TaxCompany company = new TaxCompany();
+        	company.setCompanycode(CURRENT_COMPANY_CODE);
+        	mainService.checkDownloadFiles(company);
         } catch (Exception e) {
             e.printStackTrace();
             log.error(e.getMessage());
         }
-        log.info(fdf.format(new Date()) + " start core end");
+        log.info("core结束");
     }
-
-    // 防止进程不回收，每天凌晨1点kill一次
-    @Scheduled(cron = "0 0 1 * * ?")
-    public void kill() {
-        try {
-            Runtime.getRuntime().exec("taskkill /F /im " + "chromedriver.exe");
-            Runtime.getRuntime().exec("taskkill /F /im " + "chrome.exe");
-        } catch (IOException e1) {
-            e1.printStackTrace();
-        }
-    }
 }
Index: src/main/java/com/novaone/control/MainControl.java
===================================================================
--- src/main/java/com/novaone/control/MainControl.java	(revision 28720)
+++ src/main/java/com/novaone/control/MainControl.java	(revision 28721)
@@ -65,7 +65,7 @@
             c.setTime(date);
             c.add(Calendar.DAY_OF_MONTH, -1);
             String day = df.format(c.getTime());
-            mainService.splider(day);
+            mainService.splider(day,null);
             return model;
         } catch (Exception e) {
             e.printStackTrace();
Index: src/main/java/com/novaone/dao/InfoMapper.java
===================================================================
--- src/main/java/com/novaone/dao/InfoMapper.java	(revision 28720)
+++ src/main/java/com/novaone/dao/InfoMapper.java	(revision 28721)
@@ -21,4 +21,10 @@
     int selectInfoCount(Info info);
 
     List<Info> selectInfoPageList(SearchPageUtil searchPageUtil);
+    
+    List<Info> selectInfoByDay(@Param("day") String day, @Param("company") String company);
+    
+    List<Info> listInfoEnd(@Param("day") String day, @Param("company") String company);
+    
+    void addDataBatchInfo(@Param("list") List<Info> list);
 }
\ No newline at end of file
Index: src/main/java/com/novaone/dao/MainMapper.java
===================================================================
--- src/main/java/com/novaone/dao/MainMapper.java	(revision 28720)
+++ src/main/java/com/novaone/dao/MainMapper.java	(revision 28721)
@@ -1,6 +1,12 @@
 package com.novaone.dao;
 
+import java.util.List;
+
+import org.apache.ibatis.annotations.Param;
+
+import com.novaone.entity.Error;
 import com.novaone.entity.Main;
+import com.novaone.entity.TaxCompany;
 
 public interface MainMapper {
     int deleteByPrimaryKey(String id);
@@ -15,5 +21,9 @@
 
     int updateByPrimaryKey(Main record);
 
-    Main selectByDay(String day);
+    Main selectByDay(@Param("day") String day, @Param("company") String company);
+    
+    void insertErrorData(Error error);
+    
+    List<TaxCompany> selectCompany();
 }
\ No newline at end of file
Index: src/main/java/com/novaone/dao/Mapper/InfoMapper.xml
===================================================================
--- src/main/java/com/novaone/dao/Mapper/InfoMapper.xml	(revision 28720)
+++ src/main/java/com/novaone/dao/Mapper/InfoMapper.xml	(revision 28721)
@@ -5,14 +5,11 @@
     <result column="id" property="id" jdbcType="VARCHAR" />
     <result column="file_name" property="fileName" jdbcType="VARCHAR" />
     <result column="main_id" property="mainId" jdbcType="VARCHAR" />
-    <result column="page" property="page" jdbcType="INTEGER" />
     <result column="status" property="status" jdbcType="VARCHAR" />
   </resultMap>
   <insert id="insert" parameterType="com.novaone.entity.Info" >
-    insert into tax_info (id, file_name, main_id, 
-      page, status)
-    values (#{id,jdbcType=VARCHAR}, #{fileName,jdbcType=VARCHAR}, #{mainId,jdbcType=VARCHAR}, 
-      #{page,jdbcType=INTEGER}, #{status,jdbcType=VARCHAR})
+    insert into tax_info (id, file_name, main_id, status)
+    values (#{id,jdbcType=VARCHAR}, #{fileName,jdbcType=VARCHAR}, #{mainId,jdbcType=VARCHAR}, #{status,jdbcType=VARCHAR})
   </insert>
   <insert id="insertSelective" parameterType="com.novaone.entity.Info" >
     insert into tax_info
@@ -26,12 +23,12 @@
       <if test="mainId != null" >
         main_id,
       </if>
-      <if test="page != null" >
-        page,
-      </if>
       <if test="status != null" >
         status,
       </if>
+      <if test="crt_time != null" >
+        crt_time,
+      </if>
     </trim>
     <trim prefix="values (" suffix=")" suffixOverrides="," >
       <if test="id != null" >
@@ -43,33 +40,47 @@
       <if test="mainId != null" >
         #{mainId,jdbcType=VARCHAR},
       </if>
-      <if test="page != null" >
-        #{page,jdbcType=INTEGER},
-      </if>
       <if test="status != null" >
        	#{status,jdbcType=VARCHAR},
       </if>
+      <if test="crt_time != null" >
+       	#{crt_time,jdbcType=VARCHAR},
+      </if>
     </trim>
   </insert>
-  <select id="selectByFileName" resultType="com.novaone.entity.Info">
-  	select * from tax_info where file_name = #{fileName,jdbcType=VARCHAR}
-  </select>
-  <select id="selectInfo" resultType="com.novaone.entity.Info">
-  	select * from tax_info
-	<where>
-		main_id = #{mainId,jdbcType=VARCHAR}
-		<if test="status != null" >
-         and status = #{status,jdbcType=VARCHAR}
-      	</if>
-	</where>
-  </select>
-  <delete id="deleteInfo">
-  	delete from tax_info where id = #{id,jdbcType=VARCHAR}
-  </delete>
-  <select id="selectInfoCount" parameterType="com.novaone.entity.Info" resultType="int">
-  	select count(1) from tax_info where status = #{status,jdbcType=VARCHAR} and main_id = #{mainId,jdbcType=VARCHAR}
-  </select>
-  <select id="selectInfoPageList" parameterType="com.novaone.util.database.SearchPageUtil" resultType="com.novaone.entity.Info">
-  	select * from tax_info where status = #{object.status} and main_id = #{object.mainId} order by page
-  </select>
+  <!-- 	批量插入查询明细表 -->
+	<insert id="addDataBatchInfo">
+		INSERT INTO tax_info(id, file_name, main_id, status, crt_time, ywbh)
+		VALUES
+		<foreach collection="list" item="lists" separator=",">
+			(#{lists.id},#{lists.fileName},#{lists.mainId},#{lists.status},#{lists.crt_time},#{lists.ywbh})
+		</foreach>
+	</insert>
+	<select id="selectByFileName" resultType="com.novaone.entity.Info">
+		select * from tax_info where file_name = #{fileName,jdbcType=VARCHAR}
+	</select>
+	<select id="selectInfo" resultType="com.novaone.entity.Info">
+	  	select * from tax_info
+		<where>
+			main_id = #{mainId,jdbcType=VARCHAR}
+			<if test="status != null" >
+	         and status = #{status,jdbcType=VARCHAR}
+	      	</if>
+		</where>
+	</select>
+	<delete id="deleteInfo">
+  		delete from tax_info where id = #{id,jdbcType=VARCHAR}
+  	</delete>
+  	<select id="selectInfoCount" parameterType="com.novaone.entity.Info" resultType="int">
+  		select count(1) from tax_info where status = #{status,jdbcType=VARCHAR} and main_id = #{mainId,jdbcType=VARCHAR}
+  	</select>
+  	<select id="selectInfoPageList" parameterType="com.novaone.util.database.SearchPageUtil" resultType="com.novaone.entity.Info">
+  		select * from tax_info where status = #{object.status} and main_id = #{object.mainId} order by page
+  	</select>
+  	<select id="selectInfoByDay"  resultType="com.novaone.entity.Info">
+  		SELECT i.* FROM tax_main m left join tax_info i on m.id=i.main_id where m.down_day=#{day} and i.`status` = '0' and m.company = #{company}
+ 	 </select>
+  	<select id="listInfoEnd"  resultType="com.novaone.entity.Info">
+  		SELECT i.* FROM tax_main m left join tax_info i on m.id=i.main_id where m.down_day=#{day} and m.company = #{company} and i.ywbh is not null
+ 	 </select>
 </mapper>
\ No newline at end of file
Index: src/main/java/com/novaone/dao/Mapper/MainMapper.xml
===================================================================
--- src/main/java/com/novaone/dao/Mapper/MainMapper.xml	(revision 28720)
+++ src/main/java/com/novaone/dao/Mapper/MainMapper.xml	(revision 28721)
@@ -3,13 +3,15 @@
 <mapper namespace="com.novaone.dao.MainMapper" >
   <resultMap id="BaseResultMap" type="com.novaone.entity.Main" >
     <id column="id" property="id" jdbcType="VARCHAR" />
+    <result column="total" property="total" jdbcType="VARCHAR" />
     <result column="down_day" property="downDay" jdbcType="VARCHAR" />
-    <result column="total" property="total" jdbcType="INTEGER" />
-    <result column="start_page" property="startPage" jdbcType="INTEGER" />
+    <result column="company" property="company" jdbcType="VARCHAR" />
     <result column="status" property="status" jdbcType="VARCHAR" />
+    <result column="crt_time" property="crt_time" jdbcType="VARCHAR" />
   </resultMap>
+  
   <sql id="Base_Column_List" >
-    id, down_day, total, start_page, status
+    id, total, down_day, company, crt_time, status
   </sql>
   <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.String" >
     select 
@@ -23,9 +25,9 @@
   </delete>
   <insert id="insert" parameterType="com.novaone.entity.Main" >
     insert into tax_main (id, down_day, total, 
-      start_page, status)
+      company, crt_time, status)
     values (#{id,jdbcType=VARCHAR}, #{downDay,jdbcType=VARCHAR}, #{total,jdbcType=INTEGER}, 
-      #{startPage,jdbcType=INTEGER}, #{status,jdbcType=VARCHAR})
+      #{company,jdbcType=INTEGER}, #{crt_time,jdbcType=VARCHAR}, #{status,jdbcType=VARCHAR})
   </insert>
   <insert id="insertSelective" parameterType="com.novaone.entity.Main" >
     insert into tax_main
@@ -39,12 +41,15 @@
       <if test="total != null" >
         total,
       </if>
-      <if test="startPage != null" >
-        start_page,
+      <if test="company != null" >
+        company,
       </if>
       <if test="status != null" >
         status,
       </if>
+      <if test="crt_time != null" >
+        crt_time,
+      </if>
     </trim>
     <trim prefix="values (" suffix=")" suffixOverrides="," >
       <if test="id != null" >
@@ -56,12 +61,15 @@
       <if test="total != null" >
         #{total,jdbcType=INTEGER},
       </if>
-      <if test="startPage != null" >
-        #{startPage,jdbcType=INTEGER},
+      <if test="company != null" >
+        #{company,jdbcType=INTEGER},
       </if>
       <if test="status != null" >
         #{status,jdbcType=VARCHAR},
       </if>
+      <if test="crt_time != null" >
+        #{crt_time,jdbcType=VARCHAR},
+      </if>
     </trim>
   </insert>
   <update id="updateByPrimaryKeySelective" parameterType="com.novaone.entity.Main" >
@@ -73,8 +81,8 @@
       <if test="total != null" >
         total = #{total,jdbcType=INTEGER},
       </if>
-      <if test="startPage != null" >
-        start_page = #{startPage,jdbcType=INTEGER},
+      <if test="company != null" >
+        company = #{company,jdbcType=INTEGER},
       </if>
       <if test="status != null" >
         status = #{status,jdbcType=VARCHAR},
@@ -86,7 +94,7 @@
     update tax_main
     set down_day = #{downDay,jdbcType=VARCHAR},
       total = #{total,jdbcType=INTEGER},
-      start_page = #{startPage,jdbcType=INTEGER},
+      company = #{company,jdbcType=INTEGER},
       status = #{status,jdbcType=VARCHAR}
     where id = #{id,jdbcType=VARCHAR}
   </update>
@@ -94,6 +102,53 @@
     select 
     <include refid="Base_Column_List" />
     from tax_main
-    where down_day = #{downDay,jdbcType=VARCHAR}
+    where down_day = #{day} and company = #{company}
   </select>
+    <!-- 	插入异常记录 -->
+	<insert id="insertErrorData" parameterType="com.novaone.entity.Error" >
+    insert into tax_error_info
+    <trim prefix="(" suffix=")" suffixOverrides="," >
+      <if test="id != null" >
+        id,
+      </if>
+      <if test="bgdh != null" >
+        bgdh,
+      </if>
+      <if test="error_status != null" >
+        error_status,
+      </if>
+      <if test="msg != null" >
+        msg,
+      </if>
+      <if test="crt_time != null" >
+        crt_time,
+      </if>
+      <if test="company != null" >
+        company,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides="," >
+      <if test="id != null" >
+        #{id,jdbcType=VARCHAR},
+      </if>
+      <if test="bgdh != null" >
+        #{bgdh,jdbcType=VARCHAR},
+      </if>
+      <if test="error_status != null" >
+        #{error_status,jdbcType=VARCHAR},
+      </if>
+      <if test="msg != null" >
+        #{msg,jdbcType=VARCHAR},
+      </if>
+      <if test="crt_time != null" >
+        #{crt_time,jdbcType=TIMESTAMP},
+      </if>
+      <if test="company != null" >
+        #{company,jdbcType=TIMESTAMP},
+      </if>
+    </trim>
+  </insert>
+	<select id="selectCompany" resultType="com.novaone.entity.TaxCompany" >
+		select * from tax_company;
+	</select>
 </mapper>
\ No newline at end of file
Index: src/main/java/com/novaone/entity/Error.java
===================================================================
--- src/main/java/com/novaone/entity/Error.java	(revision 0)
+++ src/main/java/com/novaone/entity/Error.java	(revision 28721)
@@ -0,0 +1,14 @@
+package com.novaone.entity;
+
+import lombok.Data;
+
+@Data
+public class Error {
+	private String id;
+	private String bgdh;
+	private String error_status;
+	private String msg;
+	private String crt_time;
+	private String company;
+
+}
Index: src/main/java/com/novaone/entity/Hddz.java
===================================================================
--- src/main/java/com/novaone/entity/Hddz.java	(revision 0)
+++ src/main/java/com/novaone/entity/Hddz.java	(revision 28721)
@@ -0,0 +1,41 @@
+package com.novaone.entity;
+
+import lombok.Data;
+
+@Data
+public class Hddz {
+
+    private String ywbh;
+    
+    private String bgdh;
+    
+    private String jgsj;
+    
+    private String type;
+    
+    private String zbrq;
+    
+    private String status;
+    
+    private String crt_time;
+    
+    private String id;
+    
+    private String ecwzsbsj;
+    
+    private String bgdwjmc;
+    
+    private String sbdw;
+    
+    private String fssj;
+    
+    private String bgsj;
+    
+    private String sfhdw;
+    
+    private String jdrmc;
+    
+    private String seqno;
+    
+    private String sjsl;
+}
Index: src/main/java/com/novaone/entity/HddzOcrwjsb.java
===================================================================
--- src/main/java/com/novaone/entity/HddzOcrwjsb.java	(revision 0)
+++ src/main/java/com/novaone/entity/HddzOcrwjsb.java	(revision 28721)
@@ -0,0 +1,18 @@
+package com.novaone.entity;
+
+import lombok.Data;
+
+@Data
+public class HddzOcrwjsb {
+	private String wjmc;
+	private String zbrq;
+	private String wjlx;
+	private String ywbh;
+	private String bgdh;
+	private String sfcz;
+	private String wjhz;
+	private String wjlj;
+	private String yzwjlj;
+	private String yzzhcs;
+	private String sfcs;
+}
Index: src/main/java/com/novaone/entity/Info.java
===================================================================
--- src/main/java/com/novaone/entity/Info.java	(revision 28720)
+++ src/main/java/com/novaone/entity/Info.java	(revision 28721)
@@ -1,5 +1,8 @@
 package com.novaone.entity;
 
+import lombok.Data;
+
+@Data
 public class Info {
     private String id;
 
@@ -7,48 +10,9 @@
 
     private String mainId;
 
-    private Integer page;
-
     private String status;
 
-    public String getId() {
-        return id;
-    }
-
-    public void setId(String id) {
-        this.id = id;
-    }
-
-    public String getFileName() {
-        return fileName;
-    }
-
-    public void setFileName(String fileName) {
-        this.fileName = fileName;
-    }
-
-    public String getMainId() {
-        return mainId;
-    }
-
-    public void setMainId(String mainId) {
-        this.mainId = mainId;
-    }
-
-    public Integer getPage() {
-        return page;
-    }
-
-    public void setPage(Integer page) {
-        this.page = page;
-    }
-
-    public String getStatus() {
-        return status;
-    }
-
-    public void setStatus(String status) {
-        this.status = status;
-    }
-
+    private String crt_time;
+    
+    private String ywbh;
 }
\ No newline at end of file
Index: src/main/java/com/novaone/entity/InfoWeb.java
===================================================================
--- src/main/java/com/novaone/entity/InfoWeb.java	(revision 0)
+++ src/main/java/com/novaone/entity/InfoWeb.java	(revision 28721)
@@ -0,0 +1,16 @@
+package com.novaone.entity;
+
+import lombok.Data;
+
+@Data
+public class InfoWeb {
+	private String entryId;
+	private String taxCode;
+	private String cDate;
+	private String dutyFlag;
+	private String isStats;
+	private String taxId;
+	private String printNum;
+	private String payTypeFlag;
+	private String openFlag;
+}
Index: src/main/java/com/novaone/entity/Main.java
===================================================================
--- src/main/java/com/novaone/entity/Main.java	(revision 28720)
+++ src/main/java/com/novaone/entity/Main.java	(revision 28721)
@@ -1,5 +1,8 @@
 package com.novaone.entity;
 
+import lombok.Data;
+
+@Data
 public class Main {
     private String id;
 
@@ -7,48 +10,10 @@
 
     private Integer total;
 
-    private Integer startPage;
-
     private String status;
 
-    public String getId() {
-        return id;
-    }
+    private String crt_time;
+    
+    private String company;
 
-    public void setId(String id) {
-        this.id = id;
-    }
-
-    public String getDownDay() {
-        return downDay;
-    }
-
-    public void setDownDay(String downDay) {
-        this.downDay = downDay;
-    }
-
-    public Integer getTotal() {
-        return total;
-    }
-
-    public void setTotal(Integer total) {
-        this.total = total;
-    }
-
-    public Integer getStartPage() {
-        return startPage;
-    }
-
-    public void setStartPage(Integer startPage) {
-        this.startPage = startPage;
-    }
-
-    public String getStatus() {
-        return status;
-    }
-
-    public void setStatus(String status) {
-        this.status = status;
-    }
-
 }
\ No newline at end of file
Index: src/main/java/com/novaone/entity/S_log_err.java
===================================================================
--- src/main/java/com/novaone/entity/S_log_err.java	(revision 0)
+++ src/main/java/com/novaone/entity/S_log_err.java	(revision 28721)
@@ -0,0 +1,16 @@
+package com.novaone.entity;
+
+import lombok.Data;
+
+@Data
+public class S_log_err {
+
+	private String eid;
+	private String tablename;
+	private String changecols;
+	private String mainid;
+	private String cjsj;
+	private String cscs;
+	private String sfcg;
+	private String funname;
+}
Index: src/main/java/com/novaone/entity/TaxCompany.java
===================================================================
--- src/main/java/com/novaone/entity/TaxCompany.java	(revision 0)
+++ src/main/java/com/novaone/entity/TaxCompany.java	(revision 28721)
@@ -0,0 +1,10 @@
+package com.novaone.entity;
+
+import lombok.Data;
+
+@Data
+public class TaxCompany {
+
+	private String companycode;
+	private String company;
+}
Index: src/main/java/com/novaone/fdao/HddzMapper.java
===================================================================
--- src/main/java/com/novaone/fdao/HddzMapper.java	(revision 0)
+++ src/main/java/com/novaone/fdao/HddzMapper.java	(revision 28721)
@@ -0,0 +1,22 @@
+package com.novaone.fdao;
+
+import java.util.List;
+
+import org.apache.ibatis.annotations.Mapper;
+
+import com.novaone.entity.Hddz;
+import com.novaone.entity.HddzOcrwjsb;
+import com.novaone.entity.S_log_err;
+
+@Mapper
+public interface HddzMapper {
+	
+	 List<Hddz> listDataByBgdh(List<String> list);
+	 
+	 List<HddzOcrwjsb> listOcrByYwbh(List<String> list);
+	 
+	 void addDataBatchOcr(List<HddzOcrwjsb> list);
+	 
+	 void addDataBatchLog(List<S_log_err> list);
+    
+}
Index: src/main/java/com/novaone/fdao/Mapper/HddzMapper.xml
===================================================================
--- src/main/java/com/novaone/fdao/Mapper/HddzMapper.xml	(revision 0)
+++ src/main/java/com/novaone/fdao/Mapper/HddzMapper.xml	(revision 28721)
@@ -0,0 +1,37 @@
+<?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.novaone.fdao.HddzMapper" >
+<!--   	根据报关单号查询是否业务编号 -->
+	<select id="listDataByBgdh" resultType="com.novaone.entity.Hddz">
+		SELECT
+		bgdh,ywbh
+		from yw_hddz
+		WHERE bgdh IN
+		<foreach collection="list" item="bgdh" index="index" open="(" close=")" separator=",">
+		  #{bgdh}
+		</foreach>
+	</select>
+<!-- 	查询ocr表是否已存在数据 -->
+	<select id="listOcrByYwbh" resultType="com.novaone.entity.HddzOcrwjsb">
+		SELECT * from yw_hddz_ocrwjsb where wjlx='正本税单' and ywbh in
+		<foreach collection="list" item="ywbh" index="index" open="(" close=")" separator=",">
+		  #{ywbh}
+		</foreach>
+	</select>
+<!-- 	批量写入ocr -->
+	<insert id="addDataBatchOcr">
+		INSERT INTO yw_hddz_ocrwjsb(wjmc,zbrq, ywbh, wjlx,sfcz,wjlj)
+		VALUES
+		<foreach collection="list" item="lists" separator=",">
+			(#{lists.wjmc},#{lists.zbrq},#{lists.ywbh},#{lists.wjlx},#{lists.sfcz},#{lists.wjlj})
+		</foreach>
+	</insert>
+<!-- 	批量写入log -->
+	<insert id="addDataBatchLog">
+		INSERT INTO s_log_err(eid,tablename,changecols,mainid,cjsj,cscs,sfcg,funname )
+		VALUES
+		<foreach collection="list" item="lists" separator=",">
+			(#{lists.eid},#{lists.tablename},#{lists.changecols},#{lists.mainid},#{lists.cjsj},#{lists.cscs},#{lists.sfcg},#{lists.funname})
+		</foreach>
+	</insert>
+</mapper>
\ No newline at end of file
Index: src/main/java/com/novaone/service/MainService.java
===================================================================
--- src/main/java/com/novaone/service/MainService.java	(revision 28720)
+++ src/main/java/com/novaone/service/MainService.java	(revision 28721)
@@ -1,8 +1,26 @@
 package com.novaone.service;
 
+import java.util.List;
+
+import com.novaone.entity.Info;
+import com.novaone.entity.TaxCompany;
+
 public interface MainService {
 
-    public void splider(String day) throws Exception;
+    public void splider(String day, TaxCompany company) throws Exception;
 
-    public void checkDownloadFiles() throws Exception;
+    public void checkDownloadFiles(TaxCompany company) throws Exception;
+    
+    void insertErrorData(String bgdh, String status, String msg, String company);
+    
+    List<TaxCompany> selectCompany();
+    
+    void doBatchDownloadFilesList(String day, TaxCompany company) throws Exception;
+    
+    void doBatchDownloadFiles(String day, TaxCompany company);
+    
+    //写入水果通
+    void insertFreshData(String day, String companyCode);
+    
+    List<Info> listInfoEnd(String day, String companyCode);
 }
Index: src/main/java/com/novaone/service/impl/DBServiceImpl.java
===================================================================
--- src/main/java/com/novaone/service/impl/DBServiceImpl.java	(revision 28720)
+++ src/main/java/com/novaone/service/impl/DBServiceImpl.java	(revision 28721)
@@ -38,7 +38,7 @@
 
     @Override
     public Main selectMainByDay(String day) {
-        return mainDao.selectByDay(day);
+        return mainDao.selectByDay(day,"");
     }
 
 }
Index: src/main/java/com/novaone/service/impl/MainServiceImpl.java
===================================================================
--- src/main/java/com/novaone/service/impl/MainServiceImpl.java	(revision 28720)
+++ src/main/java/com/novaone/service/impl/MainServiceImpl.java	(revision 28721)
@@ -4,54 +4,57 @@
 import java.io.FileFilter;
 import java.io.FileInputStream;
 import java.io.InputStream;
+import java.net.SocketTimeoutException;
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Calendar;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 import java.util.UUID;
-import java.util.concurrent.TimeUnit;
+import java.util.stream.Collectors;
 
 import javax.annotation.Resource;
 
-import org.apache.commons.lang.StringUtils;
-import org.openqa.selenium.By;
-import org.openqa.selenium.WebDriver;
-import org.openqa.selenium.WebElement;
-import org.openqa.selenium.chrome.ChromeDriver;
-import org.openqa.selenium.chrome.ChromeOptions;
-import org.openqa.selenium.support.ui.ExpectedCondition;
-import org.openqa.selenium.support.ui.WebDriverWait;
+import org.apache.http.conn.ConnectTimeoutException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.data.redis.core.StringRedisTemplate;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
 
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.google.common.base.Joiner;
 import com.novaone.dao.InfoMapper;
 import com.novaone.dao.MainMapper;
+import com.novaone.entity.Error;
+import com.novaone.entity.Hddz;
+import com.novaone.entity.HddzOcrwjsb;
 import com.novaone.entity.Info;
+import com.novaone.entity.InfoWeb;
 import com.novaone.entity.Main;
+import com.novaone.entity.S_log_err;
+import com.novaone.entity.TaxCompany;
+import com.novaone.fdao.HddzMapper;
 import com.novaone.service.MainService;
 import com.novaone.util.CommonInfo;
+import com.novaone.util.CommonUtils;
+import com.novaone.util.FileUtil;
 import com.novaone.util.FtpUtil;
-import com.novaone.util.TmsException;
+import com.novaone.util.HttpUtil;
 import com.novaone.util.UnZipFile;
 
 @Service("mainService")
 public class MainServiceImpl implements MainService {
+	
+	@Resource
+	private StringRedisTemplate stringRedisTemplate;
 
-    public static final String PAGE_URL = "http://app.singlewindow.cn/cas/login?_loginInternetPlus=1&service=http%3A%2F%2Fonline.customs.gov.cn%2Flogin%2Flogin";
+    private final SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
 
-    public static final String PAGE_URL_TAX = "http://43.248.49.212/tax2017";
-
-    public static final String PWD = "78945612";
-
-    public static final String DOWNLOAD_PATH = "C:\\download\\";
-
-    private final SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd");
-
     private final Logger log = LoggerFactory.getLogger(this.getClass());
     
     @Resource
@@ -59,369 +62,259 @@
 
     @Resource
     private InfoMapper infoDao;
-
-    static {
-//        System.setProperty("webdriver.chrome.driver", "C:/easipass/chromedriver-2.40.exe");// chromedriver服务地址
-        System.setProperty("webdriver.chrome.driver",
-                "C:/税单抓取程序/chromedriver-2.40.exe");// chromedriver服务地址
+    
+    @Resource
+    private MainService mainService;
+    
+    @Resource
+    private HddzMapper hddzMapper;
+    
+	@Transactional(propagation = Propagation.REQUIRES_NEW)
+	@Override
+	public void insertErrorData(String bgdh, String status, String msg, String company) {
+		Error error = new Error();
+		error.setCrt_time(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
+		error.setId(UUID.randomUUID().toString());
+		error.setMsg(msg);
+		error.setError_status(status);
+		error.setBgdh(bgdh);
+		error.setCompany(company);
+		mainDao.insertErrorData(error);
+	}
+	@Override
+	@Transactional(propagation = Propagation.NOT_SUPPORTED)
+	public List<TaxCompany> selectCompany() {
+		return mainDao.selectCompany();
+	}
+	
+	//查询待写入水果通的数据
+	@Override
+	@Transactional(propagation = Propagation.NOT_SUPPORTED)
+	public List<Info> listInfoEnd(String day, String companyCode) {
+		return infoDao.listInfoEnd(day, companyCode);
+	}
+	
+	//获取cookie
+	private String getJsessionId(String CURRENT_COMPANY_CODE) {
+    	return stringRedisTemplate.opsForValue().get(CommonInfo.CURRENT_COMPANY_REDISNAME_TAX + CURRENT_COMPANY_CODE);
     }
 
-
+    /**
+     * 抓取
+     */
     @Transactional(propagation = Propagation.NOT_SUPPORTED)
     @Override
-    public void splider(String day) throws Exception {
-        // 创建下载地址 没有创建
-        String downloadFilepath = DOWNLOAD_PATH + day;
-        File file = new File(downloadFilepath);
-        if (!file.exists()) {
-            file.mkdirs();
-        }
-        // 配置参数
-        HashMap<String, Object> chromePrefs = new HashMap<String, Object>();
-        chromePrefs.put("profile.default_content_settings.popups", 0);
-        chromePrefs.put("download.default_directory", downloadFilepath);
-        ChromeOptions options = new ChromeOptions();
-        options.setExperimentalOption("prefs", chromePrefs);
-        // options.addArguments("headless");
-        options.addArguments("--user-data-dir=C:/Users/Administrator/AppData/Local/Google/Chrome/User Data/Default");
-        // 初始化对象
-        WebDriver driver = new ChromeDriver(options); // 新建一个WebDriver 的对象，但是new
-        Main main = mainDao.selectByDay(day);
-        try {
-            // 1 登录
-            login(driver);
-            // 2 第一次模拟
-            first(driver);
-            // 3 是否首次进行
-            main = checkFirst(main, day, driver);
-            driver.manage().timeouts().pageLoadTimeout(5, TimeUnit.MINUTES);
-            if (main.getStartPage() == 1) {
-                // 如果是从第一页开始，那么就直接下载
-                downloadNowPageRow(driver, main, 1);
-            } else {
-                // 先跳转到指定页面，再下载
-                searchData(driver, main);
-                downloadNowPageRow(driver, main, main.getStartPage());
-            }
-            // 4 判断有没有下一页,有就继续下载，没有就结束
-            downloadNext(driver, main);
-        } catch (Exception e) {
-            e.printStackTrace();
-            if (main != null) {
-                main.setStatus(CommonInfo.MAIN_STATUS_ERROR);
-                mainDao.updateByPrimaryKeySelective(main);
-            } else {
+    public void splider(String day, TaxCompany company) throws Exception {
+    	//查询主表是否有数据
+		Main main = mainDao.selectByDay(day, company.getCompanycode());
+        if(null == main) {
+        	//如果day没有数据，表示是该天第一次下载，需要先获取数据，再下载文件
+        	try {
+        		//获取数据
+        		mainService.doBatchDownloadFilesList(day, company);
+        		//下载文件
+        		mainService.doBatchDownloadFiles(day, company);
+            } catch (Exception e) {
+                e.printStackTrace();
                 throw e;
             }
-        } finally {
-            driver.close();
-            driver.quit();
+        }else {
+        	//如果当天有数据，表示上次下载文件存在错误数据，要重新下载
+        	mainService.doBatchDownloadFiles(day, company);
         }
     }
-
-    // 下载下一页的数据
-    private void downloadNext(WebDriver driver, Main main) throws Exception {
-        if (clickNextPage(driver)) {
-            downloadNowPageRow(driver, main, main.getStartPage() + 1);
-            downloadNext(driver, main);
-        } else {
-            // 更新主表的状态
-            main.setStatus(CommonInfo.MAIN_STATUS_DOWNLOADED);
-            mainDao.updateByPrimaryKeySelective(main);
-        }
-    }
-
-    // 校验是否第一次查询
-    private Main checkFirst(Main main, String day, WebDriver driver) throws Exception {
-        searchData(driver);
-        if (main == null) {
-            WebDriverWait totalTag = new WebDriverWait(driver, 600);
-            String totalText = totalTag.until(new ExpectedCondition<WebElement>() {
-                @Override
-                public WebElement apply(WebDriver d) {
-                    return d.findElement(By.xpath("//*[@id='app']/div/article/section/div[7]/div/div[2]/div/span[1]"));
-                }
-            }).getText();
-            int total = Integer.parseInt(totalText.replaceAll("\\D", ""));
-            if (total == 0) {
-                throw new TmsException("9901", "Total为0,这说明页面加载出错了。要重新来过!");
-            }
-            main = new Main();
-            main.setId(UUID.randomUUID().toString());
-            main.setTotal(total);
-            main.setDownDay(day);
-            main.setStartPage(1);
-            main.setStatus(CommonInfo.MAIN_STATUS_DOWNLOADING);
-            mainDao.insertSelective(main);
-        }
-        log.info("总页数:" + main.getTotal() + "下载到了:" + main.getStartPage());
-        return main;
-    }
-
-    private void searchData(WebDriver driver) throws Exception {
-        WebElement search = driver.findElement(By.className("el-button--success"));
-        search.click();
-        Thread.sleep(1000);
-        List<WebElement> list = driver.findElements(By.cssSelector(".el-input__inner"));
-        WebElement type = list.get(0);
-        type.click();
-        Thread.sleep(1000);
-        driver.findElement(By.id("dateSection")).click();
-        list = driver.findElements(By.cssSelector(".el-input__inner"));
-        list.get(1).click();
-        Thread.sleep(1000);
-        WebElement startday = driver.findElement(
-                By.xpath("//*[@id='app']/div/article/section/div[4]/form/div/div/div[2]/div[1]/div/div/div[1]/input"));
-        startday.click();
-        Thread.sleep(500);
-        WebElement startDateDiv = driver.findElement(By.xpath("/html/body/div[3]/div[1]/div/div[2]"));
-        By tags = By.tagName("td");
-        List<WebElement> daysList = startDateDiv.findElements(tags);
-        Date date = new Date();
-        Calendar c = Calendar.getInstance();
-        c.setTime(date);
-        c.add(Calendar.DAY_OF_MONTH, -1);
-        int beforeDay = c.get(Calendar.DAY_OF_MONTH);
-        String m = beforeDay + "";
-        WebElement now = null;
-        for (WebElement w : daysList) {
-            if (w.getText().equals(m)) {
-                now = w;
-                if (beforeDay <= 15) {
-                    break;
-                }
-            }
-        }
-        now.click();
-        // nowDay.click();
-        Thread.sleep(200);
-        WebElement endday = driver.findElement(
-                By.xpath("//*[@id='app']/div/article/section/div[4]/form/div/div/div[2]/div[2]/div/div/div[1]/input"));
-        endday.click();
-        Thread.sleep(500);
-        WebElement endDateDiv = driver.findElement(By.xpath("/html/body/div[4]/div[1]/div/div[2]"));
-        daysList = endDateDiv.findElements(tags);
-        for (WebElement w : daysList) {
-            if (w.getText().equals(m)) {
-                now = w;
-                if (beforeDay <= 15) {
-                    break;
-                }
-            }
-        }
-        now.click();
-        Thread.sleep(500);
-        search = driver.findElement(By.className("el-button--success"));
-        search.click();
-        Thread.sleep(30000);
-    }
-
-    // 跳到指定页面
-    private void searchData(WebDriver driver, Main main) throws Exception {
-        int startPage = main.getStartPage();
-        WebElement ul = driver.findElement(By.xpath("//*[@id=\"app\"]/div/article/section/div[7]/div/div[2]/div/ul"));
-        List<WebElement> liList = ul.findElements(By.tagName("li"));
-        // 判断当前页面里，有没有指定的页码
-        WebElement li = exitsPageNum(liList, startPage);
-        if (li == null) {
-            // 没有找到页码，查找有没有翻页按钮
-            WebElement more = getPaging(ul);
-            if (more != null) {
-                more.click();
-                Thread.sleep(20000);
-                searchData(driver, main);
-            } else {
-                log.error("没有指定的页码!");
-                throw new TmsException("9901", "没有找到指定的页码! 传入的页码是:" + startPage);
-            }
-        } else {
-            // 点击对应的页面
-            li.click();
-            Thread.sleep(20000);
-            return;
-        }
-    }
-
     /**
-     * 
-       
-     * exitsPageNum(判断是否有要点击的页面)    
-       
-     * @param   name    
-       
-     * @param  @return    设定文件    
-       
-     * @return String    DOM对象    
-       
-     * @Exception 异常对象
+     * 获取某一天的下载数量和明细数据，写入主表和明细表，此时主表状态下载中
+     * @Title: doBatchDownloadFilesList
+     * @Description: 
+     * @param: @param day   
+     * @return: void
+     * @author gubj  
+     * @date 2021年9月28日 上午9:15:20
      */
-    private WebElement exitsPageNum(List<WebElement> liList, int startPage) {
-        for (WebElement li : liList) {
-            String pageNum = li.getText();
-            if(StringUtils.isEmpty(pageNum)) {
-                continue;
-            }else {
-                int page = Integer.parseInt(pageNum);
-                if (page == startPage) {
-                    return li;
-                }
-            }
-        }
-        return null;
-    }
-
-    /**
-     * 
-       
-     * getPaging(获取翻页按钮)    
-       
-     * @param   name    
-       
-     * @param  @return    设定文件    
-       
-     * @return String    DOM对象    
-     * @throws Exception 
-       
-     * @Exception 异常对象
-     */
-    private WebElement getPaging(WebElement ul) throws Exception {
-        Thread.sleep(5000);
-        List<WebElement> mores = ul.findElements(By.className("el-icon-more"));
-        if (mores != null && mores.size() > 0) {
-            WebElement more = mores.get(mores.size() - 1);
-            return more;
-        }
-        return null;
-    }
-
-    private void first(WebDriver driver) throws Exception {
-        driver.get(PAGE_URL_TAX);
-        WebDriverWait noWait = new WebDriverWait(driver, 30);
-        noWait.until(new ExpectedCondition<WebElement>() {
-            @Override
-            public WebElement apply(WebDriver d) {
-                return d.findElement(By.xpath("//*[@id='customs']/input"));
-            }
-        }).sendKeys("220920181000010472");
-        Thread.sleep(500);
-        WebDriverWait searchWait = new WebDriverWait(driver, 30);
-        searchWait.until(new ExpectedCondition<WebElement>() {
-            @Override
-            public WebElement apply(WebDriver d) {
-                return d.findElement(By.className("el-button--success"));
-            }
-        }).click();
-        Thread.sleep(1000);
-    }
-
-    private void login(WebDriver driver) throws Exception {
-        driver.get(PAGE_URL);// 打开指定的网站
-        log.info("init open login page!");
-        // 输入信息
-        Thread.sleep(1000);
-        WebElement out = null;
-        try {
-            out = driver.findElement(By.linkText("退出"));
+    @Transactional
+    @Override
+    public void doBatchDownloadFilesList(String day, TaxCompany company) throws Exception{
+    	String total = "";
+    	List<InfoWeb> listInfoWeb = new ArrayList<InfoWeb>();
+    	JSONObject json = new JSONObject();
+    	json.put("endCnt", "1000");
+    	json.put("endDate", day);
+    	json.put("startCnt", "1");
+    	json.put("startDate", day);
+    	try {
+			String res = HttpUtil.getDutyform(CommonInfo.API_DATA_URL, json.toJSONString(), getJsessionId(company.getCompanycode()));
+			log.info("session:" +  getJsessionId(company.getCompanycode()) +"day：" + day + "===getDutyform方法返回：" + res);
+//			示例：String res = "{\"flag\":\"1\",\"resultData\":{\"data\":[{\"entryId\":\"222520211000243901\",\"taxCode\":\"222520211000243901-A01\",\"cDate\":\"2021-09-23\",\"dutyFlag\":\"正常税单\",\"isStats\":\"1\",\"taxId\":null,\"printNum\":0,\"payTypeFlag\":\"1\",\"openFlag\":\"1\"},{\"entryId\":\"222520211000243901\",\"taxCode\":\"222520211000243901-L02\",\"cDate\":\"2021-09-23\",\"dutyFlag\":\"正常税单\",\"isStats\":\"1\",\"taxId\":null,\"printNum\":0,\"payTypeFlag\":\"1\",\"openFlag\":\"1\"},{\"entryId\":\"222520211000243909\",\"taxCode\":\"222520211000243909-A01\",\"cDate\":\"2021-09-23\",\"dutyFlag\":\"正常税单\",\"isStats\":\"1\",\"taxId\":null,\"printNum\":0,\"payTypeFlag\":\"1\",\"openFlag\":\"1\"},{\"entryId\":\"222520211000243909\",\"taxCode\":\"222520211000243909-L02\",\"cDate\":\"2021-09-23\",\"dutyFlag\":\"正常税单\",\"isStats\":\"1\",\"taxId\":null,\"printNum\":0,\"payTypeFlag\":\"1\",\"openFlag\":\"1\"},{\"entryId\":\"223320211001132385\",\"taxCode\":\"223320211001132385-A01\",\"cDate\":\"2021-09-23\",\"dutyFlag\":\"正常税单\",\"isStats\":\"1\",\"taxId\":null,\"printNum\":0,\"payTypeFlag\":\"1\",\"openFlag\":\"1\"},{\"entryId\":\"223320211001132385\",\"taxCode\":\"223320211001132385-L02\",\"cDate\":\"2021-09-23\",\"dutyFlag\":\"正常税单\",\"isStats\":\"1\",\"taxId\":null,\"printNum\":0,\"payTypeFlag\":\"1\",\"openFlag\":\"1\"},{\"entryId\":\"223320211001132382\",\"taxCode\":\"223320211001132382-A01\",\"cDate\":\"2021-09-23\",\"dutyFlag\":\"正常税单\",\"isStats\":\"1\",\"taxId\":null,\"printNum\":0,\"payTypeFlag\":\"1\",\"openFlag\":\"1\"},{\"entryId\":\"223320211001132382\",\"taxCode\":\"223320211001132382-L02\",\"cDate\":\"2021-09-23\",\"dutyFlag\":\"正常税单\",\"isStats\":\"1\",\"taxId\":null,\"printNum\":0,\"payTypeFlag\":\"1\",\"openFlag\":\"1\"},{\"entryId\":\"223320211001133126\",\"taxCode\":\"223320211001133126-A01\",\"cDate\":\"2021-09-23\",\"dutyFlag\":\"正常税单\",\"isStats\":\"1\",\"taxId\":null,\"printNum\":0,\"payTypeFlag\":\"1\",\"openFlag\":\"1\"},{\"entryId\":\"223320211001133126\",\"taxCode\":\"223320211001133126-L02\",\"cDate\":\"2021-09-23\",\"dutyFlag\":\"正常税单\",\"isStats\":\"1\",\"taxId\":null,\"printNum\":0,\"payTypeFlag\":\"1\",\"openFlag\":\"1\"}],\"page\":{\"startCnt\":1,\"endCnt\":1000,\"totalNum\":10}}}";
+			//格式化resultData
+			JSONObject resultData = JSON.parseObject(JSON.parseObject(res).getString("resultData"));
+			//获取总数量
+			total = JSON.parseObject(resultData.getString("page")).getString("totalNum");
+			//获取明细
+			listInfoWeb = JSON.parseArray(resultData.getString("data"), InfoWeb.class);
+    	} catch (ConnectTimeoutException | SocketTimeoutException e) {
+        	e.printStackTrace();
+        	log.info("下载文件接口超时：",e);
+			//超时异常
+			mainService.insertErrorData(day, CommonInfo.GRAB_STATUS_API_TIMEOUT, "请求数据超时", company.getCompanycode());
         } catch (Exception e) {
-            if (out == null) {
-                WebDriverWait pwd = new WebDriverWait(driver, 20);
-                pwd.until(new ExpectedCondition<WebElement>() {
-                    @Override
-                    public WebElement apply(WebDriver d) {
-                        return d.findElement(By.id("password"));
-                    }
-                }).sendKeys(PWD);
-                driver.findElement(By.id("loginbuttonCa")).click();
+    		log.info("解析数据失败",e);
+    		mainService.insertErrorData(day, CommonInfo.GRAB_STATUS_ANALYSIS_ERROR, "数据解析失败", company.getCompanycode());
+			e.printStackTrace();
+			total = "";
+			listInfoWeb.clear();
+		}
+    	//将数量写入主表
+		Main main = new Main();
+        main.setId(UUID.randomUUID().toString());
+        main.setTotal(Integer.parseInt(total));
+        main.setDownDay(day);
+        main.setCompany(company.getCompanycode());
+        main.setCrt_time(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
+		if(!"0".equals(total)) {
+			main.setStatus(CommonInfo.MAIN_STATUS_DOWNLOADING);
+            mainDao.insertSelective(main);
+            //将明细写入明细表
+            //准备查询报关单号
+            List<String> listBgdhString = listInfoWeb.stream().map(a -> a.getTaxCode().substring(0,18)).collect(Collectors.toList());
+            //查询业务编号
+            List<Hddz> listYwbh = hddzMapper.listDataByBgdh(listBgdhString);
+            //做一个报关单号与业务编号的对照
+            Map<String, String> ywbhMap = new HashMap<String, String>();
+            for(Hddz h : listYwbh) {
+            	ywbhMap.put(h.getBgdh(),h.getYwbh());
             }
-        }
-        Thread.sleep(10000);
-    }
-
-    private void downloadNowPageRow(WebDriver driver, Main main, int page) throws Exception {
-        WebDriverWait tableWait = new WebDriverWait(driver, 20);
-        WebElement table = tableWait.until(new ExpectedCondition<WebElement>(){
-            @Override
-            public WebElement apply(WebDriver d) {
-                return d.findElement(
-                        By.className("el-table__body"));
-            }
-        });
-        // 全选下载
-        WebElement checkAll = driver.findElement(By.xpath(
-                "//*[@id='app']/div/article/section/div[6]/div/div/div[2]/table/thead/tr/th[1]/div/label/span/span"));
-        checkAll.click();
-        Thread.sleep(2000);
-        WebElement download = driver
-                .findElement(By.xpath("//*[@id='app']/div/article/section/div[7]/div/div[1]/div/button[1]"));
-        download.click();
-        // 取消全选
-        checkAll.click();
-        log.info("批量下载开始!");
-        // 挨个抓取文件信息
-        List<WebElement> trList = table.findElements(By.tagName("tr"));
-        for (int i = 0; i < trList.size(); i++) {
-            WebElement tr = trList.get(i);
-            WebElement checkbox = tr
-                    .findElement(By.className("el-checkbox__input"));
-            checkbox.click();
-            Thread.sleep(2000);
-            WebElement td = tr.findElements(By.tagName("td")).get(1).findElement(By.tagName("div"));
-            String fileName = td.getText();
-            Info info = infoDao.selectByFileName(fileName);
-            if (info == null) {
-                // System.out.println(fileName + ",新建");
-                info = new Info();
+            List<Info> listHddz = new ArrayList<Info>();
+            for(InfoWeb infoWeb : listInfoWeb) {
+            	Info info = new Info();
                 info.setId(UUID.randomUUID().toString());
                 info.setMainId(main.getId());
-                info.setFileName(fileName);
-                info.setPage(page);
-                String classCss = checkbox.getAttribute("class");
-                log.info(fileName + ": class/" + classCss);
-                if (classCss.contains("is-checked")) {
+                info.setFileName(infoWeb.getTaxCode());
+                if(ywbhMap.containsKey(infoWeb.getTaxCode().substring(0,18))) {
+                	info.setYwbh(ywbhMap.get(infoWeb.getTaxCode().substring(0,18)));
+                }
+                info.setCrt_time(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
+                if ("正常税单".equals(infoWeb.getDutyFlag())) {
                     info.setStatus(CommonInfo.INFO_STATUS_OK);
                 } else {
                     info.setStatus(CommonInfo.INFO_STATUS_IGNORE);
                 }
-                infoDao.insertSelective(info);
+                listHddz.add(info);
             }
-            checkbox.click();
-        }
-        main.setStartPage(page);
-        mainDao.updateByPrimaryKeySelective(main);
-        log.info("批量下载完成!");
-        Thread.sleep(30000);
+            //查询业务编号
+            infoDao.addDataBatchInfo(listHddz);
+    	}else {
+    		main.setStatus(CommonInfo.MAIN_STATUS_FTP);
+            mainDao.insertSelective(main);
+    		log.info("公司:"+company.getCompanycode()+"===日期:"+day+"===查询成功但暂无数据");
+    		mainService.insertErrorData("", CommonInfo.GRAB_STATUS_SUCCESS_EMPTY, "公司:"+company.getCompanycode()+".日期:"+day+".查询成功但暂无数据",company.getCompanycode());
+    	}
     }
-
-    private boolean clickNextPage(WebDriver driver) throws Exception {
-        WebElement next = driver
-                .findElement(By.xpath("//*[@id='app']/div/article/section/div[7]/div/div[2]/div/button[2]"));
-        // btn-next
-        // btn-next disabled
-        String className = next.getAttribute("class");
-        boolean res = true;
-        if (className.contains("disabled")) {
-            res = false;
-        }
-        if (res) {
-            next.click();
-            Thread.sleep(20000);
-        }
-        return res;
+    /**
+     * 批量下载文件
+     * @Title: doBatchDownloadFiles
+     * @Description: 
+     * @param: @param day   
+     * @return: void
+     * @author gubj  
+     * @date 2021年9月28日 上午10:23:19
+     */
+    @Transactional
+    @Override
+    public void doBatchDownloadFiles(String day, TaxCompany company) {
+    	log.info("文件下载开始=============");
+    	String main_id = "";
+		try {
+			// 根据day查询需要下载的文件名称(状态为0的)
+			List<Info> listInfo = infoDao.selectInfoByDay(day, company.getCompanycode());
+			if(null == listInfo || listInfo.isEmpty()) {
+				return;
+			}
+			//拿到主表id，以便于异常后边更新主表状态
+			main_id = listInfo.get(0).getMainId();
+			//由于网站的get请求，将文件分组后下载
+			List<List<String>> listSub = getSubList(listInfo.stream().map(b -> b.getFileName()).collect(Collectors.toList()));
+			//分组下载文件
+			for(List<String> listSubDetail : listSub) {
+				log.info("listSubDetail::"+listSubDetail);
+				FileUtil.downLoadByUrl(
+						//下载地址
+						String.format(CommonInfo.API_DATA_DOWNLOAD_URL, Joiner.on(",").join(listSubDetail)), 
+						//文件夹名称
+						company.getCompanycode(),
+						//存储路径
+						CommonInfo.DOWNLOAD_PATH + company.getCompanycode() + "/",
+						//jsessionid
+						getJsessionId(company.getCompanycode())
+						);
+			}
+			//更新状态
+			Main main = new Main();
+			main.setStatus(CommonInfo.MAIN_STATUS_DOWNLOADED);
+			main.setId(main_id);
+            mainDao.updateByPrimaryKeySelective(main);
+		} catch (Exception e) {
+			//下载异常
+			Main main = new Main();
+			main.setStatus(CommonInfo.MAIN_STATUS_ERROR);
+			main.setId(main_id);
+            mainDao.updateByPrimaryKeySelective(main);
+			e.printStackTrace();
+			mainService.insertErrorData(day, CommonInfo.GRAB_STATUS_API_DOWNLOAD_ERROR, "文件下载失败",company.getCompanycode());
+		}
     }
-
-    @Transactional(propagation = Propagation.NOT_SUPPORTED)
+    /**
+     * 分组集合中的数据
+     * @Title: getSubList
+     * @Description: 
+     * @param: @param list
+     * @param: @return   
+     * @return: List<List<String>>
+     * @author gubj  
+     * @date 2021年9月28日 上午10:23:06
+     */
+    private List<List<String>> getSubList(List<String> list) {
+    	//计算集合中可以分几个组
+    	int count = list.size()/30;
+    	int yu = list.size() % 30;
+    	if (yu > 0) {
+    	    count = count + 1;
+    	}
+    	List<List<String>> resSubList = new ArrayList<List<String>>();
+    	for (int i = 0; i < count; i++) {
+    	    List<String> subList = new ArrayList<String>();
+    	    if (i == count-1) {
+    	        subList = list.subList(i * 30, list.size());
+    	    } else {
+    	        subList = list.subList(i * 30, 30 * (i + 1));
+    	    }
+    	    resSubList.add(subList);
+    	}
+    	System.out.println(resSubList);
+    	return resSubList;
+	}
+    /**
+     * 程序开始的入口方法
+     */
+    @Transactional
     @Override
-    public void checkDownloadFiles() throws Exception {
+    public void checkDownloadFiles(TaxCompany company) throws Exception {
+    	if(CommonUtils.isEmpty(getJsessionId(company.getCompanycode()))) {
+    		log.info("code::"+company.getCompanycode()+"==未获取到jsessionid");
+    		return;
+    	}
         Date date = new Date();
         Calendar c = Calendar.getInstance();
         c.setTime(date);
         c.add(Calendar.DAY_OF_MONTH, -1);
         String day = df.format(c.getTime());
-        File file = new File(DOWNLOAD_PATH + day);
+        File file = new File(CommonInfo.DOWNLOAD_PATH + company.getCompanycode() + "/");
         File[] list = file.listFiles();
-        Main main = mainDao.selectByDay(day);
+        //拿到前一天的数据
+        Main main = mainDao.selectByDay(day, company.getCompanycode());
+        //如果前一天没有数据，开始下载
         if (main == null) {
-            this.splider(day);
+            this.splider(day, company);
             return;
         }
         if (main.getStatus().equals(CommonInfo.MAIN_STATUS_ERROR)) {
@@ -429,8 +322,11 @@
             main.setStatus(CommonInfo.MAIN_STATUS_DOWNLOADING);
             mainDao.updateByPrimaryKeySelective(main);
             // 重新开始下载任务
-            this.splider(day);
-        } else if (main.getStatus().equals(CommonInfo.MAIN_STATUS_DOWNLOADED)) {
+            this.splider(day, company);
+        }else if(main.getStatus().equals(CommonInfo.MAIN_STATUS_DOWNLOADING)) {
+        	//重新下载文件（跳过数据下载）
+        	mainService.doBatchDownloadFiles(day, company);
+        }else if (main.getStatus().equals(CommonInfo.MAIN_STATUS_DOWNLOADED)) {
             // 解压对方网站bug，有zip压缩包的情况
             FileFilter filter = new FileFilter() {
                 @Override
@@ -442,22 +338,25 @@
                         return false;
                 }
             };
-            File[] zipList = file.listFiles(filter);
-            for (File f : zipList) {
-                // System.out.println(f.getName());
-                UnZipFile.unZipFiles(f, file.getPath() + "\\");
-                f.delete();
-            }
+            try {
+            	File[] zipList = file.listFiles(filter);
+                for (File f : zipList) {
+                    UnZipFile.unZipFiles(f, file.getPath() + "\\");
+//                    f.delete();
+                }	
+			} catch (Exception e) {
+				log.info("解压缩异常", e);
+				mainService.insertErrorData("", CommonInfo.GRAB_STATUS_UNZIP_ERROR, "解压缩异常", company.getCompanycode());
+			}
             // 已经下载完成，还没有校验的
             List<Info> infos = infoDao.selectInfo(main.getId(), null);
             // 1 查找的info数量 != main的总数量
             if (main.getTotal() != infos.size()) {
                 // 数量不对，说明有漏的，需要重新下载
-                // 修改主表状态 从第1页 重新下载
+                // 修改主表状态 重新下载
                 main.setStatus(CommonInfo.MAIN_STATUS_DOWNLOADING);
-                main.setStartPage(1);
                 mainDao.updateByPrimaryKeySelective(main);
-                this.splider(day);
+                this.splider(day, company);
                 return;
             }
             // 2 数量是相等的，查查下载的文件是不是够数，有没有漏下的文件
@@ -482,30 +381,91 @@
             if (notExistsList.size() > 0) {
                 // 修改主表状态 从第1页 重新下载
                 main.setStatus(CommonInfo.MAIN_STATUS_DOWNLOADING);
-                main.setStartPage(1);
                 mainDao.updateByPrimaryKeySelective(main);
                 // 下载
-                this.splider(day);
+                this.splider(day, company);
             } else {
                 // 没有垃圾数据 文件也都下载下来了 修改状态为校验通过
                 main.setStatus(CommonInfo.MAIN_STATUS_OVER);
                 mainDao.updateByPrimaryKeySelective(main);
             }
         } else if (main.getStatus().equals(CommonInfo.MAIN_STATUS_OVER)) {
-            log.info("开始上传文件!");
-            // 要进行ftp的文件传输
-            main.setStatus(CommonInfo.MAIN_STATUS_FTP);
-            mainDao.updateByPrimaryKeySelective(main);
-            log.info("修改main的状态为FTP成功!");
-            // 调用ftp进行上传
-            for (File f : list) {
-                InputStream input = new FileInputStream(f);
-                FtpUtil.uploadFile(f.getName(), input);
-            }
-            log.info("文件全部上传完成!");
-            main.setStatus(CommonInfo.MAIN_STATUS_FTP_END);
-            mainDao.updateByPrimaryKeySelective(main);
-            log.info("修改main的状态为FTP_END成功!");
+        	log.info("开始上传文件!");
+        	try {
+        		// 调用ftp进行上传
+                for (File f : list) {
+                    InputStream input = new FileInputStream(f);
+                    FtpUtil.uploadFile(f.getName(), input);
+                }
+                // 要进行ftp的文件传输
+                main.setStatus(CommonInfo.MAIN_STATUS_FTP);
+                mainDao.updateByPrimaryKeySelective(main);
+                //写入水果通
+                //1、写入yw_hddz_ocrwjsb表；2、写入s_log_err表
+                mainService.insertFreshData(day, company.getCompanycode());
+                log.info("文件全部上传完成!");
+			} catch (Exception e) {
+				log.info("ftp上传异常",e);
+				mainService.insertErrorData(day, CommonInfo.GRAB_STATUS_FTP_UPLOAD_ERROR, "文件上传失败",company.getCompanycode());
+			}
         }
     }
+	//写入水果通
+  	@Override
+  	@Transactional
+  	public void insertFreshData(String day, String companyCode) {
+  		//需要写入的数据
+  		List<Info> listInfoEnd = mainService.listInfoEnd(day, companyCode);
+  		if(listInfoEnd == null || listInfoEnd.isEmpty()) {
+  			return;
+  		}
+  		//转换成String
+  		List<String> listString = listInfoEnd.stream().map(a -> a.getYwbh()).collect(Collectors.toList());
+  		//先去掉已存在的数据
+  		List<HddzOcrwjsb> listHddzOcr = hddzMapper.listOcrByYwbh(listString);
+  		log.info("listHddzOcr=="+listHddzOcr);
+  		List<String> listHddzOcrString = new ArrayList<String>();
+  		List<Info> listInfoEnd_t = new ArrayList<Info>();
+  		if(listHddzOcr != null && listHddzOcr.size() > 0) {
+  			listHddzOcrString = listHddzOcr.stream().map(a -> a.getYwbh()).collect(Collectors.toList());
+  			for(Info info : listInfoEnd) {
+  				if(!listHddzOcrString.contains(info.getYwbh())) {
+  					listInfoEnd_t.add(info);
+  				}
+  			}
+  		}else {
+  			listInfoEnd_t = listInfoEnd;
+  		}
+  		if(listInfoEnd_t.isEmpty()) return;
+  		//转换格式
+  		List<HddzOcrwjsb> l = new ArrayList<HddzOcrwjsb>();
+  		List<S_log_err> slog = new ArrayList<S_log_err>();
+  		for(Info info : listInfoEnd_t) {
+  			HddzOcrwjsb h = new HddzOcrwjsb();
+  			h.setWjmc(info.getFileName().replace("-", ""));
+  			h.setYwbh(info.getYwbh());
+  			h.setWjlx(CommonInfo.FILE_DOWNLOAD_TYPE);
+  			h.setZbrq(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
+  			h.setSfcz("Y");
+  			//防止出错
+  			h.setWjlj(CommonInfo.FILE_WEB_PATH_PRE + info.getFileName().replace("-", "") + CommonInfo.FILE_DOWNLOAD_SUFFIX);
+  			l.add(h);
+  			S_log_err s = new S_log_err();
+  			s.setEid(UUID.randomUUID().toString());
+  			s.setTablename(CommonInfo.FILE_UPLOAD_TABLENAME);
+  			s.setMainid(info.getYwbh());
+  			s.setCjsj(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
+  			s.setCscs(CommonInfo.MAIN_STATUS_DOWNLOADING);
+  			s.setSfcg(CommonInfo.MAIN_STATUS_DOWNLOADING);
+  			s.setFunname(CommonInfo.FILE_UPLOAD_FUNNAME);
+  			slog.add(s);
+  		}
+  		log.info("===================");
+  		log.info(JSON.toJSONString(l));
+  		log.info(JSON.toJSONString(slog));
+  		//批量写入ocr
+  		hddzMapper.addDataBatchOcr(l);
+  		//批量写入
+  		hddzMapper.addDataBatchLog(slog);
+	}
 }
Index: src/main/java/com/novaone/util/CommonInfo.java
===================================================================
--- src/main/java/com/novaone/util/CommonInfo.java	(revision 28720)
+++ src/main/java/com/novaone/util/CommonInfo.java	(revision 28721)
@@ -1,5 +1,8 @@
 package com.novaone.util;
 
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
 /**
  * 
  *     
@@ -126,9 +129,69 @@
     public static final String MAIN_STATUS_FTP = "4";
 
     public static final String MAIN_STATUS_FTP_END = "5";
+    
+    // 抓取状态 0:成功1:网站崩溃2:元素超时(改版，崩溃)3:网站接口调用失败
+    public static final String GRAB_STATUS_SUCCESS = "0";
 
+    // 抓取状态 1 程序崩溃
+    public static final String GRAB_STATUS_PROGRAM_ERROR = "1";
+
+    // 抓取状态 2 网站崩溃
+    public static final String GRAB_STATUS_WEB_ERROR = "2";
+
+    // 抓取状态 3 元素异常
+    public static final String GRAB_STATUS_GRAB_ERROR = "3";
+    
+    // 抓取状态 4 推送水果通异常
+    public static final String GRAB_STATUS_PUSH_ERROR = "4";
+    
+    // 抓取状态 6 数据解析失败
+    public static final String GRAB_STATUS_ANALYSIS_ERROR = "6";
+    
+    // 抓取状态 7 查询成功但暂无数据
+    public static final String GRAB_STATUS_SUCCESS_EMPTY = "7";
+    
+    // 抓取状态 8 文件下载
+    public static final String GRAB_STATUS_API_DOWNLOAD_ERROR = "8";
+    
+    // 抓取状态 9 ftp上传失败
+    public static final String GRAB_STATUS_FTP_UPLOAD_ERROR = "9";
+    
+    // 抓取状态 10 接口超时
+    public static final String GRAB_STATUS_API_TIMEOUT = "10";
+    
+    // 抓取状态 11 解压缩异常
+    public static final String GRAB_STATUS_UNZIP_ERROR = "11";
+    
     // 0 正常下载 1 税单暂未生成
     public static final String INFO_STATUS_OK = "0";
 
     public static final String INFO_STATUS_IGNORE = "1";
+    
+    //正本税单查询数量及明细
+    public static final String API_DATA_URL = "http://43.248.49.212/tax2017/Dutyform/cDate";
+    
+    //正本税单下载
+    public static final String API_DATA_DOWNLOAD_URL = "http://43.248.49.212/tax2017/downLoad/downloadFile?taxCodes=%s";
+    
+    //redis-cookie前缀
+    public static final String CURRENT_COMPANY_REDISNAME_TAX = "dyck-tax-cookie-";
+    
+    public static String DOWNLOAD_PATH = "C:/RPA/taxpdf/" + new SimpleDateFormat("yyyy-MM-dd").format(new Date()) + "/";
+    
+    //web路径前缀
+    public static final String FILE_WEB_PATH_PRE = "http://www.fruitease.com:8009/wenjian/CIQ_TAX_ORIGINAL/";
+    
+    // 下载文件后缀
+    public static final String FILE_DOWNLOAD_SUFFIX = ".pdf";
+    
+    //文件类型
+    public static final String FILE_DOWNLOAD_TYPE = "正本税单";
+    
+    //写入的表名
+    public static final String FILE_UPLOAD_TABLENAME = "yw_hddz_ocrwjsb";
+    
+    //写入的funname
+    public static final String FILE_UPLOAD_FUNNAME = "DataToFreshPort";
+    
 }
Index: src/main/java/com/novaone/util/CommonUtils.java
===================================================================
--- src/main/java/com/novaone/util/CommonUtils.java	(revision 0)
+++ src/main/java/com/novaone/util/CommonUtils.java	(revision 28721)
@@ -0,0 +1,188 @@
+/**    
+ * 文件名：CommonUtils.java    
+ *    
+ * 版本信息：    
+ * 日期：2019年2月12日    
+ * Copyright 足下 Corporation 2019     
+ * 版权所有    
+ *    
+ */
+package com.novaone.util;
+
+import java.net.URL;
+import java.net.URLDecoder;
+import java.net.URLEncoder;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Collection;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.apache.commons.lang.StringEscapeUtils;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.serializer.SerializerFeature;
+
+import lombok.extern.slf4j.Slf4j;
+
+@Slf4j
+public class CommonUtils {
+
+	private static SimpleDateFormat sdfA = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+	private static SimpleDateFormat sdf_Month = new SimpleDateFormat("yyyy-MM");
+	private static SimpleDateFormat sdf_Day = new SimpleDateFormat("yyyy-MM-dd");
+    /**
+     * 判断传入的数据是否为空
+     * @param o 
+     * @return
+     */
+    public static boolean isEmpty(Object o) {
+        if (o == null) {
+            return true;
+        }
+        if (o.equals("null") || o.equals("NULL")) {
+            return true;
+        }
+
+        if (o instanceof String) {
+            if (((String) o).trim().length() == 0) {
+                return true;
+            }
+        } else if (o instanceof Collection) {
+            if (((Collection) o).isEmpty()) {
+                return true;
+            }
+        } else if (o instanceof List) {
+            if (((List) o).isEmpty()) {
+                return true;
+            }
+
+        } else if (o.getClass().isArray()) {
+            if (((Object[]) o).length == 0) {
+                return true;
+            }
+        } else if (o instanceof Map) {
+            if (((Map) o).isEmpty()) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    public static boolean checkMunber(String str) {
+        Pattern pattern = Pattern.compile("^[0-9]*$");
+        Matcher matcher = pattern.matcher((CharSequence) str);
+        return matcher.matches();
+    }
+    public static String getFormatDateToSecond() {
+        return sdfA.format(new Date());
+    }
+    /**
+     * 获取年-月  例如：2021-05
+     * @Title: getFormatDateToMonth
+     * @Description: TODO
+     * @param: @return   
+     * @return: String
+     * @author gubj  
+     * @date 2021年5月31日 下午2:08:20
+     */
+    public static String getFormatDateToMonth() {
+    	return sdf_Month.format(new Date());
+    }
+    /**
+     * 获取当前日期  yyyy-mm-dd
+     * @Title: getFormatDateToDay
+     * @Description: TODO
+     * @param: @return   
+     * @return: String
+     * @author gubj  
+     * @date 2021年5月31日 下午6:02:47
+     */
+    public static String getFormatDateToDay() {
+    	return sdf_Day.format(new Date());
+    }
+    /**
+     * 获取当前日期三个月前的日期
+     * @Title: getFormatDateToDay
+     * @Description: TODO
+     * @param: @return   
+     * @return: String
+     * @author gubj  
+     * @date 2021年5月31日 下午6:01:42
+     */
+    public static String getFormatDateToThreeMonthBefore() {
+    	Calendar calendar = Calendar.getInstance(); //得到日历
+    	calendar.setTime(new Date());//把当前时间赋给日历
+    	calendar.add(calendar.MONTH, -3); //设置为前3月
+    	return sdf_Day.format(calendar.getTimeInMillis());
+    }
+    /**
+     * 获取上一个月的月份
+     * @return
+     */
+    public static String getFormatDateToOneMonthBefore() {
+    	try {
+    		String yeasMonth = getFormatDateToMonth();
+            Date date = sdf_Month.parse(yeasMonth);
+            Calendar calendar = Calendar.getInstance();
+            calendar.setTime(date);
+            calendar.set(Calendar.MONTH, calendar.get(Calendar.MONTH) - 1); // 设置为上一个月
+            date = calendar.getTime();
+            return sdf_Month.format(date);
+		} catch (Exception e) {
+			return "";
+		}
+    }
+    /**
+     * 获取固定时间几天后的日期.
+     *
+     * @param days
+     * @return
+     */
+    public static String getAfterDaysDate(Date d, int days) {
+    	SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+        Calendar canlendar = Calendar.getInstance(); 
+        if(CommonUtils.isEmpty(d)) {
+        	Date date = new Date();
+        	canlendar.setTime(date);
+        }else {
+        	canlendar.setTime(d);
+        }
+        canlendar.add(Calendar.DATE, days); 
+        return sdf.format(canlendar.getTime());
+    }
+    /**
+     * 获取某月的周一至周五
+     * @Title: getDates
+     * @param: @param year
+     * @param: @param month
+     * @param: @return   
+     * @return: List<Date>
+     * @author gubj  
+     * @date 2021年8月17日 上午10:28:17
+     */
+    public static List<String> getMonthWorkDays(int year, int month) {
+		List<String> dates = new ArrayList<String>();
+		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+
+		Calendar cal = Calendar.getInstance();
+		cal.set(Calendar.YEAR, year);
+		cal.set(Calendar.MONTH, month - 1);
+		cal.set(Calendar.DATE, 1);
+		while (cal.get(Calendar.YEAR) == year && cal.get(Calendar.MONTH) < month) {
+			int day = cal.get(Calendar.DAY_OF_WEEK);
+ 
+			if (!(day == Calendar.SUNDAY || day == Calendar.SATURDAY)) {
+				dates.add(sdf.format(cal.getTime().clone()));
+			}
+			cal.add(Calendar.DATE, 1);
+		}
+		return dates;
+	}
+
+}
Index: src/main/java/com/novaone/util/FileUtil.java
===================================================================
--- src/main/java/com/novaone/util/FileUtil.java	(revision 0)
+++ src/main/java/com/novaone/util/FileUtil.java	(revision 28721)
@@ -0,0 +1,66 @@
+package com.novaone.util;
+
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.HttpURLConnection;
+import java.net.URL;
+
+public class FileUtil {
+	
+    public static void downLoadByUrl(String urlStr, String fileName,String savePath,String jsessionid) throws IOException {
+    	System.err.println(urlStr);
+    	System.err.println(fileName);
+    	System.err.println(savePath);
+    	System.err.println(jsessionid);
+		URL url = new URL(urlStr);
+		HttpURLConnection conn = (HttpURLConnection) url.openConnection();
+		// 设置超时间为3秒
+		conn.setConnectTimeout(5 * 1000);
+		// 防止屏蔽程序抓取而返回403错误
+		conn.setRequestProperty("User-Agent",
+				"Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
+		conn.setRequestProperty("Cookie", "JSESSIONID="+jsessionid);
+		conn.setRequestProperty("Content-Type", "application/pdf");
+		conn.setRequestProperty("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
+		// 得到输入流
+		InputStream inputStream = conn.getInputStream();
+		// 获取自己数组
+		byte[] getData = readInputStream(inputStream);
+		// 文件保存位置
+		File saveDir = new File(savePath);
+		if (!saveDir.exists()) {
+			saveDir.mkdirs();
+		}
+		File file = new File(saveDir + File.separator + fileName + ".zip");
+		FileOutputStream fos = new FileOutputStream(file);
+		fos.write(getData);
+		if (fos != null) {
+			fos.close();
+		}
+		if (inputStream != null) {
+			inputStream.close();
+		}
+	}
+ 
+	/**
+	 * 从输入流中获取字节数组
+	 * 
+	 * @param inputStream
+	 * @return
+	 * @throws IOException
+	 */
+	public static byte[] readInputStream(InputStream inputStream)
+			throws IOException {
+		byte[] buffer = new byte[1024];
+		int len = 0;
+		ByteArrayOutputStream bos = new ByteArrayOutputStream();
+		while ((len = inputStream.read(buffer)) != -1) {
+			bos.write(buffer, 0, len);
+		}
+		bos.close();
+		return bos.toByteArray();
+	}
+}
\ No newline at end of file
Index: src/main/java/com/novaone/util/FtpUtil.java
===================================================================
--- src/main/java/com/novaone/util/FtpUtil.java	(revision 28720)
+++ src/main/java/com/novaone/util/FtpUtil.java	(revision 28721)
@@ -20,9 +20,10 @@
     private static String FTP_PASSWORD = "wjftp2017";
 
     // 图片路径
-    private static String FTP_BASEPATH = "/CIQ_TAX_ORIGINAL/";
+    private static String FTP_BASEPATH = "/wenjian/CIQ_TAX_ORIGINAL/";
+//    private static String FTP_BASEPATH = "/CIQ_TAX_ORIGINAL/";
 
-    public static boolean uploadFile(String originFileName, InputStream input) {
+    public static boolean uploadFile(String originFileName, InputStream input) throws Exception {
         boolean success = false;
         FTPClient ftp = new FTPClient();
         ftp.setControlEncoding("UTF-8");
@@ -43,6 +44,7 @@
             success = true;
         } catch (IOException e) {
             e.printStackTrace();
+            throw e;
         } finally {
             try {
                 if (input != null) {
@@ -61,7 +63,7 @@
     }
 
     public static Boolean uploadFile(String path, InputStream inputStream, String ftpAddress, int ftpPort,
-            String ftpName, String ftpPassWord, String ftpBasePath) {
+            String ftpName, String ftpPassWord, String ftpBasePath) throws Exception{
         FTP_ADDRESS = ftpAddress;
         FTP_PORT = ftpPort;
         FTP_USERNAME = ftpName;
Index: src/main/java/com/novaone/util/HttpUtil.java
===================================================================
--- src/main/java/com/novaone/util/HttpUtil.java	(revision 28720)
+++ src/main/java/com/novaone/util/HttpUtil.java	(revision 28721)
@@ -10,12 +10,18 @@
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Map.Entry;
+import java.util.concurrent.TimeUnit;
 
 import javax.servlet.http.HttpServletRequest;
 
 import org.apache.commons.lang.StringUtils;
 
 import net.sf.json.JSONArray;
+import okhttp3.MediaType;
+import okhttp3.OkHttpClient;
+import okhttp3.Request;
+import okhttp3.RequestBody;
+import okhttp3.Response;
 
 public class HttpUtil {
 
@@ -225,5 +231,80 @@
     // // }
     //
     // }
+    public static String getDutyform(String urlStr, String param, String cookie) throws IOException {
+        OkHttpClient client = new OkHttpClient.Builder().connectTimeout(30, TimeUnit.SECONDS)
+                .pingInterval(10, TimeUnit.SECONDS).readTimeout(60, TimeUnit.SECONDS).writeTimeout(60, TimeUnit.SECONDS)
+                .build();
 
+        MediaType mediaType = MediaType.parse("application/json");
+        RequestBody body = RequestBody.create(mediaType, param);
+        Request request = new Request.Builder().url(urlStr).post(body).addHeader("Accept",
+                "application/json, text/plain, */*")
+                .addHeader("Accept-Encoding", "gzip, deflate")
+                .addHeader("Accept-Language", "zh-CN,zh;q=0.9")
+                .addHeader("Cache-Control", "no-cache")
+                .addHeader("Host", "43.248.49.212")
+                .addHeader("Connection", "keep-alive")
+                .addHeader("isAjax", "true")
+                .addHeader("Origin", "http://43.248.49.212")
+                .addHeader("Pragma", "no-cache")
+                .addHeader("Referer", "http://43.248.49.212/tax2017/")
+                .addHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36://43.248.49.212/tax2017/")
+                .addHeader("Cookie", "JSESSIONID=" + cookie)
+                .addHeader("Content-Type", "application/json").build();
+
+        Response response = client.newCall(request).execute();
+        return response.body().string();
+
+    }
+    public static String getDutyform(String urlStr, String jsessionid) throws Exception {
+        URL url = new URL(urlStr);
+        HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
+        urlConnection.setDoOutput(true);// 允许连接提交信息
+        urlConnection.setRequestMethod("GET");// 网页提交方式“GET”、“POST”
+        urlConnection.setRequestProperty("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9");
+        urlConnection.setRequestProperty("Accept-Encoding", "gzip, deflate");
+        urlConnection.setRequestProperty("Accept-Language", "zh-CN,zh;q=0.9");
+        urlConnection.setRequestProperty("Cache-Control", "max-age=0");
+        urlConnection.setRequestProperty("Connection", "keep-alive");
+//        urlConnection.setRequestProperty("Content-Type", "application/json");
+        urlConnection.setRequestProperty("Host", "43.248.49.212");
+//        urlConnection.setRequestProperty("isAjax", "true");
+//        urlConnection.setRequestProperty("Origin", "http://43.248.49.212");
+//        urlConnection.setRequestProperty("Pragma", "no-cache");
+        urlConnection.setRequestProperty("Referer", "http://app.singlewindow.cn/");
+//        urlConnection.setRequestProperty("x-forwarded-for", "58.246.203.106");
+        urlConnection.setRequestProperty("If-Modified-Since", "Mon, 19 Nov 2018 10:27:27 GMT");
+        urlConnection.setRequestProperty("Upgrade-Insecure-Requests", "1");
+        urlConnection.setRequestProperty("User-Agent",
+                "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36");
+        urlConnection.setRequestProperty("Cookie", "JSESSIONID=" + jsessionid);
+
+        StringBuilder sb = new StringBuilder();
+        BufferedReader br = null;
+        try {
+        	int code = urlConnection.getResponseCode();
+        	System.err.println("code==="+code);
+        	if (code == 302) {
+        	   String header = urlConnection.getHeaderField("location"); // 跳转的目标地址是在response的 HTTP-HEAD 中的，location的值
+        	   System.err.println("======+header");
+        	   URL url1 = new URL(header);
+        	   urlConnection = (HttpURLConnection) url1.openConnection();
+        	}
+        	
+            br = new BufferedReader(new InputStreamReader(urlConnection.getInputStream(), "utf-8")); // 获取输入流
+            String line = null;
+            while ((line = br.readLine()) != null) {
+                sb.append(line + "\n");
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            throw e;
+        } finally {
+            if (br != null) {
+                br.close();
+            }
+        }
+        return sb.toString();
+    }
 }  
\ No newline at end of file
Index: src/main/resources/application-guangxi.properties
===================================================================
--- src/main/resources/application-guangxi.properties	(revision 0)
+++ src/main/resources/application-guangxi.properties	(revision 28721)
@@ -0,0 +1,78 @@
+#spring.datasource.url=jdbc\:mysql\://127.0.0.1\:3306/tax?useUnicode\=true&characterEncoding\=utf8
+#spring.datasource.username=root
+#spring.datasource.password=password
+spring.datasource.url=jdbc\:mysql\://rm-bp13i26r6189ex0l2o.mysql.rds.aliyuncs.com\:3306/tax?useUnicode\=true&characterEncoding\=utf8
+spring.datasource.username=nova123
+spring.datasource.password=novax0l2#
+spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
+spring.datasource.driver-class-name=com.mysql.jdbc.Driver
+spring.datasource.fruitease.url=jdbc\:sqlserver\://47.97.182.194\:1433;DatabaseName\=zjnb
+spring.datasource.fruitease.username=oheng
+spring.datasource.fruitease.password=Hongshen_110
+spring.datasource.fruitease.type=com.alibaba.druid.pool.DruidDataSource
+spring.datasource.fruitease.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver
+
+
+#--------------------------
+# 下面为连接池的补充设置，应用到上面所有数据源中
+# 初始化大小，最小，最大
+spring.datasource.initialSize=2
+spring.datasource.minIdle=2
+spring.datasource.maxActive=200
+# 配置获取连接等待超时的时间
+spring.datasource.maxWait=60000
+# 配置间隔多久才进行一次检测，检测需要关闭的空闲连接，单位是毫秒 
+spring.datasource.timeBetweenEvictionRunsMillis=60000
+# 配置一个连接在池中最小生存的时间，单位是毫秒 
+spring.datasource.minEvictableIdleTimeMillis=300000
+spring.datasource.validationQuery=SELECT 1 FROM DUAL
+spring.datasource.testWhileIdle=true
+spring.datasource.testOnBorrow=false
+spring.datasource.testOnReturn=false
+# 打开PSCache，并且指定每个连接上PSCache的大小 
+spring.datasource.poolPreparedStatements=true
+spring.datasource.maxPoolPreparedStatementPerConnectionSize=20
+# 配置监控统计拦截的filters，去掉后监控界面sql无法统计，'wall'用于防火墙 
+spring.datasource.filters=stat,wall,log4j
+# 通过connectProperties属性来打开mergeSql功能；慢SQL记录
+spring.datasource.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
+# 合并多个DruidDataSource的监控数据
+#spring.datasource.useGlobalDataSourceStat=true
+#server
+server.port=9007
+#jsp
+spring.mvc.view.prefix=/WEB-INF/jsp/
+spring.mvc.view.suffix=.jsp
+#https
+#server.port= 8446
+#server.ssl.key-store= classpath:tomcat.jks
+#server.ssl.key-store-password= 214421884860532
+#https test
+#server.port= 8447
+#server.ssl.key-store= classpath:tomcat.jks
+#server.ssl.key-store-password= 214421884860532
+#redis
+spring.redis.database=13
+spring.redis.host=118.31.6.143
+spring.redis.port=6379
+spring.redis.password=nova123
+spring.redis.pool.max-active=8  
+spring.redis.pool.max-wait=-1  
+spring.redis.pool.max-idle=8  
+spring.redis.pool.min-idle=0  
+#spring.redis.timeout=3000ms
+#activemq
+#spring.activemq.broker-url=tcp://47.96.73.216:61616
+#spring.activemq.broker-url=tcp://121.41.84.244:61616
+##spring.activemq.user=admin
+##spring.activemq.password=nova244-activemq
+#spring.activemq.in-memory=true
+#spring.activemq.pool.enabled=false
+#spring.activemq.packages.trust-all=true
+#log
+logging.config=classpath:logback.xml
+#date queryFreightList
+#freightDate = 2018/07/31
+
+CURRENT_COMPANY_CODE=2100030079194
+  
\ No newline at end of file
Index: src/main/resources/application-ningbo.properties
===================================================================
--- src/main/resources/application-ningbo.properties	(revision 0)
+++ src/main/resources/application-ningbo.properties	(revision 28721)
@@ -0,0 +1,74 @@
+#spring.datasource.url=jdbc\:mysql\://127.0.0.1\:3306/tax?useUnicode\=true&characterEncoding\=utf8
+#spring.datasource.username=root
+#spring.datasource.password=password
+spring.datasource.url=jdbc\:mysql\://rm-bp13i26r6189ex0l2o.mysql.rds.aliyuncs.com\:3306/tax?useUnicode\=true&characterEncoding\=utf8
+spring.datasource.username=nova123
+spring.datasource.password=novax0l2#
+spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
+spring.datasource.driver-class-name=com.mysql.jdbc.Driver
+
+
+
+#--------------------------
+# 下面为连接池的补充设置，应用到上面所有数据源中
+# 初始化大小，最小，最大
+spring.datasource.initialSize=2
+spring.datasource.minIdle=2
+spring.datasource.maxActive=200
+# 配置获取连接等待超时的时间
+spring.datasource.maxWait=60000
+# 配置间隔多久才进行一次检测，检测需要关闭的空闲连接，单位是毫秒 
+spring.datasource.timeBetweenEvictionRunsMillis=60000
+# 配置一个连接在池中最小生存的时间，单位是毫秒 
+spring.datasource.minEvictableIdleTimeMillis=300000
+spring.datasource.validationQuery=SELECT 1 FROM DUAL
+spring.datasource.testWhileIdle=true
+spring.datasource.testOnBorrow=false
+spring.datasource.testOnReturn=false
+# 打开PSCache，并且指定每个连接上PSCache的大小 
+spring.datasource.poolPreparedStatements=true
+spring.datasource.maxPoolPreparedStatementPerConnectionSize=20
+# 配置监控统计拦截的filters，去掉后监控界面sql无法统计，'wall'用于防火墙 
+spring.datasource.filters=stat,wall,log4j
+# 通过connectProperties属性来打开mergeSql功能；慢SQL记录
+spring.datasource.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
+# 合并多个DruidDataSource的监控数据
+#spring.datasource.useGlobalDataSourceStat=true
+#server
+server.port=9007
+#jsp
+spring.mvc.view.prefix=/WEB-INF/jsp/
+spring.mvc.view.suffix=.jsp
+#https
+#server.port= 8446
+#server.ssl.key-store= classpath:tomcat.jks
+#server.ssl.key-store-password= 214421884860532
+#https test
+#server.port= 8447
+#server.ssl.key-store= classpath:tomcat.jks
+#server.ssl.key-store-password= 214421884860532
+#redis
+spring.redis.database=13
+spring.redis.host=118.31.6.143
+spring.redis.port=6379
+spring.redis.password=nova123
+spring.redis.pool.max-active=8  
+spring.redis.pool.max-wait=-1  
+spring.redis.pool.max-idle=8  
+spring.redis.pool.min-idle=0  
+#spring.redis.timeout=3000ms
+#activemq
+#spring.activemq.broker-url=tcp://47.96.73.216:61616
+#spring.activemq.broker-url=tcp://121.41.84.244:61616
+##spring.activemq.user=admin
+##spring.activemq.password=nova244-activemq
+#spring.activemq.in-memory=true
+#spring.activemq.pool.enabled=false
+#spring.activemq.packages.trust-all=true
+#log
+logging.config=classpath:logback.xml
+#date queryFreightList
+#freightDate = 2018/07/31
+
+CURRENT_COMPANY_CODE=JJ3G900134569
+  
\ No newline at end of file
Index: src/main/resources/application-pulaikesi.properties
===================================================================
--- src/main/resources/application-pulaikesi.properties	(revision 0)
+++ src/main/resources/application-pulaikesi.properties	(revision 28721)
@@ -0,0 +1,102 @@
+#spring.datasource.url=jdbc\:mysql\://127.0.0.1\:3306/tax?useUnicode\=true&characterEncoding\=utf8
+#spring.datasource.username=root
+#spring.datasource.password=password
+spring.datasource.url=jdbc\:mysql\://rm-bp13i26r6189ex0l2o.mysql.rds.aliyuncs.com\:3306/tax?useUnicode\=true&characterEncoding\=utf8
+spring.datasource.username=nova123
+spring.datasource.password=novax0l2#
+spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
+spring.datasource.driver-class-name=com.mysql.jdbc.Driver
+spring.datasource.fruitease.url=jdbc\:sqlserver\://47.97.182.194\:1433;DatabaseName\=zjnb
+spring.datasource.fruitease.username=oheng
+spring.datasource.fruitease.password=Hongshen_110
+spring.datasource.fruitease.type=com.alibaba.druid.pool.DruidDataSource
+spring.datasource.fruitease.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver
+
+
+
+#--------------------------
+# 下面为连接池的补充设置，应用到上面所有数据源中
+# 初始化大小，最小，最大
+spring.datasource.initialSize=2
+spring.datasource.minIdle=2
+spring.datasource.maxActive=200
+# 配置获取连接等待超时的时间
+spring.datasource.maxWait=60000
+# 配置间隔多久才进行一次检测，检测需要关闭的空闲连接，单位是毫秒 
+spring.datasource.timeBetweenEvictionRunsMillis=60000
+# 配置一个连接在池中最小生存的时间，单位是毫秒 
+spring.datasource.minEvictableIdleTimeMillis=300000
+spring.datasource.validationQuery=SELECT 1 FROM DUAL
+spring.datasource.testWhileIdle=true
+spring.datasource.testOnBorrow=false
+spring.datasource.testOnReturn=false
+# 打开PSCache，并且指定每个连接上PSCache的大小 
+spring.datasource.poolPreparedStatements=true
+spring.datasource.maxPoolPreparedStatementPerConnectionSize=20
+# 配置监控统计拦截的filters，去掉后监控界面sql无法统计，'wall'用于防火墙 
+spring.datasource.filters=stat,wall,log4j
+# 通过connectProperties属性来打开mergeSql功能；慢SQL记录
+spring.datasource.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
+# 合并多个DruidDataSource的监控数据
+#spring.datasource.useGlobalDataSourceStat=true
+
+
+# åå§åå¤§å°ï¼æå°ï¼æå¤§ sqlserver
+spring.datasource.fruitease.initialSize=2
+spring.datasource.fruitease.minIdle=2
+spring.datasource.fruitease.maxActive=200
+# éç½®è·åè¿æ¥ç­å¾è¶æ¶çæ¶é´
+spring.datasource.fruitease.maxWait=60000
+# éç½®é´éå¤ä¹æè¿è¡ä¸æ¬¡æ£æµï¼æ£æµéè¦å³é­çç©ºé²è¿æ¥ï¼åä½æ¯æ¯«ç§ 
+spring.datasource.fruitease.timeBetweenEvictionRunsMillis=60000
+# éç½®ä¸ä¸ªè¿æ¥å¨æ± ä¸­æå°çå­çæ¶é´ï¼åä½æ¯æ¯«ç§ 
+spring.datasource.fruitease.minEvictableIdleTimeMillis=300000
+spring.datasource.fruitease.validationQuery=SELECT 1
+spring.datasource.fruitease.testWhileIdle=true
+spring.datasource.fruitease.testOnBorrow=false
+spring.datasource.fruitease.testOnReturn=false
+# æå¼PSCacheï¼å¹¶ä¸æå®æ¯ä¸ªè¿æ¥ä¸PSCacheçå¤§å° 
+spring.datasource.fruitease.poolPreparedStatements=true
+spring.datasource.fruitease.maxPoolPreparedStatementPerConnectionSize=20
+# éç½®çæ§ç»è®¡æ¦æªçfiltersï¼å»æåçæ§çé¢sqlæ æ³ç»è®¡ï¼'wall'ç¨äºé²ç«å¢ 
+spring.datasource.fruitease.filters=stat,wall,log4j
+# éè¿connectPropertieså±æ§æ¥æå¼mergeSqlåè½ï¼æ¢SQLè®°å½
+spring.datasource.fruitease.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
+
+#server
+server.port=9007
+#jsp
+spring.mvc.view.prefix=/WEB-INF/jsp/
+spring.mvc.view.suffix=.jsp
+#https
+#server.port= 8446
+#server.ssl.key-store= classpath:tomcat.jks
+#server.ssl.key-store-password= 214421884860532
+#https test
+#server.port= 8447
+#server.ssl.key-store= classpath:tomcat.jks
+#server.ssl.key-store-password= 214421884860532
+#redis
+spring.redis.database=13
+spring.redis.host=118.31.6.143
+spring.redis.port=6379
+spring.redis.password=nova123
+spring.redis.pool.max-active=8  
+spring.redis.pool.max-wait=-1  
+spring.redis.pool.max-idle=8  
+spring.redis.pool.min-idle=0  
+#spring.redis.timeout=3000ms
+#activemq
+#spring.activemq.broker-url=tcp://47.96.73.216:61616
+#spring.activemq.broker-url=tcp://121.41.84.244:61616
+##spring.activemq.user=admin
+##spring.activemq.password=nova244-activemq
+#spring.activemq.in-memory=true
+#spring.activemq.pool.enabled=false
+#spring.activemq.packages.trust-all=true
+#log
+logging.config=classpath:logback.xml
+logging.level.tk.mybatis=DEBUG
+logging.level.com.novaone=debug=DEBUG
+
+CURRENT_COMPANY_CODE=2100040088999
Index: src/main/resources/application-shanghai.properties
===================================================================
--- src/main/resources/application-shanghai.properties	(revision 0)
+++ src/main/resources/application-shanghai.properties	(revision 28721)
@@ -0,0 +1,102 @@
+#spring.datasource.url=jdbc\:mysql\://127.0.0.1\:3306/tax?useUnicode\=true&characterEncoding\=utf8
+#spring.datasource.username=root
+#spring.datasource.password=password
+spring.datasource.url=jdbc\:mysql\://rm-bp13i26r6189ex0l2o.mysql.rds.aliyuncs.com\:3306/tax?useUnicode\=true&characterEncoding\=utf8
+spring.datasource.username=nova123
+spring.datasource.password=novax0l2#
+spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
+spring.datasource.driver-class-name=com.mysql.jdbc.Driver
+spring.datasource.fruitease.url=jdbc\:sqlserver\://47.97.182.194\:1433;DatabaseName\=zjnb
+spring.datasource.fruitease.username=oheng
+spring.datasource.fruitease.password=Hongshen_110
+spring.datasource.fruitease.type=com.alibaba.druid.pool.DruidDataSource
+spring.datasource.fruitease.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver
+
+
+
+#--------------------------
+# 下面为连接池的补充设置，应用到上面所有数据源中
+# 初始化大小，最小，最大
+spring.datasource.initialSize=2
+spring.datasource.minIdle=2
+spring.datasource.maxActive=200
+# 配置获取连接等待超时的时间
+spring.datasource.maxWait=60000
+# 配置间隔多久才进行一次检测，检测需要关闭的空闲连接，单位是毫秒 
+spring.datasource.timeBetweenEvictionRunsMillis=60000
+# 配置一个连接在池中最小生存的时间，单位是毫秒 
+spring.datasource.minEvictableIdleTimeMillis=300000
+spring.datasource.validationQuery=SELECT 1 FROM DUAL
+spring.datasource.testWhileIdle=true
+spring.datasource.testOnBorrow=false
+spring.datasource.testOnReturn=false
+# 打开PSCache，并且指定每个连接上PSCache的大小 
+spring.datasource.poolPreparedStatements=true
+spring.datasource.maxPoolPreparedStatementPerConnectionSize=20
+# 配置监控统计拦截的filters，去掉后监控界面sql无法统计，'wall'用于防火墙 
+spring.datasource.filters=stat,wall,log4j
+# 通过connectProperties属性来打开mergeSql功能；慢SQL记录
+spring.datasource.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
+# 合并多个DruidDataSource的监控数据
+#spring.datasource.useGlobalDataSourceStat=true
+
+
+# åå§åå¤§å°ï¼æå°ï¼æå¤§ sqlserver
+spring.datasource.fruitease.initialSize=2
+spring.datasource.fruitease.minIdle=2
+spring.datasource.fruitease.maxActive=200
+# éç½®è·åè¿æ¥ç­å¾è¶æ¶çæ¶é´
+spring.datasource.fruitease.maxWait=60000
+# éç½®é´éå¤ä¹æè¿è¡ä¸æ¬¡æ£æµï¼æ£æµéè¦å³é­çç©ºé²è¿æ¥ï¼åä½æ¯æ¯«ç§ 
+spring.datasource.fruitease.timeBetweenEvictionRunsMillis=60000
+# éç½®ä¸ä¸ªè¿æ¥å¨æ± ä¸­æå°çå­çæ¶é´ï¼åä½æ¯æ¯«ç§ 
+spring.datasource.fruitease.minEvictableIdleTimeMillis=300000
+spring.datasource.fruitease.validationQuery=SELECT 1
+spring.datasource.fruitease.testWhileIdle=true
+spring.datasource.fruitease.testOnBorrow=false
+spring.datasource.fruitease.testOnReturn=false
+# æå¼PSCacheï¼å¹¶ä¸æå®æ¯ä¸ªè¿æ¥ä¸PSCacheçå¤§å° 
+spring.datasource.fruitease.poolPreparedStatements=true
+spring.datasource.fruitease.maxPoolPreparedStatementPerConnectionSize=20
+# éç½®çæ§ç»è®¡æ¦æªçfiltersï¼å»æåçæ§çé¢sqlæ æ³ç»è®¡ï¼'wall'ç¨äºé²ç«å¢ 
+spring.datasource.fruitease.filters=stat,wall,log4j
+# éè¿connectPropertieså±æ§æ¥æå¼mergeSqlåè½ï¼æ¢SQLè®°å½
+spring.datasource.fruitease.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
+
+#server
+server.port=9007
+#jsp
+spring.mvc.view.prefix=/WEB-INF/jsp/
+spring.mvc.view.suffix=.jsp
+#https
+#server.port= 8446
+#server.ssl.key-store= classpath:tomcat.jks
+#server.ssl.key-store-password= 214421884860532
+#https test
+#server.port= 8447
+#server.ssl.key-store= classpath:tomcat.jks
+#server.ssl.key-store-password= 214421884860532
+#redis
+spring.redis.database=13
+spring.redis.host=118.31.6.143
+spring.redis.port=6379
+spring.redis.password=nova123
+spring.redis.pool.max-active=8  
+spring.redis.pool.max-wait=-1  
+spring.redis.pool.max-idle=8  
+spring.redis.pool.min-idle=0  
+#spring.redis.timeout=3000ms
+#activemq
+#spring.activemq.broker-url=tcp://47.96.73.216:61616
+#spring.activemq.broker-url=tcp://121.41.84.244:61616
+##spring.activemq.user=admin
+##spring.activemq.password=nova244-activemq
+#spring.activemq.in-memory=true
+#spring.activemq.pool.enabled=false
+#spring.activemq.packages.trust-all=true
+#log
+logging.config=classpath:logback.xml
+logging.level.tk.mybatis=DEBUG
+logging.level.com.novaone=debug=DEBUG
+
+CURRENT_COMPANY_CODE=2020040121416
Index: src/main/resources/application-shenzhen.properties
===================================================================
--- src/main/resources/application-shenzhen.properties	(revision 0)
+++ src/main/resources/application-shenzhen.properties	(revision 28721)
@@ -0,0 +1,73 @@
+#spring.datasource.url=jdbc\:mysql\://127.0.0.1\:3306/tax?useUnicode\=true&characterEncoding\=utf8
+#spring.datasource.username=root
+#spring.datasource.password=password
+spring.datasource.url=jdbc\:mysql\://rm-bp13i26r6189ex0l2o.mysql.rds.aliyuncs.com\:3306/tax?useUnicode\=true&characterEncoding\=utf8
+spring.datasource.username=nova123
+spring.datasource.password=novax0l2#
+spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
+spring.datasource.driver-class-name=com.mysql.jdbc.Driver
+
+
+
+#--------------------------
+# 下面为连接池的补充设置，应用到上面所有数据源中
+# 初始化大小，最小，最大
+spring.datasource.initialSize=2
+spring.datasource.minIdle=2
+spring.datasource.maxActive=200
+# 配置获取连接等待超时的时间
+spring.datasource.maxWait=60000
+# 配置间隔多久才进行一次检测，检测需要关闭的空闲连接，单位是毫秒 
+spring.datasource.timeBetweenEvictionRunsMillis=60000
+# 配置一个连接在池中最小生存的时间，单位是毫秒 
+spring.datasource.minEvictableIdleTimeMillis=300000
+spring.datasource.validationQuery=SELECT 1 FROM DUAL
+spring.datasource.testWhileIdle=true
+spring.datasource.testOnBorrow=false
+spring.datasource.testOnReturn=false
+# 打开PSCache，并且指定每个连接上PSCache的大小 
+spring.datasource.poolPreparedStatements=true
+spring.datasource.maxPoolPreparedStatementPerConnectionSize=20
+# 配置监控统计拦截的filters，去掉后监控界面sql无法统计，'wall'用于防火墙 
+spring.datasource.filters=stat,wall,log4j
+# 通过connectProperties属性来打开mergeSql功能；慢SQL记录
+spring.datasource.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
+# 合并多个DruidDataSource的监控数据
+#spring.datasource.useGlobalDataSourceStat=true
+#server
+server.port=9007
+#jsp
+spring.mvc.view.prefix=/WEB-INF/jsp/
+spring.mvc.view.suffix=.jsp
+#https
+#server.port= 8446
+#server.ssl.key-store= classpath:tomcat.jks
+#server.ssl.key-store-password= 214421884860532
+#https test
+#server.port= 8447
+#server.ssl.key-store= classpath:tomcat.jks
+#server.ssl.key-store-password= 214421884860532
+#redis
+spring.redis.database=13
+spring.redis.host=118.31.6.143
+spring.redis.port=6379
+spring.redis.password=nova123
+spring.redis.pool.max-active=8  
+spring.redis.pool.max-wait=-1  
+spring.redis.pool.max-idle=8  
+spring.redis.pool.min-idle=0  
+#spring.redis.timeout=3000ms
+#activemq
+#spring.activemq.broker-url=tcp://47.96.73.216:61616
+#spring.activemq.broker-url=tcp://121.41.84.244:61616
+##spring.activemq.user=admin
+##spring.activemq.password=nova244-activemq
+#spring.activemq.in-memory=true
+#spring.activemq.pool.enabled=false
+#spring.activemq.packages.trust-all=true
+#log
+logging.config=classpath:logback.xml
+logging.level.tk.mybatis=DEBUG
+logging.level.com.novaone=debug=DEBUG
+
+CURRENT_COMPANY_CODE=2100060042233
Index: src/main/resources/application-shmaoyi.properties
===================================================================
--- src/main/resources/application-shmaoyi.properties	(revision 0)
+++ src/main/resources/application-shmaoyi.properties	(revision 28721)
@@ -0,0 +1,74 @@
+#spring.datasource.url=jdbc\:mysql\://127.0.0.1\:3306/tax?useUnicode\=true&characterEncoding\=utf8
+#spring.datasource.username=root
+#spring.datasource.password=password
+spring.datasource.url=jdbc\:mysql\://rm-bp13i26r6189ex0l2o.mysql.rds.aliyuncs.com\:3306/tax?useUnicode\=true&characterEncoding\=utf8
+spring.datasource.username=nova123
+spring.datasource.password=novax0l2#
+spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
+spring.datasource.driver-class-name=com.mysql.jdbc.Driver
+
+
+
+#--------------------------
+# 下面为连接池的补充设置，应用到上面所有数据源中
+# 初始化大小，最小，最大
+spring.datasource.initialSize=2
+spring.datasource.minIdle=2
+spring.datasource.maxActive=200
+# 配置获取连接等待超时的时间
+spring.datasource.maxWait=60000
+# 配置间隔多久才进行一次检测，检测需要关闭的空闲连接，单位是毫秒 
+spring.datasource.timeBetweenEvictionRunsMillis=60000
+# 配置一个连接在池中最小生存的时间，单位是毫秒 
+spring.datasource.minEvictableIdleTimeMillis=300000
+spring.datasource.validationQuery=SELECT 1 FROM DUAL
+spring.datasource.testWhileIdle=true
+spring.datasource.testOnBorrow=false
+spring.datasource.testOnReturn=false
+# 打开PSCache，并且指定每个连接上PSCache的大小 
+spring.datasource.poolPreparedStatements=true
+spring.datasource.maxPoolPreparedStatementPerConnectionSize=20
+# 配置监控统计拦截的filters，去掉后监控界面sql无法统计，'wall'用于防火墙 
+spring.datasource.filters=stat,wall,log4j
+# 通过connectProperties属性来打开mergeSql功能；慢SQL记录
+spring.datasource.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
+# 合并多个DruidDataSource的监控数据
+#spring.datasource.useGlobalDataSourceStat=true
+#server
+server.port=9007
+#jsp
+spring.mvc.view.prefix=/WEB-INF/jsp/
+spring.mvc.view.suffix=.jsp
+#https
+#server.port= 8446
+#server.ssl.key-store= classpath:tomcat.jks
+#server.ssl.key-store-password= 214421884860532
+#https test
+#server.port= 8447
+#server.ssl.key-store= classpath:tomcat.jks
+#server.ssl.key-store-password= 214421884860532
+#redis
+spring.redis.database=13
+spring.redis.host=118.31.6.143
+spring.redis.port=6379
+spring.redis.password=nova123
+spring.redis.pool.max-active=8  
+spring.redis.pool.max-wait=-1  
+spring.redis.pool.max-idle=8  
+spring.redis.pool.min-idle=0  
+#spring.redis.timeout=3000ms
+#activemq
+#spring.activemq.broker-url=tcp://47.96.73.216:61616
+#spring.activemq.broker-url=tcp://121.41.84.244:61616
+##spring.activemq.user=admin
+##spring.activemq.password=nova244-activemq
+#spring.activemq.in-memory=true
+#spring.activemq.pool.enabled=false
+#spring.activemq.packages.trust-all=true
+#log
+logging.config=classpath:logback.xml
+#date queryFreightList
+#freightDate = 2018/07/31
+
+CURRENT_COMPANY_CODE=2100040089038
+  
\ No newline at end of file
Index: src/main/resources/application-yilai.properties
===================================================================
--- src/main/resources/application-yilai.properties	(revision 0)
+++ src/main/resources/application-yilai.properties	(revision 28721)
@@ -0,0 +1,102 @@
+#spring.datasource.url=jdbc\:mysql\://127.0.0.1\:3306/tax?useUnicode\=true&characterEncoding\=utf8
+#spring.datasource.username=root
+#spring.datasource.password=password
+spring.datasource.url=jdbc\:mysql\://rm-bp13i26r6189ex0l2o.mysql.rds.aliyuncs.com\:3306/tax?useUnicode\=true&characterEncoding\=utf8
+spring.datasource.username=nova123
+spring.datasource.password=novax0l2#
+spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
+spring.datasource.driver-class-name=com.mysql.jdbc.Driver
+spring.datasource.fruitease.url=jdbc\:sqlserver\://47.97.182.194\:1433;DatabaseName\=zjnb
+spring.datasource.fruitease.username=oheng
+spring.datasource.fruitease.password=Hongshen_110
+spring.datasource.fruitease.type=com.alibaba.druid.pool.DruidDataSource
+spring.datasource.fruitease.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver
+
+
+
+#--------------------------
+# 下面为连接池的补充设置，应用到上面所有数据源中
+# 初始化大小，最小，最大
+spring.datasource.initialSize=2
+spring.datasource.minIdle=2
+spring.datasource.maxActive=200
+# 配置获取连接等待超时的时间
+spring.datasource.maxWait=60000
+# 配置间隔多久才进行一次检测，检测需要关闭的空闲连接，单位是毫秒 
+spring.datasource.timeBetweenEvictionRunsMillis=60000
+# 配置一个连接在池中最小生存的时间，单位是毫秒 
+spring.datasource.minEvictableIdleTimeMillis=300000
+spring.datasource.validationQuery=SELECT 1 FROM DUAL
+spring.datasource.testWhileIdle=true
+spring.datasource.testOnBorrow=false
+spring.datasource.testOnReturn=false
+# 打开PSCache，并且指定每个连接上PSCache的大小 
+spring.datasource.poolPreparedStatements=true
+spring.datasource.maxPoolPreparedStatementPerConnectionSize=20
+# 配置监控统计拦截的filters，去掉后监控界面sql无法统计，'wall'用于防火墙 
+spring.datasource.filters=stat,wall,log4j
+# 通过connectProperties属性来打开mergeSql功能；慢SQL记录
+spring.datasource.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
+# 合并多个DruidDataSource的监控数据
+#spring.datasource.useGlobalDataSourceStat=true
+
+
+# åå§åå¤§å°ï¼æå°ï¼æå¤§ sqlserver
+spring.datasource.fruitease.initialSize=2
+spring.datasource.fruitease.minIdle=2
+spring.datasource.fruitease.maxActive=200
+# éç½®è·åè¿æ¥ç­å¾è¶æ¶çæ¶é´
+spring.datasource.fruitease.maxWait=60000
+# éç½®é´éå¤ä¹æè¿è¡ä¸æ¬¡æ£æµï¼æ£æµéè¦å³é­çç©ºé²è¿æ¥ï¼åä½æ¯æ¯«ç§ 
+spring.datasource.fruitease.timeBetweenEvictionRunsMillis=60000
+# éç½®ä¸ä¸ªè¿æ¥å¨æ± ä¸­æå°çå­çæ¶é´ï¼åä½æ¯æ¯«ç§ 
+spring.datasource.fruitease.minEvictableIdleTimeMillis=300000
+spring.datasource.fruitease.validationQuery=SELECT 1
+spring.datasource.fruitease.testWhileIdle=true
+spring.datasource.fruitease.testOnBorrow=false
+spring.datasource.fruitease.testOnReturn=false
+# æå¼PSCacheï¼å¹¶ä¸æå®æ¯ä¸ªè¿æ¥ä¸PSCacheçå¤§å° 
+spring.datasource.fruitease.poolPreparedStatements=true
+spring.datasource.fruitease.maxPoolPreparedStatementPerConnectionSize=20
+# éç½®çæ§ç»è®¡æ¦æªçfiltersï¼å»æåçæ§çé¢sqlæ æ³ç»è®¡ï¼'wall'ç¨äºé²ç«å¢ 
+spring.datasource.fruitease.filters=stat,wall,log4j
+# éè¿connectPropertieså±æ§æ¥æå¼mergeSqlåè½ï¼æ¢SQLè®°å½
+spring.datasource.fruitease.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
+
+#server
+server.port=9007
+#jsp
+spring.mvc.view.prefix=/WEB-INF/jsp/
+spring.mvc.view.suffix=.jsp
+#https
+#server.port= 8446
+#server.ssl.key-store= classpath:tomcat.jks
+#server.ssl.key-store-password= 214421884860532
+#https test
+#server.port= 8447
+#server.ssl.key-store= classpath:tomcat.jks
+#server.ssl.key-store-password= 214421884860532
+#redis
+spring.redis.database=13
+spring.redis.host=118.31.6.143
+spring.redis.port=6379
+spring.redis.password=nova123
+spring.redis.pool.max-active=8  
+spring.redis.pool.max-wait=-1  
+spring.redis.pool.max-idle=8  
+spring.redis.pool.min-idle=0  
+#spring.redis.timeout=3000ms
+#activemq
+#spring.activemq.broker-url=tcp://47.96.73.216:61616
+#spring.activemq.broker-url=tcp://121.41.84.244:61616
+##spring.activemq.user=admin
+##spring.activemq.password=nova244-activemq
+#spring.activemq.in-memory=true
+#spring.activemq.pool.enabled=false
+#spring.activemq.packages.trust-all=true
+#log
+logging.config=classpath:logback.xml
+logging.level.tk.mybatis=DEBUG
+logging.level.com.novaone=debug=DEBUG
+
+CURRENT_COMPANY_CODE=2100040089031
Index: src/main/resources/application-zhejiang.properties
===================================================================
--- src/main/resources/application-zhejiang.properties	(revision 0)
+++ src/main/resources/application-zhejiang.properties	(revision 28721)
@@ -0,0 +1,74 @@
+#spring.datasource.url=jdbc\:mysql\://127.0.0.1\:3306/tax?useUnicode\=true&characterEncoding\=utf8
+#spring.datasource.username=root
+#spring.datasource.password=password
+spring.datasource.url=jdbc\:mysql\://rm-bp13i26r6189ex0l2o.mysql.rds.aliyuncs.com\:3306/tax?useUnicode\=true&characterEncoding\=utf8
+spring.datasource.username=nova123
+spring.datasource.password=novax0l2#
+spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
+spring.datasource.driver-class-name=com.mysql.jdbc.Driver
+
+
+
+#--------------------------
+# 下面为连接池的补充设置，应用到上面所有数据源中
+# 初始化大小，最小，最大
+spring.datasource.initialSize=2
+spring.datasource.minIdle=2
+spring.datasource.maxActive=200
+# 配置获取连接等待超时的时间
+spring.datasource.maxWait=60000
+# 配置间隔多久才进行一次检测，检测需要关闭的空闲连接，单位是毫秒 
+spring.datasource.timeBetweenEvictionRunsMillis=60000
+# 配置一个连接在池中最小生存的时间，单位是毫秒 
+spring.datasource.minEvictableIdleTimeMillis=300000
+spring.datasource.validationQuery=SELECT 1 FROM DUAL
+spring.datasource.testWhileIdle=true
+spring.datasource.testOnBorrow=false
+spring.datasource.testOnReturn=false
+# 打开PSCache，并且指定每个连接上PSCache的大小 
+spring.datasource.poolPreparedStatements=true
+spring.datasource.maxPoolPreparedStatementPerConnectionSize=20
+# 配置监控统计拦截的filters，去掉后监控界面sql无法统计，'wall'用于防火墙 
+spring.datasource.filters=stat,wall,log4j
+# 通过connectProperties属性来打开mergeSql功能；慢SQL记录
+spring.datasource.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
+# 合并多个DruidDataSource的监控数据
+#spring.datasource.useGlobalDataSourceStat=true
+#server
+server.port=9007
+#jsp
+spring.mvc.view.prefix=/WEB-INF/jsp/
+spring.mvc.view.suffix=.jsp
+#https
+#server.port= 8446
+#server.ssl.key-store= classpath:tomcat.jks
+#server.ssl.key-store-password= 214421884860532
+#https test
+#server.port= 8447
+#server.ssl.key-store= classpath:tomcat.jks
+#server.ssl.key-store-password= 214421884860532
+#redis
+spring.redis.database=13
+spring.redis.host=118.31.6.143
+spring.redis.port=6379
+spring.redis.password=nova123
+spring.redis.pool.max-active=8  
+spring.redis.pool.max-wait=-1  
+spring.redis.pool.max-idle=8  
+spring.redis.pool.min-idle=0  
+#spring.redis.timeout=3000ms
+#activemq
+#spring.activemq.broker-url=tcp://47.96.73.216:61616
+#spring.activemq.broker-url=tcp://121.41.84.244:61616
+##spring.activemq.user=admin
+##spring.activemq.password=nova244-activemq
+#spring.activemq.in-memory=true
+#spring.activemq.pool.enabled=false
+#spring.activemq.packages.trust-all=true
+#log
+logging.config=classpath:logback.xml
+#date queryFreightList
+#freightDate = 2018/07/31
+
+CURRENT_COMPANY_CODE=8930000072784
+  
\ No newline at end of file
Index: src/main/resources/application.properties
===================================================================
--- src/main/resources/application.properties	(revision 28720)
+++ src/main/resources/application.properties	(revision 28721)
@@ -6,6 +6,11 @@
 spring.datasource.password=novax0l2#
 spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
 spring.datasource.driver-class-name=com.mysql.jdbc.Driver
+spring.datasource.fruitease.url=jdbc\:sqlserver\://47.97.182.194\:1433;DatabaseName\=zjnb
+spring.datasource.fruitease.username=oheng
+spring.datasource.fruitease.password=Hongshen_110
+spring.datasource.fruitease.type=com.alibaba.druid.pool.DruidDataSource
+spring.datasource.fruitease.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver
 
 
 
@@ -34,8 +39,32 @@
 spring.datasource.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
 # 合并多个DruidDataSource的监控数据
 #spring.datasource.useGlobalDataSourceStat=true
+
+
+# åå§åå¤§å°ï¼æå°ï¼æå¤§ sqlserver
+spring.datasource.fruitease.initialSize=2
+spring.datasource.fruitease.minIdle=2
+spring.datasource.fruitease.maxActive=200
+# éç½®è·åè¿æ¥ç­å¾è¶æ¶çæ¶é´
+spring.datasource.fruitease.maxWait=60000
+# éç½®é´éå¤ä¹æè¿è¡ä¸æ¬¡æ£æµï¼æ£æµéè¦å³é­çç©ºé²è¿æ¥ï¼åä½æ¯æ¯«ç§ 
+spring.datasource.fruitease.timeBetweenEvictionRunsMillis=60000
+# éç½®ä¸ä¸ªè¿æ¥å¨æ± ä¸­æå°çå­çæ¶é´ï¼åä½æ¯æ¯«ç§ 
+spring.datasource.fruitease.minEvictableIdleTimeMillis=300000
+spring.datasource.fruitease.validationQuery=SELECT 1
+spring.datasource.fruitease.testWhileIdle=true
+spring.datasource.fruitease.testOnBorrow=false
+spring.datasource.fruitease.testOnReturn=false
+# æå¼PSCacheï¼å¹¶ä¸æå®æ¯ä¸ªè¿æ¥ä¸PSCacheçå¤§å° 
+spring.datasource.fruitease.poolPreparedStatements=true
+spring.datasource.fruitease.maxPoolPreparedStatementPerConnectionSize=20
+# éç½®çæ§ç»è®¡æ¦æªçfiltersï¼å»æåçæ§çé¢sqlæ æ³ç»è®¡ï¼'wall'ç¨äºé²ç«å¢ 
+spring.datasource.fruitease.filters=stat,wall,log4j
+# éè¿connectPropertieså±æ§æ¥æå¼mergeSqlåè½ï¼æ¢SQLè®°å½
+spring.datasource.fruitease.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
+
 #server
-server.port=9000
+server.port=9007
 #jsp
 spring.mvc.view.prefix=/WEB-INF/jsp/
 spring.mvc.view.suffix=.jsp
@@ -48,16 +77,15 @@
 #server.ssl.key-store= classpath:tomcat.jks
 #server.ssl.key-store-password= 214421884860532
 #redis
-#spring.redis.database=0
-#spring.redis.host=121.41.84.244
-##spring.redis.host=47.96.73.216
-#spring.redis.port=6379
-#spring.redis.password=nova123
-#spring.redis.pool.max-active=8  
-#spring.redis.pool.max-wait=-1  
-#spring.redis.pool.max-idle=8  
-#spring.redis.pool.min-idle=0  
-#spring.redis.timeout=0 
+spring.redis.database=13
+spring.redis.host=118.31.6.143
+spring.redis.port=6379
+spring.redis.password=nova123
+spring.redis.pool.max-active=8  
+spring.redis.pool.max-wait=-1  
+spring.redis.pool.max-idle=8  
+spring.redis.pool.min-idle=0  
+#spring.redis.timeout=3000ms
 #activemq
 #spring.activemq.broker-url=tcp://47.96.73.216:61616
 #spring.activemq.broker-url=tcp://121.41.84.244:61616
@@ -68,5 +96,8 @@
 #spring.activemq.packages.trust-all=true
 #log
 logging.config=classpath:logback.xml
-#date queryFreightList
-#freightDate = 2018/07/31
+logging.level.tk.mybatis=DEBUG
+logging.level.com.novaone=debug=DEBUG
+
+#CURRENT_COMPANY_CODE=2100060042233
+CURRENT_COMPANY_CODE=JJ3G900134569


