浏览代码

健康管理产品化模块初始化

shilin 2 年之前
父节点
当前提交
8201b0fb74
共有 100 个文件被更改,包括 9186 次插入0 次删除
  1. 52 0
      web/health/src/main/java/com/gyee/SpringbootStart.java
  2. 19 0
      web/health/src/main/java/com/gyee/SpringbootWebInitializer.java
  3. 77 0
      web/health/src/main/java/com/gyee/frame/common/async/config/AsyncConfig.java
  4. 76 0
      web/health/src/main/java/com/gyee/frame/common/async/config/ThreadPoolConfig.java
  5. 133 0
      web/health/src/main/java/com/gyee/frame/common/async/controller/AsyncController.java
  6. 57 0
      web/health/src/main/java/com/gyee/frame/common/async/service/AsyncService.java
  7. 63 0
      web/health/src/main/java/com/gyee/frame/common/async/service/impl/AsyncServiceImpl.java
  8. 41 0
      web/health/src/main/java/com/gyee/frame/common/async/util/SmsUtil.java
  9. 125 0
      web/health/src/main/java/com/gyee/frame/common/base/BaseController.java
  10. 34 0
      web/health/src/main/java/com/gyee/frame/common/base/BaseService.java
  11. 268 0
      web/health/src/main/java/com/gyee/frame/common/base/PageInfo.java
  12. 419 0
      web/health/src/main/java/com/gyee/frame/common/cache/AppRedisCacheManager.java
  13. 46 0
      web/health/src/main/java/com/gyee/frame/common/cache/ApplicationContextHolder.java
  14. 383 0
      web/health/src/main/java/com/gyee/frame/common/cache/IGlobalCache.java
  15. 72 0
      web/health/src/main/java/com/gyee/frame/common/cache/MybatisRedisCache.java
  16. 105 0
      web/health/src/main/java/com/gyee/frame/common/cache/RedisConfig.java
  17. 51 0
      web/health/src/main/java/com/gyee/frame/common/cache/RedisService.java
  18. 125 0
      web/health/src/main/java/com/gyee/frame/common/cache/RedisServiceImpl.java
  19. 31 0
      web/health/src/main/java/com/gyee/frame/common/cache/RedisUtils.java
  20. 13 0
      web/health/src/main/java/com/gyee/frame/common/conf/AjaxStatus.java
  21. 25 0
      web/health/src/main/java/com/gyee/frame/common/conf/ExportConfig.java
  22. 30 0
      web/health/src/main/java/com/gyee/frame/common/conf/FileConfig.java
  23. 149 0
      web/health/src/main/java/com/gyee/frame/common/conf/GeneratorCodeConfig.java
  24. 260 0
      web/health/src/main/java/com/gyee/frame/common/conf/GyeeConfig.java
  25. 85 0
      web/health/src/main/java/com/gyee/frame/common/conf/KaptchaConfig.java
  26. 99 0
      web/health/src/main/java/com/gyee/frame/common/conf/MybatisConfig.java
  27. 39 0
      web/health/src/main/java/com/gyee/frame/common/conf/MybatisPlusConfig.java
  28. 83 0
      web/health/src/main/java/com/gyee/frame/common/conf/Swagger.java
  29. 79 0
      web/health/src/main/java/com/gyee/frame/common/conf/TemperatureConfig.java
  30. 56 0
      web/health/src/main/java/com/gyee/frame/common/conf/ThreadPoolTaskConfig.java
  31. 20 0
      web/health/src/main/java/com/gyee/frame/common/conf/WebSocketConfig.java
  32. 27 0
      web/health/src/main/java/com/gyee/frame/common/conf/ZmConfig.java
  33. 45 0
      web/health/src/main/java/com/gyee/frame/common/conf/monitor/LeaderConfig.java
  34. 45 0
      web/health/src/main/java/com/gyee/frame/common/conf/monitor/StatusConfig.java
  35. 21 0
      web/health/src/main/java/com/gyee/frame/common/dataSources/DataSource.java
  36. 77 0
      web/health/src/main/java/com/gyee/frame/common/dataSources/DataSourceAspect.java
  37. 50 0
      web/health/src/main/java/com/gyee/frame/common/dataSources/DataSourceContextHolder.java
  38. 13 0
      web/health/src/main/java/com/gyee/frame/common/dataSources/DataSourceType.java
  39. 27 0
      web/health/src/main/java/com/gyee/frame/common/dataSources/DynamicDataSource.java
  40. 104 0
      web/health/src/main/java/com/gyee/frame/common/domain/AjaxResult.java
  41. 80 0
      web/health/src/main/java/com/gyee/frame/common/druid/RemoveDruidAdConfig.java
  42. 141 0
      web/health/src/main/java/com/gyee/frame/common/exception/GlobalExceptionResolver.java
  43. 65 0
      web/health/src/main/java/com/gyee/frame/common/exception/QiNiuException.java
  44. 17 0
      web/health/src/main/java/com/gyee/frame/common/exception/demo/DemoModeException.java
  45. 55 0
      web/health/src/main/java/com/gyee/frame/common/exception/enums/QiNiuErrorEnum.java
  46. 41 0
      web/health/src/main/java/com/gyee/frame/common/exception/file/FileNameLengthLimitExceededException.java
  47. 73 0
      web/health/src/main/java/com/gyee/frame/common/exception/file/InvalidExtensionException.java
  48. 61 0
      web/health/src/main/java/com/gyee/frame/common/feign/IAdapterService.java
  49. 38 0
      web/health/src/main/java/com/gyee/frame/common/feign/RemoteServiceBuilder.java
  50. 83 0
      web/health/src/main/java/com/gyee/frame/common/file/ClassUtil.java
  51. 272 0
      web/health/src/main/java/com/gyee/frame/common/file/ExcelExport.java
  52. 179 0
      web/health/src/main/java/com/gyee/frame/common/file/FileUploadUtils.java
  53. 110 0
      web/health/src/main/java/com/gyee/frame/common/file/FileUtils.java
  54. 157 0
      web/health/src/main/java/com/gyee/frame/common/interceptor/MyInterceptor.java
  55. 108 0
      web/health/src/main/java/com/gyee/frame/common/interceptor/MyWebAppConfigurer.java
  56. 31 0
      web/health/src/main/java/com/gyee/frame/common/log/Log.java
  57. 592 0
      web/health/src/main/java/com/gyee/frame/common/spring/Constant.java
  58. 397 0
      web/health/src/main/java/com/gyee/frame/common/spring/ConstantTR.java
  59. 377 0
      web/health/src/main/java/com/gyee/frame/common/spring/InitialRedis.java
  60. 586 0
      web/health/src/main/java/com/gyee/frame/common/spring/InitialRunner.java
  61. 116 0
      web/health/src/main/java/com/gyee/frame/common/spring/SpringUtils.java
  62. 20 0
      web/health/src/main/java/com/gyee/frame/common/spring/WpEnum.java
  63. 89 0
      web/health/src/main/java/com/gyee/frame/common/support/CharsetKit.java
  64. 1057 0
      web/health/src/main/java/com/gyee/frame/common/support/Convert.java
  65. 240 0
      web/health/src/main/java/com/gyee/frame/common/support/ConvertUtil.java
  66. 77 0
      web/health/src/main/java/com/gyee/frame/common/support/KaptchaTextCreator.java
  67. 20 0
      web/health/src/main/java/com/gyee/frame/controller/ProEconEarlyWarningMainController.java
  68. 20 0
      web/health/src/main/java/com/gyee/frame/controller/ProEconEarlyWarningSubController.java
  69. 20 0
      web/health/src/main/java/com/gyee/frame/controller/ProEconFailureStatisticMainController.java
  70. 20 0
      web/health/src/main/java/com/gyee/frame/controller/ProEconFailureStatisticsSubController.java
  71. 20 0
      web/health/src/main/java/com/gyee/frame/controller/ProEconHealthSystemController.java
  72. 20 0
      web/health/src/main/java/com/gyee/frame/controller/ProEconHealthSystemSubController.java
  73. 20 0
      web/health/src/main/java/com/gyee/frame/controller/ProEconPartPowerstatticMainController.java
  74. 20 0
      web/health/src/main/java/com/gyee/frame/controller/ProEconPartStatisticsMainController.java
  75. 20 0
      web/health/src/main/java/com/gyee/frame/controller/ProEconPartStatisticsSubController.java
  76. 20 0
      web/health/src/main/java/com/gyee/frame/controller/ProEconPartTemperatureMainController.java
  77. 20 0
      web/health/src/main/java/com/gyee/frame/controller/ProEconPartTemperatureSubController.java
  78. 20 0
      web/health/src/main/java/com/gyee/frame/controller/ProEconPartpowerStatticsSubController.java
  79. 20 0
      web/health/src/main/java/com/gyee/frame/controller/ProEconRecommenMainController.java
  80. 20 0
      web/health/src/main/java/com/gyee/frame/controller/ProEconStateJudgmentDayController.java
  81. 20 0
      web/health/src/main/java/com/gyee/frame/controller/ProEconStateJudgmentRealController.java
  82. 20 0
      web/health/src/main/java/com/gyee/frame/controller/ProEconWeatherFdController.java
  83. 20 0
      web/health/src/main/java/com/gyee/frame/controller/ProEconWeatherFhController.java
  84. 16 0
      web/health/src/main/java/com/gyee/frame/mapper/auto/ProBasicCompanyMapper.java
  85. 16 0
      web/health/src/main/java/com/gyee/frame/mapper/auto/ProBasicEnergyGroupMapper.java
  86. 16 0
      web/health/src/main/java/com/gyee/frame/mapper/auto/ProBasicEquipmentMapper.java
  87. 16 0
      web/health/src/main/java/com/gyee/frame/mapper/auto/ProBasicEquipmentPointMapper.java
  88. 16 0
      web/health/src/main/java/com/gyee/frame/mapper/auto/ProBasicLineMapper.java
  89. 16 0
      web/health/src/main/java/com/gyee/frame/mapper/auto/ProBasicMeterPointMapper.java
  90. 16 0
      web/health/src/main/java/com/gyee/frame/mapper/auto/ProBasicModelPowerMapper.java
  91. 16 0
      web/health/src/main/java/com/gyee/frame/mapper/auto/ProBasicModelPowerRdMapper.java
  92. 16 0
      web/health/src/main/java/com/gyee/frame/mapper/auto/ProBasicPowerstationMapper.java
  93. 20 0
      web/health/src/main/java/com/gyee/frame/mapper/auto/ProBasicPowerstationPointMapper.java
  94. 16 0
      web/health/src/main/java/com/gyee/frame/mapper/auto/ProBasicProjectMapper.java
  95. 16 0
      web/health/src/main/java/com/gyee/frame/mapper/auto/ProBasicProjectPlanMapper.java
  96. 16 0
      web/health/src/main/java/com/gyee/frame/mapper/auto/ProBasicRealtimeDbconfigMapper.java
  97. 16 0
      web/health/src/main/java/com/gyee/frame/mapper/auto/ProBasicRegionMapper.java
  98. 16 0
      web/health/src/main/java/com/gyee/frame/mapper/auto/ProBasicSquareMapper.java
  99. 16 0
      web/health/src/main/java/com/gyee/frame/mapper/auto/ProBasicStatusPointMapper.java
  100. 0 0
      web/health/src/main/java/com/gyee/frame/mapper/auto/ProBasicSubStationMapper.java

+ 52 - 0
web/health/src/main/java/com/gyee/SpringbootStart.java

@@ -0,0 +1,52 @@
+package com.gyee;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
+import org.springframework.cache.annotation.EnableCaching;
+import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
+
+
+/**
+ * 项目启动方法
+ * @author gyee
+ *
+ */
+@EnableDiscoveryClient //开启服务注册与发现功能: classpath: META-INF/spring.factories文件
+@EnableCaching
+@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
+public class SpringbootStart {
+
+    public static void main(String[] args) throws Exception {
+
+        SpringApplication.run(SpringbootStart.class, args);
+
+
+
+
+
+//        InitialRedis initialRedis=new InitialRedis();
+//        System.out.println("初始化开始!");
+//        initialRedis.intialWindturbinepowercurvefitting();
+//        initialRedis.intialWpScatter();
+//        initialRedis.intialPjScatter();
+//        initialRedis.intialLnScatter();
+//        initialRedis.intialWtScatter();
+//        System.out.println("初始化完成!");
+
+//        System.out.println("开始导出风机测点。。。。。。");
+//        initialPointEdosService.initalFj();
+//        System.out.println("结束导出风机测点。。。。。。");
+//
+//        System.out.println("开始导出风场测点。。。。。。");
+//        initialPointEdosService.initalFc(false);
+//        System.out.println("结束导出风场测点。。。。。。");
+//
+//
+//        System.out.println("开始导出风功率测点。。。。。。");
+//        initialPointEdosService.initalFgl();
+//        System.out.println("结束导出风功率测点。。。。。。");
+
+        System.out.println("初始化结束!");
+    }
+}

+ 19 - 0
web/health/src/main/java/com/gyee/SpringbootWebInitializer.java

@@ -0,0 +1,19 @@
+package com.gyee;
+
+import org.springframework.boot.builder.SpringApplicationBuilder;
+import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
+
+/**
+* @ClassName: SpringbootWebInitializer
+* @Description: web容器中进行部署
+* @author gyee
+* @date 2018年8月18日
+*
+*/
+public class SpringbootWebInitializer  extends SpringBootServletInitializer{
+	@Override
+    protected SpringApplicationBuilder configure(SpringApplicationBuilder application)
+    {
+        return application.sources(SpringbootStart.class);
+    }
+}

+ 77 - 0
web/health/src/main/java/com/gyee/frame/common/async/config/AsyncConfig.java

@@ -0,0 +1,77 @@
+//package com.gyee.frame.common.async.config;
+//
+//import org.slf4j.Logger;
+//import org.slf4j.LoggerFactory;
+//import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler;
+//import org.springframework.context.annotation.Configuration;
+//import org.springframework.scheduling.annotation.AsyncConfigurer;
+//import org.springframework.scheduling.annotation.EnableAsync;
+//
+//import java.lang.reflect.Method;
+//import java.util.Arrays;
+//
+///**
+// * AsyncConfig
+// *
+// * @author wliduo[i@dolyw.com]
+// * @date 2020/5/19 17:58
+// */
+//@Configuration
+//@EnableAsync
+//public class AsyncConfig implements AsyncConfigurer {
+//
+//    /**
+//     * logger
+//     */
+//    private static final Logger logger = LoggerFactory.getLogger(AsyncConfig.class);
+//
+//    /**
+//     * 这里不实现了,使用 ThreadPoolConfig 里的线程池即可
+//     *
+//     * @param
+//     * @return java.util.concurrent.Executor
+//     * @throws
+//     * @author wliduo[i@dolyw.com]
+//     * @date 2020/5/19 18:00
+//     */
+//    /*@Override
+//    public Executor getAsyncExecutor() {
+//        return null;
+//    }*/
+//
+//    /**
+//     * 只能捕获无返回值的异步方法,有返回值的被主线程处理
+//     *
+//     * @param
+//     * @return org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler
+//     * @throws
+//     * @author wliduo[i@dolyw.com]
+//     * @date 2020/5/20 10:16
+//     */
+//    @Override
+//    public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {
+//        return new CustomAsyncExceptionHandler();
+//    }
+//
+//    /***
+//     * 处理异步方法中未捕获的异常
+//     *
+//     * @author wliduo[i@dolyw.com]
+//     * @date 2020/5/19 19:16
+//     */
+//    class CustomAsyncExceptionHandler implements AsyncUncaughtExceptionHandler {
+//
+//        @Override
+//        public void handleUncaughtException(Throwable throwable, Method method, Object... obj) {
+//            logger.info("Exception message - {}", throwable.getMessage());
+//            logger.info("Method name - {}", method.getName());
+//            logger.info("Parameter values - {}", Arrays.toString(obj));
+//            if (throwable instanceof Exception) {
+//                Exception exception = (Exception) throwable;
+//                logger.info("exception:{}", exception.getMessage());
+//            }
+//            throwable.printStackTrace();
+//        }
+//
+//    }
+//}

+ 76 - 0
web/health/src/main/java/com/gyee/frame/common/async/config/ThreadPoolConfig.java

@@ -0,0 +1,76 @@
+package com.gyee.frame.common.async.config;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
+
+import java.util.concurrent.*;
+
+/**
+ * 线程池配置
+ *
+ * @author wliduo
+ * @date 2019/2/15 14:36
+ */
+@Configuration
+public class ThreadPoolConfig {
+
+    /**
+     * logger
+     */
+    private final static Logger logger = LoggerFactory.getLogger(ThreadPoolConfig.class);
+
+    @Value("${asyncThreadPool.corePoolSize}")
+    private int corePoolSize;
+
+    @Value("${asyncThreadPool.maxPoolSize}")
+    private int maxPoolSize;
+
+    @Value("${asyncThreadPool.queueCapacity}")
+    private int queueCapacity;
+
+    @Value("${asyncThreadPool.keepAliveSeconds}")
+    private int keepAliveSeconds;
+
+    @Value("${asyncThreadPool.awaitTerminationSeconds}")
+    private int awaitTerminationSeconds;
+
+    @Value("${asyncThreadPool.threadNamePrefix}")
+    private String threadNamePrefix;
+
+    /**
+     * 线程池配置
+     * @param
+     * @return java.util.concurrent.Executor
+     * @author wliduo
+     * @date 2019/2/15 14:44
+     */
+    @Bean(name = "threadPoolTaskExecutor")
+    public ThreadPoolTaskExecutor threadPoolTaskExecutor() {
+        logger.info("---------- 线程池开始加载 ----------");
+        ThreadPoolTaskExecutor threadPoolTaskExecutor = new ThreadPoolTaskExecutor();
+        // 核心线程池大小
+        threadPoolTaskExecutor.setCorePoolSize(corePoolSize);
+        // 最大线程数
+        threadPoolTaskExecutor.setMaxPoolSize(maxPoolSize);
+        // 队列容量
+        threadPoolTaskExecutor.setQueueCapacity(keepAliveSeconds);
+        // 活跃时间
+        threadPoolTaskExecutor.setKeepAliveSeconds(queueCapacity);
+        // 主线程等待子线程执行时间
+        threadPoolTaskExecutor.setAwaitTerminationSeconds(awaitTerminationSeconds);
+        // 线程名字前缀
+        threadPoolTaskExecutor.setThreadNamePrefix(threadNamePrefix);
+        // RejectedExecutionHandler:当pool已经达到max-size的时候,如何处理新任务
+        // CallerRunsPolicy:不在新线程中执行任务,而是由调用者所在的线程来执行
+        threadPoolTaskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
+        // 初始化
+        threadPoolTaskExecutor.initialize();
+        logger.info("---------- 线程池加载完成 ----------");
+        return threadPoolTaskExecutor;
+    }
+
+}

+ 133 - 0
web/health/src/main/java/com/gyee/frame/common/async/controller/AsyncController.java

@@ -0,0 +1,133 @@
+package com.gyee.frame.common.async.controller;
+
+
+import com.gyee.frame.common.async.service.AsyncService;
+import com.gyee.frame.common.async.util.SmsUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import java.util.concurrent.Future;
+
+/**
+ * AsyncController
+ *
+ * @author wliduo[i@dolyw.com]
+ * @date 2020/5/19 14:46
+ */
+@RestController
+@RequestMapping("/async")
+public class AsyncController {
+
+    /**
+     * logger
+     */
+    private final static Logger logger = LoggerFactory.getLogger(AsyncController.class);
+
+    @Resource
+    private AsyncService asyncService;
+
+    @Autowired
+    private SmsUtil smsUtil;
+
+    /**
+     * 可以看到无返回值异步方法出现异常,主线程还是继续执行完成
+     *
+     * @param
+     * @return void
+     * @throws
+     * @author wliduo[i@dolyw.com]
+     * @date 2020/5/20 9:53
+     */
+    @GetMapping("/run1")
+    public String run1() throws Exception {
+        asyncService.task1();
+        logger.info("run1开始执行");
+        Thread.sleep(5000);
+        logger.info("run1执行完成");
+        return "run1 success";
+    }
+
+    /**
+     * 可以看到有返回值异步方法出现异常,异常抛给主线程处理,导致主线程也被中断执行
+     *
+     * @param
+     * @return java.lang.String
+     * @throws
+     * @author wliduo[i@dolyw.com]
+     * @date 2020/5/20 10:15
+     */
+    @GetMapping("/run2")
+    public String run2() throws Exception {
+        Future<String> future = asyncService.task2();
+        // get()方法阻塞主线程,直到执行完成
+        String result = future.get();
+        logger.info("run2开始执行");
+        Thread.sleep(5000);
+        logger.info("run2执行完成");
+        return result;
+    }
+
+    /**
+     * 多个异步执行
+     *
+     * @param
+     * @return java.lang.String
+     * @throws
+     * @author wliduo[i@dolyw.com]
+     * @date 2020/5/20 10:26
+     */
+    @GetMapping("/run3")
+    public String run3() throws Exception {
+        logger.info("run3开始执行");
+        long start = System.currentTimeMillis();
+        Future<String> future3 = asyncService.task3();
+        Future<String> future4 = asyncService.task4();
+        // 这样与下面是一样的
+        logger.info(future3.get());
+        logger.info(future4.get());
+        // 先判断是否执行完成
+        boolean run3Done = Boolean.FALSE;
+        while (true) {
+            if (future3.isDone() && future4.isDone()) {
+                // 执行完成
+                run3Done = Boolean.TRUE;
+                break;
+            }
+            if (future3.isCancelled() || future4.isCancelled()) {
+                // 取消情况
+                break;
+            }
+        }
+        if (run3Done) {
+            logger.info(future3.get());
+            logger.info(future4.get());
+        } else {
+            // 其他异常情况
+        }
+        long end = System.currentTimeMillis();
+        logger.info("run3执行完成,执行时间: {}", end - start);
+        return "run3 success";
+    }
+
+    /**
+     * 工具类异步
+     *
+     * @param
+     * @return java.lang.String
+     * @throws
+     * @author wliduo[i@dolyw.com]
+     * @date 2020/5/20 10:59
+     */
+    @GetMapping("/sms")
+    public String sms() throws Exception {
+        logger.info("run1开始执行");
+        smsUtil.sendCode("15912347896", "135333");
+        logger.info("run1执行完成");
+        return "send sms success";
+    }
+}

+ 57 - 0
web/health/src/main/java/com/gyee/frame/common/async/service/AsyncService.java

@@ -0,0 +1,57 @@
+package com.gyee.frame.common.async.service;
+
+import java.util.concurrent.Future;
+
+/**
+ * AsyncService
+ *
+ * @author wliduo[i@dolyw.com]
+ * @date 2020/5/19 14:18
+ */
+public interface AsyncService {
+
+    /**
+     * 任务1
+     *
+     * @param
+     * @return void
+     * @throws Exception e
+     * @author wliduo[i@dolyw.com]
+     * @date 2020/5/19 14:45
+     */
+    void task1() throws Exception;
+
+    /**
+     * 任务2
+     *
+     * @param
+     * @return java.util.concurrent.Future<java.lang.String>
+     * @throws Exception e
+     * @author wliduo[i@dolyw.com]
+     * @date 2020/5/20 10:04
+     */
+    Future<String> task2() throws Exception;
+
+    /**
+     * 任务3
+     *
+     * @param
+     * @return java.util.concurrent.Future<java.lang.String>
+     * @throws Exception e
+     * @author wliduo[i@dolyw.com]
+     * @date 2020/5/20 10:20
+     */
+    Future<String> task3() throws Exception;
+
+    /**
+     * 任务4
+     *
+     * @param
+     * @return java.util.concurrent.Future<java.lang.String>
+     * @throws Exception e
+     * @author wliduo[i@dolyw.com]
+     * @date 2020/5/20 10:20
+     */
+    Future<String> task4() throws Exception;
+
+}

+ 63 - 0
web/health/src/main/java/com/gyee/frame/common/async/service/impl/AsyncServiceImpl.java

@@ -0,0 +1,63 @@
+package com.gyee.frame.common.async.service.impl;
+
+
+import com.gyee.frame.common.async.service.AsyncService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.scheduling.annotation.AsyncResult;
+import org.springframework.stereotype.Service;
+
+import java.util.concurrent.Future;
+
+/**
+ * AsyncServiceImpl
+ *
+ * @author wliduo[i@dolyw.com]
+ * @date 2020/5/19 14:24
+ */
+@Service
+public class AsyncServiceImpl implements AsyncService {
+
+    /**
+     * logger
+     */
+    private final static Logger logger = LoggerFactory.getLogger(AsyncServiceImpl.class);
+
+    @Override
+    @Async("threadPoolTaskExecutor")
+    public void task1() throws Exception {
+        logger.info("task1开始执行");
+        Thread.sleep(3000);
+        logger.info("task1执行结束");
+        throw new RuntimeException("出现异常");
+    }
+
+    @Override
+    @Async("threadPoolTaskExecutor")
+    public Future<String> task2() throws Exception {
+        logger.info("task2开始执行");
+        Thread.sleep(3000);
+        logger.info("task2执行结束");
+        throw new RuntimeException("出现异常");
+        // return new AsyncResult<String>("task2 success");
+    }
+
+    @Override
+    @Async("threadPoolTaskExecutor")
+    public Future<String> task3() throws Exception {
+        logger.info("task3开始执行");
+        Thread.sleep(3000);
+        logger.info("task3执行结束");
+        return new AsyncResult<String>("task3 success");
+    }
+
+    @Override
+    @Async("threadPoolTaskExecutor")
+    public Future<String> task4() throws Exception {
+        logger.info("task4开始执行");
+        Thread.sleep(3000);
+        logger.info("task4执行结束");
+        return new AsyncResult<String>("task4 success");
+    }
+}

+ 41 - 0
web/health/src/main/java/com/gyee/frame/common/async/util/SmsUtil.java

@@ -0,0 +1,41 @@
+package com.gyee.frame.common.async.util;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.stereotype.Component;
+
+/**
+ * SmsUtil
+ *
+ * @author wliduo[i@dolyw.com]
+ * @date 2020/5/20 10:50
+ */
+@Component
+public class SmsUtil {
+
+    private static final Logger logger = LoggerFactory.getLogger(SmsUtil.class);
+
+    /**
+     * 异步发送短信
+     *
+     * @param phone
+	 * @param code
+     * @return void
+     * @throws
+     * @author wliduo[i@dolyw.com]
+     * @date 2020/5/20 10:53
+     */
+    @Async
+    public void sendCode(String phone, String code) {
+        logger.info("开始发送验证码...");
+        // 模拟调用接口发验证码的耗时
+        try {
+            Thread.sleep(3000);
+        } catch (InterruptedException e) {
+            e.printStackTrace();
+        }
+        logger.info("发送成功: {}", phone);
+    }
+
+}

+ 125 - 0
web/health/src/main/java/com/gyee/frame/common/base/BaseController.java

@@ -0,0 +1,125 @@
+package com.gyee.frame.common.base;
+
+import cn.hutool.core.util.StrUtil;
+import com.gyee.frame.common.domain.AjaxResult;
+import com.gyee.frame.model.custom.TitleVo;
+import org.springframework.beans.propertyeditors.CustomDateEditor;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.WebDataBinder;
+import org.springframework.web.bind.annotation.InitBinder;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+/**
+ * web层通用数据处理
+* @ClassName: BaseController
+* @author gyee
+* @date 2018年8月18日
+*
+ */
+@Controller
+public class BaseController
+{
+
+
+    /**
+     * 将前台传递过来的日期格式的字符串,自动转化为Date类型
+     */
+    @InitBinder
+    public void initBinder(WebDataBinder binder)
+    {
+        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        dateFormat.setLenient(false);
+        binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true));
+    }
+
+
+    /**
+     * 响应返回结果
+     * 
+     * @param rows 影响行数
+     * @return 操作结果
+     */
+    protected AjaxResult toAjax(int rows)
+    {
+        return rows > 0 ? success() : error();
+    }
+
+    /**
+     * 返回成功
+     */
+    public AjaxResult success()
+    {
+        return AjaxResult.success();
+    }
+
+    /**
+     * 返回失败消息
+     */
+    public AjaxResult error()
+    {
+        return AjaxResult.error();
+    }
+
+    /**
+     * 返回成功消息
+     */
+    public AjaxResult success(String message)
+    {
+        return AjaxResult.success(message);
+    }
+    
+
+    /**
+     * 返回失败消息
+     */
+    public AjaxResult error(String message)
+    {
+        return AjaxResult.error(message);
+    }
+
+    /**
+     * 返回错误码消息
+     */
+    public AjaxResult error(int code, String message)
+    {
+        return AjaxResult.error(code, message);
+    }
+    
+    /**
+     * 返回object数据
+     */
+    public AjaxResult retobject(int code, Object  data)
+    {
+        return AjaxResult.successData(code, data);
+    }
+
+    /**
+     * 页面跳转
+     */
+    public String redirect(String url)
+    {
+    	return StrUtil.format("redirect:{}", url);
+    }
+    
+    
+    /**
+     * 设置标题通用方法
+     */
+    public void setTitle(ModelMap map,TitleVo titleVo){
+    	//标题
+    	map.put("title",titleVo.getTitle());
+    	map.put("parenttitle",titleVo.getParenttitle());
+		//是否打开欢迎语
+    	map.put("isMsg",titleVo.isMsg());
+		//欢迎语
+    	map.put("msgHTML",titleVo.getMsgHtml());
+		//小控件
+    	map.put("isControl",titleVo.isControl());
+		map.put("isribbon", titleVo.isIsribbon());
+    }
+
+   
+}

+ 34 - 0
web/health/src/main/java/com/gyee/frame/common/base/BaseService.java

@@ -0,0 +1,34 @@
+package com.gyee.frame.common.base;
+
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+/**
+ * 抽象类BaseService
+* @ClassName: BaseService
+* @Description: Service实现这个
+* @author gyee
+* @date 2018年6月3日
+*
+ */
+public interface BaseService<T,T2> {
+	
+    int deleteByPrimaryKey(String id);
+
+    int insertSelective(T record);
+
+    T selectByPrimaryKey(String id);
+   
+    int updateByPrimaryKeySelective(T record);
+    
+    int updateByExampleSelective(@Param("record") T record, @Param("example") T2 example);
+
+    int updateByExample(@Param("record") T record, @Param("example") T2 example);
+    
+    List<T> selectByExample(T2 example);
+
+    long countByExample(T2 example);
+
+    int deleteByExample(T2 example);
+
+}

+ 268 - 0
web/health/src/main/java/com/gyee/frame/common/base/PageInfo.java

@@ -0,0 +1,268 @@
+package com.gyee.frame.common.base;
+
+import java.io.Serializable;
+import java.util.List;
+
+import com.github.pagehelper.Page;
+
+@SuppressWarnings({"rawtypes", "unchecked"})
+public class PageInfo<T> implements Serializable {
+    private static final long serialVersionUID = 1L;
+    //当前页
+    private int pageNum;
+    //每页的数量
+    private int pageSize;
+    //当前页的数量
+    private int size;
+    //由于startRow和endRow不常用,这里说个具体的用法
+    //可以在页面中"显示startRow到endRow 共size条数据"
+
+    //当前页面第一个元素在数据库中的行号
+    private int startRow;
+    //当前页面最后一个元素在数据库中的行号
+    private int endRow;
+    //总记录数
+    private long total;
+    //总页数
+    private int pages;
+    //结果集
+    private List<T> list;
+
+    //第一页
+    private int firstPage;
+    //前一页
+    private int prePage;
+    //下一页
+    private int nextPage;
+    //最后一页
+    private int lastPage;
+
+    //是否为第一页
+    private boolean isFirstPage = false;
+    //是否为最后一页
+    private boolean isLastPage = false;
+    //是否有前一页
+    private boolean hasPreviousPage = false;
+    //是否有下一页
+    private boolean hasNextPage = false;
+    //导航页码数
+    private int navigatePages;
+    //所有导航页号
+    private int[] navigatepageNums;
+
+    /**
+     * 包装Page对象
+     *
+     * @param list
+     */
+    public PageInfo(List<T> list) {
+        this(list, 8);
+    }
+
+    /**
+     * 包装Page对象
+     *
+     * @param list          page结果
+     * @param navigatePages 页码数量
+     */
+    public PageInfo(List<T> list, int navigatePages) {
+        if (list instanceof Page) {
+            Page page = (Page) list;
+            this.pageNum = page.getPageNum();
+            this.pageSize = page.getPageSize();
+
+            this.total = page.getTotal();
+            this.pages = page.getPages();
+            this.list = page;
+            this.size = page.size();
+            //由于结果是>startRow的,所以实际的需要+1
+            if (this.size == 0) {
+                this.startRow = 0;
+                this.endRow = 0;
+            } else {
+                this.startRow = page.getStartRow() + 1;
+                //计算实际的endRow(最后一页的时候特殊)
+                this.endRow = this.startRow - 1 + this.size;
+            }
+            this.navigatePages = navigatePages;
+            //计算导航页
+            calcNavigatepageNums();
+            //计算前后页,第一页,最后一页
+            calcPage();
+            //判断页面边界
+            judgePageBoudary();
+        }
+    }
+
+    /**
+     * 计算导航页
+     */
+    private void calcNavigatepageNums() {
+        //当总页数小于或等于导航页码数时
+        if (pages <= navigatePages) {
+            navigatepageNums = new int[pages];
+            for (int i = 0; i < pages; i++) {
+                navigatepageNums[i] = i + 1;
+            }
+        } else { //当总页数大于导航页码数时
+            navigatepageNums = new int[navigatePages];
+            int startNum = pageNum - navigatePages / 2;
+            int endNum = pageNum + navigatePages / 2;
+
+            if (startNum < 1) {
+                startNum = 1;
+                //(最前navigatePages页
+                for (int i = 0; i < navigatePages; i++) {
+                    navigatepageNums[i] = startNum++;
+                }
+            } else if (endNum > pages) {
+                endNum = pages;
+                //最后navigatePages页
+                for (int i = navigatePages - 1; i >= 0; i--) {
+                    navigatepageNums[i] = endNum--;
+                }
+            } else {
+                //所有中间页
+                for (int i = 0; i < navigatePages; i++) {
+                    navigatepageNums[i] = startNum++;
+                }
+            }
+        }
+    }
+
+    /**
+     * 计算前后页,第一页,最后一页
+     */
+    private void calcPage() {
+        if (navigatepageNums != null && navigatepageNums.length > 0) {
+            firstPage = navigatepageNums[0];
+            lastPage = navigatepageNums[navigatepageNums.length - 1];
+            if (pageNum > 1) {
+                prePage = pageNum - 1;
+            }
+            if (pageNum < pages) {
+                nextPage = pageNum + 1;
+            }
+        }
+    }
+
+    /**
+     * 判定页面边界
+     */
+    private void judgePageBoudary() {
+        isFirstPage = pageNum == 1;
+        isLastPage = pageNum == pages;
+        hasPreviousPage = pageNum > 1;
+        hasNextPage = pageNum < pages;
+    }
+
+    public void setPageNum(int pageNum) {
+        this.pageNum = pageNum;
+    }
+
+    public int getPageNum() {
+        return pageNum;
+    }
+
+    public int getPageSize() {
+        return pageSize;
+    }
+
+    public int getSize() {
+        return size;
+    }
+
+    public int getStartRow() {
+        return startRow;
+    }
+
+    public int getEndRow() {
+        return endRow;
+    }
+
+    public long getTotal() {
+        return total;
+    }
+
+    public int getPages() {
+        return pages;
+    }
+
+    public List<T> getList() {
+        return list;
+    }
+
+    public int getFirstPage() {
+        return firstPage;
+    }
+
+    public int getPrePage() {
+        return prePage;
+    }
+
+    public int getNextPage() {
+        return nextPage;
+    }
+
+    public int getLastPage() {
+        return lastPage;
+    }
+
+    public boolean isIsFirstPage() {
+        return isFirstPage;
+    }
+
+    public boolean isIsLastPage() {
+        return isLastPage;
+    }
+
+    public boolean isHasPreviousPage() {
+        return hasPreviousPage;
+    }
+
+    public boolean isHasNextPage() {
+        return hasNextPage;
+    }
+
+    public int getNavigatePages() {
+        return navigatePages;
+    }
+
+    public int[] getNavigatepageNums() {
+        return navigatepageNums;
+    }
+
+    @Override
+    public String toString() {
+        final StringBuffer sb = new StringBuffer("PageInfo{");
+        sb.append("pageNum=").append(pageNum);
+        sb.append(", pageSize=").append(pageSize);
+        sb.append(", size=").append(size);
+        sb.append(", startRow=").append(startRow);
+        sb.append(", endRow=").append(endRow);
+        sb.append(", total=").append(total);
+        sb.append(", pages=").append(pages);
+        sb.append(", list=").append(list);
+        sb.append(", firstPage=").append(firstPage);
+        sb.append(", prePage=").append(prePage);
+        sb.append(", nextPage=").append(nextPage);
+        sb.append(", lastPage=").append(lastPage);
+        sb.append(", isFirstPage=").append(isFirstPage);
+        sb.append(", isLastPage=").append(isLastPage);
+        sb.append(", hasPreviousPage=").append(hasPreviousPage);
+        sb.append(", hasNextPage=").append(hasNextPage);
+        sb.append(", navigatePages=").append(navigatePages);
+        sb.append(", navigatepageNums=");
+        if (navigatepageNums == null){
+        	sb.append("null");
+        }else {
+            sb.append('[');
+            for (int i = 0; i < navigatepageNums.length; ++i){
+            	sb.append(i == 0 ? "" : ", ").append(navigatepageNums[i]);
+            }
+            sb.append(']');
+        }
+        sb.append('}');
+        return sb.toString();
+    }
+}

