Ver Fonte

矛盾纠纷临时提交

wanghao há 1 mês atrás
pai
commit
0be479aeca
24 ficheiros alterados com 1779 adições e 41 exclusões
  1. 46 0
      pom.xml
  2. 23 1
      src/main/java/org/ssssssss/example/MagicAPIExampleApplication.java
  3. 26 0
      src/main/java/org/ssssssss/example/datacheck/bean/AppConfig.java
  4. 36 0
      src/main/java/org/ssssssss/example/datacheck/bean/CheckErrorTypeEnum.java
  5. 36 0
      src/main/java/org/ssssssss/example/datacheck/bean/DBTypeEnum.java
  6. 85 0
      src/main/java/org/ssssssss/example/datacheck/bean/JsonResult.java
  7. 66 0
      src/main/java/org/ssssssss/example/datacheck/common/CustomDateSource.java
  8. 62 0
      src/main/java/org/ssssssss/example/datacheck/common/DataSourceConfig.java
  9. 255 0
      src/main/java/org/ssssssss/example/datacheck/common/DateUtils.java
  10. 154 0
      src/main/java/org/ssssssss/example/datacheck/common/ExcelExportUtil.java
  11. 23 0
      src/main/java/org/ssssssss/example/datacheck/controller/BaseController.java
  12. 66 0
      src/main/java/org/ssssssss/example/datacheck/controller/DataCheckController.java
  13. 71 0
      src/main/java/org/ssssssss/example/datacheck/controller/DataExportController.java
  14. 22 0
      src/main/java/org/ssssssss/example/datacheck/dao/DataExportMapper.java
  15. 95 0
      src/main/java/org/ssssssss/example/datacheck/dao/MDJFDao.java
  16. 238 0
      src/main/java/org/ssssssss/example/datacheck/service/DataCheckService.java
  17. 56 0
      src/main/java/org/ssssssss/example/datacheck/service/DataExportService.java
  18. 98 25
      src/main/java/org/ssssssss/example/mdjf/UtilService.java
  19. 2 2
      src/main/java/org/ssssssss/example/mdjf/common/Constant.java
  20. 41 0
      src/main/java/org/ssssssss/example/mdjf/domain/XZQHEnum.java
  21. 20 0
      src/main/java/org/ssssssss/example/mdjf/domain/test.java
  22. 105 12
      src/main/resources/application.yml
  23. 143 0
      src/main/resources/mapper/DataExportMapper.xml
  24. 10 1
      src/main/resources/serviceConfig.yml

+ 46 - 0
pom.xml

@@ -14,6 +14,7 @@
     <artifactId>mdjf-magic-api</artifactId>
     <version>2.1.1</version>
     <dependencies>
+
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter</artifactId>
@@ -22,6 +23,7 @@
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-web</artifactId>
         </dependency>
+
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-jdbc</artifactId>
@@ -36,6 +38,25 @@
             <artifactId>magic-api-spring-boot-starter</artifactId>
             <version>2.1.1</version>
         </dependency>
+
+<!--        <dependency>-->
+<!--            <groupId>org.mybatis.spring.boot</groupId>-->
+<!--            <artifactId>mybatis-spring-boot-starter</artifactId>-->
+<!--            <version>2.1.3</version>-->
+<!--        </dependency>-->
+
+        <dependency>
+            <groupId>com.baomidou</groupId>
+            <artifactId>mybatis-plus-boot-starter</artifactId>
+            <version>3.5.1</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.baomidou</groupId>
+            <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
+            <version>3.6.1</version>
+        </dependency>
+
         <!--增加 oracle 驱动-->
         <dependency>
             <groupId>com.oracle</groupId>
@@ -49,6 +70,31 @@
             <version>1.2.31</version>
         </dependency>
 
+        <!--常用工具类 -->
+        <dependency>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-lang3</artifactId>
+        </dependency>
+
+<!--        &lt;!&ndash; io常用工具类 &ndash;&gt;-->
+<!--        <dependency>-->
+<!--            <groupId>commons-io</groupId>-->
+<!--            <artifactId>commons-io</artifactId>-->
+<!--        </dependency>-->
+
+        <!-- excel工具 -->
+        <dependency>
+            <groupId>org.apache.poi</groupId>
+            <artifactId>poi-ooxml</artifactId>
+            <version>5.2.3</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.poi</groupId>
+            <artifactId>poi-examples</artifactId>
+            <version>5.2.3</version>
+        </dependency>
+
 
         <!--界面定时任务插件-->
         <dependency>

+ 23 - 1
src/main/java/org/ssssssss/example/MagicAPIExampleApplication.java

@@ -2,13 +2,35 @@ package org.ssssssss.example;
 
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
-//import springfox.documentation.swagger2.annotations.EnableSwagger2;
+import org.springframework.context.annotation.Bean;
+//import org.springframework.context.annotation.ComponentScan;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.transaction.annotation.EnableTransactionManagement;
+import org.ssssssss.example.mdjf.common.Constant;
+
+import java.util.concurrent.ScheduledThreadPoolExecutor;
 
 
 @SpringBootApplication
