Explorar o código

Update统计分析代码优化修复

Yue %!s(int64=2) %!d(string=hai) anos
pai
achega
8da8509ba0
Modificáronse 16 ficheiros con 1613 adicións e 1602 borrados
  1. 18 19
      VB_DSM_V2.1/Scripts/Dockers/docker-compose-iwb.yml
  2. 3 3
      VB_DSM_V2.1/Scripts/Dockers/docker-compose.yml
  3. 2 2
      VB_DSM_V2.1/vbdsm-data-upload/vbdsm-hj212/vbdsm-hj212-datacollect/src/main/resources/config/application.yml
  4. 3 3
      VB_DSM_V2.1/vbdsm-data-upload/vbdsm-hj212/vbdsm-hj212-server/src/main/java/cn/vbdsm/hj212/server/executor/ReaTimeExector.java
  5. 2 2
      VB_DSM_V2.1/vbdsm-data-upload/vbdsm-hj212/vbdsm-hj212-server/src/main/resources/config/application.yml
  6. 1 1
      VB_DSM_V2.1/vbdsm-job/xxl-job-admin/src/main/resources/application.properties
  7. 128 129
      VB_DSM_V2.1/vbdsm-statistics/vbdsm-analysis/src/main/java/cn/vbdsm/analysis/dao/AnalData24hEnergyDao.java
  8. 254 261
      VB_DSM_V2.1/vbdsm-statistics/vbdsm-analysis/src/main/java/cn/vbdsm/analysis/dao/OnlineDataEnergyDao.java
  9. 557 555
      VB_DSM_V2.1/vbdsm-statistics/vbdsm-analysis/src/main/java/cn/vbdsm/analysis/timer/impl/FgpTimer.java
  10. 104 90
      VB_DSM_V2.1/vbdsm-statistics/vbdsm-analysis/src/main/java/cn/vbdsm/analysis/timer/impl/H24Timer.java
  11. 436 436
      VB_DSM_V2.1/vbdsm-statistics/vbdsm-analysis/src/main/java/cn/vbdsm/common/constants/CronExpression.java
  12. 43 38
      VB_DSM_V2.1/vbdsm-statistics/vbdsm-analysis/src/main/resources/local/schedule.xml
  13. 56 57
      VB_DSM_V2.1/vbdsm-statistics/vbdsm-analysis/src/main/resources/test/schedule.xml
  14. 2 2
      VB_DSM_V2.1/vbdsm-statistics/vbdsm-statistic/src/main/java/cn/vbdsm/statistic/biz/impl/OnlineWarnAnalBizImpl.java
  15. 2 2
      VB_DSM_V2.1/vbdsm-statistics/vbdsm-statistic/src/main/resources/config/application-dev.yml
  16. 2 2
      VB_DSM_V2.1/vbdsm-web/vbdsm-gov-new/src/main/resources/config/application-dev.yml

+ 18 - 19
VB_DSM_V2.1/Scripts/Dockers/docker-compose-iwb.yml

@@ -2,7 +2,7 @@ version: '3'
 
 services:
   mysql:
-    image: mysql:5.7.4
+    image: mysql:5.7.24
     container_name: vbdsm-mysql
     restart: always
     environment:
@@ -14,10 +14,9 @@ services:
       # 数据挂载
       - /home/iwb/vbdsm/mysql/data/:/var/lib/mysql/
       # 配置挂载
-      - /home/iwb/vbdsm/mysql/conf/my.cnf:/etc/mysql/my.cnf
-
+      - /home/iwb/vbdsm/mysql/conf:/etc/mysql/conf.d/
+      - /home/iwb/vbdsm/mysql/conf/mysql.conf.d/mysqld.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf
     privileged: true
-
     networks:
       - vbdsm-net
   nginx-web:
@@ -62,7 +61,7 @@ services:
 
   vber-server-passport:
     build: ../../vbdsm-web/vbdsm-passport
-    image: vbdsm-passport:2.1.0
+    image: vbdsm-passport:2.1.1
     container_name: vbdsm-passport
     restart: always
     ports:
@@ -79,7 +78,7 @@ services:
 
   vber-server-manage:
     build: ../../vbdsm-web/vbdsm-manage
-    image: vbdsm-manage:2.1.0
+    image: vbdsm-manage:2.1.1
     container_name: vbdsm-manage
     restart: always
     ports:
@@ -96,7 +95,7 @@ services:
 
   vber-server-powerservice:
     build: ../../vbdsm-web/vbdsm-powerservice
-    image: vbdsm-powerservice:2.1.0
+    image: vbdsm-powerservice:2.1.1
     container_name: vbdsm-powerservice
     restart: always
     ports:
@@ -113,7 +112,7 @@ services:
 
   vber-server-gov:
     build: ../../vbdsm-web/vbdsm-gov
-    image: vbdsm-gov:2.1.0
+    image: vbdsm-gov:2.1.1
     container_name: vbdsm-gov
     restart: always
     ports:
@@ -130,7 +129,7 @@ services:
 
   vber-server-gov-new:
     build: ../../vbdsm-web/vbdsm-gov-new
-    image: vbdsm-gov-new:2.1.0
+    image: vbdsm-gov-new:2.1.1
     container_name: vbdsm-gov-new
     restart: always
     ports:
@@ -147,7 +146,7 @@ services:
 
   vber-server-explorer:
     build: ../../vbdsm-web/vbdsm-explorer
-    image: vbdsm-explorer:2.1.0
+    image: vbdsm-explorer:2.1.1
     container_name: vbdsm-explorer
     restart: always
     ports:
@@ -165,7 +164,7 @@ services:
 
   vber-server-analysis:
     build: ../../vbdsm-statistics/vbdsm-analysis
-    image: vbdsm-analysis:2.1.0
+    image: vbdsm-analysis:2.1.1
     container_name: vbdsm-analysis
     restart: always
     ports:
@@ -183,14 +182,15 @@ services:
 
   vber-server-xxl-job:
     build: ../../vbdsm-job/xxl-job-admin
-    image: vbdsm-job:2.1.0
+    image: vbdsm-job:2.1.1
     container_name: vbdsm-job
     restart: always
     ports:
-      - "7200:8080"
+      - "7200:7200"
     environment:
-      - TZ
-      - SERVER_PORT
+      # SERVER_PORT: 7200
+      TZ: Asia/Shanghai
+      PARAMS: --server.port=7200 --spring.datasource.url=jdbc:mysql://vbdsm-mysql:3306/vbdsm_xxl_job?characterEncoding=UTF-8&serverTimezone=UTC&useSSL=false&useSSL=false
     volumes:
       # 日志文件
       - /home/iwb/vbdsm/server-logs/job/:/vbdsm/logs/
@@ -201,16 +201,15 @@ services:
 
   vber-server-statistics:
     build: ../../vbdsm-statistics/vbdsm-statistic
-    image: vbdsm-statistics:2.1.0
+    image: vbdsm-statistics:2.1.1
     container_name: vbdsm-statistics
     restart: always
     ports:
       # 内部使用了7211端口
       - "7210:8080"
     environment:
-      # 时区上海
-      - TZ
-      - SERVER_PORT
+      TZ: Asia/Shanghai
+      PARAMS: --server.port=7210 --xxl.job.admin.addresses=http://vbdsm-job:7200
     volumes:
       # 日志文件
       - /home/iwb/vbdsm/server-logs/statistics/:/vbdsm/logs/

+ 3 - 3
VB_DSM_V2.1/Scripts/Dockers/docker-compose.yml

@@ -2,7 +2,7 @@ version: '3'
 
 services:
   mysql:
-    image: mysql:5.7.4
+    image: mysql:5.7.24
     container_name: vbdsm-mysql
     restart: always
     environment:
@@ -14,7 +14,7 @@ services:
       # 数据挂载
       - /home/yue/vbdsm/mysql/data/:/var/lib/mysql/
       # 配置挂载
-      - /home/yue/vbdsm/mysql/conf/my.cnf:/etc/mysql/my.cnf
+      - /home/yue/vbdsm/mysql/conf/:/etc/mysql/
     privileged: true
 
     networks:
@@ -189,7 +189,7 @@ services:
     environment:
       # SERVER_PORT: 7200
       TZ: Asia/Shanghai
-      PARAMS: --server.port=7200 --spring.datasource.url=jdbc:mysql://47.112.30.247:4501/vbdsm_xxl_job?characterEncoding=UTF-8&serverTimezone=UTC&useSSL=false&useSSL=false
+      PARAMS: --server.port=7200 --spring.datasource.url=jdbc:mysql://vbdsm-mysql:3306/vbdsm_xxl_job?characterEncoding=UTF-8&serverTimezone=UTC&useSSL=false&useSSL=false
     volumes:
       # 日志文件
       - /home/yue/vbdsm/server-logs/job/:/vbdsm/logs/

+ 2 - 2
VB_DSM_V2.1/vbdsm-data-upload/vbdsm-hj212/vbdsm-hj212-datacollect/src/main/resources/config/application.yml

@@ -5,8 +5,8 @@ server:
 spring:
   redis:
     host: 47.112.30.247
-    #password: Iwb-2017
-    port: 16379
+    password: Iwb-2017
+    port: 6399
     database: 5
     lettuce:
       pool:

+ 3 - 3
VB_DSM_V2.1/vbdsm-data-upload/vbdsm-hj212/vbdsm-hj212-server/src/main/java/cn/vbdsm/hj212/server/executor/ReaTimeExector.java

@@ -50,7 +50,9 @@ public class ReaTimeExector implements IExecutor {
             request.getCtx().channel().writeAndFlush(response);
             return;
         }
-        time = time - time % 500;
+        //校正时间 15分钟间隔
+        time = time - (time - (time / 10000) * 10000) % 1500;
+
 
         log.debug(cp);
         DataUploadRequest dataUpload = DataUploadRequest.parse(cp);