+ 419 - 0
web/health/src/main/java/com/gyee/frame/common/cache/AppRedisCacheManager.java

@@ -0,0 +1,419 @@
+package com.gyee.frame.common.cache;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.util.CollectionUtils;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * @description: 移动端Redis缓存实现类
+ * @author: YuXD
+ * @create: 2021-01-05 10:40
+ **/
+@Getter
+@AllArgsConstructor
+public final class AppRedisCacheManager implements IGlobalCache {
+
+    private RedisTemplate<String, Object> redisTemplate;
+
+    @Override
+    public boolean expire(String key, long time) {
+        try {
+            if (time > 0) {
+                redisTemplate.expire(key, time, TimeUnit.SECONDS);
+            }
+
+            return true;
+        } catch (Exception e) {
+            e.printStackTrace();
+            return false;
+        }
+    }
+
+    @Override
+    public long getExpire(String key) {
+        return redisTemplate.getExpire(key, TimeUnit.SECONDS);
+    }
+
+    @Override
+    public boolean hasKey(String key) {
+        try {
+            return redisTemplate.hasKey(key);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return false;
+        }
+    }
+
+    @Override
+    @SuppressWarnings("unchecked")
+    public void del(String... key) {
+        if (key != null && key.length > 0) {
+            if (key.length == 1) {
+                redisTemplate.delete(key[0]);
+            } else {
+                redisTemplate.delete(CollectionUtils.arrayToList(key));
+            }
+        }
+    }
+
+    @Override
+    public Object get(String key) {
+        return key == null ? null : redisTemplate.opsForValue().get(key);
+    }
+
+    @Override
+    public boolean set(String key, Object value) {
+        try {
+            redisTemplate.opsForValue().set(key, value);
+            return true;
+        } catch (Exception e) {
+            e.printStackTrace();
+            return false;
+        }
+    }
+
+    @Override
+    public boolean set(String key, Object value, long time) {
+        try {
+            if (time > 0) {
+                redisTemplate.opsForValue().set(key, value, time, TimeUnit.SECONDS);
+            } else {
+                set(key, value);
+            }
+            return true;
+        } catch (Exception e) {
+            e.printStackTrace();
+            return false;
+        }
+    }
+
+    @Override
+    public long incr(String key, long delta) {
+        if (delta < 0) {
+            throw new RuntimeException("递增因子必须大于0");
+        }
+        return redisTemplate.opsForValue().increment(key, delta);
+    }
+
+    @Override
+    public long decr(String key, long delta) {
+        if (delta < 0) {
+            throw new RuntimeException("递减因子必须大于0");
+        }
+        return redisTemplate.opsForValue().increment(key, -delta);
+    }
+
+    @Override
+    public Object hget(String key, String item) {
+        return redisTemplate.opsForHash().get(key, item);
+    }
+
+    @Override
+    public Map<Object, Object> hmget(String key) {
+        return redisTemplate.opsForHash().entries(key);
+    }
+
+    @Override
+    public boolean hmset(String key, Map<String, Object> map) {
+        try {
+            redisTemplate.opsForHash().putAll(key, map);
+            return true;
+        } catch (Exception e) {
+            e.printStackTrace();
+            return false;
+        }
+    }
+
+    @Override
+    public boolean hmset(String key, Map<String, Object> map, long time) {
+        try {
+            redisTemplate.opsForHash().putAll(key, map);
+            if (time > 0) {
+                expire(key, time);
+            }
+            return true;
+        } catch (Exception e) {
+            e.printStackTrace();
+            return false;
+        }
+    }
+
+    @Override
+    public boolean hset(String key, String item, Object value) {
+        try {
+            redisTemplate.opsForHash().put(key, item, value);
+            return true;
+        } catch (Exception e) {
+            e.printStackTrace();
+            return false;
+        }
+    }
+
+    @Override
+    public boolean hset(String key, String item, Object value, long time) {
+        try {
+            redisTemplate.opsForHash().put(key, item, value);
+            if (time > 0) {
+                expire(key, time);
+            }
+            return true;
+        } catch (Exception e) {
+            e.printStackTrace();
+            return false;
+        }
+    }
+
+    @Override
+    public void hdel(String key, Object... item) {
+        redisTemplate.opsForHash().delete(key, item);
+    }
+
+    @Override
+    public boolean hHasKey(String key, String item) {
+        return redisTemplate.opsForHash().hasKey(key, item);
+    }
+
+    @Override
+    public double hincr(String key, String item, double by) {
+        return redisTemplate.opsForHash().increment(key, item, by);
+    }
+
+    @Override
+    public double hdecr(String key, String item, double by) {
+        return redisTemplate.opsForHash().increment(key, item, -by);
+    }
+
+    @Override
+    public Set<Object> sGet(String key) {
+        try {
+            return redisTemplate.opsForSet().members(key);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return null;
+        }
+    }
+
+    @Override
+    public boolean sHasKey(String key, Object value) {
+        try {
+            return redisTemplate.opsForSet().isMember(key, value);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return false;
+        }
+    }
+
+    @Override
+    public long sSet(String key, Object... values) {
+        try {
+            return redisTemplate.opsForSet().add(key, values);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return 0;
+        }
+    }
+
+    @Override
+    public long sSetAndTime(String key, long time, Object... values) {
+        try {
+            Long count = redisTemplate.opsForSet().add(key, values);
+            if (time > 0) {
+                expire(key, time);
+            }
+            return count;
+        } catch (Exception e) {
+            e.printStackTrace();
+            return 0;
+        }
+    }
+
+    @Override
+    public long sGetSetSize(String key) {
+        try {
+            return redisTemplate.opsForSet().size(key);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return 0;
+        }
+    }
+
+    @Override
+    public long setRemove(String key, Object... values) {
+        try {
+            Long count = redisTemplate.opsForSet().remove(key, values);
+            return count;
+        } catch (Exception e) {
+            e.printStackTrace();
+            return 0;
+        }
+    }
+
+    @Override
+    public List<Object> lGet(String key, long start, long end) {
+        try {
+            return redisTemplate.opsForList().range(key, start, end);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return null;
+        }
+    }
+
+    @Override
+    public long lGetListSize(String key) {
+        try {
+            return redisTemplate.opsForList().size(key);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return 0;
+        }
+    }
+
+    @Override
+    public Object lGetIndex(String key, long index) {
+        try {
+            return redisTemplate.opsForList().index(key, index);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return null;
+        }
+    }
+
+    @Override
+    public boolean lSetAll(String key, List<Object> value) {
+        try {
+            redisTemplate.opsForList().leftPushAll(key, value);
+            return true;
+        } catch (Exception e) {
+            e.printStackTrace();
+            return false;
+        }
+    }
+
+    @Override
+    public boolean lSet(String key, Object value) {
+        try {
+            redisTemplate.opsForList().leftPushIfPresent(key, value);
+            return true;
+        } catch (Exception e) {
+            e.printStackTrace();
+            return false;
+        }
+    }
+
+    @Override
+    public boolean lSet(String key, Object value, long time) {
+        try {
+            redisTemplate.opsForList().leftPush(key, value);
+            if (time > 0) {
+                expire(key, time);
+            }
+            return true;
+        } catch (Exception e) {
+            e.printStackTrace();
+            return false;
+        }
+
+    }
+
+    @Override
+    public boolean lSetAll(String key, List<Object> value, long time) {
+        try {
+            redisTemplate.opsForList().leftPushAll(key, value);
+            if (time > 0)
+                expire(key, time);
+            return true;
+        } catch (Exception e) {
+            e.printStackTrace();
+            return false;
+        }
+    }
+
+    @Override
+    public boolean rSet(String key, Object value) {
+        try {
+            redisTemplate.opsForList().rightPush(key, value);
+            return true;
+        } catch (Exception e) {
+            e.printStackTrace();
+            return false;
+        }
+    }
+
+    @Override
+    public boolean rSet(String key, Object value, long time) {
+        try {
+            redisTemplate.opsForList().rightPush(key, value);
+            if (time > 0) {
+                expire(key, time);
+            }
+            return true;
+        } catch (Exception e) {
+            e.printStackTrace();
+            return false;
+        }
+
+    }
+
+    @Override
+    public boolean rSetAll(String key, List<Object> value) {
+        try {
+            redisTemplate.opsForList().rightPushAll(key, value);
+            return true;
+        } catch (Exception e) {
+            e.printStackTrace();
+            return false;
+        }
+
+    }
+
+    @Override
+    public boolean rSetAll(String key, List<Object> value, long time) {
+        try {
+            redisTemplate.opsForList().rightPushAll(key, value);
+            if (time > 0)
+                expire(key, time);
+            return true;
+        } catch (Exception e) {
+            e.printStackTrace();
+            return false;
+        }
+    }
+
+    @Override
+    public boolean lUpdateIndex(String key, long index, Object value) {
+        try {
+            redisTemplate.opsForList().set(key, index, value);
+            return true;
+        } catch (Exception e) {
+            e.printStackTrace();
+            return false;
+        }
+    }
+
+    @Override
+    public long lRemove(String key, long count, Object value) {
+        try {
+            Long remove = redisTemplate.opsForList().remove(key, count, value);
+            return remove;
+        } catch (Exception e) {
+            e.printStackTrace();
+            return 0;
+        }
+    }
+
+    @Override
+    public void rangeRemove(String key, Long stard, Long end) {
+        try {
+            redisTemplate.opsForList().trim(key, stard, end);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+}

+ 46 - 0
web/health/src/main/java/com/gyee/frame/common/cache/ApplicationContextHolder.java

@@ -0,0 +1,46 @@
+package com.gyee.frame.common.cache;
+import org.springframework.beans.BeansException;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.ApplicationContextAware;
+import org.springframework.stereotype.Component;
+
+@Component
+public class ApplicationContextHolder implements ApplicationContextAware {
+    private static ApplicationContext applicationContext;
+
+    @Override
+    public void setApplicationContext(ApplicationContext ctx) throws BeansException {
+        applicationContext = ctx;
+    }
+
+    /**
+     * Get application context from everywhere
+     *
+     * @return
+     */
+    public static ApplicationContext getApplicationContext() {
+        return applicationContext;
+    }
+
+    /**
+     * Get bean by class
+     *
+     * @param clazz
+     * @param <T>
+     * @return
+     */
+    public static <T> T getBean(Class<T> clazz) {
+        return applicationContext.getBean(clazz);
+    }
+
+    /**
+     * Get bean by class name
+     *
+     * @param name
+     * @param <T>
+     * @return
+     */
+    public static <T> T getBean(String name) {
+        return (T) applicationContext.getBean(name);
+    }
+}

+ 383 - 0
web/health/src/main/java/com/gyee/frame/common/cache/IGlobalCache.java

@@ -0,0 +1,383 @@
+package com.gyee.frame.common.cache;
+
+import org.springframework.data.redis.core.RedisTemplate;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * 系统全局Cache接口,具体缓存方式需要实现该接口
+ *
+ * @author YuXD
+ * @date 2021-01-05 10:38
+ * @since v1.0
+ */
+public interface IGlobalCache {
+
+    /**
+     * 指定缓存失效时间
+     *
+     * @param key  键
+     * @param time 时间(秒)
+     * @return
+     */
+    boolean expire(String key, long time);
+
+    /**
+     * @param key 键 不能为null
+     * @return 时间(秒) 返回0代表为永久有效
+     */
+    long getExpire(String key);
+
+    /**
+     * 判断key是否存在
+     *
+     * @param key 键
+     * @return true 存在 false不存在
+     */
+    boolean hasKey(String key);
+
+    /**
+     * 删除缓存
+     *
+     * @param key 可以传一个值 或多个
+     */
+    void del(String... key);
+// ============================String=============================
+
+    /**
+     * 普通缓存获取
+     *
+     * @param key 键
+     * @return 值
+     */
+    Object get(String key);
+
+    /**
+     * 普通缓存放入
+     *
+     * @param key   键
+     * @param value 值
+     * @return true成功 false失败
+     */
+    boolean set(String key, Object value);
+
+    /**
+     * 普通缓存放入并设置时间
+     *
+     * @param key   键
+     * @param value 值
+     * @param time  时间(秒) time要大于0 如果time小于等于0 将设置无限期
+     * @return true成功 false 失败
+     */
+    boolean set(String key, Object value, long time);
+
+    /**
+     * 递增
+     *
+     * @param key   键
+     * @param delta 要增加几(大于0)
+     * @return
+     */
+    long incr(String key, long delta);
+
+    /**
+     * 递减
+     *
+     * @param key   键
+     * @param delta 要减少几(小于0)
+     * @return
+     */
+    long decr(String key, long delta);
+
+    /**
+     * HashGet
+     *
+     * @param key  键 不能为null
+     * @param item 项 不能为null
+     * @return 值
+     */
+    Object hget(String key, String item);
+
+    /**
+     * 获取hashKey对应的所有键值
+     *
+     * @param key 键
+     * @return 对应的多个键值
+     */
+    Map<Object, Object> hmget(String key);
+
+    /**
+     * HashSet
+     *
+     * @param key 键
+     * @param map 对应多个键值
+     * @return true 成功 false 失败
+     */
+    boolean hmset(String key, Map<String, Object> map);
+
+    /**
+     * HashSet 并设置时间
+     *
+     * @param key  键
+     * @param map  对应多个键值
+     * @param time 时间(秒)
+     * @return true成功 false失败
+     */
+    boolean hmset(String key, Map<String, Object> map, long time);
+
+    /**
+     * 向一张hash表中放入数据,如果不存在将创建
+     *
+     * @param key   键
+     * @param item  项
+     * @param value 值
+     * @return true 成功 false失败
+     */
+    boolean hset(String key, String item, Object value);
+
+    /**
+     * 向一张hash表中放入数据,如果不存在将创建
+     *
+     * @param key   键
+     * @param item  项
+     * @param value 值
+     * @param time  时间(秒) 注意:如果已存在的hash表有时间,这里将会替换原有的时间
+     * @return true 成功 false失败
+     */
+    boolean hset(String key, String item, Object value, long time);
+
+    /**
+     * 删除hash表中的值
+     *
+     * @param key  键 不能为null
+     * @param item 项 可以使多个 不能为null
+     */
+    void hdel(String key, Object... item);
+
+    /**
+     * 判断hash表中是否有该项的值
+     *
+     * @param key  键 不能为null
+     * @param item 项 不能为null
+     * @return true 存在 false不存在
+     */
+    boolean hHasKey(String key, String item);
+
+    /**
+     * hash递增 如果不存在,就会创建一个 并把新增后的值返回
+     *
+     * @param key  键
+     * @param item 项
+     * @param by   要增加几(大于0)
+     * @return
+     */
+    double hincr(String key, String item, double by);
+
+    /**
+     * hash递减
+     *
+     * @param key  键
+     * @param item 项
+     * @param by   要减少记(小于0)
+     * @return
+     */
+    double hdecr(String key, String item, double by);
+
+    /**
+     * 根据key获取Set中的所有值
+     *
+     * @param key 键
+     * @return
+     */
+    Set<Object> sGet(String key);
+
+    /**
+     * 根据value从一个set中查询,是否存在
+     *
+     * @param key   键
+     * @param value 值
+     * @return true 存在 false不存在
+     */
+    boolean sHasKey(String key, Object value);
+
+    /**
+     * 将数据放入set缓存
+     *
+     * @param key    键
+     * @param values 值 可以是多个
+     * @return 成功个数
+     */
+    long sSet(String key, Object... values);
+
+    /**
+     * 将set数据放入缓存
+     *
+     * @param key    键
+     * @param time   时间(秒)
+     * @param values 值 可以是多个
+     * @return 成功个数
+     */
+    long sSetAndTime(String key, long time, Object... values);
+
+
+    /**
+     * 获取set缓存的长度
+     *
+     * @param key 键
+     * @return
+     */
+    long sGetSetSize(String key);
+
+    /**
+     * 移除值为value的
+     *
+     * @param key    键
+     * @param values 值 可以是多个
+     * @return 移除的个数
+     */
+    long setRemove(String key, Object... values);
+
+    /**
+     * 获取list缓存的内容
+     *
+     * @param key   键
+     * @param start 开始
+     * @param end   结束 0 到 -1代表所有值
+     * @return
+     */
+    List<Object> lGet(String key, long start, long end);
+
+    /**
+     * 获取list缓存的长度
+     *
+     * @param key 键
+     * @return
+     */
+    long lGetListSize(String key);
+
+    /**
+     * 通过索引 获取list中的值
+     *
+     * @param key   键
+     * @param index 索引 index>=0时, 0 表头,1 第二个元素,依次类推;index<0时,-1,表尾,-2倒数第二个元素,依次类推
+     * @return
+     */
+    Object lGetIndex(String key, long index);
+
+    /**
+     * 将list放入缓存
+     *
+     * @param key   键
+     * @param value 值
+     * @return
+     */
+    boolean lSet(String key, Object value);
+
+    /**
+     * 将list放入缓存
+     *
+     * @param key   键
+     * @param value 值
+     * @return
+     */
+    boolean lSet(String key, Object value, long time);
+
+    /**
+     * 将list放入缓存
+     *
+     * @param key   键
+     * @param value 值
+     * @return
+     */
+    boolean lSetAll(String key, List<Object> value);
+
+
+    /**
+     * 将list放入缓存
+     *
+     * @param key   键
+     * @param value 值
+     * @param time  时间(秒)
+     * @return
+     */
+    boolean lSetAll(String key, List<Object> value, long time);
+
+    /**
+     * 将list放入缓存
+     *
+     * @param key   键
+     * @param value 值
+     * @return
+     */
+
+    boolean rSet(String key, Object value);
+
+    /**
+     * 将list放入缓存
+     *
+     * @param key   键
+     * @param value 值
+     * @param time  时间(秒)
+     * @return
+     */
+
+    boolean rSet(String key, Object value, long time);
+
+    /**
+     * 将list放入缓存
+     *
+     * @param key   键
+     * @param value 值
+     * @return
+     */
+    boolean rSetAll(String key, List<Object> value);
+
+    /**
+     * 将list放入缓存
+     *
+     * @param key   键
+     * @param value 值
+     * @param time  时间(秒)
+     * @return
+     */
+    boolean rSetAll(String key, List<Object> value, long time);
+
+    /**
+     * 根据索引修改list中的某条数据
+     *
+     * @param key   键
+     * @param index 索引
+     * @param value 值
+     * @return
+     */
+    boolean lUpdateIndex(String key, long index, Object value);
+
+    /**
+     * 移除N个值为value
+     *
+     * @param key   键
+     * @param count 移除多少个
+     * @param value 值
+     * @return 移除的个数
+     */
+    long lRemove(String key, long count, Object value);
+
+    /**
+     * 从redis集合中移除[start,end]之间的元素
+     *
+     * @param key
+     * @param stard
+     * @param end
+     * @return
+     */
+    void rangeRemove(String key, Long stard, Long end);
+
+    /**
+     * 返回当前redisTemplate
+     *
+     * @return
+     */
+    RedisTemplate getRedisTemplate();
+}

+ 72 - 0
web/health/src/main/java/com/gyee/frame/common/cache/MybatisRedisCache.java

@@ -0,0 +1,72 @@
+//package com.gyee.frame.common.cache;
+//
+//import org.slf4j.Logger;
+//import org.slf4j.LoggerFactory;
+//import org.springframework.data.redis.core.RedisTemplate;
+//import org.apache.ibatis.cache.Cache;
+//import java.util.concurrent.locks.ReadWriteLock;
+//import java.util.concurrent.locks.ReentrantReadWriteLock;
+//
+//public class MybatisRedisCache implements Cache {
+//    private static final Logger log = LoggerFactory.getLogger(MybatisRedisCache.class);
+//    private String id;
+//    private final ReadWriteLock readWriteLock = new ReentrantReadWriteLock();
+//    //private static final long EXPIRE_TIME_IN_MINUTES = 30; // redis过期时间
+//
+//
+//    public MybatisRedisCache(String id) {
+//        this.id = id;
+//    }
+//
+//    private RedisTemplate<Object, Object> getRedisTemplate(){
+//        return ApplicationContextHolder.getBean("redisTemplate");
+//    }
+//
+//    @Override
+//    public String getId() {
+//        return id;
+//    }
+//
+//    @Override
+//    public void putObject(Object key, Object value) {
+//        RedisTemplate redisTemplate = getRedisTemplate();
+//        redisTemplate.boundHashOps(getId()).put(key, value);
+//        log.info("[结果放入到缓存中: " + key + "=" + value+" ]");
+//
+//    }
+//
+//    @Override
+//    public Object getObject(Object key) {
+//        RedisTemplate redisTemplate = getRedisTemplate();
+//        Object value = redisTemplate.boundHashOps(getId()).get(key);
+//        log.info("[从缓存中获取了: " + key + "=" + value+" ]");
+//        return value;
+//    }
+//
+//    @Override
+//    public Object removeObject(Object key) {
+//        RedisTemplate redisTemplate = getRedisTemplate();
+//        Object value = redisTemplate.boundHashOps(getId()).delete(key);
+//        log.info("[从缓存删除了: " + key + "=" + value+" ]");
+//        return value;
+//    }
+//
+//    @Override
+//    public void clear() {
+//        RedisTemplate redisTemplate = getRedisTemplate();
+//        redisTemplate.delete(getId());
+//        log.info("清空缓存!!!");
+//    }
+//
+//    @Override
+//    public int getSize() {
+//        RedisTemplate redisTemplate = getRedisTemplate();
+//        Long size = redisTemplate.boundHashOps(getId()).size();
+//        return size == null ? 0 : size.intValue();
+//    }
+//
+//    @Override
+//    public ReadWriteLock getReadWriteLock() {
+//        return readWriteLock;
+//    }
+//}

+ 105 - 0
web/health/src/main/java/com/gyee/frame/common/cache/RedisConfig.java

@@ -0,0 +1,105 @@
+package com.gyee.frame.common.cache;
+
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.cache.annotation.EnableCaching;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Primary;
+import org.springframework.data.redis.connection.RedisConnectionFactory;
+import org.springframework.data.redis.connection.RedisStandaloneConfiguration;
+import org.springframework.data.redis.connection.jedis.JedisClientConfiguration;
+import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
+import org.springframework.data.redis.serializer.StringRedisSerializer;
+import redis.clients.jedis.JedisPool;
+import redis.clients.jedis.JedisPoolConfig;
+
+@EnableCaching
+@Configuration
+public class RedisConfig {
+
+    @Value("${spring.redis.host}")
+    private String host;
+    @Value("${spring.redis.database}")
+    private Integer database;
+    @Value("${spring.redis.port}")
+    private Integer port;
+    @Value("${spring.redis.password}")
+    private String pwd;
+
+    @Value("${spring.redis.pool.maxTotal}")
+    private Integer maxTotal;
+    @Value("${spring.redis.pool.maxIdle}")
+    private Integer maxIdle;
+    @Value("${spring.redis.pool.minIdle}")
+    private Integer minIdle;
+    @Value("${spring.redis.pool.maxwait}")
+    private Integer maxwait;
+
+    @Primary
+    @Bean(name = "jedisPoolConfig")
+    @ConfigurationProperties(prefix = "spring.redis.pool")
+    public JedisPoolConfig jedisPoolConfig() {
+        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
+        jedisPoolConfig.setMaxTotal(maxTotal);
+        jedisPoolConfig.setMaxIdle(maxIdle);
+        jedisPoolConfig.setMinIdle(minIdle);
+        jedisPoolConfig.setMaxWaitMillis(maxwait);
+        return jedisPoolConfig;
+    }
+
+    @Primary
+    @Bean(name = "jedisPool")
+    public JedisPool redisPoolFactory(JedisPoolConfig jedisPoolConfig){
+
+        JedisPool jedisPool = new JedisPool(jedisPoolConfig,host,port,maxwait,pwd);
+
+        return  jedisPool;
+    }
+
+
+    @Bean
+    public RedisConnectionFactory redisConnectionFactory(JedisPoolConfig jedisPoolConfig) {
+        RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration();
+        redisStandaloneConfiguration.setHostName(host);
+        redisStandaloneConfiguration.setDatabase(database);
+        redisStandaloneConfiguration.setPassword(pwd);
+        redisStandaloneConfiguration.setPort(port);
+        redisStandaloneConfiguration.setDatabase(database);
+
+        JedisClientConfiguration.JedisPoolingClientConfigurationBuilder jpcb = (JedisClientConfiguration.JedisPoolingClientConfigurationBuilder) JedisClientConfiguration.builder();
+        jpcb.poolConfig(jedisPoolConfig);
+        JedisClientConfiguration jedisClientConfiguration = jpcb.build();
+        return new JedisConnectionFactory(redisStandaloneConfiguration, jedisClientConfiguration);
+    }
+
+    /**
+     * 配置redisTemplate针对不同key和value场景下不同序列化的方式
+     *
+     * @param factory Redis连接工厂
+     * @return
+     */
+    @Primary
+    @Bean(name = "redisTemplate")
+    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
+        RedisTemplate<String, Object> template = new RedisTemplate<>();
+        template.setConnectionFactory(factory);
+        StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
+        template.setKeySerializer(stringRedisSerializer);
+        template.setHashKeySerializer(stringRedisSerializer);
+        Jackson2JsonRedisSerializer redisSerializer = new Jackson2JsonRedisSerializer(Object.class);
+        template.setValueSerializer(redisSerializer);
+        template.setHashValueSerializer(redisSerializer);
+        template.afterPropertiesSet();
+
+        return template;
+    }
+
+    @Bean(name = "globalCache")
+    IGlobalCache cache(RedisTemplate redisTemplate) {
+        return new AppRedisCacheManager(redisTemplate);
+    }
+
+}

+ 51 - 0
web/health/src/main/java/com/gyee/frame/common/cache/RedisService.java

@@ -0,0 +1,51 @@
+package com.gyee.frame.common.cache;
+
+public interface RedisService {
+
+    /**
+     * set存数据
+     * @param key
+     * @param value
+     * @return
+     */
+    boolean set(String key, String value);
+
+
+
+    /**
+     * get获取数据
+     * @param key
+     * @return
+     */
+    String get(String key);
+
+//    void getList(String key,int start,int end);
+
+    /**
+     * 设置有效天数
+     * @param key
+     * @param expire
+     * @return
+     */
+    boolean expire(String key, long expire);
+
+    /**
+     * 移除数据
+     * @param key
+     * @return
+     */
+    boolean remove(String key);
+
+
+    /**
+     * 插入对象
+     */
+    void setObject(Object o);
+
+
+    boolean hasKey(String key);
+
+
+    void select(Integer dbIndex);
+
+}

+ 125 - 0
web/health/src/main/java/com/gyee/frame/common/cache/RedisServiceImpl.java

@@ -0,0 +1,125 @@
+package com.gyee.frame.common.cache;
+
+import org.springframework.dao.DataAccessException;
+import org.springframework.data.redis.connection.RedisConnection;
+import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
+import org.springframework.data.redis.core.RedisCallback;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.data.redis.serializer.RedisSerializer;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.lang.reflect.Field;
+import java.util.concurrent.TimeUnit;
+
+@Service("redisService")
+public class RedisServiceImpl implements RedisService {
+
+    @Resource
+    private RedisTemplate<String, ?> redisTemplate;
+
+    @Override
+    public boolean set(final String key, final String value) {;
+        boolean result = redisTemplate.execute(new RedisCallback<Boolean>() {
+            @Override
+            public Boolean doInRedis(RedisConnection connection) throws DataAccessException {
+                RedisSerializer<String> serializer = redisTemplate.getStringSerializer();
+                connection.set(serializer.serialize(key), serializer.serialize(value));
+                return true;
+            }
+        });
+        return result;
+    }
+
+
+    @Override
+    public String get(final String key) {
+        String result = redisTemplate.execute(new RedisCallback<String>() {
+            @Override
+            public String doInRedis(RedisConnection connection) throws DataAccessException {
+                RedisSerializer<String> serializer = redisTemplate.getStringSerializer();
+                byte[] value = connection.get(serializer.serialize(key));
+                return serializer.deserialize(value);
+            }
+        });
+        return result;
+    }
+
+
+
+    @Override
+    public boolean expire(final String key, long expire) {
+        return redisTemplate.expire(key, expire, TimeUnit.SECONDS);
+    }
+
+    @Override
+    public boolean remove(final String key) {
+        boolean result = redisTemplate.execute(new RedisCallback<Boolean>() {
+            @Override
+            public Boolean doInRedis(RedisConnection connection) throws DataAccessException {
+                RedisSerializer<String> serializer = redisTemplate.getStringSerializer();
+                connection.del(key.getBytes());
+                return true;
+            }
+        });
+        return result;
+    }
+
+    @Override
+    public boolean hasKey(final String key) {
+        try {
+            return redisTemplate.hasKey(key);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return false;
+        }
+    }
+
+    @Override
+    public void setObject(Object obj) {
+        Field[] fields = obj.getClass().getDeclaredFields();
+        for(int i = 0 , len = fields.length; i < len; i++) {
+            // 对于每个属性,获取属性名
+            String varName = fields[i].getName();
+            try {
+                // 获取原来的访问控制权限
+                boolean accessFlag = fields[i].isAccessible();
+                // 修改访问控制权限
+                fields[i].setAccessible(true);
+                // 获取在对象f中属性fields[i]对应的对象中的变量
+                Object o;
+                try {
+                    o = fields[i].get(obj);
+                    if (o!=null){
+                        set(varName, String.valueOf(o));
+                    }else {
+                        set(varName,"");
+                    }
+
+                    //System.err.println("传入的对象中包含一个如下的变量:" + varName + " = " + o);
+                } catch (IllegalAccessException e) {
+                    // TODO Auto-generated catch block
+                    e.printStackTrace();
+                }
+                // 恢复访问控制权限
+                fields[i].setAccessible(accessFlag);
+            } catch (IllegalArgumentException ex) {
+                ex.printStackTrace();
+            }
+        }
+
+    }
+
+    public void select(Integer dbIndex) {
+        if (dbIndex == null || dbIndex > 15 || dbIndex < 0) {
+            dbIndex = 0;
+        }
+        LettuceConnectionFactory jedisConnectionFactory = (LettuceConnectionFactory) redisTemplate
+                .getConnectionFactory();
+        jedisConnectionFactory.setDatabase(dbIndex);
+        redisTemplate.setConnectionFactory(jedisConnectionFactory);
+        jedisConnectionFactory.afterPropertiesSet();
+//        jedisConnectionFactory.resetConnection();
+
+    }
+}

+ 31 - 0
web/health/src/main/java/com/gyee/frame/common/cache/RedisUtils.java

@@ -0,0 +1,31 @@
+package com.gyee.frame.common.cache;
+
+import org.springframework.stereotype.Service;
+import redis.clients.jedis.Jedis;
+import redis.clients.jedis.JedisPool;
+
+import javax.annotation.Resource;
+@Service
+public class RedisUtils {
+
+    @Resource
+    private  JedisPool jedisPool;
+
+
+
+    public  String get(String key, int indexdb) {
+        Jedis jedis = null;
+        String value = null;
+
+        try {
+            jedis = jedisPool.getResource();//获取一个jedis实例
+            jedis.select(indexdb);
+            value = jedis.get(key);
+        } catch (Exception e) {
+        System.out.println(e.getMessage());
+        } finally {
+            jedis.close();
+        }
+        return value;
+    }
+}

+ 13 - 0
web/health/src/main/java/com/gyee/frame/common/conf/AjaxStatus.java

@@ -0,0 +1,13 @@
+package com.gyee.frame.common.conf;
+
+public enum  AjaxStatus {
+    success(200),
+    error(500),
+    logineroor(501),
+    loginexpire(502);
+
+    public int code;
+    AjaxStatus(int c) {
+        code = c;
+    }
+}

+ 25 - 0
web/health/src/main/java/com/gyee/frame/common/conf/ExportConfig.java

@@ -0,0 +1,25 @@
+package com.gyee.frame.common.conf;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 庚顿数据导出配置
+ */
+@Data
+@Component
+@ConfigurationProperties(prefix = "exportcode")
+public class ExportConfig {
+
+    private List<String> template1;
+
+    private Map<String, String> template2swdl;
+
+    private Map<String, String> template2swgl;
+
+    private Map<String, String> template2cft;
+}

+ 30 - 0
web/health/src/main/java/com/gyee/frame/common/conf/FileConfig.java

@@ -0,0 +1,30 @@
+package com.gyee.frame.common.conf;
+
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+/**
+ * 读取项目相关配置
+ * 
+ * @author gyee
+ */
+@Component
+@ConfigurationProperties(prefix = "spring.servlet.multipart")
+public class FileConfig
+{
+    /**单个文件大小*/
+    private static String maxFileSize;
+
+	public static String getMaxFileSize() {
+		maxFileSize=maxFileSize.replace("MB", "");
+		return maxFileSize;
+	}
+
+	public void setMaxFileSize(String maxFileSize) {
+		FileConfig.maxFileSize = maxFileSize;
+	}
+   
+	
+	
+	
+}

+ 149 - 0
web/health/src/main/java/com/gyee/frame/common/conf/GeneratorCodeConfig.java

@@ -0,0 +1,149 @@
+package com.gyee.frame.common.conf;
+
+
+import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.generator.AutoGenerator;
+import com.baomidou.mybatisplus.generator.config.*;
+import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
+import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
+
+import java.util.Scanner;
+
+/**
+ *@ClassName GeneratorCodeConfig
+ *@Description 自动生成mybatisplus的相关代码
+ *@Author 谢生杰
+ *@Date 2020/9/25 18:26
+ *@Version 1.0
+ **/
+public class GeneratorCodeConfig {
+    public static String scanner(String tip) {
+        Scanner scanner = new Scanner(System.in);
+        StringBuilder help = new StringBuilder();
+        help.append("请输入" + tip + ":");
+        System.out.println(help.toString());
+        if (scanner.hasNext()) {
+            String ipt = scanner.next();
+            if (StringUtils.isNotEmpty(ipt)) {
+                return ipt;
+            }
+        }
+        throw new MybatisPlusException("请输入正确的" + tip + "!");
+    }
+
+    public static void main(String[] args) {
+        // 代码生成器
+        AutoGenerator mpg = new AutoGenerator();
+
+        // 全局配置
+        GlobalConfig gc = new GlobalConfig();
+        String projectPath = System.getProperty("user.dir");
+        gc.setOutputDir(projectPath+"\\web\\health"+ "\\src\\main\\java");
+        gc.setAuthor("shilin");
+        gc.setOpen(false);
+        //实体属性 Swagger2 注解
+        gc.setSwagger2(false);
+        mpg.setGlobalConfig(gc);
+
+        // 数据源配置
+        DataSourceConfig dsc = new DataSourceConfig();
+        /*dsc.setUrl("jdbc:mysql://127.0.0.1:3306/test?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=true");
+        dsc.setDriverName("com.mysql.jdbc.Driver");
+        dsc.setUsername("root");
+        dsc.setPassword("root");
+        mpg.setDataSource(dsc);*/
+//        dsc.setDriverName("oracle.jdbc.driver.OracleDriver"); 注意大写
+//        dsc.setUsername("gdprod");
+//        dsc.setPassword("gd123");
+//        dsc.setUrl("jdbc:oracle:thin:@10.81.3.151:1521:gdsj");
+
+        dsc.setDriverName("org.postgresql.Driver");
+        dsc.setUsername("postgres");
+        dsc.setPassword("gd123");
+        dsc.setUrl("jdbc:postgresql://127.0.0.1:5432/IMS_NEM_JN");
+
+        mpg.setDataSource(dsc);
+
+
+
+        // 包配置
+        PackageConfig pc = new PackageConfig();
+//        pc.setModuleName(scanner("模块名"));
+        pc.setParent("com.gyee.frame");
+        pc.setEntity("model.auto");
+        pc.setMapper("mapper.auto");
+        pc.setService("service.auto");
+        pc.setServiceImpl("service.auto.impl");
+        mpg.setPackageInfo(pc);
+
+        // 自定义配置
+//        InjectionConfig cfg = new InjectionConfig() {
+//            @Override
+//            public void initMap() {
+//                // to do nothing
+//            }
+//        };
+
+        // 如果模板引擎是 freemarker
+//        String templatePath = "/templates/mapper.xml.ftl";
+        // 如果模板引擎是 velocity
+        // String templatePath = "/templates/mapper.xml.vm";
+
+        // 自定义输出配置
+//        List<FileOutConfig> focList = new ArrayList<>();
+        // 自定义配置会被优先输出
+//        focList.add(new FileOutConfig(templatePath) {
+//            @Override
+//            public String outputFile(TableInfo tableInfo) {
+//                // 自定义输出文件名 , 如果你 Entity 设置了前后缀、此处注意 xml 的名称会跟着发生变化!!
+//                return projectPath + "/src/main/resources/mapper/" + pc.getModuleName()
+//                        + "/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;
+//            }
+//        });
+        /*
+        cfg.setFileCreate(new IFileCreate() {
+            @Override
+            public boolean isCreate(ConfigBuilder configBuilder, FileType fileType, String filePath) {
+                // 判断自定义文件夹是否需要创建
+                checkDir("调用默认方法创建的目录");
+                return false;
+            }
+        });
+        */
+//        cfg.setFileOutConfigList(focList);
+//        mpg.setCfg(cfg);
+
+        // 配置模板
+        TemplateConfig templateConfig = new TemplateConfig();
+
+        // 配置自定义输出模板
+        //指定自定义模板路径,注意不要带上.ftl/.vm, 会根据使用的模板引擎自动识别
+        // templateConfig.setEntity("templates/entity2.java");
+        // templateConfig.setService();
+        // templateConfig.setController();
+
+        templateConfig.setXml(null);
+        mpg.setTemplate(templateConfig);
+
+        // 策略配置
+        StrategyConfig strategy = new StrategyConfig();
+        strategy.setNaming(NamingStrategy.underline_to_camel);
+        strategy.setColumnNaming(NamingStrategy.underline_to_camel);
+        strategy.setSuperEntityClass("com.baomidou.mybatisplus.extension.activerecord.Model");
+        strategy.setEntityLombokModel(true);
+        strategy.setRestControllerStyle(true);
+
+        strategy.setEntityLombokModel(true);
+        // 公共父类
+//        strategy.setSuperControllerClass("com.baomidou.ant.common.BaseController");
+        // 写于父类中的公共字段
+//        strategy.setSuperEntityColumns("id");
+        strategy.setInclude(scanner("表名,多个英文逗号分割").split(","));
+        strategy.setControllerMappingHyphenStyle(true);
+        strategy.setTablePrefix(pc.getModuleName() + "_");
+        mpg.setStrategy(strategy);
+        mpg.setTemplateEngine(new FreemarkerTemplateEngine());
+        mpg.execute();
+    }
+}

+ 260 - 0
web/health/src/main/java/com/gyee/frame/common/conf/GyeeConfig.java

@@ -0,0 +1,260 @@
+package com.gyee.frame.common.conf;
+
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+
+/**
+ * 读取项目相关配置
+ * 
+ * @author gyee
+ */
+@Component
+@ConfigurationProperties(prefix = "gyee")
+public class GyeeConfig
+{
+    /** 项目名称 */
+    private String name;
+    /** 版本 */
+    private String version;
+    /** 版权年份 */
+    private String copyrightYear;
+    /** 上传路径 */
+    private static String defaultBaseDir;
+    /** 是否开启 上传static **/
+    private static String isstatic;
+    /** 开启存放静态文件夹后目录 **/
+    private static String isroot_dir;
+    /** 邮箱发送smtp */
+    private static String email_smtp;
+    /** 发送邮箱端口 */
+    private static String email_port;
+    /** 发送邮箱登录账号 */
+    private static String email_account;
+    /** 发送邮箱登录密码 */
+    private static String email_password;
+    /** 演示模式 **/
+    private static String demoEnabled;
+    /** 滚动验证码 **/
+    private static Boolean rollVerification;
+    /** 实时数据库 **/
+    private  static String realtimedataBase;
+    /**数据适配器网址 **/
+    private static String baseurl;
+    /**健康管理数据适配器网址 **/
+    private static String healthurl;
+    /** swaggerip指定IP **/
+    private  static  String swaggerip;
+    /** 小数位数 **/
+    private  static  Integer digit;
+    /** 气象采集指定IP **/
+    private  static  String weatherurl;
+    /** 区域公司key指定IP **/
+    private  static  String weatherqygs;
+    /** 海拔信息配置 **/
+    private static Map<String,Double> hbmaps;
+
+    /**测点初始码**/
+    private  static  String initialcode;
+
+
+    private  static  String adapterUrl;
+
+    private  static  String alarmUrl;
+
+    public static String getHealthurl() {
+        return healthurl;
+    }
+
+    public  void setHealthurl(String healthurl) {
+        GyeeConfig.healthurl = healthurl;
+    }
+
+    public static String getAdapterUrl() {
+        return adapterUrl;
+    }
+
+    public  void setAdapterUrl(String adapterUrl) {
+        GyeeConfig.adapterUrl = adapterUrl;
+    }
+
+    public static String getAlarmUrl() {
+        return alarmUrl;
+    }
+
+    public  void setAlarmUrl(String alarmUrl) {
+        GyeeConfig.alarmUrl = alarmUrl;
+    }
+
+    public static String getInitialcode() {
+        return initialcode;
+    }
+
+    public  void setInitialcode(String initialcode) {
+        GyeeConfig.initialcode = initialcode;
+    }
+
+    public static Map<String, Double> getHbmaps() {
+        return hbmaps;
+    }
+
+    public  void setHbmaps(Map<String, Double> hbmaps) {
+        GyeeConfig.hbmaps = hbmaps;
+    }
+
+    public static String getWeatherurl() {
+        return weatherurl;
+    }
+
+    public  void setWeatherurl(String weatherurl) {
+        GyeeConfig.weatherurl = weatherurl;
+    }
+
+    public static String getWeatherqygs() {
+        return weatherqygs;
+    }
+
+    public  void setWeatherqygs(String weatherqygs) {
+        GyeeConfig.weatherqygs = weatherqygs;
+    }
+
+    public static  Integer getDigit() {
+        return digit;
+    }
+
+    public  void setDigit(Integer digit) {
+        this.digit = digit;
+    }
+
+    public  static String getSwaggerip() {
+        return swaggerip;
+    }
+
+    public  void setSwaggerip(String swaggerip) {
+        this.swaggerip = swaggerip;
+    }
+
+    public String getName()
+    {
+        return name;
+    }
+
+    public void setName(String name)
+    {
+        this.name = name;
+    }
+
+    public String getVersion()
+    {
+        return version;
+    }
+
+    public void setVersion(String version)
+    {
+        this.version = version;
+    }
+
+    public String getCopyrightYear()
+    {
+        return copyrightYear;
+    }
+
+    public void setCopyrightYear(String copyrightYear)
+    {
+        this.copyrightYear = copyrightYear;
+    }
+
+
+	public static String getDefaultBaseDir() {
+		return defaultBaseDir;
+	}
+
+	public  void setDefaultBaseDir(String defaultBaseDir) {
+		GyeeConfig.defaultBaseDir = defaultBaseDir;
+	}
+
+	public static String getIsstatic() {
+		return isstatic;
+	}
+
+	public  void setIsstatic(String isstatic) {
+
+        GyeeConfig.isstatic = isstatic;
+	}
+
+	public static String getIsroot_dir() {
+		return isroot_dir;
+	}
+
+	public void setIsroot_dir(String isroot_dir) {
+
+        GyeeConfig.isroot_dir = isroot_dir;
+	}
+
+	public static String getEmail_smtp() {
+		return email_smtp;
+	}
+
+	public void setEmail_smtp(String email_smtp) {
+		GyeeConfig.email_smtp = email_smtp;
+	}
+
+	public static String getEmail_port() {
+		return email_port;
+	}
+
+	public void setEmail_port(String email_port) {
+		GyeeConfig.email_port = email_port;
+	}
+
+	public static String getEmail_account() {
+		return email_account;
+	}
+
+	public void setEmail_account(String email_account) {
+		GyeeConfig.email_account = email_account;
+	}
+
+	public static String getEmail_password() {
+		return email_password;
+	}
+
+	public void setEmail_password(String email_password) {
+		GyeeConfig.email_password = email_password;
+	}
+
+	public static String getDemoEnabled() {
+		return demoEnabled;
+	}
+
+	public void setDemoEnabled(String demoEnabled) {
+		GyeeConfig.demoEnabled = demoEnabled;
+	}
+
+	public static Boolean getRollVerification() {
+		return rollVerification;
+	}
+
+	public void setRollVerification(Boolean rollVerification) {
+		GyeeConfig.rollVerification = rollVerification;
+	}
+
+
+
+
+    public static String getRealtimedataBase() {
+        return realtimedataBase;
+    }
+
+    public  void setRealtimedataBase(String realtimedataBase) {
+        GyeeConfig.realtimedataBase = realtimedataBase;
+    }
+    public static String getBaseurl() {
+        return baseurl;
+    }
+
+    public  void setBaseurl(String baseurl) {
+        GyeeConfig.baseurl = baseurl;
+    }
+}

+ 85 - 0
web/health/src/main/java/com/gyee/frame/common/conf/KaptchaConfig.java

@@ -0,0 +1,85 @@
+package com.gyee.frame.common.conf;
+
+import java.util.Properties;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import com.google.code.kaptcha.impl.DefaultKaptcha;
+import com.google.code.kaptcha.util.Config;
+
+/**
+ * 谷歌验证码配置文件
+ * @author gyee
+ * @date: 2018年9月12日 上午11:02:13
+ */
+@Configuration
+public class KaptchaConfig {
+	 @Bean(name = "captchaProducer")
+	    public DefaultKaptcha getKaptchaBean()
+	    {
+	        DefaultKaptcha defaultKaptcha = new DefaultKaptcha();
+	        Properties properties = new Properties();
+	        //是否有边框  默认为true  我们可以自己设置yes,no  
+	        properties.setProperty("kaptcha.border", "yes");
+	        //边框颜色   默认为Color.BLACK  
+	        properties.setProperty("kaptcha.border.color", "105,179,90");
+	        //验证码文本字符颜色  默认为Color.BLACK  
+	        properties.setProperty("kaptcha.textproducer.font.color", "blue");
+	        //验证码图片宽度  默认为200
+	        properties.setProperty("kaptcha.image.width", "200");
+	        //验证码图片高度  默认为50
+	        properties.setProperty("kaptcha.image.height", "50");
+	        // 验证码文本字符大小  默认为40
+	        properties.setProperty("kaptcha.textproducer.font.size", "40");
+	        //session key
+	        properties.setProperty("kaptcha.session.key", "kaptchaCode");
+	        // 验证码文本字符间距  默认为2  
+	        properties.setProperty("kaptcha.textproducer.char.spac", "35");
+	        //验证码文本字符长度  默认为5  
+	        properties.setProperty("kaptcha.textproducer.char.length", "4");
+	        //验证码文本字体样式  默认为new Font("Arial", 1, fontSize), new Font("Courier", 1, fontSize) 
+	        properties.setProperty("kaptcha.textproducer.font.names", "Arial,Courier");
+	        //验证码噪点颜色   默认为Color.BLACK  
+	        properties.setProperty("kaptcha.noise.color", "white");
+	        Config config = new Config(properties);
+	        defaultKaptcha.setConfig(config);
+	        return defaultKaptcha;
+	    }
+
+	    @Bean(name = "captchaProducerMath")
+	    public DefaultKaptcha getKaptchaBeanMath()
+	    {
+	        DefaultKaptcha defaultKaptcha = new DefaultKaptcha();
+	        Properties properties = new Properties();
+	        //是否有边框 默认为true 我们可以自己设置yes,no
+	        properties.setProperty("kaptcha.border", "yes");
+	        //边框颜色 默认为Color.BLACK
+	        properties.setProperty("kaptcha.border.color", "158,167,179");
+	        //验证码文本字符颜色 默认为Color.BLACK
+	        properties.setProperty("kaptcha.textproducer.font.color", "blue");
+	        //验证码图片宽度 默认为200
+	        properties.setProperty("kaptcha.image.width", "100");
+	        //验证码图片高度 默认为50
+	        properties.setProperty("kaptcha.image.height", "30");
+	        //验证码文本字符大小 默认为40
+	        properties.setProperty("kaptcha.textproducer.font.size", "30");
+	        //KAPTCHA_SESSION_KEY
+	        properties.setProperty("kaptcha.session.key", "kaptchaCodeMath");
+	        //验证码文本生成器
+	        properties.setProperty("kaptcha.textproducer.impl", "com.gyee.frame.common.support.KaptchaTextCreator");
+	        //验证码文本字符间距 默认为2
+	        properties.setProperty("kaptcha.textproducer.char.spac", "5");
+	        //验证码文本字符长度 默认为5
+	        properties.setProperty("kaptcha.textproducer.char.length", "6");
+	        //验证码文本字体样式 默认为new Font("Arial", 1, fontSize), new Font("Courier", 1, fontSize)
+	        properties.setProperty("kaptcha.textproducer.font.names", "Arial,Courier");
+	        //验证码噪点颜色 默认为Color.BLACK
+	        properties.setProperty("kaptcha.noise.color", "white");
+	        //干扰实现类
+	        properties.setProperty("kaptcha.noise.impl", "com.google.code.kaptcha.impl.NoNoise");
+	        //图片样式 水纹com.google.code.kaptcha.impl.WaterRipple 鱼眼com.google.code.kaptcha.impl.FishEyeGimpy 阴影com.google.code.kaptcha.impl.ShadowGimpy
+	        properties.setProperty("kaptcha.obscurificator.impl", "com.google.code.kaptcha.impl.ShadowGimpy");
+	        Config config = new Config(properties);
+	        defaultKaptcha.setConfig(config);
+	        return defaultKaptcha;
+	    }
+}

+ 99 - 0
web/health/src/main/java/com/gyee/frame/common/conf/MybatisConfig.java

@@ -0,0 +1,99 @@
+package com.gyee.frame.common.conf;
+
+import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder;
+import com.gyee.frame.common.dataSources.DataSourceType;
+import com.gyee.frame.common.dataSources.DynamicDataSource;
+import org.apache.ibatis.session.SqlSessionFactory;
+import org.mybatis.spring.SqlSessionFactoryBean;
+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.Resource;
+import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
+import org.springframework.jdbc.datasource.DataSourceTransactionManager;
+import org.springframework.transaction.PlatformTransactionManager;
+
+import javax.sql.DataSource;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * Mybatis多数据源配置
+ * 参考文章:https://www.cnblogs.com/geekdc/p/10963476.html
+ * @ClassName: MybatisConfig
+ * @author gyee
+ * @date 2019-12-06 21:11
+ */
+@Configuration
+@MapperScan(basePackages = "com.gyee.frame.mapper")
+public class MybatisConfig {
+
+    @Bean(name = "master")
+    @ConfigurationProperties("spring.datasource.druid.master")
+    public DataSource masterDataSource()
+    {
+        return DruidDataSourceBuilder.create().build();
+    }
+
+    @Bean(name = "slave")
+    @ConfigurationProperties("spring.datasource.druid.slave")
+//    @ConditionalOnProperty(prefix = "spring.datasource.druid.slave", name = "enabled", havingValue = "true")
+    public DataSource slaveDataSource()
+    {
+        return DruidDataSourceBuilder.create().build();
+    }
+
+//    @Bean(name = "ticket")
+//    @ConfigurationProperties("spring.datasource.druid.ticket")
+////    @ConditionalOnProperty(prefix = "spring.datasource.druid.ticket", name = "enabled", havingValue = "true")
+//    public DataSource ticketDataSource()
+//    {
+//        return DruidDataSourceBuilder.create().build();
+//    }
+    @Bean(name = "dynamicDataSource")
+    @Primary
+    public DynamicDataSource dataSource(@Qualifier("master")DataSource masterDataSource, @Qualifier("slave")DataSource slaveDataSource)
+    {
+        Map<Object, Object> targetDataSources = new HashMap<>();
+        targetDataSources.put(DataSourceType.MASTER.name(), masterDataSource);
+    	targetDataSources.put(DataSourceType.SLAVE.name(),slaveDataSource);
+        return new DynamicDataSource(masterDataSource(), targetDataSources);
+    }
+
+//    @Bean(name = "dynamicDataSource")
+//    @Primary
+//    public DynamicDataSource dataSource(@Qualifier("master")DataSource masterDataSource, @Qualifier("slave")DataSource slaveDataSource, @Qualifier("ticket")DataSource ticketDataSource)
+//    {
+//        Map<Object, Object> targetDataSources = new HashMap<>();
+//        targetDataSources.put(DataSourceType.MASTER.name(), masterDataSource);
+//        targetDataSources.put(DataSourceType.SLAVE.name(),slaveDataSource);
+//        targetDataSources.put(DataSourceType.TICKET.name(),ticketDataSource);
+//        return new DynamicDataSource(masterDataSource(), targetDataSources);
+//    }
+
+    @Bean
+    public SqlSessionFactory sqlSessionFactory(DynamicDataSource dynamicDataSource) throws Exception {
+        SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
+        factoryBean.setDataSource(dynamicDataSource);
+//        factoryBean.setTypeAliasesPackage();
+        // 设置mapper.xml的位置路径
+        Resource[] resources = new PathMatchingResourcePatternResolver().getResources("classpath*:mybatis/*/*.xml");
+        factoryBean.setMapperLocations(resources);
+        return factoryBean.getObject();
+    }
+    
+    /**
+     * 配置@Transactional注解事务
+     * @param dynamicDataSource
+     * @return
+     * @author gyee
+     * @Date 2019年12月7日 上午11:31:33
+     */
+    @Bean
+    public PlatformTransactionManager transactionManager(DynamicDataSource dynamicDataSource){
+        return new DataSourceTransactionManager(dynamicDataSource);
+    }
+}

+ 39 - 0
web/health/src/main/java/com/gyee/frame/common/conf/MybatisPlusConfig.java

@@ -0,0 +1,39 @@
+package com.gyee.frame.common.conf;
+
+
+import com.baomidou.mybatisplus.annotation.DbType;
+import com.baomidou.mybatisplus.core.injector.DefaultSqlInjector;
+import com.baomidou.mybatisplus.core.injector.ISqlInjector;
+import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
+import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+public class MybatisPlusConfig {
+
+    /**
+     * 新的分页插件,一缓和二缓遵循mybatis的规则,需要设置 MybatisConfiguration#useDeprecatedExecutor = false 避免缓存出现问题(该属性会在旧插件移除后一同移除)
+     */
+    @Bean
+    public MybatisPlusInterceptor mybatisPlusInterceptor() {
+        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
+        PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor();
+        paginationInnerInterceptor.setDbType(DbType.POSTGRE_SQL);
+        //分页查询超过最大页码 显示第一页
+        paginationInnerInterceptor.setOverflow(true);
+        interceptor.addInnerInterceptor(paginationInnerInterceptor);
+        return interceptor;
+    }
+
+
+
+    /**
+     * 此配置可有可无,自定义ISqlInjector
+     * @return DefaultSqlInjector
+     */
+    @Bean
+    public ISqlInjector sqlInjector() {
+        return new DefaultSqlInjector();
+    }
+}

+ 83 - 0
web/health/src/main/java/com/gyee/frame/common/conf/Swagger.java

@@ -0,0 +1,83 @@
+package com.gyee.frame.common.conf;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+import springfox.documentation.builders.ApiInfoBuilder;
+import springfox.documentation.builders.PathSelectors;
+import springfox.documentation.builders.RequestHandlerSelectors;
+import springfox.documentation.service.ApiInfo;
+import springfox.documentation.spi.DocumentationType;
+import springfox.documentation.spring.web.plugins.Docket;
+import springfox.documentation.swagger2.annotations.EnableSwagger2;
+
+import javax.annotation.Resource;
+
+/**
+* Swagger 配置文件
+* @ClassName: Swagger
+* @Description: 配置文件
+* @author gyee
+* @date 2018年6月3日
+*
+ */
+@Configuration(value="true")
+@EnableSwagger2 //启动swagger注解 启动服务,浏览器输入"http://localhost:8080/swagger-ui.html"
+public class Swagger  implements WebMvcConfigurer {
+
+
+	@Resource
+	private GyeeConfig gyeeConfig;
+
+	@Bean
+	public Docket createRestApi() {
+		return new Docket(DocumentationType.SWAGGER_2)
+				.host(gyeeConfig.getSwaggerip())
+				// 用来创建该API的基本信息,展示在文档的页面中(自定义展示的信息)
+				.apiInfo(apiInfo())
+				// 设置哪些接口暴露给Swagger展示
+				.select()
+				 // 扫描所有有注解的api,用这种方式更灵活
+				.apis(RequestHandlerSelectors.basePackage("com.gyee.frame"))
+				// 扫描指定包中的swagger注解
+				//.apis(RequestHandlerSelectors.basePackage("com.gyee.frame.controller"))
+				// 扫描所有 .apis(RequestHandlerSelectors.any())
+				.paths(PathSelectors.any())
+				.build();
+	}
+	
+	private ApiInfo apiInfo() {
+		return new ApiInfoBuilder()
+				//设置标题
+				.title("Gyee_Frame_HF API文档")
+				//描述
+				.description("Gyee_Frame_NX项目")
+				 //作者信息
+                //.contact(new Contact(v2Config.getName(), null, V2Config.getEmail_account()))
+                //服务条款URL
+				.termsOfServiceUrl("")
+				//版本
+				.version("版本号:"+ gyeeConfig.getVersion())
+				.build();
+	}
+
+	@Override
+
+	public void addResourceHandlers(ResourceHandlerRegistry registry) {
+
+		// 解决静态资源无法访问
+
+		registry.addResourceHandler("/**").addResourceLocations("classpath:/static/");
+
+		// 解决swagger无法访问
+
+		registry.addResourceHandler("/swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/");
+
+		// 解决swagger的js文件无法访问
+
+		registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
+
+	}
+
+}

+ 79 - 0
web/health/src/main/java/com/gyee/frame/common/conf/TemperatureConfig.java

@@ -0,0 +1,79 @@
+package com.gyee.frame.common.conf;
+
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+/**
+ * 预警配置
+ */
+@Component
+@ConfigurationProperties(prefix = "temperature")
+public class TemperatureConfig {
+
+
+    private static List<String> yyz;
+    private static List<String> clx;
+    private static List<String> fdj;
+    private static List<String> bj;
+    private static List<String> qt;
+    private static List<String> zz;
+    private static List<String> zd;
+
+    public static List<String> getYyz() {
+        return yyz;
+    }
+
+    public  void setYyz(List<String> yyz) {
+        this.yyz = yyz;
+    }
+
+    public static List<String> getClx() {
+        return clx;
+    }
+
+    public  void setClx(List<String> clx) {
+        this.clx = clx;
+    }
+
+    public static List<String> getFdj() {
+        return fdj;
+    }
+
+    public  void setFdj(List<String> fdj) {
+        this.fdj = fdj;
+    }
+
+    public static List<String> getBj() {
+        return bj;
+    }
+
+    public  void setBj(List<String> bj) {
+        this.bj = bj;
+    }
+
+    public static List<String> getQt() {
+        return qt;
+    }
+
+    public  void setQt(List<String> qt) {
+        this.qt = qt;
+    }
+
+    public static List<String> getZz() {
+        return zz;
+    }
+
+    public  void setZz(List<String> zz) {
+        this.zz = zz;
+    }
+
+    public  static List<String> getZd() {
+        return zd;
+    }
+
+    public  void setZd(List<String> zd) {
+        this.zd = zd;
+    }
+}

+ 56 - 0
web/health/src/main/java/com/gyee/frame/common/conf/ThreadPoolTaskConfig.java

@@ -0,0 +1,56 @@
+package com.gyee.frame.common.conf;
+
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
+
+import java.util.concurrent.ThreadPoolExecutor;
+
+@Configuration
+public class ThreadPoolTaskConfig {
+    /**
+     *   默认情况下,在创建了线程池后,线程池中的线程数为0,当有任务来之后,就会创建一个线程去执行任务,
+     *	当线程池中的线程数目达到corePoolSize后,就会把到达的任务放到缓存队列当中;
+     *  当队列满了,就继续创建线程,当线程数量大于等于maxPoolSize后,开始使用拒绝策略拒绝
+     */
+
+    /** 核心线程数(默认线程数) */
+    private static final int corePoolSize = 100;
+    /** 最大线程数 */
+    private static final int maxPoolSize = 500;
+    /** 允许线程空闲时间(单位:默认为秒) */
+    private static final int keepAliveTime = 60;
+    /** 缓冲队列大小 */
+    private static final int queueCapacity = 500;
+    /** 允许等待最长时间 */
+    private static final int awaitTime = 10;
+    /** 线程池名前缀 */
+    private static final String threadNamePrefix = "GYEE-Thread-";
+
+    private ThreadPoolTaskExecutor executor;
+
+    public ThreadPoolTaskExecutor getExecutor(){
+        if (executor == null)
+            executor = taskExecutor();
+
+        return executor;
+    }
+
+
+    private ThreadPoolTaskExecutor taskExecutor(){
+        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
+        executor.setCorePoolSize(corePoolSize);
+        executor.setMaxPoolSize(maxPoolSize);
+        executor.setQueueCapacity(queueCapacity);
+        executor.setKeepAliveSeconds(keepAliveTime);
+        executor.setThreadNamePrefix(threadNamePrefix);
+        executor.setAwaitTerminationSeconds(awaitTime);
+
+        // 线程池对拒绝任务的处理策略
+        // CallerRunsPolicy:由调用线程(提交任务的线程)处理该任务
+        executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
+        // 初始化
+        executor.initialize();
+        return executor;
+    }
+
+}

+ 20 - 0
web/health/src/main/java/com/gyee/frame/common/conf/WebSocketConfig.java

@@ -0,0 +1,20 @@
+package com.gyee.frame.common.conf;
+
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.socket.server.standard.ServerEndpointExporter;
+
+/**
+ * 开启 WebSocket 支持
+ **/
+@Configuration
+public class WebSocketConfig {
+
+    @Bean
+    public ServerEndpointExporter serverEndpointExporter() {
+        System.out.println("开启websocket支持。。。。。");
+        return new ServerEndpointExporter();
+    }
+
+}

+ 27 - 0
web/health/src/main/java/com/gyee/frame/common/conf/ZmConfig.java

@@ -0,0 +1,27 @@
+package com.gyee.frame.common.conf;
+
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 预警配置
+ */
+@Component
+@ConfigurationProperties(prefix = "zmconfig")
+public class ZmConfig {
+
+
+    private static Map<String,List<String>> maps;
+
+
+    public static Map<String, List<String>> getMaps() {
+        return maps;
+    }
+
+    public void setMaps(Map<String, List<String>> maps) {
+        this.maps = maps;
+    }
+}

+ 45 - 0
web/health/src/main/java/com/gyee/frame/common/conf/monitor/LeaderConfig.java

@@ -0,0 +1,45 @@
+package com.gyee.frame.common.conf.monitor;
+
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.PropertySource;
+import org.springframework.context.annotation.PropertySources;
+import org.springframework.stereotype.Component;
+
+
+@Component
+@PropertySources({
+        @PropertySource("classpath:config/leader.properties"),
+})
+public class LeaderConfig {
+
+    @Value("${Leader.FDL}")
+    private String FDL;
+    @Value("${Leader.FS}")
+    private String FS;
+    @Value("${Leader.GL}")
+
+    private String GL;
+    public String getFDL() {
+        return FDL;
+    }
+
+    public void setFDL(String FDL) {
+        this.FDL = FDL;
+    }
+
+    public String getFS() {
+        return FS;
+    }
+
+    public void setFS(String FS) {
+        this.FS = FS;
+    }
+
+    public String getGL() {
+        return GL;
+    }
+
+    public void setGL(String GL) {
+        this.GL = GL;
+    }
+}

+ 45 - 0
web/health/src/main/java/com/gyee/frame/common/conf/monitor/StatusConfig.java

@@ -0,0 +1,45 @@
+package com.gyee.frame.common.conf.monitor;
+
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.PropertySource;
+import org.springframework.context.annotation.PropertySources;
+import org.springframework.stereotype.Component;
+
+
+@Component
+@PropertySources({
+        @PropertySource("classpath:config/status.properties"),
+})
+public class StatusConfig {
+
+    @Value("${Status.FDL}")
+    private String FDL;
+    @Value("${Status.FS}")
+    private String FS;
+    @Value("${Status.GL}")
+
+    private String GL;
+    public String getFDL() {
+        return FDL;
+    }
+
+    public void setFDL(String FDL) {
+        this.FDL = FDL;
+    }
+
+    public String getFS() {
+        return FS;
+    }
+
+    public void setFS(String FS) {
+        this.FS = FS;
+    }
+
+    public String getGL() {
+        return GL;
+    }
+
+    public void setGL(String GL) {
+        this.GL = GL;
+    }
+}

+ 21 - 0
web/health/src/main/java/com/gyee/frame/common/dataSources/DataSource.java

@@ -0,0 +1,21 @@
+package com.gyee.frame.common.dataSources;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * 自定义注解,用于类或方法上,优先级:方法>类
+ * @ClassName: DataSource
+ * @author gyee
+ * @date 2019-12-06 21:15
+ */
+@Target({ElementType.METHOD})
+@Retention(RetentionPolicy.RUNTIME)
+public @interface DataSource {
+	/**
+     * 切换数据源名称
+     */
+	DataSourceType value() default DataSourceType.MASTER;
+}

+ 77 - 0
web/health/src/main/java/com/gyee/frame/common/dataSources/DataSourceAspect.java

@@ -0,0 +1,77 @@
+package com.gyee.frame.common.dataSources;
+
+import org.aspectj.lang.ProceedingJoinPoint;
+import org.aspectj.lang.annotation.Around;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.annotation.Pointcut;
+import org.aspectj.lang.reflect.MethodSignature;
+import org.springframework.core.annotation.Order;
+import org.springframework.stereotype.Component;
+
+import com.gyee.frame.util.StringUtils;
+
+import java.lang.reflect.Method;
+/**
+ * 多数据源处理
+ * @ClassName: DataSourceAspect
+ * @author gyee
+ * @date 2019-12-07 18:40
+ */
+@Aspect
+@Component
+@Order(1)
+//@EnableAsync
+public class DataSourceAspect {
+	//private static final Logger log = LoggerFactory.getLogger(DataSourceAspect.class);
+
+	@Pointcut("@annotation(com.gyee.frame.common.dataSources.DataSource)")
+    public void dsPointCut()
+    {
+
+    }
+
+	@Around("dsPointCut()")
+    public Object around(ProceedingJoinPoint point) throws Throwable
+    {
+        MethodSignature signature = (MethodSignature) point.getSignature();
+
+        Method method = signature.getMethod();
+
+        DataSource dataSource = method.getAnnotation(DataSource.class);
+
+        if (null!=dataSource)
+        {
+            DataSourceContextHolder.setDataSource(dataSource.value().name());
+        }
+
+        try
+        {
+            return point.proceed();
+        }
+        finally
+        {
+            // 销毁数据源 在执行方法之后
+        	DataSourceContextHolder.clearDataSource();
+        }
+    }
+
+	 /**
+     * 获取需要切换的数据源
+     */
+    public DataSource getDataSource(ProceedingJoinPoint point)
+    {
+        MethodSignature signature = (MethodSignature) point.getSignature();
+        Class<? extends Object> targetClass = point.getTarget().getClass();
+        DataSource targetDataSource = targetClass.getAnnotation(DataSource.class);
+        if (StringUtils.isNotNull(targetDataSource))
+        {
+            return targetDataSource;
+        }
+        else
+        {
+            Method method = signature.getMethod();
+            DataSource dataSource = method.getAnnotation(DataSource.class);
+            return dataSource;
+        }
+    }
+}

+ 50 - 0
web/health/src/main/java/com/gyee/frame/common/dataSources/DataSourceContextHolder.java

@@ -0,0 +1,50 @@
+package com.gyee.frame.common.dataSources;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * 动态数据源上下文管理:设置数据源,获取数据源,清除数据源
+ * @ClassName: DataSourceContextHolder
+ * @author gyee
+ * @date 2019-12-06 21:08
+ */
+public class DataSourceContextHolder {
+	private static final Logger log = LoggerFactory.getLogger(DataSourceContextHolder.class);
+   /**
+    * 使用ThreadLocal维护变量,ThreadLocal为每个使用该变量的线程提供独立的变量副本,
+    * 所以每一个线程都可以独立地改变自己的副本,而不会影响其它线程所对应的副本。
+    */
+    private static final ThreadLocal<String> CONTEXT_HOLDER = new ThreadLocal<>();
+
+    /**
+     * 设置数据源
+     * @param type
+     * @author gyee
+     * @Date 2019年12月7日 下午6:38:55
+     */
+    public static void setDataSource(String type){
+
+        log.info("当前使用的数据源为:{}", type);
+    	CONTEXT_HOLDER.set(type);
+    }
+
+    /**
+     * 获得数据源的变量
+     * @return
+     * @author gyee
+     * @Date 2019年12月7日 下午6:39:00
+     */
+    public static String getDataSource(){
+        return CONTEXT_HOLDER.get();
+    }
+
+    /**
+     * 清除数据源
+     * @author gyee
+     * @Date 2019年12月7日 下午6:39:06
+     */
+    public static void clearDataSource(){
+    	CONTEXT_HOLDER.remove();
+    }
+}

+ 13 - 0
web/health/src/main/java/com/gyee/frame/common/dataSources/DataSourceType.java

@@ -0,0 +1,13 @@
+package com.gyee.frame.common.dataSources;
+
+/**
+ * 列出所有数据源
+ * @ClassName: DataSourceType
+ * @author gyee
+ * @date 2019-12-06 21:02
+ */
+public enum DataSourceType {
+	MASTER,
+	SLAVE,
+	TICKET
+}

+ 27 - 0
web/health/src/main/java/com/gyee/frame/common/dataSources/DynamicDataSource.java

@@ -0,0 +1,27 @@
+package com.gyee.frame.common.dataSources;
+
+import java.util.Map;
+import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
+
+/**
+ * 动态数据源
+ * @ClassName: DynamicDataSource
+ * @author gyee
+ * @date 2019-12-07 18:39
+ */
+public class DynamicDataSource extends AbstractRoutingDataSource {
+	
+	public DynamicDataSource(javax.sql.DataSource dataSource, Map<Object, Object> targetDataSources)
+    {
+        super.setDefaultTargetDataSource(dataSource);
+        super.setTargetDataSources(targetDataSources);
+        super.afterPropertiesSet();
+    }
+
+	@Override
+	protected Object determineCurrentLookupKey() {
+		
+		return DataSourceContextHolder.getDataSource();
+	}
+
+}

+ 104 - 0
web/health/src/main/java/com/gyee/frame/common/domain/AjaxResult.java

@@ -0,0 +1,104 @@
+package com.gyee.frame.common.domain;
+
+import java.util.HashMap;
+
+/**
+* @ClassName: AjaxResult
+* @Description: ajax操作消息提醒
+* @author gyee
+* @date 2018年8月18日
+*
+ */
+public class AjaxResult extends HashMap<String, Object>
+{
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 初始化一个新创建的 Message 对象
+     */
+    public AjaxResult()
+    {
+    }
+
+    /**
+     * 返回错误消息
+     * 
+     * @return 错误消息
+     */
+    public static AjaxResult error()
+    {
+        return error(1, "操作失败");
+    }
+
+    /**
+     * 返回错误消息
+     * 
+     * @param msg 内容
+     * @return 错误消息
+     */
+    public static AjaxResult error(String msg)
+    {
+        return error(500, msg);
+    }
+
+    /**
+     * 返回错误消息
+     * 
+     * @param code 错误码
+     * @param msg 内容
+     * @return 错误消息
+     */
+    public static AjaxResult error(int code, String msg)
+    {
+        AjaxResult json = new AjaxResult();
+        json.put("code", code);
+        json.put("msg", msg);
+        return json;
+    }
+
+    /**
+     * 返回成功消息
+     * 
+     * @param msg 内容
+     * @return 成功消息
+     */
+    public static AjaxResult success(String msg)
+    {
+        AjaxResult json = new AjaxResult();
+        json.put("msg", msg);
+        json.put("code", 200);
+        return json;
+    }
+    
+    /**
+     * 返回成功消息
+     * 
+     * @return 成功消息
+     */
+    public static AjaxResult success()
+    {
+        return AjaxResult.success("操作成功");
+    }
+    
+    public static AjaxResult successData(int code, Object value){
+    	 AjaxResult json = new AjaxResult();
+    	 json.put("code", code);
+         json.put("data", value);
+         return json;
+    }
+   
+    
+    /**
+     * 返回成功消息
+     * 
+     * @param key 键值
+     * @param value 内容
+     * @return 成功消息
+     */
+    @Override
+    public AjaxResult put(String key, Object value)
+    {
+        super.put(key, value);
+        return this;
+    }
+}

+ 80 - 0
web/health/src/main/java/com/gyee/frame/common/druid/RemoveDruidAdConfig.java

@@ -0,0 +1,80 @@
+package com.gyee.frame.common.druid;
+
+import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure;
+import com.alibaba.druid.spring.boot.autoconfigure.properties.DruidStatProperties;
+import com.alibaba.druid.util.Utils;
+import org.springframework.boot.autoconfigure.AutoConfigureAfter;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
+import org.springframework.boot.web.servlet.FilterRegistrationBean;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import javax.servlet.*;
+import java.io.IOException;
+
+
+/**
+ * 类名称:RemoveDruidAdConfig
+ * 类描述: 去除druid底部的广告配置类
+ *
+ * @author: taohongchao
+ * 创建时间:2019/2/15 13:14
+ * Version 1.0
+ */
+
+@Configuration
+@ConditionalOnWebApplication
+@AutoConfigureAfter(DruidDataSourceAutoConfigure.class)
+@ConditionalOnProperty(name = "spring.datasource.druid.stat-view-servlet.enabled", havingValue = "true", matchIfMissing = true)
+public class RemoveDruidAdConfig {
+
+
+    /**
+     * 方法名: removeDruidAdFilterRegistrationBean
+     * 方法描述:  除去页面底部的广告
+     * @param properties
+     * @return org.springframework.boot.web.servlet.FilterRegistrationBean
+     * @throws
+     */
+    @SuppressWarnings("rawtypes")
+	@Bean
+    public FilterRegistrationBean removeDruidAdFilterRegistrationBean(DruidStatProperties properties) {
+        // 获取web监控页面的参数
+        DruidStatProperties.StatViewServlet config = properties.getStatViewServlet();
+        // 提取common.js的配置路径
+        String pattern = config.getUrlPattern() != null ? config.getUrlPattern() : "/druid/*";
+        String commonJsPattern = pattern.replaceAll("\\*", "js/common.js");
+
+        final String filePath = "support/http/resources/js/common.js";
+
+        //创建filter进行过滤
+        Filter filter = new Filter() {
+            @Override
+            public void init(FilterConfig filterConfig) throws ServletException {
+            }
+
+            @Override
+            public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
+                chain.doFilter(request, response);
+                // 重置缓冲区,响应头不会被重置
+                response.resetBuffer();
+                // 获取common.js
+                String text = Utils.readFromResource(filePath);
+                // 正则替换banner, 除去底部的广告信息
+                text = text.replaceAll("<a.*?banner\"></a><br/>", "");
+                text = text.replaceAll("powered.*?shrek.wang</a>", "");
+                response.getWriter().write(text);
+            }
+
+            @Override
+            public void destroy() {
+            }
+        };
+        FilterRegistrationBean<Filter> registrationBean = new FilterRegistrationBean<Filter>();
+        registrationBean.setFilter(filter);
+        registrationBean.addUrlPatterns(commonJsPattern);
+        return registrationBean;
+    }
+}
+