+//@MapperScan(basePackages = {"com.huahai.demo.mapper.dao"})
+//@ComponentScan(basePackages = "org.**")
+@Configuration
+@EnableTransactionManagement
+@EnableScheduling       //支持@Schedule配置
 //@EnableSwagger2	// 配置swagger 文档
 public class MagicAPIExampleApplication {
 
+	/**
+	 * 设置定时任务的并发执行,设置线程池大小。
+	 * 不设置的话所有的定时任务是串行执行的,这是Spring限制
+	 * @return
+	 */
+	@Bean
+	public ScheduledThreadPoolExecutor scheduledExecutorService(){
+		return new ScheduledThreadPoolExecutor(Constant.SCHEDULED_THREAD_POOL);
+	}
+
 	public static void main(String[] args) {
 		SpringApplication.run(MagicAPIExampleApplication.class, args);
 	}

+ 26 - 0
src/main/java/org/ssssssss/example/datacheck/bean/AppConfig.java

@@ -0,0 +1,26 @@
+package org.ssssssss.example.datacheck.bean;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.http.client.SimpleClientHttpRequestFactory;
+import org.springframework.web.client.RestTemplate;
+
+/**
+ * TODO desc
+ *
+ * @ClassName: AppConfig
+ * @author: hwang
+ * @date: 2021/6/3 17:39
+ */
+@Configuration
+public class AppConfig {
+  @Bean
+  public RestTemplate restTemplate(){
+    // 设置内置 restTemplate 超时设置
+    SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory();
+    requestFactory.setConnectTimeout(180000);
+    requestFactory.setReadTimeout(180000);
+    RestTemplate restTemplate = new RestTemplate(requestFactory);
+    return restTemplate;
+  }
+}

+ 36 - 0
src/main/java/org/ssssssss/example/datacheck/bean/CheckErrorTypeEnum.java

@@ -0,0 +1,36 @@
+package org.ssssssss.example.datacheck.bean;
+
+public enum CheckErrorTypeEnum {
+
+
+    SUCCESS("200", "监测成功"),
+    STOPUPDATE("2", "数据已断流"),
+    SQLERROR("3","目标数据库访问异常"),
+    URLERROR("4", "目标表连接串异常,非用户名@连接串方式"),
+    MBKERROR("5", "目标库或者目标表名缺失"),
+    PWERROR("6", "程序未配置数据库密码信息"),
+    DRIVERERROR("7", "根据url端口 未匹配到合适数据库驱动,请检查端口及驱动信息"),
+    BIGTABLEERROR("8", "表太大跳过统计,需人工初始化");
+
+
+    private final String code;
+    private final String info;
+
+
+    CheckErrorTypeEnum(String code, String info)
+    {
+        this.code = code;
+        this.info = info;
+    }
+
+    public String getCode()
+    {
+        return code;
+    }
+
+    public String getInfo()
+    {
+        return info;
+    }
+
+}

+ 36 - 0
src/main/java/org/ssssssss/example/datacheck/bean/DBTypeEnum.java

@@ -0,0 +1,36 @@
+package org.ssssssss.example.datacheck.bean;
+
+public enum DBTypeEnum {
+    ORACLE("oracle", "oracle.jdbc.OracleDriver","jdbc:oracle:thin:@"),
+    MYSQL("mysql", "com.mysql.cj.jdbc.Driver","jdbc:mysql://"),
+    GBASE("gbase","com.gbase.jdbc.Driver","jdbc:gbase://"),
+    POSTGRESQL("postgre", "org.postgresql.Driver","jdbc:postgresql://");
+
+
+    private final String code;
+    private final String info;
+
+    private final String pre;
+
+    DBTypeEnum(String code, String info,String pre)
+    {
+        this.code = code;
+        this.info = info;
+        this.pre = pre;
+    }
+
+    public String getCode()
+    {
+        return code;
+    }
+
+    public String getInfo()
+    {
+        return info;
+    }
+
+    public String getPre()
+    {
+        return pre;
+    }
+}

+ 85 - 0
src/main/java/org/ssssssss/example/datacheck/bean/JsonResult.java

@@ -0,0 +1,85 @@
+package org.ssssssss.example.datacheck.bean;
+
+import java.io.Serializable;
+
+/**
+ * 交互JSON数据封装
+ * @Title:	JsonResult.java
+ * @Description:	TODO
+ * @author:	hwang
+ * @date:	2020年6月9日
+ * @version: V1.0
+ */
+public class JsonResult implements Serializable{
+	private static final long serialVersionUID = 1L;
+	private int code;//0:代表成功;1或其他值代表处理失败
+	private Object data;//接收返回的数据
+	private String msg;//定义提示信息
+
+	public static final int SUCCESS=0;
+	public static final int ERROR=500;
+
+
+	public JsonResult(){
+		this.code=SUCCESS;
+	}
+
+	public JsonResult(int state, Throwable e){
+		this.code=state;
+		data=null;
+		msg=e.getMessage();
+	}
+
+	public JsonResult(int state, Object data, String message) {
+		this.code = state;
+		this.data = data;
+		this.msg = message;
+	}
+	public JsonResult(Throwable e){
+		code=ERROR;
+		data=null;
+		msg="服务内部异常:"+e.getMessage();
+	}
+	public JsonResult(Object data){
+		code=SUCCESS;
+		this.data=data;
+		msg="操作成功!";
+	}
+
+	public int getCode() {
+		return code;
+	}
+
+	public void setCode(int code) {
+		this.code = code;
+	}
+
+	public Object getData() {
+		return data;
+	}
+
+	public void setData(Object data) {
+		this.data = data;
+	}
+
+	public String getMsg() {
+		return msg;
+	}
+
+	public void setMsg(String msg) {
+		this.msg = msg;
+	}
+
+	@Override
+	public String toString() {
+		return "JsonResult [code=" + code + ", data=" + data + ", msg=" + msg + "]";
+	}
+
+}
+
+
+
+
+
+
+

+ 66 - 0
src/main/java/org/ssssssss/example/datacheck/common/CustomDateSource.java

@@ -0,0 +1,66 @@
+package org.ssssssss.example.datacheck.common;
+
+import com.alibaba.fastjson.JSONObject;
+import org.springframework.boot.jdbc.DataSourceBuilder;
+import org.springframework.jdbc.core.JdbcTemplate;
+
+import javax.sql.DataSource;
+import java.util.Map;
+
+public class CustomDateSource {
+    public static JdbcTemplate customJdbcTemplate(String url,String driverClass,String username,String password){
+        DataSource tmpDataSource = DataSourceBuilder.create()
+                .url(url)
+                .username(username)
+                .password(password)
+                .driverClassName(driverClass)
+                .build();
+
+
+        return new JdbcTemplate(tmpDataSource);
+    }
+
+
+    public static void main(String[] args) {
+//        oracle
+        String url = "jdbc:oracle:thin:@10.88.9.23:1521/rac";
+        String driverClass = "oracle.jdbc.OracleDriver";
+        String username =  "TJ_ZYK" ;
+        String password =  "zxcASD@12#$";
+
+
+
+
+//        mysql
+//        String url = "jdbc:mysql://1.94.209.147:3396/dcuc_zzbbase_ruoyi?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=GMT%2B8";
+//        String driverClass = "com.mysql.cj.jdbc.Driver";
+//        String username =  "dcuc" ;
+//        String password =  "123";
+
+//        postgresql
+//        String url = "jdbc:postgresql://127.0.0.1:5432/exampledb?currentSchema=test";
+//        String driverClass = "org.postgresql.Driver";
+//        String username =  "dcuc" ;
+//        String password =  "123";
+
+
+//        gbase
+//        String url = "jdbc:gbase://localhost:5258/testdb";
+//        String driverClass = "com.gbase.jdbc.Driver";
+//        String username = "your_username";
+//        String password = "your_password";
+
+
+
+        JdbcTemplate tmpJdbcTemplate =  CustomDateSource.customJdbcTemplate(url,driverClass,username,password);
+        tmpJdbcTemplate.setQueryTimeout(60 * 60);
+        Map<String,Object> result =tmpJdbcTemplate.queryForMap("select count(RKSJ_ZYK),MAX(RKSJ_ZYK) from TBL_DZXXB_DISPATCH where RKSJ_ZYK > TO_DATE('2025-02-16 00:00:00','YYYY-MM-DD HH24:MI:SS')  and  RKSJ_ZYK < TO_DATE('2025-02-18 00:00:00','YYYY-MM-DD HH24:MI:SS')");
+
+        System.out.println(JSONObject.toJSONString(result));
+
+
+
+    }
+
+
+}

+ 62 - 0
src/main/java/org/ssssssss/example/datacheck/common/DataSourceConfig.java

@@ -0,0 +1,62 @@
+/**
+ *
+ */
+package org.ssssssss.example.datacheck.common;
+
+
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.boot.jdbc.DataSourceBuilder;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Primary;
+import org.springframework.jdbc.core.JdbcTemplate;
+
+import javax.sql.DataSource;
+
+
+/**
+ * 多数据源配置		mysql  postgre  mongoDB
+ * @Title:	DataSourceConfig.java
+ * @Description:	spring Jdbctemplate 配置多数据源使用
+ * @author:	hwang
+ * @date:	2020年5月9日
+ * @version: V1.0
+ */
+@Configuration
+public class DataSourceConfig {
+
+//
+//	//主数据源配置
+//	@Primary
+//	@Bean(name = "mysqlDataSource")
+//	@ConfigurationProperties(prefix="spring.datasource.magic")
+//	public DataSource primaryDataSource(){
+//		return DataSourceBuilder.create().build();
+//	}
+//
+//	//第二数据源 配置
+//	@Bean(name = "mdjfDataSource")
+//	@ConfigurationProperties(prefix="spring.datasource.mdjf")
+//	public DataSource mdjfDataSource(){
+//		return DataSourceBuilder.create().build();
+//	}
+//
+//
+//	//主数据源JdbcTemplate
+//	@Bean(name = "mysqlJdbcTemplate")
+//	public JdbcTemplate	primaryJdbcTemplate(@Qualifier("mysqlDataSource") DataSource dataSource){
+//		return new JdbcTemplate(dataSource);
+//	}
+//	//第二数据源JdbcTemplate
+//	@Bean(name = "mdjfJdbcTemplate")
+//	public JdbcTemplate	mdjfJdbcTemplate(@Qualifier("mdjfDataSource") DataSource dataSource){
+//		return new JdbcTemplate(dataSource);
+//	}
+
+
+
+
+
+
+}

+ 255 - 0
src/main/java/org/ssssssss/example/datacheck/common/DateUtils.java

@@ -0,0 +1,255 @@
+package org.ssssssss.example.datacheck.common;
+
+import org.apache.commons.lang3.time.DateFormatUtils;
+
+import java.lang.management.ManagementFactory;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.time.*;
+import java.util.Calendar;
+import java.util.Date;
+
+/**
+ * 时间工具类
+ *
+ * @author ruoyi
+ */
+public class DateUtils extends org.apache.commons.lang3.time.DateUtils
+{
+    public static String YYYY = "yyyy";
+
+    public static String YYYY_MM = "yyyy-MM";
+
+    public static String YYYY_MM_DD = "yyyy-MM-dd";
+
+    public static String YYYYMMDDHHMMSS = "yyyyMMddHHmmss";
+
+    public static String YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss";
+
+    private static String[] parsePatterns = {
+            "yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "yyyy-MM",
+            "yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm", "yyyy/MM",
+            "yyyy.MM.dd", "yyyy.MM.dd HH:mm:ss", "yyyy.MM.dd HH:mm", "yyyy.MM"};
+
+    /**
+     * 获取当前Date型日期
+     *
+     * @return Date() 当前日期
+     */
+    public static Date getNowDate()
+    {
+        return new Date();
+    }
+
+    /**
+     * 获取当前日期, 默认格式为yyyy-MM-dd
+     *
+     * @return String
+     */
+    public static String getDate()
+    {
+        return dateTimeNow(YYYY_MM_DD);
+    }
+
+    public static final String getTime()
+    {
+        return dateTimeNow(YYYY_MM_DD_HH_MM_SS);
+    }
+
+    public static final String dateTimeNow()
+    {
+        return dateTimeNow(YYYYMMDDHHMMSS);
+    }
+
+    public static final String dateTimeNow(final String format)
+    {
+        return parseDateToStr(format, new Date());
+    }
+
+    public static final String dateTime(final Date date)
+    {
+        return parseDateToStr(YYYY_MM_DD, date);
+    }
+
+    public static final String parseDateToStr(final String format, final Date date)
+    {
+        return new SimpleDateFormat(format).format(date);
+    }
+
+    public static final String formatDateToStr(final Date date)
+    {
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date);
+    }
+
+    public static final Date dateTime(final String format, final String ts)
+    {
+        try
+        {
+            return new SimpleDateFormat(format).parse(ts);
+        }
+        catch (ParseException e)
+        {
+            throw new RuntimeException(e);
+        }
+    }
+
+    /**
+     * 日期路径 即年/月/日 如2018/08/08
+     */
+    public static final String datePath()
+    {
+        Date now = new Date();
+        return DateFormatUtils.format(now, "yyyy/MM/dd");
+    }
+
+    /**
+     * 日期路径 即年/月/日 如20180808
+     */
+    public static final String dateTime()
+    {
+        Date now = new Date();
+        return DateFormatUtils.format(now, "yyyyMMdd");
+    }
+
+    /**
+     * 日期型字符串转化为日期 格式
+     */
+    public static Date parseDate(Object str)
+    {
+        if (str == null)
+        {
+            return null;
+        }
+        try
+        {
+            return parseDate(str.toString(), parsePatterns);
+        }
+        catch (ParseException e)
+        {
+            return null;
+        }
+    }
+
+    /**
+     * 获取服务器启动时间
+     */
+    public static Date getServerStartDate()
+    {
+        long time = ManagementFactory.getRuntimeMXBean().getStartTime();
+        return new Date(time);
+    }
+
+    /**
+     * 计算相差天数
+     */
+    public static int differentDaysByMillisecond(Date date1, Date date2)
+    {
+        return Math.abs((int) ((date2.getTime() - date1.getTime()) / (1000 * 3600 * 24)));
+    }
+
+    /**
+     * 计算时间差
+     *
+     * @param endDate 最后时间
+     * @param startTime 开始时间
+     * @return 时间差(天/小时/分钟)
+     */
+    public static String timeDistance(Date endDate, Date startTime)
+    {
+        long nd = 1000 * 24 * 60 * 60;
+        long nh = 1000 * 60 * 60;
+        long nm = 1000 * 60;
+        // long ns = 1000;
+        // 获得两个时间的毫秒时间差异
+        long diff = endDate.getTime() - startTime.getTime();
+        // 计算差多少天
+        long day = diff / nd;
+        // 计算差多少小时
+        long hour = diff % nd / nh;
+        // 计算差多少分钟
+        long min = diff % nd % nh / nm;
+        // 计算差多少秒//输出结果
+        // long sec = diff % nd % nh % nm / ns;
+        return day + "天" + hour + "小时" + min + "分钟";
+    }
+
+    /**
+     * 增加 LocalDateTime ==> Date
+     */
+    public static Date toDate(LocalDateTime temporalAccessor)
+    {
+        ZonedDateTime zdt = temporalAccessor.atZone(ZoneId.systemDefault());
+        return Date.from(zdt.toInstant());
+    }
+
+    /**
+     * 增加 LocalDate ==> Date
+     */
+    public static Date toDate(LocalDate temporalAccessor)
+    {
+        LocalDateTime localDateTime = LocalDateTime.of(temporalAccessor, LocalTime.of(0, 0, 0));
+        ZonedDateTime zdt = localDateTime.atZone(ZoneId.systemDefault());
+        return Date.from(zdt.toInstant());
+    }
+
+    /** 获得昨天日期:yyyy-MM-dd  HH:mm:ss */
+    public static String getYesterdayStr() {
+        Calendar c = Calendar.getInstance();
+        c.add(Calendar.DATE, -1);
+        SimpleDateFormat startSdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        return startSdf.format(c.getTime());
+    }
+
+    public static Date getYesterdayStartDate() {
+        // 获取当前时间的实例
+        Calendar calendar = Calendar.getInstance();
+
+        // 将时间设置为昨天的凌晨
+        calendar.add(Calendar.DATE, -1); // 减去一天
+        calendar.set(Calendar.HOUR_OF_DAY, 0);   // 设置小时为0
+        calendar.set(Calendar.MINUTE, 0);        // 设置分钟为0
+        calendar.set(Calendar.SECOND, 0);        // 设置秒为0
+        calendar.set(Calendar.MILLISECOND, 0);   // 设置毫秒为0
+
+        // 输出昨天凌晨的时间
+//        System.out.println("昨天凌晨时间: " + calendar.getTime());
+        return calendar.getTime();
+    }
+
+    public static Date getTodayStartDate() {
+        // 获取当前时间的实例
+        Calendar calendar = Calendar.getInstance();
+
+        calendar.set(Calendar.HOUR_OF_DAY, 0);   // 设置小时为0
+        calendar.set(Calendar.MINUTE, 0);        // 设置分钟为0
+        calendar.set(Calendar.SECOND, 0);        // 设置秒为0
+        calendar.set(Calendar.MILLISECOND, 0);   // 设置毫秒为0
+
+        // 输出昨天凌晨的时间
+//        System.out.println("今天凌晨时间: " + calendar.getTime());
+        return calendar.getTime();
+    }
+
+
+    public static Date getNDaysAgoStartDate(int n) {
+        // 获取当前时间的实例
+        Calendar calendar = Calendar.getInstance();
+
+        // 将时间设置为昨天的凌晨
+        calendar.add(Calendar.DATE, -n); // 减去一天
+        calendar.set(Calendar.HOUR_OF_DAY, 0);   // 设置小时为0
+        calendar.set(Calendar.MINUTE, 0);        // 设置分钟为0
+        calendar.set(Calendar.SECOND, 0);        // 设置秒为0
+        calendar.set(Calendar.MILLISECOND, 0);   // 设置毫秒为0
+
+        // 输出昨天凌晨的时间
+//        System.out.println(n+"NDaysAgo凌晨时间: " + calendar.getTime().getTime());
+        return calendar.getTime();
+    }
+
+    public static void main(String[] args) {
+        getNDaysAgoStartDate(2);
+    }
+
+
+}