@@ -61,8 +63,6 @@ public class ReaTimeExector implements IExecutor {
             OnlineTerminal onlineTerminal = new OnlineTerminal();
             onlineTerminal.setTerminalId(tid);
             MonitorCache entity = dataBiz.getMonitorByPk(cn, tid);
-            //Long entity = 20L;
-            //Long entity = null;
             if (entity != null) {
                 VbDsmBody body = dataUpload.getBody(tid);
                 if (body.getP() != null) {

+ 2 - 2
VB_DSM_V2.1/vbdsm-data-upload/vbdsm-hj212/vbdsm-hj212-server/src/main/resources/config/application.yml

@@ -10,8 +10,8 @@ vbdsm:
 spring:
   redis:
     host: 47.112.30.247
-    #password: Iwb-2017
-    port: 16379
+    password: Iwb-2017
+    port: 6399
     database: 5
     lettuce:
       pool:

+ 1 - 1
VB_DSM_V2.1/vbdsm-job/xxl-job-admin/src/main/resources/application.properties

@@ -18,7 +18,7 @@ spring.freemarker.settings.number_format=0.##########
 mybatis.mapper-locations=classpath:/mybatis-mapper/*Mapper.xml
 #mybatis.type-aliases-package=com.xxl.job.admin.core.model
 ### xxl-job, datasource
-spring.datasource.url=jdbc:mysql://47.112.30.247:23306/vbdsm_xxl_job?characterEncoding=UTF-8&serverTimezone=UTC&useSSL=false&useSSL=false
+spring.datasource.url=jdbc:mysql://47.112.30.247:4501/vbdsm_xxl_job?characterEncoding=UTF-8&serverTimezone=UTC&useSSL=false&useSSL=false
 spring.datasource.username=root
 spring.datasource.password=123456
 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

+ 128 - 129
VB_DSM_V2.1/vbdsm-statistics/vbdsm-analysis/src/main/java/cn/vbdsm/analysis/dao/AnalData24hEnergyDao.java

@@ -1,149 +1,148 @@
 package cn.vbdsm.analysis.dao;
 
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-
-import javax.annotation.Resource;
-import javax.core.common.jdbc.BaseDaoSupport;
-import javax.core.common.jdbc.QueryRule;
-import javax.sql.DataSource;
-
-import org.springframework.stereotype.Repository;
-
 import cn.vbdsm.analysis.model.AnalData24hEnergy;
 import cn.vbdsm.common.constants.DataSourceConstant;
 import cn.vbdsm.common.utils.DataSourceUtil;
 import cn.vbdsm.core.dao.datasource.DynamicDataSource;
 import cn.vbdsm.core.dao.datasource.DynamicDataSourceEntry;
+import org.springframework.stereotype.Repository;
+
+import javax.annotation.Resource;
+import javax.core.common.jdbc.BaseDaoSupport;
+import javax.core.common.jdbc.QueryRule;
+import javax.sql.DataSource;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
 
 /**
  * 日电量统计整点数据
- * 
+ *
  * @author Tanyongde
  * @version 1.0
  */
 @Repository
 public class AnalData24hEnergyDao extends BaseDaoSupport<AnalData24hEnergy, Long> {
 
-	private DynamicDataSourceEntry dynamicDataSourceEntry;
-	private SimpleDateFormat todaySdf = new SimpleDateFormat("yyyyMMdd");
+    private DynamicDataSourceEntry dynamicDataSourceEntry;
+    private final SimpleDateFormat todaySdf = new SimpleDateFormat("yyyyMMdd");
 //	private SimpleDateFormat fullSdf = new SimpleDateFormat("yyyyMMddHHmmss");
 
-	@Override
-	protected String getPKColumn() {
-		return "id";
-	}
-
-	/**
-	 * 配置动态数据源
-	 * 
-	 * @param dataSource
-	 */
-	@Resource(name="dynamicDataSource")
-	public void setDataSource(DataSource dataSource) {
-		dynamicDataSourceEntry = ((DynamicDataSource) dataSource).getDataSourceEntry();
-		super.setDataSourceReadOnly(dataSource);
-		super.setDataSourceWrite(dataSource);
-	}
-
-	public List<AnalData24hEnergy> selectByTime(List<String> terminalIds,Long getTime) {
-		
-		String today = todaySdf.format(new Date());
-		String time = getTime.toString().substring(0,8);
-		
-		
-		Long date = Long.valueOf(("" + getTime).substring(0,8));
-		Long hour = Long.valueOf(("" + getTime).substring(8,10));
-		
-		QueryRule queryRule = QueryRule.getInstance();
-		queryRule.andIn("terminalId", terminalIds);
-		queryRule.andEqual("getDate", date);
-		queryRule.andEqual("hour", hour);
-		
-		if(today.equals(time)){
-			dynamicDataSourceEntry.set(DataSourceConstant.DB_CURR);
-			this.setTableName(super.op.tableName);
-			return super.find(queryRule);
-		}else{//不是今天的查历史库
-			int year = Integer.valueOf(time.substring(0,4));
-			String month = time.substring(4,6);
-			this.setTableName(super.op.tableName + "_" + month);
-			dynamicDataSourceEntry.set(year);
-			List<AnalData24hEnergy> r = super.find(queryRule);
-			this.setTableName(super.op.tableName);
-			return r;
-		}
-	}
-	
-	public List<AnalData24hEnergy> selectByTimesAndTerminalIds(Long time,List<String> terminalIds){
-		if(null == terminalIds || terminalIds.size() == 0){return new ArrayList<AnalData24hEnergy>(); }
-		Date today = new Date();
-		Long todayTime = Long.valueOf(todaySdf.format(today));
-		
-		Long date = Long.valueOf(time.toString().substring(0,8));
-		QueryRule queryRule = QueryRule.getInstance();
-		queryRule.andEqual("getDate", date);
-		queryRule.andIn("terminalId", terminalIds);
-		//queryRule.addAscOrder("hour");
-		if(todayTime > time){
-			//根据年,月 切换到 年数据源,月分表
-			int year = DataSourceUtil.parse(time).get("year");
-			int month = DataSourceUtil.parse(time).get("month");
-			dynamicDataSourceEntry.set(year);
-			this.setTableName(DataSourceUtil.getTableName(super.op.tableName,month));
-			return super.find(queryRule);
-		}else{
-			dynamicDataSourceEntry.set(DataSourceConstant.DB_CURR);
-			this.setTableName(super.op.tableName);
-			return super.find(queryRule);
-		}
-	}
-	
-	public List<AnalData24hEnergy> selectByTimesAndTerminalIdForHistory(Long time,String terminalId){
-		QueryRule queryRule = QueryRule.getInstance();
-		queryRule.andEqual("getDate",Long.valueOf(time.toString().substring(0,8)));
-		queryRule.andEqual("terminalId",terminalId);
-		int year = DataSourceUtil.parse(time).get("year");
-		int month = DataSourceUtil.parse(time).get("month");
-		//queryRule.addAscOrder("hour");
-		dynamicDataSourceEntry.set(year);
-		this.setTableName(DataSourceUtil.getTableName(super.op.tableName,month));
-		return super.find(queryRule);
-	}
-	
-	
-	public int replaceForBatch(List<AnalData24hEnergy> data) throws Exception {
-		//保存到历史库
-		Long time = data.get(0).getGetDate();
-		if(time == 0){ return 0;}
-		//根据年,月 切换到 年数据源,月分表
-		int year = 0;
-		int month = 0;
-		try{
-			year = DataSourceUtil.parse(time).get("year");
-			month = DataSourceUtil.parse(time).get("month");
-			
-		}catch(Exception e){
-			
-		}
-		
-		if(0 == year || month == 0){
-			return 0;
-		}
-		
-//			LOG.error("replaceAll==========time=" + time + ",year=" + year + ",month=" + month);
-		dynamicDataSourceEntry.set(year);
-		this.setTableName(DataSourceUtil.getTableName(super.op.tableName,month));
-		this.replaceAll(data);
-	//		LOG.warn("成功写入" + data.size() + "条数据");
-			//		LOG.warn("成功写入" + data.size() + "条数据");
-		
-		//保存到实时库
-		this.setTableName(this.op.tableName);
-		dynamicDataSourceEntry.set(DataSourceConstant.DB_CURR);
-		return this.replaceAll(data);
-	}
+    @Override
+    protected String getPKColumn() {
+        return "id";
+    }
+
+    /**
+     * 配置动态数据源
+     *
+     * @param dataSource
+     */
+    @Resource(name = "dynamicDataSource")
+    public void setDataSource(DataSource dataSource) {
+        dynamicDataSourceEntry = ((DynamicDataSource) dataSource).getDataSourceEntry();
+        super.setDataSourceReadOnly(dataSource);
+        super.setDataSourceWrite(dataSource);
+    }
+
+    public List<AnalData24hEnergy> selectByTime(List<String> terminalIds, Long getTime) {
+
+        String today = todaySdf.format(new Date());
+        String time = getTime.toString().substring(0, 8);
+
+
+        Long date = Long.valueOf(("" + getTime).substring(0, 8));
+        Long hour = Long.valueOf(("" + getTime).substring(8, 10));
+
+        QueryRule queryRule = QueryRule.getInstance();
+        queryRule.andIn("terminalId", terminalIds);
+        queryRule.andEqual("getDate", date);
+        queryRule.andEqual("hour", hour);
+
+        if (today.equals(time)) {
+            dynamicDataSourceEntry.set(DataSourceConstant.DB_CURR);
+            this.setTableName(super.op.tableName);
+            return super.find(queryRule);
+        } else {//不是今天的查历史库
+            int year = Integer.valueOf(time.substring(0, 4));
+            String month = time.substring(4, 6);
+            this.setTableName(super.op.tableName + "_" + month);
+            dynamicDataSourceEntry.set(year);
+            List<AnalData24hEnergy> r = super.find(queryRule);
+            this.setTableName(super.op.tableName);
+            return r;
+        }
+    }
+
+    public List<AnalData24hEnergy> selectByTimesAndTerminalIds(Long time, List<String> terminalIds) {
+        if (null == terminalIds || terminalIds.size() == 0) {
+            return new ArrayList<AnalData24hEnergy>();
+        }
+        Date today = new Date();
+        Long todayTime = Long.valueOf(todaySdf.format(today));
+
+        Long date = Long.valueOf(time.toString().substring(0, 8));
+        QueryRule queryRule = QueryRule.getInstance();
+        queryRule.andEqual("getDate", date);
+        queryRule.andIn("terminalId", terminalIds);
+        //queryRule.addAscOrder("hour");
+        if (todayTime > time) {
+            //根据年,月 切换到 年数据源,月分表
+            int year = DataSourceUtil.parse(time).get("year");
+            int month = DataSourceUtil.parse(time).get("month");
+            dynamicDataSourceEntry.set(year);
+            this.setTableName(DataSourceUtil.getTableName(super.op.tableName, month));
+            return super.find(queryRule);
+        } else {
+            dynamicDataSourceEntry.set(DataSourceConstant.DB_CURR);
+            this.setTableName(super.op.tableName);
+            return super.find(queryRule);
+        }
+    }
+
+    public List<AnalData24hEnergy> selectByTimesAndTerminalIdForHistory(Long time, String terminalId) {
+        QueryRule queryRule = QueryRule.getInstance();
+        queryRule.andEqual("getDate", Long.valueOf(time.toString().substring(0, 8)));
+        queryRule.andEqual("terminalId", terminalId);
+        int year = DataSourceUtil.parse(time).get("year");
+        int month = DataSourceUtil.parse(time).get("month");
+        //queryRule.addAscOrder("hour");
+        dynamicDataSourceEntry.set(year);
+        this.setTableName(DataSourceUtil.getTableName(super.op.tableName, month));
+        return super.find(queryRule);
+    }
+
+
+    public int replaceForBatch(List<AnalData24hEnergy> data) throws Exception {
+        //保存到历史库
+        Long time = data.get(0).getGetDate();
+        if (time == 0) {
+            return 0;
+        }
+        //根据年,月 切换到 年数据源,月分表
+        int year = 0;
+        int month = 0;
+        try {
+            year = DataSourceUtil.parse(time).get("year");
+            month = DataSourceUtil.parse(time).get("month");
+
+        } catch (Exception e) {
+
+        }
+
+        if (0 == year || month == 0) {
+            return 0;
+        }
+
+        dynamicDataSourceEntry.set(year);
+        this.setTableName(DataSourceUtil.getTableName(super.op.tableName, month));
+        this.replaceAll(data);
+
+        //保存到实时库
+        this.setTableName(this.op.tableName);
+        dynamicDataSourceEntry.set(DataSourceConstant.DB_CURR);
+        return this.replaceAll(data);
+    }
 
 }

+ 254 - 261
VB_DSM_V2.1/vbdsm-statistics/vbdsm-analysis/src/main/java/cn/vbdsm/analysis/dao/OnlineDataEnergyDao.java

@@ -1,279 +1,272 @@
 package cn.vbdsm.analysis.dao;
 
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Calendar;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
+import cn.vbdsm.analysis.model.OnlineDataEnergy;
+import cn.vbdsm.common.constants.DataSourceConstant;
+import cn.vbdsm.common.utils.DataSourceUtil;
+import cn.vbdsm.core.dao.datasource.DynamicDataSource;
+import cn.vbdsm.core.dao.datasource.DynamicDataSourceEntry;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import org.springframework.stereotype.Repository;
 
 import javax.annotation.Resource;
 import javax.core.common.jdbc.BaseDaoSupport;
 import javax.core.common.jdbc.QueryRule;
 import javax.core.common.utils.DateTime;
 import javax.sql.DataSource;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.*;
 
-import org.springframework.stereotype.Repository;
+@Repository
+public class OnlineDataEnergyDao extends BaseDaoSupport<OnlineDataEnergy, String> {
 
-import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONArray;
-import cn.vbdsm.analysis.model.OnlineDataEnergy;
-import cn.vbdsm.common.constants.DataSourceConstant;
-import cn.vbdsm.common.utils.DataSourceUtil;
-import cn.vbdsm.core.dao.datasource.DynamicDataSource;
-import cn.vbdsm.core.dao.datasource.DynamicDataSourceEntry;
+    private final static String PK_COLUMN = "terminalId";
+    private final SimpleDateFormat dateSdf = new SimpleDateFormat("yyyyMMdd");
+    private final SimpleDateFormat hourSdf = new SimpleDateFormat("yyyyMMddHH");
+    private DynamicDataSourceEntry dynamicDataSourceEntry;
 
-@Repository
-public class OnlineDataEnergyDao extends BaseDaoSupport<OnlineDataEnergy,String>{
-
-	private DynamicDataSourceEntry dynamicDataSourceEntry;
-	private final static String PK_COLUMN = "terminalId";
-	
-	private SimpleDateFormat dateSdf = new SimpleDateFormat("yyyyMMdd");
-	private SimpleDateFormat hourSdf = new SimpleDateFormat("yyyyMMddHH");
-	
 //	private Logger LOG = Logger.getLogger(this.getClass());
-	
-	@Override
-	protected String getPKColumn() {
-		return PK_COLUMN;
-	}
-
-	/**
-	 * 配置动态数据源
-	 * 
-	 * @param dataSource
-	 */
-	@Resource(name = "dynamicDataSource")
-	public void setDataSource(DataSource dataSource) {
-		dynamicDataSourceEntry = ((DynamicDataSource) dataSource).getDataSourceEntry();
-		this.setDataSourceReadOnly(dataSource);
-		this.setDataSourceWrite(dataSource);
-	}
-
-	
-	public List<OnlineDataEnergy> selectByTimeAndTerminalIds(Long time,List<String> terminalIds){
-		if(null == terminalIds || terminalIds.size() == 0){ return new ArrayList<OnlineDataEnergy>(); }
-		Date today = new Date();
-		Calendar c = Calendar.getInstance();
-		try {
-			c.setTime(dateSdf.parse(time.toString().substring(0,8)));
-		} catch (ParseException e1) {
-			e1.printStackTrace();
-		}
-		c.add(Calendar.DAY_OF_YEAR, 1);
-		Date tomrrow = c.getTime();
-		Long todayTime = Long.valueOf(dateSdf.format(today));
-		
-		QueryRule queryRule = QueryRule.getInstance();
-		try{
-			Long startTime = Long.valueOf(dateSdf.format(dateSdf.parse("" + time)) + "000000");
-			Long endTime = Long.valueOf(dateSdf.format(tomrrow) + "000000");
-			
-			queryRule.andBetween("getTime", startTime,endTime);
-			queryRule.andIn("terminalId", terminalIds);
+
+    /**
+     * 获取两个时间之间所有月份列表<br>传入格式为yyyyDDmm
+     *
+     * @param minDate
+     * @param maxDate
+     * @return
+     */
+    public static List<String> dateSplitAllMonth(String startDate, String endDate) {
+        ArrayList<String> result = new ArrayList<String>();
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");// 格式化为年月
+        try {
+            Calendar min = Calendar.getInstance();
+            Calendar max = Calendar.getInstance();
+
+            min.setTime(sdf.parse(startDate));
+            min.set(min.get(Calendar.YEAR), min.get(Calendar.MONTH), 1);
+
+            max.setTime(sdf.parse(endDate));
+            max.set(max.get(Calendar.YEAR), max.get(Calendar.MONTH), 2);
+
+            SimpleDateFormat sdf1 = new SimpleDateFormat("yyyyMM");// 格式化为年月
+            Calendar curr = min;
+            while (curr.before(max)) {
+                result.add(sdf1.format(curr.getTime()));
+                curr.add(Calendar.MONTH, 1);
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        return result;
+    }
+
+    @Override
+    protected String getPKColumn() {
+        return PK_COLUMN;
+    }
+
+    /**
+     * 配置动态数据源
+     *
+     * @param dataSource
+     */
+    @Resource(name = "dynamicDataSource")
+    public void setDataSource(DataSource dataSource) {
+        dynamicDataSourceEntry = ((DynamicDataSource) dataSource).getDataSourceEntry();
+        this.setDataSourceReadOnly(dataSource);
+        this.setDataSourceWrite(dataSource);
+    }
+
+    public List<OnlineDataEnergy> selectByTimeAndTerminalIds(Long time, List<String> terminalIds) {
+        if (null == terminalIds || terminalIds.size() == 0) {
+            return new ArrayList<OnlineDataEnergy>();
+        }
+        Date today = new Date();
+        Calendar c = Calendar.getInstance();
+        try {
+            c.setTime(dateSdf.parse(time.toString().substring(0, 8)));
+        } catch (ParseException e1) {
+            e1.printStackTrace();
+        }
+        c.add(Calendar.DAY_OF_YEAR, 1);
+        Date tomrrow = c.getTime();
+        Long todayTime = Long.valueOf(dateSdf.format(today));
+
+        QueryRule queryRule = QueryRule.getInstance();
+        try {
+            Long startTime = Long.valueOf(dateSdf.format(dateSdf.parse("" + time)) + "000000");
+            Long endTime = Long.valueOf(dateSdf.format(tomrrow) + "000000");
+
+            queryRule.andBetween("getTime", startTime, endTime);
+            queryRule.andIn("terminalId", terminalIds);
 //			queryRule.addAscOrder("getTime");
-		}catch(Exception e){
-			return new ArrayList<OnlineDataEnergy>();
-		}
-		
-		if(todayTime > time){
-			//根据年,月 切换到 年数据源,月分表
-			int year = DataSourceUtil.parse(time).get("year");
-			int month = DataSourceUtil.parse(time).get("month");
-			dynamicDataSourceEntry.set(year);
-			this.setTableName(DataSourceUtil.getTableName(super.op.tableName,month));
-			List<OnlineDataEnergy> r = super.find(queryRule);
-			this.setTableName(super.op.tableName);
-			return r;
-		}else{
-			dynamicDataSourceEntry.set(DataSourceConstant.DB_CURR);
-			this.setTableName(super.op.tableName);
-			return super.find(queryRule);
-		}
-	}
-
-	public List<OnlineDataEnergy> selectByGetDateAndTerminalIds(Long getDate,List<String> terminalIds) {
-		QueryRule queryRule = QueryRule.getInstance();
-		try{
-			Long startTime = Long.valueOf(dateSdf.format(dateSdf.parse("" + getDate)) + "000000");
-			Long endTime = Long.valueOf(dateSdf.format(dateSdf.parse("" + getDate)) + "235959");
-			queryRule.andBetween("getTime", startTime,endTime);
-			queryRule.andIn("terminalId", terminalIds);
-			queryRule.addAscOrder("getTime");
-		}catch(Exception e){
-			return new ArrayList<OnlineDataEnergy>();
-		}
-		
-		//根据年,月 切换到 年数据源,月分表
-		int year = DataSourceUtil.parse(getDate).get("year");
-		int month = DataSourceUtil.parse(getDate).get("month");
-		dynamicDataSourceEntry.set(year);
-		this.setTableName(DataSourceUtil.getTableName(super.op.tableName,month));
-		List<OnlineDataEnergy> r = super.find(queryRule);
-		this.setTableName(super.op.tableName);
-		return r;
-	}
-	
-	
-	public List<OnlineDataEnergy> selectByHour(Date hour,String terminalId){
-		Calendar c = Calendar.getInstance();
-		c.setTime(hour);
-		
-		Long getDate = Long.valueOf(dateSdf.format(c.getTime()));
-		
-		c.add(Calendar.HOUR_OF_DAY, -1);
-		
-		Date start = c.getTime();
-		c.add(Calendar.HOUR_OF_DAY, 1);
-		
-		Date end = c.getTime();
-		
-		Long startTime = Long.valueOf(hourSdf.format(start) + "0000");
-		Long endTime = Long.valueOf(hourSdf.format(end) + "0000");
-		
-		int year = DataSourceUtil.parse(getDate).get("year");
-		int month = DataSourceUtil.parse(getDate).get("month");
-		String tableName = DataSourceUtil.getTableName(super.op.tableName,month);
-		
-		StringBuffer sql = new StringBuffer("");
-		sql.append("(select * from " + tableName + " where getTime BETWEEN " + startTime + " and " + endTime + " and terminalId = ? limit 0,1)");
-		sql.append("union all");
-		sql.append("(select * from " + tableName + " where getTime BETWEEN " + startTime + " and " + endTime + " and terminalId = ? limit 0,1)");
-		
-		dynamicDataSourceEntry.set(year);
-		List<Map<String, Object>> r = super.findBySql(sql.toString(),terminalId,terminalId);
-		List<OnlineDataEnergy> result = JSONArray.parseArray(JSON.toJSONString(r), OnlineDataEnergy.class);
-		Collections.sort(result,new Comparator<OnlineDataEnergy>() {
-
-			@Override
-			public int compare(OnlineDataEnergy o1, OnlineDataEnergy o2) {
-				if(o1.getGetTime() > o2.getGetTime()){
-					return 1;
-				}else if(o1.getGetTime() < o2.getGetTime()){
-					return  -1;
-				}else{
-					return 1;
-				}
-			}
-		});
-		
-		return result;
-	}
-	
-	
-	/**
-	 * 根据时间段查询所有电量实时数据
-	 * @param terminalId
-	 * @param start
-	 * @param end
-	 * @return
-	 */
-	public List<OnlineDataEnergy> selectByTerminalIdAndGetTime(String terminalId,Long start,Long end) {
-		super.setTableName(null);//数据源置空,后面将重新加载数据源
-		List<OnlineDataEnergy> dataList = new ArrayList<OnlineDataEnergy>();
-		if(DataSourceUtil.isSameDay(start, end)){ //同一天
+        } catch (Exception e) {
+            return new ArrayList<OnlineDataEnergy>();
+        }
+
+        if (todayTime > time) {
+            //根据年,月 切换到 年数据源,月分表
+            int year = DataSourceUtil.parse(time).get("year");
+            int month = DataSourceUtil.parse(time).get("month");
+            dynamicDataSourceEntry.set(year);
+            this.setTableName(DataSourceUtil.getTableName(super.op.tableName, month));
+            List<OnlineDataEnergy> r = super.find(queryRule);
+            this.setTableName(super.op.tableName);
+            return r;
+        } else {
+            dynamicDataSourceEntry.set(DataSourceConstant.DB_CURR);
+            this.setTableName(super.op.tableName);
+            return super.find(queryRule);
+        }
+    }
+
+    public List<OnlineDataEnergy> selectByGetDateAndTerminalIds(Long getDate, List<String> terminalIds) {
+        QueryRule queryRule = QueryRule.getInstance();
+        try {
+            Long startTime = Long.valueOf(dateSdf.format(dateSdf.parse("" + getDate)) + "000000");
+            Long endTime = Long.valueOf(dateSdf.format(dateSdf.parse("" + getDate)) + "235959");
+            queryRule.andBetween("getTime", startTime, endTime);
+            queryRule.andIn("terminalId", terminalIds);
+            queryRule.addAscOrder("getTime");
+        } catch (Exception e) {
+            return new ArrayList<OnlineDataEnergy>();
+        }
+
+        //根据年,月 切换到 年数据源,月分表
+        int year = DataSourceUtil.parse(getDate).get("year");
+        int month = DataSourceUtil.parse(getDate).get("month");
+        dynamicDataSourceEntry.set(year);
+        this.setTableName(DataSourceUtil.getTableName(super.op.tableName, month));
+        List<OnlineDataEnergy> r = super.find(queryRule);
+        this.setTableName(super.op.tableName);
+        return r;
+    }
+
+    public List<OnlineDataEnergy> selectByHour(Date hour, String terminalId) {
+        Calendar c = Calendar.getInstance();
+        c.setTime(hour);
+
+        Long getDate = Long.valueOf(dateSdf.format(c.getTime()));
+
+        c.add(Calendar.HOUR_OF_DAY, -1);
+        Date start = c.getTime();
+        c.add(Calendar.HOUR_OF_DAY, 1);
+        Date mid = c.getTime();
+        c.add(Calendar.HOUR_OF_DAY, 1);
+        Date end = c.getTime();
+
+        Long startTime = Long.valueOf(hourSdf.format(start) + "0000");
+        Long midTime = Long.valueOf(hourSdf.format(mid) + "0000");
+        Long endTime = Long.valueOf(hourSdf.format(end) + "0000");
+
+        int year = DataSourceUtil.parse(getDate).get("year");
+        int month = DataSourceUtil.parse(getDate).get("month");
+        String tableName = DataSourceUtil.getTableName(super.op.tableName, month);
+
+        String sql = "(select * from " + tableName + " where getTime BETWEEN " + startTime + " and " + midTime + " and terminalId = ? limit 0,1)" +
+                "union all" +
+                "(select * from " + tableName + " where getTime BETWEEN " + midTime + " and " + endTime + " and terminalId = ? limit 0,1)";
+
+        dynamicDataSourceEntry.set(year);
+        List<Map<String, Object>> r = super.findBySql(sql, terminalId, terminalId);
+        List<OnlineDataEnergy> result = JSONArray.parseArray(JSON.toJSONString(r), OnlineDataEnergy.class);
+        Collections.sort(result, new Comparator<OnlineDataEnergy>() {
+
+            @Override
+            public int compare(OnlineDataEnergy o1, OnlineDataEnergy o2) {
+                if (o1.getGetTime() > o2.getGetTime()) {
+                    return 1;
+                } else if (o1.getGetTime() < o2.getGetTime()) {
+                    return -1;
+                } else {
+                    return 1;
+                }
+            }
+        });
+
+        return result;
+    }
+
+    /**
+     * 根据时间段查询所有电量实时数据
+     *
+     * @param terminalId
+     * @param start
+     * @param end
+     * @return
+     */
+    public List<OnlineDataEnergy> selectByTerminalIdAndGetTime(String terminalId, Long start, Long end) {
+        super.setTableName(null);//数据源置空,后面将重新加载数据源
+        List<OnlineDataEnergy> dataList = new ArrayList<OnlineDataEnergy>();
+        if (DataSourceUtil.isSameDay(start, end)) { //同一天
 //			if(DataSourceUtil.isToday(start)) {//今天
 //				return getOnlineDataEnergyByTerminalId(terminalId, start, end);
 //			}
-			//不是今天,切换数据源和表查询数据
-			dynamicDataSourceEntry.set(DataSourceUtil.parse(start).get(DataSourceUtil.YEAR_KEY));
-			String tableName = DataSourceUtil.getTableName(super.getTableName(), DataSourceUtil.parse(start).get(DataSourceUtil.MONTH_KEY));
-			super.setTableName(tableName);
-			
-			return getOnlineDataEnergyByTerminalId(terminalId, start, end);
-		}
-		//不是同一天
-		String startDate = new DateTime(String.valueOf(start), DateTime.TYPE_YEAR_TO_SECOND,DateTime.TYPE_YEAR_TO_DAY).toString();
-		String endDate = new DateTime(String.valueOf(end), DateTime.TYPE_YEAR_TO_SECOND,DateTime.TYPE_YEAR_TO_DAY).toString();
-		List<String> monthList = dateSplitAllMonth(startDate, endDate);
-		for (String date : monthList) {
-			super.setTableName(null);//数据源置空,后面将重新加载数据源
-			dynamicDataSourceEntry.set(DataSourceUtil.parse(date).get(DataSourceUtil.YEAR_KEY));
-			String tableName = DataSourceUtil.getTableName(super.getTableName(), DataSourceUtil.parse(date).get(DataSourceUtil.MONTH_KEY));
-			super.setTableName(tableName);
-			List<OnlineDataEnergy> list = getOnlineDataEnergyByTerminalId(terminalId, start, end);
-			if(!list.isEmpty()){
-				dataList.addAll(list);
-			}
-		}
-		return dataList;
-	}
-	
-	
-	private List<OnlineDataEnergy> getOnlineDataEnergyByTerminalId(String terminalId,Long start,Long end) {
-		QueryRule queryRule = QueryRule.getInstance();
-		queryRule.andEqual("terminalId", terminalId);
-		queryRule.andGreaterEqual("getTime", start);
-		queryRule.andLessEqual("getTime", end);
-		queryRule.addAscOrder("getTime");
-		return super.find(queryRule);
-	}
-	
-	/**
-	 * 获取两个时间之间所有月份列表<br>传入格式为yyyyDDmm
-	 * @param minDate
-	 * @param maxDate
-	 * @return
-	 */
-	public static List<String> dateSplitAllMonth(String startDate, String endDate) {
-		ArrayList<String> result = new ArrayList<String>();
-		SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");// 格式化为年月
-		try {
-			Calendar min = Calendar.getInstance();
-			Calendar max = Calendar.getInstance();
-
-			min.setTime(sdf.parse(startDate));
-			min.set(min.get(Calendar.YEAR), min.get(Calendar.MONTH), 1);
-
-			max.setTime(sdf.parse(endDate));
-			max.set(max.get(Calendar.YEAR), max.get(Calendar.MONTH), 2);
-
-			SimpleDateFormat sdf1 = new SimpleDateFormat("yyyyMM");// 格式化为年月
-			Calendar curr = min;
-			while (curr.before(max)) {
-				result.add(sdf1.format(curr.getTime()));
-				curr.add(Calendar.MONTH, 1);
-			}
-		} catch (Exception e) {
-			e.printStackTrace();
-		}
-
-		return result;
-	}
-	
-	public int replaceForBatch(List<OnlineDataEnergy> data) throws Exception {
-		//保存到历史库
-		Long time = data.get(0).getGetTime();
-		if(time == 0){ return 0;}
-		//根据年,月 切换到 年数据源,月分表
-		int year = 0; 
-		int month = 0;
-		try{
-			year = DataSourceUtil.parse(time).get("year");
-			month = DataSourceUtil.parse(time).get("month");
-		}catch(Exception e){
-			
-		}
-		
-		if(0 == year || month == 0){
-			return 0;
-		}
-			
-	//			LOG.error("replaceAll==========time=" + time + ",year=" + year + ",month=" + month);
-	//		LOG.error("replaceAll,历史库" + year + month);
-		dynamicDataSourceEntry.set(year);
-		this.setTableName(DataSourceUtil.getTableName(super.op.tableName,month));
-		this.replaceAll(data);
-	//		LOG.warn("成功写入" + data.size() + "条数据");
-	
-	//保存到实时库
-		this.setTableName(super.op.tableName);
-		dynamicDataSourceEntry.set(DataSourceConstant.DB_CURR);
+            //不是今天,切换数据源和表查询数据
+            dynamicDataSourceEntry.set(DataSourceUtil.parse(start).get(DataSourceUtil.YEAR_KEY));
+            String tableName = DataSourceUtil.getTableName(super.getTableName(), DataSourceUtil.parse(start).get(DataSourceUtil.MONTH_KEY));
+            super.setTableName(tableName);
+
+            return getOnlineDataEnergyByTerminalId(terminalId, start, end);
+        }
+        //不是同一天
+        String startDate = new DateTime(String.valueOf(start), DateTime.TYPE_YEAR_TO_SECOND, DateTime.TYPE_YEAR_TO_DAY).toString();
+        String endDate = new DateTime(String.valueOf(end), DateTime.TYPE_YEAR_TO_SECOND, DateTime.TYPE_YEAR_TO_DAY).toString();
+        List<String> monthList = dateSplitAllMonth(startDate, endDate);
+        for (String date : monthList) {
+            super.setTableName(null);//数据源置空,后面将重新加载数据源
+            dynamicDataSourceEntry.set(DataSourceUtil.parse(date).get(DataSourceUtil.YEAR_KEY));
+            String tableName = DataSourceUtil.getTableName(super.getTableName(), DataSourceUtil.parse(date).get(DataSourceUtil.MONTH_KEY));
+            super.setTableName(tableName);
+            List<OnlineDataEnergy> list = getOnlineDataEnergyByTerminalId(terminalId, start, end);
+            if (!list.isEmpty()) {
+                dataList.addAll(list);
+            }
+        }
+        return dataList;
+    }
+
+    private List<OnlineDataEnergy> getOnlineDataEnergyByTerminalId(String terminalId, Long start, Long end) {
+        QueryRule queryRule = QueryRule.getInstance();
+        queryRule.andEqual("terminalId", terminalId);
+        queryRule.andGreaterEqual("getTime", start);
+        queryRule.andLessEqual("getTime", end);
+        queryRule.addAscOrder("getTime");
+        return super.find(queryRule);
+    }
+
+    public int replaceForBatch(List<OnlineDataEnergy> data) throws Exception {
+        //保存到历史库
+        Long time = data.get(0).getGetTime();
+        if (time == 0) {
+            return 0;
+        }
+        //根据年,月 切换到 年数据源,月分表
+        int year = 0;
+        int month = 0;
+        try {
+            year = DataSourceUtil.parse(time).get("year");
+            month = DataSourceUtil.parse(time).get("month");
+        } catch (Exception e) {
+
+        }
+
+        if (0 == year || month == 0) {
+            return 0;
+        }
+
+        //			LOG.error("replaceAll==========time=" + time + ",year=" + year + ",month=" + month);
+        //		LOG.error("replaceAll,历史库" + year + month);
+        dynamicDataSourceEntry.set(year);
+        this.setTableName(DataSourceUtil.getTableName(super.op.tableName, month));
+        this.replaceAll(data);
+        //		LOG.warn("成功写入" + data.size() + "条数据");
+
+        //保存到实时库
+        this.setTableName(super.op.tableName);
+        dynamicDataSourceEntry.set(DataSourceConstant.DB_CURR);
 //		LOG.error("replaceAll,实时库" + this.getTableName());
-		return this.replaceAll(data);
-	}
+        return this.replaceAll(data);
+    }
 }

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 557 - 555
VB_DSM_V2.1/vbdsm-statistics/vbdsm-analysis/src/main/java/cn/vbdsm/analysis/timer/impl/FgpTimer.java


+ 104 - 90
VB_DSM_V2.1/vbdsm-statistics/vbdsm-analysis/src/main/java/cn/vbdsm/analysis/timer/impl/H24Timer.java

@@ -1,15 +1,5 @@
 package cn.vbdsm.analysis.timer.impl;
 
-import java.text.SimpleDateFormat;
-import java.util.Calendar;
-import java.util.Date;
-import java.util.List;
-
-import org.apache.log4j.Logger;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-import com.alibaba.fastjson.JSON;
 import cn.vbdsm.analysis.dao.AnalData24hEnergyDao;
 import cn.vbdsm.analysis.dao.MonitorDao;
 import cn.vbdsm.analysis.dao.OnlineDataEnergyDao;
@@ -17,85 +7,109 @@ import cn.vbdsm.analysis.model.AnalData24hEnergy;
 import cn.vbdsm.analysis.model.Monitor;
 import cn.vbdsm.analysis.model.OnlineDataEnergy;
 import cn.vbdsm.common.annotation.Comment;
+import cn.vbdsm.common.constants.CronExpression;
+import com.alibaba.fastjson.JSON;
+import org.apache.log4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
 
 @Component
-@Comment("统计最值")
+@Comment("H24小时电能统计")
 public class H24Timer {
 
-	private SimpleDateFormat dateSdf = new SimpleDateFormat("yyyyMMddHH");
-	private SimpleDateFormat hourSdf = new SimpleDateFormat("yyyyMMddHH");
-	private SimpleDateFormat daySdf = new SimpleDateFormat("yyyyMMdd");
-	
-	@Autowired OnlineDataEnergyDao onlineDataEnergyDao;
-	@Autowired AnalData24hEnergyDao analData24hEnergyDao;
-	@Autowired MonitorDao monitorDao;
-	
-	private Logger LOG = Logger.getLogger(this.getClass());
-	
-	private void privateH24(Date hour,String terminalId,List<OnlineDataEnergy> online){
-		Calendar c = Calendar.getInstance();
-		c.setTime(hour);
-		Long getDate = Long.valueOf(dateSdf.format(c.getTime()));
-		int hourNum = c.get(Calendar.HOUR_OF_DAY);
-		
-		AnalData24hEnergy data = new AnalData24hEnergy();
-		data.setTerminalId(terminalId);
-		data.setGetDate(getDate);
-		data.setHour(hourNum);
-		
-		if(online.get(1).getFpe() != null && online.get(0).getFpe() != null){
-			data.setFpe(online.get(1).getFpe().subtract(online.get(0).getFpe()));
-		}
-		if(online.get(1).getFqe() != null && online.get(0).getFqe() != null){
-			data.setFqe(online.get(1).getFqe().subtract(online.get(0).getFqe()));
-		}
-		if(online.get(1).getTpe() != null && online.get(0).getTpe() != null){
-			data.setTpe(online.get(1).getTpe().subtract(online.get(0).getTpe()));
-		}
-		if(online.get(1).getTqe() != null && online.get(0).getTqe() != null){
-			data.setTqe(online.get(1).getTqe().subtract(online.get(0).getTqe()));
-		}
-		if(online.get(1).getFps() != null && online.get(0).getFps() != null){
-			data.setFps(online.get(1).getFps());
-		}
-		if(online.get(1).getFqs() != null && online.get(0).getFqs() != null){
-			data.setFqs(online.get(1).getFqs());
-		}
-		if(online.get(1).getTps() != null && online.get(0).getTps() != null){
-			data.setTps(online.get(1).getTps());
-		}
-		if(online.get(1).getTqs() != null && online.get(0).getTqs() != null){
-			data.setTqs(online.get(1).getTqs());
-		}
-		
-		boolean r = analData24hEnergyDao.replaceOne(data);
-		if(r){
-			LOG.info("已写入整点数据:" + JSON.toJSON(data));
-		}
-	}
-	
-	
-//	@Scheduled(cron=CronExpression.	)
-//	@Comment("")
-//	@Async
-	public void h24Timer(){
-		
-		List<Monitor> pm = monitorDao.selectAll();
-		
+    private final SimpleDateFormat dateSdf = new SimpleDateFormat("yyyyMMddHH");
+    private final SimpleDateFormat hourSdf = new SimpleDateFormat("yyyyMMddHH");
+    private final SimpleDateFormat daySdf = new SimpleDateFormat("yyyyMMdd");
+    private final Logger LOG = Logger.getLogger(this.getClass());
+    @Autowired
+    OnlineDataEnergyDao onlineDataEnergyDao;
+    @Autowired
+    AnalData24hEnergyDao analData24hEnergyDao;
+    @Autowired
+    MonitorDao monitorDao;
+
+    private void privateH24(Date hour, String terminalId, List<OnlineDataEnergy> online) {
+        Calendar c = Calendar.getInstance();
+        c.setTime(hour);
+        Long getDate = Long.valueOf(daySdf.format(c.getTime()));
+        int hourNum = c.get(Calendar.HOUR_OF_DAY);
+
+        ArrayList<AnalData24hEnergy> list = new ArrayList<AnalData24hEnergy>();
+        AnalData24hEnergy data = new AnalData24hEnergy();
+        data.setTerminalId(terminalId);
+        data.setGetDate(getDate);
+        data.setHour(hourNum);
+
+        if (online.get(1).getFpe() != null && online.get(0).getFpe() != null) {
+            data.setFpe(online.get(1).getFpe().subtract(online.get(0).getFpe()));
+        }
+        if (online.get(1).getFqe() != null && online.get(0).getFqe() != null) {
+            data.setFqe(online.get(1).getFqe().subtract(online.get(0).getFqe()));
+        }
+        if (online.get(1).getTpe() != null && online.get(0).getTpe() != null) {
+            data.setTpe(online.get(1).getTpe().subtract(online.get(0).getTpe()));
+        }
+        if (online.get(1).getTqe() != null && online.get(0).getTqe() != null) {
+            data.setTqe(online.get(1).getTqe().subtract(online.get(0).getTqe()));
+        }
+        if (online.get(1).getFps() != null && online.get(0).getFps() != null) {
+            data.setFps(online.get(1).getFps());
+        }
+        if (online.get(1).getFqs() != null && online.get(0).getFqs() != null) {
+            data.setFqs(online.get(1).getFqs());
+        }
+        if (online.get(1).getTps() != null && online.get(0).getTps() != null) {
+            data.setTps(online.get(1).getTps());
+        }
+        if (online.get(1).getTqs() != null && online.get(0).getTqs() != null) {
+            data.setTqs(online.get(1).getTqs());
+        }
+        list.add(data);
+
+        try {
+            //往历史库和实时库里同时更新记录
+            int r = analData24hEnergyDao.replaceForBatch(list);
+            if (r > 0) {
+                LOG.info("已写入整点数据:" + JSON.toJSON(list));
+            }
+        } catch (Exception e) {
+            LOG.error("整点数据报错:" + e.getMessage());
+        }
+    }
+
+
+    /**
+     * 每小时20分触发
+     */
+    @Scheduled(cron = CronExpression.EVERY_01_MINUTE_OF_HOUR)
+    @Comment("每个小时的第01分触发")
+    @Async
+    public void h24Timer() {
+
+        List<Monitor> pm = monitorDao.selectAll();
+
 //		List<Long> companyIds = new ArrayList<Long>();
 //		companyIds.add(621L);
 //		companyIds.add(622L);
 //		List<Monitor> pm = monitorDao.selectByCompanyIds(companyIds);
-		
-		Calendar c = Calendar.getInstance();
+
+        Calendar c = Calendar.getInstance();
 //		try{
 //			c.setTime(hourSdf.parse("2016102013"));
 //		}catch(Exception e){
 //			
 //		}
-		Date hour = new Date();
+        Date hour = new Date();
 //		Date hour = c.getTime();
-		
+
 //		for (int i = 0; i < 24 * 30 * 3; i++) {
 //			c.setTime(hour);
 //			c.add(Calendar.HOUR_OF_DAY, -i);
@@ -103,20 +117,20 @@ public class H24Timer {
 //			if(daySdf.format(c.getTime()).equals("20160831")){
 //				break;
 //			}
-			
-			int j = 1;
-			for (Monitor m : pm) {
-				LOG.info("时间:" + hourSdf.format(c.getTime()) + ",设备ID:" + m.getTerminalId()  + ",共" + pm.size() + "个设备,当前第" + j + "个");
-				List<OnlineDataEnergy> r = onlineDataEnergyDao.selectByHour(c.getTime(), m.getTerminalId());
-				if(r != null && r.size() == 2){
-					privateH24(hour,m.getTerminalId(),r);
-				}
-				j ++;
-			}
-			
+
+        int j = 1;
+        for (Monitor m : pm) {
+            LOG.info("时间:" + hourSdf.format(c.getTime()) + ",设备ID:" + m.getTerminalId() + ",共" + pm.size() + "个设备,当前第" + j + "个");
+            List<OnlineDataEnergy> r = onlineDataEnergyDao.selectByHour(c.getTime(), m.getTerminalId());
+            if (r != null && r.size() == 2) {
+                privateH24(hour, m.getTerminalId(), r);
+            }
+            j++;
+        }
+
 //		}
-		
-		
-	}
-	
+
+
+    }
+
 }

+ 436 - 436
VB_DSM_V2.1/vbdsm-statistics/vbdsm-analysis/src/main/java/cn/vbdsm/common/constants/CronExpression.java

@@ -4,443 +4,443 @@ import cn.vbdsm.common.annotation.Comment;
 
 /**
  * 定时任务表达式定义
+ *
  * @author Tanyongde
  */
 public class CronExpression {
-	
-	
-	/**
-	 * 每天0点0分30秒触发
-	 */
-	@Comment("每天0点0分30秒触发")
-	public static final String TIME_0_HOUR_0_MINUTE_30_SECOND = "30 0 0 * * ?";
-	
-	/**
-	 * 每天0点触发
-	 */
-	@Comment("每天0点触发")
-	public static final String TIME_0_HOUR = "0 0 0 * * ?";
-	
-	/**
-	 * 每天0点15分触发
-	 */
-	@Comment("每天0点15分触发")
-	public static final String TIME_0_HOUR_15_MINUTE = "0 15 0 * * ?";
-	
-	/**
-	 * 每天0点10分触发
-	 */
-	@Comment("每天0点10分触发")
-	public static final String TIME_0_HOUR_10_MINUTE = "0 10 0 * * ?";
-	
-	/**
-	 * 每天凌晨1点触发
-	 */
-	@Comment("每天凌晨1点触发")
-	public static final String TIME_1_HOUR = "0 0 1 * * ?";
-	
-	/**
-	 * 每天凌晨1点10分触发
-	 */
-	@Comment("每天凌晨1点10分触发")
-	public static final String TIME_1_10_HOUR = "0 10 1 * * ?";
-	
-	/**
-	 * 每天凌晨1点30分触发
-	 */
-	@Comment("每天凌晨1点30分触发")
-	public static final String TIME_1_30_HOUR = "0 30 1 * * ?";
-	
-	/**
-	 * 每天凌晨2点触发
-	 */
-	@Comment("每天凌晨2点触发")
-	public static final String TIME_2_HOUR = "0 0 2 * * ?";
-	
-	/**
-	 * 每天凌晨2点15分触发
-	 */
-	@Comment("每天凌晨2点10分触发")
-	public static final String TIME_2_10_HOUR = "0 10 2 * * ?";
-	
-	/**
-	 * 每天凌晨2点20分触发
-	 */
-	@Comment("每天凌晨2点20分触发")
-	public static final String TIME_2_20_HOUR = "0 20 2 * * ?";
-	
-	/**
-	 * 每天凌晨2点30分触发
-	 */
-	@Comment("每天凌晨2点30分触发")
-	public static final String TIME_2_30_HOUR = "0 30 2 * * ?";
-	
-	/**
-	 * 每天凌晨3点触发
-	 */
-	@Comment("每天凌晨3点触发")
-	public static final String TIME_3_HOUR = "0 0 3 * * ?";
-	
-	/**
-	 * 每天凌晨3点10分触发
-	 */
-	@Comment("每天凌晨3点10分触发")
-	public static final String TIME_3_10_HOUR = "0 10 3 * * ?";
-	
-	/**
-	 * 每天凌晨3点30分触发
-	 */
-	@Comment("每天凌晨3点30分触发")
-	public static final String TIME_3_30_HOUR = "0 30 3 * * ?";
-	
-	/**
-	 * 每天凌晨4点触发
-	 */
-	@Comment("每天凌晨4点触发")
-	public static final String TIME_4_HOUR = "0 0 4 * * ?";
-	
-	/**
-	 * 每天凌晨4点10分触发
-	 */
-	@Comment("每天凌晨4点10分触发")
-	public static final String TIME_4_10_HOUR = "0 10 4 * * ?";
-	
-	/**
-	 * 每天凌晨4点30分触发
-	 */
-	@Comment("每天凌晨4点30分触发")
-	public static final String TIME_4_30_HOUR = "0 30 4 * * ?";
-	
-	/**
-	 * 每天凌晨5点触发
-	 */
-	@Comment("每天凌晨5点触发")
-	public static final String TIME_5_HOUR = "0 0 5 * * ?";
-	
-	/**
-	 * 每天凌晨5点10分触发
-	 */
-	@Comment("每天凌晨5点10分触发")
-	public static final String TIME_5_10_HOUR = "0 10 5 * * ?";
-	
-	/**
-	 * 每天凌晨5点30分触发
-	 */
-	@Comment("每天凌晨5点30分触发")
-	public static final String TIME_5_30_HOUR = "0 30 5 * * ?";
-	
-	/**
-	 * 每天凌晨6点触发
-	 */
-	@Comment("每天凌晨6点触发")
-	public static final String TIME_6_HOUR = "0 0 6 * * ?";
-	
-	/**
-	 * 每天凌晨6点20分触发
-	 */
-	@Comment("每天凌晨6点20分触发")
-	public static final String TIME_6_20_HOUR = "0 20 6 * * ?";
-	
-	/**
-	 * 每天凌晨7点触发
-	 */
-	@Comment("每天凌晨7点触发")
-	public static final String TIME_7_HOUR = "0 0 7 * * ?";
-	
-	/**
-	 * 每天早上8点触发
-	 */
-	@Comment("每天上午8点触发")
-	public static final String TIME_8_HOUR = "0 0 8 * * ?";
-
-	/**
-	 * 每天9点触发
-	 */
-	@Comment("每天上午9点触发")
-	public static final String TIME_9_HOUR = "0 0 9 * * ?";
-	
-	/**
-	 * 每天10点触发
-	 */
-	@Comment("每天上午10点触发")
-	public static final String TIME_10_HOUR = "0 0 10 * * ?";
-	
-	/**
-	 * 每天11点触发
-	 */
-	@Comment("每天上午11点30分触发")
-	public static final String TIME_11_HOUR = "0 30 11 * * ?";
-	
-	/**
-	 * 每天中午12点触发
-	 */
-	@Comment("每天中午12点触发")
-	public static final String TIME_12_HOUR = "0 0 12 * * ?";
-	
-	/**
-	 * 每天中午13点触发
-	 */
-	@Comment("每天中午13点25分触发")
-	public static final String TIME_13_HOUR = "0 25 13 * * ?";
-	
-	/**
-	 * 每天下午14点触发
-	 */
-	@Comment("每天下午14点触发")
-	public static final String TIME_14_HOUR = "0 0 14 * * ?";
-	
-	/**
-	 * 每天下午15点触发
-	 */
-	@Comment("每天下午15点触发")
-	public static final String TIME_15_HOUR = "0 0 15 * * ?";
-	
-	/**
-	 * 每天下午16点触发
-	 */
-	@Comment("每天下午16点触发")
-	public static final String TIME_16_HOUR = "0 0 16 * * ?";
-	
-	/**
-	 * 每天下午17点触发
-	 */
-	@Comment("每天下午17点触发")
-	public static final String TIME_17_HOUR = "0 0 17 * * ?";
-	
-	/**
-	 * 每天下午18点触发
-	 */
-	@Comment("每天下午18点触发")
-	public static final String TIME_18_HOUR = "0 0 18 * * ?";
-	
-	/**
-	 * 每天下午19点触发
-	 */
-	@Comment("每天下午19点触发")
-	public static final String TIME_19_HOUR = "0 0 19 * * ?";
-	
-	/**
-	 * 每天晚上20点触发
-	 */
-	@Comment("每天晚上20点触发")
-	public static final String TIME_20_HOUR = "0 0 20 * * ?";
-	
-	/**
-	 * 每天晚上21点触发
-	 */
-	@Comment("每天晚上21点触发")
-	public static final String TIME_21_HOUR = "0 0 21 * * ?";
-	
-	/**
-	 * 每天晚上22点触发
-	 */
-	@Comment("每天晚上22点触发")
-	public static final String TIME_22_HOUR = "0 0 22 * * ?";
-	
-	/**
-	 * 每天晚上23点触发
-	 */
-	@Comment("每天晚上23点触发")
-	public static final String TIME_23_HOUR = "0 0 23 * * ?";
-	
-	/**
-	 * 每天晚上24点触发
-	 */
-	@Comment("每天晚上24点触发")
-	public static final String TIME_24_HOUR = "0 0 24 * * ?";
-	
-	/**
-	 * 每隔5秒钟触发
-	 */
-	@Comment("每隔5秒钟触发")
-	public static final String EVERY_5_SECOND = "0/5 * * * * ?";
-	
-	/**
-	 * 每隔5分钟触发
-	 */
-	@Comment("每隔5分钟触发")
-	public static final String EVERY_5_MINUTE = "0 0/5 * * * ?";
-	
-	/**
-	 * 每隔30分钟触发
-	 */
-	@Comment("每隔30分钟触发")
-	public static final String EVERY_30_MINUTE = "0 0/30 * * * ?";
-	
-	/**
-	 * 每隔1小时触发
-	 */
-	@Comment("每隔1小时触发")
-	public static final String EVERY_1_HOUR = "0 0 0/1 * * ?";
-	
-	/**
-	 * 每隔2小时触发
-	 */
-	@Comment("每隔2小时触发")
-	public static final String EVERY_2_HOUR = "0 0 0/2 * * ?";
-	
-	/**
-	 * 每隔3小时触发
-	 */
-	@Comment("每隔3小时触发")
-	public static final String EVERY_3_HOUR = "0 0 0/3 * * ?";
-	
-	
-	@Comment("每个小时的第5分钟触发")
-	public static final String EVERY_5_MINUTE_OF_HOUR = "0 5 * * * ?";
-	
-	
-	@Comment("每个小时的第40分钟触发")
-	public static final String EVERY_40_MINUTE_OF_HOUR = "0 40 * * * ?";
-	
-	@Comment("每天9点整,13点整,19点整触发 ")
-	public static final String TIME_9_HOUR_AND_13_HOUR_19_HOUR = "0 0 9,13,19 * * ?";
-	
-	@Comment("每天7点整,10点整,14点整触发 ")
-	public static final String TIME_7_HOUR_AND_10_HOUR_14_HOUR = "0 0 7,10,14 * * ?";
-	
-	@Comment("每月第一天凌晨2点触发")
-	public static final String TIME_2_HOUR_WHERE_FIRST_DAY_OF_MONTH = "0 0 2 1 * ?";
-	
-	@Comment("每年第一天早上6点触发")
-	public static final String TIME_6_HOUR_WHERE_FIRST_DAY_OF_YEAR = "0 0 6 1 1 ?";
-	
-	@Comment("2099年1月1号0点触发")
-	public static final String TIME_OUTHER = "0 0 0 * * ? 2099";
-	
-	/**
-	 * 每月1号3点15分触发
-	 */
-	@Comment("每月1号3点15分触发")
-	public static final String Month_FristDay_3_HOUR_15_MINUTE = "0 15 3 1 * ? *";
-	
-	
-	//=========================  常用表达式举例  ================================
-	
-	/**
-	 * 每天上午10点15分触发(写法1)
-	 */
-	@Comment("每天上午10点15分触发")
-	private static final String TIME_10_HOUR_15_MINUTE_1 = "0 15 10 ? *";
-	
-	/**
-	 * 每天上午10点15分触发(写法2)
-	 */
-	@Comment("每天上午10点15分触发")
-	private static final String TIME_10_HOUR_15_MINUTE_2 = "0 15 10 * * ?";
-	
-	/**
-	 * 每天上午10点15分触发(写法3)
-	 */
-	@Comment("每天上午10点15分触发")
-	private static final String TIME_10_HOUR_15_MINUTE_3 = "0 15 10 * * ? *";
-	
-	/**
-	 * 2005年的每天上午10:15触发
-	 */
-	@Comment("2005年的每天上午10:15触发")
-	private static final String TIME_10_HOUR_15_MINUTE_WHERE_2005_YEAR = "0 15 10 * * ? 2005";
-	
-	/**
-	 * 1970年的每天00:00触发
-	 */
-	@Comment("1970年的每天00:00触发")
-	public static final String TIME_10_HOUR_15_MINUTE_WHERE_1970_YEAR = "0 0 0 * * ? 1970";
-	
-	/**
-	 * 每年三月的星期三的下午2:10和2:44触发
-	 */
-	@Comment("每年三月的星期三的下午2:10和2:44触发")
-	private static final String TIME_14_HOUR_10_MINUTE_AND_14_HOUR_44_MINUTE_WHERE_WEDNESDAY_AND_MARCH = "0 10,44 14 ? 3 WED";
-
-	/**
-	 * 周一至周五的上午10:15触发
-	 */
-	@Comment("周一至周五的上午10:15触发")
-	private static final String TIME_10_HOUR_15_MINUTE_WHERE_MONDAY_TO_FRIDAY = "0 15 10 ? * MON-FRI";
-	
-	/**
-	 * 每月15日上午10:15触发
-	 */
-	@Comment("每月15日上午10:15触发")
-	private static final String TIME_10_HOUR_15_MINUTE_WHERE_ERERY_MONTH = "0 15 10 15 * ?";
-	
-	/** 
-	 *每月最后一日的上午10:15触发
-	 */
-	@Comment("每月最后一日的上午10:15触发")
-	private static final String TIME_10_HOUR_15_MINUTE_WHERE_LAST_DAY_OF_MONTH = "0 15 10 L * ?";
-	
-	/**
-	 * 每月的最后一个星期五上午10:15触发
-	 */
-	@Comment("每月的最后一个星期五上午10:15触发")
-	private static final String TIME_10_HOUR_15_MINUTE_WHERE_LAST_FRIDAY_OF_MONTH = "0 15 10 ? * 6L";
-	
-	/**
-	 * 2002年至2005年的每月的最后一个星期五上午10:15触发
-	 */
-	@Comment("2002年至2005年的每月的最后一个星期五上午10:15触发")
-	private static final String TIME_10_HOUR_15_MINUTE_WHERE_LAST_FRIDAY_OF_MONTH_AND_2002_YEAR_TO_2005_YEAR = "0 15 10 ? * 6L 2002-2005";
-	
-	/**
-	 * 每月的第三个星期五上午10:15触发
-	 */
-	@Comment("每月的第三个星期五上午10:15触发")
-	private static final String TIME_10_HOUR_15_MINUTE_WHERE_THIRD_FRIDAY_OF_MONTH = "0 15 10 ? * 6#3";
-	
-	/**
-	 * 每个月的4号和每个周一和周三的早上11点触发
-	 */
-	@Comment("每个月的4号和每个周一和周三的早上11点触发")
-	private static final String TIME_11_HOUR_WHERE_FOURTH_DAY_OF_MONTH_AND_MONDAY_AND_WEDNESDAY = "0 11 4 * 1-3";
-	
-	/**
-	 * 每年1月1日早上4点触发
-	 */
-	@Comment("每年1月1日早上4点触发")
-	private static final String TIME_4_HOUR_WHERE_FIRST_DAY_OF_YEAR = "0 4 1 1 *";
-	
-	/**
-	 * 在每周三和周五的10:30,11:30,12:30触发
-	 */
-	@Comment("在每周三和周五的10:30,11:30,12:30触发")
-	private static final String TIME_30_MINUTE_WHERE_10_HOUR_TO_13_HOUR_AND_WEDNESDAY_AND_FRIDAY = "0 30 10-13 ? *WED,FRI";
-	
-	/**
-	 * 在每天下午2点到下午2:59期间的每1分钟触发
-	 */
-	@Comment("在每天下午2点到下午2:59期间的每1分钟触发")
-	private static final String EVERY_1_MINUTE_WHERE_14_HOUR_TO_14_HOUR_1_MINUTE = "0 * 14 * * ?";
-	
-	/**
-	 * 在每天下午2点到下午2:55期间的每5分钟触发 
-	 */
-	@Comment("在每天下午2点到下午2:55期间的每5分钟触发")
-	private static final String EVERY_5_MINUTE_WHERE_14_HOUR_TO_14_HOUR_55_MINUTE = "0 0/5 14 * * ?";
-	
-	/**
-	 * 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发 
-	 */
-	@Comment("在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发 ")
-	private static final String EVERY_5_MINUTE_WHERE_14_HOUR_55_MINUTE_TO_18_HOUR_55_MINUTE = "0 0/5 14,18 * * ?";
-
-	/**
-	 * 在每天下午2点到下午2:05期间的每1分钟触发 
-	 */
-	@Comment("在每天下午2点到下午2:05期间的每1分钟触发")
-	private static final String EVERY_1_MINUTE_WHERE_14_HOUR_TO_14_HOUR_55_MINUTE = "0 0-5 14 * * ?";
-	
-	/**
-	 * 每天晚上11点到早上8点之间每两个小时触发一次
-	 */
-	@Comment("每天晚上11点到早上8点之间每两个小时触发")
-	private static final String EVERY_2_HOUR_WHERE_23_HOUR_TO_8_HOUR = "0 23-7/2,8 * * *";
-	
-	/**
-	 * 在每分钟的10秒后每隔5分钟触发(例如. 10:00:10 am, 10:05:10等)
-	 */
-	@Comment("在每分钟的10秒后每隔5分钟触发")
-	private static final String EVERY_5_MINUTE_WHERE_AFTER_10_SECOND_OF_MINUTE = "10 0/5 * * *?";
-	
+
+
+    /**
+     * 每天0点0分30秒触发
+     */
+    @Comment("每天0点0分30秒触发")
+    public static final String TIME_0_HOUR_0_MINUTE_30_SECOND = "30 0 0 * * ?";
+
+    /**
+     * 每天0点触发
+     */
+    @Comment("每天0点触发")
+    public static final String TIME_0_HOUR = "0 0 0 * * ?";
+
+    /**
+     * 每天0点15分触发
+     */
+    @Comment("每天0点15分触发")
+    public static final String TIME_0_HOUR_15_MINUTE = "0 15 0 * * ?";
+
+    /**
+     * 每天0点10分触发
+     */
+    @Comment("每天0点10分触发")
+    public static final String TIME_0_HOUR_10_MINUTE = "0 10 0 * * ?";
+
+    /**
+     * 每天凌晨1点触发
+     */
+    @Comment("每天凌晨1点触发")
+    public static final String TIME_1_HOUR = "0 0 1 * * ?";
+
+    /**
+     * 每天凌晨1点10分触发
+     */
+    @Comment("每天凌晨1点10分触发")
+    public static final String TIME_1_10_HOUR = "0 10 1 * * ?";
+
+    /**
+     * 每天凌晨1点30分触发
+     */
+    @Comment("每天凌晨1点30分触发")
+    public static final String TIME_1_30_HOUR = "0 30 1 * * ?";
+
+    /**
+     * 每天凌晨2点触发
+     */
+    @Comment("每天凌晨2点触发")
+    public static final String TIME_2_HOUR = "0 0 2 * * ?";
+
+    /**
+     * 每天凌晨2点15分触发
+     */
+    @Comment("每天凌晨2点10分触发")
+    public static final String TIME_2_10_HOUR = "0 10 2 * * ?";
+
+    /**
+     * 每天凌晨2点20分触发
+     */
+    @Comment("每天凌晨2点20分触发")
+    public static final String TIME_2_20_HOUR = "0 20 2 * * ?";
+
+    /**
+     * 每天凌晨2点30分触发
+     */
+    @Comment("每天凌晨2点30分触发")
+    public static final String TIME_2_30_HOUR = "0 30 2 * * ?";
+
+    /**
+     * 每天凌晨3点触发
+     */
+    @Comment("每天凌晨3点触发")
+    public static final String TIME_3_HOUR = "0 0 3 * * ?";
+
+    /**
+     * 每天凌晨3点10分触发
+     */
+    @Comment("每天凌晨3点10分触发")
+    public static final String TIME_3_10_HOUR = "0 10 3 * * ?";
+
+    /**
+     * 每天凌晨3点30分触发
+     */
+    @Comment("每天凌晨3点30分触发")
+    public static final String TIME_3_30_HOUR = "0 30 3 * * ?";
+
+    /**
+     * 每天凌晨4点触发
+     */
+    @Comment("每天凌晨4点触发")
+    public static final String TIME_4_HOUR = "0 0 4 * * ?";
+
+    /**
+     * 每天凌晨4点10分触发
+     */
+    @Comment("每天凌晨4点10分触发")
+    public static final String TIME_4_10_HOUR = "0 10 4 * * ?";
+
+    /**
+     * 每天凌晨4点30分触发
+     */
+    @Comment("每天凌晨4点30分触发")
+    public static final String TIME_4_30_HOUR = "0 30 4 * * ?";
+
+    /**
+     * 每天凌晨5点触发
+     */
+    @Comment("每天凌晨5点触发")
+    public static final String TIME_5_HOUR = "0 0 5 * * ?";
+
+    /**
+     * 每天凌晨5点10分触发
+     */
+    @Comment("每天凌晨5点10分触发")
+    public static final String TIME_5_10_HOUR = "0 10 5 * * ?";
+
+    /**
+     * 每天凌晨5点30分触发
+     */
+    @Comment("每天凌晨5点30分触发")
+    public static final String TIME_5_30_HOUR = "0 30 5 * * ?";
+
+    /**
+     * 每天凌晨6点触发
+     */
+    @Comment("每天凌晨6点触发")
+    public static final String TIME_6_HOUR = "0 0 6 * * ?";
+
+    /**
+     * 每天凌晨6点20分触发
+     */
+    @Comment("每天凌晨6点20分触发")
+    public static final String TIME_6_20_HOUR = "0 20 6 * * ?";
+
+    /**
+     * 每天凌晨7点触发
+     */
+    @Comment("每天凌晨7点触发")
+    public static final String TIME_7_HOUR = "0 0 7 * * ?";
+
+    /**
+     * 每天早上8点触发
+     */
+    @Comment("每天上午8点触发")
+    public static final String TIME_8_HOUR = "0 0 8 * * ?";
+
+    /**
+     * 每天9点触发
+     */
+    @Comment("每天上午9点触发")
+    public static final String TIME_9_HOUR = "0 0 9 * * ?";
+
+    /**
+     * 每天10点触发
+     */
+    @Comment("每天上午10点触发")
+    public static final String TIME_10_HOUR = "0 0 10 * * ?";
+
+    /**
+     * 每天11点触发
+     */
+    @Comment("每天上午11点30分触发")
+    public static final String TIME_11_HOUR = "0 30 11 * * ?";
+
+    /**
+     * 每天中午12点触发
+     */
+    @Comment("每天中午12点触发")
+    public static final String TIME_12_HOUR = "0 0 12 * * ?";
+
+    /**
+     * 每天中午13点触发
+     */
+    @Comment("每天中午13点25分触发")
+    public static final String TIME_13_HOUR = "0 25 13 * * ?";
+
+    /**
+     * 每天下午14点触发
+     */
+    @Comment("每天下午14点触发")
+    public static final String TIME_14_HOUR = "0 0 14 * * ?";
+
+    /**
+     * 每天下午15点触发
+     */
+    @Comment("每天下午15点触发")
+    public static final String TIME_15_HOUR = "0 0 15 * * ?";
+
+    /**
+     * 每天下午16点触发
+     */
+    @Comment("每天下午16点触发")
+    public static final String TIME_16_HOUR = "0 0 16 * * ?";
+
+    /**
+     * 每天下午17点触发
+     */
+    @Comment("每天下午17点触发")
+    public static final String TIME_17_HOUR = "0 0 17 * * ?";
+
+    /**
+     * 每天下午18点触发
+     */
+    @Comment("每天下午18点触发")
+    public static final String TIME_18_HOUR = "0 0 18 * * ?";
+
+    /**
+     * 每天下午19点触发
+     */
+    @Comment("每天下午19点触发")
+    public static final String TIME_19_HOUR = "0 0 19 * * ?";
+
+    /**
+     * 每天晚上20点触发
+     */
+    @Comment("每天晚上20点触发")
+    public static final String TIME_20_HOUR = "0 0 20 * * ?";
+
+    /**
+     * 每天晚上21点触发
+     */
+    @Comment("每天晚上21点触发")
+    public static final String TIME_21_HOUR = "0 0 21 * * ?";
+
+    /**
+     * 每天晚上22点触发
+     */
+    @Comment("每天晚上22点触发")
+    public static final String TIME_22_HOUR = "0 0 22 * * ?";
+
+    /**
+     * 每天晚上23点触发
+     */
+    @Comment("每天晚上23点触发")
+    public static final String TIME_23_HOUR = "0 0 23 * * ?";
+
+    /**
+     * 每天晚上24点触发
+     */
+    @Comment("每天晚上24点触发")
+    public static final String TIME_24_HOUR = "0 0 24 * * ?";
+
+    /**
+     * 每隔5秒钟触发
+     */
+    @Comment("每隔5秒钟触发")
+    public static final String EVERY_5_SECOND = "0/5 * * * * ?";
+
+    /**
+     * 每隔5分钟触发
+     */
+    @Comment("每隔5分钟触发")
+    public static final String EVERY_5_MINUTE = "0 0/5 * * * ?";
+
+    /**
+     * 每隔30分钟触发
+     */
+    @Comment("每隔30分钟触发")
+    public static final String EVERY_30_MINUTE = "0 0/30 * * * ?";
+
+    /**
+     * 每隔1小时触发
+     */
+    @Comment("每隔1小时触发")
+    public static final String EVERY_1_HOUR = "0 0 0/1 * * ?";
+
+    /**
+     * 每隔2小时触发
+     */
+    @Comment("每隔2小时触发")
+    public static final String EVERY_2_HOUR = "0 0 0/2 * * ?";
+
+    /**
+     * 每隔3小时触发
+     */
+    @Comment("每隔3小时触发")
+    public static final String EVERY_3_HOUR = "0 0 0/3 * * ?";
+
+
+    @Comment("每个小时的第5分钟触发")
+    public static final String EVERY_5_MINUTE_OF_HOUR = "0 5 * * * ?";
+
+
+    @Comment("每个小时的第40分钟触发")
+    public static final String EVERY_40_MINUTE_OF_HOUR = "0 40 * * * ?";
+
+    @Comment("每天9点整,13点整,19点整触发 ")
+    public static final String TIME_9_HOUR_AND_13_HOUR_19_HOUR = "0 0 9,13,19 * * ?";
+
+    @Comment("每天7点整,10点整,14点整触发 ")
+    public static final String TIME_7_HOUR_AND_10_HOUR_14_HOUR = "0 0 7,10,14 * * ?";
+
+    @Comment("每月第一天凌晨2点触发")
+    public static final String TIME_2_HOUR_WHERE_FIRST_DAY_OF_MONTH = "0 0 2 1 * ?";
+
+    @Comment("每年第一天早上6点触发")
+    public static final String TIME_6_HOUR_WHERE_FIRST_DAY_OF_YEAR = "0 0 6 1 1 ?";
+
+    @Comment("2099年1月1号0点触发")
+    public static final String TIME_OUTHER = "0 0 0 * * ? 2099";
+
+    /**
+     * 每月1号3点15分触发
+     */
+    @Comment("每月1号3点15分触发")
+    public static final String Month_FristDay_3_HOUR_15_MINUTE = "0 15 3 1 * ? *";
+    /**
+     * 每月1号3点15分触发
+     */
+    @Comment("每个小时的第01分触发")
+    public static final String EVERY_01_MINUTE_OF_HOUR = "0 01 * * * ?";
+
+
+    //=========================  常用表达式举例  ================================
+    /**
+     * 1970年的每天00:00触发
+     */
+    @Comment("1970年的每天00:00触发")
+    public static final String TIME_10_HOUR_15_MINUTE_WHERE_1970_YEAR = "0 0 0 * * ? 1970";
+    /**
+     * 每天上午10点15分触发(写法1)
+     */
+    @Comment("每天上午10点15分触发")
+    private static final String TIME_10_HOUR_15_MINUTE_1 = "0 15 10 ? *";
+    /**
+     * 每天上午10点15分触发(写法2)
+     */
+    @Comment("每天上午10点15分触发")
+    private static final String TIME_10_HOUR_15_MINUTE_2 = "0 15 10 * * ?";
+    /**
+     * 每天上午10点15分触发(写法3)
+     */
+    @Comment("每天上午10点15分触发")
+    private static final String TIME_10_HOUR_15_MINUTE_3 = "0 15 10 * * ? *";
+    /**
+     * 2005年的每天上午10:15触发
+     */
+    @Comment("2005年的每天上午10:15触发")
+    private static final String TIME_10_HOUR_15_MINUTE_WHERE_2005_YEAR = "0 15 10 * * ? 2005";
+    /**
+     * 每年三月的星期三的下午2:10和2:44触发
+     */
+    @Comment("每年三月的星期三的下午2:10和2:44触发")
+    private static final String TIME_14_HOUR_10_MINUTE_AND_14_HOUR_44_MINUTE_WHERE_WEDNESDAY_AND_MARCH = "0 10,44 14 ? 3 WED";
+
+    /**
+     * 周一至周五的上午10:15触发
+     */
+    @Comment("周一至周五的上午10:15触发")
+    private static final String TIME_10_HOUR_15_MINUTE_WHERE_MONDAY_TO_FRIDAY = "0 15 10 ? * MON-FRI";
+
+    /**
+     * 每月15日上午10:15触发
+     */
+    @Comment("每月15日上午10:15触发")
+    private static final String TIME_10_HOUR_15_MINUTE_WHERE_ERERY_MONTH = "0 15 10 15 * ?";
+
+    /**
+     * 每月最后一日的上午10:15触发
+     */
+    @Comment("每月最后一日的上午10:15触发")
+    private static final String TIME_10_HOUR_15_MINUTE_WHERE_LAST_DAY_OF_MONTH = "0 15 10 L * ?";
+
+    /**
+     * 每月的最后一个星期五上午10:15触发
+     */
+    @Comment("每月的最后一个星期五上午10:15触发")
+    private static final String TIME_10_HOUR_15_MINUTE_WHERE_LAST_FRIDAY_OF_MONTH = "0 15 10 ? * 6L";
+
+    /**
+     * 2002年至2005年的每月的最后一个星期五上午10:15触发
+     */
+    @Comment("2002年至2005年的每月的最后一个星期五上午10:15触发")
+    private static final String TIME_10_HOUR_15_MINUTE_WHERE_LAST_FRIDAY_OF_MONTH_AND_2002_YEAR_TO_2005_YEAR = "0 15 10 ? * 6L 2002-2005";
+
+    /**
+     * 每月的第三个星期五上午10:15触发
+     */
+    @Comment("每月的第三个星期五上午10:15触发")
+    private static final String TIME_10_HOUR_15_MINUTE_WHERE_THIRD_FRIDAY_OF_MONTH = "0 15 10 ? * 6#3";
+
+    /**
+     * 每个月的4号和每个周一和周三的早上11点触发
+     */
+    @Comment("每个月的4号和每个周一和周三的早上11点触发")
+    private static final String TIME_11_HOUR_WHERE_FOURTH_DAY_OF_MONTH_AND_MONDAY_AND_WEDNESDAY = "0 11 4 * 1-3";
+
+    /**
+     * 每年1月1日早上4点触发
+     */
+    @Comment("每年1月1日早上4点触发")
+    private static final String TIME_4_HOUR_WHERE_FIRST_DAY_OF_YEAR = "0 4 1 1 *";
+
+    /**
+     * 在每周三和周五的10:30,11:30,12:30触发
+     */
+    @Comment("在每周三和周五的10:30,11:30,12:30触发")
+    private static final String TIME_30_MINUTE_WHERE_10_HOUR_TO_13_HOUR_AND_WEDNESDAY_AND_FRIDAY = "0 30 10-13 ? *WED,FRI";
+
+    /**
+     * 在每天下午2点到下午2:59期间的每1分钟触发
+     */
+    @Comment("在每天下午2点到下午2:59期间的每1分钟触发")
+    private static final String EVERY_1_MINUTE_WHERE_14_HOUR_TO_14_HOUR_1_MINUTE = "0 * 14 * * ?";
+
+    /**
+     * 在每天下午2点到下午2:55期间的每5分钟触发
+     */
+    @Comment("在每天下午2点到下午2:55期间的每5分钟触发")
+    private static final String EVERY_5_MINUTE_WHERE_14_HOUR_TO_14_HOUR_55_MINUTE = "0 0/5 14 * * ?";
+
+    /**
+     * 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发
+     */
+    @Comment("在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发 ")
+    private static final String EVERY_5_MINUTE_WHERE_14_HOUR_55_MINUTE_TO_18_HOUR_55_MINUTE = "0 0/5 14,18 * * ?";
+
+    /**
+     * 在每天下午2点到下午2:05期间的每1分钟触发
+     */
+    @Comment("在每天下午2点到下午2:05期间的每1分钟触发")
+    private static final String EVERY_1_MINUTE_WHERE_14_HOUR_TO_14_HOUR_55_MINUTE = "0 0-5 14 * * ?";
+
+    /**
+     * 每天晚上11点到早上8点之间每两个小时触发一次
+     */
+    @Comment("每天晚上11点到早上8点之间每两个小时触发")
+    private static final String EVERY_2_HOUR_WHERE_23_HOUR_TO_8_HOUR = "0 23-7/2,8 * * *";
+
+    /**
+     * 在每分钟的10秒后每隔5分钟触发(例如. 10:00:10 am, 10:05:10等)
+     */
+    @Comment("在每分钟的10秒后每隔5分钟触发")
+    private static final String EVERY_5_MINUTE_WHERE_AFTER_10_SECOND_OF_MINUTE = "10 0/5 * * *?";
+
 }

+ 43 - 38
VB_DSM_V2.1/vbdsm-statistics/vbdsm-analysis/src/main/resources/local/schedule.xml

@@ -1,55 +1,60 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <timers>
 
-   	<timer>clearLogsTimer.clearHistroyLog</timer>
-   	<timer>clearBibleWaringInfoTimer.clearHistroy</timer>
-   	<!-- <timer>energyPriceTimer.energyPrice</timer> -->
+    <timer>clearLogsTimer.clearHistroyLog</timer>
+    <timer>clearBibleWaringInfoTimer.clearHistroy</timer>
+    <!-- <timer>energyPriceTimer.energyPrice</timer> -->
 
-   	<timer>fgpTimer.companyFgp</timer>
-   	<timer>fgpTimer.companyFgpForLastDate</timer>
-   	<timer>fgpTimer.companyFgpFor7DaysAgo</timer>
-   	<!-- <timer>fgpTimer.companyFgpForYestDayDate</timer> -->
+    <timer>fgpTimer.companyFgp</timer>
+    <timer>fgpTimer.companyFgpForLastDate</timer>
+    <timer>fgpTimer.companyFgpFor7DaysAgo</timer>
+    <!-- <timer>fgpTimer.companyFgpForYestDayDate</timer> -->
 
-   	<timer>fgpTimer.monitorFgpForEvery</timer>
-   	<timer>fgpTimer.monitorFgpForLastDate</timer>
-   	<timer>fgpTimer.monitorFgpFor7DaysAgo</timer>
-   	<!-- <timer>fgpTimer.monitorFgpForYestDayDate</timer> -->
+    <timer>fgpTimer.monitorFgpForEvery</timer>
+    <timer>fgpTimer.monitorFgpForLastDate</timer>
+    <timer>fgpTimer.monitorFgpFor7DaysAgo</timer>
+    <!-- <timer>fgpTimer.monitorFgpForYestDayDate</timer> -->
 
-   	<timer>monitorLimitTimer.monitorDateTimer</timer>
-   	<timer>monitorLimitTimer.monitorLastDateTimer</timer>
-   	<timer>monitorLimitTimer.monitorMonthAndYearTimer</timer>
-   	<timer>monitorLimitTimer.monitorLastYearTimer</timer>
+    <timer>monitorLimitTimer.monitorDateTimer</timer>
+    <timer>monitorLimitTimer.monitorLastDateTimer</timer>
+    <timer>monitorLimitTimer.monitorMonthAndYearTimer</timer>
+    <timer>monitorLimitTimer.monitorLastYearTimer</timer>
 
     <timer>divisionLimitTimer.divisionDateTimer</timer>
-   	<timer>divisionLimitTimer.divisionMonthTimer</timer>
+    <timer>divisionLimitTimer.divisionMonthTimer</timer>
 
-   	<timer>powerOnlineTimer.powerTimer</timer>
-   	<timer>powerOnlineTimer.powerDayTimer</timer>
+    <timer>powerOnlineTimer.powerTimer</timer>
+    <timer>powerOnlineTimer.powerDayTimer</timer>
 
-   	<timer>shiftsEnergyTimer.today</timer>
-   	<timer>shiftsEnergyTimer.yesterAndBefore</timer>
+    <timer>shiftsEnergyTimer.today</timer>
+    <timer>shiftsEnergyTimer.yesterAndBefore</timer>
 
-   	<timer>stationEnergyTimer.today</timer>
-   	<timer>stationEnergyTimer.yesterAndBefore</timer>
+    <timer>stationEnergyTimer.today</timer>
+    <timer>stationEnergyTimer.yesterAndBefore</timer>
 
-   	<timer>enterpriseStateTimer.EnterpriseStateTimingTask</timer>
+    <timer>enterpriseStateTimer.EnterpriseStateTimingTask</timer>
 
-   	<timer>powerFactorAlarmTimer.powerFactorAlarm</timer>
-   	<timer>voltageMessageAlarmTimer.voltageMessageAlarm</timer>
-   	<timer>threePhaseUnbalanceTimer.threePhaseUnbalanceAlarm</timer>
-   	<timer>loadMessageAlarmTimer.loadMessageAlarm</timer>
-   	<timer>harmonicAlarmTimer.harmonicAlarm</timer>
-   	<timer>zeroSequenceCurrentTimer.allCommand</timer>
-   	<timer>phaseFaultTimer.allCommand</timer>
-   	<timer>basicElectricityChargeTimer.allCommand</timer>
+    <timer>powerFactorAlarmTimer.powerFactorAlarm</timer>
+    <timer>voltageMessageAlarmTimer.voltageMessageAlarm</timer>
+    <timer>threePhaseUnbalanceTimer.threePhaseUnbalanceAlarm</timer>
+    <timer>loadMessageAlarmTimer.loadMessageAlarm</timer>
+    <timer>harmonicAlarmTimer.harmonicAlarm</timer>
+    <timer>zeroSequenceCurrentTimer.allCommand</timer>
+    <timer>phaseFaultTimer.allCommand</timer>
+    <timer>basicElectricityChargeTimer.allCommand</timer>
 
-   	<timer>monitorOnlineTimer.updateMonitorOnline</timer>
+    <timer>monitorOnlineTimer.updateMonitorOnline</timer>
 
-   	<timer>waterGasHeatStatisticsTimer.integralPoint</timer>
-   	<timer>waterGasHeatStatisticsTimer.dayMaximum</timer>
-   	<timer>waterGasHeatStatisticsTimer.monthMaximum</timer>
-   	<timer>waterGasHeatStatisticsTimer.yearMaximum</timer>
-   	<timer>waterGasHeatStatisticsTimer.otherEnergydailyDosage</timer>
+    <timer>waterGasHeatStatisticsTimer.integralPoint</timer>
+    <timer>waterGasHeatStatisticsTimer.dayMaximum</timer>
+    <timer>waterGasHeatStatisticsTimer.monthMaximum</timer>
+    <timer>waterGasHeatStatisticsTimer.yearMaximum</timer>
+    <timer>waterGasHeatStatisticsTimer.otherEnergydailyDosage</timer>
 
-   	<timer>overWarnTimer.warnningInfoTimer</timer>
+    <timer>overWarnTimer.warnningInfoTimer</timer>
+    <timer>h24Timer.h24Timer</timer>
+
+    <!--    <timer>fgpTimer.monitorFgpForEvery</timer>-->
+    <!--    <timer>fgpTimer.monitorFgpForLastDate</timer>-->
+    <!--    <timer>fgpTimer.monitorFgpFor7DaysAgo</timer>-->
 </timers>

+ 56 - 57
VB_DSM_V2.1/vbdsm-statistics/vbdsm-analysis/src/main/resources/test/schedule.xml

@@ -1,58 +1,57 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<timers> 
-
-   	<timer>clearLogsTimer.clearHistroyLog</timer>
-   	
-   	<timer>energyPriceTimer.energyPrice</timer>
-   	
-   	<timer>energyTimer.terminalEnergy</timer>
-   	
-   	<timer>exceptionTimer.terminalException</timer>
-   	
-   	<timer>fgpTimer.companyFgp</timer>
-   	<timer>fgpTimer.companyFgpForLastDate</timer>
-   	<timer>fgpTimer.companyFgpFor7DaysAgo</timer>
-   	<timer>fgpTimer.monitorFgpForEvery</timer>
-   	<timer>fgpTimer.monitorFgpForLastDate</timer>
-   	
-   	<timer>h24Timer.h24Timer</timer>
-   	
-   	<timer>monitorLimitTimer.monitorDateTimer</timer>
-   	<timer>monitorLimitTimer.monitorLastDateTimer</timer>
-   	<timer>monitorLimitTimer.monitorMonthAndYearTimer</timer>
-   	<timer>monitorLimitTimer.monitorLastYearTimer</timer>
-   	
-   	<timer>divisionLimitTimer.divisionDateTimer</timer>
-   	<timer>divisionLimitTimer.divisionMonthTimer</timer>
-   	
-   	<timer>powerOnlineTimer.powerTimer</timer>
-   	<timer>powerOnlineTimer.powerDayTimer</timer>
-   	
-   	<timer>machineshopEnergyTimer.today</timer>
-   	<timer>machineshopEnergyTimer.yesterAndBefore</timer>
-   	
-   	<timer>overWarnTimer.terminalWarn</timer>
-   	<timer>overWarnTimer.day</timer>
-   	
-   	<timer>plineEnergyTimer.today</timer>
-   	<timer>plineEnergyTimer.yesterAndBefore</timer>
-   	
-   	<timer>shiftsEnergyTimer.today</timer>
-   	<timer>shiftsEnergyTimer.yesterAndBefore</timer>
-   	
-   	<timer>stationEnergyTimer.today</timer>
-   	<timer>stationEnergyTimer.yesterAndBefore</timer>
-   	
-   	<timer>tempOnlineDataOtherTimer.saveTempOnlineData</timer>
-   	
-   	<timer>powerFactorAlarmTimer.powerFactorAlarm</timer>
-   	
-   	<timer>voltageMessageAlarmTimer.voltageMessageAlarm</timer>
-   	
-   	<timer>threePhaseUnbalanceTimer.threePhaseUnbalanceAlarm</timer>
-   	
-   	<timer>loadMessageAlarmTimer.loadMessageAlarm</timer>
-   	
-   	<timer>harmonicAlarmTimer.harmonicAlarm</timer>
-   	
-</timers>		
+<timers>
+
+    <timer>clearLogsTimer.clearHistroyLog</timer>
+    <timer>clearBibleWaringInfoTimer.clearHistroy</timer>
+    <!-- <timer>energyPriceTimer.energyPrice</timer> -->
+
+    <timer>fgpTimer.companyFgp</timer>
+    <timer>fgpTimer.companyFgpForLastDate</timer>
+    <timer>fgpTimer.companyFgpFor7DaysAgo</timer>
+    <!-- <timer>fgpTimer.companyFgpForYestDayDate</timer> -->
+
+    <timer>fgpTimer.monitorFgpForEvery</timer>
+    <timer>fgpTimer.monitorFgpForLastDate</timer>
+    <timer>fgpTimer.monitorFgpFor7DaysAgo</timer>
+    <!-- <timer>fgpTimer.monitorFgpForYestDayDate</timer> -->
+
+    <timer>monitorLimitTimer.monitorDateTimer</timer>
+    <timer>monitorLimitTimer.monitorLastDateTimer</timer>
+    <timer>monitorLimitTimer.monitorMonthAndYearTimer</timer>
+    <timer>monitorLimitTimer.monitorLastYearTimer</timer>
+
+    <timer>divisionLimitTimer.divisionDateTimer</timer>
+    <timer>divisionLimitTimer.divisionMonthTimer</timer>
+
+    <timer>powerOnlineTimer.powerTimer</timer>
+    <timer>powerOnlineTimer.powerDayTimer</timer>
+
+    <timer>shiftsEnergyTimer.today</timer>
+    <timer>shiftsEnergyTimer.yesterAndBefore</timer>
+
+    <timer>stationEnergyTimer.today</timer>
+    <timer>stationEnergyTimer.yesterAndBefore</timer>
+
+    <timer>enterpriseStateTimer.EnterpriseStateTimingTask</timer>
+
+    <timer>powerFactorAlarmTimer.powerFactorAlarm</timer>
+    <timer>voltageMessageAlarmTimer.voltageMessageAlarm</timer>
+    <timer>threePhaseUnbalanceTimer.threePhaseUnbalanceAlarm</timer>
+    <timer>loadMessageAlarmTimer.loadMessageAlarm</timer>
+    <timer>harmonicAlarmTimer.harmonicAlarm</timer>
+    <timer>zeroSequenceCurrentTimer.allCommand</timer>
+    <timer>phaseFaultTimer.allCommand</timer>
+    <timer>basicElectricityChargeTimer.allCommand</timer>
+
+    <timer>monitorOnlineTimer.updateMonitorOnline</timer>
+
+    <timer>waterGasHeatStatisticsTimer.integralPoint</timer>
+    <timer>waterGasHeatStatisticsTimer.dayMaximum</timer>
+    <timer>waterGasHeatStatisticsTimer.monthMaximum</timer>
+    <timer>waterGasHeatStatisticsTimer.yearMaximum</timer>
+    <timer>waterGasHeatStatisticsTimer.otherEnergydailyDosage</timer>
+
+    <timer>overWarnTimer.warnningInfoTimer</timer>
+    <timer>h24Timer.h24Timer</timer>
+
+</timers>

+ 2 - 2
VB_DSM_V2.1/vbdsm-statistics/vbdsm-statistic/src/main/java/cn/vbdsm/statistic/biz/impl/OnlineWarnAnalBizImpl.java

@@ -115,7 +115,7 @@ public class OnlineWarnAnalBizImpl implements IOnlineWarnAnalBiz {
         for (OnlineWarn onlineWarn : onlineWarns) {
             onlineWarn.setWarn_state(ONLINE_WARN_STATE_OVERTIME);
             //处理状态修改成已处理,判断是否人为处理
-            if (onlineWarn.getIs_resolved() != SOLVED_STATUS_SOLVED && onlineWarn.getHandle_result() == 0) {
+            if (onlineWarn.getIs_resolved() != SOLVED_STATUS_SOLVED && onlineWarn.getHandle_result() == null && onlineWarn.getHandle_result() == 0) {
                 onlineWarn.setIs_resolved(SOLVED_STATUS_SOLVED);
                 onlineWarn.setHandle_result(HANDLE_RESULT_CODE_OVERTIME);
                 onlineWarn.setHandle_date(Long.valueOf(sdfHMDHMS.format(new Date())));
@@ -166,7 +166,7 @@ public class OnlineWarnAnalBizImpl implements IOnlineWarnAnalBiz {
                 for (OnlineWarn onlineWarn : onlineWarns) {
                     onlineWarn.setWarn_state(ONLINE_WARN_STATE_RECOVERY);
                     //处理状态修改成已处理,,判断是否人为处理
-                    if (onlineWarn.getIs_resolved() != SOLVED_STATUS_SOLVED && onlineWarn.getHandle_result() == 0) {
+                    if (onlineWarn.getIs_resolved() != SOLVED_STATUS_SOLVED && (onlineWarn.getHandle_result() == null || onlineWarn.getHandle_result() == 0)) {
                         onlineWarn.setIs_resolved(SOLVED_STATUS_SOLVED);
                         onlineWarn.setHandle_result(HANDLE_RESULT_CODE_RECOVERY);
                         onlineWarn.setHandle_date(Long.valueOf(sdfHMDHMS.format(new Date())));

+ 2 - 2
VB_DSM_V2.1/vbdsm-statistics/vbdsm-statistic/src/main/resources/config/application-dev.yml

@@ -7,8 +7,8 @@ tg:
 spring:
   redis:
     host: 47.112.30.247
-    #password: Iwb-2017
-    port: 16379
+    password: Iwb-2017
+    port: 6399
     database: 0
     pool:
       maxActive: 8

+ 2 - 2
VB_DSM_V2.1/vbdsm-web/vbdsm-gov-new/src/main/resources/config/application-dev.yml

@@ -7,8 +7,8 @@ tg:
 spring:
   redis:
     host: 47.112.30.247
-    #password: Iwb-2017
-    port: 16379
+    password: Iwb-2017
+    port: 6399
     database: 0
     pool:
       maxActive: 8

Algúns arquivos non se mostraron porque demasiados arquivos cambiaron neste cambio