+ 141 - 0
web/health/src/main/java/com/gyee/frame/common/exception/GlobalExceptionResolver.java

@@ -0,0 +1,141 @@
+package com.gyee.frame.common.exception;
+
+import com.gyee.frame.common.domain.AjaxResult;
+import com.gyee.frame.common.exception.demo.DemoModeException;
+import com.gyee.frame.util.ServletUtils;
+import org.apache.shiro.authz.AuthorizationException;
+import org.apache.shiro.authz.UnauthenticatedException;
+import org.apache.shiro.authz.UnauthorizedException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.validation.BindException;
+import org.springframework.web.HttpRequestMethodNotSupportedException;
+import org.springframework.web.bind.annotation.ExceptionHandler;
+import org.springframework.web.bind.annotation.RestControllerAdvice;
+import org.springframework.web.servlet.ModelAndView;
+import org.thymeleaf.exceptions.TemplateInputException;
+
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * 全局异常处理
+ * @author gyee
+ * @date: 2018年9月9日 下午10:52:55
+ */
+@RestControllerAdvice
+public class GlobalExceptionResolver{
+	private static Logger logger = LoggerFactory.getLogger(GlobalExceptionResolver.class);
+	
+	
+	
+	 /**
+     * 权限校验失败 如果请求为ajax返回json,普通请求跳转页面
+     */
+    @ExceptionHandler(AuthorizationException.class)
+    public Object handleAuthorizationException(HttpServletRequest request, AuthorizationException e)
+    {
+		//开发环境打印异常,正式环境请注销
+    	logger.error(" 权限校验异常》》"+e.getMessage(), e);
+        if (ServletUtils.isAjaxRequest(request))
+        {
+            return AjaxResult.error(e.getMessage());
+        }
+        else
+        {
+        	ModelAndView mv;
+        	//shiro异常拦截 
+          if(e instanceof UnauthorizedException){
+          	//未授权异常
+              mv = new ModelAndView("/error/403");
+              return mv;
+          }else if(e instanceof UnauthenticatedException){
+          	//未认证异常
+              mv = new ModelAndView("/error/403");
+              return mv;
+          }
+          else {
+              mv = new ModelAndView();
+              return mv;
+  
+          }
+        }
+    }
+	
+	
+   
+    
+    /**
+     * 自定义验证异常
+     */
+    @ExceptionHandler(BindException.class)
+    public AjaxResult validatedBindException(BindException e)
+    {
+    	logger.error("自定义验证异常", e);
+        String message = e.getAllErrors().get(0).getDefaultMessage();
+        return AjaxResult.error(message);
+    }
+    
+    
+    /**
+     * 请求方式不支持
+     */
+    @ExceptionHandler({ HttpRequestMethodNotSupportedException.class })
+    public AjaxResult handleException(HttpRequestMethodNotSupportedException e)
+    {
+    	logger.error("请求方式不支持异常:", e);
+        return AjaxResult.error("不支持' " + e.getMethod() + "'请求");
+    }
+  
+    
+    
+
+    /**
+     * 系统异常
+     */
+    @ExceptionHandler(Exception.class) 
+    public ModelAndView handle(Exception e){ 
+    	logger.error("系统异常:", e);
+	    ModelAndView mv = new ModelAndView(); 
+	    mv.addObject("message", e.getMessage()); 
+	    mv.setViewName("/error/999"); 
+	    return mv; 
+    }
+    
+    /**
+     * 演示模式异常
+     */
+    @ExceptionHandler(DemoModeException.class)
+    public AjaxResult demoModeException(DemoModeException e)
+    {
+        return AjaxResult.error("演示模式,不允许操作");
+    }
+    
+    /**
+     * 拦截未知的运行时异常
+     */
+    @ExceptionHandler(RuntimeException.class)
+    public AjaxResult notFount(RuntimeException e)
+    {
+    	logger.error("运行时异常:", e);
+        return AjaxResult.error("运行时异常:" + e.getMessage());
+    }
+
+    /**
+     * 拦截自定义异常
+     */
+    @ExceptionHandler(QiNiuException.class)
+    public AjaxResult qiniuException(QiNiuException e)
+    {
+        logger.error(e.getMessage());
+        return AjaxResult.error(e.getCode(), e.getMessage());
+    }
+
+
+    @ExceptionHandler(TemplateInputException.class)
+    public AjaxResult templateException(TemplateInputException e)
+    {
+        logger.error(e.getMessage());
+        return AjaxResult.error(e.getMessage());
+    }
+
+}