+ 154 - 0
src/main/java/org/ssssssss/example/datacheck/common/ExcelExportUtil.java

@@ -0,0 +1,154 @@
+package org.ssssssss.example.datacheck.common;
+
+import org.apache.poi.ss.usermodel.*;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.net.URLEncoder;
+import java.util.List;
+import java.util.Map;
+
+public class ExcelExportUtil {
+
+    /**
+     * 将查询结果导出为Excel并通过浏览器下载
+     *
+     * @param response    HttpServletResponse对象
+     * @param dataList     查询结果数据 List<Map<String, Object>>
+     * @param fileName     导出的文件名(不需要后缀)
+     * @param sheetName    Excel工作表名称
+     * @throws IOException 如果发生I/O错误
+     */
+    public static void exportToExcel(HttpServletResponse response,
+                                     List<Map<String, Object>> dataList,
+                                     String fileName,
+                                     String sheetName) throws IOException {
+        // 创建工作簿
+        Workbook workbook = new XSSFWorkbook();
+
+        // 创建工作表
+        Sheet sheet = workbook.createSheet(sheetName != null ? sheetName : "Sheet1");
+
+        // 创建表头样式
+        CellStyle headerStyle = createHeaderCellStyle(workbook);
+
+        // 创建数据行样式
+        CellStyle dataStyle = createDataCellStyle(workbook);
+
+        // 如果数据不为空,处理数据
+        if (dataList != null && !dataList.isEmpty()) {
+            // 创建表头行
+            Row headerRow = sheet.createRow(0);
+
+            // 获取第一个Map的key集合作为表头
+            Map<String, Object> firstRow = dataList.get(0);
+            int colNum = 0;
+
+            // 写入表头
+            for (String key : firstRow.keySet()) {
+                Cell cell = headerRow.createCell(colNum++);
+                cell.setCellValue(key);
+                cell.setCellStyle(headerStyle);
+            }
+
+            // 写入数据
+            int rowNum = 1;
+            for (Map<String, Object> rowData : dataList) {
+                Row row = sheet.createRow(rowNum++);
+                colNum = 0;
+                for (String key : firstRow.keySet()) {
+                    Cell cell = row.createCell(colNum++);
+                    Object value = rowData.get(key);
+                    setCellValue(cell, value, dataStyle);
+                }
+            }
+
+            // 自动调整列宽
+            for (int i = 0; i < firstRow.size(); i++) {
+                sheet.autoSizeColumn(i);
+            }
+        }
+
+        // 设置响应头
+        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
+        fileName = URLEncoder.encode(fileName+DateUtils.dateTimeNow(),"UTF-8");
+        response.setHeader("Content-Disposition", "attachment; filename=" + fileName + ".xlsx");
+
+        // 写入输出流
+        try (OutputStream outputStream = response.getOutputStream()) {
+            workbook.write(outputStream);
+            outputStream.flush();
+        } finally {
+            workbook.close();
+        }
+    }
+
+    /**
+     * 创建表头单元格样式
+     */
+    private static CellStyle createHeaderCellStyle(Workbook workbook) {
+        CellStyle style = workbook.createCellStyle();
+        Font font = workbook.createFont();
+        font.setBold(true);
+        font.setFontHeightInPoints((short) 12);
+        style.setFont(font);
+        style.setAlignment(HorizontalAlignment.CENTER);
+        style.setVerticalAlignment(VerticalAlignment.CENTER);
+        style.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());
+        style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
+        style.setBorderTop(BorderStyle.THIN);
+        style.setBorderBottom(BorderStyle.THIN);
+        style.setBorderLeft(BorderStyle.THIN);
+        style.setBorderRight(BorderStyle.THIN);
+        return style;
+    }
+
+    /**
+     * 创建数据单元格样式
+     */
+    private static CellStyle createDataCellStyle(Workbook workbook) {
+        CellStyle style = workbook.createCellStyle();
+        style.setAlignment(HorizontalAlignment.LEFT);
+        style.setVerticalAlignment(VerticalAlignment.CENTER);
+        style.setBorderTop(BorderStyle.THIN);
+        style.setBorderBottom(BorderStyle.THIN);
+        style.setBorderLeft(BorderStyle.THIN);
+        style.setBorderRight(BorderStyle.THIN);
+        style.setWrapText(true);
+        return style;
+    }
+
+    /**
+     * 根据值的类型设置单元格的值
+     */
+    private static void setCellValue(Cell cell, Object value, CellStyle style) {
+        cell.setCellStyle(style);
+
+        if (value == null) {
+            cell.setCellValue("");
+        } else if (value instanceof String) {
+            cell.setCellValue((String) value);
+        } else if (value instanceof Number) {
+            if (value instanceof Integer || value instanceof Long ||
+                    value instanceof Short || value instanceof Byte) {
+                cell.setCellValue(((Number) value).doubleValue());
+            } else if (value instanceof Double || value instanceof Float) {
+                cell.setCellValue(((Number) value).doubleValue());
+            } else {
+                cell.setCellValue(value.toString());
+            }
+        } else if (value instanceof Boolean) {
+            cell.setCellValue((Boolean) value);
+        } else if (value instanceof java.util.Date) {
+            cell.setCellValue((java.util.Date) value);
+        } else if (value instanceof java.sql.Date) {
+            cell.setCellValue(new java.util.Date(((java.sql.Date) value).getTime()));
+        } else if (value instanceof java.sql.Timestamp) {
+            cell.setCellValue(new java.util.Date(((java.sql.Timestamp) value).getTime()));
+        } else {
+            cell.setCellValue(value.toString());
+        }
+    }
+}

+ 23 - 0
src/main/java/org/ssssssss/example/datacheck/controller/BaseController.java

@@ -0,0 +1,23 @@
+package org.ssssssss.example.datacheck.controller;
+
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.web.bind.annotation.ExceptionHandler;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.ssssssss.example.datacheck.bean.JsonResult;
+
+
+public abstract class BaseController {
+	private static final Logger LOGGER = LoggerFactory.getLogger(BaseController.class);
+	@ExceptionHandler(Exception.class)
+	@ResponseBody
+	public JsonResult exceptionHandle(Exception e) {
+		e.printStackTrace();
+		LOGGER.info(e.getMessage(), e);
+		return new JsonResult(e);
+	}
+
+
+
+}

+ 66 - 0
src/main/java/org/ssssssss/example/datacheck/controller/DataCheckController.java

@@ -0,0 +1,66 @@
+/**
+ *
+ */
+package org.ssssssss.example.datacheck.controller;
+
+
+import com.alibaba.fastjson.JSONObject;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.PropertySource;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.web.bind.annotation.*;
+import org.ssssssss.example.datacheck.bean.JsonResult;
+import org.ssssssss.example.datacheck.service.DataCheckService;
+import org.ssssssss.example.mdjf.common.Constant;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+@CrossOrigin		//跨域支持
+@RestController
+@RequestMapping(value = "/mdjf/api/datacheck")
+@PropertySource(value = "serviceConfig.yml", encoding = "UTF-8") // 加载配置文件
+
+//@ApiIgnore			//接口不想在界面展示,隐藏
+public class DataCheckController extends BaseController {
+
+	private static final Logger LOGGER = LoggerFactory.getLogger(DataCheckController.class);
+
+	@Autowired
+	private DataCheckService dataCheckService;
+
+	@Scheduled(cron = "${all_crontask_time}")
+	@RequestMapping(value = "/runCrondTaskAll", method = RequestMethod.GET)
+	public void dataCheckScheduledAll()  {
+		dataCheckService.dataCheckScheduled("all");
+		LOGGER.info("{} : {} ms", Constant.SERVICE_NAME, "all 调度任务执行结束!");
+	}
+
+	@Scheduled(cron = "${first_crontask_time}")
+	@RequestMapping(value = "/runCrondTaskFirst", method = RequestMethod.GET)
+	public void dataCheckScheduledFirst()  {
+		dataCheckService.dataCheckScheduled("first");
+		LOGGER.info("{} : {} ms", Constant.SERVICE_NAME, "first 调度任务执行结束!");
+	}
+
+	@RequestMapping(value = "/runTaskByTaskId", method = RequestMethod.GET)
+	public void runTaskByTaskId(@RequestParam(value = "taskId", required = true) String taskId){
+		dataCheckService.dataCheckScheduled(taskId);
+		LOGGER.info("{} :taskId: {} ms", Constant.SERVICE_NAME, "taskId");
+	}
+
+	@RequestMapping(value = "/checkDBConnect", method = RequestMethod.GET)
+	public JsonResult checkDBConnect(@RequestParam(value = "id", required = true) String dbid){
+		return dataCheckService.checkDBConnect(dbid);
+	}
+
+
+
+
+
+}
+
+
+

+ 71 - 0
src/main/java/org/ssssssss/example/datacheck/controller/DataExportController.java

@@ -0,0 +1,71 @@
+/**
+ *
+ */
+package org.ssssssss.example.datacheck.controller;
+
+
+import com.alibaba.fastjson.JSONObject;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.PropertySource;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.web.bind.annotation.*;
+import org.ssssssss.example.datacheck.bean.JsonResult;
+import org.ssssssss.example.datacheck.service.DataCheckService;
+import org.ssssssss.example.datacheck.service.DataExportService;
+import org.ssssssss.example.mdjf.common.Constant;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+
+@CrossOrigin		//跨域支持
+@RestController
+@RequestMapping(value = "/mdjf/api/export")
+@PropertySource(value = "serviceConfig.yml", encoding = "UTF-8") // 加载配置文件
+
+//@ApiIgnore			//接口不想在界面展示,隐藏
+public class DataExportController extends BaseController {
+
+	private static final Logger LOGGER = LoggerFactory.getLogger(DataExportController.class);
+
+	@Autowired
+	private DataExportService dataExportService;
+
+
+	@RequestMapping(value = "/mdjftotal", method = RequestMethod.GET)
+	public void mdjftotal(HttpServletResponse response,@RequestParam(value = "startTime",required = false) String startTime, @RequestParam(value = "endTime",required = false) String endTime) throws IOException {
+		dataExportService.mdjftotal(startTime,endTime,response);
+	}
+
+	@RequestMapping(value = "/zdrtotal", method = RequestMethod.GET)
+	public void zdrtotal(HttpServletResponse response,@RequestParam(value = "startTime",required = false) String startTime, @RequestParam(value = "endTime",required = false) String endTime) throws IOException {
+		dataExportService.zdrtotal(startTime,endTime,response);
+	}
+
+
+	@RequestMapping(value = "/yjzxList", method = RequestMethod.POST)
+	public void yjzxList(HttpServletResponse response,@RequestBody String jsonString) throws IOException {
+		JSONObject obj = JSONObject.parseObject(jsonString);
+		String idno = obj.getString("idno");
+		String jsdwmc = obj.getString("jsdwmc");
+		String name = obj.getString("name");
+		String rwlx = obj.getString("rwlx");
+		String rwmc = obj.getString("rwmc");
+		String sqdwmc = obj.getString("sqdwmc");
+		String yjsjEnd = obj.getString("yjsjEnd");
+		String yjsjStart = obj.getString("yjsjStart");
+		String yjzt = obj.getString("yjzt");
+		String zrmj = obj.getString("zrmj");
+
+
+
+		dataExportService.yjzxList(response,idno,jsdwmc,name,rwlx,rwmc,sqdwmc,yjsjEnd,yjsjStart,yjzt,zrmj);
+	}
+
+
+
+}
+
+
+

+ 22 - 0
src/main/java/org/ssssssss/example/datacheck/dao/DataExportMapper.java

@@ -0,0 +1,22 @@
+package org.ssssssss.example.datacheck.dao;
+
+
+import java.util.List;
+import java.util.Map;
+
+
+import com.baomidou.dynamic.datasource.annotation.DS;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Select;
+
+
+@DS("mdjf")
+@Mapper
+public interface DataExportMapper {
+
+      List<Map<String, Object>> mdjftotal(String startTime, String endTime);
+
+      List<Map<String, Object>> zdrtotal(String startTime, String endTime);
+
+      List<Map<String, Object>> yjzxList(String idno, String jsdwmc, String name, String rwlx, String rwmc, String sqdwmc, String yjsjEnd, String yjsjStart, String yjzt, String zrmj);
+}

+ 95 - 0
src/main/java/org/ssssssss/example/datacheck/dao/MDJFDao.java

@@ -0,0 +1,95 @@
+/**
+ *
+ */
+package org.ssssssss.example.datacheck.dao;
+
+
+import com.baomidou.dynamic.datasource.annotation.DS;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.stereotype.Repository;
+import org.ssssssss.example.mdjf.common.Constant;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+
+@Repository
+@DS("mdjf")
+public class MDJFDao {
+	private static final Logger LOGGER = LoggerFactory.getLogger(MDJFDao.class);
+
+	@Autowired
+	private JdbcTemplate mdjfJdbcTemplate;
+
+	public List<Map<String, Object>> findFirstRunTask() {
+		String sql = "SELECT dbs.DBNAME,dbs.DBTYPE,dbs.URL,dbs.PWD,dbs.USERNAME," +
+				"tasks.ID,tasks.DBID,tasks.TBCNAME,tasks.TBENAME,tasks.CJTYPE," +
+				"tasks.CHECKFIELDS,tasks.STATUS " +
+				"FROM MDJF_CHECK_TABLES tasks LEFT JOIN  MDJF_DBINFOS dbs" +
+				" on tasks.DBID = dbs.id " +
+				" where tasks.STATUS ='1'  and tasks.LASTCHECKSTATUS is null ";  //待首次运行
+		List<Map<String, Object>> result =	mdjfJdbcTemplate.queryForList(sql);
+		LOGGER.info("{} 数据查询成功: {} ", Constant.SERVICE_NAME, sql);
+		return result;
+	}
+
+	public List<Map<String, Object>> findAllRunTask() {
+		String sql = "SELECT dbs.DBNAME,dbs.DBTYPE,dbs.URL,dbs.PWD,dbs.USERNAME," +
+				"tasks.ID,tasks.DBID,tasks.TBCNAME,tasks.TBENAME,tasks.CJTYPE," +
+				"tasks.CHECKFIELDS,tasks.STATUS " +
+				"FROM MDJF_CHECK_TABLES tasks LEFT JOIN  MDJF_DBINFOS dbs" +
+				" on tasks.DBID = dbs.id " +
+				" where tasks.STATUS ='1' ";
+		List<Map<String, Object>> result =	mdjfJdbcTemplate.queryForList(sql);
+		LOGGER.info("{} 数据查询成功: {} ", Constant.SERVICE_NAME, sql);
+		return result;
+	}
+
+	public List<Map<String, Object>> findTaskById(String tableTaskId) {
+		String sql = "SELECT dbs.DBNAME,dbs.DBTYPE,dbs.URL,dbs.PWD,dbs.USERNAME," +
+				"tasks.ID,tasks.DBID,tasks.TBCNAME,tasks.TBENAME,tasks.CJTYPE," +
+				"tasks.CHECKFIELDS,tasks.STATUS " +
+				"FROM MDJF_CHECK_TABLES tasks LEFT JOIN  MDJF_DBINFOS dbs" +
+				" on tasks.DBID = dbs.id " +
+				" where tasks.STATUS ='1'  and tasks.ID = ?";
+		List<Map<String, Object>> result =	mdjfJdbcTemplate.queryForList(sql,tableTaskId);
+		LOGGER.info("{} 数据查询成功: {} ", Constant.SERVICE_NAME, sql);
+		return result;
+	}
+
+	public void saveCheckTaskLog(String DBID,String DBNAME,String taskId,String TBCNAME,String TBENAME,String CHECKROWS,String VALIDROWS,String WANZHENG,String CHECKSTATUS,String CHECKSTATUSMSG){
+		System.out.println(DBID+","+DBNAME+","+taskId+","+TBCNAME+","+TBENAME+","+CHECKROWS+","+VALIDROWS+","+WANZHENG+","+CHECKSTATUS+","+CHECKSTATUSMSG);
+		String sql = "insert into MDJF_CHECK_TASK_LOG (DBID,DBNAME,TBTASKID,TBCNAME,TBENAME,CHECKROWS,VALIDROWS,WANZHENG,CHECKSTATUS,CHECKSTATUSMSG) " +
+				" values (?,?,?,?,?,?,?,?,?,?)";
+		int successNum = mdjfJdbcTemplate.update(sql,DBID,DBNAME,taskId,TBCNAME,TBENAME,CHECKROWS,VALIDROWS,WANZHENG,CHECKSTATUS,CHECKSTATUSMSG);
+		LOGGER.info("{} MDJF_CHECK_TASK_LOG--数据写入成功: {} ", Constant.SERVICE_NAME, successNum);
+	}
+
+	public void updateCheckTableTask(Date LASTCHECKTIME, String LASTCHECKSTATUS, String LASTCHECKSTATUSMSG, String LASTCHECKROWS, String LASTVALIDROWS, String LASTWANZHENG,String tableTaskID) {
+		String sql = " update MDJF_CHECK_TABLES set LASTCHECKTIME = ?,LASTCHECKSTATUS = ?,LASTCHECKSTATUSMSG = ?,LASTCHECKROWS = ?,LASTVALIDROWS = ?,LASTWANZHENG = ?  where ID = ?  ";
+		int successNum = mdjfJdbcTemplate.update(sql,LASTCHECKTIME,LASTCHECKSTATUS,LASTCHECKSTATUSMSG,LASTCHECKROWS,LASTVALIDROWS,LASTWANZHENG,tableTaskID);
+		LOGGER.info("{} MDJF_CHECK_TABLES--id:{},更新成功: {} ", Constant.SERVICE_NAME,tableTaskID, successNum);
+
+	}
+
+	public Map<String, Object> findDBInfoById(String DBId) {
+		String sql = "select DBNAME,DBTYPE,URL,USERNAME,PWD from MDJF_DBINFOS where ID = ?";
+		Map<String, Object> result =	mdjfJdbcTemplate.queryForMap(sql,DBId);
+		LOGGER.info("{} 数据查询成功: {} ", Constant.SERVICE_NAME, sql);
+		return result;
+	}
+
+
+	public void updateDBConnectResult(String SELECTSTATUS,String SELECTSTATUSMSG,String DBID) {
+		String sql = " update MDJF_DBINFOS set SELECTSTATUS = ?,SELECTSTATUSMSG = ? where ID = ?  ";
+		int successNum = mdjfJdbcTemplate.update(sql,SELECTSTATUS,SELECTSTATUSMSG,DBID);
+		LOGGER.info("{} MDJF_DBINFOS--id:{},更新连接测试结果: {} ", Constant.SERVICE_NAME,DBID, successNum);
+
+	}
+
+}