+ 65 - 0
web/health/src/main/java/com/gyee/frame/common/exception/QiNiuException.java

@@ -0,0 +1,65 @@
+package com.gyee.frame.common.exception;
+
+import com.gyee.frame.common.exception.enums.QiNiuErrorEnum;
+
+/**
+ * QiNiuException
+ *
+ * @author bobbi
+ * @date 2018/10/07 13:54
+ * @email 571002217@qq.com
+ * @description 自定义异常
+ */
+public class QiNiuException extends RuntimeException{
+	private static final long serialVersionUID = 1L;
+	private String msg;
+    private int code = 500;
+
+    public QiNiuException(){
+        super(QiNiuErrorEnum.UNKNOWN.getMsg());
+        this.msg= QiNiuErrorEnum.UNKNOWN.getMsg();
+    }
+
+
+    public QiNiuException(QiNiuErrorEnum eEnum, Throwable e){
+        super(eEnum.getMsg(),e);
+        this.msg=eEnum.getMsg();
+        this.code=eEnum.getCode();
+    }
+
+    public QiNiuException(QiNiuErrorEnum eEnum){
+        this.msg=eEnum.getMsg();
+        this.code=eEnum.getCode();
+    }
+
+    public QiNiuException(String exception){
+       this.msg=exception;
+    }
+
+
+	public String getMsg() {
+		return msg;
+	}
+
+
+	public void setMsg(String msg) {
+		this.msg = msg;
+	}
+
+
+	public int getCode() {
+		return code;
+	}
+
+
+	public void setCode(int code) {
+		this.code = code;
+	}
+
+	public QiNiuException(String msg, int code) {
+		super();
+		this.msg = msg;
+		this.code = code;
+	}
+    
+}

+ 17 - 0
web/health/src/main/java/com/gyee/frame/common/exception/demo/DemoModeException.java

@@ -0,0 +1,17 @@
+package com.gyee.frame.common.exception.demo;
+
+/**
+ * 演示模式异常
+* @ClassName: DemoModeException
+* @author gyee
+* @date 2019-11-08 15:45
+*
+ */
+public class DemoModeException extends RuntimeException
+{
+    private static final long serialVersionUID = 1L;
+
+    public DemoModeException()
+    {
+    }
+}

+ 55 - 0
web/health/src/main/java/com/gyee/frame/common/exception/enums/QiNiuErrorEnum.java

@@ -0,0 +1,55 @@
+package com.gyee.frame.common.exception.enums;
+
+/**
+ * QiNiuErrorEnum
+ * @description error类型枚举类
+ */
+public enum QiNiuErrorEnum {
+
+    // 系统错误
+    UNKNOWN(500,"系统内部错误,请联系管理员"),
+    PATH_NOT_FOUND(404,"路径不存在,请检查路径"),
+    NO_AUTH(403,"没有权限,请联系管理员"),
+    DUPLICATE_KEY(501,"数据库中已存在该记录"),
+    TOKEN_GENERATOR_ERROR(502,"token生成失败"),
+    NO_UUID(503,"uuid为空"),
+    SQL_ILLEGAL(504,"sql非法"),
+	TEMPLATE_NO_SUPPORT(505,"模板不支持"),
+
+    //用户权限错误
+    INVALID_TOKEN(1001,"token不合法"),
+
+    //七牛OSS错误
+    OSS_CONFIG_ERROR(10050,"七牛配置信息错误"),
+    OSS_UPLOAD_ERROR(10051,"OSSBookNote上传失败"),
+
+	//数据库错误
+	ERROR_CONNECT(4005, "数据库连接异常"),
+	ERROR_DATA(4006, "数据查询失败");
+
+    private int code;
+    private String msg;
+	public int getCode() {
+		return code;
+	}
+	public void setCode(int code) {
+		this.code = code;
+	}
+	public String getMsg() {
+		return msg;
+	}
+	public void setMsg(String msg) {
+		this.msg = msg;
+	}
+	/**
+	 * @param code
+	 * @param msg
+	 * @author gyee
+	 * @Date 2019年11月20日 下午9:28:34
+	 */
+	private QiNiuErrorEnum(int code, String msg) {
+		this.code = code;
+		this.msg = msg;
+	}
+	
+}

+ 41 - 0
web/health/src/main/java/com/gyee/frame/common/exception/file/FileNameLengthLimitExceededException.java

@@ -0,0 +1,41 @@
+package com.gyee.frame.common.exception.file;
+
+import org.apache.commons.fileupload.FileUploadException;
+
+/**
+ * 文件名超长 误异常类
+ * 
+ * @author gyee
+ */
+public class FileNameLengthLimitExceededException extends FileUploadException
+{
+
+    private static final long serialVersionUID = 1L;
+    private int length;
+    private int maxLength;
+    private String filename;
+
+    public FileNameLengthLimitExceededException(String filename, int length, int maxLength)
+    {
+        super("file name : [" + filename + "], length : [" + length + "], max length : [" + maxLength + "]");
+        this.length = length;
+        this.maxLength = maxLength;
+        this.filename = filename;
+    }
+
+    public String getFilename()
+    {
+        return filename;
+    }
+
+    public int getLength()
+    {
+        return length;
+    }
+
+    public int getMaxLength()
+    {
+        return maxLength;
+    }
+
+}

+ 73 - 0
web/health/src/main/java/com/gyee/frame/common/exception/file/InvalidExtensionException.java

@@ -0,0 +1,73 @@
+package com.gyee.frame.common.exception.file;
+
+import java.util.Arrays;
+import org.apache.commons.fileupload.FileUploadException;
+
+/**
+ * 文件上传 误异常类
+ * 
+ * @author gyee
+ */
+public class InvalidExtensionException extends FileUploadException
+{
+
+    private static final long serialVersionUID = 1L;
+
+    private String[] allowedExtension;
+    private String extension;
+    private String filename;
+
+    public InvalidExtensionException(String[] allowedExtension, String extension, String filename)
+    {
+        super("filename : [" + filename + "], extension : [" + extension + "], allowed extension : [" + Arrays.toString(allowedExtension) + "]");
+        this.allowedExtension = allowedExtension;
+        this.extension = extension;
+        this.filename = filename;
+    }
+
+    public String[] getAllowedExtension()
+    {
+        return allowedExtension;
+    }
+
+    public String getExtension()
+    {
+        return extension;
+    }
+
+    public String getFilename()
+    {
+        return filename;
+    }
+
+    public static class InvalidImageExtensionException extends InvalidExtensionException
+    {
+        private static final long serialVersionUID = 1L;
+
+        public InvalidImageExtensionException(String[] allowedExtension, String extension, String filename)
+        {
+            super(allowedExtension, extension, filename);
+        }
+    }
+
+    public static class InvalidFlashExtensionException extends InvalidExtensionException
+    {
+        private static final long serialVersionUID = 1L;
+
+        public InvalidFlashExtensionException(String[] allowedExtension, String extension, String filename)
+        {
+            super(allowedExtension, extension, filename);
+        }
+    }
+
+    public static class InvalidMediaExtensionException extends InvalidExtensionException
+    {
+        private static final long serialVersionUID = 1L;
+
+        public InvalidMediaExtensionException(String[] allowedExtension, String extension, String filename)
+        {
+            super(allowedExtension, extension, filename);
+        }
+    }
+
+}

+ 61 - 0
web/health/src/main/java/com/gyee/frame/common/feign/IAdapterService.java

@@ -0,0 +1,61 @@
+package com.gyee.frame.common.feign;
+
+import com.alibaba.fastjson.JSONObject;
+import com.gyee.frame.common.domain.AjaxResult;
+import com.gyee.frame.model.custom.export.TsPointData;
+import feign.Headers;
+import feign.Param;
+import feign.RequestLine;
+
+import java.util.List;
+
+
+public interface IAdapterService {
+
+
+    @Headers({"Content-Type: application/json", "Accept: application/json"})
+    @RequestLine("GET /ts/latest?keys={points}")
+    JSONObject getLatest(@Param(value = "points") String points);
+
+
+    @Headers({"Content-Type: application/json", "Accept: application/json"})
+    @RequestLine("GET /ts/history/snap?tagName={tagName}&startTs={startTs}&endTs={endTs}&interval={interval}")
+    List<TsPointData> getHistorySnap(@Param(value = "tagName") String tagName, @Param(value = "startTs") long startTs,
+                                     @Param(value = "endTs") long endTs, @Param(value = "interval") Integer interval);
+
+    @Headers({"Content-Type: application/json", "Accept: application/json"})
+    @RequestLine("GET /ts/history/raw?tagName={tagName}&startTs={startTs}&endTs={endTs}")
+    List<TsPointData> getHistoryRaw(@Param(value = "tagName") String tagName, @Param(value = "startTs") long startTs,
+                                    @Param(value = "endTs") long endTs);
+
+    @Headers({"Content-Type: application/json", "Accept: application/json"})
+    @RequestLine("GET /ts/history/section?tagNames={tagNames}&ts={ts}")
+    List<TsPointData> getHistorySection(@Param(value = "tagNames") String tagNames, @Param(value = "ts") long ts);
+
+    @Headers({"Content-Type: application/json", "Accept: application/json"})
+    @RequestLine("GET /alarm/count/query/new2?stationid={stationid}&startdate={startdate}&enddate={enddate}")
+    AjaxResult getEarlyWarning(@Param(value = "stationid") String stationid, @Param(value = "startdate") String startdate,
+                               @Param(value = "enddate") String enddate);
+
+    @Headers({"Content-Type: application/json", "Accept: application/json"})
+    @RequestLine("GET /shutdown/list?stId={stId}&endDate={endDate}&startDate={startDate}")
+    AjaxResult getHith(@Param(value = "stId") String stId, @Param(value = "endDate") String endDate,
+                       @Param(value = "startDate") String startDate);
+
+    @Headers({"Content-Type: application/json", "Accept: application/json"})
+    @RequestLine("GET /alarm/history/page2?pagenum={pagenum}&pagesize={pagesize}&stationid={stationid}&windturbineid={windturbineid}" +
+            "&category1={category1}&category2={category2}&rank={rank}&modelid={modelid}&snapid={snapid}&messagetype={messagetype}" +
+            "&keyword={keyword}&starttime={starttime}&endtime={endtime}")
+    AjaxResult getPage(@Param(value = "pagenum") Integer pagenum, @Param(value = "pagesize") Integer pagesize,
+                       @Param(value = "stationid") String stationid,
+                       @Param(value = "windturbineid") String windturbineid,
+                       @Param(value = "category1") String category1,
+                       @Param(value = "category2") String category2,
+                       @Param(value = "rank") String rank,
+                       @Param(value = "modelid") String modelid,
+                       @Param(value = "snapid") Long snapid,
+                       @Param(value = "messagetype") Integer messagetype,
+                       @Param(value = "keyword") String keyword,
+                       @Param(value = "starttime") String starttime,
+                       @Param(value = "endtime") String endtime);
+}

+ 38 - 0
web/health/src/main/java/com/gyee/frame/common/feign/RemoteServiceBuilder.java

@@ -0,0 +1,38 @@
+package com.gyee.frame.common.feign;
+
+import com.gyee.frame.common.conf.GyeeConfig;
+import feign.Feign;
+import feign.Request;
+import feign.Retryer;
+import feign.jackson.JacksonDecoder;
+import feign.jackson.JacksonEncoder;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+
+@Slf4j
+@Configuration
+public class RemoteServiceBuilder {
+
+    @Bean
+    public IAdapterService ShardingService() {
+        return Feign.builder()
+                .encoder(new JacksonEncoder())
+                .decoder(new JacksonDecoder())
+                .options(new Request.Options(5000, 600000))
+                .retryer(new Retryer.Default(10000, 10000, 3))
+                .target(IAdapterService.class, GyeeConfig.getAdapterUrl());
+    }
+
+    @Bean
+    public IAdapterService earlyService() {
+        return Feign.builder()
+                .encoder(new JacksonEncoder())
+                .decoder(new JacksonDecoder())
+                .options(new Request.Options(5000, 600000))
+                .retryer(new Retryer.Default(10000, 10000, 3))
+                .target(IAdapterService.class, GyeeConfig.getAlarmUrl());
+    }
+
+}

+ 83 - 0
web/health/src/main/java/com/gyee/frame/common/file/ClassUtil.java

@@ -0,0 +1,83 @@
+package com.gyee.frame.common.file;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @Author:
+ * @Date:
+ * @Description:关于类的操作的工具类
+ */
+public final class ClassUtil {
+
+    private ClassUtil() {
+        throw new Error("工具类不允许实例化!");
+    }
+
+    /**
+     * 获取类属性
+     * @param targetObj 要获取属性的类
+     * @return 含有类属性的集合
+     */
+    public static Field[] getClassAttribute(Object targetObj){
+
+        Class<?> objectClass = targetObj.getClass();
+        return objectClass.getDeclaredFields();
+
+    }
+
+    /**
+     * 获取对象的所有get或set方法
+     * @param targetObj 要获取属性的类
+     * @param methodKeyword get或者set关键字
+     * @return 含有类get或set方法的集合
+     */
+    public static List<Method> getMethod(Object targetObj,String methodKeyword){
+        List<Method> methodList = new ArrayList<>();
+
+        Class<?> objectClass = targetObj.getClass();
+
+        Field[] field = objectClass.getDeclaredFields();
+        for (int i = 0;i<field.length;i++){
+
+            if(!field[i].getName().equals("serialVersionUID"))
+            {
+
+                //获取属性名并组装方法名
+                String fieldName = field[i].getName();
+                String getMethodName = methodKeyword
+                        + fieldName.substring(0, 1).toUpperCase()
+                        + fieldName.substring(1);
+
+                try {
+                    Method method = objectClass.getMethod(getMethodName,new Class[]{});
+                    methodList.add(method);
+                } catch (NoSuchMethodException e) {
+                    e.printStackTrace();
+                }
+
+            }
+        }
+        return methodList;
+    }
+
+    /**
+     * 获取对象的所有get方法
+     * @param targetObj 要获取属性的类
+     * @return 含有类方法的集合
+     */
+    public static List<Method> getMethodGet(Object targetObj){
+        return getMethod(targetObj,"get");
+    }
+
+    /**
+     * 获取对象的所有set方法
+     * @param targetObj 要获取属性的类
+     * @return 含有类方法的集合
+     */
+    public static List<Method> getMethodSet(Object targetObj){
+        return getMethod(targetObj,"set");
+    }
+}

+ 272 - 0
web/health/src/main/java/com/gyee/frame/common/file/ExcelExport.java