+ 238 - 0
src/main/java/org/ssssssss/example/datacheck/service/DataCheckService.java

@@ -0,0 +1,238 @@
+package org.ssssssss.example.datacheck.service;
+
+import com.alibaba.fastjson.JSONObject;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.PropertySource;
+import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.stereotype.Service;
+import org.ssssssss.example.datacheck.bean.CheckErrorTypeEnum;
+import org.ssssssss.example.datacheck.bean.DBTypeEnum;
+import org.ssssssss.example.datacheck.bean.JsonResult;
+import org.ssssssss.example.datacheck.common.CustomDateSource;
+import org.ssssssss.example.datacheck.common.DateUtils;
+import org.ssssssss.example.datacheck.dao.MDJFDao;
+import org.ssssssss.example.mdjf.common.CommonUtil;
+
+import javax.annotation.PostConstruct;
+import java.math.BigDecimal;
+import java.text.DecimalFormat;
+import java.util.*;
+
+
+@Service
+// 加载配置文件
+@PropertySource(value = "serviceConfig.yml", encoding = "UTF-8") // 加载配置文件
+public class DataCheckService {
+
+  private static final Logger LOGGER = LoggerFactory.getLogger(DataCheckService.class);
+
+  @Autowired
+  public MDJFDao mdjfDao;
+
+  private Map<String, String> dataSourcePasswordMap;
+
+
+  @Value("${queryTimeOut}")
+  private int queryTimeOutMin;    //分钟
+
+  public JsonResult checkDBConnect(String dbid) {
+    JsonResult result = new JsonResult();
+
+    Map<String, Object> dbinfoMap =  mdjfDao.findDBInfoById(dbid);
+
+    if(dbinfoMap == null ){
+      result.setCode(JsonResult.ERROR);
+      result.setData("id:"+dbid+":数据源DBInfo不存在");
+      result.setMsg("id:"+dbid+":数据源DBInfo不存在");
+      return result;
+    }
+
+    String DBNAME = dbinfoMap.get("DBNAME").toString();
+    String DBTYPE = dbinfoMap.get("DBTYPE").toString();
+    String url = dbinfoMap.get("URL").toString();
+    String PWD = dbinfoMap.get("PWD").toString();
+    String USERNAME = dbinfoMap.get("USERNAME").toString();
+
+
+    String driverClass = "";
+
+    if (DBTypeEnum.ORACLE.getCode().equals(DBTYPE.trim())) {
+      driverClass = DBTypeEnum.ORACLE.getInfo();
+      url = DBTypeEnum.ORACLE.getPre() + url;
+
+    } else if (DBTypeEnum.MYSQL.getCode().equals(DBTYPE.trim())) {
+      driverClass = DBTypeEnum.MYSQL.getInfo();
+      url = DBTypeEnum.MYSQL.getPre() + url;
+
+    } else if (DBTypeEnum.POSTGRESQL.getCode().equals(DBTYPE.trim())) {
+      driverClass = DBTypeEnum.POSTGRESQL.getInfo();
+      url = DBTypeEnum.POSTGRESQL.getPre() + url;
+
+    } else if (DBTypeEnum.GBASE.getCode().equals(DBTYPE.trim())) {
+      driverClass = DBTypeEnum.GBASE.getInfo();
+      url = DBTypeEnum.GBASE.getPre() + url;
+    } else {
+      //根据DBTYPE  未匹配到合适数据库驱动,请检查端口及驱动信息
+
+      result.setCode(JsonResult.ERROR);
+      result.setData("id:"+dbid+"DBTYPE:"+DBTYPE+"--"+CheckErrorTypeEnum.DRIVERERROR.getInfo());
+      result.setMsg("id:"+dbid+"DBTYPE:"+DBTYPE+"--"+CheckErrorTypeEnum.DRIVERERROR.getInfo());
+      mdjfDao.updateDBConnectResult("2",CheckErrorTypeEnum.DRIVERERROR.getInfo(),dbid);
+      return result;
+    }
+    try {
+    JdbcTemplate tmpJdbcTemplate = null;
+    tmpJdbcTemplate = CustomDateSource.customJdbcTemplate(url, driverClass, USERNAME, PWD);
+    Map<String, Object> connectSelectMap = tmpJdbcTemplate.queryForMap("select 1 from dual");
+
+    if(connectSelectMap == null || connectSelectMap.size() < 1){
+      result.setCode(JsonResult.ERROR);
+      result.setData("访问异常 :select 1 from dual --无结果返回");
+      result.setMsg("访问异常:select 1 from dual --无结果返回");
+      mdjfDao.updateDBConnectResult("2","访问异常:select 1 from dual --无结果返回",dbid);
+
+    }else{
+      result.setCode(JsonResult.SUCCESS);
+      result.setData("连接成功");
+      result.setMsg("连接成功");
+      mdjfDao.updateDBConnectResult("1","连接成功",dbid);
+    }
+
+    return result;
+
+    }catch (Exception e){
+      result.setCode(JsonResult.ERROR);
+      result.setData(e.getMessage());
+      result.setMsg(e.getMessage());
+      mdjfDao.updateDBConnectResult("2",e.getMessage(),dbid);
+
+      return result;
+    }
+  }
+  public void dataCheckScheduled(String flag) {
+    //防止连接数过多
+    Map<String, JdbcTemplate> dataSourceJdbcTemplate = new HashMap<String, JdbcTemplate>();
+
+    List<Map<String, Object>> needRunTask = new ArrayList<>();
+
+    if ("all".equals(flag)) {
+      needRunTask = mdjfDao.findAllRunTask();
+    } else if ("first".equals(flag)) {
+      needRunTask = mdjfDao.findFirstRunTask();
+    } else if (CommonUtil.isNotNullOrEmpty(flag)) {
+      needRunTask = mdjfDao.findTaskById(flag);
+    }
+
+    int successTaskNum = 0;
+
+    for (Map<String, Object> tmpTask : needRunTask) {
+      String DBID = tmpTask.get("DBID").toString();
+      String DBNAME = tmpTask.get("DBNAME").toString();
+      String DBTYPE = tmpTask.get("DBTYPE").toString();
+      String url = tmpTask.get("URL").toString();
+      String PWD = tmpTask.get("PWD").toString();
+      String USERNAME = tmpTask.get("USERNAME").toString();
+      String taskId = tmpTask.get("ID").toString();
+      String TBCNAME = tmpTask.get("TBCNAME").toString();
+      String TBENAME = tmpTask.get("TBENAME").toString();
+      String CJTYPE = tmpTask.get("CJTYPE").toString();
+      String CHECKFIELDS = tmpTask.get("CHECKFIELDS").toString();
+
+      String driverClass = "";
+
+      if (DBTypeEnum.ORACLE.getCode().equals(DBTYPE.trim())) {
+        driverClass = DBTypeEnum.ORACLE.getInfo();
+        url = DBTypeEnum.ORACLE.getPre() + url;
+
+      } else if (DBTypeEnum.MYSQL.getCode().equals(DBTYPE.trim())) {
+        driverClass = DBTypeEnum.MYSQL.getInfo();
+        url = DBTypeEnum.MYSQL.getPre() + url;
+
+      } else if (DBTypeEnum.POSTGRESQL.getCode().equals(DBTYPE.trim())) {
+        driverClass = DBTypeEnum.POSTGRESQL.getInfo();
+        url = DBTypeEnum.POSTGRESQL.getPre() + url;
+
+      } else if (DBTypeEnum.GBASE.getCode().equals(DBTYPE.trim())) {
+        driverClass = DBTypeEnum.GBASE.getInfo();
+        url = DBTypeEnum.GBASE.getPre() + url;
+      } else {
+        //根据DBTYPE  未匹配到合适数据库驱动,请检查端口及驱动信息
+        mdjfDao.saveCheckTaskLog(DBID, DBNAME, taskId, TBCNAME, TBENAME, null, null, null, CheckErrorTypeEnum.DRIVERERROR.getCode(), CheckErrorTypeEnum.DRIVERERROR.getInfo());
+//        LASTCHECKTIME,LASTCHECKSTATUS,LASTCHECKSTATUSMSG,LASTCHECKROWS,LASTVALIDROWS,LASTWANZHENG,tableTaskID
+        mdjfDao.updateCheckTableTask(DateUtils.getNowDate(), CheckErrorTypeEnum.DRIVERERROR.getCode(), CheckErrorTypeEnum.DRIVERERROR.getInfo(), null, null, null, taskId);
+
+        continue;
+      }
+
+
+      //数据正常,开始检测
+      try {  //捕获数据库处理异常,并写入日志
+        long startTime = System.currentTimeMillis() / 1000;
+
+        //  控制 JdbcTemplate总连接数
+        JdbcTemplate tmpJdbcTemplate = null;
+        if (dataSourceJdbcTemplate.containsKey(DBID)) {
+          tmpJdbcTemplate = dataSourceJdbcTemplate.get(DBID);
+        } else {
+          tmpJdbcTemplate = CustomDateSource.customJdbcTemplate(url, driverClass, USERNAME, PWD);
+          dataSourceJdbcTemplate.put(DBID, tmpJdbcTemplate);
+        }
+        tmpJdbcTemplate.setQueryTimeout(queryTimeOutMin * 60);
+
+
+        //全量计算---oracle   其他未适配
+        StringBuilder sb = new StringBuilder();
+        sb.setLength(0);    //使用前清空原内容
+        sb.append("SELECT COUNT(1) COUNT, SUM( CASE WHEN 1=1 ");
+
+        //计算有效行数--条件过滤
+        for (String fieldTmp : CHECKFIELDS.split(",")) {
+          if (CommonUtil.isNotNullOrEmpty(fieldTmp)) {
+            sb.append(" AND " + fieldTmp + " IS NOT NULL AND TRIM(" + fieldTmp + ") IS NOT NULL ");
+          }
+        }
+        sb.append(" THEN 1  ELSE 0  END  ) AS VALIDROWS ");
+        //计算所有字段空值率---暂时无用
+        int countFields = 0;
+        for (String fieldTmp : CHECKFIELDS.split(",")) {
+          if (CommonUtil.isNotNullOrEmpty(fieldTmp)) {
+            countFields++;
+            sb.append(" ,COUNT(NVL2(TRIM(" + fieldTmp + "), 1, NULL)) ");
+          }
+        }
+
+        sb.append(" from ");
+        sb.append(TBENAME);
+//        0 抽样1000条 1全量采集
+        if ("0".equals(CJTYPE)) {
+          sb.append(" where ROWNUM <=1000 ");
+        }
+        LOGGER.info("任务表ID:" + taskId + " 表名:" + TBENAME + "执行统计SQL:{}", sb.toString());
+        Map<String, Object> resultCountMap = tmpJdbcTemplate.queryForMap(sb.toString());
+
+        int CHECKROWS = ((BigDecimal) resultCountMap.get("COUNT")).intValue();
+        int VALIDROWS = ((BigDecimal) resultCountMap.get("VALIDROWS")).intValue();
+
+        DecimalFormat df = new DecimalFormat("0.00%"); // 格式化为百分比
+        String WANZHENG = df.format((double) VALIDROWS / CHECKROWS);
+
+//        写入检测日志
+//        更新最新状态信息
+        mdjfDao.saveCheckTaskLog(DBID, DBNAME, taskId, TBCNAME, TBENAME, String.valueOf(CHECKROWS), String.valueOf(VALIDROWS), WANZHENG, CheckErrorTypeEnum.SUCCESS.getCode(), CheckErrorTypeEnum.SUCCESS.getInfo());
+//        LASTCHECKTIME,LASTCHECKSTATUS,LASTCHECKSTATUSMSG,LASTCHECKROWS,LASTVALIDROWS,LASTWANZHENG,tableTaskID
+        mdjfDao.updateCheckTableTask(DateUtils.getNowDate(), CheckErrorTypeEnum.SUCCESS.getCode(), CheckErrorTypeEnum.SUCCESS.getInfo(), String.valueOf(CHECKROWS), String.valueOf(VALIDROWS), WANZHENG, taskId);
+        successTaskNum++;
+      } catch (Exception e) {
+        LOGGER.error("异常信息:{},表任务ID:{},目标连接信息:{},用户名:{},用户密码:{},目标表:{}", e.getMessage(), taskId, url, USERNAME, "*******", TBENAME, e);
+        mdjfDao.saveCheckTaskLog(DBID, DBNAME, taskId, TBCNAME, TBENAME, null, null, null, CheckErrorTypeEnum.SQLERROR.getCode(),CheckErrorTypeEnum.SQLERROR.getInfo()+" : "+ e.getMessage());
+        mdjfDao.updateCheckTableTask(DateUtils.getNowDate(), CheckErrorTypeEnum.SQLERROR.getCode() , CheckErrorTypeEnum.SQLERROR.getInfo()+" : "+ e.getMessage(), null, null, null, taskId);
+
+      }
+    }
+    LOGGER.info("本次监测完成 ,共计:{} 个任务 ,成功:{} 个任务 ,异常:{} 个任务 ",needRunTask.size(),successTaskNum,needRunTask.size()-successTaskNum);
+  }
+}