@@ -0,0 +1,272 @@
+package com.gyee.frame.common.file;
+
+import com.gyee.frame.util.StringUtils;
+import org.apache.poi.hssf.usermodel.HSSFCellStyle;
+import org.apache.poi.hssf.usermodel.HSSFFont;
+import org.apache.poi.hssf.usermodel.HSSFSheet;
+import org.apache.poi.hssf.usermodel.HSSFWorkbook;
+import org.apache.poi.ss.usermodel.Cell;
+import org.apache.poi.ss.usermodel.CellType;
+import org.apache.poi.ss.usermodel.HorizontalAlignment;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.util.CellRangeAddress;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.lang.reflect.Field;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @Author:
+ * @Date:
+ * @Description:Excel导出工具类,依赖于ClassUtil工具类
+ */
+public final class ExcelExport {
+
+    /**
+     * 将传入的数据导出excel表并下载
+     * @param response 返回的HttpServletResponse
+     * @param importlist 要导出的对象的集合
+     * @param attributeNames 含有每个对象属性在excel表中对应的标题字符串的数组(请按对象中属性排序调整字符串在数组中的位置)
+     * @param heardName 导出文件 标题名称
+     * @param cnt 合并单元格数 (一般标题字符串的数组长度-1)
+     */
+    public static void export(HttpServletResponse response, List<?> importlist, String[] attributeNames,
+                              String heardName, int cnt ) {
+        //获取数据集
+        List<?> datalist = importlist;
+
+        //声明一个工作薄
+        HSSFWorkbook workbook = new HSSFWorkbook();
+        //生成一个表格
+        HSSFSheet sheet = workbook.createSheet();
+        //设置表格默认列宽度为15个字节
+        sheet.setDefaultColumnWidth((short) 18);
+        //用于设置表格字体
+        HSSFCellStyle style = workbook.createCellStyle();
+
+        //获取字段名数组
+        String[] tableAttributeName = attributeNames;
+        //获取对象属性
+        Field[] fields = ClassUtil.getClassAttribute(importlist.get(0));
+        //获取对象get方法
+        List<Method> methodList = ClassUtil.getMethodGet(importlist.get(0));
+
+        //设置标题样式
+        HSSFCellStyle headerStyle = workbook.createCellStyle();
+        HSSFFont headerFont = workbook.createFont();
+        headerFont.setFontHeightInPoints((short) 14);
+        headerFont.setBold(true);
+        headerStyle.setAlignment(HorizontalAlignment.CENTER);
+        headerStyle.setFont(headerFont);
+        CellRangeAddress cra0 = new CellRangeAddress(0, 1, 0, cnt);// 合并单元格
+        sheet.addMergedRegion(cra0);
+        //创建标标题题
+        Row row = sheet.createRow(0);
+        Cell cell1 = row.createCell(0);
+        cell1.setCellValue(heardName);
+        cell1.setCellStyle(headerStyle);
+
+        // 设置字体样式
+        HSSFFont titleFont = workbook.createFont();
+        titleFont.setBold(true);
+        titleFont.setFontHeightInPoints((short) 10);
+
+        style.setFont(titleFont);
+        style.setAlignment(HorizontalAlignment.CENTER);
+        //循环字段名数组,创建标题行
+        row = sheet.createRow(2);
+        for (int j = 0; j< tableAttributeName.length; j++){
+            //创建列
+            Cell cell = row.createCell(j);
+            cell.setCellStyle(style);
+            //设置单元类型为String
+            cell.setCellType(CellType.STRING);
+            cell.setCellValue(transCellType(tableAttributeName[j]));
+        }
+        //创建普通行
+        for (int i = 0;i<datalist.size();i++){
+            //因为第一行已经用于创建标题行,故从第二行开始创建
+            row = sheet.createRow(i+3);
+            //如果是第一行就让其为标题行
+            Object targetObj = datalist.get(i);
+            for (int j = 0;j<fields.length;j++){
+                //创建列
+                Cell cell = row.createCell(j);
+                cell.setCellType(CellType.STRING);
+                //
+                try {
+                    Object value = methodList.get(j).invoke(targetObj, new Object[]{});
+                    cell.setCellValue(transCellType(value));
+                } catch (IllegalAccessException e) {
+                    e.printStackTrace();
+                } catch (InvocationTargetException e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+        response.setContentType("application/octet-stream");
+        //默认Excel名称
+        response.setHeader("Content-Disposition", "attachment;fileName="+"test.xls");
+        try {
+            OutputStream outputStream = response.getOutputStream();
+            workbook.write(outputStream);
+            outputStream.flush();
+            outputStream.close();
+
+//            response.flushBuffer();
+//            workbook.write(response.getOutputStream());
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+
+    }
+
+
+
+    /**
+     * 将传入的数据导出excel表并下载
+     * @param importlist 要导出的对象的集合
+     * @param attributeNames 含有每个对象属性在excel表中对应的标题字符串的数组(请按对象中属性排序调整字符串在数组中的位置)
+     * @param heardName 导出文件 标题名称
+     * @param cnt 合并单元格数 (一般标题字符串的数组长度-1)
+     * @param filename 文件名称
+     */
+    public static void exportToPath( List<?> importlist, String[] attributeNames,
+                              String heardName, int cnt,String filename ) throws IOException {
+        //获取数据集
+        List<?> datalist = importlist;
+
+        //声明一个工作薄
+        HSSFWorkbook workbook = new HSSFWorkbook();
+        //生成一个表格
+        HSSFSheet sheet = workbook.createSheet();
+        //设置表格默认列宽度为15个字节
+        sheet.setDefaultColumnWidth((short) 18*2);
+        //用于设置表格字体
+        HSSFCellStyle style = workbook.createCellStyle();
+
+        //获取字段名数组
+        String[] tableAttributeName = attributeNames;
+        //获取对象属性
+        Field[] fields = ClassUtil.getClassAttribute(importlist.get(0));
+        //获取对象get方法
+        List<Method> methodList = ClassUtil.getMethodGet(importlist.get(0));
+
+        //设置标题样式
+        HSSFCellStyle headerStyle = workbook.createCellStyle();
+        HSSFFont headerFont = workbook.createFont();
+        headerFont.setFontHeightInPoints((short) 14);
+        headerFont.setBold(true);
+        headerStyle.setAlignment(HorizontalAlignment.CENTER);
+        headerStyle.setFont(headerFont);
+//        CellRangeAddress cra0 = new CellRangeAddress(0, 1, 0, cnt);// 合并单元格
+//        sheet.addMergedRegion(cra0);
+//        //创建标标题题
+//        Row row = sheet.createRow(0);
+//        Cell cell1 = row.createCell(0);
+//        cell1.setCellValue(heardName);
+//        cell1.setCellStyle(headerStyle);
+
+        // 设置字体样式
+        HSSFFont titleFont = workbook.createFont();
+        titleFont.setBold(true);
+        titleFont.setFontHeightInPoints((short) 10);
+
+        style.setFont(titleFont);
+        style.setAlignment(HorizontalAlignment.CENTER);
+        //循环字段名数组,创建标题行
+        Row row = sheet.createRow(0);
+        for (int j = 0; j< tableAttributeName.length; j++){
+            //创建列
+            Cell cell = row.createCell(j);
+            cell.setCellStyle(style);
+            //设置单元类型为String
+            cell.setCellType(CellType.STRING);
+            cell.setCellValue(transCellType(tableAttributeName[j]));
+        }
+
+        int index = 0;
+        //创建普通行
+        for (int i = 0;i<datalist.size();i++){
+            //因为第一行已经用于创建标题行,故从第二行开始创建
+
+
+            if ((i + 1) % 65535 == 0) {
+                sheet = workbook.createSheet("sheet" + (index+1));
+                row = sheet.createRow(0);
+                for (int j = 0; j< tableAttributeName.length; j++){
+                    //创建列
+                    Cell cell = row.createCell(j);
+                    cell.setCellStyle(style);
+                    //设置单元类型为String
+                    cell.setCellType(CellType.STRING);
+                    cell.setCellValue(transCellType(tableAttributeName[j]));
+                }
+                index++;
+            }
+            row = sheet.createRow((i + 1) - (index * 65535));
+
+            //如果是第一行就让其为标题行
+            Object targetObj = datalist.get(i);
+            for (int j = 0;j<fields.length;j++){
+
+                if(!fields[j].getName().equals("serialVersionUID"))
+                {
+                    //创建列
+                    Cell cell = row.createCell(j);
+                    cell.setCellType(CellType.STRING);
+                    //
+                    try {
+                        Object value = methodList.get(j).invoke(targetObj, new Object[]{});
+                        cell.setCellValue(transCellType(value));
+                    } catch (IllegalAccessException e) {
+                        e.printStackTrace();
+                    } catch (InvocationTargetException e) {
+                        e.printStackTrace();
+                    }
+                }
+
+            }
+        }
+
+        if(StringUtils.notEmp(filename))
+        {
+            StringBuilder sb=new StringBuilder("/usr/local/gyee/monitor/");
+            sb.append(filename);
+            sb.append(".xls");
+
+            FileUtils.deleteFile(String.valueOf(sb));
+
+            FileOutputStream fileOutputStream = new FileOutputStream(String.valueOf(sb));
+
+            workbook.write(fileOutputStream);
+            fileOutputStream.close();
+
+        }
+
+    }
+    private static String transCellType(Object value){
+        String str = null;
+        if (value instanceof Date){
+            Date date = (Date) value;
+            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+            str = sdf.format(date);
+        }else{
+            str = String.valueOf(value);
+            if (str == "null"){
+                str = "";
+            }
+        }
+
+        return str;
+    }
+
+
+}

+ 179 - 0
web/health/src/main/java/com/gyee/frame/common/file/FileUploadUtils.java

@@ -0,0 +1,179 @@
+package com.gyee.frame.common.file;
+
+import java.io.File;
+import java.io.IOException;
+import org.apache.commons.fileupload.FileUploadBase.FileSizeLimitExceededException;
+import org.apache.shiro.crypto.hash.Md5Hash;
+import org.springframework.util.ClassUtils;
+import org.springframework.web.multipart.MultipartFile;
+import com.gyee.frame.common.conf.FileConfig;
+import com.gyee.frame.common.conf.GyeeConfig;
+import com.gyee.frame.common.exception.file.FileNameLengthLimitExceededException;
+import com.gyee.frame.util.StringUtils;
+
+/**
+ * 文件上传工具类
+ * @author gyee
+ * @date: 2018年9月22日 下午10:33:23
+ */
+public class FileUploadUtils {
+
+    private FileUploadUtils(){}
+    
+    /**
+     * spring.servlet.multipart.maxFileSize
+     */
+    public static  long DEFAULT_MAX_SIZE=Long.valueOf(FileConfig.getMaxFileSize())*1024*1024;
+    /**
+     * 默认上传的地址
+     */
+    private static String defaultBaseDir = GyeeConfig.getDefaultBaseDir();
+    
+    /**
+     * 是否上传到static
+     */
+    private static String isstatic= GyeeConfig.getIsstatic();
+    
+    /**
+     * 默认的文件名最大长度
+     */
+    public static final int DEFAULT_FILE_NAME_LENGTH = 100;
+    /**
+     * 默认文件类型jpg
+     */
+    public static final String IMAGE_JPG_EXTENSION = ".jpg";
+
+    private static int counter = 0;
+
+    public static void setDefaultBaseDir(String defaultBaseDir)
+    {
+        FileUploadUtils.defaultBaseDir = defaultBaseDir;
+    }
+
+    public static String getDefaultBaseDir()
+    {
+        return defaultBaseDir;
+    }
+
+    public static String getIsstatic() {
+		return isstatic;
+	}
+
+	public static void setIsstatic(String isstatic) {
+		FileUploadUtils.isstatic = isstatic;
+	}
+	
+	/**
+	 * 静态文件上传后存放的目录
+	 */
+	public static String getRoot_dir() {
+		String url=ClassUtils.getDefaultClassLoader().getResource("").getPath()+ GyeeConfig.getIsroot_dir();
+		return url;
+	}
+
+
+	/**
+     * 以默认配置进行文件上传
+     *
+     * @param file 上传的文件
+     * @return 文件名称
+     * @throws Exception
+     */
+    public static final String upload(MultipartFile file) throws IOException
+    {
+        try
+        {
+        	if("Y".equals(getIsstatic())) {//获取根目录
+        		
+        		 return upload(getRoot_dir(), file);
+        	}else {//自定义目录
+        		 return upload(getDefaultBaseDir(), file);
+        	}
+        }
+        catch (Exception e)
+        {
+            throw new IOException(e);
+        }
+    }
+
+    /**
+     * 文件上传
+     *
+     * @param baseDir 相对应用的基目录
+     * @param file 上传的文件
+     * @param needDatePathAndRandomName 是否需要日期目录和随机文件名前缀
+     * @param extension 上传文件类型
+     * @return 返回上传成功的文件名
+     * @throws FileSizeLimitExceededException 如果超出最大大小
+     * @throws FileNameLengthLimitExceededException 文件名太长
+     * @throws IOException 比如读写文件出错时
+     */
+    public static final String upload(String baseDir, MultipartFile file)
+            throws FileSizeLimitExceededException, IOException, FileNameLengthLimitExceededException
+    {
+    	String fileName=file.getOriginalFilename();
+    	// 获得文件后缀名称
+    	String suffixName = fileName.substring(fileName.lastIndexOf(".")).toLowerCase();
+    	if(StringUtils.isEmpty(suffixName)) {
+    		//如果没有后缀默认后缀
+    		suffixName=FileUploadUtils.IMAGE_JPG_EXTENSION;
+    	}
+    	
+        int fileNamelength = fileName.length();
+        if (fileNamelength > FileUploadUtils.DEFAULT_FILE_NAME_LENGTH)
+        {
+            throw new FileNameLengthLimitExceededException(fileName, fileNamelength,
+                    FileUploadUtils.DEFAULT_FILE_NAME_LENGTH);
+        }
+
+        assertAllowed(file);
+
+        String new_fileName = encodingFilename(fileName, suffixName);
+
+        File desc = getAbsoluteFile(baseDir, baseDir + new_fileName);
+        file.transferTo(desc);
+        return new_fileName;
+    }
+
+    private static final File getAbsoluteFile(String uploadDir, String filename) throws IOException
+    {
+        File desc = new File(File.separator + filename);
+
+        if (!desc.getParentFile().exists())
+        {
+            desc.getParentFile().mkdirs();
+        }
+        if (!desc.exists())
+        {
+            desc.createNewFile();
+        }
+        return desc;
+    }
+
+    /**
+     * 编码文件名
+     */
+    private static final String encodingFilename(String filename, String extension)
+    {
+        filename = filename.replace("_", " ");
+        filename = new Md5Hash(filename + System.nanoTime() + counter++).toHex().toString() + extension;
+        return filename;
+    }
+
+    /**
+     * 文件大小校验
+     *
+     * @param file 上传的文件
+     * @return
+     * @throws FileSizeLimitExceededException 如果超出最大大小
+     */
+    public static final void assertAllowed(MultipartFile file) throws FileSizeLimitExceededException
+    {
+        long size = file.getSize();
+        if (DEFAULT_MAX_SIZE != -1 && size > DEFAULT_MAX_SIZE)
+        {
+            throw new FileSizeLimitExceededException("超过默认大小", size, DEFAULT_MAX_SIZE);
+        }
+    }
+
+}

+ 110 - 0
web/health/src/main/java/com/gyee/frame/common/file/FileUtils.java

@@ -0,0 +1,110 @@
+package com.gyee.frame.common.file;
+
+import org.apache.poi.ss.usermodel.Workbook;
+import org.apache.poi.ss.usermodel.WorkbookFactory;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.util.ClassUtils;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.*;
+
+/**
+ * 文件处理工具类
+ *
+ * @author gyee
+ * @date: 2018年9月22日 下午10:33:31
+ */
+public class FileUtils {
+
+    // 设置目标文件的映射路径
+    @Value("classpath:static/syz")
+    private Resource syz;
+
+    private FileUtils() {
+    }
+
+    /**
+     * 输出指定文件的byte数组
+     *
+     * @return
+     */
+    public static void writeBytes(String filePath, OutputStream os) throws IOException {
+        FileInputStream fis = null;
+        try {
+            File file = new File(filePath);
+            if (!file.exists()) {
+                throw new FileNotFoundException(filePath);
+            }
+            fis = new FileInputStream(file);
+            byte[] b = new byte[1024];
+            int length;
+            while ((length = fis.read(b)) > 0) {
+                os.write(b, 0, length);
+            }
+        } catch (IOException e) {
+            throw e;
+        } finally {
+            if (os != null) {
+                try {
+                    os.close();
+                } catch (IOException e1) {
+                    e1.printStackTrace();
+                }
+            }
+            if (fis != null) {
+                try {
+                    fis.close();
+                } catch (IOException e1) {
+                    e1.printStackTrace();
+                }
+            }
+        }
+    }
+
+    /**
+     * 删除文件
+     *
+     * @param filePath 文件
+     * @return
+     */
+    public static boolean deleteFile(String filePath) {
+        boolean flag = false;
+        File file = new File(filePath);
+        // 路径为文件且不为空则进行删除
+        if (file.isFile() && file.exists()) {
+            file.delete();
+            flag = true;
+        }
+        return flag;
+    }
+
+    /**
+     * 读取图片地址 输出到页面
+     *
+     * @param request
+     * @param response
+     * @param fileurl
+     * @throws IOException
+     */
+    public static void readIMGTohtml(HttpServletRequest request, HttpServletResponse response, String fileurl) throws IOException {
+        //设置发送到客户端的响应内容类型
+        response.setContentType("image/*");
+        //读取本地图片输入流
+        try (FileInputStream inputStream = new FileInputStream(fileurl); OutputStream out = response.getOutputStream()) {
+            int i = inputStream.available();
+            //byte数组用于存放图片字节数据
+            byte[] buff = new byte[i];
+            inputStream.read(buff);
+            out.write(buff);
+        }
+    }
+
+
+
+
+
+
+
+}

+ 157 - 0
web/health/src/main/java/com/gyee/frame/common/interceptor/MyInterceptor.java

@@ -0,0 +1,157 @@
+package com.gyee.frame.common.interceptor;
+
+import cn.hutool.core.util.StrUtil;
+import com.gyee.frame.common.conf.GyeeConfig;
+import com.gyee.frame.common.exception.demo.DemoModeException;
+import org.springframework.web.servlet.HandlerInterceptor;
+import org.springframework.web.servlet.ModelAndView;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
+import java.util.List;
+/**
+ * 自定义拦截器
+ * @author fc
+ *
+ */
+public class MyInterceptor  implements HandlerInterceptor {
+
+	/*************演示模式需要 start*************/
+	/**需要被拦截的post请求url**/
+	public static List<String> posturllist=new ArrayList<String>();
+	/**需要被拦截的get请求url**/
+	public static List<String> geturllist=new ArrayList<String>();
+
+	/**
+	 * 初始化静态块,避免多次创建调用
+	 * 需要拦截的请求集合
+	 */
+	static {
+		//用户POST请求
+		posturllist.add("/UserController/add");
+		posturllist.add("/UserController/remove");
+		posturllist.add("/UserController/edit");
+		posturllist.add("/UserController/editPwd");
+		//自动生成POST请求
+		posturllist.add("/autoCodeController/addGlobal");
+		posturllist.add("/autoCodeController/saveOne");
+		//字典表POST请求
+		posturllist.add("/DictDataController/add");
+		posturllist.add("/DictDataController/remove");
+		posturllist.add("/DictDataController/edit");
+		posturllist.add("/DictTypeController/add");
+		posturllist.add("/DictTypeController/remove");
+		posturllist.add("/DictTypeController/edit");
+		//邮箱POST请求
+		posturllist.add("/EmailController/add");
+		posturllist.add("/EmailController/edit");
+		//文件上传POST请求
+		posturllist.add("/FileController/upload");
+		posturllist.add("/FileController/add");
+		posturllist.add("/FileController/remove");
+		posturllist.add("/FileController/del_file");
+		posturllist.add("/FileController/edit");
+		//日志POST请求
+		posturllist.add("/LogController/remove");
+		//权限POST请求
+		posturllist.add("/PermissionController/add");
+		posturllist.add("/PermissionController/remove");
+		posturllist.add("/PermissionController/edit");
+
+		//角色POST请求
+		posturllist.add("/RoleController/add");
+		posturllist.add("/RoleController/remove");
+		posturllist.add("/RoleController/edit");
+		//公告POST请求
+		posturllist.add("/SysNoticeController/add");
+		posturllist.add("/SysNoticeController/remove");
+		posturllist.add("/SysNoticeController/viewinfo");
+		posturllist.add("/SysNoticeController/edit");
+		//省份POST请求
+		posturllist.add("/SysProvinceController/add");
+		posturllist.add("/SysProvinceController/remove");
+		posturllist.add("/SysProvinceController/edit");
+		//地区POST请求
+		posturllist.add("/SysAreaController/add");
+		posturllist.add("/SysAreaController/remove");
+		posturllist.add("/SysAreaController/edit");
+		//城市POST请求
+		posturllist.add("/SysCityController/add");
+		posturllist.add("/SysCityController/remove");
+		posturllist.add("/SysCityController/edit");
+		//街道POST请求
+		posturllist.add("/SysStreetController/add");
+		posturllist.add("/SysStreetController/remove");
+		posturllist.add("/SysStreetController/edit");
+		//百度编辑器POST请求
+		posturllist.add("/UeditorController/ueditor");
+		posturllist.add("/UeditorController/");
+		posturllist.add("/UeditorController/imgUpload");
+
+	}
+	/*************演示模式需要 end*************/
+	@Override
+	public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)throws Exception {
+		// //System.out.println(">>>MyInterceptor1>>>>>>>在整个请求结束之后被调用,也就是在DispatcherServlet 渲染了对应的视图之后执行(主要是用于进行资源清理工作)");
+	}
+
+	@Override
+	public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)throws Exception {
+		// //System.out.println(">>>MyInterceptor1>>>>>>>请求处理之后进行调用,但是在视图被渲染之前(Controller方法调用之后)");
+	}
+
+	@Override
+	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object arg2) throws Exception {
+		//String url2=request.getScheme()+"://"+ request.getServerName();
+		////System.out.println("xxxxxxxxx==="+"http://localhost:8081/");
+		////System.out.println(">>>MyInterceptor1>>>>>>>在请求处理之前进行调用(Controller方法调用之前)");
+		//设置前端的全局 地址,如果前端网页错乱请修改这儿
+
+		// by Wang Jiawen 2020-01-07 临时补丁  调试需要暂时取消shiro大管家的登入限制
+//		TsysUser user = new TsysUser("1","admin","admin","管理员");
+//		Subject currentUser = SecurityUtils.getSubject();
+//		UsernamePasswordToken token =new UsernamePasswordToken("admin",user.getPassword());
+//		token.setRememberMe(true);
+//		currentUser.login(token);
+		//结束
+
+
+		request.setAttribute("rootPath", request.getContextPath());
+		if(GyeeConfig.getDemoEnabled().equals("true")) {
+			Boolean b = ifurl(request, response);
+			if(b) {
+				throw new DemoModeException();
+			}
+		}
+		return true;// 只有返回true才会继续向下执行,返回false取消当前请求
+	}
+
+	/**
+	 * 判断是否需要拦截的用于展示演示模式
+	 * @param request
+	 * @param response
+	 * @return
+	 * @author gyee
+	 * @Date 2019年11月11日 下午5:17:30
+	 */
+	public Boolean ifurl(HttpServletRequest request, HttpServletResponse response) {
+		//当前请求
+		String requesturl=request.getRequestURI();
+		if(request.getMethod().equals("POST")) {
+			for (String postrul : posturllist) {
+				if(StrUtil.containsAnyIgnoreCase(requesturl, postrul)) {
+					return true;
+				}
+			}
+		}else {
+			for (String geturl : geturllist) {
+				if(StrUtil.containsAnyIgnoreCase(requesturl, geturl)) {
+					return true;
+				}
+			}
+		}
+
+		return false;
+	}
+}

+ 108 - 0
web/health/src/main/java/com/gyee/frame/common/interceptor/MyWebAppConfigurer.java

@@ -0,0 +1,108 @@
+package com.gyee.frame.common.interceptor;
+
+import com.gyee.frame.common.conf.GyeeConfig;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.servlet.config.annotation.*;
+
+/**
+ * 拦截器
+* @ClassName: MyWebAppConfigurer
+* @author gyee
+* @date 2018年6月3日
+*
+ */
+@Configuration
+public class MyWebAppConfigurer  extends  WebMvcConfigurationSupport  {
+	
+	private static Logger logger=LoggerFactory.getLogger(WebMvcConfigurationSupport.class);
+	/**
+     * 默认上传的地址
+     */
+    private  String defaultBaseDir = GyeeConfig.getDefaultBaseDir();
+    
+    /**
+     * 静态文件夹后目录
+     */
+    private  String isrootDir= GyeeConfig.getIsroot_dir();
+    
+    /**
+     * 是否上传到static
+     */
+    private   String isstatic= GyeeConfig.getIsstatic();
+	
+	
+	/** 解决跨域问题 **/
+	@Override
+	public void addCorsMappings(CorsRegistry registry){
+
+
+        registry.addMapping("/**")
+			// 设置允许跨域请求的域名
+			.allowedOrigins("*")
+			// 是否允许证书
+			.allowCredentials(true)
+			// 设置允许的方法
+			.allowedMethods("GET", "POST", "DELETE", "PUT")
+			// 设置允许的header属性
+			.allowedHeaders("*")
+				// 跨域允许时间
+			.maxAge(3600);
+			super.addCorsMappings(registry);
+
+	}
+	
+	/** 添加拦截器 **/
+	@Override
+	protected void addInterceptors(InterceptorRegistry registry){
+		registry.addInterceptor(new MyInterceptor());
+		super.addInterceptors(registry);
+	}
+	
+	/** 这里配置视图解析器 **/
+	@Override
+	protected void configureViewResolvers(ViewResolverRegistry registry){
+		super.configureViewResolvers(registry);
+	}
+	
+	/** 配置内容裁决的一些选项 **/
+	@Override
+	protected void configureContentNegotiation(ContentNegotiationConfigurer configurer){
+		super.configureContentNegotiation(configurer);
+	}
+	
+	/** 视图跳转控制器 **/
+	@Override
+	protected void addViewControllers(ViewControllerRegistry registry) {
+		
+		super.addViewControllers(registry);
+	}
+	
+	
+	/** 静态资源处理 **/
+	@Override
+    protected void addResourceHandlers(ResourceHandlerRegistry registry) {
+		//配置虚拟路径为项目得static下面
+        registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
+        if(!"Y".equals(isstatic)) {
+        	 //配置上传路径为D盘
+            registry.addResourceHandler("/static/file_upload/**").addResourceLocations("file:"+defaultBaseDir);
+            logger.info("初始化文件上传路径为项目【"+defaultBaseDir+"】路径");
+        }else {
+        	logger.info("初始化文件上传路径为项目【"+isrootDir+"】路径");
+        }
+       
+    }
+	/** 默认静态资源处理器 **/
+	
+	protected void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
+		//super.configureDefaultServletHandling(configurer);
+		//configurer.enable("stati");
+		configurer.enable();
+	}
+	
+	
+	
+	
+}

+ 31 - 0
web/health/src/main/java/com/gyee/frame/common/log/Log.java

@@ -0,0 +1,31 @@
+package com.gyee.frame.common.log;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * 自定义操作日志记录注解
+ * @author gyee
+ * @date: 2018年9月30日 下午3:36:05
+ */
+@Target({ ElementType.PARAMETER, ElementType.METHOD })
+@Retention(RetentionPolicy.RUNTIME)
+@Documented
+public @interface Log
+{
+    /** 模块 */
+    String title() default "";
+
+    /** 功能 */
+    String action() default "";
+
+    /** 渠道 */
+    String channel() default "1";//1后台
+
+    /** 是否保存请求的参数 */
+    boolean isSaveRequestData() default true;
+
+}

文件差异内容过多而无法显示
+ 592 - 0
web/health/src/main/java/com/gyee/frame/common/spring/Constant.java


+ 397 - 0
web/health/src/main/java/com/gyee/frame/common/spring/ConstantTR.java

@@ -0,0 +1,397 @@
+package com.gyee.frame.common.spring;
+
+/**
+ * 
+ * 
+ * 项目名称:nxfd 类名称:Constant 类描述: 创建人:石林 创建时间:2014-3-4 上午10:07:03 修改人:shilinno1
+ * 修改时间:2014-3-4 上午10:07:03 修改备注:
+ * 
+ * @version
+ * 
+ */
+public class ConstantTR {
+
+	public static final String QSZSWDL = "JSFW.NX_GD_XXX_XX_XX_XXX_XXX_CI0136"; // 全省上网电量
+	public static final String AQTS = "HB_GD_QYG_JS_XX_XX_XXX_CI0182"; // 全省安全天数
+	public static final String QSZZGL = "JSFW.NX_GD_XXX_XX_XX_XXX_XXX_CI0135"; // 全省总功率
+	public static final String QSZRFDL = "JSFW.NX_GD_XXX_XX_XX_XXX_XXX_CI0088"; // 全省日累计发电量
+	public static final String QSZYFDL = "JSFW.NX_GD_XXX_XX_XX_XXX_XXX_CI0146"; // 全省月累计发电量
+	public static final String QSZNFDL = "JSFW.NX_GD_XXX_XX_XX_XXX_XXX_CI0037"; // 全省年累计发电量
+
+	public static final String FCRFDL = "JSFW.NX_GD_FDC_XX_XX_XXX_XXX_CI0088"; // 风场日累计发电量
+	public static final String FCYFDL = "JSFW.NX_GD_FDC_XX_XX_XXX_XXX_CI0146"; // 风场月累计发电量
+	public static final String FCNFDL = "JSFW.NX_GD_FDC_XX_XX_XXX_XXX_CI0037"; // 风场年累计发电量
+	public static final String GFRFDL = "JSFW.NX_GD_GDC_XX_XX_XXX_XXX_CI0088"; // 光伏日累计发电量
+	public static final String GFYFDL = "JSFW.NX_GD_GDC_XX_XX_XXX_XXX_CI0146"; // 光伏月累计发电量
+	public static final String GFNFDL = "JSFW.NX_GD_GDC_XX_XX_XXX_XXX_CI0037"; // 光伏年累计发电量
+	public static final String JPEYHT = "JSFW.NX_GD_XXX_XX_XX_XXX_XXX_CI0216"; // 减排二氧化碳
+	public static final String JYBM = "JSFW.NX_GD_XXX_XX_XX_XXX_XXX_CI0217"; // 节约标煤
+	public static final String JPEYHL = "JSFW.NX_GD_XXX_XX_XX_XXX_XXX_CI0218"; // 减排二氧化硫
+	public static final String JYS = "JSFW.NX_GD_XXX_XX_XX_XXX_XXX_CI0219"; // 节约水
+	public static final String FCSWDL = "JSFW.NX_GD_FDC_XX_XX_XXX_XXX_CI0136"; // 风场上网电量
+	public static final String FCZGL = "JSFW.NX_GD_FDC_XX_XX_XXX_XXX_CI0135"; // 风场总功率
+	public static final String FCFS = "JSFW.NX_GD_FDC_XX_XX_XXX_XXX_CI0134"; // 风场风速
+	public static final String GFSWDL = "JSFW.NX_GD_GDC_XX_XX_XXX_XXX_CI0136"; // 光伏上网电量
+	public static final String GFZGL = "JSFW.NX_GD_GDC_XX_XX_XXX_XXX_CI0135"; // 光伏总功率
+	public static final String FCQFDL = "JSFW.NX_GD_FDC_XX_XX_XXX_XXX_CI0110"; // 风电日欠发损失电
+
+	
+	
+	/******************************************** 麻黄山风电场 *****************************************/
+	public static final String JSFW_MHSFJZD ="MHSFCJSFW.NX_GD_MHSF_XX_XX_XXX_XXX_CI0215"; //麻黄山风机是否中断
+	public static final String JSFW_MHSDQZD ="MHSFCJSFW.NX_GD_MHSF_XX_XX_XXX_XXX_CI0216";//麻黄山电气是否中断
+	public static final String JSFW_MHSCFTZD ="MHSFCJSFW.NX_GD_MHSF_XX_XX_XXX_XXX_CI0218";//麻黄山测风塔是否中断
+	public static final String JSFW_MHSDJLZD ="MHSFCJSFW.NX_GD_MHSF_XX_XX_XXX_XXX_CI0217";//麻黄山电计量是否中断
+	public static final String JSFW_MHSAGCZD ="MHSFCJSFW.NX_GD_MHSF_XX_XX_XXX_XXX_CI0219";//麻黄山AGC是否中断
+	
+	
+	
+	
+	
+	
+	public static final String JSFW_MHRFDLB = "MHSFCJSFW.NX_GD_MHSF_XX_XX_XXX_XXX_CI0088"; // 麻黄山日发电量
+	public static final String JSFW_MHYFDLB = "MHSFCJSFW.NX_GD_MHSF_XX_XX_XXX_XXX_CI0146"; // 麻黄山月发电量
+	public static final String JSFW_MHNFDLB = "MHSFCJSFW.NX_GD_MHSF_XX_XX_XXX_XXX_CI0037"; // 麻黄山年发电量
+	public static final String JSFW_MHSWDLB = "MHSFCJSFW.NX_GD_MHSF_XX_XX_XXX_XXX_CI0136"; // 麻黄山上网电量
+	public static final String JSFW_MHSSZGL = "MHSFCJSFW.NX_GD_MHSF_XX_XX_XXX_XXX_CI0135"; // 麻黄山总功率
+	public static final String JSFW_MHSSFS = "MHSFCJSFW.NX_GD_MHSF_XX_XX_XXX_XXX_CI0134"; // 麻黄山风速
+	public static final String JSFW_MHRQFSS = "MHSFCJSFW.NX_GD_MHSF_XX_XX_XXX_XXX_CI0110"; // 麻黄山日欠发损失电量
+	public static final String MHSFGL_AI000305 = "MHSFGL.NX_GD_MHSF_YC_P1_L1_001_FGLTEM"; // 麻黄山测风塔温度
+	public static final String MHSFGL_AI000306 = "MHSFGL.NX_GD_MHSF_YC_P1_L1_001_FGLHUM"; // 麻黄山测风塔湿度
+	public static final String MHSFGL_AI000307 = "MHSFGL.NX_GD_MHSF_YC_P1_L1_001_FGLPRE"; // 麻黄山测风塔压强
+	public static final String MHSDQ_DI000006 = "MHSDQ.NX_GD_MHSF_DQ_P1_L1_001_DI0006"; // 111断路器位置
+	public static final String MHSDQ_DI000141 = "MHSDQ.NX_GD_MHSF_DQ_P1_L1_001_DI0141"; // 301断路器合闸位置
+	public static final String MHSDQ_DI000363 = "MHSDQ.NX_GD_MHSF_DQ_P1_L1_001_DI0363"; // [风场Ⅰ线9611CS]断路器位置
+	public static final String MHSDQ_DI000423 = "MHSDQ.NX_GD_MHSF_DQ_P1_L1_001_DI0423"; // [风场Ⅱ线9611CS]断路器位置
+	public static final String MHSDQ_DI000483 = "MHSDQ.NX_GD_MHSF_DQ_P1_L1_001_DI0483"; // [风场Ⅲ线9611CS]断路器位置
+
+	public static final String MHSDQ_101DLQ = "MHSDQ.NX_GD_MHSF_DQ_P1_L1_001_DI0006"; // 101断路器位置
+	public static final String MHSDQ_102DLQ = "MHSDQ.NX_GD_MHSF_DQ_P1_L1_001_DI0006"; // 102断路器位置
+	public static final String MHSDQ_302DLQ = "MHSDQ.NX_GD_MHSF_DQ_P1_L1_001_DI0141"; // 302断路器合闸位置
+	public static final String MHSDQ_321DLQ = "MHSDQ.NX_GD_MHSF_DQ_P1_L1_001_DI0985"; // 321断路器合闸位置
+
+	public static final String MHSFGL_AI000314 = "MHSFGL.NX_GD_MHSF_YC_P1_L1_001_FGLS70";// 麻黄山70m风速
+	public static final String MHSFGL_AI000315 = "MHSFGL.NX_GD_MHSF_YC_P1_L1_001_FGLD70";// 麻黄山70m风向
+	/******************************************** 麻黄山风电场 *****************************************/
+
+	/******************************************** 石板泉风电场 *****************************************/
+	public static final String JSFW_SBQFJZD ="SBQFCJSFW.NX_GD_SBQF_XX_XX_XXX_XXX_CI0215"; //石板泉风机是否中断
+	public static final String JSFW_SBQDQZD ="SBQFCJSFW.NX_GD_SBQF_XX_XX_XXX_XXX_CI0216";//石板泉电气是否中断
+	public static final String JSFW_SBQCFTZD ="SBQFCJSFW.NX_GD_SBQF_XX_XX_XXX_XXX_CI0218";//石板泉测风塔是否中断
+	public static final String JSFW_SBQDJLZD ="SBQFCJSFW.NX_GD_SBQF_XX_XX_XXX_XXX_CI0217";//石板泉电计量是否中断
+	public static final String JSFW_SBQAGCZD ="SBQFCJSFW.NX_GD_SBQF_XX_XX_XXX_XXX_CI0219";//石板泉AGC是否中断
+
+	
+	
+	
+	
+	
+	
+	public static final String JSFW_SBRFDLB = "SBQFCJSFW.NX_GD_SBQF_XX_XX_XXX_XXX_CI0088"; // 石板泉日发电量
+	public static final String JSFW_SBYFDLB = "SBQFCJSFW.NX_GD_SBQF_XX_XX_XXX_XXX_CI0146"; // 石板泉月发电量
+	public static final String JSFW_SBNFDLB = "SBQFCJSFW.NX_GD_SBQF_XX_XX_XXX_XXX_CI0037"; // 石板泉年发电量
+	public static final String JSFW_SBSWDLB = "SBQFCJSFW.NX_GD_SBQF_XX_XX_XXX_XXX_CI0136"; // 石板泉上网电量
+	public static final String JSFW_SBSSZGL = "SBQFCJSFW.NX_GD_SBQF_XX_XX_XXX_XXX_CI0135"; // 石板泉总功率
+	public static final String JSFW_SBSSFS = "SBQFCJSFW.NX_GD_SBQF_XX_XX_XXX_XXX_CI0134"; // 石板泉风速
+	public static final String JSFW_SBRQFSS = "SBQFCJSFW.NX_GD_SBQF_XX_XX_XXX_XXX_CI0110"; // 石板泉日欠发损失电量
+	public static final String SBQFGL_AI000305 = "SBQFJ.NX_GD_SBQF_FJ_P4_L9_100_AI0165"; // 石板泉测风塔温度
+	
+//	public static final String SBQFGL_AI000305 = "SBQFGL.NX_GD_SBQF_YC_P1_L1_001_FGLTEM"; // 石板泉测风塔温度
+
+	public static final String SBQFGL_AI000319 = "SBQFGL.NX_GD_SBQF_YC_P1_L1_001_FGLHUM"; // 石板泉测风塔湿度
+	public static final String SBQFGL_AI000320 = "SBQFGL.NX_GD_SBQF_YC_P1_L1_001_FGLPRE"; // 石板泉测风塔压强
+
+	public static final String SBQDQ_DI000001 = "SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_DI0001"; // 1#进线路测控装置断路器111
+	public static final String SBQDQ_DI000161 = "SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_DI0161"; // 1号主变测控装置高压侧断路器101
+	public static final String SBQDQ_DI000175 = "SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_DI0175"; // 1号主变测控装置低压侧断路器301
+	public static final String SBQDQ_DI000966 = "SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_DI0966"; // 35kV1A出线保护断路器312
+	public static final String SBQDQ_DI001030 = "SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_DI1030"; // 35kV1B出线保护断路器313
+	public static final String SBQDQ_DI001158 = "SBQXLDQ.NX_GD_SBQF_DQ_P1_L1_001_DI1158"; // 35kV1C出线保护断路器314
+
+	public static final String SBQDQ_DI000081 = "SBQNWDQ.NX_GD_SBQF_DQ_P1_L1_001_DI0081"; // 2#进线路测控装置断路器121合闸
+	public static final String SBQDQ_DI000241 = "SBQNWDQ.NX_GD_SBQF_DQ_P1_L1_001_DI0241"; // 2号主变测控装置高压侧断路器102合闸
+	public static final String SBQDQ_DI000255 = "SBQNWDQ.NX_GD_SBQF_DQ_P1_L1_001_DI0255"; // 2号主变测控装置低压侧断路器302合位
+	public static final String SBQDQ_DI001419 = "SBQNWDQ.NX_GD_SBQF_DQ_P1_L1_001_DI1419"; // 35kV2A出线保护321断路器合位
+	public static final String SBQDQ_DI001483 = "SBQNWDQ.NX_GD_SBQF_DQ_P1_L1_001_DI1483"; // 35kV2B出线保护322断路器合位
+	public static final String SBQDQ_DI001611 = "SBQNWDQ.NX_GD_SBQF_DQ_P1_L1_001_DI1611"; // 35kV2C出线保护323断路器合位
+
+	public static final String SBQDQ_DI002536 = "SBQNWDQ.NX_GD_SBQF_DQ_P1_L1_001_DI2569"; // 35kV1A出线保护断路器331
+	public static final String SBQDQ_DI002600 = "SBQNWDQ.NX_GD_SBQF_DQ_P1_L1_001_DI2633"; // 35kV1B出线保护断路器332
+	public static final String SBQDQ_DI002915 = "SBQNWDQ.NX_GD_SBQF_DQ_P1_L1_001_DI2915"; // 2#进线路测控装置断路器151合闸
+	public static final String SBQDQ_DI000425 = "SBQNWDQ.NX_GD_SBQF_DQ_P1_L1_001_DI0425"; // 2号主变测控装置高压侧断路器105合闸
+	// public static final String SBQDQ_DI000255="SBQDQ_DI000255";
+	// //2号主变测控装置低压侧断路器305合位
+	public static final String SBQDQ_DI003272 = "SBQNWDQ.NX_GD_SBQF_DQ_P1_L1_001_DI3305"; // 35kV2A出线保护351断路器合位
+	public static final String SBQDQ_DI003336 = "SBQNWDQ.NX_GD_SBQF_DQ_P1_L1_001_DI3369"; // 35kV2B出线保护352断路器合位
+	public static final String SBQDQ_DI003400 = "SBQNWDQ.NX_GD_SBQF_DQ_P1_L1_001_DI3433"; // 35kV2C出线保护353断路器合位
+
+	public static final String SBQFGL_AI000327 = "SBQFGL.NX_GD_SBQF_YC_P1_L1_001_FGLS70";// 石板泉70m风速
+	public static final String SBQFGL_AI000328 = "SBQFGL.NX_GD_SBQF_YC_P1_L1_001_FGLD70";// 石板泉70m风向
+	/******************************************* 石板泉风电场 *****************************************/
+
+	/******************************************** 青山风电场 *****************************************/
+	public static final String JSFW_QSFJZD ="SBQFCJSFW.NX_GD_SBQF_XX_XX_XXX_XXX_CI0215"; //石板泉风机是否中断
+	public static final String JSFW_QSDQZD ="SBQFCJSFW.NX_GD_SBQF_XX_XX_XXX_XXX_CI0216";//石板泉电气是否中断
+	public static final String JSFW_QSCFTZD ="SBQFCJSFW.NX_GD_SBQF_XX_XX_XXX_XXX_CI0218";//石板泉测风塔是否中断
+	public static final String JSFW_QSDJLZD ="SBQFCJSFW.NX_GD_SBQF_XX_XX_XXX_XXX_CI0217";//石板泉电计量是否中断
+	public static final String JSFW_QSAGCZD ="SBQFCJSFW.NX_GD_SBQF_XX_XX_XXX_XXX_CI0219";//石板泉AGC是否中断
+
+	
+	
+	
+	
+	
+	
+	
+	public static final String QSRFDL = "QSFCJSFW.NX_GD_QSF_XX_XX_XXX_XXX_CI0088"; // 青山日发电量
+	public static final String QSYFDL = "QSFCJSFW.NX_GD_QSF_XX_XX_XXX_XXX_CI0146"; // 青山月发电量
+	public static final String QSNFDL = "QSFCJSFW.NX_GD_QSF_XX_XX_XXX_XXX_CI0037"; // 青山年发电量
+	public static final String QSSWDL = "QSFCJSFW.NX_GD_QSF_XX_XX_XXX_XXX_CI0136"; // 青山上网电量
+	public static final String QSZGL = "QSFCJSFW.NX_GD_QSF_XX_XX_XXX_XXX_CI0135"; // 青山总功率
+	public static final String QSFS = "QSFCJSFW.NX_GD_QSF_XX_XX_XXX_XXX_CI0134"; // 青山风速
+	public static final String QSQFDL = "QSFCJSFW.NX_GD_QSF_XX_XX_XXX_XXX_CI0110"; // 青山日欠发损失电量
+	public static final String QSWD = "QSFGL.NX_GD_QSF_YC_P1_L1_001_CFT019"; // 青山测风塔温度
+	// public static final String QSWD = "QSFGL_AI000323"; // 青山测风塔湿度
+	public static final String QSFGL_AI000324 = "QSFGL.NX_GD_QSF_YC_P1_L1_001_CFT020"; // 青山测风塔压强
+	public static final String QSPJFS = "QSFCJSFW.NX_GD_QSF_XX_XX_XXX_XXX_CI0134"; // 青山平均风速
+
+	public static final String QSDQ_DI000377 = "QSDQ.NX_GD_QSF_DQ_P1_L1_001_DI0377"; // 110kV线路测控隔刀111-1分位
+	public static final String QSDQ_DI000530 = "QSDQ.NX_GD_QSF_DQ_P1_L1_001_DI0530"; // 1#主变测控断路器101分
+	public static final String QSDQ_DI000858 = "QSDQ.NX_GD_QSF_DQ_P1_L1_001_DI0858"; // 2#主变测控断路器102
+	public static final String QSDQ_DI000193 = "QSDQ.NX_GD_QSF_DQ_P1_L1_001_DI0193"; // 35kV公用测控1#主变35KV手车分
+	public static final String QSDQ_DI000195 = "QSDQ.NX_GD_QSF_DQ_P1_L1_001_DI0195"; // 35kV公用测控2#主变35KV手车分
+	public static final String QSDQ_DI001186 = "QSDQ.NX_GD_QSF_DQ_P1_L1_001_DI1186"; // 35kVI段集线线路1A311断路器
+	public static final String QSDQ_DI001232 = "QSDQ.NX_GD_QSF_DQ_P1_L1_001_DI1232"; // 35kVI段集线线路1B312断路器
+	public static final String QSDQ_DI001278 = "QSDQ.NX_GD_QSF_DQ_P1_L1_001_DI1278"; // 35kVI段集线线路1C313断路器
+	public static final String QSDQ_DI001416 = "QSDQ.NX_GD_QSF_DQ_P1_L1_001_DI1416"; // 35kV分段300断路器
+	public static final String QSDQ_DI001462 = "QSDQ.NX_GD_QSF_DQ_P1_L1_001_DI1462"; // 35kVII段集线线路2A323断路器
+	public static final String QSDQ_DI001508 = "QSDQ.NX_GD_QSF_DQ_P1_L1_001_DI1508"; // 35kVII段集线线路2B324断路器
+	public static final String QSDQ_DI001554 = "QSDQ.NX_GD_QSF_DQ_P1_L1_001_DI1554"; // 35kVII段集线线路2C325断路器
+
+	public static final String SLDQ_DI000103 = "SLDQ.NX_GD_QSF_DQ_P1_L1_001_DI0071";
+	public static final String SLDQ_DI000303 = "SLDQ.NX_GD_QSF_DQ_P1_L1_001_DI0123";
+	public static final String SLDQ_DI000331 = "SLDQ.NX_GD_QSF_DQ_P1_L1_001_DI1615";
+	public static final String SLDQ_DI000332 = "SLDQ.NX_GD_QSF_DQ_P1_L1_001_DI1701";
+
+	public static final String QSFGL_AI000313 = "QSFGL.NX_GD_QSF_YC_P1_L1_001_CFT009";// 青山70m风速
+	public static final String QSFGL_AI000314 = "QSFGL.NX_GD_QSF_YC_P1_L1_001_CFT010";// 青山70m风向
+	/******************************************** 青山风电场 *****************************************/
+
+	/******************************************** 牛首山风电场 *****************************************/
+	public static final String NSSRFDL = "NSSFCJSFW.NX_GD_NSSF_XX_XX_XXX_XXX_CI0088"; // 牛首山日发电量
+	public static final String NSSYFDL = "NSSFCJSFW.NX_GD_NSSF_XX_XX_XXX_XXX_CI0146"; // 牛首山月发电量
+	public static final String NSSNFDL = "NSSFCJSFW.NX_GD_NSSF_XX_XX_XXX_XXX_CI0037"; // 牛首山年发电量
+	public static final String NSSSWDL = "NSSFCJSFW.NX_GD_NSSF_XX_XX_XXX_XXX_CI0136"; // 牛首山上网电量
+	public static final String NSSZGL = "NSSFCJSFW.NX_GD_NSSF_XX_XX_XXX_XXX_CI0135"; // 牛首山总功率
+	public static final String NSSFS = "NSSFCJSFW.NX_GD_NSSF_XX_XX_XXX_XXX_CI0134"; // 牛首山风速
+	public static final String NSSQFDL = "NSSFCJSFW.NX_GD_NSSF_XX_XX_XXX_XXX_CI0110"; // 牛首山日欠发损失电量
+	//public static final String NSSWD = "NSSFGL.NX_GD_NSSF_YC_P1_L1_001_FGLTEM"; // 牛首山测风塔温度
+	public static final String NSSWD = "NSSFJ.NX_GD_NSSF_FJ_P1_L2_013_AI0056"; // 牛首山测风塔温度
+	
+	public static final String NSSFGL_AI000306 = "NSSFGL.NX_GD_NSSF_YC_P1_L1_001_FGLHUM"; // 牛首山测风塔湿度
+	public static final String NSSFGL_AI000307 = "NSSFGL.NX_GD_NSSF_YC_P1_L1_001_FGLPRE"; // 牛首山测风塔压强
+	public static final String NSSPJFS = "NSSFCJSFW.NX_GD_NSSF_XX_XX_XXX_XXX_CI0134"; // 牛首山平均风速
+
+	public static final String NSSZ111 = "NSSDQN.NX_GD_NSSF_DQ_P1_L1_001_DI0003"; // 首风II甲线111开关位置
+	public static final String NSSZ101 = "NSSDQN.NX_GD_NSSF_DQ_P1_L1_001_DI0019"; // 101开关位置
+	public static final String NSSZ102 = "NSSDQN.NX_GD_NSSF_DQ_P1_L1_001_DI0034"; // 102开关位置
+	public static final String NSSZ301 = "NSSDQN.NX_GD_NSSF_DQ_P1_L1_001_DI0025"; // 301开关位置
+	public static final String NSSZ302 = "NSSDQN.NX_GD_NSSF_DQ_P1_L1_001_DI0040"; // 302开关位置
+	public static final String NSSZ312 = "NSSDQN.NX_GD_NSSF_DQ_P1_L1_001_DI0070"; // 集电线路一312开关位置
+	public static final String NSSZ313 = "NSSDQN.NX_GD_NSSF_DQ_P1_L1_001_DI0076"; // 集电线路二313开关位置
+	public static final String NSSZ314 = "NSSDQN.NX_GD_NSSF_DQ_P1_L1_001_DI0082"; // 集电线路三314开关位置
+	public static final String NSSZ321 = "NSSDQN.NX_GD_NSSF_DQ_P1_L1_001_DI0098"; // 集电线路四321开关位置
+	public static final String NSSZ322 = "NSSDQN.NX_GD_NSSF_DQ_P1_L1_001_DI0104"; // 集电线路五322开关位置
+	public static final String NSSZ323 = "NSSDQN.NX_GD_NSSF_DQ_P1_L1_001_DI0110"; // 集电线路六323开关位置
+	public static final String NSSZ121 = "NSSDQN.NX_GD_NSSF_DQ_P1_L1_001_DI0011"; // 首风II乙线121开关位置
+	public static final String NSSZ103 = "NSSDQN.NX_GD_NSSF_DQ_P1_L1_001_DI0049"; // 103开关位置
+	public static final String NSSZ303 = "NSSDQN.NX_GD_NSSF_DQ_P1_L1_001_DI0055"; // 303开关位置
+	public static final String NSSZ351 = "NSSDQN.NX_GD_NSSF_DQ_P1_L1_001_DI0126"; // 集电线路七351开关位置
+	public static final String NSSZ353 = "NSSDQN.NX_GD_NSSF_DQ_P1_L1_001_DI0132"; // 集电线路八353开关位置
+	public static final String NSSZ354 = "NSSDQN.NX_GD_NSSF_DQ_P1_L1_001_DI0138"; // 集电线路九354开关位置
+
+	public static final String NSSDQ_AI000703 = "NSSFGL.NX_GD_NSSF_YC_P1_L1_001_FGLS70";// 牛首山70m风速
+	public static final String NSSDQ_AI000704 = "NSSFGL.NX_GD_NSSF_YC_P1_L1_001_FGLD70";// 牛首山70m风向
+	/******************************************** 牛首山风电场 *****************************************/
+
+	/******************************************** 大武口风电场 *****************************************/
+	public static final String DWKRFDL = "DWKGDCJSFW.NX_GD_DWKG_XX_XX_XXX_XXX_CI0088"; // 大武口日发电量
+	public static final String DWKYFDL = "DWKGDCJSFW.NX_GD_DWKG_XX_XX_XXX_XXX_CI0146"; // 大武口月发电量
+	public static final String DWKNFDL = "DWKGDCJSFW.NX_GD_DWKG_XX_XX_XXX_XXX_CI0037"; // 大武口年发电量
+	public static final String DWKSWDL = "DWKGDCJSFW.NX_GD_DWKG_XX_XX_XXX_XXX_CI0136"; // 大武口上网电量
+	public static final String DWKZGL = "DWKDQ.NX_GD_DWKG_DQ_P1_L1_001_AI0002"; // 大武口总功率
+	public static final String DWKFS = "DWKGDCJSFW.NX_GD_DWKG_XX_XX_XXX_XXX_CI0134";// 大武口日照强度;
+	// public static final String DWKFS =
+	// "DWKGF.NX_GD_DWKG_GF_P1_L2_010_AI0672";// "JSFW_DWSSFS";
+	// //
+	// 大武口日照强度
+	//public static final String DWKWD = "DWKGGL.NX_GD_DWKG_YC_P1_L1_001_QXZ004"; // 大武口测风塔温度
+	public static final String DWKWD = "DWKGF.NX_GD_DWKG_GF_P1_L2_010_AI0663"; // 大武口测风塔温度
+	
+	public static final String DWKPJFS = "DWKGDCJSFW.NX_GD_DWKG_XX_XX_XXX_XXX_CI0134"; // 大武口平均风速
+
+	public static final String DWKZ310 = "DWKDQ.NX_GD_DWKG_DQ_P1_L1_001_DI0024"; // 35kV出线柜310开关位置
+	public static final String DWKZ314 = "DWKDQ.NX_GD_DWKG_DQ_P1_L1_001_DI0027"; // 35kV#1光伏进线柜314开关位置
+	public static final String DWKZ315 = "DWKDQ.NX_GD_DWKG_DQ_P1_L1_001_DI0028"; // 35kV#2光伏进线柜315开关位置
+	/******************************************** 大武口风电场 *****************************************/
+
+	/******************************************** 平罗电场 *****************************************/
+	public static final String PLRFDL = "PLGDCJSFW.NX_GD_PLG_XX_XX_XXX_XXX_CI0088"; // 平罗日发电量
+	public static final String PLYFDL = "PLGDCJSFW.NX_GD_PLG_XX_XX_XXX_XXX_CI0146"; // 平罗月发电量
+	public static final String PLNFDL = "PLGDCJSFW.NX_GD_PLG_XX_XX_XXX_XXX_CI0037"; // 平罗年发电量
+	public static final String PLSWDL = "PLGDCJSFW.NX_GD_PLG_XX_XX_XXX_XXX_CI0136"; // 平罗上网电量
+	public static final String PLZGL = "PLGDCJSFW.NX_GD_PLG_XX_XX_XXX_XXX_CI0135"; // 平罗总功率
+	public static final String PLFS = "PLGGL.NX_GD_PLG_YC_P1_L1_001_QXZ0001"; // 平罗日照强度
+	public static final String PLWD = "PLGGL.NX_GD_PLG_YC_P1_L1_001_QXZ004"; // 平罗测风塔温度
+	public static final String PLPJFS = "PLGGL.NX_GD_PLG_YC_P1_L1_001_QXZ0001"; // 平罗平均风速
+
+	// 平罗1
+	public static final String PLZ1310 = "PLSJ1.NX_GD_PLG_DQ_P1_L1_001_DI0001"; // 35kV出线柜310开关位置
+	public static final String PLZ1313 = "PLSJ1.NX_GD_PLG_DQ_P1_L1_001_DI0005"; // I期313开关断路器合位
+	public static final String PLZ1314 = "PLSJ1.NX_GD_PLG_DQ_P1_L1_001_DI0007"; // I期314开关断路器合位
+	public static final String PLZ1315 = "PLSJ1.NX_GD_PLG_DQ_P1_L1_001_DI0009"; // I期315开关断路器合位
+	public static final String PLZ1316 = "PLSJ1.NX_GD_PLG_DQ_P1_L1_001_DI0011"; // I期316开关断路器合位
+	public static final String PLZ1317 = "PLSJ1.NX_GD_PLG_DQ_P1_L1_001_DI0013"; // I期317开关断路器合位
+	// 平罗2
+	public static final String PLZ2310 = "PLSJ2.NX_GD_PLG_DD_P1_L1_001_DI0001"; // 20#逆变器电网交流过压
+	public static final String PLZ2322 = "PLSJ2.NX_GD_PLG_DD_P1_L1_001_DI0017"; // 20#逆变器防雷器故障
+	public static final String PLZ2323 = "PLSJ2.NX_GD_PLG_DD_P1_L1_001_DI0019"; // 20#逆变器防反放电保护
+	/******************************************** 平罗电场 *****************************************/
+
+	/******************************************** 马场湖风电场 *****************************************/
+
+	public static final String MCHRFDL = "JSFW_MCRFDLB"; // 马场湖日发电量
+	public static final String MCHYFDL = "JSFW_MCYFDLB"; // 马场湖月发电量
+	public static final String MCHNFDL = "JSFW_MCNFDLB"; // 马场湖年发电量
+	public static final String MCHSWDL = "JSFW_MCSWDLB"; // 马场湖上网电量
+	public static final String MCHZGL = "JSFW_MCSSZGL"; // 马场湖总功率
+	public static final String MCHFS = "JSFW_MCSSFSX"; // 马场湖日照强度
+	public static final String MCHWD = "MCHGGL_AI000308"; // 马场湖测风塔温度
+	public static final String MCHPJFS = "JSFW_MCSSFS"; // 马场湖平均风速
+
+	public static final String MCHZ511 = "MCHDQ_DI110749"; // 马场湖光伏开关站xj-断路器位置
+	public static final String MCHZ510 = "MCHDQ_DI110027"; // 马场湖光伏开关站10ah-3
+	// 1#进线柜-断路器位置
+	public static final String MCHZ512 = "MCHDQ_DI110317"; // 马场湖光伏开关站10ah-4
+	// 2#进线-断路器位置
+	public static final String MCHZ513 = "MCHDQ_DI110197"; // 马场湖光伏开关站10ah-5
+	// 3#进线-断路器位置
+	public static final String MCHZ514 = "MCHDQ_DI110080"; // 马场湖光伏开关站10ah-14
+	// 电容器-断路器位置
+	public static final String MCHZ515 = "MCHDQ_DI110137"; // 马场湖光伏开关站10ah-7
+	// 5#进线-断路器位置
+	public static final String MCHZ516 = "MCHDQ_DI110377"; // 马场湖光伏开关站10ah-8
+	// 6#进线-断路器位置
+	public static final String MCHZ517 = "MCHDQ_DI110437"; // 马场湖光伏开关站10ah-9
+	// 7#进线-断路器位置
+	public static final String MCHZ518 = "MCHDQ_DI110497"; // 马场湖光伏开关站10ah-10
+	// 8#进线-断路器位置
+	public static final String MCHZ519 = "MCHDQ_DI110557"; // 马场湖光伏开关站10ah-11
+	// 9#进线-断路器位置
+	public static final String MCHZ520 = "MCHDQ_DI110617"; // 马场湖光伏开关站10ah-12
+	// 10#进线-断路器位置
+	/******************************************** 马场湖风电场 *****************************************/
+
+	/******************************************** 宣和风电场 *****************************************/
+	public static final String XHRFDL = "XHGDCJSFW.NX_GD_XHG_XX_XX_XXX_XXX_CI0088"; // 宣和日发电量
+	public static final String XHYFDL = "XHGDCJSFW.NX_GD_XHG_XX_XX_XXX_XXX_CI0146"; // 宣和月发电量
+	public static final String XHNFDL = "XHGDCJSFW.NX_GD_XHG_XX_XX_XXX_XXX_CI0037"; // 宣和年发电量
+	public static final String XHSWDL = "XHGDCJSFW.NX_GD_XHG_XX_XX_XXX_XXX_CI0136"; // 宣和上网电量
+	public static final String XHZGL = "XHDQ.NX_GD_XHG_DQ_P1_L1_001_AI0002"; // 宣和总功率
+	public static final String XHFS = "XHGGL.NX_GD_XHG_YC_P1_L1_001_QXZ001"; // 宣和日照强度
+																				// XHDQ.NX_GD_XHG_DQ_P1_L1_001_AI0192
+	// public static final String XHFS =
+	// "XHGDCJSFW.NX_GD_XHG_XX_XX_XXX_XXX_CI0134"; // 宣和日照强度
+	public static final String XHWD = "XHGDCJSFW.NX_GD_XHG_XX_XX_XXX_XXX_CI0134"; // 宣和测风塔温度
+	public static final String XHPJFS = "XHGDCJSFW.NX_GD_XHG_XX_XX_XXX_XXX_CI0134"; // 宣和平均风速
+
+	public static final String XHZ311 = "XHDQ.NX_GD_XHG_DQ_P1_L1_001_DI0001"; // 35kV草光I线开关位置
+	public static final String XHZ313 = "XHDQ.NX_GD_XHG_DQ_P1_L1_001_DI0025"; // 35kV1#进线313开关位置
+	public static final String XHZ314 = "XHDQ.NX_GD_XHG_DQ_P1_L1_001_DI0027"; // 35kV2#进线314开关位置
+	public static final String XHZ316 = "XHDQ.NX_GD_XHG_DQ_P1_L1_001_DI0031"; // 35kV4#进线316开关位置
+	public static final String XHZ315 = "XHDQ.NX_GD_XHG_DQ_P1_L1_001_DI0029"; // 35kV3#进线315开关位置
+	/******************************************** 宣和风电场 *****************************************/
+
+	/******************************************** 海子井风电场 *****************************************/
+	public static final String HZJWD = "HZJGDCJSFW.NX_GD_HZJG_XX_XX_XXX_XXX_CI0134"; // 宣和测风塔温度
+	public static final String HZJPJFS = "HZJGDCJSFW.NX_GD_HZJG_XX_XX_XXX_XXX_CI0134"; // 宣和平均风速
+	/******************************************** 海子井风电场 *****************************************/
+
+	/******************************************** 香山风电场 *****************************************/
+	public static final String XSRFDL = "XSFCJSFW.NX_GD_XSF_XX_XX_XXX_XXX_CI0088"; // 香山日发电量
+	public static final String XSYFDL = "XSFCJSFW.NX_GD_XSF_XX_XX_XXX_XXX_CI0146"; // 香山月发电量
+	public static final String XSNFDL = "XSFCJSFW.NX_GD_XSF_XX_XX_XXX_XXX_CI0037"; // 香山年发电量
+	public static final String XSSWDL = "XSFCJSFW.NX_GD_XSF_XX_XX_XXX_XXX_CI0136"; // 香山上网电量
+	public static final String XSZGL = "XSFCJSFW.NX_GD_XSF_XX_XX_XXX_XXX_CI0135"; // 香山总功率
+	public static final String XSFS = "XSFCJSFW.NX_GD_XSF_XX_XX_XXX_XXX_CI0134"; // 香山风速
+	public static final String XSQFDL = "XSFCJSFW.NX_GD_XSF_XX_XX_XXX_XXX_CI0110"; // 香山日欠发损失电量
+
+	public static final String XSWD = "XSFGL.NX_GD_XSF_YC_P1_L1_001_FGLTEM"; // 香山测风塔温度
+	public static final String XSFGL_AI000007 = "XSFGL.NX_GD_XSF_YC_P1_L1_001_FGLHUM"; // 香山测风塔湿度
+	public static final String XSFGL_AI000008 = "XSFGL.NX_GD_XSF_YC_P1_L1_001_FGLPRE"; // 香山测风塔压强
+	public static final String XSPJFS = "XSFCJSFW.NX_GD_XSF_XX_XX_XXX_XXX_CI0134"; // 香山平均风速
+
+	public static final String XSDQ_DI000034 = "XSDQ.NX_GD_XSF_DQ_P1_L1_001_DI0034"; // #111断路器
+	public static final String XSDQ_DI000169 = "XSDQ.NX_GD_XSF_DQ_P1_L1_001_DI0169"; // 101断路器
+	public static final String XSDQ_DI000308 = "XSDQ.NX_GD_XSF_DQ_P1_L1_001_DI0308"; // 102断路器
+	public static final String XSDQ_DI000192 = "XSDQ.NX_GD_XSF_DQ_P1_L1_001_DI0192"; // 301断路器
+	public static final String XSDQ_DI000331 = "XSDQ.NX_GD_XSF_DQ_P1_L1_001_DI0331"; // 302断路器
+	// 香山电气点没有,采用类似点,目前不一定准确
+	public static final String XSDQ_DI000850 = "XSDQ.NX_GD_XSF_DQ_P1_L1_001_DI1368"; // 311断路器
+	public static final String XSDQ_DI000915 = "XSDQ.NX_GD_XSF_DQ_P1_L1_001_DI1629"; // 312断路器
+	public static final String XSDQ_DI001210 = "XSDQ.NX_GD_XSF_DQ_P1_L1_001_DI1501"; // 323断路器
+	public static final String XSDQ_DI001145 = "XSDQ.NX_GD_XSF_DQ_P1_L1_001_DI1501"; // 322断路器
+
+	public static final String XSFGL_AI000003 = "XSFGL.NX_GD_XSF_YC_P1_L1_001_FGLS70";// 香山70m风速
+	public static final String XSFGL_AI000005 = "XSFGL.NX_GD_XSF_YC_P1_L1_001_FGLD70";// 香山70m风向
+	/******************************************** 香山风电场 *****************************************/
+
+	public static final String DWKGDCJSFW_CI0195 = "DWKGDCJSFW.NX_GD_DWKG_XX_XX_XXX_XXX_CI0195"; // 风机设备在线状态
+	public static final String DWKGDCJSFW_CI0196 = "DWKGDCJSFW.NX_GD_DWKG_XX_XX_XXX_XXX_CI0196"; // 升压站在线状态
+	public static final String DWKGDCJSFW_CI0197 = "DWKGDCJSFW.NX_GD_DWKG_XX_XX_XXX_XXX_CI0197"; // 电计量在线状态
+	public static final String DWKGDCJSFW_CI0198 = "DWKGDCJSFW.NX_GD_DWKG_XX_XX_XXX_XXX_CI0198"; // 测风塔在线状态
+	public static final String DWKGDCJSFW_CI0199 = "DWKGDCJSFW.NX_GD_DWKG_XX_XX_XXX_XXX_CI0199"; // agc在线状态
+
+	public static final String MHSFCJSFW_CI0215 = "MHSFCJSFW.NX_GD_MHSF_XX_XX_XXX_XXX_CI0215"; // 风机设备在线状态
+	public static final String MHSFCJSFW_CI0216 = "MHSFCJSFW.NX_GD_MHSF_XX_XX_XXX_XXX_CI0216"; // 升压站在线状态
+	public static final String MHSFCJSFW_CI0217 = "MHSFCJSFW.NX_GD_MHSF_XX_XX_XXX_XXX_CI0217"; // 电计量在线状态
+	public static final String MHSFCJSFW_CI0218 = "MHSFCJSFW.NX_GD_MHSF_XX_XX_XXX_XXX_CI0218"; // 测风塔在线状态
+	public static final String MHSFCJSFW_CI0219 = "MHSFCJSFW.NX_GD_MHSF_XX_XX_XXX_XXX_CI0219"; // agc在线状态
+
+	public static final String NSSFCJSFW_CI0215 = "NSSFCJSFW_NX_GD_NSSF_XX_XX_XXX_XXX_CI0215"; // 风机设备在线状态
+	public static final String NSSFCJSFW_CI0216 = "NSSFCJSFW_NX_GD_NSSF_XX_XX_XXX_XXX_CI0216"; // 升压站在线状态
+	public static final String NSSFCJSFW_CI0217 = "NSSFCJSFW_NX_GD_NSSF_XX_XX_XXX_XXX_CI0217"; // 电计量在线状态
+	public static final String NSSFCJSFW_CI0218 = "NSSFCJSFW_NX_GD_NSSF_XX_XX_XXX_XXX_CI0218"; // 测风塔在线状态
+	public static final String NSSFCJSFW_CI0219 = "NSSFCJSFW_NX_GD_NSSF_XX_XX_XXX_XXX_CI0219"; // agc在线状态
+
+	public static final String PLGDCJSFW_CI0195 = "PLGDCJSFW.NX_GD_PLG_XX_XX_XXX_XXX_CI0195"; // 风机设备在线状态
+	public static final String PLGDCJSFW_CI0196 = "PLGDCJSFW.NX_GD_PLG_XX_XX_XXX_XXX_CI0196"; // 升压站在线状态
+	public static final String PLGDCJSFW_CI0197 = "PLGDCJSFW.NX_GD_PLG_XX_XX_XXX_XXX_CI0197"; // 电计量在线状态
+	public static final String PLGDCJSFW_CI0198 = "PLGDCJSFW.NX_GD_PLG_XX_XX_XXX_XXX_CI0198"; // 测风塔在线状态
+	public static final String PLGDCJSFW_CI0199 = "PLGDCJSFW.NX_GD_PLG_XX_XX_XXX_XXX_CI0199"; // agc在线状态
+
+	public static final String QSFCJSFW_CI0215 = "QSFCJSFW.NX_GD_QSF_XX_XX_XXX_XXX_CI0215"; // 风机设备在线状态
+	public static final String QSFCJSFW_CI0216 = "QSFCJSFW.NX_GD_QSF_XX_XX_XXX_XXX_CI0216"; // 升压站在线状态
+	public static final String QSFCJSFW_CI0217 = "QSFCJSFW.NX_GD_QSF_XX_XX_XXX_XXX_CI0217"; // 电计量在线状态
+	public static final String QSFCJSFW_CI0218 = "QSFCJSFW.NX_GD_QSF_XX_XX_XXX_XXX_CI0218"; // 测风塔在线状态
+	public static final String QSFCJSFW_CI0219 = "QSFCJSFW.NX_GD_QSF_XX_XX_XXX_XXX_CI0219"; // agc在线状态
+
+	public static final String SBQFCJSFW_CI0215 = "SBQFCJSFW.NX_GD_SBQF_XX_XX_XXX_XXX_CI0215"; // 风机设备在线状态
+	public static final String SBQFCJSFW_CI0216 = "SBQFCJSFW.NX_GD_SBQF_XX_XX_XXX_XXX_CI0216"; // 升压站在线状态
+	public static final String SBQFCJSFW_CI0217 = "SBQFCJSFW.NX_GD_SBQF_XX_XX_XXX_XXX_CI0217"; // 电计量在线状态
+	public static final String SBQFCJSFW_CI0218 = "SBQFCJSFW.NX_GD_SBQF_XX_XX_XXX_XXX_CI0218"; // 测风塔在线状态
+	public static final String SBQFCJSFW_CI0219 = "SBQFCJSFW.NX_GD_SBQF_XX_XX_XXX_XXX_CI0219"; // agc在线状态
+
+	public static final String XHGDCJSFW_CI0195 = "XHGDCJSFW.NX_GD_XHG_XX_XX_XXX_XXX_CI0195"; // 风机设备在线状态
+	public static final String XHGDCJSFW_CI0196 = "XHGDCJSFW.NX_GD_XHG_XX_XX_XXX_XXX_CI0196"; // 升压站在线状态
+	public static final String XHGDCJSFW_CI0197 = "XHGDCJSFW.NX_GD_XHG_XX_XX_XXX_XXX_CI0197"; // 电计量在线状态
+	public static final String XHGDCJSFW_CI0198 = "XHGDCJSFW.NX_GD_XHG_XX_XX_XXX_XXX_CI0198"; // 测风塔在线状态
+	public static final String XHGDCJSFW_CI0199 = "XHGDCJSFW.NX_GD_XHG_XX_XX_XXX_XXX_CI0199"; // agc在线状态
+
+	public static final String XSFCJSFW_CI0215 = "XSFCJSFW.NX_GD_XSF_XX_XX_XXX_XXX_CI0215"; // 风机设备在线状态
+	public static final String XSFCJSFW_CI0216 = "XSFCJSFW.NX_GD_XSF_XX_XX_XXX_XXX_CI0216"; // 升压站在线状态
+	public static final String XSFCJSFW_CI0217 = "XSFCJSFW.NX_GD_XSF_XX_XX_XXX_XXX_CI0217"; // 电计量在线状态
+	public static final String XSFCJSFW_CI0218 = "XSFCJSFW.NX_GD_XSF_XX_XX_XXX_XXX_CI0218"; // 测风塔在线状态
+	public static final String XSFCJSFW_CI0219 = "XSFCJSFW.NX_GD_XSF_XX_XX_XXX_XXX_CI0219"; // agc在线状态
+
+}

+ 377 - 0
web/health/src/main/java/com/gyee/frame/common/spring/InitialRedis.java