+ 56 - 0
src/main/java/org/ssssssss/example/datacheck/service/DataExportService.java

@@ -0,0 +1,56 @@
+package org.ssssssss.example.datacheck.service;
+
+import com.alibaba.fastjson.JSONObject;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.PropertySource;
+import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.stereotype.Service;
+import org.ssssssss.example.datacheck.bean.CheckErrorTypeEnum;
+import org.ssssssss.example.datacheck.bean.DBTypeEnum;
+import org.ssssssss.example.datacheck.bean.JsonResult;
+import org.ssssssss.example.datacheck.common.CustomDateSource;
+import org.ssssssss.example.datacheck.common.DateUtils;
+import org.ssssssss.example.datacheck.common.ExcelExportUtil;
+import org.ssssssss.example.datacheck.dao.DataExportMapper;
+import org.ssssssss.example.datacheck.dao.MDJFDao;
+import org.ssssssss.example.mdjf.common.CommonUtil;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.math.BigDecimal;
+import java.text.DecimalFormat;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+
+@Service
+// 加载配置文件
+@PropertySource(value = "serviceConfig.yml", encoding = "UTF-8") // 加载配置文件
+public class DataExportService {
+
+  private static final Logger LOGGER = LoggerFactory.getLogger(DataExportService.class);
+
+
+  @Autowired
+  private DataExportMapper dataExportMapper;
+
+  public void mdjftotal(String startTime, String endTime, HttpServletResponse response) throws IOException {
+    List<Map<String,Object>> result = dataExportMapper.mdjftotal(startTime,endTime);
+    ExcelExportUtil.exportToExcel(response,result,"矛盾纠纷统计报表导出","导出结果");
+  }
+
+  public void zdrtotal(String startTime, String endTime, HttpServletResponse response) throws IOException {
+    List<Map<String,Object>> result = dataExportMapper.zdrtotal(startTime,endTime);
+    ExcelExportUtil.exportToExcel(response,result,"重点人报表导出","导出结果");
+  }
+
+  public void yjzxList(HttpServletResponse response, String idno, String jsdwmc, String name, String rwlx, String rwmc, String sqdwmc, String yjsjEnd, String yjsjStart, String yjzt, String zrmj) throws IOException {
+    List<Map<String,Object>> result = dataExportMapper.yjzxList(idno,jsdwmc,name,rwlx,rwmc,sqdwmc,yjsjEnd,yjsjStart,yjzt,zrmj);
+    ExcelExportUtil.exportToExcel(response,result,"预警信息导出","导出结果");
+  }
+}

+ 98 - 25
src/main/java/org/ssssssss/example/mdjf/UtilService.java

@@ -1,5 +1,6 @@
 package org.ssssssss.example.mdjf;
 
+import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.fasterxml.jackson.databind.util.JSONPObject;
 import org.slf4j.Logger;
@@ -10,13 +11,12 @@ import org.springframework.stereotype.Service;
 import org.ssssssss.example.mdjf.common.CommonUtil;
 import org.ssssssss.example.mdjf.common.FieldCheckUtil;
 import org.ssssssss.example.mdjf.domain.CheckMethodEnum;
+import org.ssssssss.example.mdjf.domain.XZQHEnum;
 import org.ssssssss.magicapi.modules.db.model.PageResult;
 
 import java.text.DecimalFormat;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
+import java.util.stream.Collectors;
 
 @Service
 // 加载配置文件
@@ -28,42 +28,44 @@ public class UtilService {
     private String testPath;
     private DecimalFormat df = new DecimalFormat("#.00");
 
-    public PageResult testProcess(PageResult pageResult){
-//        List<String> needProcessField = new ArrayList<>();
-//        needProcessField.add("partyIdNumber");
-//        needProcessField.add("eventName");
-//        needProcessField.add("eventCategory");
-
-        Map<String,String> fieldCheckRules = new HashMap<>();     //存数据库 list< Map<>>
-        fieldCheckRules.put("PARTY_ID_NUMBER", CheckMethodEnum.IDNOCHECK.getCode());
-        fieldCheckRules.put("EVENT_NAME",CheckMethodEnum.NOTNULL.getCode());
-        fieldCheckRules.put("RKSJ_ZYK",CheckMethodEnum.NOTNULL.getCode());
-
+    /**
+     * 矛盾纠纷列表计算完整度
+     * @param dbList
+     * @param wzruleList
+     * @return
+     */
+    public PageResult processMdjfListWanZheng(PageResult dbList,ArrayList<Map<String,String>> wzruleList){
+
+        System.out.println(dbList.getClass());
+        System.out.println(JSONObject.toJSONString(dbList));
+        System.out.println(wzruleList.getClass());
+        System.out.println(JSONObject.toJSONString(wzruleList));
         System.out.println(testPath);
 
-        System.out.println(pageResult.getClass());
-        System.out.println(JSONObject.toJSONString(pageResult));
-        List<Map<String,Object>> pageList = pageResult.getList();       //传过来的数据List
+        List<Map<String,Object>> pageList = dbList.getList();       //传过来的数据List
+        if(pageList == null){
+            return dbList;
+        }
+
         for(Map<String,Object> tmpInfo: pageList){  //便利List 的每条数据
             double i = 0;
-            for(Map.Entry<String, String> tmpFieldRule : fieldCheckRules.entrySet()){    //对每个数据,定制的规则进行 完整度监测Field
-                if(FieldCheckUtil.FieldCheck(tmpInfo.get(tmpFieldRule.getKey()),tmpFieldRule.getValue())){
+            for(Map<String,String> tmpFieldRule : wzruleList){    //对每个数据,定制的规则进行 完整度监测Field
+                if(FieldCheckUtil.FieldCheck(tmpInfo.get(tmpFieldRule.get("FIELD")),tmpFieldRule.get("RULE"))){
                     //规则校验通过
                     i++;
                 }
             }
 
-            String wanzheng = df.format(i/fieldCheckRules.size() * 100)+"%";
+            String wanzheng = df.format(i/wzruleList.size() * 100)+"%";
 
-
-            System.out.println("监测:"+fieldCheckRules.size());
+            System.out.println("监测:"+wzruleList.size());
             System.out.println("监测通过:"+i);
             System.out.println("wanZheng:"+wanzheng);
 
-            tmpInfo.put("WAN_ZHENG",wanzheng);
+            tmpInfo.put("WANZHENGDU",wanzheng);
         }
 
-        return pageResult;
+        return dbList;
     }
 
 
@@ -73,6 +75,77 @@ public class UtilService {
 
     }
 
+    /**
+     * 重点人报表统计计算
+     * @param dbList
+     * @return
+     */
+    public JSONArray processZdrTotal(ArrayList<Map<String,String>> dbList){
+        Map<String,List<String>> resultMap = new HashMap<>();
+
+
+        for(Map<String,String> tmpData : dbList){           //遍历所有结果
+            String FENJU = tmpData.get("FENJU");
+
+            for(XZQHEnum tmpxzqh :XZQHEnum.values()){   //遍历行政区划
+                if(tmpxzqh.getName().equals(FENJU)){
+                    List<String> rylbtmpList = new ArrayList<>(Arrays.asList(tmpData.get("PERSON_CLASS").split(",")));
+                    if(resultMap.containsKey(FENJU)){   //原resultMap 存在此单位
+                        resultMap.get(FENJU).addAll(rylbtmpList);
+                    }else{
+                        resultMap.put(FENJU,rylbtmpList);
+                    }
+                    break;  //如果命中一个分局,就调出比对
+                }
+            }
+        }
+
+
+        System.err.println(JSONObject.toJSONString(resultMap));
+
+        JSONArray result = new JSONArray();
+
+        for(Map.Entry<String,List<String>> tmpxzqhinfo: resultMap.entrySet()){
+            String xzqh = tmpxzqhinfo.getKey();
+
+            Map<String, Long> xzqhrylx = tmpxzqhinfo.getValue().stream()
+                    .collect(Collectors.groupingBy(tmpxzqhRylx -> tmpxzqhRylx, Collectors.counting()));
+
+            JSONObject resutlXzqhData =  JSONObject.parseObject(JSONObject.toJSONString(xzqhrylx));
+            resutlXzqhData.put("xzqh",xzqh);
+            result.add(resutlXzqhData);
+        }
+
+//        System.err.println(result);
+
+        return result;
+
+    }
+
+
+
+    /**
+     * 重点人标签统计
+     * @param dbList
+     * @return
+     */
+    public Map<String, Long> processZdrCountByField(ArrayList<Map<String,String>> dbList,String field){
+        List<String> resultList = new ArrayList<>();
+
+
+        for(Map<String,String> tmpData : dbList){           //遍历所有结果
+            List<String> rylbtmpList = new ArrayList<>(Arrays.asList(tmpData.get(field).split(",")));
+            resultList.addAll(rylbtmpList);
+        }
+
+
+        Map<String, Long> rylxgroup = resultList.stream()
+                    .collect(Collectors.groupingBy(tmpRylx -> tmpRylx, Collectors.counting()));
+
+
+        return rylxgroup;
+
+    }
 
 
 }

+ 2 - 2
src/main/java/org/ssssssss/example/mdjf/common/Constant.java

@@ -5,7 +5,7 @@ package org.ssssssss.example.mdjf.common;
  * WH
  */
 public class Constant {
-	
+
 	public static final String SPLITSTR = "\u0019";
 	public static final String PHONE_REGEX = "^1[0-9]{10}$";
 	public static final Integer MAXWAIT = 60000;
@@ -17,7 +17,7 @@ public class Constant {
 
 
 	// 程序名称  日志使用   修改点!!!
-	public static final String SERVICE_NAME = "SPRING_BOOT_MAGIC_PROCESS--->";
+	public static final String SERVICE_NAME = "SPRING_BOOT_MAGIC_DATACHECK--->";
 
 
 

+ 41 - 0
src/main/java/org/ssssssss/example/mdjf/domain/XZQHEnum.java

@@ -0,0 +1,41 @@
+package org.ssssssss.example.mdjf.domain;
+
+public enum XZQHEnum {
+
+    HEPING("HEPING", "和平区"),
+    HEDONG("HEDONG", "河东区"),
+    HEXI("HEXI", "河西区"),
+    NANKAI("NANKAI", "南开区"),
+    HEBEI("HEBEI", "河北区"),
+    HONGQIAO("HONGQIAO", "红桥区"),
+    BINHAI("BINHAI", "滨海新区"),
+    DONGLI("DONGLI", "东丽区"),
+    XIQING("XIQING", "西青区"),
+    JINGNAN("JINGNAN", "津南区"),
+    BEICHEN("BEICHEN", "北辰区"),
+    WUQING("WUQING", "武清区"),
+    BAODI("BAODI", "宝坻区"),
+    NINGHE("NINGHE", "宁河区"),
+    JINGHAI("JINGHAI", "静海区"),
+    JIZHOU("JIZHOU", "蓟州区"),
+    OTHER("OTHER", "其他");
+
+
+
+    private  String code;
+    private String name;
+
+    XZQHEnum(String code, String name){
+        this.code = code;
+        this.name = name;
+    }
+
+    public String getCode() {
+        return code;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+}

+ 20 - 0
src/main/java/org/ssssssss/example/mdjf/domain/test.java

@@ -0,0 +1,20 @@
+package org.ssssssss.example.mdjf.domain;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+public class test {
+    public static void main(String[] args) {
+        List<String> test = new ArrayList<>();
+
+        List<String> xzqhRylxs = Arrays.asList("apple", "banana", "apple", "orange", "banana");
+
+        Map<String, Long> fruitCountMap = xzqhRylxs.stream()
+                .collect(Collectors.groupingBy(tmpxzqhRylx -> tmpxzqhRylx, Collectors.counting()));
+
+        System.err.println(fruitCountMap);
+    }
+}

+ 105 - 12
src/main/resources/application.yml

@@ -4,16 +4,101 @@ server:
   compression:
     enabled: true
     min-response-size: 128
-# 配置主数据源
+# 配置主数据源 magicApi msql
 spring:
   jackson:
     date-format: yyyy-MM-dd HH:mm:ss
     time-zone: GMT+8
+#  datasource:
+##    url: jdbc:mysql://1.95.39.182:3306/magic_api?useSSL=false&useUnicode=true&characterEncoding=UTF8&serverTimezone=Asia/Shanghai
+##    username: root
+##    password: 09#d2_37C!6X4a
+#
+#    magic:
+#      jdbc-url: jdbc:mysql://1.95.39.182:3306/magic_api?useSSL=false&useUnicode=true&characterEncoding=UTF8&serverTimezone=Asia/Shanghai
+#      username: root
+#      password: 09#d2_37C!6X4a
+#      driver-class-name: com.mysql.cj.jdbc.Driver
+#      max-active: 20
+#      max-idle: 10
+#      min-idle: 10
+#      initial-size: 10
+#
+#    mdjf:
+#      jdbc-url: jdbc:oracle:thin:@1.95.39.182:1521/ORCLPDB
+#      username: qbeq
+#      password: qbeq01!
+#      driver-class-name: oracle.jdbc.OracleDriver
+#      max-active: 20
+#      max-idle: 10
+#      min-idle: 10
+#      initial-size: 10
+#
+#    test:
+#      jdbc-url: jdbc:oracle:thin:@1.95.39.182:1521/ORCLPDB
+#      username: qbeq
+#      password: qbeq01!
+#      driver-class-name: oracle.jdbc.OracleDriver
+#      max-active: 20
+#      max-idle: 10
+#      min-idle: 10
+#      initial-size: 10
+
+#spring:
   datasource:
-    url: jdbc:mysql://1.95.39.182:3306/magic_api?useSSL=false&useUnicode=true&characterEncoding=UTF8&serverTimezone=Asia/Shanghai
-#    url: jdbc:mysql://localhost:3306/magic_api3?useSSL=false&useUnicode=true&characterEncoding=UTF8&serverTimezone=Asia/Shanghai
-    username: root
-    password: 09#d2_37C!6X4a
+    dynamic:
+      primary: master #设置默认的数据源或者数据源组,默认值即为master
+      strict: false #严格匹配数据源,默认false. true未匹配到指定数据源时抛异常,false使用默认数据源
+      datasource:
+        master:
+          url: jdbc:mysql://1.95.39.182:3306/magic_api?useSSL=false&useUnicode=true&characterEncoding=UTF8&serverTimezone=Asia/Shanghai
+          username: root
+          password: 09#d2_37C!6X4a
+          driver-class-name: com.mysql.cj.jdbc.Driver
+
+        mdjf:
+          url: jdbc:oracle:thin:@1.95.39.182:1521/ORCLPDB
+          username: qbeq
+          password: qbeq01!
+          driver-class-name: oracle.jdbc.OracleDriver
+
+        test:
+          url: jdbc:oracle:thin:@1.95.39.182:1521/ORCLPDB
+          username: qbeq
+          password: qbeq01!
+          driver-class-name: oracle.jdbc.OracleDriver
+
+
+# 添加mybstisplus配置
+mybatis-plus:
+  # 扫描mapper文件所在位置
+  mapper-locations: classpath*:mapper/*.xml
+#  mapper-locations: classpath*:mapper/*.xml
+  # 可以指定实体类所在包路径
+#  typeAliasesPackage: com.ruoyi.**.domain
+  # 下划线到驼峰式命名法映射
+  configuration:
+    map-underscore-to-camel-case: false
+  # 忽略字段大小写的差异,不对字段名称进行转换
+    # 日志输出SQL
+    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
+    # 设置全局的 SQL 执行超时时间(单位:秒)
+    default-statement-timeout: 300
+    # 执行插入、更新、删除操作时,是否忽略插入时的字段为空值
+    jdbc-type-for-null: NULL
+#  global-config:
+#    db-config:
+#      field-strategy: ignore
+
+
+# PageHelper分页插件
+pagehelper:
+  helperDialect: mysql
+  supportMethodsArguments: true
+  params: count=countSql
+
+
+
 #  data:
     # 配置mongo数据源
 #    mongodb:
@@ -71,19 +156,20 @@ magic-api:
   response: |- #配置JSON格式,格式为magic-script中的表达式
     {
       code: code,
-      message: message,
+      msg: message,
       data,
       timestamp,
       requestTime,
       executeTime,
     }
   response-code:
-    success: 1 #执行成功的code值
-    invalid: 0 #参数验证未通过的code值
-    exception: -1 #执行出现异常的code值
+    #marsview修改 wanghao
+    success: 0 #执行成功的code值
+    invalid: 400 #参数验证未通过的code值
+    exception: 500 #执行出现异常的code值
   banner: true # 打印banner
   thread-pool-executor-size: 8 # async语句的线程池大小
-  throw-exception: false #执行出错时是否抛出异常
+  throw-exception: true #执行出错时是否抛出异常
   backup: #备份相关配置
     enable: false #是否启用
     max-history: -1 #备份保留天数,-1为永久保留
@@ -97,8 +183,11 @@ magic-api:
     ttl: -1 # 永不过期
     enable: true # 启用缓存
   page:
-    size: size # 页大小的参数名称
-    page: page # 页码的参数名称
+#    marsview修改 wanghao
+#    size: size # 页大小的参数名称
+#    page: page # 页码的参数名称
+    size: pageSize # 页大小的参数名称
+    page: pageNum # 页码的参数名称
     default-page: 1 # 未传页码时的默认首页
     default-size: 10 # 未传页大小时的默认页大小
   security:  # 安全配置
@@ -117,3 +206,7 @@ magic-api:
 logging:
   level:
     root: info  # 设置根日志级别为 INFO
+    com.baomidou.mybatisplus: debug
+
+
+

+ 143 - 0
src/main/resources/mapper/DataExportMapper.xml

@@ -0,0 +1,143 @@
+<?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="org.ssssssss.example.datacheck.dao.DataExportMapper">
+
+
+    <select id="mdjftotal" resultType="java.util.HashMap">
+
+        SELECT
+        SUBSTR(srccount.FENJU, 3) xzqh,
+        MAX(CASE WHEN srccount.EVENT_TYPE = '其他原因民事纠F' THEN srccount.NUMS END) AS qtyymsjf,
+        MAX(CASE WHEN srccount.EVENT_TYPE = '10jing情' THEN srccount.NUMS END) AS jq,
+        MAX(CASE WHEN srccount.EVENT_TYPE = '物业纠F' THEN srccount.NUMS END) AS wy,
+        MAX(CASE WHEN srccount.EVENT_TYPE = '邻里关系' THEN srccount.NUMS END) AS ll,
+        MAX(CASE WHEN srccount.EVENT_TYPE = '婚恋家庭' THEN srccount.NUMS END) AS hjjt,
+        MAX(CASE WHEN srccount.EVENT_TYPE = '邻里纠F' THEN srccount.NUMS END) AS lljf,
+        MAX(CASE WHEN srccount.EVENT_TYPE = '其他纠F' THEN srccount.NUMS END) AS qtjf,
+        MAX(CASE WHEN srccount.EVENT_TYPE = '消费维权产品质量' THEN srccount.NUMS END) AS xfwq,
+        MAX(CASE WHEN srccount.EVENT_TYPE = '损害赔偿纠F' THEN srccount.NUMS END) AS shpc,
+        MAX(CASE WHEN srccount.EVENT_TYPE = '学校教育' THEN srccount.NUMS END) AS xxjy,
+        MAX(CASE WHEN srccount.EVENT_TYPE = '劳资关系' THEN srccount.NUMS END) AS lzgx,
+        MAX(CASE WHEN srccount.EVENT_TYPE = '物业管理' THEN srccount.NUMS END) AS wygl
+        FROM
+        (
+        select FENJU,EVENT_TYPE,count(1) nums from (
+
+        select EVENT_ID,EVENT_NAME,SJLY DA_TYPE,EVENT_CATEGORY EVENT_TYPE, RESOLUTION_ORGANIZATION  SJLY_UNIT,INVOLVED_UNIT  BANLI_UNIT,
+        case
+        when instr(RESOLUTION_ORGANIZATION || INVOLVED_UNIT,'和平')>0 then '02和平区'
+        when instr(RESOLUTION_ORGANIZATION || INVOLVED_UNIT,'河东')>0 then '03河东区'
+        when instr(RESOLUTION_ORGANIZATION || INVOLVED_UNIT,'河西')>0 then '04河西区'
+        when instr(RESOLUTION_ORGANIZATION || INVOLVED_UNIT,'南开')>0 then '05南开区'
+        when instr(RESOLUTION_ORGANIZATION || INVOLVED_UNIT,'河北')>0 then '06河北区'
+        when instr(RESOLUTION_ORGANIZATION || INVOLVED_UNIT,'红桥')>0 then '07红桥区'
+        when instr(RESOLUTION_ORGANIZATION || INVOLVED_UNIT,'滨海')>0 then '01滨海新区'
+        when instr(RESOLUTION_ORGANIZATION || INVOLVED_UNIT,'东丽')>0 then '08东丽区'
+        when instr(RESOLUTION_ORGANIZATION || INVOLVED_UNIT,'西青')>0 then '09西青区'
+        when instr(RESOLUTION_ORGANIZATION || INVOLVED_UNIT,'津南')>0 then '10津南区'
+        when instr(RESOLUTION_ORGANIZATION || INVOLVED_UNIT,'北辰')>0 then '11北辰区'
+        when instr(RESOLUTION_ORGANIZATION || INVOLVED_UNIT,'武清')>0 then '12武清区'
+        when instr(RESOLUTION_ORGANIZATION || INVOLVED_UNIT,'宝坻')>0 then '13宝坻区'
+        when instr(RESOLUTION_ORGANIZATION || INVOLVED_UNIT,'宁河')>0 then '15宁河区'
+        when instr(RESOLUTION_ORGANIZATION || INVOLVED_UNIT,'静海')>0 then '14静海区'
+        when instr(RESOLUTION_ORGANIZATION || INVOLVED_UNIT,'蓟州')>0 then '16蓟州区'
+        else '17其他'
+        end  FENJU
+
+        from TB_MDJFKHJXX  where EVENT_CATEGORY is not null
+
+        <if test="startTime != null and startTime != ''">
+            <![CDATA[ and EVENT_DATE >= TO_DATE(#{startTime},'YYYY-MM-DD HH24:MI:SS') ]]>
+        </if>
+
+        <if test="endTime != null and endTime != ''">
+            <![CDATA[ and EVENT_DATE <= TO_DATE(#{endTime},'YYYY-MM-DD HH24:MI:SS')  ]]>
+        </if>
+
+        )  GROUP BY EVENT_TYPE,FENJU  ORDER BY nums desc
+        ) srccount
+        GROUP BY srccount.FENJU ORDER BY SUBSTR(srccount.FENJU, 0, 2)
+
+    </select>
+
+    <select id="zdrtotal" resultType="java.util.Map">
+
+        select NAME 姓名,XZDQH,MAIN_UNIT,PERSON_LABEL,PERSON_CLASS,
+        case
+        when instr(XZDQH || MAIN_UNIT,'和平')>0 then '和平区'
+        when instr(XZDQH || MAIN_UNIT,'河东')>0 then '河东区'
+        when instr(XZDQH || MAIN_UNIT,'河西')>0 then '河西区'
+        when instr(XZDQH || MAIN_UNIT,'南开')>0 then '南开区'
+        when instr(XZDQH || MAIN_UNIT,'河北')>0 then '河北区'
+        when instr(XZDQH || MAIN_UNIT,'红桥')>0 then '红桥区'
+        when instr(XZDQH || MAIN_UNIT,'滨海')>0 then '滨海新区'
+        when instr(XZDQH || MAIN_UNIT,'东丽')>0 then '东丽区'
+        when instr(XZDQH || MAIN_UNIT,'西青')>0 then '西青区'
+        when instr(XZDQH || MAIN_UNIT,'津南')>0 then '津南区'
+        when instr(XZDQH || MAIN_UNIT,'北辰')>0 then '北辰区'
+        when instr(XZDQH || MAIN_UNIT,'武清')>0 then '武清区'
+        when instr(XZDQH || MAIN_UNIT,'宝坻')>0 then '宝坻区'
+        when instr(XZDQH || MAIN_UNIT,'宁河')>0 then '宁河区'
+        when instr(XZDQH || MAIN_UNIT,'静海')>0 then '静海区'
+        when instr(XZDQH || MAIN_UNIT,'蓟州')>0 then '蓟州区'
+        else '其他'
+        end  FENJU
+        from T_ZDR_JBXX
+        where 1 =1
+
+        <if test="startTime != null and startTime != ''">
+            <![CDATA[ and CREATE_TIME >#{startTime} ]]>
+        </if>
+
+        <if test="endTime != null and endTime != ''">
+            <![CDATA[ and CREATE_TIME >=#{endTime} ]]>
+        </if>
+    </select>
+
+    <select id="yjzxList" resultType="java.util.Map">
+        SELECT YJRY_XM,YJRY_SFZH,TO_CHAR(YJXXSM),RWMC,RWLX,RWLXMC,RWDXMC,YJZT,YJZTMC,YJSJ,JSBMMC,SQR_DWMC,YWLY,ZRMJXM from T_BKRW_YJXX WHERE 1=1
+        <if test="idno != null and idno != ''">
+            and YJRY_SFZH = #{idno}
+        </if>
+
+        <if test="jsdwmc != null and jsdwmc != ''">
+            and (JSBMMC like '%'||#{jsdwmc}||'%'  OR JSDWMC like '%'||#{jsdwmc}||'%' )
+        </if>
+
+        <if test="name != null and name != ''">
+            and YJRY_XM = #{name}
+        </if>
+
+        <if test="rwlx != null and rwlx != 99 and  rwlx != '99' ">
+            and RWLX =  #{rwlx}
+        </if>
+
+        <if test="rwmc != null and rwmc != ''">
+            and RWMC like '%'||#{rwmc}||'%'
+        </if>
+
+        <if test="sqdwmc != null and sqdwmc != ''">
+            and SQR_DWMC like '%'||#{sqdwmc}||'%'
+        </if>
+
+        <if test="zrmj != null and zrmj != ''">
+            and ZRMJXM = #{zrmj}
+        </if>
+
+        <if test="yjzt != null and yjzt != 99 and  yjzt != '99' ">
+            and YJZT =  #{yjzt}
+        </if>
+
+        <if test="yjsjStart != null and yjsjStart != ''">
+            <![CDATA[  and YJSJ >= TO_DATE(#{yjsjStart},'YYYY-MM-DD HH24:MI:SS') ]]>
+        </if>
+
+        <if test="yjsjEnd != null and yjsjEnd != ''">
+           <![CDATA[  and YJSJ <= TO_DATE(#{yjsjEnd},'YYYY-MM-DD HH24:MI:SS') ]]>
+        </if>
+
+        ORDER BY YJSJ desc
+
+    </select>
+
+</mapper>

+ 10 - 1
src/main/resources/serviceConfig.yml

@@ -1,3 +1,12 @@
 spring.http.encoding.enabled=true
 
-testPath: http://peixun/
+testPath: http://peixun/
+#任务开始时间 秒 分钟   每次启动前修改启动时间    必须写  秒  分  时     都则会跑多次
+#如果每次运行时间较长
+#crontask_time = 0 10 11 * * ?
+all_crontask_time = 0 0 13 * * ?
+first_crontask_time = 0 */2 * * * ?
+
+
+#查询超时分钟
+queryTimeOut: 60