@@ -0,0 +1,377 @@
+//package com.gyee.frame.common.spring;
+//
+//import com.alibaba.fastjson.JSON;
+//import com.gyee.frame.common.cache.IGlobalCache;
+//import com.gyee.frame.model.auto.*;
+//import com.gyee.frame.model.custom.PointData;
+//import com.gyee.frame.service.WindPowerstationTestingPoint2Service;
+//import com.gyee.frame.service.WindTurbineTestingPointAiService;
+//import com.gyee.frame.service.WindturbinepowercurvefittingService;
+//import com.gyee.frame.util.DateUtils;
+//import com.gyee.frame.util.IRealTimeDataBaseUtil;
+//import com.gyee.frame.util.RealTimeDataBaseFactory;
+//
+//import java.text.DecimalFormat;
+//import java.util.*;
+//
+//
+//public  class InitialRedis {
+//
+//    public static Map<String, Map<Double, Windturbinepowercurvefitting>> wpcmap = new HashMap<String, Map<Double, Windturbinepowercurvefitting>>();
+//
+//
+//    IRealTimeDataBaseUtil realApiUtil = RealTimeDataBaseFactory.createRealTimeDataBase();
+//
+//    public  void intialWindturbinepowercurvefitting() throws Exception {
+//
+//
+//        WindturbinepowercurvefittingService windturbinepowercurvefittingService= SpringUtils.getBean("windturbinepowercurvefittingService");
+//        IGlobalCache globalCache= SpringUtils.getBean("globalCache");
+//
+//        WindturbinepowercurvefittingExample windturbinepowercurvefittingExample = new WindturbinepowercurvefittingExample();
+//        windturbinepowercurvefittingExample.setOrderByClause("WINDTURBINEID ASC,speed ASC");
+//        List<Windturbinepowercurvefitting> wpclist = windturbinepowercurvefittingService.selectByExample(windturbinepowercurvefittingExample);
+//
+//        if (!wpclist.isEmpty()) {
+//            for (Windturbinepowercurvefitting wc : wpclist) {
+//                if (wpcmap.containsKey(wc.getWindturbineid())) {
+//                    Map<Double, Windturbinepowercurvefitting> map = wpcmap.get(wc.getWindturbineid());
+//                    map.put(wc.getSpeed(), wc);
+//                } else {
+//                    Map<Double, Windturbinepowercurvefitting> map = new HashMap<Double, Windturbinepowercurvefitting>();
+//                    map.put(wc.getSpeed(), wc);
+//                    wpcmap.put(wc.getWindturbineid(), map);
+//                }
+//            }
+//        }
+//
+//        globalCache.set("wpcmap", JSON.toJSONString(wpcmap));
+//    }
+//
+//
+//    public  void intialWpScatter() throws Exception {
+//
+//
+//
+//        WindPowerstationTestingPoint2Service windPowerstationTestingPoint2Service= SpringUtils.getBean("windPowerstationTestingPoint2Service");
+//        WindTurbineTestingPointAiService windTurbineTestingPointAiService= SpringUtils.getBean("windTurbineTestingPointAiService");
+//        IGlobalCache globalCache= SpringUtils.getBean("globalCache");
+//
+//
+//        Calendar cal = Calendar.getInstance();
+//        cal.set(Calendar.HOUR_OF_DAY, 0);
+//        cal.set(Calendar.MINUTE, 0);
+//        cal.set(Calendar.SECOND, 0);
+//
+//        int month=cal.get(Calendar.MONTH)+1;
+//
+//
+//        cal.set(Calendar.MONTH, 0);
+//
+//        for(int j=0;j<month;j++)
+//        {
+//            List<List<Double>> vos = new ArrayList<List<Double>>();
+//            cal.set(Calendar.DAY_OF_MONTH, cal.getActualMinimum(Calendar.DAY_OF_MONTH));
+//            Date beginDate = cal.getTime();
+//            Date endDate =null;
+//            if(month-1==cal.get(Calendar.MONTH))
+//            {
+//                cal = Calendar.getInstance();
+//               //cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH));
+//                endDate = cal.getTime();
+//            }else
+//            {
+//                cal.add(Calendar.MONTH,1);;
+//                endDate = cal.getTime();
+//            }
+//
+//
+//            for(Windpowerstation wp:InitialRunner.wpls)
+//            {
+//                String wpId=wp.getId();
+//                Windpowerstationpointnew gl = windPowerstationTestingPoint2Service.getWindPowerStationTestingPoint2(wpId, Constant.TPOINT_WP_SJGL);
+//                Windpowerstationpointnew fs = windPowerstationTestingPoint2Service.getWindPowerStationTestingPoint2(wpId, Constant.TPOINT_WP_SSFS);
+//
+//                int daynum = DateUtils.daysDiff(beginDate, endDate);
+//                long pried = 600 ;
+//                long count = 6 * 24 * daynum;
+//
+//                DecimalFormat dcmFmt = new DecimalFormat("0.00");
+//                List<PointData> gls = realApiUtil.getHistoryDatasSnap(gl, beginDate.getTime() / 1000, endDate.getTime() / 1000, count, pried);
+//
+//                List<PointData> fss = realApiUtil.getHistoryDatasSnap(fs, beginDate.getTime() / 1000, endDate.getTime() / 1000, count, pried);
+//
+//
+//                if (!gls.isEmpty() && !fss.isEmpty()) {
+//                    for (int i = 0; i < fss.size(); i++) {
+//
+//                        List<Double> ds = new ArrayList<Double>();
+//
+//                        double f = fss.get(i).getPointValueInDouble();
+//                        ds.add(Double.valueOf(dcmFmt.format(f)));
+//                        f = gls.get(i).getPointValueInDouble();
+//                        ds.add(Double.valueOf(dcmFmt.format(f)));
+//                        vos.add(ds);
+//                    }
+//                }
+//
+//               // cal.add(Calendar.MONTH,1);
+//                StringBuilder sb=new StringBuilder();
+//                sb.append("scatter_").append(wpId).append("_").append(j+1);
+//                globalCache.set(String.valueOf(sb), JSON.toJSONString(vos));
+//                System.out.println(String.valueOf(sb.append("完成")));
+//            }
+//        }
+//
+//
+//
+//    }
+//
+//
+//
+//    public  void intialPjScatter() throws Exception {
+//
+//
+//
+//        WindPowerstationTestingPoint2Service windPowerstationTestingPoint2Service= SpringUtils.getBean("windPowerstationTestingPoint2Service");
+//        WindTurbineTestingPointAiService windTurbineTestingPointAiService= SpringUtils.getBean("windTurbineTestingPointAiService");
+//        IGlobalCache globalCache= SpringUtils.getBean("globalCache");
+//
+//
+//        Calendar cal = Calendar.getInstance();
+//        cal.set(Calendar.HOUR_OF_DAY, 0);
+//        cal.set(Calendar.MINUTE, 0);
+//        cal.set(Calendar.SECOND, 0);
+//
+//        int month=cal.get(Calendar.MONTH)+1;
+//
+//
+//        cal.set(Calendar.MONTH, 0);
+//
+//        for(int j=0;j<month;j++)
+//        {
+//            List<List<Double>> vos = new ArrayList<List<Double>>();
+//            cal.set(Calendar.DAY_OF_MONTH, cal.getActualMinimum(Calendar.DAY_OF_MONTH));
+//            Date beginDate = cal.getTime();
+//            Date endDate =null;
+//            if(month-1==cal.get(Calendar.MONTH))
+//            {
+//                cal = Calendar.getInstance();
+//                //cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH));
+//                endDate = cal.getTime();
+//            }else
+//            {
+//                cal.add(Calendar.MONTH,1);;
+//                endDate = cal.getTime();
+//            }
+//
+//
+//            for(Project pj:InitialRunner.pjls)
+//            {
+//                String wpId=pj.getId();
+//                Windpowerstationpointnew gl = windPowerstationTestingPoint2Service.getWindPowerStationTestingPoint2(wpId, Constant.TPOINT_WP_SJGL);
+//                Windpowerstationpointnew fs = windPowerstationTestingPoint2Service.getWindPowerStationTestingPoint2(wpId, Constant.TPOINT_WP_SSFS);
+//
+//                int daynum = DateUtils.daysDiff(beginDate, endDate);
+//                long pried = 600 ;
+//                long count = 6 * 24 * daynum;
+//
+//                DecimalFormat dcmFmt = new DecimalFormat("0.00");
+//                List<PointData> gls = realApiUtil.getHistoryDatasSnap(gl, beginDate.getTime() / 1000, endDate.getTime() / 1000, count, pried);
+//
+//                List<PointData> fss = realApiUtil.getHistoryDatasSnap(fs, beginDate.getTime() / 1000, endDate.getTime() / 1000, count, pried);
+//
+//
+//                if (!gls.isEmpty() && !fss.isEmpty()) {
+//                    for (int i = 0; i < fss.size(); i++) {
+//
+//                        List<Double> ds = new ArrayList<Double>();
+//
+//                        double f = fss.get(i).getPointValueInDouble();
+//                        ds.add(Double.valueOf(dcmFmt.format(f)));
+//                        f = gls.get(i).getPointValueInDouble();
+//                        ds.add(Double.valueOf(dcmFmt.format(f)));
+//                        vos.add(ds);
+//                    }
+//                }
+//
+//                // cal.add(Calendar.MONTH,1);
+//                StringBuilder sb=new StringBuilder();
+//                sb.append("scatter_").append(wpId).append("_").append(j+1);
+//                globalCache.set(String.valueOf(sb), JSON.toJSONString(vos));
+//                System.out.println(String.valueOf(sb.append("完成")));
+//            }
+//        }
+//
+//
+//
+//    }
+//
+//
+//
+//    public  void intialLnScatter() throws Exception {
+//
+//
+//
+//        WindPowerstationTestingPoint2Service windPowerstationTestingPoint2Service= SpringUtils.getBean("windPowerstationTestingPoint2Service");
+//        WindTurbineTestingPointAiService windTurbineTestingPointAiService= SpringUtils.getBean("windTurbineTestingPointAiService");
+//        IGlobalCache globalCache= SpringUtils.getBean("globalCache");
+//
+//
+//        Calendar cal = Calendar.getInstance();
+//        cal.set(Calendar.HOUR_OF_DAY, 0);
+//        cal.set(Calendar.MINUTE, 0);
+//        cal.set(Calendar.SECOND, 0);
+//
+//        int month=cal.get(Calendar.MONTH)+1;
+//
+//
+//        cal.set(Calendar.MONTH, 0);
+//
+//        for(int j=0;j<month;j++)
+//        {
+//            List<List<Double>> vos = new ArrayList<List<Double>>();
+//            cal.set(Calendar.DAY_OF_MONTH, cal.getActualMinimum(Calendar.DAY_OF_MONTH));
+//            Date beginDate = cal.getTime();
+//            Date endDate =null;
+//            if(month-1==cal.get(Calendar.MONTH))
+//            {
+//                cal = Calendar.getInstance();
+//                //cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH));
+//                endDate = cal.getTime();
+//            }else
+//            {
+//                cal.add(Calendar.MONTH,1);;
+//                endDate = cal.getTime();
+//            }
+//
+//
+//            for(Line wp:InitialRunner.linels)
+//            {
+//                String wpId=wp.getId();
+//                Windpowerstationpointnew gl = windPowerstationTestingPoint2Service.getWindPowerStationTestingPoint2(wpId, Constant.TPOINT_WP_SJGL);
+//                Windpowerstationpointnew fs = windPowerstationTestingPoint2Service.getWindPowerStationTestingPoint2(wpId, Constant.TPOINT_WP_SSFS);
+//
+//                int daynum = DateUtils.daysDiff(beginDate, endDate);
+//                long pried = 600 ;
+//                long count = 6 * 24 * daynum;
+//
+//                DecimalFormat dcmFmt = new DecimalFormat("0.00");
+//                List<PointData> gls = realApiUtil.getHistoryDatasSnap(gl, beginDate.getTime() / 1000, endDate.getTime() / 1000, count, pried);
+//
+//                List<PointData> fss = realApiUtil.getHistoryDatasSnap(fs, beginDate.getTime() / 1000, endDate.getTime() / 1000, count, pried);
+//
+//
+//                if (!gls.isEmpty() && !fss.isEmpty()) {
+//                    for (int i = 0; i < fss.size(); i++) {
+//
+//                        List<Double> ds = new ArrayList<Double>();
+//
+//                        double f = fss.get(i).getPointValueInDouble();
+//                        ds.add(Double.valueOf(dcmFmt.format(f)));
+//                        f = gls.get(i).getPointValueInDouble();
+//                        ds.add(Double.valueOf(dcmFmt.format(f)));
+//                        vos.add(ds);
+//                    }
+//                }
+//
+//                // cal.add(Calendar.MONTH,1);
+//                StringBuilder sb=new StringBuilder();
+//                sb.append("scatter_").append(wpId).append("_").append(j+1);
+//                globalCache.set(String.valueOf(sb), JSON.toJSONString(vos));
+//                System.out.println(String.valueOf(sb.append("完成")));
+//            }
+//        }
+//
+//
+//
+//    }
+//
+//
+//    public  void intialWtScatter() throws Exception {
+//
+//
+//        WindTurbineTestingPointAiService windTurbineTestingPointAiService= SpringUtils.getBean("windTurbineTestingPointAiService");
+//        IGlobalCache globalCache= SpringUtils.getBean("globalCache");
+//
+//
+//        Calendar cal = Calendar.getInstance();
+//        cal.set(Calendar.HOUR_OF_DAY, 0);
+//        cal.set(Calendar.MINUTE, 0);
+//        cal.set(Calendar.SECOND, 0);
+//
+//        int month=cal.get(Calendar.MONTH)+1;
+//
+//
+//        cal.set(Calendar.MONTH, 0);
+//
+//
+//            List<List<Double>> vos = new ArrayList<List<Double>>();
+//            cal.set(Calendar.DAY_OF_MONTH, cal.getActualMinimum(Calendar.DAY_OF_MONTH));
+//            Date beginDate = cal.getTime();
+//            Date endDate =null;
+//            if(month-1==cal.get(Calendar.MONTH))
+//            {
+//                cal = Calendar.getInstance();
+//                //cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH));
+//                endDate = cal.getTime();
+//            }else
+//            {
+//                cal.add(Calendar.MONTH,1);;
+//                endDate = cal.getTime();
+//            }
+//
+//
+//            for(Windturbine wt:InitialRunner.wtls)
+//            {
+//                String wpId=wt.getId();
+//                Windturbinetestingpointnew gl = windTurbineTestingPointAiService.getWindTurbineTestingPointAi2(wpId, Constant.TPOINT_WT_FJGL);
+//                Windturbinetestingpointnew fs = windTurbineTestingPointAiService.getWindTurbineTestingPointAi2(wpId, Constant.TPOINT_WT_FJSSFS);
+//
+//                int daynum = DateUtils.daysDiff(beginDate, endDate);
+//                long pried = 600 ;
+//                long count = 6 * 24 * daynum;
+//
+//                DecimalFormat dcmFmt = new DecimalFormat("0.00");
+//                List<PointData> gls = realApiUtil.getHistoryDatasSnap(gl, beginDate.getTime() / 1000, endDate.getTime() / 1000, count, pried);
+//
+//                List<PointData> fss = realApiUtil.getHistoryDatasSnap(fs, beginDate.getTime() / 1000, endDate.getTime() / 1000, count, pried);
+//
+//
+//                if (!gls.isEmpty() && !fss.isEmpty()) {
+//                    for (int i = 0; i < fss.size(); i++) {
+//
+//                        List<Double> ds = new ArrayList<Double>();
+//
+//                        double f = fss.get(i).getPointValueInDouble();
+//                        ds.add(Double.valueOf(dcmFmt.format(f)));
+//                        f = gls.get(i).getPointValueInDouble();
+//                        ds.add(Double.valueOf(dcmFmt.format(f)));
+//                        vos.add(ds);
+//                    }
+//                }
+//
+//                // cal.add(Calendar.MONTH,1);
+//                StringBuilder sb=new StringBuilder();
+//                sb.append("scatter_").append(wpId).append("_").append(month);
+//                globalCache.set(String.valueOf(sb), JSON.toJSONString(vos));
+//                System.out.println(String.valueOf(sb.append("完成")));
+//            }
+//
+//
+//
+//
+//    }
+//
+//    public static void main(String[]args) throws Exception {
+//
+////        SpringApplication.run(SpringbootStart.class, args);
+////
+////        InitialRedis initialRedis=new InitialRedis();
+////        //初始化风机拟合功率
+////      // initialRedis.intialWindturbinepowercurvefitting();
+////
+////        //初始化场站没有散点图
+////        initialRedis.intialWpScatter();
+//    }
+//}

+ 586 - 0
web/health/src/main/java/com/gyee/frame/common/spring/InitialRunner.java

@@ -0,0 +1,586 @@
+package com.gyee.frame.common.spring;
+
+
+import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson.TypeReference;
+import com.gyee.frame.common.cache.RedisService;
+import com.gyee.frame.model.auto.*;
+import com.gyee.frame.service.auto.*;
+import com.gyee.frame.util.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.boot.CommandLineRunner;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * @ClassName : CacheContext
+ * @Author : xieshengjie
+ * @Date: 2021/5/18 9:35
+ * @Description : 缓存
+ */
+@Component
+public class InitialRunner implements CommandLineRunner {
+    Logger logger = LoggerFactory.getLogger(InitialRunner.class);
+
+    private final String QS = "0";
+
+    @Resource
+    private IProBasicEquipmentService proBasicEquipmentService;
+    @Resource
+    private IProBasicLineService proBasicLineService;
+    @Resource
+    private IProBasicProjectService proBasicProjectService;
+
+    @Resource
+    private IProBasicPowerstationService proBasicWindpowerstationService;
+    @Resource
+    private IProBasicMeterPointService proBasicMeterPointService;
+    @Resource
+    private IProEconEquipmentmodelService proEconEquipmentmodelService;
+
+    @Resource
+    private IProEconWtPowerCurveFittingService proEconWtPowerCurveFittingService;
+    @Resource
+    private RedisService redisService;
+    @Resource
+    private IProBasicModelPowerService proBasicModelPowerService;
+    @Resource
+    private IProBasicSubStationService proBasicSubStationService;
+    @Resource
+    private IProBasicWeatherStationService proBasicWeatherStationService;
+    @Resource
+    private IProBasicSquareService proBasicSquareService;
+    @Resource
+    private IProBasicCompanyService proBasicCompanyService;
+    @Resource
+    private IProBasicRegionService proBasicRegionService;
+    @Resource
+    private IProBasicEnergyGroupService proBasicEnergyGroupService;
+
+
+    @Resource
+    private IProBasicPowerstationPointService proBasicPowerstationPointService;
+
+    public static List<ProBasicEquipment> wtls = new ArrayList<>();
+    public static List<ProBasicProject> pjls = new ArrayList<>();
+    public static List<ProBasicLine> lnls = new ArrayList<>();
+    public static List<ProBasicSubStation> subwpls = new ArrayList<>();
+    public static List<ProBasicWeatherStation> weawpls = new ArrayList<>();
+    public static List<ProBasicSquare> sqls = new ArrayList<>();
+    public static List<ProBasicPowerstation> wpls = new ArrayList<>();
+    public static List<ProBasicPowerstation> wplsf = new ArrayList<>();
+    public static List<ProBasicPowerstation> wplsG = new ArrayList<>(); //光电集合
+    public static List<ProBasicPowerstation> zwpls = new ArrayList<>();
+    public static List<ProBasicCompany> cpls = new ArrayList<>();
+    public static List<ProBasicRegion> rgls = new ArrayList<>();
+    public static List<ProBasicEnergyGroup> gpls = new ArrayList<>();
+    public static List<ProBasicPowerstationPoint> powerpointls = new ArrayList<>();
+    public static List<ProBasicEquipmentPoint> Equipmentpointls = new ArrayList<>();
+    public static Map<String, ProBasicProject> pjmap = new HashMap<>();
+    public static Map<String, ProBasicLine> lnmap = new HashMap<>();
+    public static Map<String, ProBasicRegion> rgmap = new HashMap<>();
+    public static Map<String, ProBasicCompany> cpmap = new HashMap<>();
+    public static Map<String, ProBasicEnergyGroup> gpmap = new HashMap<>();
+
+    public static Map<String, List<ProBasicPowerstation>> cpwpmap = new HashMap<>();
+    public static Map<String, List<ProBasicPowerstation>> wpmapls = new HashMap<>();
+    public static Map<String, List<ProBasicPowerstation>> stationls = new HashMap<>();
+
+    public static Map<String, List<ProBasicCompany>> rgcpmap = new HashMap<>();
+    public static Map<String, ProBasicSquare> sqmap = new HashMap<>();
+    public static Map<String, ProBasicPowerstation> wpmap = new HashMap<>();
+    public static List<ProBasicMeterPoint> meterpoints = new ArrayList<>();
+    public static Map<String, ProBasicMeterPoint> meterpointMap = new HashMap<>();
+    public static Map<String, List<ProBasicProject>> wppromap = new HashMap<>();
+    public static Map<String, List<ProBasicProject>> projmap = new HashMap<>();
+    public static Map<String, List<ProBasicLine>> prolinemap = new HashMap<>();
+    public static Map<String, List<ProBasicEquipment>> wpwtmap = new HashMap<>();
+    public static Map<String, List<ProBasicEquipment>> pjwtmap = new HashMap<>();
+    public static Map<String, List<ProBasicEquipment>> lnwtmap = new HashMap<>();
+    public static Map<String, List<ProBasicEquipment>> cmwtlsmap = new HashMap<>();
+    public static Map<String, List<ProBasicEquipment>> rgwtlsmap = new HashMap<>();
+    public static Map<String, Map<String, ProBasicEquipment>> cmwtmap = new HashMap<>();
+    public static Map<String, List<ProBasicEquipment>> sqwtmap = new HashMap<>();
+    public static Map<String, Map<String, ProBasicEquipmentPoint>> wtpAimap = new HashMap<>();// 风电机测点AI表
+    public static Map<String, Map<String, ProBasicEquipmentPoint>> wtpointmap = new HashMap<>();//风机测点
+    public static Map<String, Map<String, ProBasicPowerstationPoint>> linepointmap = new HashMap<>();
+    public static Map<String, Map<String, ProBasicPowerstationPoint>> lnPointmap = new HashMap<>();//线路测点
+    public static Map<String, Map<String, ProBasicPowerstationPoint>> propointmap = new HashMap<>();
+    public static Map<String, Map<String, ProBasicPowerstationPoint>> pjPointmap = new HashMap<>(); //期次测点
+    public static Map<String, Map<String, ProBasicPowerstationPoint>> wppointmap = new HashMap<>();
+    public static Map<String, Map<String, ProBasicPowerstationPoint>> pointwpmap = new HashMap<>();
+    public static Map<String, Map<String, ProBasicPowerstationPoint>> subwppointmap = new HashMap<>();
+    public static Map<String, Map<String, ProBasicPowerstationPoint>> weatherwppointmap = new HashMap<>();
+    public static Map<String, Map<String, ProBasicPowerstationPoint>> companypointmap = new HashMap<>();
+    public static Map<String, Map<String, ProBasicPowerstationPoint>> regionpointmap = new HashMap<>();
+    public static Map<String, Map<String, ProBasicPowerstationPoint>> grouppointmap = new HashMap<>();
+
+    public static Map<String, Map<Double, Double>> zbzglMap = new HashMap<>();
+    public static Map<String, ProEconEquipmentmodel> modelMap = new HashMap<>();
+    public static Map<String, Map<Double, Double>> zzsglMap = new HashMap<>();
+    public static Map<String, Double> modelpower = new HashMap<>();
+
+    public static Map<String, String> wtstandardmap = new HashMap<>();
+    public static Map<String, ProBasicEquipment> wtmap = new HashMap<>();
+
+    public static Map<String, Map<Double, ProBasicModelPower>> modelpowermap = new TreeMap<>();
+
+    public static List<ProBasicModelPower> mpls = new ArrayList<>();
+
+    public static List<ProEconEquipmentmodel> equipmentmodels = new ArrayList<>();
+
+    public static Map<String, List<ProBasicEquipment>> subWtsMap = new HashMap<>();
+    public static List<ProBasicModelPowerRd> theoreticalPowerList = new ArrayList<>();
+    public static Map<String, Map<Double, ProBasicModelPowerRd>> theoreticalPowerMap = new HashMap<>(); //理论,保证功率
+    public static Map<String, Map<Double, ProEconWtPowerCurveFitting>> curveFittingPowerMap = new HashMap<>(); //自算,最优功率
+    public static Map<String, List<ProBasicStatusPoint>> statusMap = new HashMap<>();
+
+    public static Map<String, Map<Double, ProEconWtPowerCurveFitting>> wpcmap = new HashMap<String, Map<Double, ProEconWtPowerCurveFitting>>();
+
+    @Override
+    public void run(String... args) throws Exception {
+        logger.info("缓存开始------------------------------------------------------------");
+
+        equipmentmodels = proEconEquipmentmodelService.list();
+        equipmentmodels.stream().forEach(e -> {
+            modelMap.put(e.getId(), e);
+        });
+        mpls = proBasicModelPowerService.list();
+        mpls.sort(Comparator.comparing(ProBasicModelPower::getSpeed));
+        if (!mpls.isEmpty()) {
+
+            for (ProBasicModelPower mp : mpls) {
+                if (modelpowermap.containsKey(mp.getModelId())) {
+                    Map<Double, ProBasicModelPower> tempmap = modelpowermap.get(mp.getModelId());
+                    tempmap.put(mp.getSpeed(), mp);
+
+                } else {
+                    Map<Double, ProBasicModelPower> tempmap = new HashMap<>();
+                    tempmap.put(mp.getSpeed(), mp);
+                    modelpowermap.put(mp.getModelId(), tempmap);
+                }
+            }
+        }
+        sqls = proBasicSquareService.list().stream().filter(i -> i.getIsAble() == 1).collect(Collectors.toList());
+        if (!sqls.isEmpty()) {
+            for (ProBasicSquare sq : sqls) {
+                sqmap.put(sq.getId(), sq);
+            }
+        }
+
+        cpls = proBasicCompanyService.list().stream().filter(i -> i.getIsAble().equals(1)).collect(Collectors.toList());
+        if (!cpls.isEmpty()) {
+            for (ProBasicCompany sq : cpls) {
+                cpmap.put(sq.getId(), sq);
+
+                if (redisService.hasKey(sq.getId() + "0")) {
+                    String cp0String = redisService.get(sq.getId() + "0");
+                    Map<String, ProBasicPowerstationPoint> stringWindpowerstationpointnewMap = JSONObject.parseObject(cp0String, new TypeReference<Map<String, ProBasicPowerstationPoint>>() {
+                    });
+                    companypointmap.put(sq.getId() + "0", stringWindpowerstationpointnewMap);
+                }
+                if (redisService.hasKey(sq.getId() + "-1")) {
+                    String cp1String = redisService.get(sq.getId() + "-1");
+                    Map<String, ProBasicPowerstationPoint> stringWindpowerstationpointnewMap = JSONObject.parseObject(cp1String, new TypeReference<Map<String, ProBasicPowerstationPoint>>() {
+                    });
+                    companypointmap.put(sq.getId() + "-1", stringWindpowerstationpointnewMap);
+                }
+                if (redisService.hasKey(sq.getId() + "-2")) {
+                    String cp2String = redisService.get(sq.getId() + "-2");
+                    Map<String, ProBasicPowerstationPoint> stringWindpowerstationpointnewMap = JSONObject.parseObject(cp2String, new TypeReference<Map<String, ProBasicPowerstationPoint>>() {
+                    });
+                    companypointmap.put(sq.getId() + "-2", stringWindpowerstationpointnewMap);
+                }
+
+
+            }
+
+        }
+
+
+        rgls = proBasicRegionService.list().stream().filter(i -> i.getIsAble() == 1).collect(Collectors.toList());
+
+
+        if (!rgls.isEmpty()) {
+            for (ProBasicRegion sq : rgls) {
+                rgmap.put(sq.getId(), sq);
+
+                if (redisService.hasKey(sq.getId() + "0")) {
+                    String cp0String = redisService.get(sq.getId() + "0");
+                    Map<String, ProBasicPowerstationPoint> stringWindpowerstationpointnewMap = JSONObject.parseObject(cp0String, new TypeReference<Map<String, ProBasicPowerstationPoint>>() {
+                    });
+                    regionpointmap.put(sq.getId() + "0", stringWindpowerstationpointnewMap);
+                }
+                if (redisService.hasKey(sq.getId() + "-1")) {
+                    String cp1String = redisService.get(sq.getId() + "-1");
+                    Map<String, ProBasicPowerstationPoint> stringWindpowerstationpointnewMap = JSONObject.parseObject(cp1String, new TypeReference<Map<String, ProBasicPowerstationPoint>>() {
+                    });
+                    regionpointmap.put(sq.getId() + "-1", stringWindpowerstationpointnewMap);
+                }
+                if (redisService.hasKey(sq.getId() + "-2")) {
+                    String cp2String = redisService.get(sq.getId() + "-2");
+                    Map<String, ProBasicPowerstationPoint> stringWindpowerstationpointnewMap = JSONObject.parseObject(cp2String, new TypeReference<Map<String, ProBasicPowerstationPoint>>() {
+                    });
+                    regionpointmap.put(sq.getId() + "-2", stringWindpowerstationpointnewMap);
+                }
+            }
+        }
+
+        List<ProBasicEnergyGroup> energyGroups = proBasicEnergyGroupService.list();
+        gpls = energyGroups.stream().filter(e -> e.getIsAble() == 1 && e.getId().endsWith("FGS")).collect(Collectors.toList());
+
+        if (!gpls.isEmpty()) {
+            for (ProBasicEnergyGroup gp : gpls) {
+                gpmap.put(gp.getId(), gp);
+
+                if (redisService.hasKey(gp.getId() + "0")) {
+                    String cp0String = redisService.get(gp.getId() + "0");
+                    Map<String, ProBasicPowerstationPoint> stringWindpowerstationpointnewMap = JSONObject.parseObject(cp0String, new TypeReference<Map<String, ProBasicPowerstationPoint>>() {
+                    });
+                    grouppointmap.put(gp.getId() + "0", stringWindpowerstationpointnewMap);
+                }
+                if (redisService.hasKey(gp.getId() + "-1")) {
+                    String cp1String = redisService.get(gp.getId() + "-1");
+                    Map<String, ProBasicPowerstationPoint> stringWindpowerstationpointnewMap = JSONObject.parseObject(cp1String, new TypeReference<Map<String, ProBasicPowerstationPoint>>() {
+                    });
+                    grouppointmap.put(gp.getId() + "-1", stringWindpowerstationpointnewMap);
+                }
+                if (redisService.hasKey(gp.getId() + "-2")) {
+                    String cp2String = redisService.get(gp.getId() + "-2");
+                    Map<String, ProBasicPowerstationPoint> stringWindpowerstationpointnewMap = JSONObject.parseObject(cp2String, new TypeReference<Map<String, ProBasicPowerstationPoint>>() {
+                    });
+                    grouppointmap.put(gp.getId() + "-2", stringWindpowerstationpointnewMap);
+                }
+            }
+        }
+
+
+        for (ProBasicCompany cp : cpls) {
+            if (rgcpmap.containsKey(cp.getRegionId())) {
+                rgcpmap.get(cp.getRegionId()).add(cp);
+            } else {
+                List<ProBasicCompany> wps = new ArrayList<>();
+                wps.add(cp);
+                rgcpmap.put(cp.getRegionId(), wps);
+            }
+        }
+
+        for (ProBasicPowerstation wp : wpls) {
+            if (cpwpmap.containsKey(wp.getCompanyId())) {
+                cpwpmap.get(wp.getCompanyId()).add(wp);
+            } else {
+                List<ProBasicPowerstation> wps = new ArrayList<>();
+                wps.add(wp);
+                cpwpmap.put(wp.getCompanyId(), wps);
+            }
+        }
+
+
+        wtls = proBasicEquipmentService.list().stream().filter(i -> i.getIsable() == 1).collect(Collectors.toList());
+        logger.info(wtls.size() + "");
+        wtls.forEach(wt -> {
+            if (modelMap.containsKey(wt.getModelId())) {
+                ProEconEquipmentmodel equipmentmodel = modelMap.get(wt.getModelId());
+                modelpower.put(wt.getId(), equipmentmodel.getPowerProduction().doubleValue());
+            }
+
+
+            wtmap.put(wt.getId(), wt);
+            //标杆风机初始化
+            wtstandardmap.put(wt.getId(), wt.getId());
+            String wtString = redisService.get(wt.getId());
+            Map<String, ProBasicEquipmentPoint> stringWindturbinetestingpointnewMap = JSONObject.parseObject(wtString, new TypeReference<Map<String, ProBasicEquipmentPoint>>() {
+            });
+            wtpAimap.put(wt.getId(), stringWindturbinetestingpointnewMap);
+
+
+            if (wpwtmap.containsKey(wt.getWindpowerstationId())) {
+                wpwtmap.get(wt.getWindpowerstationId()).add(wt);
+            } else {
+                List<ProBasicEquipment> wps = new ArrayList<>();
+                wps.add(wt);
+                wpwtmap.put(wt.getWindpowerstationId(), wps);
+            }
+
+            if (pjwtmap.containsKey(wt.getProjectId())) {
+                pjwtmap.get(wt.getProjectId()).add(wt);
+            } else {
+                List<ProBasicEquipment> pjs = new ArrayList<>();
+                pjs.add(wt);
+                pjwtmap.put(wt.getProjectId(), pjs);
+            }
+            if (lnwtmap.containsKey(wt.getLineId())) {
+                lnwtmap.get(wt.getLineId()).add(wt);
+            } else {
+                List<ProBasicEquipment> lnls = new ArrayList<>();
+                lnls.add(wt);
+                lnwtmap.put(wt.getLineId(), lnls);
+            }
+            if (cmwtlsmap.containsKey(wt.getCompanyId())) {
+                cmwtlsmap.get(wt.getCompanyId()).add(wt);
+            } else {
+                List<ProBasicEquipment> cmls = new ArrayList<>();
+                cmls.add(wt);
+                cmwtlsmap.put(wt.getCompanyId(), cmls);
+            }
+            if (rgwtlsmap.containsKey(wt.getRegionId())) {
+                rgwtlsmap.get(wt.getRegionId()).add(wt);
+            } else {
+                List<ProBasicEquipment> rgls = new ArrayList<>();
+                rgls.add(wt);
+                rgwtlsmap.put(wt.getRegionId(), rgls);
+            }
+
+            if (sqwtmap.containsKey(wt.getSquareId())) {
+                sqwtmap.get(wt.getSquareId()).add(wt);
+            } else {
+                List<ProBasicEquipment> lnls = new ArrayList<>();
+                lnls.add(wt);
+                sqwtmap.put(wt.getSquareId(), lnls);
+            }
+
+            if (cmwtmap.containsKey(wt.getCompanyId())) {
+                cmwtmap.get(wt.getCompanyId()).put(wt.getId(), wt);
+            } else {
+                Map<String, ProBasicEquipment> map = new HashMap<>();
+                map.put(wt.getId(), wt);
+                cmwtmap.put(wt.getCompanyId(), map);
+            }
+        });
+
+        //初始化标杆风机
+        for (ProBasicEquipment wt : wtls) {
+            if (wpwtmap.containsKey(wt.getLineId())) {
+                List<ProBasicEquipment> wts = wpwtmap.get(wt.getLineId());
+                for (ProBasicEquipment w : wts) {
+                    if (StringUtils.notEmp(w.getIsStandard()) && w.getIsStandard() != 0) {
+                        wtstandardmap.put(wt.getId(), w.getId());
+                        break;
+                    }
+                }
+            }
+            if (pjwtmap.containsKey(wt.getLineId())) {
+                List<ProBasicEquipment> wts = pjwtmap.get(wt.getLineId());
+                for (ProBasicEquipment w : wts) {
+                    if (StringUtils.notEmp(w.getIsStandard()) && w.getIsStandard() != 0) {
+                        wtstandardmap.put(wt.getId(), w.getId());
+                        break;
+                    }
+                }
+            }
+            if (lnwtmap.containsKey(wt.getLineId())) {
+                List<ProBasicEquipment> wts = lnwtmap.get(wt.getLineId());
+                for (ProBasicEquipment w : wts) {
+                    if (StringUtils.notEmp(w.getIsStandard()) && w.getIsStandard() != 0) {
+                        wtstandardmap.put(wt.getId(), w.getId());
+                        break;
+                    }
+                }
+            }
+        }
+
+
+        pjls = proBasicProjectService.list().stream().filter(i -> i.getIsAble() == 1).collect(Collectors.toList());
+        pjls.stream().forEach(p -> {
+            pjmap.put(p.getId(), p);
+            if (wppromap.containsKey(p.getWindpowerstationId())) {
+                wppromap.get(p.getWindpowerstationId()).add(p);
+            } else {
+                List<ProBasicProject> prolist = new ArrayList<>();
+                prolist.add(p);
+                wppromap.put(p.getWindpowerstationId(), prolist);
+            }
+            String pjString = redisService.get(p.getId());
+            Map<String, ProBasicPowerstationPoint> stringWindpowerstationpointnewMap = JSONObject.parseObject(pjString, new TypeReference<Map<String, ProBasicPowerstationPoint>>() {
+            });
+            propointmap.put(p.getId(), stringWindpowerstationpointnewMap);
+
+        });
+        projmap = pjls.stream().collect(Collectors.groupingBy(ProBasicProject::getWindpowerstationId));
+
+        subwpls = proBasicSubStationService.list().stream().filter(i -> i.getIsAble() == 1).collect(Collectors.toList());
+        subwpls.stream().forEach(sub -> {
+
+            String subString = redisService.get(sub.getId());
+            Map<String, ProBasicPowerstationPoint> stringWindpowerstationpointnewMap = JSONObject.parseObject(subString, new TypeReference<Map<String, ProBasicPowerstationPoint>>() {
+            });
+            subwppointmap.put(sub.getId(), stringWindpowerstationpointnewMap);
+
+//            List<ProBasicEquipment> collect = wtls.stream().filter(wt -> wt.getSubstationId().equals(sub.getId())).collect(Collectors.toList());
+//            subWtsMap.put(sub.getId(),collect);
+
+        });
+
+        weawpls = proBasicWeatherStationService.list().stream().filter(i -> i.getIsAble() == 1).collect(Collectors.toList());
+        weawpls.stream().forEach(weather -> {
+
+            String subString = redisService.get(weather.getId());
+            Map<String, ProBasicPowerstationPoint> stringWindpowerstationpointnewMap = JSONObject.parseObject(subString, new TypeReference<Map<String, ProBasicPowerstationPoint>>() {
+            });
+            weatherwppointmap.put(weather.getId(), stringWindpowerstationpointnewMap);
+
+
+        });
+        //线路
+        lnls = proBasicLineService.list().stream().filter(i -> StringUtils.isNotNull(pjmap.get(i.getProjectId())) && i.getIsAble() == 1).collect(Collectors.toList());
+        lnls.stream().forEach(l -> {
+            lnmap.put(l.getId(), l);
+            if (prolinemap.containsKey(l.getProjectId())) {
+                prolinemap.get(l.getProjectId()).add(l);
+            } else {
+                List<ProBasicLine> lineList = new ArrayList<>();
+                lineList.add(l);
+                prolinemap.put(l.getProjectId(), lineList);
+            }
+            String lnString = redisService.get(l.getId());
+            Map<String, ProBasicPowerstationPoint> stringWindpowerstationpointnewMap = JSONObject.parseObject(lnString, new TypeReference<Map<String, ProBasicPowerstationPoint>>() {
+            });
+            linepointmap.put(l.getId(), stringWindpowerstationpointnewMap);
+        });
+
+
+        zwpls = proBasicWindpowerstationService.list().stream().filter(i -> i.getIsAble() == 1).collect(Collectors.toList());
+        ;
+        wpls = proBasicWindpowerstationService.list().stream().filter(i -> i.getIsAble() == 1).collect(Collectors.toList());
+        ;
+        for (ProBasicPowerstation wp : wpls) {
+            if (cpwpmap.containsKey(wp.getCompanyId())) {
+                cpwpmap.get(wp.getCompanyId()).add(wp);
+            } else {
+                List<ProBasicPowerstation> wps = new ArrayList<>();
+                wps.add(wp);
+                cpwpmap.put(wp.getCompanyId(), wps);
+            }
+        }
+        meterpoints = proBasicMeterPointService.list().stream().filter(i -> i.getIsAble() == 1).collect(Collectors.toList());
+        meterpoints.stream().forEach(meterpoint -> {
+            meterpointMap.put(meterpoint.getId(), meterpoint);
+        });
+
+
+        wpls.stream().forEach(wp -> {
+
+            wpmap.put(wp.getId(), wp);
+            String wpString = redisService.get(wp.getId());
+            Map<String, ProBasicPowerstationPoint> stringMapMap = JSONObject.parseObject(wpString, new TypeReference<Map<String, ProBasicPowerstationPoint>>() {
+            });
+            wppointmap.put(wp.getId(), stringMapMap);
+        });
+
+        if (!wpls.isEmpty()) {
+            for (ProBasicPowerstation wp : wpls) {
+                if (wp.getId().endsWith("FDC_STA")) {
+                    wplsf.add(wp);
+                }
+                if (wp.getId().endsWith("GDC_STA")) {
+                    wplsG.add(wp);
+                }
+
+                if (wpmapls.containsKey(wp.getId())) {
+                    List<ProBasicPowerstation> ls = wpmapls.get(wp.getId());
+                    ls.add(wp);
+                    wpmapls.put(wp.getId(), ls);
+                } else {
+                    List<ProBasicPowerstation> ls = new ArrayList<>();
+                    ls.add(wp);
+                    wpmapls.put(wp.getId(), ls);
+                }
+
+
+//                if(wp.getWindType().equals(-1) && wp.getWindType().equals(-2)){
+//                    List<ProBasicPowerstation> ls = stationls.get(wp.getWindType());
+//                    stationls.put(wp.getWindType()+QS,ls);
+//                }
+
+
+                wpmap.put(wp.getId(), wp);
+            }
+        }
+
+
+        Map<String, ProBasicPowerstationPoint> items = null;
+        powerpointls = proBasicPowerstationPointService.list().stream().filter(i -> i.getId() != null).collect(Collectors.toList());
+        if (powerpointls != null && !powerpointls.isEmpty()) {
+            for (int i = 0; i < powerpointls.size(); i++) {
+
+                if (pjmap.containsKey(powerpointls.get(i).getWindpowerstationId())) {
+                    ProBasicPowerstationPoint point = powerpointls.get(i);
+                    if (pjPointmap.containsKey(point.getWindpowerstationId())) {
+                        items = pjPointmap.get(point.getWindpowerstationId());
+                        items.put(point.getUniformCode(), point);
+                    } else {
+                        items = new HashMap<String, ProBasicPowerstationPoint>();
+                        pjPointmap.put(point.getWindpowerstationId(), items);
+                        items.put(point.getUniformCode(), point);
+                    }
+                } else if (lnmap.containsKey(powerpointls.get(i).getWindpowerstationId())) {
+                    ProBasicPowerstationPoint point = powerpointls.get(i);
+                    if (lnPointmap.containsKey(point.getWindpowerstationId())) {
+                        items = lnPointmap.get(point.getWindpowerstationId());
+                        items.put(point.getUniformCode(), point);
+                    } else {
+                        items = new HashMap<String, ProBasicPowerstationPoint>();
+                        lnPointmap.put(point.getWindpowerstationId(), items);
+                        items.put(point.getUniformCode(), point);
+                    }
+                } else {
+                    ProBasicPowerstationPoint point = powerpointls.get(i);
+                    if (pointwpmap.containsKey(point.getWindpowerstationId())) {
+                        items = pointwpmap.get(point.getWindpowerstationId());
+                        items.put(point.getUniformCode(), point);
+                    } else {
+                        items = new HashMap<String, ProBasicPowerstationPoint>();
+                        pointwpmap.put(point.getWindpowerstationId(), items);
+                        items.put(point.getUniformCode(), point);
+                    }
+                }
+            }
+        }
+
+
+        String llglString = redisService.get("ZLLGL");
+        theoreticalPowerMap = JSONObject.parseObject(llglString, new TypeReference<Map<String, Map<Double, ProBasicModelPowerRd>>>() {
+        });
+
+        llglString = redisService.get("ZLLGLLS");
+        theoreticalPowerList = JSONObject.parseObject(llglString, new TypeReference<List<ProBasicModelPowerRd>>() {
+        });
+
+        String sszzt = redisService.get("SSZZT");
+        statusMap = JSONObject.parseObject(sszzt, new TypeReference<Map<String, List<ProBasicStatusPoint>>>() {
+        });
+
+
+        List<ProEconWtPowerCurveFitting> wpclist = proEconWtPowerCurveFittingService.list();
+
+
+        if (!wpclist.isEmpty()) {
+            for (ProEconWtPowerCurveFitting wc : wpclist) {
+
+                if (curveFittingPowerMap.containsKey(wc.getWindturbineId())) {
+                    curveFittingPowerMap.get(wc.getWindturbineId()).put(wc.getSpeed(), wc);
+                } else {
+                    Map<Double, ProEconWtPowerCurveFitting> powerMap = new HashMap<>();
+                    powerMap.put(wc.getSpeed(), wc);
+                    curveFittingPowerMap.put(wc.getWindturbineId(), powerMap);
+                }
+
+                if (wpcmap.containsKey(wc.getWindturbineId())) {
+                    Map<Double, ProEconWtPowerCurveFitting> map = wpcmap.get(wc.getWindturbineId());
+                    map.put(wc.getSpeed(), wc);
+                } else {
+                    Map<Double, ProEconWtPowerCurveFitting> map = new HashMap<Double, ProEconWtPowerCurveFitting>();
+                    map.put(wc.getSpeed(), wc);
+                    wpcmap.put(wc.getWindturbineId(), map);
+                }
+            }
+        }
+
+
+        logger.info("缓存结束------------------------------------------------------------");
+    }
+}

+ 116 - 0
web/health/src/main/java/com/gyee/frame/common/spring/SpringUtils.java

@@ -0,0 +1,116 @@
+package com.gyee.frame.common.spring;
+
+import org.springframework.aop.framework.AopContext;
+import org.springframework.beans.BeansException;
+import org.springframework.beans.factory.NoSuchBeanDefinitionException;
+import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
+import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
+import org.springframework.stereotype.Component;
+
+/**
+* spring工具类 方便在非spring管理环境中获取bean
+* @ClassName: SpringUtils
+* @author gyee
+* @date 2019-09-11 11:28
+*
+ */
+@Component
+public final class SpringUtils implements BeanFactoryPostProcessor
+{
+    /** Spring应用上下文环境 */
+    private static ConfigurableListableBeanFactory beanFactory;
+
+    @Override
+    public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException
+    {
+        SpringUtils.beanFactory = beanFactory;
+    }
+
+    /**
+     * 获取对象
+     *
+     * @param name
+     * @return Object 一个以所给名字注册的bean的实例
+     * @throws org.springframework.beans.BeansException
+     *
+     */
+    @SuppressWarnings("unchecked")
+    public static <T> T getBean(String name) throws BeansException
+    {
+        return (T) beanFactory.getBean(name);
+    }
+
+    /**
+     * 获取类型为requiredType的对象
+     *
+     * @param clz
+     * @return
+     * @throws org.springframework.beans.BeansException
+     *
+     */
+    public static <T> T getBean(Class<T> clz) throws BeansException
+    {
+        T result = (T) beanFactory.getBean(clz);
+        return result;
+    }
+
+    /**
+     * 如果BeanFactory包含一个与所给名称匹配的bean定义,则返回true
+     *
+     * @param name
+     * @return boolean
+     */
+    public static boolean containsBean(String name)
+    {
+        return beanFactory.containsBean(name);
+    }
+
+    /**
+     * 判断以给定名字注册的bean定义是一个singleton还是一个prototype。 如果与给定名字相应的bean定义没有被找到,将会抛出一个异常(NoSuchBeanDefinitionException)
+     *
+     * @param name
+     * @return boolean
+     * @throws org.springframework.beans.factory.NoSuchBeanDefinitionException
+     *
+     */
+    public static boolean isSingleton(String name) throws NoSuchBeanDefinitionException
+    {
+        return beanFactory.isSingleton(name);
+    }
+
+    /**
+     * @param name
+     * @return Class 注册对象的类型
+     * @throws org.springframework.beans.factory.NoSuchBeanDefinitionException
+     *
+     */
+    public static Class<?> getType(String name) throws NoSuchBeanDefinitionException
+    {
+        return beanFactory.getType(name);
+    }
+
+    /**
+     * 如果给定的bean名字在bean定义中有别名,则返回这些别名
+     *
+     * @param name
+     * @return
+     * @throws org.springframework.beans.factory.NoSuchBeanDefinitionException
+     *
+     */
+    public static String[] getAliases(String name) throws NoSuchBeanDefinitionException
+    {
+        return beanFactory.getAliases(name);
+    }
+
+    /**
+     * 获取aop代理对象
+     * 
+     * @param invoker
+     * @return
+     */
+    @SuppressWarnings("unchecked")
+    public static <T> T getAopProxy(T invoker)
+    {
+        return (T) AopContext.currentProxy();
+    }
+}

+ 20 - 0
web/health/src/main/java/com/gyee/frame/common/spring/WpEnum.java

@@ -0,0 +1,20 @@
+package com.gyee.frame.common.spring;
+
+public  enum  WpEnum {
+
+    MHS_FDC("MHS_FDC"),
+    NSS_FDC("NSS_FDC"),
+    QS_FDC("QS_FDC"),
+    SBQ_FDC("SBQ_FDC"),
+    XS_FDC("XS_FDC"),
+    DWK_GDC("DWK_GDC"),
+    PL_GDC("PL_GDC"),
+    XH_GDC("XH_GDC"),
+    MCH_GDC("MCH_GDC"),
+    HZJ_GDC("HZJ_GDC");
+
+    public String id;
+    WpEnum(final  String c) {
+        id = c;
+    }
+}

+ 89 - 0
web/health/src/main/java/com/gyee/frame/common/support/CharsetKit.java

@@ -0,0 +1,89 @@
+package com.gyee.frame.common.support;
+
+import com.gyee.frame.util.StringUtils;
+
+import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
+
+/**
+ * 字符集工具类
+ * 
+ * @author fc
+ *
+ */
+public class CharsetKit
+{
+    /** ISO-8859-1 */
+    public static final String ISO_8859_1 = "ISO-8859-1";
+    /** UTF-8 */
+    public static final String UTF_8 = "UTF-8";
+    /** GBK */
+    public static final String GBK = "GBK";
+
+    /** ISO-8859-1 */
+    public static final Charset CHARSET_ISO_8859_1 = Charset.forName(ISO_8859_1);
+    /** UTF-8 */
+    public static final Charset CHARSET_UTF_8 = Charset.forName(UTF_8);
+    /** GBK */
+    public static final Charset CHARSET_GBK = Charset.forName(GBK);
+
+    /**
+     * 转换为Charset对象
+     * 
+     * @param charset 字符集,为空则返回默认字符集
+     * @return Charset
+     */
+    public static Charset charset(String charset)
+    {
+        return StringUtils.isEmpty(charset) ? Charset.defaultCharset() : Charset.forName(charset);
+    }
+
+    /**
+     * 转换字符串的字符集编码
+     * 
+     * @param source 字符串
+     * @param srcCharset 源字符集,默认ISO-8859-1
+     * @param destCharset 目标字符集,默认UTF-8
+     * @return 转换后的字符集
+     */
+    public static String convert(String source, String srcCharset, String destCharset)
+    {
+        return convert(source, Charset.forName(srcCharset), Charset.forName(destCharset));
+    }
+
+    /**
+     * 转换字符串的字符集编码
+     * 
+     * @param source 字符串
+     * @param srcCharset 源字符集,默认ISO-8859-1
+     * @param destCharset 目标字符集,默认UTF-8
+     * @return 转换后的字符集
+     */
+    public static String convert(String source, Charset srcCharset, Charset destCharset)
+    {
+        if (null == srcCharset)
+        {
+            srcCharset = StandardCharsets.ISO_8859_1;
+        }
+
+        if (null == destCharset)
+        {
+            srcCharset = StandardCharsets.UTF_8;
+        }
+
+        if (StringUtils.isEmpty(source) || srcCharset.equals(destCharset))
+        {
+            return source;
+        }
+        return new String(source.getBytes(srcCharset), destCharset);
+    }
+
+    /**
+     * @return 系统字符集编码
+     */
+    public static String systemCharset()
+    {
+        return Charset.defaultCharset().name();
+    }
+
+}

文件差异内容过多而无法显示
+ 1057 - 0
web/health/src/main/java/com/gyee/frame/common/support/Convert.java


+ 240 - 0
web/health/src/main/java/com/gyee/frame/common/support/ConvertUtil.java

@@ -0,0 +1,240 @@
+package com.gyee.frame.common.support;
+
+import java.math.BigDecimal;
+import java.util.Arrays;
+import java.util.List;
+import com.gyee.frame.util.StringUtils;
+
+import cn.hutool.core.util.StrUtil;
+
+/**
+ * 类型转换器
+ * 
+ * @author fc
+ * 
+ */
+public class ConvertUtil {
+
+	/**
+	 * 转换为字符串<br>
+	 * 如果给定的值为null,或者转换失败,返回默认值<br>
+	 * 转换失败不会报错
+	 * 
+	 * @param value 被转换的值
+	 * @param defaultValue 转换错误时的默认值
+	 * @return 结果
+	 */
+	public static String toStr(Object value, String defaultValue) {
+		if (null == value) {
+			return defaultValue;
+		}
+		if (value instanceof String) {
+			return (String) value;
+		}
+		return value.toString();
+	}
+
+	/**
+	 * 转换为Integer数组<br>
+	 * @param split 被转换的值
+	 * @return 结果
+	 */
+	public static Integer[] toIntArray(String str) {
+		return toIntArray(",", str);
+	}
+
+	/**
+	 * 转换为Integer数组<br>
+	 * @param split 分隔符
+	 * @param split 被转换的值
+	 * @return 结果
+	 */
+	public static Integer[] toIntArray(String split, String str) {
+		if (StrUtil.isEmpty(str)) {
+			return new Integer[] {};
+		}
+		String[] strings = str.split(split);
+		final Integer[] ints = new Integer[strings.length];
+		for (int i = 0; i < strings.length; i++) {
+			final Integer v = toInt(strings[i], 0);
+			ints[i] = v;
+		}
+		return ints;
+	}
+
+	/**
+	 * 转换为int<br>
+	 * 如果给定的值为空,或者转换失败,返回默认值<br>
+	 * 转换失败不会报错
+	 * @param value 被转换的值
+	 * @param defaultValue 转换错误时的默认值
+	 * @return 结果
+	 */
+	public static Integer toInt(Object value, Integer defaultValue) {
+		if (value == null) {
+			return defaultValue;
+		}
+		if (value instanceof Integer) {
+			return (Integer) value;
+		}
+		if (value instanceof Number) {
+			return ((Number) value).intValue();
+		}
+		final String valueStr = toStr(value, null);
+		if (StringUtils.isEmpty(valueStr)) {
+			return defaultValue;
+		}
+		try {
+			return Integer.parseInt(valueStr.trim());
+		} catch (Exception e) {
+			return defaultValue;
+		}
+	}
+
+	/**
+	 * 转换为List<String>数组<br>
+	 * @param split 被转换的值
+	 * @return 结果
+	 */
+	public static List<String> toListStrArray(String str) {
+		String[] stringArray = toStrArray(str);
+		List<String> stringB = Arrays.asList(stringArray);
+		return stringB;
+	}
+
+	/**
+	 * 转换为String数组<br> 
+	 * @param split 被转换的值
+	 * @return 结果
+	 */
+	public static String[] toStrArray(String str) {
+		return toStrArray(",", str);
+	}
+
+	/**
+	 * 转换为String数组<br>
+	 * 
+	 * @param split 分隔符
+	 * @param split 被转换的值
+	 * @return 结果
+	 */
+	public static String[] toStrArray(String split, String str) {
+		return str.split(split);
+	}
+	/**
+     * 转换为Long数组<br>
+     * 
+     * @param split 被转换的值
+     * @return 结果
+     */
+    public static Long[] toLongArray(String str)
+    {
+        return toLongArray(",", str);
+    }
+    /**
+     * 转换为Long数组<br>
+     * 
+     * @param isIgnoreConvertError 是否忽略转换错误,忽略则给值null
+     * @param values 被转换的值
+     * @return 结果
+     */
+    public static Long[] toLongArray(String split, String str)
+    {
+        if (StringUtils.isEmpty(str))
+        {
+            return new Long[] {};
+        }
+        String[] arr = str.split(split);
+        final Long[] longs = new Long[arr.length];
+        for (int i = 0; i < arr.length; i++)
+        {
+            final Long v = toLong(arr[i], null);
+            longs[i] = v;
+        }
+        return longs;
+    }
+    /**
+     * 转换为long<br>
+     * 如果给定的值为空,或者转换失败,返回默认值<br>
+     * 转换失败不会报错
+     * 
+     * @param value 被转换的值
+     * @param defaultValue 转换错误时的默认值
+     * @return 结果
+     */
+    public static Long toLong(Object value, Long defaultValue)
+    {
+        if (value == null)
+        {
+            return defaultValue;
+        }
+        if (value instanceof Long)
+        {
+            return (Long) value;
+        }
+        if (value instanceof Number)
+        {
+            return ((Number) value).longValue();
+        }
+        final String valueStr = toStr(value, null);
+        if (StringUtils.isEmpty(valueStr))
+        {
+            return defaultValue;
+        }
+        try
+        {
+            // 支持科学计数法
+            return new BigDecimal(valueStr.trim()).longValue();
+        }
+        catch (Exception e)
+        {
+            return defaultValue;
+        }
+    }
+    
+    /**
+     * 转换为BigDecimal<br>
+     * 如果给定的值为空,或者转换失败,返回默认值<br>
+     * 转换失败不会报错
+     * 
+     * @param value 被转换的值
+     * @param defaultValue 转换错误时的默认值
+     * @return 结果
+     */
+    public static BigDecimal toBigDecimal(Object value, BigDecimal defaultValue)
+    {
+        if (value == null)
+        {
+            return defaultValue;
+        }
+        if (value instanceof BigDecimal)
+        {
+            return (BigDecimal) value;
+        }
+        if (value instanceof Long)
+        {
+            return new BigDecimal((Long) value);
+        }
+        if (value instanceof Double)
+        {
+            return new BigDecimal((Double) value);
+        }
+        if (value instanceof Integer)
+        {
+            return new BigDecimal((Integer) value);
+        }
+        final String valueStr = toStr(value, null);
+        if (StringUtils.isEmpty(valueStr))
+        {
+            return defaultValue;
+        }
+        try
+        {
+            return new BigDecimal(valueStr);
+        }
+        catch (Exception e)
+        {
+            return defaultValue;
+        }
+    }
+}

+ 77 - 0
web/health/src/main/java/com/gyee/frame/common/support/KaptchaTextCreator.java

@@ -0,0 +1,77 @@
+package com.gyee.frame.common.support;
+
+import java.security.SecureRandom;
+import java.util.Random;
+import com.google.code.kaptcha.text.impl.DefaultTextCreator;
+
+/**
+ * 验证码实现类
+ * @author cs
+ */
+public class KaptchaTextCreator extends DefaultTextCreator
+{
+
+    private static final String[] CNUMBERS = {"0","1","2","3","4","5","6","7","8","9","10"};
+
+    @Override
+    public String getText()
+    {
+        Integer result = 0;
+        Random random = new SecureRandom();
+        int x = random.nextInt(10);
+        int y = random.nextInt(10);
+        StringBuilder suChinese = new StringBuilder();
+        int randomoperands = (int) Math.round(Math.random() * 2);
+        if (randomoperands == 0)
+        {
+            result = x * y;
+            suChinese.append(CNUMBERS[x]);
+            suChinese.append("*");
+            suChinese.append(CNUMBERS[y]);
+        }
+        else if (randomoperands == 1)
+        {
+            if (!(x == 0) && y % x == 0)
+            {
+                result = y / x;
+                suChinese.append(CNUMBERS[y]);
+                suChinese.append("/");
+                suChinese.append(CNUMBERS[x]);
+            }
+            else
+            {
+                result = x + y;
+                suChinese.append(CNUMBERS[x]);
+                suChinese.append("+");
+                suChinese.append(CNUMBERS[y]);
+            }
+        }
+        else if (randomoperands == 2)
+        {
+            if (x >= y)
+            {
+                result = x - y;
+                suChinese.append(CNUMBERS[x]);
+                suChinese.append("-");
+                suChinese.append(CNUMBERS[y]);
+            }
+            else
+            {
+                result = y - x;
+                suChinese.append(CNUMBERS[y]);
+                suChinese.append("-");
+                suChinese.append(CNUMBERS[x]);
+            }
+        }
+        else
+        {
+            result = x + y;
+            suChinese.append(CNUMBERS[x]);
+            suChinese.append("+");
+            suChinese.append(CNUMBERS[y]);
+        }
+        suChinese.append("=?@" + result);
+        return suChinese.toString();
+    }
+
+}

+ 20 - 0
web/health/src/main/java/com/gyee/frame/controller/ProEconEarlyWarningMainController.java

@@ -0,0 +1,20 @@
+package com.gyee.frame.controller;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 预警统计主表 前端控制器
+ * </p>
+ *
+ * @author shilin
+ * @since 2023-04-24
+ */
+@RestController
+@RequestMapping("//pro-econ-early-warning-main")
+public class ProEconEarlyWarningMainController {
+
+}

+ 20 - 0
web/health/src/main/java/com/gyee/frame/controller/ProEconEarlyWarningSubController.java

@@ -0,0 +1,20 @@
+package com.gyee.frame.controller;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 预警统计子表 前端控制器
+ * </p>
+ *
+ * @author shilin
+ * @since 2023-04-24
+ */
+@RestController
+@RequestMapping("//pro-econ-early-warning-sub")
+public class ProEconEarlyWarningSubController {
+
+}

+ 20 - 0
web/health/src/main/java/com/gyee/frame/controller/ProEconFailureStatisticMainController.java

@@ -0,0 +1,20 @@
+package com.gyee.frame.controller;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 故障统计主表 前端控制器
+ * </p>
+ *
+ * @author shilin
+ * @since 2023-04-24
+ */
+@RestController
+@RequestMapping("//pro-econ-failure-statistic-main")
+public class ProEconFailureStatisticMainController {
+
+}

+ 20 - 0
web/health/src/main/java/com/gyee/frame/controller/ProEconFailureStatisticsSubController.java

@@ -0,0 +1,20 @@
+package com.gyee.frame.controller;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 故障统计子表 前端控制器
+ * </p>
+ *
+ * @author shilin
+ * @since 2023-04-24
+ */
+@RestController
+@RequestMapping("//pro-econ-failure-statistics-sub")
+public class ProEconFailureStatisticsSubController {
+
+}

+ 20 - 0
web/health/src/main/java/com/gyee/frame/controller/ProEconHealthSystemController.java

@@ -0,0 +1,20 @@
+package com.gyee.frame.controller;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 健康模型主表 前端控制器
+ * </p>
+ *
+ * @author shilin
+ * @since 2023-04-24
+ */
+@RestController
+@RequestMapping("//pro-econ-health-system")
+public class ProEconHealthSystemController {
+
+}

+ 20 - 0
web/health/src/main/java/com/gyee/frame/controller/ProEconHealthSystemSubController.java

@@ -0,0 +1,20 @@
+package com.gyee.frame.controller;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 健康模型子表 前端控制器
+ * </p>
+ *
+ * @author shilin
+ * @since 2023-04-24
+ */
+@RestController
+@RequestMapping("//pro-econ-health-system-sub")
+public class ProEconHealthSystemSubController {
+
+}

+ 20 - 0
web/health/src/main/java/com/gyee/frame/controller/ProEconPartPowerstatticMainController.java

@@ -0,0 +1,20 @@
+package com.gyee.frame.controller;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 部件功率健康统计主表 前端控制器
+ * </p>
+ *
+ * @author shilin
+ * @since 2023-04-24
+ */
+@RestController
+@RequestMapping("//pro-econ-part-powerstattic-main")
+public class ProEconPartPowerstatticMainController {
+
+}

+ 20 - 0
web/health/src/main/java/com/gyee/frame/controller/ProEconPartStatisticsMainController.java

@@ -0,0 +1,20 @@
+package com.gyee.frame.controller;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 部件健康统计主表 前端控制器
+ * </p>
+ *
+ * @author shilin
+ * @since 2023-04-24
+ */
+@RestController
+@RequestMapping("//pro-econ-part-statistics-main")
+public class ProEconPartStatisticsMainController {
+
+}

+ 20 - 0
web/health/src/main/java/com/gyee/frame/controller/ProEconPartStatisticsSubController.java

@@ -0,0 +1,20 @@
+package com.gyee.frame.controller;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 部件健康统计子表 前端控制器
+ * </p>
+ *
+ * @author shilin
+ * @since 2023-04-24
+ */
+@RestController
+@RequestMapping("//pro-econ-part-statistics-sub")
+public class ProEconPartStatisticsSubController {
+
+}

+ 20 - 0
web/health/src/main/java/com/gyee/frame/controller/ProEconPartTemperatureMainController.java

@@ -0,0 +1,20 @@
+package com.gyee.frame.controller;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 部件温度统计 前端控制器
+ * </p>
+ *
+ * @author shilin
+ * @since 2023-04-24
+ */
+@RestController
+@RequestMapping("//pro-econ-part-temperature-main")
+public class ProEconPartTemperatureMainController {
+
+}

+ 20 - 0
web/health/src/main/java/com/gyee/frame/controller/ProEconPartTemperatureSubController.java

@@ -0,0 +1,20 @@
+package com.gyee.frame.controller;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 部件温度统计子表 前端控制器
+ * </p>
+ *
+ * @author shilin
+ * @since 2023-04-24
+ */
+@RestController
+@RequestMapping("//pro-econ-part-temperature-sub")
+public class ProEconPartTemperatureSubController {
+
+}

+ 20 - 0
web/health/src/main/java/com/gyee/frame/controller/ProEconPartpowerStatticsSubController.java

@@ -0,0 +1,20 @@
+package com.gyee.frame.controller;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 部件功率健康统计子表 前端控制器
+ * </p>
+ *
+ * @author shilin
+ * @since 2023-04-24
+ */
+@RestController
+@RequestMapping("//pro-econ-partpower-stattics-sub")
+public class ProEconPartpowerStatticsSubController {
+
+}

+ 20 - 0
web/health/src/main/java/com/gyee/frame/controller/ProEconRecommenMainController.java

@@ -0,0 +1,20 @@
+package com.gyee.frame.controller;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 健康追踪主表 前端控制器
+ * </p>
+ *
+ * @author shilin
+ * @since 2023-04-24
+ */
+@RestController
+@RequestMapping("//pro-econ-recommen-main")
+public class ProEconRecommenMainController {
+
+}

+ 20 - 0
web/health/src/main/java/com/gyee/frame/controller/ProEconStateJudgmentDayController.java

@@ -0,0 +1,20 @@
+package com.gyee.frame.controller;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 健康状态日记录 前端控制器
+ * </p>
+ *
+ * @author shilin
+ * @since 2023-04-24
+ */
+@RestController
+@RequestMapping("//pro-econ-state-judgment-day")
+public class ProEconStateJudgmentDayController {
+
+}

+ 20 - 0
web/health/src/main/java/com/gyee/frame/controller/ProEconStateJudgmentRealController.java

@@ -0,0 +1,20 @@
+package com.gyee.frame.controller;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 健康状态实时记录 前端控制器
+ * </p>
+ *
+ * @author shilin
+ * @since 2023-04-24
+ */
+@RestController
+@RequestMapping("//pro-econ-state-judgment-real")
+public class ProEconStateJudgmentRealController {
+
+}

+ 20 - 0
web/health/src/main/java/com/gyee/frame/controller/ProEconWeatherFdController.java

@@ -0,0 +1,20 @@
+package com.gyee.frame.controller;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 气象预测-日 前端控制器
+ * </p>
+ *
+ * @author shilin
+ * @since 2023-04-23
+ */
+@RestController
+@RequestMapping("//pro-econ-weather-fd")
+public class ProEconWeatherFdController {
+
+}

+ 20 - 0
web/health/src/main/java/com/gyee/frame/controller/ProEconWeatherFhController.java

@@ -0,0 +1,20 @@
+package com.gyee.frame.controller;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 气象预测-小时 前端控制器
+ * </p>
+ *
+ * @author shilin
+ * @since 2023-04-23
+ */
+@RestController
+@RequestMapping("//pro-econ-weather-fh")
+public class ProEconWeatherFhController {
+
+}

+ 16 - 0
web/health/src/main/java/com/gyee/frame/mapper/auto/ProBasicCompanyMapper.java

@@ -0,0 +1,16 @@
+package com.gyee.frame.mapper.auto;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gyee.frame.model.auto.ProBasicCompany;
+
+/**
+ * <p>
+ * 省公司表 Mapper 接口
+ * </p>
+ *
+ * @author shilin
+ * @since 2022-10-31
+ */
+public interface ProBasicCompanyMapper extends BaseMapper<ProBasicCompany> {
+
+}

+ 16 - 0
web/health/src/main/java/com/gyee/frame/mapper/auto/ProBasicEnergyGroupMapper.java

@@ -0,0 +1,16 @@
+package com.gyee.frame.mapper.auto;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gyee.frame.model.auto.ProBasicEnergyGroup;
+
+/**
+ * <p>
+ * 集团 Mapper 接口
+ * </p>
+ *
+ * @author shilin
+ * @since 2022-10-31
+ */
+public interface ProBasicEnergyGroupMapper extends BaseMapper<ProBasicEnergyGroup> {
+
+}

+ 16 - 0
web/health/src/main/java/com/gyee/frame/mapper/auto/ProBasicEquipmentMapper.java

@@ -0,0 +1,16 @@
+package com.gyee.frame.mapper.auto;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gyee.frame.model.auto.ProBasicEquipment;
+
+/**
+ * <p>
+ * 风机&光伏 Mapper 接口
+ * </p>
+ *
+ * @author shilin
+ * @since 2022-10-31
+ */
+public interface ProBasicEquipmentMapper extends BaseMapper<ProBasicEquipment> {
+
+}

+ 16 - 0
web/health/src/main/java/com/gyee/frame/mapper/auto/ProBasicEquipmentPointMapper.java

@@ -0,0 +1,16 @@
+package com.gyee.frame.mapper.auto;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gyee.frame.model.auto.ProBasicEquipmentPoint;
+
+/**
+ * <p>
+ * 设备测点 Mapper 接口
+ * </p>
+ *
+ * @author shilin
+ * @since 2022-10-31
+ */
+public interface ProBasicEquipmentPointMapper extends BaseMapper<ProBasicEquipmentPoint> {
+
+}

+ 16 - 0
web/health/src/main/java/com/gyee/frame/mapper/auto/ProBasicLineMapper.java

@@ -0,0 +1,16 @@
+package com.gyee.frame.mapper.auto;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gyee.frame.model.auto.ProBasicLine;
+
+/**
+ * <p>
+ * 集电线路 Mapper 接口
+ * </p>
+ *
+ * @author shilin
+ * @since 2022-10-31
+ */
+public interface ProBasicLineMapper extends BaseMapper<ProBasicLine> {
+
+}

+ 16 - 0
web/health/src/main/java/com/gyee/frame/mapper/auto/ProBasicMeterPointMapper.java

@@ -0,0 +1,16 @@
+package com.gyee.frame.mapper.auto;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gyee.frame.model.auto.ProBasicMeterPoint;
+
+/**
+ * <p>
+ * 电计量点表 Mapper 接口
+ * </p>
+ *
+ * @author shilin
+ * @since 2022-10-31
+ */
+public interface ProBasicMeterPointMapper extends BaseMapper<ProBasicMeterPoint> {
+
+}

+ 16 - 0
web/health/src/main/java/com/gyee/frame/mapper/auto/ProBasicModelPowerMapper.java

@@ -0,0 +1,16 @@
+package com.gyee.frame.mapper.auto;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gyee.frame.model.auto.ProBasicModelPower;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author shilin
+ * @since 2022-10-31
+ */
+public interface ProBasicModelPowerMapper extends BaseMapper<ProBasicModelPower> {
+
+}

+ 16 - 0
web/health/src/main/java/com/gyee/frame/mapper/auto/ProBasicModelPowerRdMapper.java

@@ -0,0 +1,16 @@
+package com.gyee.frame.mapper.auto;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gyee.frame.model.auto.ProBasicModelPowerRd;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author shilin
+ * @since 2022-11-06
+ */
+public interface ProBasicModelPowerRdMapper extends BaseMapper<ProBasicModelPowerRd> {
+
+}

+ 16 - 0
web/health/src/main/java/com/gyee/frame/mapper/auto/ProBasicPowerstationMapper.java

@@ -0,0 +1,16 @@
+package com.gyee.frame.mapper.auto;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gyee.frame.model.auto.ProBasicPowerstation;
+
+/**
+ * <p>
+ * 场站表 Mapper 接口
+ * </p>
+ *
+ * @author shilin
+ * @since 2022-11-12
+ */
+public interface ProBasicPowerstationMapper extends BaseMapper<ProBasicPowerstation> {
+
+}

+ 20 - 0
web/health/src/main/java/com/gyee/frame/mapper/auto/ProBasicPowerstationPointMapper.java

@@ -0,0 +1,20 @@
+package com.gyee.frame.mapper.auto;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gyee.frame.model.auto.ProBasicPowerstationPoint;
+
+/**
+ * <p>
+ * 场站测点,期次测点,线路测点,三级公司测点,区域测点
+
+
+
++方阵测点 Mapper 接口
+ * </p>
+ *
+ * @author shilin
+ * @since 2022-10-31
+ */
+public interface ProBasicPowerstationPointMapper extends BaseMapper<ProBasicPowerstationPoint> {
+
+}

+ 16 - 0
web/health/src/main/java/com/gyee/frame/mapper/auto/ProBasicProjectMapper.java

@@ -0,0 +1,16 @@
+package com.gyee.frame.mapper.auto;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gyee.frame.model.auto.ProBasicProject;
+
+/**
+ * <p>
+ * 工程表 Mapper 接口
+ * </p>
+ *
+ * @author shilin
+ * @since 2022-10-31
+ */
+public interface ProBasicProjectMapper extends BaseMapper<ProBasicProject> {
+
+}

+ 16 - 0
web/health/src/main/java/com/gyee/frame/mapper/auto/ProBasicProjectPlanMapper.java

@@ -0,0 +1,16 @@
+package com.gyee.frame.mapper.auto;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gyee.frame.model.auto.ProBasicProjectPlan;
+
+/**
+ * <p>
+ * 工程计划表 Mapper 接口
+ * </p>
+ *
+ * @author shilin
+ * @since 2022-10-21
+ */
+public interface ProBasicProjectPlanMapper extends BaseMapper<ProBasicProjectPlan> {
+
+}

+ 16 - 0
web/health/src/main/java/com/gyee/frame/mapper/auto/ProBasicRealtimeDbconfigMapper.java

@@ -0,0 +1,16 @@
+package com.gyee.frame.mapper.auto;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gyee.frame.model.auto.ProBasicRealtimeDbconfig;
+
+/**
+ * <p>
+ * 实时数据库配置表 Mapper 接口
+ * </p>
+ *
+ * @author shilin
+ * @since 2022-10-21
+ */
+public interface ProBasicRealtimeDbconfigMapper extends BaseMapper<ProBasicRealtimeDbconfig> {
+
+}

+ 16 - 0
web/health/src/main/java/com/gyee/frame/mapper/auto/ProBasicRegionMapper.java

@@ -0,0 +1,16 @@
+package com.gyee.frame.mapper.auto;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gyee.frame.model.auto.ProBasicRegion;
+
+/**
+ * <p>
+ * 区域 Mapper 接口
+ * </p>
+ *
+ * @author shilin
+ * @since 2022-10-31
+ */
+public interface ProBasicRegionMapper extends BaseMapper<ProBasicRegion> {
+
+}

+ 16 - 0
web/health/src/main/java/com/gyee/frame/mapper/auto/ProBasicSquareMapper.java

@@ -0,0 +1,16 @@
+package com.gyee.frame.mapper.auto;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gyee.frame.model.auto.ProBasicSquare;
+
+/**
+ * <p>
+ * 方阵 Mapper 接口
+ * </p>
+ *
+ * @author shilin
+ * @since 2022-10-31
+ */
+public interface ProBasicSquareMapper extends BaseMapper<ProBasicSquare> {
+
+}

+ 16 - 0
web/health/src/main/java/com/gyee/frame/mapper/auto/ProBasicStatusPointMapper.java

@@ -0,0 +1,16 @@
+package com.gyee.frame.mapper.auto;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gyee.frame.model.auto.ProBasicStatusPoint;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author shilin
+ * @since 2022-11-17
+ */
+public interface ProBasicStatusPointMapper extends BaseMapper<ProBasicStatusPoint> {
+
+}

+ 0 - 0
web/health/src/main/java/com/gyee/frame/mapper/auto/ProBasicSubStationMapper.java


部分文件因为文件数量过多而无法显示