소스 검색

初始化提交

luoguangyi 3 년 전
커밋
5a78e67731
100개의 변경된 파일15269개의 추가작업 그리고 0개의 파일을 삭제
  1. 2 0
      .gitattributes
  2. 58 0
      .gitignore
  3. 215 0
      etc/wrapper.conf
  4. BIN
      etc/~$compute-engine_svn1137.doc
  5. BIN
      etc/~$采集计算相关数据库说明.xlsx
  6. 127 0
      etc/删除计算日志.txt
  7. BIN
      etc/数据量.xlsx
  8. BIN
      etc/配置compute-engine.doc
  9. BIN
      etc/配置compute-engine_svn1015.doc
  10. BIN
      etc/配置compute-engine_svn1137.doc
  11. BIN
      etc/配置compute-engine_svn506.doc
  12. BIN
      etc/配置compute-engine_svn729.doc
  13. BIN
      etc/配置compute-engine_svn864.doc
  14. BIN
      etc/配置compute-engine_svn893.doc
  15. BIN
      etc/采集计算相关数据库说明.xlsx
  16. 170 0
      pom.xml
  17. 15 0
      src/main/java/com/sagacloud/ComputeEngineApplication.java
  18. 29 0
      src/main/java/com/sagacloud/extend/customfunction/ImplCustomFunction_add.java
  19. 32 0
      src/main/java/com/sagacloud/extend/customfunction/ImplCustomFunction_f3.java
  20. 163 0
      src/main/java/com/sagacloud/extend/dao_data/ImplDao_energydata.java
  21. 161 0
      src/main/java/com/sagacloud/extend/dao_data/ImplDao_fjd_0.java
  22. 170 0
      src/main/java/com/sagacloud/extend/dao_data/ImplDao_fjd_0_loss_rate.java
  23. 182 0
      src/main/java/com/sagacloud/extend/dao_data/ImplDao_fjd_0_rate.java
  24. 163 0
      src/main/java/com/sagacloud/extend/dao_data/ImplDao_fjd_1.java
  25. 117 0
      src/main/java/com/sagacloud/extend/dao_data/ImplDao_fjd_near.java
  26. 191 0
      src/main/java/com/sagacloud/extend/dao_data/ImplDao_fjd_statinst.java
  27. 157 0
      src/main/java/com/sagacloud/extend/dao_data/ImplDao_objectdata.java
  28. 99 0
      src/main/java/com/sagacloud/extend/dao_data/ImplDao_ori.java
  29. 84 0
      src/main/java/com/sagacloud/extend/dao_data/ImplDao_ori_flag.java
  30. 189 0
      src/main/java/com/sagacloud/extend/dao_data/ImplDao_report.java
  31. 143 0
      src/main/java/com/sagacloud/extend/dao_data/ImplDao_report_change_meter.java
  32. 164 0
      src/main/java/com/sagacloud/extend/dao_data/ImplDao_servicedata.java
  33. 312 0
      src/main/java/com/sagacloud/extend/dao_data/ImplDao_tenantbalance.java
  34. 175 0
      src/main/java/com/sagacloud/extend/dao_data/ImplDao_tenantdata.java
  35. 177 0
      src/main/java/com/sagacloud/extend/dao_data/ImplDao_tenantfee.java
  36. 165 0
      src/main/java/com/sagacloud/extend/dao_data_max/ImplDao_energydata_max.java
  37. 159 0
      src/main/java/com/sagacloud/extend/dao_data_max/ImplDao_objectdata_max.java
  38. 166 0
      src/main/java/com/sagacloud/extend/dao_data_max/ImplDao_servicedata_max.java
  39. 177 0
      src/main/java/com/sagacloud/extend/dao_data_max/ImplDao_tenantdata_max.java
  40. 30 0
      src/main/java/com/sagacloud/init/InitRunner.java
  41. 1906 0
      src/main/java/com/sagacloud/parser/simulator/ComputeEngineLexer.java
  42. 1749 0
      src/main/java/com/sagacloud/parser/simulator/ComputeEngineParser.java
  43. 873 0
      src/main/java/com/sagacloud/parser/simulator/ComputeEngineScanner.java
  44. 961 0
      src/main/java/com/sagacloud/parser/simulator/ComputeEngineWalker.java
  45. 133 0
      src/main/java/com/sagacloud/parser/simulator/String2Grammar.java
  46. 35 0
      src/main/java/com/sagacloud/parser/simulator/TestComputeEngine.java
  47. 55 0
      src/main/java/com/sagacloud/repository/HBaseSaveManagerRepository.java
  48. 189 0
      src/main/java/com/sagacloud/util/compute_engine/ci/Dao_ci.java
  49. 10 0
      src/main/java/com/sagacloud/util/compute_engine/core/AnnotationDescription.java
  50. 902 0
      src/main/java/com/sagacloud/util/compute_engine/core/CoreComputeUtil.java
  51. 195 0
      src/main/java/com/sagacloud/util/compute_engine/core/CoreComputeUtilUtil.java
  52. 129 0
      src/main/java/com/sagacloud/util/compute_engine/core/CoreComputeUtil_other.java
  53. 26 0
      src/main/java/com/sagacloud/util/compute_engine/core/CoreInput.java
  54. 77 0
      src/main/java/com/sagacloud/util/compute_engine/core/CoreInstance.java
  55. 51 0
      src/main/java/com/sagacloud/util/compute_engine/core/CoreOutput.java
  56. 15 0
      src/main/java/com/sagacloud/util/compute_engine/core/CoreOutputBag.java
  57. 131 0
      src/main/java/com/sagacloud/util/compute_engine/core/CustomFunctionManager.java
  58. 123 0
      src/main/java/com/sagacloud/util/compute_engine/core/Dao_dataManager.java
  59. 123 0
      src/main/java/com/sagacloud/util/compute_engine/core/Dao_data_maxManager.java
  60. 146 0
      src/main/java/com/sagacloud/util/compute_engine/core/DataCache.java
  61. 14 0
      src/main/java/com/sagacloud/util/compute_engine/core/GrammarCompare.java
  62. 27 0
      src/main/java/com/sagacloud/util/compute_engine/core/GrammarTreeNode.java
  63. 9 0
      src/main/java/com/sagacloud/util/compute_engine/core/ICustomFunction.java
  64. 19 0
      src/main/java/com/sagacloud/util/compute_engine/core/IDao_data.java
  65. 20 0
      src/main/java/com/sagacloud/util/compute_engine/core/IDao_data_max.java
  66. 10 0
      src/main/java/com/sagacloud/util/compute_engine/core/IDao_log.java
  67. 70 0
      src/main/java/com/sagacloud/util/compute_engine/data/Data_near.java
  68. 61 0
      src/main/java/com/sagacloud/util/compute_engine/data/Data_service.java
  69. 61 0
      src/main/java/com/sagacloud/util/compute_engine/entity/Entity_ce_computeinputdetail.java
  70. 59 0
      src/main/java/com/sagacloud/util/compute_engine/entity/Entity_ce_computeinputlog.java
  71. 78 0
      src/main/java/com/sagacloud/util/compute_engine/entity/Entity_ce_computelog.java
  72. 69 0
      src/main/java/com/sagacloud/util/compute_engine/entity/Entity_ce_computeoutputdetail.java
  73. 10 0
      src/main/java/com/sagacloud/util/compute_engine/entity/Entity_ces_detail.java
  74. 10 0
      src/main/java/com/sagacloud/util/compute_engine/entity/Entity_ces_log.java
  75. 79 0
      src/main/java/com/sagacloud/util/compute_engine/entity/Entity_ci_instance.java
  76. 115 0
      src/main/java/com/sagacloud/util/compute_engine/entity/Entity_ci_instanceinput.java
  77. 170 0
      src/main/java/com/sagacloud/util/compute_engine/entity/Entity_ci_instanceoutput.java
  78. 34 0
      src/main/java/com/sagacloud/util/compute_engine/entity/Entity_ci_instances.java
  79. 88 0
      src/main/java/com/sagacloud/util/compute_engine/entity/Entity_ci_status.java
  80. 34 0
      src/main/java/com/sagacloud/util/compute_engine/entity/Entity_fjd_0_buildingcomputetime.java
  81. 70 0
      src/main/java/com/sagacloud/util/compute_engine/entity/Entity_fjd_0_computedetail.java
  82. 88 0
      src/main/java/com/sagacloud/util/compute_engine/entity/Entity_fjd_0_computelog.java
  83. 52 0
      src/main/java/com/sagacloud/util/compute_engine/entity/Entity_fjd_0_metercomputetime.java
  84. 4 0
      src/main/java/com/sagacloud/util/compute_engine/entity/Entity_fjd_1_computedetail.java
  85. 88 0
      src/main/java/com/sagacloud/util/compute_engine/entity/Entity_fjd_1_computelog.java
  86. 4 0
      src/main/java/com/sagacloud/util/compute_engine/entity/Entity_fjd_2_computedetail.java
  87. 52 0
      src/main/java/com/sagacloud/util/compute_engine/entity/Entity_fjd_2_computelog.java
  88. 61 0
      src/main/java/com/sagacloud/util/compute_engine/entity/Entity_originaldata.java
  89. 59 0
      src/main/java/com/sagacloud/util/compute_engine/entity/Entity_point.java
  90. 82 0
      src/main/java/com/sagacloud/util/compute_engine/entity/Entity_tenant.java
  91. 85 0
      src/main/java/com/sagacloud/util/compute_engine/entity/Entity_tenant_energy.java
  92. 79 0
      src/main/java/com/sagacloud/util/compute_engine/entity/Entity_tenant_energy_meter.java
  93. 80 0
      src/main/java/com/sagacloud/util/compute_engine/entity/Entity_tenant_energy_price.java
  94. 16 0
      src/main/java/com/sagacloud/util/compute_engine/entity/Entitys_ce_compute.java
  95. 125 0
      src/main/java/com/sagacloud/util/compute_engine/fjd/ComputeEngineMain.java
  96. 52 0
      src/main/java/com/sagacloud/util/compute_engine/fjd/ComputeEngineReset.java
  97. 1383 0
      src/main/java/com/sagacloud/util/compute_engine/fjd/ComputeEngineUtil.java
  98. 27 0
      src/main/java/com/sagacloud/util/compute_engine/fjd/ComputeJob.java
  99. 4 0
      src/main/java/com/sagacloud/util/compute_engine/fjd/ComputeJobItem.java
  100. 0 0
      src/main/java/com/sagacloud/util/compute_engine/fjd/ComputeJobRepository.java

+ 2 - 0
.gitattributes

@@ -0,0 +1,2 @@
+    # Declare files that will always have UNIX line endings on checkout.
+*.sh text eol=lf

+ 58 - 0
.gitignore

@@ -0,0 +1,58 @@
+HELP.md
+target/
+!.mvn/wrapper/maven-wrapper.jar
+!**/src/main/**
+!**/src/test/**
+
+### STS ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+.sts4-cache
+
+### IntelliJ IDEA ###
+.idea
+*.iws
+*.iml
+*.ipr
+.settings/
+.gradle/
+
+### NetBeans ###
+/nbproject/private/
+/nbbuild/
+/dist/
+/nbdist/
+/.nb-gradle/
+build/
+
+### VS Code ###
+.vscode/
+
+### JRebel ###
+rebel.xml
+rebel-remote.xml
+
+### Others ###
+*.log
+*/log
+hs_err_pid*
+
+# Package Files #
+*.jar
+*.war
+*.ear
+*.zip
+*.tar.gz
+*.rar
+*.swp
+*.log
+*.ctxt
+
+
+spring-cloud-alibaba-examples/
+iot-admin-server/
+cloud/nacos/

+ 215 - 0
etc/wrapper.conf

@@ -0,0 +1,215 @@
+#encoding=UTF-8
+# Configuration files must begin with a line specifying the encoding
+#  of the the file.
+
+#********************************************************************
+# Wrapper License Properties (Ignored by Community Edition)
+#********************************************************************
+# Professional and Standard Editions of the Wrapper require a valid
+#  License Key to start.  Licenses can be purchased or a trial license
+#  requested on the following pages:
+# http://wrapper.tanukisoftware.com/purchase
+# http://wrapper.tanukisoftware.com/trial
+
+# Include file problems can be debugged by removing the first '#'
+#  from the following line:
+##include.debug
+
+# The Wrapper will look for either of the following optional files for a
+#  valid License Key.  License Key properties can optionally be included
+#  directly in this configuration file.
+#include ../conf/wrapper-license.conf
+#include ../conf/wrapper-license-%WRAPPER_HOST_NAME%.conf
+
+# The following property will output information about which License Key(s)
+#  are being found, and can aid in resolving any licensing problems.
+#wrapper.license.debug=TRUE
+
+#********************************************************************
+# Wrapper Localization
+#********************************************************************
+# Specify the locale which the Wrapper should use.  By default the system
+#  locale is used.
+#wrapper.lang=en_US # en_US or ja_JP
+
+# Specify the location of the Wrapper's language resources.  If these are
+#  missing, the Wrapper will default to the en_US locale.
+wrapper.lang.folder=../lang
+
+# Default is 30, 0 means never timeout
+# wrapper.startup.timeout=30
+# wrapper.ping.timeout=30
+# wrapper.shutdown.timeout=30
+wrapper.startup.timeout=0
+wrapper.ping.timeout=300
+wrapper.shutdown.timeout=0
+
+#********************************************************************
+# Wrapper Java Properties
+#********************************************************************
+# Java Application
+#  Locate the java binary on the system PATH:
+wrapper.java.command=java
+#  Specify a specific java binary:
+#set.JAVA_HOME=/java/path
+#wrapper.java.command=%JAVA_HOME%/bin/java
+
+# Tell the Wrapper to log the full generated Java command line.
+#wrapper.java.command.loglevel=INFO
+
+# Java Main class.  This class must implement the WrapperListener interface
+#  or guarantee that the WrapperManager class is initialized.  Helper
+#  classes are provided to do this for you.  See the Integration section
+#  of the documentation for details.
+wrapper.java.mainclass=com.sagacloud.util.compute_engine.fjd.ComputeEngineMain
+
+# Java Classpath (include wrapper.jar)  Add class path elements as
+#  needed starting from 1
+wrapper.java.classpath.1=../lib/wrapper.jar
+wrapper.java.classpath.2=../lib/compute-engine-2.2.3.3.jar
+
+# Java Library Path (location of Wrapper.DLL or libwrapper.so)
+wrapper.java.library.path.1=../lib
+
+# Java Bits.  On applicable platforms, tells the JVM to run in 32 or 64-bit mode.
+wrapper.java.additional.auto_bits=TRUE
+
+# Java Additional Parameters
+wrapper.java.additional.1=-XX:-UseGCOverheadLimit
+
+# Initial Java Heap Size (in MB)
+#wrapper.java.initmemory=3
+wrapper.java.initmemory=4096
+
+# Maximum Java Heap Size (in MB)
+#wrapper.java.maxmemory=64
+wrapper.java.maxmemory=32768
+
+# Application parameters.  Add parameters as needed starting from 1
+wrapper.app.parameter.1=<YourMainClass>
+
+#********************************************************************
+# Wrapper Logging Properties
+#********************************************************************
+# Enables Debug output from the Wrapper.
+# wrapper.debug=TRUE
+
+# Format of output for the console.  (See docs for formats)
+wrapper.console.format=PM
+
+# Log Level for console output.  (See docs for log levels)
+wrapper.console.loglevel=INFO
+
+# Log file to use for wrapper output logging.
+wrapper.logfile=../logs/wrapper.log
+
+# Format of output for the log file.  (See docs for formats)
+wrapper.logfile.format=LPTM
+
+# Log Level for log file output.  (See docs for log levels)
+wrapper.logfile.loglevel=INFO
+
+# Maximum size that the log file will be allowed to grow to before
+#  the log is rolled. Size is specified in bytes.  The default value
+#  of 0, disables log rolling.  May abbreviate with the 'k' (kb) or
+#  'm' (mb) suffix.  For example: 10m = 10 megabytes.
+wrapper.logfile.maxsize=0
+
+# Maximum number of rolled log files which will be allowed before old
+#  files are deleted.  The default value of 0 implies no limit.
+wrapper.logfile.maxfiles=0
+
+# Log Level for sys/event log output.  (See docs for log levels)
+wrapper.syslog.loglevel=NONE
+
+#********************************************************************
+# Wrapper General Properties
+#********************************************************************
+# Allow for the use of non-contiguous numbered properties
+wrapper.ignore_sequence_gaps=TRUE
+
+# Do not start if the pid file already exists.
+wrapper.pidfile.strict=TRUE
+
+# Title to use when running as a console
+wrapper.console.title=wrapper-compute-engine
+
+#********************************************************************
+# Wrapper JVM Checks
+#********************************************************************
+# Detect DeadLocked Threads in the JVM. (Requires Standard Edition)
+wrapper.check.deadlock=TRUE
+wrapper.check.deadlock.interval=60
+wrapper.check.deadlock.action=RESTART
+wrapper.check.deadlock.output=FULL
+
+# Out Of Memory detection.
+# (Simple match)
+wrapper.filter.trigger.1000=java.lang.OutOfMemoryError
+# (Only match text in stack traces if -XX:+PrintClassHistogram is being used.)
+#wrapper.filter.trigger.1000=Exception in thread "*" java.lang.OutOfMemoryError
+#wrapper.filter.allow_wildcards.1000=TRUE
+wrapper.filter.action.1000=RESTART
+wrapper.filter.message.1000=The JVM has run out of memory.
+
+#********************************************************************
+# Wrapper Email Notifications. (Requires Professional Edition)
+#********************************************************************
+# Common Event Email settings.
+#wrapper.event.default.email.debug=TRUE
+#wrapper.event.default.email.smtp.host=<SMTP_Host>
+#wrapper.event.default.email.smtp.port=25
+#wrapper.event.default.email.subject=[%WRAPPER_HOSTNAME%:%WRAPPER_NAME%:%WRAPPER_EVENT_NAME%] Event Notification
+#wrapper.event.default.email.sender=<Sender email>
+#wrapper.event.default.email.recipient=<Recipient email>
+
+# Configure the log attached to event emails.
+#wrapper.event.default.email.attach_log=TRUE
+#wrapper.event.default.email.maillog.lines=50
+#wrapper.event.default.email.maillog.format=LPTM
+#wrapper.event.default.email.maillog.loglevel=INFO
+
+# Enable specific event emails.
+#wrapper.event.wrapper_start.email=TRUE
+#wrapper.event.jvm_prelaunch.email=TRUE
+#wrapper.event.jvm_start.email=TRUE
+#wrapper.event.jvm_started.email=TRUE
+#wrapper.event.jvm_deadlock.email=TRUE
+#wrapper.event.jvm_stop.email=TRUE
+#wrapper.event.jvm_stopped.email=TRUE
+#wrapper.event.jvm_restart.email=TRUE
+#wrapper.event.jvm_failed_invocation.email=TRUE
+#wrapper.event.jvm_max_failed_invocations.email=TRUE
+#wrapper.event.jvm_kill.email=TRUE
+#wrapper.event.jvm_killed.email=TRUE
+#wrapper.event.jvm_unexpected_exit.email=TRUE
+#wrapper.event.wrapper_stop.email=TRUE
+
+# Specify custom mail content
+wrapper.event.jvm_restart.email.body=The JVM was restarted.\n\nPlease check on its status.\n
+
+#********************************************************************
+# Wrapper Windows NT/2000/XP Service Properties
+#********************************************************************
+# WARNING - Do not modify any of these properties when an application
+#  using this configuration file has been installed as a service.
+#  Please uninstall the service before modifying this section.  The
+#  service can then be reinstalled.
+
+# Name of the service
+wrapper.name=wrapper-compute-engine
+
+# Display name of the service
+wrapper.displayname=wrapper-compute-engine
+
+# Description of the service
+wrapper.description=wrapper-compute-engine
+
+# Service dependencies.  Add dependencies as needed starting from 1
+wrapper.ntservice.dependency.1=
+
+# Mode in which the service is installed.  AUTO_START, DELAY_START or DEMAND_START
+wrapper.ntservice.starttype=AUTO_START
+
+# Allow the service to interact with the desktop.
+wrapper.ntservice.interactive=false

BIN
etc/~$compute-engine_svn1137.doc


BIN
etc/~$采集计算相关数据库说明.xlsx


+ 127 - 0
etc/删除计算日志.txt

@@ -0,0 +1,127 @@
+
+{
+	"QueryType":"combine_delete",
+	"Database":"db_public",
+	"Datatable":"ce_computeinputdetail",
+	"Criterias":[
+		{
+			"object_sign":"1101070037"
+		},{
+			"object_sign":"1101070037-001"
+		}
+	]
+}
+
+
+
+{
+	"QueryType":"combine_delete",
+	"Database":"db_public",
+	"Datatable":"ce_computeinputlog",
+	"Criterias":[
+		{
+			"object_sign":"1101070037"
+		},{
+			"object_sign":"1101070037-001"
+		}
+	]
+}
+
+
+
+{
+	"QueryType":"combine_delete",
+	"Database":"db_public",
+	"Datatable":"ce_computeoutputdetail",
+	"Criterias":[
+		{
+			"object_sign":"1101070037"
+		},{
+			"object_sign":"1101070037-001"
+		}
+	]
+}
+
+
+
+{
+	"QueryType":"combine_delete",
+	"Database":"db_public",
+	"Datatable":"ce_curround",
+	"Criterias":[
+		{
+			"object_sign":"1101070037"
+		},{
+			"object_sign":"1101070037-001"
+		}
+	]
+}
+
+
+
+{
+	"QueryType":"combine_delete",
+	"Database":"db_public",
+	"Datatable":"ce_preroundindex",
+	"Criterias":[
+		{
+			"object_sign":"1101070037"
+		},{
+			"object_sign":"1101070037-001"
+		}
+	]
+}
+
+
+
+{
+	"QueryType":"combine_delete",
+	"Database":"db_public",
+	"Datatable":"fjd_0_computelog",
+	"Criterias":[
+		{
+			"building":"1101070037"
+		}
+	]
+}
+
+
+
+{
+	"QueryType":"combine_delete",
+	"Database":"db_public",
+	"Datatable":"fjd_0_computedetail",
+	"Criterias":[
+		{
+			"building":"1101070037"
+		}
+	]
+}
+
+
+
+{
+	"QueryType":"combine_delete",
+	"Database":"db_public",
+	"Datatable":"fjd_1_computelog",
+	"Criterias":[
+		{
+			"building":"1101070037"
+		}
+	]
+}
+
+
+
+{
+	"QueryType":"combine_delete",
+	"Database":"db_public",
+	"Datatable":"fjd_1_computedetail",
+	"Criterias":[
+		{
+			"building":"1101070037"
+		}
+	]
+}
+
+

BIN
etc/数据量.xlsx


BIN
etc/配置compute-engine.doc


BIN
etc/配置compute-engine_svn1015.doc


BIN
etc/配置compute-engine_svn1137.doc


BIN
etc/配置compute-engine_svn506.doc


BIN
etc/配置compute-engine_svn729.doc


BIN
etc/配置compute-engine_svn864.doc


BIN
etc/配置compute-engine_svn893.doc


BIN
etc/采集计算相关数据库说明.xlsx


+ 170 - 0
pom.xml

@@ -0,0 +1,170 @@
+<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.springframework.boot</groupId>
+        <artifactId>spring-boot-starter-parent</artifactId>
+        <version>2.3.12.RELEASE</version>
+        <relativePath/>
+    </parent>
+    <groupId>com.sagacloud</groupId>
+    <artifactId>compute-engine</artifactId>
+    <version>2.3.3.341</version>
+    <packaging>jar</packaging>
+    <name>compute-engine</name>
+    <properties>
+        <!-- Maven 相关 -->
+        <java.version>1.8</java.version>
+        <maven.compiler.source>${java.version}</maven.compiler.source>
+        <maven.compiler.target>${java.version}</maven.compiler.target>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
+        <spring-boot.version>2.3.12.RELEASE</spring-boot.version>
+        <jaxen.version>1.2.0</jaxen.version>
+        <dom4j.version>2.1.3</dom4j.version>
+        <lombok.version>1.18.22</lombok.version>
+        <mapstruct.version>1.4.1.Final</mapstruct.version>
+        <hutool.version>5.7.19</hutool.version>
+        <antlr.runtime.version>3.1</antlr.runtime.version>
+        <zillion.util.version>2.3.3.341</zillion.util.version>
+        <!--日志框架有安全漏洞,升级最新版本-->
+        <logback.version>1.2.9</logback.version>
+        <log4j2.version>2.17.0</log4j2.version>
+        <xstream.version>1.4.18</xstream.version>
+        <easyexcel.version>3.0.5</easyexcel.version>
+
+        <!-- Maven Plugin Versions -->
+        <spring-boot-maven-plugin.version>2.3.12.RELEASE</spring-boot-maven-plugin.version>
+        <maven-compiler-plugin.version>3.8.1</maven-compiler-plugin.version>
+        <maven-deploy-plugin.version>2.8.2</maven-deploy-plugin.version>
+        <maven-surefire-plugin.version>3.0.0-M5</maven-surefire-plugin.version>
+        <maven-source-plugin.version>3.2.1</maven-source-plugin.version>
+        <maven-javadoc-plugin.version>3.2.0</maven-javadoc-plugin.version>
+        <maven-resources-plugin.version>3.2.0</maven-resources-plugin.version>
+    </properties>
+
+
+    <dependencies>
+        <!-- Web 相关 -->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.dom4j</groupId>
+            <artifactId>dom4j</artifactId>
+            <version>${dom4j.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>jaxen</groupId>
+            <artifactId>jaxen</artifactId>
+            <version>${jaxen.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>cn.hutool</groupId>
+            <artifactId>hutool-all</artifactId>
+            <version>${hutool.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.antlr</groupId>
+            <artifactId>antlr-runtime</artifactId>
+            <version>${antlr.runtime.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+            <version>${lombok.version}</version>
+        </dependency>
+        <!--		<dependency>-->
+        <!--			<groupId>org.reflections</groupId>-->
+        <!--			<artifactId>reflections</artifactId>-->
+        <!--			<version>0.9.10</version>-->
+        <!--		</dependency>-->
+
+        <dependency>
+            <groupId>com.sagacloud</groupId>
+            <artifactId>zillion-util</artifactId>
+            <version>${zillion.util.version}</version>
+        </dependency>
+    </dependencies>
+
+
+    <distributionManagement>
+        <repository>
+            <id>SagaCloudRelease</id>
+            <name>User Project Release</name>
+            <url>http://47.93.33.207:8082/repository/SagaCloudRelease/</url>
+        </repository>
+        <snapshotRepository>
+            <id>SagaCloudRelease</id>
+            <name>User Project SNAPSHOTS</name>
+            <url>http://47.93.33.207:8082/repository/SagaCloudSnapshot/</url>
+        </snapshotRepository>
+    </distributionManagement>
+    <repositories>
+        <repository>
+            <id>SagaCloud</id>
+            <name>SagaCloud</name>
+            <url>http://47.93.33.207:8082/repository/SagaCloud/</url>
+            <snapshots>
+                <enabled>true</enabled>
+            </snapshots>
+            <releases>
+                <enabled>true</enabled>
+            </releases>
+        </repository>
+        <repository>
+            <id>alimaven</id>
+            <name>aliyun maven</name>
+            <url>http://maven.aliyun.com/nexus/content/groups/public</url>
+        </repository>
+    </repositories>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <version>3.8.1</version>
+                <configuration>
+                    <source>1.8</source>
+                    <target>1.8</target>
+                    <encoding>UTF-8</encoding>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+                <version>${spring-boot.version}</version>
+            </plugin>
+            <!--拷贝资源文件 copy-resources-->
+            <plugin>
+                <artifactId>maven-resources-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>copy-resources</id>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>copy-resources</goal>
+                        </goals>
+                        <configuration>
+                            <resources>
+                                <resource>
+                                    <directory>src/main/resources/</directory>
+                                    <includes>
+                                        <include>*.conf</include>
+                                        <include>*.keytab</include>
+                                        <include>*.properties</include>
+                                        <include>*.xml</include>
+                                        <include>*.json</include>
+                                    </includes>
+                                </resource>
+                            </resources>
+                            <outputDirectory>${project.build.directory}</outputDirectory>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+</project>

+ 15 - 0
src/main/java/com/sagacloud/ComputeEngineApplication.java

@@ -0,0 +1,15 @@
+package com.sagacloud;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.web.servlet.ServletComponentScan;
+
+@SpringBootApplication
+@ServletComponentScan
+public class ComputeEngineApplication {
+
+    public static void main(String[] args) {
+        SpringApplication.run(ComputeEngineApplication.class, args);
+    }
+
+}

+ 29 - 0
src/main/java/com/sagacloud/extend/customfunction/ImplCustomFunction_add.java

@@ -0,0 +1,29 @@
+package com.sagacloud.extend.customfunction;
+
+import com.sagacloud.util.compute_engine.core.AnnotationDescription;
+import com.sagacloud.util.compute_engine.core.ICustomFunction;
+
+import java.util.Iterator;
+import java.util.Map;
+
+@AnnotationDescription(value = "custom_function")
+public class ImplCustomFunction_add implements ICustomFunction {
+    @Override
+    public String GetName() {
+        return "custom_add";
+    }
+
+    @Override
+    public double Compute(Map<String, Double> inputMap) {
+        double result = 0.0;
+        Iterator<String> keyIter = inputMap.keySet().iterator();
+        while (keyIter.hasNext()) {
+            String key = keyIter.next();
+            Double value = inputMap.get(key);
+            if (value != null) {
+                result += value;
+            }
+        }
+        return result;
+    }
+}

+ 32 - 0
src/main/java/com/sagacloud/extend/customfunction/ImplCustomFunction_f3.java

@@ -0,0 +1,32 @@
+package com.sagacloud.extend.customfunction;
+
+import com.sagacloud.util.compute_engine.core.AnnotationDescription;
+import com.sagacloud.util.compute_engine.core.ICustomFunction;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+@AnnotationDescription(value = "custom_function")
+public class ImplCustomFunction_f3 implements ICustomFunction {
+    @Override
+    public String GetName() {
+        return "f3";
+    }
+
+    public List<String> GetParamList() {
+        List<String> result = new ArrayList<String>();
+        result.add("a");
+        result.add("b");
+        result.add("c");
+        return result;
+    }
+
+    @Override
+    public double Compute(Map<String, Double> inputMap) {
+        double a = inputMap.get("a");
+        double b = inputMap.get("b");
+        double c = inputMap.get("c");
+        return a > b ? c : 250.0;
+    }
+}

+ 163 - 0
src/main/java/com/sagacloud/extend/dao_data/ImplDao_energydata.java

@@ -0,0 +1,163 @@
+package com.sagacloud.extend.dao_data;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.sagacloud.util.compute_engine.core.AnnotationDescription;
+import com.sagacloud.util.compute_engine.core.IDao_data;
+import com.sagacloud.util.compute_engine.util.ConstantCE;
+import com.sagacloud.util.compute_engine.util.DoubleTimeObject;
+import com.sagacloud.util.compute_engine.util.QueryUtil;
+
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+@AnnotationDescription(value = "dao_data")
+public class ImplDao_energydata implements IDao_data {
+
+    String database_name;
+    String table_name;
+    String dao_type = "energydata";
+
+    @Override
+    public void Initialize(String database_name) {
+
+        this.database_name = database_name;
+        this.table_name = "data_" + dao_type;
+    }
+
+    @Override
+    public String GetName() {
+        return this.dao_type;
+    }
+
+    @Override
+    public List<DoubleTimeObject> GetDataListGteLte(JSONObject dao_key, String time_period, Date time_from, Date time_to, boolean GteLte)
+            throws Exception {
+        List<DoubleTimeObject> result = null;
+
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
+        String building = (String) dao_key.get("building");
+        String energyModelSign = (String) dao_key.get("energyModelSign");
+        String energyModelNodeSign = (String) dao_key.get("energyModelNodeSign");
+
+        JSONObject Criteria = new JSONObject();
+        Criteria.put("building", building);
+        Criteria.put("energyModelSign", energyModelSign);
+        Criteria.put("energyModelNodeSign", energyModelNodeSign);
+        if (ConstantCE.time_period_seperate) {
+            //
+        } else {
+            Criteria.put("time_period", time_period);
+        }
+        JSONObject range = new JSONObject();
+        range.put("$gte", sdf.format(time_from));
+        if (GteLte) {
+            range.put("$lte", sdf.format(time_to));
+        } else {
+            range.put("$lt", sdf.format(time_to));
+        }
+        Criteria.put("data_time", range);
+        String table_name_query;
+        if (ConstantCE.time_period_seperate) {
+            table_name_query = table_name + "_" + time_period;
+        } else {
+            table_name_query = table_name;
+        }
+        JSONArray resultContent = QueryUtil.select(database_name, table_name_query, Criteria);
+        List<DoubleTimeObject> dataList = new ArrayList<DoubleTimeObject>();
+        for (int ii = 0; ii < resultContent.size(); ii++) {
+            JSONObject computelog = (JSONObject) resultContent.get(ii);
+            DoubleTimeObject data = new DoubleTimeObject();
+            data.data_time = sdf.parse((String) computelog.get("data_time"));
+            data.data_value = (Double) computelog.get("data_value");
+            dataList.add(data);
+        }
+        result = dataList;
+
+        return result;
+    }
+
+    @Override
+    public void InsertDataListGteLte(JSONObject dao_key, String time_period, List<DoubleTimeObject> outputDataList) throws Exception {
+        if (ConstantCE.time_period_seperate_save_two || !ConstantCE.time_period_seperate) {
+            this.InsertDataListGteLte(false, dao_key, time_period, outputDataList);
+        }
+        if (ConstantCE.time_period_seperate_save_two || ConstantCE.time_period_seperate) {
+            this.InsertDataListGteLte(true, dao_key, time_period, outputDataList);
+        }
+    }
+
+    @Override
+    public void DeleteDataListGteLte(JSONObject dao_key, String time_period, Date time_from, Date time_to) throws Exception {
+        if (ConstantCE.time_period_seperate_save_two || !ConstantCE.time_period_seperate) {
+            this.DeleteDataListGteLte(false, dao_key, time_period, time_from, time_to);
+        }
+        if (ConstantCE.time_period_seperate_save_two || ConstantCE.time_period_seperate) {
+            this.DeleteDataListGteLte(true, dao_key, time_period, time_from, time_to);
+        }
+    }
+
+    private void DeleteDataListGteLte(boolean time_period_seperate, JSONObject dao_key, String time_period, Date time_from, Date time_to)
+            throws Exception {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
+
+        String building = (String) dao_key.get("building");
+        String energyModelSign = (String) dao_key.get("energyModelSign");
+        String energyModelNodeSign = (String) dao_key.get("energyModelNodeSign");
+
+        JSONObject Criteria = new JSONObject();
+        Criteria.put("building", building);
+        Criteria.put("energyModelSign", energyModelSign);
+        Criteria.put("energyModelNodeSign", energyModelNodeSign);
+        if (time_period_seperate) {
+            //
+        } else {
+            Criteria.put("time_period", time_period);
+        }
+        JSONObject range = new JSONObject();
+        range.put("$gte", sdf.format(time_from));
+        range.put("$lte", sdf.format(time_to));
+        Criteria.put("data_time", range);
+        String table_name_query;
+        if (time_period_seperate) {
+            table_name_query = table_name + "_" + time_period;
+        } else {
+            table_name_query = table_name;
+        }
+        QueryUtil.delete(database_name, table_name_query, Criteria);
+    }
+
+    private void InsertDataListGteLte(boolean time_period_seperate, JSONObject dao_key, String time_period, List<DoubleTimeObject> outputDataList)
+            throws Exception {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
+
+        String building = (String) dao_key.get("building");
+        String energyModelSign = (String) dao_key.get("energyModelSign");
+        String energyModelNodeSign = (String) dao_key.get("energyModelNodeSign");
+
+        JSONArray InsertObjects = new JSONArray();
+        for (DoubleTimeObject data : outputDataList) {
+            JSONObject InsertObject = new JSONObject();
+            InsertObject.put("building", building);
+            InsertObject.put("energyModelSign", energyModelSign);
+            InsertObject.put("energyModelNodeSign", energyModelNodeSign);
+            if (time_period_seperate) {
+                //
+            } else {
+                InsertObject.put("time_period", time_period);
+            }
+            InsertObject.put("data_time", sdf.format(data.data_time));
+            InsertObject.put("data_value", data.data_value);
+            InsertObjects.add(InsertObject);
+        }
+        String table_name_query;
+        if (time_period_seperate) {
+            table_name_query = table_name + "_" + time_period;
+        } else {
+            table_name_query = table_name;
+        }
+        QueryUtil.batch_insert(database_name, table_name_query, InsertObjects);
+    }
+}

+ 161 - 0
src/main/java/com/sagacloud/extend/dao_data/ImplDao_fjd_0.java

@@ -0,0 +1,161 @@
+package com.sagacloud.extend.dao_data;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.sagacloud.util.compute_engine.core.AnnotationDescription;
+import com.sagacloud.util.compute_engine.core.IDao_data;
+import com.sagacloud.util.compute_engine.util.ConstantCE;
+import com.sagacloud.util.compute_engine.util.DoubleTimeObject;
+import com.sagacloud.util.compute_engine.util.QueryUtil;
+import org.zillion.util.json.FastJsonUtil;
+
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+@AnnotationDescription(value = "dao_data")
+public class ImplDao_fjd_0 implements IDao_data {
+    String database_name;
+    String table_name;
+    String dao_type = "fjd_0";
+
+    @Override
+    public void Initialize(String database_name) {
+        this.database_name = database_name;
+        this.table_name = "fjd_0_near";
+    }
+
+    @Override
+    public String GetName() {
+        return this.dao_type;
+    }
+
+    @Override
+    public List<DoubleTimeObject> GetDataListGteLte(JSONObject dao_key, String time_period, Date time_from, Date time_to, boolean GteLte)
+            throws Exception {
+        List<DoubleTimeObject> result = null;
+
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
+        String building = (String) dao_key.get("building");
+        String meter = (String) dao_key.get("meter");
+        long funcid = FastJsonUtil.getLong(dao_key, "funcid");
+
+        JSONObject Criteria = new JSONObject();
+        Criteria.put("building", building);
+        Criteria.put("meter", meter);
+        Criteria.put("funcid", funcid);
+        if (ConstantCE.time_period_seperate) {
+            //
+        } else {
+            Criteria.put("time_period", time_period);
+        }
+        JSONObject range = new JSONObject();
+        range.put("$gte", sdf.format(time_from));
+        if (GteLte) {
+            range.put("$lte", sdf.format(time_to));
+        } else {
+            range.put("$lt", sdf.format(time_to));
+        }
+        Criteria.put("data_time", range);
+        String table_name_query;
+        if (ConstantCE.time_period_seperate) {
+            table_name_query = table_name + "_" + time_period;
+        } else {
+            table_name_query = table_name;
+        }
+        JSONArray resultContent = QueryUtil.select(database_name, table_name_query, Criteria);
+        List<DoubleTimeObject> dataList = new ArrayList<DoubleTimeObject>();
+        for (int ii = 0; ii < resultContent.size(); ii++) {
+            JSONObject computelog = (JSONObject) resultContent.get(ii);
+            DoubleTimeObject data = new DoubleTimeObject();
+            data.data_time = sdf.parse((String) computelog.get("data_time"));
+            data.data_value = (Double) computelog.get("data_value");
+            dataList.add(data);
+        }
+        result = dataList;
+
+        return result;
+    }
+
+    @Override
+    public void InsertDataListGteLte(JSONObject dao_key, String time_period, List<DoubleTimeObject> outputDataList) throws Exception {
+        if (ConstantCE.time_period_seperate_save_two || !ConstantCE.time_period_seperate) {
+            this.InsertDataListGteLte(false, dao_key, time_period, outputDataList);
+        }
+        if (ConstantCE.time_period_seperate_save_two || ConstantCE.time_period_seperate) {
+            this.InsertDataListGteLte(true, dao_key, time_period, outputDataList);
+        }
+    }
+
+    @Override
+    public void DeleteDataListGteLte(JSONObject dao_key, String time_period, Date time_from, Date time_to) throws Exception {
+        if (ConstantCE.time_period_seperate_save_two || !ConstantCE.time_period_seperate) {
+            this.DeleteDataListGteLte(false, dao_key, time_period, time_from, time_to);
+        }
+        if (ConstantCE.time_period_seperate_save_two || ConstantCE.time_period_seperate) {
+            this.DeleteDataListGteLte(true, dao_key, time_period, time_from, time_to);
+        }
+    }
+
+    private void DeleteDataListGteLte(boolean time_period_seperate, JSONObject dao_key, String time_period, Date time_from, Date time_to) throws Exception {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
+
+        String building = (String) dao_key.get("building");
+        String meter = (String) dao_key.get("meter");
+        long funcid = FastJsonUtil.getLong(dao_key, "funcid");
+
+        JSONObject Criteria = new JSONObject();
+        Criteria.put("building", building);
+        Criteria.put("meter", meter);
+        Criteria.put("funcid", funcid);
+        if (time_period_seperate) {
+            //
+        } else {
+            Criteria.put("time_period", time_period);
+        }
+        JSONObject range = new JSONObject();
+        range.put("$gte", sdf.format(time_from));
+        range.put("$lte", sdf.format(time_to));
+        Criteria.put("data_time", range);
+        String table_name_query;
+        if (time_period_seperate) {
+            table_name_query = table_name + "_" + time_period;
+        } else {
+            table_name_query = table_name;
+        }
+        QueryUtil.delete(database_name, table_name_query, Criteria);
+    }
+
+    private void InsertDataListGteLte(boolean time_period_seperate, JSONObject dao_key, String time_period, List<DoubleTimeObject> outputDataList) throws Exception {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
+
+        String building = (String) dao_key.get("building");
+        String meter = (String) dao_key.get("meter");
+        long funcid = FastJsonUtil.getLong(dao_key, "funcid");
+
+        JSONArray InsertObjects = new JSONArray();
+        for (DoubleTimeObject data : outputDataList) {
+            JSONObject InsertObject = new JSONObject();
+            InsertObject.put("building", building);
+            InsertObject.put("meter", meter);
+            InsertObject.put("funcid", funcid);
+            if (time_period_seperate) {
+                //
+            } else {
+                InsertObject.put("time_period", time_period);
+            }
+            InsertObject.put("data_time", sdf.format(data.data_time));
+            InsertObject.put("data_value", data.data_value);
+            InsertObject.put("data_flag", 0L);
+            InsertObjects.add(InsertObject);
+        }
+        String table_name_query;
+        if (time_period_seperate) {
+            table_name_query = table_name + "_" + time_period;
+        } else {
+            table_name_query = table_name;
+        }
+        QueryUtil.batch_insert(database_name, table_name_query, InsertObjects);
+    }
+}

+ 170 - 0
src/main/java/com/sagacloud/extend/dao_data/ImplDao_fjd_0_loss_rate.java

@@ -0,0 +1,170 @@
+package com.sagacloud.extend.dao_data;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.sagacloud.util.compute_engine.core.AnnotationDescription;
+import com.sagacloud.util.compute_engine.core.IDao_data;
+import com.sagacloud.util.compute_engine.util.ConstantCE;
+import com.sagacloud.util.compute_engine.util.DoubleTimeObject;
+import com.sagacloud.util.compute_engine.util.DoubleTimeObject_loss_rate;
+import com.sagacloud.util.compute_engine.util.QueryUtil;
+import org.zillion.util.json.FastJsonUtil;
+
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+@AnnotationDescription(value = "dao_data")
+public class ImplDao_fjd_0_loss_rate implements IDao_data {
+
+    String database_name;
+    String table_name;
+    String dao_type = "fjd_0_loss_rate";
+
+    @Override
+    public void Initialize(String database_name) {
+
+        this.database_name = database_name;
+        this.table_name = "fjd_0_loss_rate";
+    }
+
+    @Override
+    public String GetName() {
+        return this.dao_type;
+    }
+
+    @Override
+    public List<DoubleTimeObject> GetDataListGteLte(JSONObject dao_key, String time_period, Date time_from, Date time_to, boolean GteLte)
+            throws Exception {
+        List<DoubleTimeObject> result = null;
+
+        return result;
+    }
+
+    @Override
+    public void InsertDataListGteLte(JSONObject dao_key, String time_period, List<DoubleTimeObject> outputDataList) throws Exception {
+    }
+
+    @Override
+    public void DeleteDataListGteLte(JSONObject dao_key, String time_period, Date time_from, Date time_to) throws Exception {
+        if (ConstantCE.time_period_seperate_save_two || !ConstantCE.time_period_seperate) {
+            this.DeleteDataListGteLte(false, dao_key, time_period, time_from, time_to);
+        }
+        if (ConstantCE.time_period_seperate_save_two || ConstantCE.time_period_seperate) {
+            this.DeleteDataListGteLte(true, dao_key, time_period, time_from, time_to);
+        }
+    }
+
+    private void DeleteDataListGteLte(boolean time_period_seperate, JSONObject dao_key, String time_period, Date time_from, Date time_to)
+            throws Exception {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
+
+        String building = (String) dao_key.get("building");
+        String meter = (String) dao_key.get("meter");
+        long funcid = FastJsonUtil.getLong(dao_key, "funcid");
+
+        JSONObject Criteria = new JSONObject();
+        Criteria.put("building", building);
+        Criteria.put("meter", meter);
+        Criteria.put("funcid", funcid);
+        if (time_period_seperate) {
+            //
+        } else {
+            Criteria.put("time_period", time_period);
+        }
+        JSONObject range = new JSONObject();
+        range.put("$gte", sdf.format(time_from));
+        range.put("$lte", sdf.format(time_to));
+        Criteria.put("operate_time", range);
+        String table_name_query;
+        if (time_period_seperate) {
+            table_name_query = table_name + "_" + time_period;
+        } else {
+            table_name_query = table_name;
+        }
+        QueryUtil.delete(database_name, table_name_query, Criteria);
+    }
+
+    public void InsertDataListGteLte_rate(boolean time_period_seperate, JSONObject dao_key, String time_period,
+                                          List<DoubleTimeObject_loss_rate> outputDataList) throws Exception {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
+
+        String building = (String) dao_key.get("building");
+        String meter = (String) dao_key.get("meter");
+        long funcid = FastJsonUtil.getLong(dao_key, "funcid");
+
+        JSONArray InsertObjects = new JSONArray();
+        for (DoubleTimeObject_loss_rate data : outputDataList) {
+            JSONObject InsertObject = new JSONObject();
+            InsertObject.put("building", building);
+            InsertObject.put("meter", meter);
+            InsertObject.put("funcid", funcid);
+            if (time_period_seperate) {
+                //
+            } else {
+                InsertObject.put("time_period", time_period);
+            }
+            InsertObject.put("operate_time", sdf.format(data.operate_time));
+            InsertObject.put("valid_count", data.valid_count);
+            InsertObject.put("valid_minutes", data.valid_minutes);
+            InsertObject.put("valid_rate", data.valid_rate);
+            InsertObjects.add(InsertObject);
+        }
+        String table_name_query;
+        if (time_period_seperate) {
+            table_name_query = table_name + "_" + time_period;
+        } else {
+            table_name_query = table_name;
+        }
+        QueryUtil.batch_insert(database_name, table_name_query, InsertObjects);
+    }
+
+    public List<DoubleTimeObject_loss_rate> GetDataListGteLte_rate(JSONObject dao_key, String time_period, Date time_from, Date time_to,
+                                                                   boolean GteLte) throws Exception {
+        List<DoubleTimeObject_loss_rate> result = null;
+
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
+        String building = (String) dao_key.get("building");
+        String meter = (String) dao_key.get("meter");
+        long funcid = FastJsonUtil.getLong(dao_key, "funcid");
+
+        JSONObject Criteria = new JSONObject();
+        Criteria.put("building", building);
+        Criteria.put("meter", meter);
+        Criteria.put("funcid", funcid);
+        if (ConstantCE.time_period_seperate) {
+            //
+        } else {
+            Criteria.put("time_period", time_period);
+        }
+        JSONObject range = new JSONObject();
+        range.put("$gte", sdf.format(time_from));
+        if (GteLte) {
+            range.put("$lte", sdf.format(time_to));
+        } else {
+            range.put("$lt", sdf.format(time_to));
+        }
+        Criteria.put("operate_time", range);
+        String table_name_query;
+        if (ConstantCE.time_period_seperate) {
+            table_name_query = table_name + "_" + time_period;
+        } else {
+            table_name_query = table_name;
+        }
+        JSONArray resultContent = QueryUtil.select(database_name, table_name_query, Criteria);
+        List<DoubleTimeObject_loss_rate> dataList = new ArrayList<DoubleTimeObject_loss_rate>();
+        for (int ii = 0; ii < resultContent.size(); ii++) {
+            JSONObject computelog = (JSONObject) resultContent.get(ii);
+            DoubleTimeObject_loss_rate data = new DoubleTimeObject_loss_rate();
+            data.operate_time = sdf.parse((String) computelog.get("operate_time"));
+            data.valid_count = (Long) computelog.get("valid_count");
+            data.valid_minutes = (Long) computelog.get("valid_minutes");
+            data.valid_rate = (Double) computelog.get("valid_rate");
+            dataList.add(data);
+        }
+        result = dataList;
+
+        return result;
+    }
+}

+ 182 - 0
src/main/java/com/sagacloud/extend/dao_data/ImplDao_fjd_0_rate.java

@@ -0,0 +1,182 @@
+package com.sagacloud.extend.dao_data;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.sagacloud.util.compute_engine.core.AnnotationDescription;
+import com.sagacloud.util.compute_engine.core.IDao_data;
+import com.sagacloud.util.compute_engine.util.ConstantCE;
+import com.sagacloud.util.compute_engine.util.DoubleTimeObject;
+import com.sagacloud.util.compute_engine.util.DoubleTimeObject_rate;
+import com.sagacloud.util.compute_engine.util.QueryUtil;
+import org.zillion.util.json.FastJsonUtil;
+
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+@AnnotationDescription(value = "dao_data")
+public class ImplDao_fjd_0_rate implements IDao_data {
+
+    String database_name;
+    String table_name;
+    String dao_type = "fjd_0_rate";
+
+    @Override
+    public void Initialize(String database_name) {
+
+        this.database_name = database_name;
+        this.table_name = "fjd_0_rate";
+    }
+
+    @Override
+    public String GetName() {
+        return this.dao_type;
+    }
+
+    @Override
+    public List<DoubleTimeObject> GetDataListGteLte(JSONObject dao_key, String time_period, Date time_from, Date time_to, boolean GteLte)
+            throws Exception {
+        List<DoubleTimeObject> result = null;
+
+        return result;
+    }
+
+    @Override
+    public void DeleteDataListGteLte(JSONObject dao_key, String time_period, Date time_from, Date time_to) throws Exception {
+    }
+
+    @Override
+    public void InsertDataListGteLte(JSONObject dao_key, String time_period, List<DoubleTimeObject> outputDataList) throws Exception {
+    }
+
+    public List<DoubleTimeObject_rate> GetDataListGteLte_rate(JSONObject dao_key, String time_period, Date time_from, Date time_to, boolean GteLte)
+            throws Exception {
+        List<DoubleTimeObject_rate> result = null;
+
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
+        String building = (String) dao_key.get("building");
+        String meter = (String) dao_key.get("meter");
+        long funcid = FastJsonUtil.getLong(dao_key, "funcid");
+
+        JSONObject Criteria = new JSONObject();
+        Criteria.put("building", building);
+        Criteria.put("meter", meter);
+        Criteria.put("funcid", funcid);
+        if (ConstantCE.time_period_seperate) {
+            //
+        } else {
+            Criteria.put("time_period", time_period);
+        }
+        JSONObject range = new JSONObject();
+        range.put("$gte", sdf.format(time_from));
+        if (GteLte) {
+            range.put("$lte", sdf.format(time_to));
+        } else {
+            range.put("$lt", sdf.format(time_to));
+        }
+        Criteria.put("data_time", range);
+        String table_name_query;
+        if (ConstantCE.time_period_seperate) {
+            table_name_query = table_name + "_" + time_period;
+        } else {
+            table_name_query = table_name;
+        }
+        JSONArray resultContent = QueryUtil.select(database_name, table_name_query, Criteria);
+        List<DoubleTimeObject_rate> dataList = new ArrayList<DoubleTimeObject_rate>();
+        for (int ii = 0; ii < resultContent.size(); ii++) {
+            JSONObject computelog = (JSONObject) resultContent.get(ii);
+            DoubleTimeObject_rate data = new DoubleTimeObject_rate();
+            data.data_time = sdf.parse((String) computelog.get("data_time"));
+            data.data_flag = (Long) computelog.get("data_flag");
+            data.status_value = (Double) computelog.get("status_value");
+            data.status_ratio = (Double) computelog.get("status_ratio");
+            dataList.add(data);
+        }
+        result = dataList;
+
+        return result;
+    }
+
+    public void InsertDataListGteLte_rate(JSONObject dao_key, String time_period, List<DoubleTimeObject_rate> outputDataList) throws Exception {
+        if (ConstantCE.time_period_seperate_save_two || !ConstantCE.time_period_seperate) {
+            this.InsertDataListGteLte_rate(false, dao_key, time_period, outputDataList);
+        }
+        if (ConstantCE.time_period_seperate_save_two || ConstantCE.time_period_seperate) {
+            this.InsertDataListGteLte_rate(true, dao_key, time_period, outputDataList);
+        }
+    }
+
+    public void DeleteDataListGteLte_rate(JSONObject dao_key, String time_period, Date time_from, Date time_to) throws Exception {
+        if (ConstantCE.time_period_seperate_save_two || !ConstantCE.time_period_seperate) {
+            this.DeleteDataListGteLte_rate(false, dao_key, time_period, time_from, time_to);
+        }
+        if (ConstantCE.time_period_seperate_save_two || ConstantCE.time_period_seperate) {
+            this.DeleteDataListGteLte_rate(true, dao_key, time_period, time_from, time_to);
+        }
+    }
+
+    public void DeleteDataListGteLte_rate(boolean time_period_seperate, JSONObject dao_key, String time_period, Date time_from, Date time_to)
+            throws Exception {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
+
+        String building = (String) dao_key.get("building");
+        String meter = (String) dao_key.get("meter");
+        long funcid = FastJsonUtil.getLong(dao_key, "funcid");
+
+        JSONObject Criteria = new JSONObject();
+        Criteria.put("building", building);
+        Criteria.put("meter", meter);
+        Criteria.put("funcid", funcid);
+        if (time_period_seperate) {
+            //
+        } else {
+            Criteria.put("time_period", time_period);
+        }
+        JSONObject range = new JSONObject();
+        range.put("$gte", sdf.format(time_from));
+        range.put("$lte", sdf.format(time_to));
+        Criteria.put("data_time", range);
+        String table_name_query;
+        if (time_period_seperate) {
+            table_name_query = table_name + "_" + time_period;
+        } else {
+            table_name_query = table_name;
+        }
+        QueryUtil.delete(database_name, table_name_query, Criteria);
+    }
+
+    public void InsertDataListGteLte_rate(boolean time_period_seperate, JSONObject dao_key, String time_period,
+                                          List<DoubleTimeObject_rate> outputDataList) throws Exception {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
+
+        String building = (String) dao_key.get("building");
+        String meter = (String) dao_key.get("meter");
+        long funcid = FastJsonUtil.getLong(dao_key, "funcid");
+
+        JSONArray InsertObjects = new JSONArray();
+        for (DoubleTimeObject_rate data : outputDataList) {
+            JSONObject InsertObject = new JSONObject();
+            InsertObject.put("building", building);
+            InsertObject.put("meter", meter);
+            InsertObject.put("funcid", funcid);
+            if (time_period_seperate) {
+                //
+            } else {
+                InsertObject.put("time_period", time_period);
+            }
+            InsertObject.put("data_time", sdf.format(data.data_time));
+            InsertObject.put("data_flag", data.data_flag);
+            InsertObject.put("status_value", data.status_value);
+            InsertObject.put("status_ratio", data.status_ratio);
+            InsertObjects.add(InsertObject);
+        }
+        String table_name_query;
+        if (time_period_seperate) {
+            table_name_query = table_name + "_" + time_period;
+        } else {
+            table_name_query = table_name;
+        }
+        QueryUtil.batch_insert(database_name, table_name_query, InsertObjects);
+    }
+}

+ 163 - 0
src/main/java/com/sagacloud/extend/dao_data/ImplDao_fjd_1.java

@@ -0,0 +1,163 @@
+package com.sagacloud.extend.dao_data;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.sagacloud.util.compute_engine.core.AnnotationDescription;
+import com.sagacloud.util.compute_engine.core.IDao_data;
+import com.sagacloud.util.compute_engine.util.ConstantCE;
+import com.sagacloud.util.compute_engine.util.DoubleTimeObject;
+import com.sagacloud.util.compute_engine.util.QueryUtil;
+import org.zillion.util.json.FastJsonUtil;
+
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+@AnnotationDescription(value = "dao_data")
+public class ImplDao_fjd_1 implements IDao_data {
+
+    String database_name;
+    String table_name;
+    String dao_type = "fjd_1";
+
+    @Override
+    public void Initialize(String database_name) {
+
+        this.database_name = database_name;
+        this.table_name = "fjd_1_near";
+    }
+
+    @Override
+    public String GetName() {
+        return this.dao_type;
+    }
+
+    @Override
+    public List<DoubleTimeObject> GetDataListGteLte(JSONObject dao_key, String time_period, Date time_from, Date time_to, boolean GteLte)
+            throws Exception {
+        List<DoubleTimeObject> result = null;
+
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
+        String building = (String) dao_key.get("building");
+        String meter = (String) dao_key.get("meter");
+        long funcid = FastJsonUtil.getLong(dao_key, "funcid");
+
+        JSONObject Criteria = new JSONObject();
+        Criteria.put("building", building);
+        Criteria.put("meter", meter);
+        Criteria.put("funcid", funcid);
+        if (ConstantCE.time_period_seperate) {
+            //
+        } else {
+            Criteria.put("time_period", time_period);
+        }
+        JSONObject range = new JSONObject();
+        range.put("$gte", sdf.format(time_from));
+        if (GteLte) {
+            range.put("$lte", sdf.format(time_to));
+        } else {
+            range.put("$lt", sdf.format(time_to));
+        }
+        Criteria.put("data_time", range);
+        String table_name_query;
+        if (ConstantCE.time_period_seperate) {
+            table_name_query = table_name + "_" + time_period;
+        } else {
+            table_name_query = table_name;
+        }
+        JSONArray resultContent = QueryUtil.select(database_name, table_name_query, Criteria);
+        List<DoubleTimeObject> dataList = new ArrayList<DoubleTimeObject>();
+        for (int ii = 0; ii < resultContent.size(); ii++) {
+            JSONObject computelog = (JSONObject) resultContent.get(ii);
+            DoubleTimeObject data = new DoubleTimeObject();
+            data.data_time = sdf.parse((String) computelog.get("data_time"));
+            data.data_value = (Double) computelog.get("data_value");
+            dataList.add(data);
+        }
+        result = dataList;
+
+        return result;
+    }
+
+    @Override
+    public void InsertDataListGteLte(JSONObject dao_key, String time_period, List<DoubleTimeObject> outputDataList) throws Exception {
+        if (ConstantCE.time_period_seperate_save_two || !ConstantCE.time_period_seperate) {
+            this.InsertDataListGteLte(false, dao_key, time_period, outputDataList);
+        }
+        if (ConstantCE.time_period_seperate_save_two || ConstantCE.time_period_seperate) {
+            this.InsertDataListGteLte(true, dao_key, time_period, outputDataList);
+        }
+    }
+
+    @Override
+    public void DeleteDataListGteLte(JSONObject dao_key, String time_period, Date time_from, Date time_to) throws Exception {
+        if (ConstantCE.time_period_seperate_save_two || !ConstantCE.time_period_seperate) {
+            this.DeleteDataListGteLte(false, dao_key, time_period, time_from, time_to);
+        }
+        if (ConstantCE.time_period_seperate_save_two || ConstantCE.time_period_seperate) {
+            this.DeleteDataListGteLte(true, dao_key, time_period, time_from, time_to);
+        }
+    }
+
+    private void DeleteDataListGteLte(boolean time_period_seperate, JSONObject dao_key, String time_period, Date time_from, Date time_to) throws Exception {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
+
+        String building = (String) dao_key.get("building");
+        String meter = (String) dao_key.get("meter");
+        long funcid = FastJsonUtil.getLong(dao_key, "funcid");
+
+        JSONObject Criteria = new JSONObject();
+        Criteria.put("building", building);
+        Criteria.put("meter", meter);
+        Criteria.put("funcid", funcid);
+        if (time_period_seperate) {
+            //
+        } else {
+            Criteria.put("time_period", time_period);
+        }
+        JSONObject range = new JSONObject();
+        range.put("$gte", sdf.format(time_from));
+        range.put("$lte", sdf.format(time_to));
+        Criteria.put("data_time", range);
+        String table_name_query;
+        if (time_period_seperate) {
+            table_name_query = table_name + "_" + time_period;
+        } else {
+            table_name_query = table_name;
+        }
+        QueryUtil.delete(database_name, table_name_query, Criteria);
+    }
+
+    private void InsertDataListGteLte(boolean time_period_seperate, JSONObject dao_key, String time_period, List<DoubleTimeObject> outputDataList) throws Exception {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
+
+        String building = (String) dao_key.get("building");
+        String meter = (String) dao_key.get("meter");
+        long funcid = FastJsonUtil.getLong(dao_key, "funcid");
+
+        JSONArray InsertObjects = new JSONArray();
+        for (DoubleTimeObject data : outputDataList) {
+            JSONObject InsertObject = new JSONObject();
+            InsertObject.put("building", building);
+            InsertObject.put("meter", meter);
+            InsertObject.put("funcid", funcid);
+            if (time_period_seperate) {
+                //
+            } else {
+                InsertObject.put("time_period", time_period);
+            }
+            InsertObject.put("data_time", sdf.format(data.data_time));
+            InsertObject.put("data_value", data.data_value);
+            InsertObject.put("data_flag", 0L);
+            InsertObjects.add(InsertObject);
+        }
+        String table_name_query;
+        if (time_period_seperate) {
+            table_name_query = table_name + "_" + time_period;
+        } else {
+            table_name_query = table_name;
+        }
+        QueryUtil.batch_insert(database_name, table_name_query, InsertObjects);
+    }
+}

+ 117 - 0
src/main/java/com/sagacloud/extend/dao_data/ImplDao_fjd_near.java

@@ -0,0 +1,117 @@
+package com.sagacloud.extend.dao_data;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.sagacloud.util.compute_engine.core.AnnotationDescription;
+import com.sagacloud.util.compute_engine.core.IDao_data;
+import com.sagacloud.util.compute_engine.util.DoubleTimeObject;
+import com.sagacloud.util.compute_engine.util.DoubleTimeObject_fjd_near;
+import com.sagacloud.util.compute_engine.util.QueryUtil;
+import com.sagacloud.util.compute_engine.util.QueryUtil_fjd;
+import org.zillion.util.json.FastJsonUtil;
+
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+@AnnotationDescription(value = "dao_data")
+public class ImplDao_fjd_near implements IDao_data {
+
+    String database_name;
+    String dao_type = "fjd_near";
+
+    @Override
+    public void Initialize(String database_name) {
+
+        this.database_name = database_name;
+    }
+
+    @Override
+    public String GetName() {
+        return this.dao_type;
+    }
+
+    @Override
+    public List<DoubleTimeObject> GetDataListGteLte(JSONObject dao_key, String time_period, Date time_from, Date time_to, boolean GteLte)
+            throws Exception {
+        List<DoubleTimeObject> result = null;
+
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
+        String building = (String) dao_key.get("building");
+        String meter = (String) dao_key.get("meter");
+        long funcid = FastJsonUtil.getLong(dao_key, "funcid");
+        result = QueryUtil_fjd.get_fjd_merge(this.database_name, building, meter, funcid, time_period, sdf.format(time_from),
+                sdf.format(time_to), GteLte, false);
+
+        return result;
+    }
+
+    public List<DoubleTimeObject_fjd_near> GetDataListGteLte_fjd_near(JSONObject dao_key, String time_period, Date time_from, Date time_to,
+                                                                      boolean GteLte) throws Exception {
+        List<DoubleTimeObject_fjd_near> result = new ArrayList<DoubleTimeObject_fjd_near>();
+
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
+        String building = (String) dao_key.get("building");
+        String meter = (String) dao_key.get("meter");
+        long funcid = FastJsonUtil.getLong(dao_key, "funcid");
+        List<DoubleTimeObject> dataList = QueryUtil_fjd.get_fjd_merge(this.database_name, building, meter, funcid, time_period,
+                sdf.format(time_from), sdf.format(time_to), GteLte, true);
+        for (DoubleTimeObject data : dataList) {
+            result.add((DoubleTimeObject_fjd_near) data);
+        }
+
+        return result;
+    }
+
+    @Override
+    public void DeleteDataListGteLte(JSONObject dao_key, String time_period, Date time_from, Date time_to) throws Exception {
+    }
+
+    @Override
+    public void InsertDataListGteLte(JSONObject dao_key, String time_period, List<DoubleTimeObject> outputDataList) throws Exception {
+    }
+
+    public void DeleteDataListGteLte_fjd_1(JSONObject dao_key, String time_period, Date time_from, Date time_to) throws Exception {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
+
+        String building = (String) dao_key.get("building");
+        String meter = (String) dao_key.get("meter");
+        long funcid = FastJsonUtil.getLong(dao_key, "funcid");
+
+        JSONObject Criteria = new JSONObject();
+        Criteria.put("building", building);
+        Criteria.put("meter", meter);
+        Criteria.put("funcid", funcid);
+        JSONObject range = new JSONObject();
+        range.put("$gte", sdf.format(time_from));
+        range.put("$lte", sdf.format(time_to));
+        Criteria.put("data_time", range);
+        String table_name_query;
+        table_name_query = "fjd_1_near" + "_" + time_period;
+        QueryUtil.delete(database_name, table_name_query, Criteria);
+    }
+
+    public void InsertDataListGteLte_fjd_1(JSONObject dao_key, String time_period, List<DoubleTimeObject_fjd_near> outputDataList) throws Exception {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
+
+        String building = (String) dao_key.get("building");
+        String meter = (String) dao_key.get("meter");
+        long funcid = FastJsonUtil.getLong(dao_key, "funcid");
+
+        JSONArray InsertObjects = new JSONArray();
+        for (DoubleTimeObject_fjd_near data : outputDataList) {
+            JSONObject InsertObject = new JSONObject();
+            InsertObject.put("building", building);
+            InsertObject.put("meter", meter);
+            InsertObject.put("funcid", funcid);
+            InsertObject.put("data_time", sdf.format(data.data_time));
+            InsertObject.put("data_value", data.data_value);
+            InsertObject.put("data_flag", data.data_flag);
+            InsertObjects.add(InsertObject);
+        }
+        String table_name_query;
+        table_name_query = "fjd_1_near" + "_" + time_period;
+        QueryUtil.batch_insert(database_name, table_name_query, InsertObjects);
+    }
+}

+ 191 - 0
src/main/java/com/sagacloud/extend/dao_data/ImplDao_fjd_statinst.java

@@ -0,0 +1,191 @@
+package com.sagacloud.extend.dao_data;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.sagacloud.util.compute_engine.core.AnnotationDescription;
+import com.sagacloud.util.compute_engine.core.IDao_data;
+import com.sagacloud.util.compute_engine.util.ConstantCE;
+import com.sagacloud.util.compute_engine.util.DoubleTimeObject;
+import com.sagacloud.util.compute_engine.util.DoubleTimeObject_statinst;
+import com.sagacloud.util.compute_engine.util.QueryUtil;
+import org.zillion.util.json.FastJsonUtil;
+
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+@AnnotationDescription(value = "dao_data")
+public class ImplDao_fjd_statinst implements IDao_data {
+
+    String database_name;
+    String table_name;
+    String dao_type = "fjd_statinst";
+
+    @Override
+    public void Initialize(String database_name) {
+
+        this.database_name = database_name;
+        this.table_name = "fjd_statinst";
+    }
+
+    @Override
+    public String GetName() {
+        return this.dao_type;
+    }
+
+    @Override
+    public List<DoubleTimeObject> GetDataListGteLte(JSONObject dao_key, String time_period, Date time_from, Date time_to, boolean GteLte)
+            throws Exception {
+        List<DoubleTimeObject> result = null;
+
+        return result;
+    }
+
+    @Override
+    public void DeleteDataListGteLte(JSONObject dao_key, String time_period, Date time_from, Date time_to) throws Exception {
+    }
+
+    @Override
+    public void InsertDataListGteLte(JSONObject dao_key, String time_period, List<DoubleTimeObject> outputDataList) throws Exception {
+    }
+
+    public List<DoubleTimeObject_statinst> GetDataListGteLte_statinst(JSONObject dao_key, String time_period, Date time_from, Date time_to,
+                                                                      boolean GteLte) throws Exception {
+        List<DoubleTimeObject_statinst> result = null;
+
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
+        String building = (String) dao_key.get("building");
+        String meter = (String) dao_key.get("meter");
+        long funcid = FastJsonUtil.getLong(dao_key, "funcid");
+
+        JSONObject Criteria = new JSONObject();
+        Criteria.put("building", building);
+        Criteria.put("meter", meter);
+        Criteria.put("funcid", funcid);
+        if (ConstantCE.time_period_seperate) {
+            //
+        } else {
+            Criteria.put("time_period", time_period);
+        }
+        JSONObject range = new JSONObject();
+        range.put("$gte", sdf.format(time_from));
+        if (GteLte) {
+            range.put("$lte", sdf.format(time_to));
+        } else {
+            range.put("$lt", sdf.format(time_to));
+        }
+        Criteria.put("data_time", range);
+        String table_name_query;
+        if (ConstantCE.time_period_seperate) {
+            table_name_query = table_name + "_" + time_period;
+        } else {
+            table_name_query = table_name;
+        }
+        JSONArray resultContent = QueryUtil.select(database_name, table_name_query, Criteria);
+        List<DoubleTimeObject_statinst> dataList = new ArrayList<DoubleTimeObject_statinst>();
+        for (int ii = 0; ii < resultContent.size(); ii++) {
+            JSONObject computelog = (JSONObject) resultContent.get(ii);
+            DoubleTimeObject_statinst data = new DoubleTimeObject_statinst();
+            data.data_time = sdf.parse((String) computelog.get("data_time"));
+            data.data_flag = (Long) computelog.get("data_flag");
+            data.data_count = (Long) computelog.get("data_count");
+            data.data_avg = (Double) computelog.get("data_avg");
+            data.data_max = (Double) computelog.get("data_max");
+            data.time_max = (String) computelog.get("time_max");
+            data.data_min = (Double) computelog.get("data_min");
+            data.time_min = (String) computelog.get("time_min");
+            dataList.add(data);
+        }
+        result = dataList;
+
+        return result;
+    }
+
+    public void InsertDataListGteLte_statinst(JSONObject dao_key, String time_period, List<DoubleTimeObject_statinst> outputDataList)
+            throws Exception {
+        if (ConstantCE.time_period_seperate_save_two || !ConstantCE.time_period_seperate) {
+            this.InsertDataListGteLte_statinst(false, dao_key, time_period, outputDataList);
+        }
+        if (ConstantCE.time_period_seperate_save_two || ConstantCE.time_period_seperate) {
+            this.InsertDataListGteLte_statinst(true, dao_key, time_period, outputDataList);
+        }
+    }
+
+    public void DeleteDataListGteLte_statinst(JSONObject dao_key, String time_period, Date time_from, Date time_to) throws Exception {
+        if (ConstantCE.time_period_seperate_save_two || !ConstantCE.time_period_seperate) {
+            this.DeleteDataListGteLte_statinst(false, dao_key, time_period, time_from, time_to);
+        }
+        if (ConstantCE.time_period_seperate_save_two || ConstantCE.time_period_seperate) {
+            this.DeleteDataListGteLte_statinst(true, dao_key, time_period, time_from, time_to);
+        }
+    }
+
+    private void DeleteDataListGteLte_statinst(boolean time_period_seperate, JSONObject dao_key, String time_period, Date time_from, Date time_to)
+            throws Exception {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
+
+        String building = (String) dao_key.get("building");
+        String meter = (String) dao_key.get("meter");
+        long funcid = FastJsonUtil.getLong(dao_key, "funcid");
+
+        JSONObject Criteria = new JSONObject();
+        Criteria.put("building", building);
+        Criteria.put("meter", meter);
+        Criteria.put("funcid", funcid);
+        if (time_period_seperate) {
+            //
+        } else {
+            Criteria.put("time_period", time_period);
+        }
+        JSONObject range = new JSONObject();
+        range.put("$gte", sdf.format(time_from));
+        range.put("$lte", sdf.format(time_to));
+        Criteria.put("data_time", range);
+        String table_name_query;
+        if (time_period_seperate) {
+            table_name_query = table_name + "_" + time_period;
+        } else {
+            table_name_query = table_name;
+        }
+        QueryUtil.delete(database_name, table_name_query, Criteria);
+    }
+
+    private void InsertDataListGteLte_statinst(boolean time_period_seperate, JSONObject dao_key, String time_period,
+                                               List<DoubleTimeObject_statinst> outputDataList) throws Exception {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
+
+        String building = (String) dao_key.get("building");
+        String meter = (String) dao_key.get("meter");
+        long funcid = FastJsonUtil.getLong(dao_key, "funcid");
+
+        JSONArray InsertObjects = new JSONArray();
+        for (DoubleTimeObject_statinst data : outputDataList) {
+            JSONObject InsertObject = new JSONObject();
+            InsertObject.put("building", building);
+            InsertObject.put("meter", meter);
+            InsertObject.put("funcid", funcid);
+            if (time_period_seperate) {
+                //
+            } else {
+                InsertObject.put("time_period", time_period);
+            }
+            InsertObject.put("data_time", sdf.format(data.data_time));
+            InsertObject.put("data_flag", data.data_flag);
+            InsertObject.put("data_count", data.data_count);
+            InsertObject.put("data_avg", data.data_avg);
+            InsertObject.put("data_max", data.data_max);
+            InsertObject.put("time_max", data.time_max);
+            InsertObject.put("data_min", data.data_min);
+            InsertObject.put("time_min", data.time_min);
+            InsertObjects.add(InsertObject);
+        }
+        String table_name_query;
+        if (time_period_seperate) {
+            table_name_query = table_name + "_" + time_period;
+        } else {
+            table_name_query = table_name;
+        }
+        QueryUtil.batch_insert(database_name, table_name_query, InsertObjects);
+    }
+}

+ 157 - 0
src/main/java/com/sagacloud/extend/dao_data/ImplDao_objectdata.java

@@ -0,0 +1,157 @@
+package com.sagacloud.extend.dao_data;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.sagacloud.util.compute_engine.core.AnnotationDescription;
+import com.sagacloud.util.compute_engine.core.IDao_data;
+import com.sagacloud.util.compute_engine.util.ConstantCE;
+import com.sagacloud.util.compute_engine.util.DoubleTimeObject;
+import com.sagacloud.util.compute_engine.util.QueryUtil;
+
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+@AnnotationDescription(value = "dao_data")
+public class ImplDao_objectdata implements IDao_data {
+
+    String database_name;
+    String table_name;
+    String dao_type = "objectdata";
+
+    @Override
+    public void Initialize(String database_name) {
+
+        this.database_name = database_name;
+        this.table_name = "data_" + dao_type;
+    }
+
+    @Override
+    public String GetName() {
+        return this.dao_type;
+    }
+
+    @Override
+    public List<DoubleTimeObject> GetDataListGteLte(JSONObject dao_key, String time_period, Date time_from, Date time_to, boolean GteLte)
+            throws Exception {
+        List<DoubleTimeObject> result = null;
+
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
+        String building = (String) dao_key.get("building");
+        String objectSign = (String) dao_key.get("objectSign");
+
+        JSONObject Criteria = new JSONObject();
+        Criteria.put("building", building);
+        Criteria.put("objectSign", objectSign);
+        if (ConstantCE.time_period_seperate) {
+            //
+        } else {
+            Criteria.put("time_period", time_period);
+        }
+        JSONObject range = new JSONObject();
+        range.put("$gte", sdf.format(time_from));
+        if (GteLte) {
+            range.put("$lte", sdf.format(time_to));
+        } else {
+            range.put("$lt", sdf.format(time_to));
+        }
+        Criteria.put("data_time", range);
+        String table_name_query;
+        if (ConstantCE.time_period_seperate) {
+            table_name_query = table_name + "_" + time_period;
+        } else {
+            table_name_query = table_name;
+        }
+        JSONArray resultContent = QueryUtil.select(database_name, table_name_query, Criteria);
+        List<DoubleTimeObject> dataList = new ArrayList<DoubleTimeObject>();
+        for (int ii = 0; ii < resultContent.size(); ii++) {
+            JSONObject computelog = (JSONObject) resultContent.get(ii);
+            DoubleTimeObject data = new DoubleTimeObject();
+            data.data_time = sdf.parse((String) computelog.get("data_time"));
+            data.data_value = (Double) computelog.get("data_value");
+            dataList.add(data);
+        }
+        result = dataList;
+
+        return result;
+    }
+
+    @Override
+    public void InsertDataListGteLte(JSONObject dao_key, String time_period, List<DoubleTimeObject> outputDataList) throws Exception {
+        if (ConstantCE.time_period_seperate_save_two || !ConstantCE.time_period_seperate) {
+            this.InsertDataListGteLte(false, dao_key, time_period, outputDataList);
+        }
+        if (ConstantCE.time_period_seperate_save_two || ConstantCE.time_period_seperate) {
+            this.InsertDataListGteLte(true, dao_key, time_period, outputDataList);
+        }
+    }
+
+    @Override
+    public void DeleteDataListGteLte(JSONObject dao_key, String time_period, Date time_from, Date time_to) throws Exception {
+        if (ConstantCE.time_period_seperate_save_two || !ConstantCE.time_period_seperate) {
+            this.DeleteDataListGteLte(false, dao_key, time_period, time_from, time_to);
+        }
+        if (ConstantCE.time_period_seperate_save_two || ConstantCE.time_period_seperate) {
+            this.DeleteDataListGteLte(true, dao_key, time_period, time_from, time_to);
+        }
+    }
+
+    private void DeleteDataListGteLte(boolean time_period_seperate, JSONObject dao_key, String time_period, Date time_from, Date time_to)
+            throws Exception {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
+
+        String building = (String) dao_key.get("building");
+        String objectSign = (String) dao_key.get("objectSign");
+
+        JSONObject Criteria = new JSONObject();
+        Criteria.put("building", building);
+        Criteria.put("objectSign", objectSign);
+        if (time_period_seperate) {
+            //
+        } else {
+            Criteria.put("time_period", time_period);
+        }
+        JSONObject range = new JSONObject();
+        range.put("$gte", sdf.format(time_from));
+        range.put("$lte", sdf.format(time_to));
+        Criteria.put("data_time", range);
+        String table_name_query;
+        if (time_period_seperate) {
+            table_name_query = table_name + "_" + time_period;
+        } else {
+            table_name_query = table_name;
+        }
+        QueryUtil.delete(database_name, table_name_query, Criteria);
+    }
+
+    private void InsertDataListGteLte(boolean time_period_seperate, JSONObject dao_key, String time_period, List<DoubleTimeObject> outputDataList)
+            throws Exception {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
+
+        String building = (String) dao_key.get("building");
+        String objectSign = (String) dao_key.get("objectSign");
+
+        JSONArray InsertObjects = new JSONArray();
+        for (DoubleTimeObject data : outputDataList) {
+            JSONObject InsertObject = new JSONObject();
+            InsertObject.put("building", building);
+            InsertObject.put("objectSign", objectSign);
+            if (time_period_seperate) {
+                //
+            } else {
+                InsertObject.put("time_period", time_period);
+            }
+            InsertObject.put("data_time", sdf.format(data.data_time));
+            InsertObject.put("data_value", data.data_value);
+            InsertObjects.add(InsertObject);
+        }
+        String table_name_query;
+        if (time_period_seperate) {
+            table_name_query = table_name + "_" + time_period;
+        } else {
+            table_name_query = table_name;
+        }
+        QueryUtil.batch_insert(database_name, table_name_query, InsertObjects);
+    }
+}

+ 99 - 0
src/main/java/com/sagacloud/extend/dao_data/ImplDao_ori.java

@@ -0,0 +1,99 @@
+package com.sagacloud.extend.dao_data;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.sagacloud.util.compute_engine.core.AnnotationDescription;
+import com.sagacloud.util.compute_engine.core.IDao_data;
+import com.sagacloud.util.compute_engine.entity.Entity_originaldata;
+import com.sagacloud.util.compute_engine.util.ConstantCE;
+import com.sagacloud.util.compute_engine.util.DoubleTimeObject;
+import com.sagacloud.util.compute_engine.util.QueryUtil;
+import org.zillion.util.json.FastJsonUtil;
+
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+@AnnotationDescription(value = "dao_data")
+public class ImplDao_ori implements IDao_data {
+    String database_name;
+    String table_name;
+    String dao_type = "ori";
+
+    Map<String, Map<String, Entity_originaldata>> presentMapMap = new HashMap<String, Map<String, Entity_originaldata>>();
+
+    public void SetPresent(String building, Map<String, Entity_originaldata> presentMap) {
+        presentMapMap.put(building, presentMap);
+    }
+
+    @Override
+    public void Initialize(String database_name) {
+        this.database_name = database_name;
+        this.table_name = "original_month";
+    }
+
+    @Override
+    public String GetName() {
+        return this.dao_type;
+    }
+
+    @Override
+    public List<DoubleTimeObject> GetDataListGteLte(JSONObject dao_key, String time_period, Date time_from, Date time_to, boolean GteLte)
+            throws Exception {
+        List<DoubleTimeObject> result = null;
+
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
+        String building = (String) dao_key.get("building");
+        String meter = (String) dao_key.get("meter");
+        long funcid = FastJsonUtil.getLong(dao_key, "funcid");
+        long ori_funcid = funcid;
+        if (ConstantCE.use_original_funcidMap && ConstantCE.original_funcidMap.containsKey(funcid)) {
+            ori_funcid = ConstantCE.original_funcidMap.get(funcid);
+        }
+
+        String table_name_real = table_name;
+        if (this.presentMapMap.containsKey(building)) {
+            Map<String, Entity_originaldata> presentMap = this.presentMapMap.get(building);
+            String mf = meter + "_" + ori_funcid;
+            if (presentMap.containsKey(mf)) {
+                Entity_originaldata Entity_originaldata = presentMap.get(mf);
+                Boolean gaopin = Entity_originaldata.getGaopin();
+                if (gaopin != null && gaopin.booleanValue()) {
+                    table_name_real = "original_day";
+                }
+            }
+        }
+
+        JSONObject Criteria = new JSONObject();
+        Criteria.put("building", building);
+        Criteria.put("meter", meter);
+        Criteria.put("funcid", ori_funcid);
+        JSONObject range = new JSONObject();
+        range.put("$gte", sdf.format(time_from));
+        if (GteLte) {
+            range.put("$lte", sdf.format(time_to));
+        } else {
+            range.put("$lt", sdf.format(time_to));
+        }
+        Criteria.put("receivetime", range);
+        JSONArray resultContent = QueryUtil.select(database_name, table_name_real, Criteria);
+        List<DoubleTimeObject> dataList = new ArrayList<DoubleTimeObject>();
+        for (int ii = 0; ii < resultContent.size(); ii++) {
+            JSONObject computelog = (JSONObject) resultContent.get(ii);
+            DoubleTimeObject data = new DoubleTimeObject();
+            data.data_time = sdf.parse((String) computelog.get("receivetime"));
+            data.data_value = (Double) computelog.get("data");
+            dataList.add(data);
+        }
+        result = dataList;
+
+        return result;
+    }
+
+    @Override
+    public void DeleteDataListGteLte(JSONObject dao_key, String time_period, Date time_from, Date time_to) throws Exception {
+    }
+
+    @Override
+    public void InsertDataListGteLte(JSONObject dao_key, String time_period, List<DoubleTimeObject> outputDataList) throws Exception {
+    }
+}

+ 84 - 0
src/main/java/com/sagacloud/extend/dao_data/ImplDao_ori_flag.java

@@ -0,0 +1,84 @@
+package com.sagacloud.extend.dao_data;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.sagacloud.util.compute_engine.core.AnnotationDescription;
+import com.sagacloud.util.compute_engine.core.IDao_data;
+import com.sagacloud.util.compute_engine.util.DoubleTimeObject;
+import com.sagacloud.util.compute_engine.util.QueryUtil;
+import org.zillion.util.json.FastJsonUtil;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.List;
+
+@AnnotationDescription(value = "dao_data")
+public class ImplDao_ori_flag implements IDao_data {
+
+    String database_name;
+    String table_name;
+    String dao_type = "ori_flag";
+
+    @Override
+    public void Initialize(String database_name) {
+
+        this.database_name = database_name;
+        this.table_name = "original_flag";
+    }
+
+    @Override
+    public String GetName() {
+        return this.dao_type;
+    }
+
+    @Override
+    public List<DoubleTimeObject> GetDataListGteLte(JSONObject dao_key, String time_period, Date time_from, Date time_to, boolean GteLte)
+            throws Exception {
+        List<DoubleTimeObject> result = null;
+
+        return result;
+    }
+
+    @Override
+    public void DeleteDataListGteLte(JSONObject dao_key, String time_period, Date time_from, Date time_to) throws Exception {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
+
+        String building = (String) dao_key.get("building");
+        String meter = (String) dao_key.get("meter");
+        long funcid = FastJsonUtil.getLong(dao_key, "funcid");
+
+        JSONObject Criteria = new JSONObject();
+        Criteria.put("building", building);
+        Criteria.put("meter", meter);
+        Criteria.put("funcid", funcid);
+        JSONObject range = new JSONObject();
+        range.put("$gte", sdf.format(time_from));
+        range.put("$lte", sdf.format(time_to));
+        Criteria.put("data_time", range);
+        String table_name_query = table_name;
+        QueryUtil.delete(database_name, table_name_query, Criteria);
+    }
+
+    @Override
+    public void InsertDataListGteLte(JSONObject dao_key, String time_period, List<DoubleTimeObject> outputDataList) throws Exception {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
+
+        String building = (String) dao_key.get("building");
+        String meter = (String) dao_key.get("meter");
+        long funcid = FastJsonUtil.getLong(dao_key, "funcid");
+
+        JSONArray InsertObjects = new JSONArray();
+        for (DoubleTimeObject data : outputDataList) {
+            JSONObject InsertObject = new JSONObject();
+            InsertObject.put("building", building);
+            InsertObject.put("meter", meter);
+            InsertObject.put("funcid", funcid);
+            InsertObject.put("data_time", sdf.format(data.data_time));
+            InsertObject.put("data_value", data.data_value);
+            InsertObject.put("data_flag", 4L);
+            InsertObjects.add(InsertObject);
+        }
+        String table_name_query = table_name;
+        QueryUtil.batch_insert(database_name, table_name_query, InsertObjects);
+    }
+}

+ 189 - 0
src/main/java/com/sagacloud/extend/dao_data/ImplDao_report.java

@@ -0,0 +1,189 @@
+package com.sagacloud.extend.dao_data;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.sagacloud.util.compute_engine.core.AnnotationDescription;
+import com.sagacloud.util.compute_engine.core.IDao_data;
+import com.sagacloud.util.compute_engine.util.DoubleTimeObject;
+import com.sagacloud.util.compute_engine.util.DoubleTimeObject_reportenergy;
+import com.sagacloud.util.compute_engine.util.QueryUtil;
+import org.zillion.util.json.FastJsonUtil;
+
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+@AnnotationDescription(value = "dao_data")
+public class ImplDao_report implements IDao_data {
+
+    String database_name;
+    String table_name;
+    String dao_type = "report";
+
+    @Override
+    public void Initialize(String database_name) {
+
+        this.database_name = database_name;
+        this.table_name = "originalreport_data";
+    }
+
+    @Override
+    public String GetName() {
+        return this.dao_type;
+    }
+
+    @Override
+    public List<DoubleTimeObject> GetDataListGteLte(JSONObject dao_key, String time_period, Date time_from, Date time_to, boolean GteLte)
+            throws Exception {
+        return null;
+    }
+
+    @Override
+    public void DeleteDataListGteLte(JSONObject dao_key, String time_period, Date time_from, Date time_to) throws Exception {
+    }
+
+    @Override
+    public void InsertDataListGteLte(JSONObject dao_key, String time_period, List<DoubleTimeObject> outputDataList) throws Exception {
+    }
+
+    public List<DoubleTimeObject_reportenergy> energy_GteLte(JSONObject dao_key, Date time_from, Date time_to, boolean GteLte) throws Exception {
+        String data_type = "energy";
+        List<DoubleTimeObject_reportenergy> result = null;
+
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
+        String building = (String) dao_key.get("building");
+        String meter = (String) dao_key.get("meter");
+        long funcid = FastJsonUtil.getLong(dao_key, "funcid");
+
+        JSONObject Criteria = new JSONObject();
+        Criteria.put("building", building);
+        Criteria.put("meter", meter);
+        Criteria.put("funcid", funcid);
+        Criteria.put("data_type", data_type);
+        JSONObject range = new JSONObject();
+        range.put("$gte", sdf.format(time_from));
+        if (GteLte) {
+            range.put("$lte", sdf.format(time_to));
+        } else {
+            range.put("$lt", sdf.format(time_to));
+        }
+        Criteria.put("receivetime", range);
+        JSONArray resultContent = QueryUtil.select(database_name, table_name, Criteria);
+        List<DoubleTimeObject_reportenergy> dataList = new ArrayList<DoubleTimeObject_reportenergy>();
+        for (int ii = 0; ii < resultContent.size(); ii++) {
+            JSONObject computelog = (JSONObject) resultContent.get(ii);
+            DoubleTimeObject_reportenergy data = new DoubleTimeObject_reportenergy();
+            data.time_from = sdf.parse((String) computelog.get("time_from"));
+            data.time_to = sdf.parse((String) computelog.get("time_to"));
+            data.data = (Double) computelog.get("data");
+            dataList.add(data);
+        }
+        result = dataList;
+
+        return result;
+    }
+
+    public List<DoubleTimeObject> read_data_GteLte(JSONObject dao_key, Date time_from, Date time_to, boolean GteLte) throws Exception {
+        String data_type = "read_data";
+        List<DoubleTimeObject> result = null;
+
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
+        String building = (String) dao_key.get("building");
+        String meter = (String) dao_key.get("meter");
+        long funcid = FastJsonUtil.getLong(dao_key, "funcid");
+
+        JSONObject Criteria = new JSONObject();
+        Criteria.put("building", building);
+        Criteria.put("meter", meter);
+        Criteria.put("funcid", funcid);
+        Criteria.put("data_type", data_type);
+        JSONObject range = new JSONObject();
+        range.put("$gte", sdf.format(time_from));
+        if (GteLte) {
+            range.put("$lte", sdf.format(time_to));
+        } else {
+            range.put("$lt", sdf.format(time_to));
+        }
+        Criteria.put("receivetime", range);
+        JSONArray resultContent = QueryUtil.select(database_name, table_name, Criteria);
+        List<DoubleTimeObject> dataList = new ArrayList<DoubleTimeObject>();
+        for (int ii = 0; ii < resultContent.size(); ii++) {
+            JSONObject computelog = (JSONObject) resultContent.get(ii);
+            DoubleTimeObject data = new DoubleTimeObject();
+            data.data_time = sdf.parse((String) computelog.get("receivetime"));
+            data.data_value = (Double) computelog.get("data");
+            dataList.add(data);
+        }
+        result = dataList;
+
+        return result;
+    }
+
+    public DoubleTimeObject read_data_last(JSONObject dao_key, Date time) throws Exception {
+        String data_type = "read_data";
+        DoubleTimeObject result = null;
+
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
+        String building = (String) dao_key.get("building");
+        String meter = (String) dao_key.get("meter");
+        long funcid = FastJsonUtil.getLong(dao_key, "funcid");
+
+        JSONObject Criteria = new JSONObject();
+        Criteria.put("building", building);
+        Criteria.put("meter", meter);
+        Criteria.put("funcid", funcid);
+        Criteria.put("data_type", data_type);
+        JSONObject range = new JSONObject();
+        range.put("$lt", sdf.format(time));
+        Criteria.put("receivetime", range);
+        JSONArray OrderBy = new JSONArray();
+        OrderBy.add(QueryUtil.OrderByItem("building", true));
+        OrderBy.add(QueryUtil.OrderByItem("meter", true));
+        OrderBy.add(QueryUtil.OrderByItem("funcid", true));
+        OrderBy.add(QueryUtil.OrderByItem("receivetime", false));
+        JSONObject Limit = new JSONObject();
+        Limit.put("Skip", 0L);
+        Limit.put("Count", 1L);
+        JSONArray resultContent = QueryUtil.select(database_name, table_name, Criteria, OrderBy, Limit);
+        if (resultContent.size() > 0) {
+            JSONObject computelog = (JSONObject) resultContent.get(0);
+            result = new DoubleTimeObject();
+            result.data_time = sdf.parse((String) computelog.get("receivetime"));
+            result.data_value = (Double) computelog.get("data");
+        }
+
+        return result;
+    }
+
+    public DoubleTimeObject read_data_next(JSONObject dao_key, Date time) throws Exception {
+        String data_type = "read_data";
+        DoubleTimeObject result = null;
+
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
+        String building = (String) dao_key.get("building");
+        String meter = (String) dao_key.get("meter");
+        long funcid = FastJsonUtil.getLong(dao_key, "funcid");
+
+        JSONObject Criteria = new JSONObject();
+        Criteria.put("building", building);
+        Criteria.put("meter", meter);
+        Criteria.put("funcid", funcid);
+        Criteria.put("data_type", data_type);
+        JSONObject range = new JSONObject();
+        range.put("$gt", sdf.format(time));
+        Criteria.put("receivetime", range);
+        JSONObject Limit = new JSONObject();
+        Limit.put("Skip", 0L);
+        Limit.put("Count", 1L);
+        JSONArray resultContent = QueryUtil.select(database_name, table_name, Criteria, null, Limit);
+        if (resultContent.size() > 0) {
+            JSONObject computelog = (JSONObject) resultContent.get(0);
+            result = new DoubleTimeObject();
+            result.data_time = sdf.parse((String) computelog.get("receivetime"));
+            result.data_value = (Double) computelog.get("data");
+        }
+
+        return result;
+    }
+}

+ 143 - 0
src/main/java/com/sagacloud/extend/dao_data/ImplDao_report_change_meter.java

@@ -0,0 +1,143 @@
+package com.sagacloud.extend.dao_data;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.sagacloud.util.compute_engine.core.AnnotationDescription;
+import com.sagacloud.util.compute_engine.core.IDao_data;
+import com.sagacloud.util.compute_engine.util.DoubleTimeObject;
+import com.sagacloud.util.compute_engine.util.DoubleTimeObject_change;
+import com.sagacloud.util.compute_engine.util.QueryUtil;
+import org.zillion.util.json.FastJsonUtil;
+
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+@AnnotationDescription(value = "dao_data")
+public class ImplDao_report_change_meter implements IDao_data {
+
+    String database_name;
+    String table_name;
+    String dao_type = "report_change_meter";
+
+    @Override
+    public void Initialize(String database_name) {
+
+        this.database_name = database_name;
+        this.table_name = "originalreport_change_meter";
+    }
+
+    @Override
+    public String GetName() {
+        return this.dao_type;
+    }
+
+    @Override
+    public List<DoubleTimeObject> GetDataListGteLte(JSONObject dao_key, String time_period, Date time_from, Date time_to, boolean GteLte)
+            throws Exception {
+        return null;
+    }
+
+    @Override
+    public void DeleteDataListGteLte(JSONObject dao_key, String time_period, Date time_from, Date time_to) throws Exception {
+    }
+
+    @Override
+    public void InsertDataListGteLte(JSONObject dao_key, String time_period, List<DoubleTimeObject> outputDataList) throws Exception {
+    }
+
+    public List<DoubleTimeObject_change> GetDataList(JSONObject dao_key, Date time_from, Date time_to) throws Exception {
+        List<DoubleTimeObject_change> result = new ArrayList<DoubleTimeObject_change>();
+
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
+        String building = (String) dao_key.get("building");
+        String meter = (String) dao_key.get("meter");
+        long funcid = FastJsonUtil.getLong(dao_key, "funcid");
+
+        JSONObject Criteria = new JSONObject();
+        Criteria.put("building", building);
+        Criteria.put("meter", meter);
+        Criteria.put("funcid", funcid);
+        JSONObject range = new JSONObject();
+        range.put("$gte", sdf.format(time_from));
+        range.put("$lte", sdf.format(time_to));
+        Criteria.put("receivetime", range);
+        JSONArray resultContent = QueryUtil.select(database_name, table_name, Criteria);
+        for (int ii = 0; ii < resultContent.size(); ii++) {
+            JSONObject computelog = (JSONObject) resultContent.get(ii);
+            DoubleTimeObject_change entity = new DoubleTimeObject_change();
+            entity.data_time = sdf.parse((String) computelog.get("receivetime"));
+            entity.data_value = (Double) computelog.get("data_new");
+            entity.data_old = (Double) computelog.get("data_old");
+            result.add(entity);
+        }
+
+        return result;
+    }
+
+    public DoubleTimeObject_change GetData_next(JSONObject dao_key, Date time) throws Exception {
+        DoubleTimeObject_change result = null;
+
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
+        String building = (String) dao_key.get("building");
+        String meter = (String) dao_key.get("meter");
+        long funcid = FastJsonUtil.getLong(dao_key, "funcid");
+
+        JSONObject Criteria = new JSONObject();
+        Criteria.put("building", building);
+        Criteria.put("meter", meter);
+        Criteria.put("funcid", funcid);
+        JSONObject range = new JSONObject();
+        range.put("$gt", sdf.format(time));
+        Criteria.put("receivetime", range);
+        JSONObject Limit = new JSONObject();
+        Limit.put("Skip", 0L);
+        Limit.put("Count", 1L);
+        JSONArray resultContent = QueryUtil.select(database_name, table_name, Criteria, null, Limit);
+        if (resultContent.size() > 0) {
+            JSONObject computelog = (JSONObject) resultContent.get(0);
+            result = new DoubleTimeObject_change();
+            result.data_time = sdf.parse((String) computelog.get("receivetime"));
+            result.data_value = (Double) computelog.get("data_new");
+            result.data_old = (Double) computelog.get("data_old");
+        }
+
+        return result;
+    }
+
+    public DoubleTimeObject_change GetData_last(JSONObject dao_key, Date time) throws Exception {
+        DoubleTimeObject_change result = null;
+
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
+        String building = (String) dao_key.get("building");
+        String meter = (String) dao_key.get("meter");
+        long funcid = FastJsonUtil.getLong(dao_key, "funcid");
+
+        JSONObject Criteria = new JSONObject();
+        Criteria.put("building", building);
+        Criteria.put("meter", meter);
+        Criteria.put("funcid", funcid);
+        JSONObject range = new JSONObject();
+        range.put("$lt", sdf.format(time));
+        Criteria.put("receivetime", range);
+        JSONArray OrderBy = new JSONArray();
+        OrderBy.add(QueryUtil.OrderByItem("building", true));
+        OrderBy.add(QueryUtil.OrderByItem("meter", true));
+        OrderBy.add(QueryUtil.OrderByItem("funcid", true));
+        OrderBy.add(QueryUtil.OrderByItem("receivetime", false));
+        JSONObject Limit = new JSONObject();
+        Limit.put("Skip", 0L);
+        Limit.put("Count", 1L);
+        JSONArray resultContent = QueryUtil.select(database_name, table_name, Criteria, null, Limit);
+        if (resultContent.size() > 0) {
+            JSONObject computelog = (JSONObject) resultContent.get(0);
+            result = new DoubleTimeObject_change();
+            result.data_time = sdf.parse((String) computelog.get("receivetime"));
+            result.data_value = (Double) computelog.get("data_new");
+            result.data_old = (Double) computelog.get("data_old");
+        }
+
+        return result;
+    }
+}

+ 164 - 0
src/main/java/com/sagacloud/extend/dao_data/ImplDao_servicedata.java

@@ -0,0 +1,164 @@
+package com.sagacloud.extend.dao_data;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.sagacloud.util.compute_engine.core.AnnotationDescription;
+import com.sagacloud.util.compute_engine.core.IDao_data;
+import com.sagacloud.util.compute_engine.util.ConstantCE;
+import com.sagacloud.util.compute_engine.util.DoubleTimeObject;
+import com.sagacloud.util.compute_engine.util.QueryUtil;
+import org.zillion.util.json.FastJsonUtil;
+
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+@AnnotationDescription(value = "dao_data")
+public class ImplDao_servicedata implements IDao_data {
+
+    String database_name;
+    String table_name;
+    String dao_type = "servicedata";
+
+    @Override
+    public void Initialize(String database_name) {
+
+        this.database_name = database_name;
+        this.table_name = "data_" + dao_type;
+    }
+
+    @Override
+    public String GetName() {
+        return this.dao_type;
+    }
+
+    @Override
+    public List<DoubleTimeObject> GetDataListGteLte(JSONObject dao_key, String time_period, Date time_from, Date time_to, boolean GteLte)
+            throws Exception {
+        List<DoubleTimeObject> result = null;
+
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
+        String building = (String) dao_key.get("building");
+        String meter = (String) dao_key.get("meter");
+        long funcid = FastJsonUtil.getLong(dao_key, "funcid");
+
+        JSONObject Criteria = new JSONObject();
+        Criteria.put("building", building);
+        Criteria.put("meter", meter);
+        Criteria.put("funcid", funcid);
+        if (ConstantCE.time_period_seperate) {
+            //
+        } else {
+            Criteria.put("time_period", time_period);
+        }
+        JSONObject range = new JSONObject();
+        range.put("$gte", sdf.format(time_from));
+        if (GteLte) {
+            range.put("$lte", sdf.format(time_to));
+        } else {
+            range.put("$lt", sdf.format(time_to));
+        }
+        Criteria.put("data_time", range);
+        String table_name_query;
+        if (ConstantCE.time_period_seperate) {
+            table_name_query = table_name + "_" + time_period;
+        } else {
+            table_name_query = table_name;
+        }
+        JSONArray resultContent = QueryUtil.select(database_name, table_name_query, Criteria);
+        List<DoubleTimeObject> dataList = new ArrayList<DoubleTimeObject>();
+        for (int ii = 0; ii < resultContent.size(); ii++) {
+            JSONObject computelog = (JSONObject) resultContent.get(ii);
+            DoubleTimeObject data = new DoubleTimeObject();
+            data.data_time = sdf.parse((String) computelog.get("data_time"));
+            data.data_value = (Double) computelog.get("data_value");
+            dataList.add(data);
+        }
+        result = dataList;
+
+        return result;
+    }
+
+    @Override
+    public void InsertDataListGteLte(JSONObject dao_key, String time_period, List<DoubleTimeObject> outputDataList) throws Exception {
+        if (ConstantCE.time_period_seperate_save_two || !ConstantCE.time_period_seperate) {
+            this.InsertDataListGteLte(false, dao_key, time_period, outputDataList);
+        }
+        if (ConstantCE.time_period_seperate_save_two || ConstantCE.time_period_seperate) {
+            this.InsertDataListGteLte(true, dao_key, time_period, outputDataList);
+        }
+    }
+
+    @Override
+    public void DeleteDataListGteLte(JSONObject dao_key, String time_period, Date time_from, Date time_to) throws Exception {
+        if (ConstantCE.time_period_seperate_save_two || !ConstantCE.time_period_seperate) {
+            this.DeleteDataListGteLte(false, dao_key, time_period, time_from, time_to);
+        }
+        if (ConstantCE.time_period_seperate_save_two || ConstantCE.time_period_seperate) {
+            this.DeleteDataListGteLte(true, dao_key, time_period, time_from, time_to);
+        }
+    }
+
+    private void DeleteDataListGteLte(boolean time_period_seperate, JSONObject dao_key, String time_period, Date time_from, Date time_to)
+            throws Exception {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
+
+        String building = (String) dao_key.get("building");
+        String meter = (String) dao_key.get("meter");
+        long funcid = FastJsonUtil.getLong(dao_key, "funcid");
+
+        JSONObject Criteria = new JSONObject();
+        Criteria.put("building", building);
+        Criteria.put("meter", meter);
+        Criteria.put("funcid", funcid);
+        if (time_period_seperate) {
+            //
+        } else {
+            Criteria.put("time_period", time_period);
+        }
+        JSONObject range = new JSONObject();
+        range.put("$gte", sdf.format(time_from));
+        range.put("$lte", sdf.format(time_to));
+        Criteria.put("data_time", range);
+        String table_name_query;
+        if (time_period_seperate) {
+            table_name_query = table_name + "_" + time_period;
+        } else {
+            table_name_query = table_name;
+        }
+        QueryUtil.delete(database_name, table_name_query, Criteria);
+    }
+
+    private void InsertDataListGteLte(boolean time_period_seperate, JSONObject dao_key, String time_period, List<DoubleTimeObject> outputDataList)
+            throws Exception {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
+
+        String building = (String) dao_key.get("building");
+        String meter = (String) dao_key.get("meter");
+        long funcid = FastJsonUtil.getLong(dao_key, "funcid");
+
+        JSONArray InsertObjects = new JSONArray();
+        for (DoubleTimeObject data : outputDataList) {
+            JSONObject InsertObject = new JSONObject();
+            InsertObject.put("building", building);
+            InsertObject.put("meter", meter);
+            InsertObject.put("funcid", funcid);
+            if (time_period_seperate) {
+                //
+            } else {
+                InsertObject.put("time_period", time_period);
+            }
+            InsertObject.put("data_time", sdf.format(data.data_time));
+            InsertObject.put("data_value", data.data_value);
+            InsertObjects.add(InsertObject);
+        }
+        String table_name_query;
+        if (time_period_seperate) {
+            table_name_query = table_name + "_" + time_period;
+        } else {
+            table_name_query = table_name;
+        }
+        QueryUtil.batch_insert(database_name, table_name_query, InsertObjects);
+    }
+}

+ 312 - 0
src/main/java/com/sagacloud/extend/dao_data/ImplDao_tenantbalance.java

@@ -0,0 +1,312 @@
+package com.sagacloud.extend.dao_data;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.sagacloud.util.compute_engine.core.AnnotationDescription;
+import com.sagacloud.util.compute_engine.core.IDao_data;
+import com.sagacloud.util.compute_engine.util.ConstantCE;
+import com.sagacloud.util.compute_engine.util.DoubleTimeObject;
+import com.sagacloud.util.compute_engine.util.QueryUtil;
+
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+@AnnotationDescription(value = "dao_data")
+public class ImplDao_tenantbalance implements IDao_data {
+
+    String database_name;
+    String table_name;
+    String dao_type = "tenantbalance";
+
+    @Override
+    public void Initialize(String database_name) {
+
+        this.database_name = database_name;
+        this.table_name = "data_" + dao_type;
+    }
+
+    @Override
+    public String GetName() {
+        return this.dao_type;
+    }
+
+    @Override
+    public List<DoubleTimeObject> GetDataListGteLte(JSONObject dao_key, String time_period, Date time_from, Date time_to, boolean GteLte)
+            throws Exception {
+        List<DoubleTimeObject> result = null;
+
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
+        String building = (String) dao_key.get("building");
+        String tenant = (String) dao_key.get("tenant");
+        String energy_type = (String) dao_key.get("energy_type");
+
+        JSONObject Criteria = new JSONObject();
+        Criteria.put("building", building);
+        Criteria.put("tenant", tenant);
+        Criteria.put("energy_type", energy_type);
+        JSONObject range = new JSONObject();
+        range.put("$gte", sdf.format(time_from));
+        if (time_to != null) {
+            if (GteLte) {
+                range.put("$lte", sdf.format(time_to));
+            } else {
+                range.put("$lt", sdf.format(time_to));
+            }
+        }
+        Criteria.put("data_time", range);
+        String table_name_query = table_name;
+        JSONArray resultContent = QueryUtil.select(database_name, table_name_query, Criteria);
+        List<DoubleTimeObject> dataList = new ArrayList<DoubleTimeObject>();
+        for (int ii = 0; ii < resultContent.size(); ii++) {
+            JSONObject computelog = (JSONObject) resultContent.get(ii);
+            DoubleTimeObject data = new DoubleTimeObject();
+            data.data_time = sdf.parse((String) computelog.get("data_time"));
+            data.data_value = (Double) computelog.get("data_value");
+            dataList.add(data);
+        }
+        result = dataList;
+
+        return result;
+    }
+
+    @Override
+    public void InsertDataListGteLte(JSONObject dao_key, String time_period, List<DoubleTimeObject> outputDataList) throws Exception {
+        if (ConstantCE.time_period_seperate_save_two || !ConstantCE.time_period_seperate) {
+            this.InsertDataListGteLte(false, dao_key, time_period, outputDataList);
+        }
+        if (ConstantCE.time_period_seperate_save_two || ConstantCE.time_period_seperate) {
+            this.InsertDataListGteLte(true, dao_key, time_period, outputDataList);
+        }
+    }
+
+    @Override
+    public void DeleteDataListGteLte(JSONObject dao_key, String time_period, Date time_from, Date time_to) throws Exception {
+        if (ConstantCE.time_period_seperate_save_two || !ConstantCE.time_period_seperate) {
+            this.DeleteDataListGteLte(false, dao_key, time_period, time_from, time_to);
+        }
+        if (ConstantCE.time_period_seperate_save_two || ConstantCE.time_period_seperate) {
+            this.DeleteDataListGteLte(true, dao_key, time_period, time_from, time_to);
+        }
+    }
+
+    private void DeleteDataListGteLte(boolean time_period_seperate, JSONObject dao_key, String time_period, Date time_from, Date time_to)
+            throws Exception {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
+
+        String building = (String) dao_key.get("building");
+        String tenant = (String) dao_key.get("tenant");
+        String energy_type = (String) dao_key.get("energy_type");
+
+        JSONObject Criteria = new JSONObject();
+        Criteria.put("building", building);
+        Criteria.put("tenant", tenant);
+        Criteria.put("energy_type", energy_type);
+        JSONObject range = new JSONObject();
+        range.put("$gte", sdf.format(time_from));
+        if (time_to != null) {
+            range.put("$lte", sdf.format(time_to));
+        }
+        Criteria.put("data_time", range);
+        String table_name_query = table_name;
+        QueryUtil.delete(database_name, table_name_query, Criteria);
+    }
+
+    private void InsertDataListGteLte(boolean time_period_seperate, JSONObject dao_key, String time_period, List<DoubleTimeObject> outputDataList)
+            throws Exception {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
+
+        String building = (String) dao_key.get("building");
+        String tenant = (String) dao_key.get("tenant");
+        String energy_type = (String) dao_key.get("energy_type");
+
+        JSONArray InsertObjects = new JSONArray();
+        for (DoubleTimeObject data : outputDataList) {
+            JSONObject InsertObject = new JSONObject();
+            InsertObject.put("building", building);
+            InsertObject.put("tenant", tenant);
+            InsertObject.put("energy_type", energy_type);
+            InsertObject.put("data_time", sdf.format(data.data_time));
+            InsertObject.put("data_value", data.data_value);
+            InsertObjects.add(InsertObject);
+        }
+        String table_name_query = table_name;
+        QueryUtil.batch_insert(database_name, table_name_query, InsertObjects);
+    }
+
+    public DoubleTimeObject GetData_last(JSONObject dao_key, Date time) throws Exception {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
+        String building = (String) dao_key.get("building");
+        String tenant = (String) dao_key.get("tenant");
+        String energy_type = (String) dao_key.get("energy_type");
+
+        JSONObject Criteria = new JSONObject();
+        Criteria.put("building", building);
+        Criteria.put("tenant", tenant);
+        Criteria.put("energy_type", energy_type);
+        JSONObject range = new JSONObject();
+        range.put("$lte", sdf.format(time));
+        Criteria.put("data_time", range);
+        JSONArray OrderBy = new JSONArray();
+        OrderBy.add(QueryUtil.OrderByItem("building", true));
+        OrderBy.add(QueryUtil.OrderByItem("tenant", true));
+        OrderBy.add(QueryUtil.OrderByItem("energy_type", true));
+        OrderBy.add(QueryUtil.OrderByItem("data_time", false));
+        JSONObject Limit = new JSONObject();
+        Limit.put("Skip", 0L);
+        Limit.put("Count", 1L);
+        String table_name_query = table_name;
+        JSONArray resultContent = QueryUtil.select(database_name, table_name_query, Criteria, OrderBy, Limit);
+        if (resultContent.size() > 0) {
+            JSONObject computelog = (JSONObject) resultContent.get(0);
+            DoubleTimeObject data = new DoubleTimeObject();
+            data.data_time = sdf.parse((String) computelog.get("data_time"));
+            data.data_value = (Double) computelog.get("data_value");
+            return data;
+        } else {
+            return null;
+        }
+    }
+
+    public DoubleTimeObject GetBalance_initial(JSONObject dao_key) throws Exception {
+        String building = (String) dao_key.get("building");
+        String tenant = (String) dao_key.get("tenant");
+        String energy_type = (String) dao_key.get("energy_type");
+
+        if (energy_type == null) {
+            JSONObject Criteria = new JSONObject();
+            Criteria.put("building", building);
+            Criteria.put("sign", tenant);
+            String table_name_query = "tenant";
+            JSONArray resultContent = QueryUtil.select(database_name, table_name_query, Criteria);
+            if (resultContent.size() > 0) {
+                JSONObject computelog = (JSONObject) resultContent.get(0);
+                DoubleTimeObject data = new DoubleTimeObject();
+                data.data_time = null;
+                data.data_value = (Double) computelog.get("soft_initial_yuer");
+                return data;
+            } else {
+                return null;
+            }
+        } else {
+            JSONObject Criteria = new JSONObject();
+            Criteria.put("building", building);
+            Criteria.put("sign", tenant);
+            Criteria.put("energy_type", energy_type);
+            String table_name_query = "tenant_energy";
+            JSONArray resultContent = QueryUtil.select(database_name, table_name_query, Criteria);
+            if (resultContent.size() > 0) {
+                JSONObject computelog = (JSONObject) resultContent.get(0);
+                DoubleTimeObject data = new DoubleTimeObject();
+                data.data_time = null;
+                data.data_value = (Double) computelog.get("soft_initial_yuer");
+                return data;
+            } else {
+                return null;
+            }
+        }
+    }
+
+    public List<DoubleTimeObject> GetRechargeList(JSONObject dao_key, Date time) throws Exception {
+        List<DoubleTimeObject> result = new ArrayList<DoubleTimeObject>();
+
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
+        String building = (String) dao_key.get("building");
+        String tenant = (String) dao_key.get("tenant");
+        String energy_type = (String) dao_key.get("energy_type");
+
+        JSONObject Criteria = new JSONObject();
+        Criteria.put("building", building);
+        Criteria.put("sign", tenant);
+        Criteria.put("energy_type", energy_type);
+        JSONObject range = new JSONObject();
+        range.put("$gte", sdf.format(time));
+        Criteria.put("operate_time", range);
+        String table_name_query = "tenant_recharge";
+        JSONArray resultContent = QueryUtil.select(database_name, table_name_query, Criteria);
+        for (int i = 0; i < resultContent.size(); i++) {
+            JSONObject computelog = (JSONObject) resultContent.get(i);
+            DoubleTimeObject data = new DoubleTimeObject();
+            data.data_time = sdf.parse((String) computelog.get("operate_time"));
+            data.data_value = (Double) computelog.get("amount");
+            result.add(data);
+        }
+        return result;
+    }
+
+    public void SetRecharge_used(JSONObject dao_key, Date time) throws Exception {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
+        String building = (String) dao_key.get("building");
+        String tenant = (String) dao_key.get("tenant");
+        String energy_type = (String) dao_key.get("energy_type");
+
+        JSONObject Criteria = new JSONObject();
+        Criteria.put("building", building);
+        Criteria.put("sign", tenant);
+        Criteria.put("energy_type", energy_type);
+        Criteria.put("operate_time", sdf.format(time));
+        String table_name_query = "tenant_recharge";
+        JSONObject Set = new JSONObject();
+        Set.put("is_used", 1L);
+        QueryUtil.update(database_name, table_name_query, Criteria, Set);
+    }
+
+    public DoubleTimeObject GetBalance_present(JSONObject dao_key) throws Exception {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
+        String building = (String) dao_key.get("building");
+        String tenant = (String) dao_key.get("tenant");
+        String energy_type = (String) dao_key.get("energy_type");
+
+        JSONObject Criteria = new JSONObject();
+        Criteria.put("building", building);
+        Criteria.put("tenant", tenant);
+        Criteria.put("energy_type", energy_type);
+        String table_name_query = "data_tenantbalance_present";
+        JSONArray resultContent = QueryUtil.select(database_name, table_name_query, Criteria);
+        if (resultContent.size() > 0) {
+            JSONObject computelog = (JSONObject) resultContent.get(0);
+            DoubleTimeObject data = new DoubleTimeObject();
+            data.data_time = sdf.parse((String) computelog.get("data_time"));
+            data.data_value = (Double) computelog.get("data_value");
+            return data;
+        } else {
+            return null;
+        }
+    }
+
+    public void InsertDataBalance_present(JSONObject dao_key, DoubleTimeObject data) throws Exception {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
+
+        String building = (String) dao_key.get("building");
+        String tenant = (String) dao_key.get("tenant");
+        String energy_type = (String) dao_key.get("energy_type");
+
+        JSONObject InsertObject = new JSONObject();
+        InsertObject.put("building", building);
+        InsertObject.put("tenant", tenant);
+        InsertObject.put("energy_type", energy_type);
+        InsertObject.put("data_time", sdf.format(data.data_time));
+        InsertObject.put("data_value", data.data_value);
+        String table_name_query = "data_tenantbalance_present";
+        QueryUtil.insert(database_name, table_name_query, InsertObject);
+    }
+
+    public void UpdateBalance_present(JSONObject dao_key, DoubleTimeObject data) throws Exception {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
+
+        String building = (String) dao_key.get("building");
+        String tenant = (String) dao_key.get("tenant");
+        String energy_type = (String) dao_key.get("energy_type");
+
+        JSONObject Criteria = new JSONObject();
+        Criteria.put("building", building);
+        Criteria.put("tenant", tenant);
+        Criteria.put("energy_type", energy_type);
+        JSONObject Set = new JSONObject();
+        Set.put("data_time", sdf.format(data.data_time));
+        Set.put("data_value", data.data_value);
+        String table_name_query = "data_tenantbalance_present";
+        QueryUtil.update(database_name, table_name_query, Criteria, Set);
+    }
+}

+ 175 - 0
src/main/java/com/sagacloud/extend/dao_data/ImplDao_tenantdata.java

@@ -0,0 +1,175 @@
+package com.sagacloud.extend.dao_data;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.sagacloud.util.compute_engine.core.AnnotationDescription;
+import com.sagacloud.util.compute_engine.core.IDao_data;
+import com.sagacloud.util.compute_engine.util.ConstantCE;
+import com.sagacloud.util.compute_engine.util.DoubleTimeObject;
+import com.sagacloud.util.compute_engine.util.QueryUtil;
+
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+@AnnotationDescription(value = "dao_data")
+public class ImplDao_tenantdata implements IDao_data {
+
+    String database_name;
+    String table_name;
+    String dao_type = "tenantdata";
+
+    @Override
+    public void Initialize(String database_name) {
+
+        this.database_name = database_name;
+        this.table_name = "data_" + dao_type;
+    }
+
+    @Override
+    public String GetName() {
+        return this.dao_type;
+    }
+
+    @Override
+    public List<DoubleTimeObject> GetDataListGteLte(JSONObject dao_key, String time_period, Date time_from, Date time_to, boolean GteLte)
+            throws Exception {
+        List<DoubleTimeObject> result = null;
+
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
+        String building = (String) dao_key.get("building");
+        String tenant = (String) dao_key.get("tenant");
+        String energy_type = (String) dao_key.get("energy_type");
+        String meter_sign = (String) dao_key.get("meter_sign");
+        Long funcid = (Long) dao_key.get("funcid");
+
+        JSONObject Criteria = new JSONObject();
+        Criteria.put("building", building);
+        Criteria.put("tenant", tenant);
+        Criteria.put("energy_type", energy_type);
+        Criteria.put("meter_sign", meter_sign);
+        Criteria.put("funcid", funcid);
+        if (ConstantCE.time_period_seperate) {
+            //
+        } else {
+            Criteria.put("time_period", time_period);
+        }
+        JSONObject range = new JSONObject();
+        range.put("$gte", sdf.format(time_from));
+        if (GteLte) {
+            range.put("$lte", sdf.format(time_to));
+        } else {
+            range.put("$lt", sdf.format(time_to));
+        }
+        Criteria.put("data_time", range);
+        String table_name_query;
+        if (ConstantCE.time_period_seperate) {
+            table_name_query = table_name + "_" + time_period;
+        } else {
+            table_name_query = table_name;
+        }
+        JSONArray resultContent = QueryUtil.select(database_name, table_name_query, Criteria);
+        List<DoubleTimeObject> dataList = new ArrayList<DoubleTimeObject>();
+        for (int ii = 0; ii < resultContent.size(); ii++) {
+            JSONObject computelog = (JSONObject) resultContent.get(ii);
+            DoubleTimeObject data = new DoubleTimeObject();
+            data.data_time = sdf.parse((String) computelog.get("data_time"));
+            data.data_value = (Double) computelog.get("data_value");
+            dataList.add(data);
+        }
+        result = dataList;
+
+        return result;
+    }
+
+    @Override
+    public void InsertDataListGteLte(JSONObject dao_key, String time_period, List<DoubleTimeObject> outputDataList) throws Exception {
+        if (ConstantCE.time_period_seperate_save_two || !ConstantCE.time_period_seperate) {
+            this.InsertDataListGteLte(false, dao_key, time_period, outputDataList);
+        }
+        if (ConstantCE.time_period_seperate_save_two || ConstantCE.time_period_seperate) {
+            this.InsertDataListGteLte(true, dao_key, time_period, outputDataList);
+        }
+    }
+
+    @Override
+    public void DeleteDataListGteLte(JSONObject dao_key, String time_period, Date time_from, Date time_to) throws Exception {
+        if (ConstantCE.time_period_seperate_save_two || !ConstantCE.time_period_seperate) {
+            this.DeleteDataListGteLte(false, dao_key, time_period, time_from, time_to);
+        }
+        if (ConstantCE.time_period_seperate_save_two || ConstantCE.time_period_seperate) {
+            this.DeleteDataListGteLte(true, dao_key, time_period, time_from, time_to);
+        }
+    }
+
+    private void DeleteDataListGteLte(boolean time_period_seperate, JSONObject dao_key, String time_period, Date time_from, Date time_to)
+            throws Exception {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
+
+        String building = (String) dao_key.get("building");
+        String tenant = (String) dao_key.get("tenant");
+        String energy_type = (String) dao_key.get("energy_type");
+        String meter_sign = (String) dao_key.get("meter_sign");
+        Long funcid = (Long) dao_key.get("funcid");
+
+        JSONObject Criteria = new JSONObject();
+        Criteria.put("building", building);
+        Criteria.put("tenant", tenant);
+        Criteria.put("energy_type", energy_type);
+        Criteria.put("meter_sign", meter_sign);
+        Criteria.put("funcid", funcid);
+        if (time_period_seperate) {
+            //
+        } else {
+            Criteria.put("time_period", time_period);
+        }
+        JSONObject range = new JSONObject();
+        range.put("$gte", sdf.format(time_from));
+        range.put("$lte", sdf.format(time_to));
+        Criteria.put("data_time", range);
+        String table_name_query;
+        if (time_period_seperate) {
+            table_name_query = table_name + "_" + time_period;
+        } else {
+            table_name_query = table_name;
+        }
+        QueryUtil.delete(database_name, table_name_query, Criteria);
+    }
+
+    private void InsertDataListGteLte(boolean time_period_seperate, JSONObject dao_key, String time_period, List<DoubleTimeObject> outputDataList)
+            throws Exception {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
+
+        String building = (String) dao_key.get("building");
+        String tenant = (String) dao_key.get("tenant");
+        String energy_type = (String) dao_key.get("energy_type");
+        String meter_sign = (String) dao_key.get("meter_sign");
+        Long funcid = (Long) dao_key.get("funcid");
+
+        JSONArray InsertObjects = new JSONArray();
+        for (DoubleTimeObject data : outputDataList) {
+            JSONObject InsertObject = new JSONObject();
+            InsertObject.put("building", building);
+            InsertObject.put("tenant", tenant);
+            InsertObject.put("energy_type", energy_type);
+            InsertObject.put("meter_sign", meter_sign);
+            InsertObject.put("funcid", funcid);
+            if (time_period_seperate) {
+                //
+            } else {
+                InsertObject.put("time_period", time_period);
+            }
+            InsertObject.put("data_time", sdf.format(data.data_time));
+            InsertObject.put("data_value", data.data_value);
+            InsertObjects.add(InsertObject);
+        }
+        String table_name_query;
+        if (time_period_seperate) {
+            table_name_query = table_name + "_" + time_period;
+        } else {
+            table_name_query = table_name;
+        }
+        QueryUtil.batch_insert(database_name, table_name_query, InsertObjects);
+    }
+}

+ 177 - 0
src/main/java/com/sagacloud/extend/dao_data/ImplDao_tenantfee.java

@@ -0,0 +1,177 @@
+package com.sagacloud.extend.dao_data;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.sagacloud.util.compute_engine.core.AnnotationDescription;
+import com.sagacloud.util.compute_engine.core.IDao_data;
+import com.sagacloud.util.compute_engine.util.ConstantCE;
+import com.sagacloud.util.compute_engine.util.DoubleTimeObject;
+import com.sagacloud.util.compute_engine.util.QueryUtil;
+
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+@AnnotationDescription(value = "dao_data")
+public class ImplDao_tenantfee implements IDao_data {
+
+    String database_name;
+    String table_name;
+    String dao_type = "tenantfee";
+
+    @Override
+    public void Initialize(String database_name) {
+
+        this.database_name = database_name;
+        this.table_name = "data_" + dao_type;
+    }
+
+    @Override
+    public String GetName() {
+        return this.dao_type;
+    }
+
+    @Override
+    public List<DoubleTimeObject> GetDataListGteLte(JSONObject dao_key, String time_period, Date time_from, Date time_to, boolean GteLte)
+            throws Exception {
+        List<DoubleTimeObject> result = null;
+
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
+        String building = (String) dao_key.get("building");
+        String tenant = (String) dao_key.get("tenant");
+        String energy_type = (String) dao_key.get("energy_type");
+        String meter_sign = (String) dao_key.get("meter_sign");
+        Long funcid = (Long) dao_key.get("funcid");
+
+        JSONObject Criteria = new JSONObject();
+        Criteria.put("building", building);
+        Criteria.put("tenant", tenant);
+        Criteria.put("energy_type", energy_type);
+        Criteria.put("meter_sign", meter_sign);
+        Criteria.put("funcid", funcid);
+        if (ConstantCE.time_period_seperate) {
+            //
+        } else {
+            Criteria.put("time_period", time_period);
+        }
+        JSONObject range = new JSONObject();
+        range.put("$gte", sdf.format(time_from));
+        if (time_to != null) {
+            if (GteLte) {
+                range.put("$lte", sdf.format(time_to));
+            } else {
+                range.put("$lt", sdf.format(time_to));
+            }
+        }
+        Criteria.put("data_time", range);
+        String table_name_query;
+        if (ConstantCE.time_period_seperate) {
+            table_name_query = table_name + "_" + time_period;
+        } else {
+            table_name_query = table_name;
+        }
+        JSONArray resultContent = QueryUtil.select(database_name, table_name_query, Criteria);
+        List<DoubleTimeObject> dataList = new ArrayList<DoubleTimeObject>();
+        for (int ii = 0; ii < resultContent.size(); ii++) {
+            JSONObject computelog = (JSONObject) resultContent.get(ii);
+            DoubleTimeObject data = new DoubleTimeObject();
+            data.data_time = sdf.parse((String) computelog.get("data_time"));
+            data.data_value = (Double) computelog.get("data_value");
+            dataList.add(data);
+        }
+        result = dataList;
+
+        return result;
+    }
+
+    @Override
+    public void InsertDataListGteLte(JSONObject dao_key, String time_period, List<DoubleTimeObject> outputDataList) throws Exception {
+        if (ConstantCE.time_period_seperate_save_two || !ConstantCE.time_period_seperate) {
+            this.InsertDataListGteLte(false, dao_key, time_period, outputDataList);
+        }
+        if (ConstantCE.time_period_seperate_save_two || ConstantCE.time_period_seperate) {
+            this.InsertDataListGteLte(true, dao_key, time_period, outputDataList);
+        }
+    }
+
+    @Override
+    public void DeleteDataListGteLte(JSONObject dao_key, String time_period, Date time_from, Date time_to) throws Exception {
+        if (ConstantCE.time_period_seperate_save_two || !ConstantCE.time_period_seperate) {
+            this.DeleteDataListGteLte(false, dao_key, time_period, time_from, time_to);
+        }
+        if (ConstantCE.time_period_seperate_save_two || ConstantCE.time_period_seperate) {
+            this.DeleteDataListGteLte(true, dao_key, time_period, time_from, time_to);
+        }
+    }
+
+    private void DeleteDataListGteLte(boolean time_period_seperate, JSONObject dao_key, String time_period, Date time_from, Date time_to)
+            throws Exception {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
+
+        String building = (String) dao_key.get("building");
+        String tenant = (String) dao_key.get("tenant");
+        String energy_type = (String) dao_key.get("energy_type");
+        String meter_sign = (String) dao_key.get("meter_sign");
+        Long funcid = (Long) dao_key.get("funcid");
+
+        JSONObject Criteria = new JSONObject();
+        Criteria.put("building", building);
+        Criteria.put("tenant", tenant);
+        Criteria.put("energy_type", energy_type);
+        Criteria.put("meter_sign", meter_sign);
+        Criteria.put("funcid", funcid);
+        if (time_period_seperate) {
+            //
+        } else {
+            Criteria.put("time_period", time_period);
+        }
+        JSONObject range = new JSONObject();
+        range.put("$gte", sdf.format(time_from));
+        range.put("$lte", sdf.format(time_to));
+        Criteria.put("data_time", range);
+        String table_name_query;
+        if (time_period_seperate) {
+            table_name_query = table_name + "_" + time_period;
+        } else {
+            table_name_query = table_name;
+        }
+        QueryUtil.delete(database_name, table_name_query, Criteria);
+    }
+
+    private void InsertDataListGteLte(boolean time_period_seperate, JSONObject dao_key, String time_period, List<DoubleTimeObject> outputDataList)
+            throws Exception {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
+
+        String building = (String) dao_key.get("building");
+        String tenant = (String) dao_key.get("tenant");
+        String energy_type = (String) dao_key.get("energy_type");
+        String meter_sign = (String) dao_key.get("meter_sign");
+        Long funcid = (Long) dao_key.get("funcid");
+
+        JSONArray InsertObjects = new JSONArray();
+        for (DoubleTimeObject data : outputDataList) {
+            JSONObject InsertObject = new JSONObject();
+            InsertObject.put("building", building);
+            InsertObject.put("tenant", tenant);
+            InsertObject.put("energy_type", energy_type);
+            InsertObject.put("meter_sign", meter_sign);
+            InsertObject.put("funcid", funcid);
+            if (time_period_seperate) {
+                //
+            } else {
+                InsertObject.put("time_period", time_period);
+            }
+            InsertObject.put("data_time", sdf.format(data.data_time));
+            InsertObject.put("data_value", data.data_value);
+            InsertObjects.add(InsertObject);
+        }
+        String table_name_query;
+        if (time_period_seperate) {
+            table_name_query = table_name + "_" + time_period;
+        } else {
+            table_name_query = table_name;
+        }
+        QueryUtil.batch_insert(database_name, table_name_query, InsertObjects);
+    }
+}

+ 165 - 0
src/main/java/com/sagacloud/extend/dao_data_max/ImplDao_energydata_max.java

@@ -0,0 +1,165 @@
+package com.sagacloud.extend.dao_data_max;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.sagacloud.util.compute_engine.core.AnnotationDescription;
+import com.sagacloud.util.compute_engine.core.IDao_data_max;
+import com.sagacloud.util.compute_engine.util.ConstantCE;
+import com.sagacloud.util.compute_engine.util.DoubleTimeObject_max;
+import com.sagacloud.util.compute_engine.util.QueryUtil;
+
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+@AnnotationDescription(value = "dao_data")
+public class ImplDao_energydata_max implements IDao_data_max {
+
+    String database_name;
+    String table_name;
+    String dao_type = "energydata_max";
+
+    @Override
+    public void Initialize(String database_name) {
+
+        this.database_name = database_name;
+        this.table_name = "data_" + dao_type;
+    }
+
+    @Override
+    public String GetName() {
+        return this.dao_type;
+    }
+
+    @Override
+    public List<DoubleTimeObject_max> GetDataListGteLte(JSONObject dao_key, String time_period, Date time_from, Date time_to, boolean GteLte)
+            throws Exception {
+        List<DoubleTimeObject_max> result = null;
+
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
+        String building = (String) dao_key.get("building");
+        String energyModelSign = (String) dao_key.get("energyModelSign");
+        String energyModelNodeSign = (String) dao_key.get("energyModelNodeSign");
+
+        JSONObject Criteria = new JSONObject();
+        Criteria.put("building", building);
+        Criteria.put("energyModelSign", energyModelSign);
+        Criteria.put("energyModelNodeSign", energyModelNodeSign);
+        if (ConstantCE.time_period_seperate) {
+            //
+        } else {
+            Criteria.put("time_period", time_period);
+        }
+        JSONObject range = new JSONObject();
+        range.put("$gte", sdf.format(time_from));
+        if (GteLte) {
+            range.put("$lte", sdf.format(time_to));
+        } else {
+            range.put("$lt", sdf.format(time_to));
+        }
+        Criteria.put("data_time", range);
+        String table_name_query;
+        if (ConstantCE.time_period_seperate) {
+            table_name_query = table_name + "_" + time_period;
+        } else {
+            table_name_query = table_name;
+        }
+        JSONArray resultContent = QueryUtil.select(database_name, table_name_query, Criteria);
+        List<DoubleTimeObject_max> dataList = new ArrayList<DoubleTimeObject_max>();
+        for (int ii = 0; ii < resultContent.size(); ii++) {
+            JSONObject computelog = (JSONObject) resultContent.get(ii);
+            DoubleTimeObject_max data = new DoubleTimeObject_max();
+            data.data_value = (Double) computelog.get("data_value");
+            data.data_time = sdf.parse((String) computelog.get("data_time"));
+            data.max_time = sdf.parse((String) computelog.get("max_time"));
+            dataList.add(data);
+        }
+        result = dataList;
+
+        return result;
+    }
+
+    @Override
+    public void InsertDataListGteLte(JSONObject dao_key, String time_period, List<DoubleTimeObject_max> outputDataList) throws Exception {
+        if (ConstantCE.time_period_seperate_save_two || !ConstantCE.time_period_seperate) {
+            this.InsertDataListGteLte(false, dao_key, time_period, outputDataList);
+        }
+        if (ConstantCE.time_period_seperate_save_two || ConstantCE.time_period_seperate) {
+            this.InsertDataListGteLte(true, dao_key, time_period, outputDataList);
+        }
+    }
+
+    @Override
+    public void DeleteDataListGteLte(JSONObject dao_key, String time_period, Date time_from, Date time_to) throws Exception {
+        if (ConstantCE.time_period_seperate_save_two || !ConstantCE.time_period_seperate) {
+            this.DeleteDataListGteLte(false, dao_key, time_period, time_from, time_to);
+        }
+        if (ConstantCE.time_period_seperate_save_two || ConstantCE.time_period_seperate) {
+            this.DeleteDataListGteLte(true, dao_key, time_period, time_from, time_to);
+        }
+    }
+
+    private void DeleteDataListGteLte(boolean time_period_seperate, JSONObject dao_key, String time_period, Date time_from, Date time_to)
+            throws Exception {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
+
+        String building = (String) dao_key.get("building");
+        String energyModelSign = (String) dao_key.get("energyModelSign");
+        String energyModelNodeSign = (String) dao_key.get("energyModelNodeSign");
+
+        JSONObject Criteria = new JSONObject();
+        Criteria.put("building", building);
+        Criteria.put("energyModelSign", energyModelSign);
+        Criteria.put("energyModelNodeSign", energyModelNodeSign);
+        if (time_period_seperate) {
+            //
+        } else {
+            Criteria.put("time_period", time_period);
+        }
+        JSONObject range = new JSONObject();
+        range.put("$gte", sdf.format(time_from));
+        range.put("$lte", sdf.format(time_to));
+        Criteria.put("data_time", range);
+        String table_name_query;
+        if (time_period_seperate) {
+            table_name_query = table_name + "_" + time_period;
+        } else {
+            table_name_query = table_name;
+        }
+        QueryUtil.delete(database_name, table_name_query, Criteria);
+    }
+
+    private void InsertDataListGteLte(boolean time_period_seperate, JSONObject dao_key, String time_period, List<DoubleTimeObject_max> outputDataList)
+            throws Exception {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
+
+        String building = (String) dao_key.get("building");
+        String energyModelSign = (String) dao_key.get("energyModelSign");
+        String energyModelNodeSign = (String) dao_key.get("energyModelNodeSign");
+
+        JSONArray InsertObjects = new JSONArray();
+        for (DoubleTimeObject_max data : outputDataList) {
+            JSONObject InsertObject = new JSONObject();
+            InsertObject.put("building", building);
+            InsertObject.put("energyModelSign", energyModelSign);
+            InsertObject.put("energyModelNodeSign", energyModelNodeSign);
+            if (time_period_seperate) {
+                //
+            } else {
+                InsertObject.put("time_period", time_period);
+            }
+            InsertObject.put("data_time", sdf.format(data.data_time));
+            InsertObject.put("data_value", data.data_value);
+            InsertObject.put("max_time", sdf.format(data.max_time));
+            InsertObjects.add(InsertObject);
+        }
+        String table_name_query;
+        if (time_period_seperate) {
+            table_name_query = table_name + "_" + time_period;
+        } else {
+            table_name_query = table_name;
+        }
+        QueryUtil.batch_insert(database_name, table_name_query, InsertObjects);
+    }
+}

+ 159 - 0
src/main/java/com/sagacloud/extend/dao_data_max/ImplDao_objectdata_max.java

@@ -0,0 +1,159 @@
+package com.sagacloud.extend.dao_data_max;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.sagacloud.util.compute_engine.core.AnnotationDescription;
+import com.sagacloud.util.compute_engine.core.IDao_data_max;
+import com.sagacloud.util.compute_engine.util.ConstantCE;
+import com.sagacloud.util.compute_engine.util.DoubleTimeObject_max;
+import com.sagacloud.util.compute_engine.util.QueryUtil;
+
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+@AnnotationDescription(value = "dao_data")
+public class ImplDao_objectdata_max implements IDao_data_max {
+
+    String database_name;
+    String table_name;
+    String dao_type = "objectdata_max";
+
+    @Override
+    public void Initialize(String database_name) {
+
+        this.database_name = database_name;
+        this.table_name = "data_" + dao_type;
+    }
+
+    @Override
+    public String GetName() {
+        return this.dao_type;
+    }
+
+    @Override
+    public List<DoubleTimeObject_max> GetDataListGteLte(JSONObject dao_key, String time_period, Date time_from, Date time_to, boolean GteLte)
+            throws Exception {
+        List<DoubleTimeObject_max> result = null;
+
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
+        String building = (String) dao_key.get("building");
+        String objectSign = (String) dao_key.get("objectSign");
+
+        JSONObject Criteria = new JSONObject();
+        Criteria.put("building", building);
+        Criteria.put("objectSign", objectSign);
+        if (ConstantCE.time_period_seperate) {
+            //
+        } else {
+            Criteria.put("time_period", time_period);
+        }
+        JSONObject range = new JSONObject();
+        range.put("$gte", sdf.format(time_from));
+        if (GteLte) {
+            range.put("$lte", sdf.format(time_to));
+        } else {
+            range.put("$lt", sdf.format(time_to));
+        }
+        Criteria.put("data_time", range);
+        String table_name_query;
+        if (ConstantCE.time_period_seperate) {
+            table_name_query = table_name + "_" + time_period;
+        } else {
+            table_name_query = table_name;
+        }
+        JSONArray resultContent = QueryUtil.select(database_name, table_name_query, Criteria);
+        List<DoubleTimeObject_max> dataList = new ArrayList<DoubleTimeObject_max>();
+        for (int ii = 0; ii < resultContent.size(); ii++) {
+            JSONObject computelog = (JSONObject) resultContent.get(ii);
+            DoubleTimeObject_max data = new DoubleTimeObject_max();
+            data.data_value = (Double) computelog.get("data_value");
+            data.data_time = sdf.parse((String) computelog.get("data_time"));
+            data.max_time = sdf.parse((String) computelog.get("max_time"));
+            dataList.add(data);
+        }
+        result = dataList;
+
+        return result;
+    }
+
+    @Override
+    public void InsertDataListGteLte(JSONObject dao_key, String time_period, List<DoubleTimeObject_max> outputDataList) throws Exception {
+        if (ConstantCE.time_period_seperate_save_two || !ConstantCE.time_period_seperate) {
+            this.InsertDataListGteLte(false, dao_key, time_period, outputDataList);
+        }
+        if (ConstantCE.time_period_seperate_save_two || ConstantCE.time_period_seperate) {
+            this.InsertDataListGteLte(true, dao_key, time_period, outputDataList);
+        }
+    }
+
+    @Override
+    public void DeleteDataListGteLte(JSONObject dao_key, String time_period, Date time_from, Date time_to) throws Exception {
+        if (ConstantCE.time_period_seperate_save_two || !ConstantCE.time_period_seperate) {
+            this.DeleteDataListGteLte(false, dao_key, time_period, time_from, time_to);
+        }
+        if (ConstantCE.time_period_seperate_save_two || ConstantCE.time_period_seperate) {
+            this.DeleteDataListGteLte(true, dao_key, time_period, time_from, time_to);
+        }
+    }
+
+    private void DeleteDataListGteLte(boolean time_period_seperate, JSONObject dao_key, String time_period, Date time_from, Date time_to)
+            throws Exception {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
+
+        String building = (String) dao_key.get("building");
+        String objectSign = (String) dao_key.get("objectSign");
+
+        JSONObject Criteria = new JSONObject();
+        Criteria.put("building", building);
+        Criteria.put("objectSign", objectSign);
+        if (time_period_seperate) {
+            //
+        } else {
+            Criteria.put("time_period", time_period);
+        }
+        JSONObject range = new JSONObject();
+        range.put("$gte", sdf.format(time_from));
+        range.put("$lte", sdf.format(time_to));
+        Criteria.put("data_time", range);
+        String table_name_query;
+        if (time_period_seperate) {
+            table_name_query = table_name + "_" + time_period;
+        } else {
+            table_name_query = table_name;
+        }
+        QueryUtil.delete(database_name, table_name_query, Criteria);
+    }
+
+    private void InsertDataListGteLte(boolean time_period_seperate, JSONObject dao_key, String time_period, List<DoubleTimeObject_max> outputDataList)
+            throws Exception {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
+
+        String building = (String) dao_key.get("building");
+        String objectSign = (String) dao_key.get("objectSign");
+
+        JSONArray InsertObjects = new JSONArray();
+        for (DoubleTimeObject_max data : outputDataList) {
+            JSONObject InsertObject = new JSONObject();
+            InsertObject.put("building", building);
+            InsertObject.put("objectSign", objectSign);
+            if (time_period_seperate) {
+                //
+            } else {
+                InsertObject.put("time_period", time_period);
+            }
+            InsertObject.put("data_time", sdf.format(data.data_time));
+            InsertObject.put("data_value", data.data_value);
+            InsertObject.put("max_time", sdf.format(data.max_time));
+            InsertObjects.add(InsertObject);
+        }
+        String table_name_query;
+        if (time_period_seperate) {
+            table_name_query = table_name + "_" + time_period;
+        } else {
+            table_name_query = table_name;
+        }
+        QueryUtil.batch_insert(database_name, table_name_query, InsertObjects);
+    }
+}

+ 166 - 0
src/main/java/com/sagacloud/extend/dao_data_max/ImplDao_servicedata_max.java

@@ -0,0 +1,166 @@
+package com.sagacloud.extend.dao_data_max;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.sagacloud.util.compute_engine.core.AnnotationDescription;
+import com.sagacloud.util.compute_engine.core.IDao_data_max;
+import com.sagacloud.util.compute_engine.util.ConstantCE;
+import com.sagacloud.util.compute_engine.util.DoubleTimeObject_max;
+import com.sagacloud.util.compute_engine.util.QueryUtil;
+import org.zillion.util.json.FastJsonUtil;
+
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+@AnnotationDescription(value = "dao_data")
+public class ImplDao_servicedata_max implements IDao_data_max {
+
+    String database_name;
+    String table_name;
+    String dao_type = "servicedata_max";
+
+    @Override
+    public void Initialize(String database_name) {
+
+        this.database_name = database_name;
+        this.table_name = "data_" + dao_type;
+    }
+
+    @Override
+    public String GetName() {
+        return this.dao_type;
+    }
+
+    @Override
+    public List<DoubleTimeObject_max> GetDataListGteLte(JSONObject dao_key, String time_period, Date time_from, Date time_to, boolean GteLte)
+            throws Exception {
+        List<DoubleTimeObject_max> result = null;
+
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
+        String building = (String) dao_key.get("building");
+        String meter = (String) dao_key.get("meter");
+        long funcid = FastJsonUtil.getLong(dao_key, "funcid");
+
+        JSONObject Criteria = new JSONObject();
+        Criteria.put("building", building);
+        Criteria.put("meter", meter);
+        Criteria.put("funcid", funcid);
+        if (ConstantCE.time_period_seperate) {
+            //
+        } else {
+            Criteria.put("time_period", time_period);
+        }
+        JSONObject range = new JSONObject();
+        range.put("$gte", sdf.format(time_from));
+        if (GteLte) {
+            range.put("$lte", sdf.format(time_to));
+        } else {
+            range.put("$lt", sdf.format(time_to));
+        }
+        Criteria.put("data_time", range);
+        String table_name_query;
+        if (ConstantCE.time_period_seperate) {
+            table_name_query = table_name + "_" + time_period;
+        } else {
+            table_name_query = table_name;
+        }
+        JSONArray resultContent = QueryUtil.select(database_name, table_name_query, Criteria);
+        List<DoubleTimeObject_max> dataList = new ArrayList<DoubleTimeObject_max>();
+        for (int ii = 0; ii < resultContent.size(); ii++) {
+            JSONObject computelog = (JSONObject) resultContent.get(ii);
+            DoubleTimeObject_max data = new DoubleTimeObject_max();
+            data.data_value = (Double) computelog.get("data_value");
+            data.data_time = sdf.parse((String) computelog.get("data_time"));
+            data.max_time = sdf.parse((String) computelog.get("max_time"));
+            dataList.add(data);
+        }
+        result = dataList;
+
+        return result;
+    }
+
+    @Override
+    public void InsertDataListGteLte(JSONObject dao_key, String time_period, List<DoubleTimeObject_max> outputDataList) throws Exception {
+        if (ConstantCE.time_period_seperate_save_two || !ConstantCE.time_period_seperate) {
+            this.InsertDataListGteLte(false, dao_key, time_period, outputDataList);
+        }
+        if (ConstantCE.time_period_seperate_save_two || ConstantCE.time_period_seperate) {
+            this.InsertDataListGteLte(true, dao_key, time_period, outputDataList);
+        }
+    }
+
+    @Override
+    public void DeleteDataListGteLte(JSONObject dao_key, String time_period, Date time_from, Date time_to) throws Exception {
+        if (ConstantCE.time_period_seperate_save_two || !ConstantCE.time_period_seperate) {
+            this.DeleteDataListGteLte(false, dao_key, time_period, time_from, time_to);
+        }
+        if (ConstantCE.time_period_seperate_save_two || ConstantCE.time_period_seperate) {
+            this.DeleteDataListGteLte(true, dao_key, time_period, time_from, time_to);
+        }
+    }
+
+    private void DeleteDataListGteLte(boolean time_period_seperate, JSONObject dao_key, String time_period, Date time_from, Date time_to)
+            throws Exception {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
+
+        String building = (String) dao_key.get("building");
+        String meter = (String) dao_key.get("meter");
+        long funcid = FastJsonUtil.getLong(dao_key, "funcid");
+
+        JSONObject Criteria = new JSONObject();
+        Criteria.put("building", building);
+        Criteria.put("meter", meter);
+        Criteria.put("funcid", funcid);
+        if (time_period_seperate) {
+            //
+        } else {
+            Criteria.put("time_period", time_period);
+        }
+        JSONObject range = new JSONObject();
+        range.put("$gte", sdf.format(time_from));
+        range.put("$lte", sdf.format(time_to));
+        Criteria.put("data_time", range);
+        String table_name_query;
+        if (time_period_seperate) {
+            table_name_query = table_name + "_" + time_period;
+        } else {
+            table_name_query = table_name;
+        }
+        QueryUtil.delete(database_name, table_name_query, Criteria);
+    }
+
+    private void InsertDataListGteLte(boolean time_period_seperate, JSONObject dao_key, String time_period, List<DoubleTimeObject_max> outputDataList)
+            throws Exception {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
+
+        String building = (String) dao_key.get("building");
+        String meter = (String) dao_key.get("meter");
+        long funcid = FastJsonUtil.getLong(dao_key, "funcid");
+
+        JSONArray InsertObjects = new JSONArray();
+        for (DoubleTimeObject_max data : outputDataList) {
+            JSONObject InsertObject = new JSONObject();
+            InsertObject.put("building", building);
+            InsertObject.put("meter", meter);
+            InsertObject.put("funcid", funcid);
+            if (time_period_seperate) {
+                //
+            } else {
+                InsertObject.put("time_period", time_period);
+            }
+            InsertObject.put("data_time", sdf.format(data.data_time));
+            InsertObject.put("data_value", data.data_value);
+            InsertObject.put("max_time", sdf.format(data.max_time));
+            InsertObjects.add(InsertObject);
+        }
+        String table_name_query;
+        if (time_period_seperate) {
+            table_name_query = table_name + "_" + time_period;
+        } else {
+            table_name_query = table_name;
+        }
+        QueryUtil.batch_insert(database_name, table_name_query, InsertObjects);
+    }
+}

+ 177 - 0
src/main/java/com/sagacloud/extend/dao_data_max/ImplDao_tenantdata_max.java

@@ -0,0 +1,177 @@
+package com.sagacloud.extend.dao_data_max;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.sagacloud.util.compute_engine.core.AnnotationDescription;
+import com.sagacloud.util.compute_engine.core.IDao_data_max;
+import com.sagacloud.util.compute_engine.util.ConstantCE;
+import com.sagacloud.util.compute_engine.util.DoubleTimeObject_max;
+import com.sagacloud.util.compute_engine.util.QueryUtil;
+
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+@AnnotationDescription(value = "dao_data")
+public class ImplDao_tenantdata_max implements IDao_data_max {
+
+    String database_name;
+    String table_name;
+    String dao_type = "tenantdata_max";
+
+    @Override
+    public void Initialize(String database_name) {
+
+        this.database_name = database_name;
+        this.table_name = "data_" + dao_type;
+    }
+
+    @Override
+    public String GetName() {
+        return this.dao_type;
+    }
+
+    @Override
+    public List<DoubleTimeObject_max> GetDataListGteLte(JSONObject dao_key, String time_period, Date time_from, Date time_to, boolean GteLte)
+            throws Exception {
+        List<DoubleTimeObject_max> result = null;
+
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
+        String building = (String) dao_key.get("building");
+        String tenant = (String) dao_key.get("tenant");
+        String energy_type = (String) dao_key.get("energy_type");
+        String meter_sign = (String) dao_key.get("meter_sign");
+        Long funcid = (Long) dao_key.get("funcid");
+
+        JSONObject Criteria = new JSONObject();
+        Criteria.put("building", building);
+        Criteria.put("tenant", tenant);
+        Criteria.put("energy_type", energy_type);
+        Criteria.put("meter_sign", meter_sign);
+        Criteria.put("funcid", funcid);
+        if (ConstantCE.time_period_seperate) {
+            //
+        } else {
+            Criteria.put("time_period", time_period);
+        }
+        JSONObject range = new JSONObject();
+        range.put("$gte", sdf.format(time_from));
+        if (GteLte) {
+            range.put("$lte", sdf.format(time_to));
+        } else {
+            range.put("$lt", sdf.format(time_to));
+        }
+        Criteria.put("data_time", range);
+        String table_name_query;
+        if (ConstantCE.time_period_seperate) {
+            table_name_query = table_name + "_" + time_period;
+        } else {
+            table_name_query = table_name;
+        }
+        JSONArray resultContent = QueryUtil.select(database_name, table_name_query, Criteria);
+        List<DoubleTimeObject_max> dataList = new ArrayList<DoubleTimeObject_max>();
+        for (int ii = 0; ii < resultContent.size(); ii++) {
+            JSONObject computelog = (JSONObject) resultContent.get(ii);
+            DoubleTimeObject_max data = new DoubleTimeObject_max();
+            data.data_value = (Double) computelog.get("data_value");
+            data.data_time = sdf.parse((String) computelog.get("data_time"));
+            data.max_time = sdf.parse((String) computelog.get("max_time"));
+            dataList.add(data);
+        }
+        result = dataList;
+
+        return result;
+    }
+
+    @Override
+    public void InsertDataListGteLte(JSONObject dao_key, String time_period, List<DoubleTimeObject_max> outputDataList) throws Exception {
+        if (ConstantCE.time_period_seperate_save_two || !ConstantCE.time_period_seperate) {
+            this.InsertDataListGteLte(false, dao_key, time_period, outputDataList);
+        }
+        if (ConstantCE.time_period_seperate_save_two || ConstantCE.time_period_seperate) {
+            this.InsertDataListGteLte(true, dao_key, time_period, outputDataList);
+        }
+    }
+
+    @Override
+    public void DeleteDataListGteLte(JSONObject dao_key, String time_period, Date time_from, Date time_to) throws Exception {
+        if (ConstantCE.time_period_seperate_save_two || !ConstantCE.time_period_seperate) {
+            this.DeleteDataListGteLte(false, dao_key, time_period, time_from, time_to);
+        }
+        if (ConstantCE.time_period_seperate_save_two || ConstantCE.time_period_seperate) {
+            this.DeleteDataListGteLte(true, dao_key, time_period, time_from, time_to);
+        }
+    }
+
+    private void DeleteDataListGteLte(boolean time_period_seperate, JSONObject dao_key, String time_period, Date time_from, Date time_to)
+            throws Exception {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
+
+        String building = (String) dao_key.get("building");
+        String tenant = (String) dao_key.get("tenant");
+        String energy_type = (String) dao_key.get("energy_type");
+        String meter_sign = (String) dao_key.get("meter_sign");
+        Long funcid = (Long) dao_key.get("funcid");
+
+        JSONObject Criteria = new JSONObject();
+        Criteria.put("building", building);
+        Criteria.put("tenant", tenant);
+        Criteria.put("energy_type", energy_type);
+        Criteria.put("meter_sign", meter_sign);
+        Criteria.put("funcid", funcid);
+        if (time_period_seperate) {
+            //
+        } else {
+            Criteria.put("time_period", time_period);
+        }
+        JSONObject range = new JSONObject();
+        range.put("$gte", sdf.format(time_from));
+        range.put("$lte", sdf.format(time_to));
+        Criteria.put("data_time", range);
+        String table_name_query;
+        if (time_period_seperate) {
+            table_name_query = table_name + "_" + time_period;
+        } else {
+            table_name_query = table_name;
+        }
+        QueryUtil.delete(database_name, table_name_query, Criteria);
+    }
+
+    private void InsertDataListGteLte(boolean time_period_seperate, JSONObject dao_key, String time_period, List<DoubleTimeObject_max> outputDataList)
+            throws Exception {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
+
+        String building = (String) dao_key.get("building");
+        String tenant = (String) dao_key.get("tenant");
+        String energy_type = (String) dao_key.get("energy_type");
+        String meter_sign = (String) dao_key.get("meter_sign");
+        Long funcid = (Long) dao_key.get("funcid");
+
+        JSONArray InsertObjects = new JSONArray();
+        for (DoubleTimeObject_max data : outputDataList) {
+            JSONObject InsertObject = new JSONObject();
+            InsertObject.put("building", building);
+            InsertObject.put("tenant", tenant);
+            InsertObject.put("energy_type", energy_type);
+            InsertObject.put("meter_sign", meter_sign);
+            InsertObject.put("funcid", funcid);
+            if (time_period_seperate) {
+                //
+            } else {
+                InsertObject.put("time_period", time_period);
+            }
+            InsertObject.put("data_time", sdf.format(data.data_time));
+            InsertObject.put("data_value", data.data_value);
+            InsertObject.put("max_time", sdf.format(data.max_time));
+            InsertObjects.add(InsertObject);
+        }
+        String table_name_query;
+        if (time_period_seperate) {
+            table_name_query = table_name + "_" + time_period;
+        } else {
+            table_name_query = table_name;
+        }
+        QueryUtil.batch_insert(database_name, table_name_query, InsertObjects);
+    }
+}

+ 30 - 0
src/main/java/com/sagacloud/init/InitRunner.java

@@ -0,0 +1,30 @@
+package com.sagacloud.init;
+
+
+import com.sagacloud.repository.HBaseSaveManagerRepository;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.CommandLineRunner;
+import org.springframework.stereotype.Component;
+
+@Slf4j
+@Component
+public class InitRunner implements CommandLineRunner {
+
+
+    @Value("${zillionHBaseSaveManagerRepository.randomZillionAgent().count:1}")
+    private int zillionAgentCount;
+
+    @Override
+    public void run(String... args) throws Exception {
+        log.warn("----------contextInitialize start--------------");
+        try {
+            //容器启动时创建HBase的连接,防止其他已经注入到容器中的实例连接HBase时,HBase还没有创建连接 在ServletContext创建时被调用
+            HBaseSaveManagerRepository.init(zillionAgentCount);
+        } catch (Exception e1) {
+            log.error("ControlServiceMain main error", e1);
+        }
+        log.warn("----------contextInitialize end--------------");
+    }
+
+}

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 1906 - 0
src/main/java/com/sagacloud/parser/simulator/ComputeEngineLexer.java


파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 1749 - 0
src/main/java/com/sagacloud/parser/simulator/ComputeEngineParser.java


+ 873 - 0
src/main/java/com/sagacloud/parser/simulator/ComputeEngineScanner.java

@@ -0,0 +1,873 @@
+// $ANTLR 3.1 ComputeEngineScanner.g 2020-05-14 10:30:08
+
+package com.sagacloud.parser.simulator;
+
+import org.antlr.runtime.*;
+import org.antlr.runtime.tree.CommonTree;
+import org.antlr.runtime.tree.TreeNodeStream;
+import org.antlr.runtime.tree.TreeParser;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class ComputeEngineScanner extends TreeParser {
+    public static final String[] tokenNames = new String[]{
+            "<invalid>", "<EOR>", "<DOWN>", "<UP>", "IFWRAPPER", "NEWLINE", "NUMBER", "ID", "F0", "F1", "F2", "WS", "'+'", "'-'", "'*'", "'/'", "'('", "')'", "'if'", "'{'", "'}'", "'elseif'", "'else'", "'||'", "'&&'", "'!'", "'['", "'<'", "'<='", "'>'", "'>='", "'=='", "'!='", "']'", "','"
+    };
+    public static final int T__29 = 29;
+    public static final int T__28 = 28;
+    public static final int T__27 = 27;
+    public static final int T__26 = 26;
+    public static final int T__25 = 25;
+    public static final int T__24 = 24;
+    public static final int T__23 = 23;
+    public static final int T__22 = 22;
+    public static final int T__21 = 21;
+    public static final int T__20 = 20;
+    public static final int NUMBER = 6;
+    public static final int ID = 7;
+    public static final int EOF = -1;
+    public static final int T__30 = 30;
+    public static final int T__19 = 19;
+    public static final int T__31 = 31;
+    public static final int T__32 = 32;
+    public static final int T__16 = 16;
+    public static final int T__33 = 33;
+    public static final int WS = 11;
+    public static final int T__15 = 15;
+    public static final int T__34 = 34;
+    public static final int T__18 = 18;
+    public static final int NEWLINE = 5;
+    public static final int T__17 = 17;
+    public static final int T__12 = 12;
+    public static final int T__14 = 14;
+    public static final int T__13 = 13;
+    public static final int F1 = 9;
+    public static final int F0 = 8;
+    public static final int F2 = 10;
+    public static final int IFWRAPPER = 4;
+
+    // delegates
+    // delegators
+    public static final BitSet FOLLOW_expr_in_prog60 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_fourexpr_in_expr76 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ifcondition_in_expr85 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_12_in_fourexpr98 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_fourexpr_in_fourexpr102 = new BitSet(new long[]{0x000000000000F7D0L});
+    public static final BitSet FOLLOW_fourexpr_in_fourexpr106 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_13_in_fourexpr113 = new BitSet(new long[]{0x0000000000000004L});
+    // $ANTLR end "prog"
+    public static final BitSet FOLLOW_fourexpr_in_fourexpr117 = new BitSet(new long[]{0x000000000000F7D0L});
+    // $ANTLR end "expr"
+    public static final BitSet FOLLOW_fourexpr_in_fourexpr121 = new BitSet(new long[]{0x0000000000000008L});
+    // $ANTLR end "fourexpr"
+    public static final BitSet FOLLOW_14_in_fourexpr128 = new BitSet(new long[]{0x0000000000000004L});
+    // $ANTLR end "ifcondition"
+    public static final BitSet FOLLOW_fourexpr_in_fourexpr132 = new BitSet(new long[]{0x000000000000F7D0L});
+    // $ANTLR end "elseifcondition"
+    public static final BitSet FOLLOW_fourexpr_in_fourexpr136 = new BitSet(new long[]{0x0000000000000008L});
+    // $ANTLR end "condition"
+    public static final BitSet FOLLOW_15_in_fourexpr143 = new BitSet(new long[]{0x0000000000000004L});
+    // $ANTLR end "comparecondition"
+
+    // Delegated rules
+    public static final BitSet FOLLOW_fourexpr_in_fourexpr147 = new BitSet(new long[]{0x000000000000F7D0L});
+    public static final BitSet FOLLOW_fourexpr_in_fourexpr151 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_ID_in_fourexpr157 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_F0_in_fourexpr164 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_F1_in_fourexpr170 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_fourexpr_in_fourexpr174 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_F2_in_fourexpr181 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_fourexpr_in_fourexpr185 = new BitSet(new long[]{0x000000000000F7D0L});
+    public static final BitSet FOLLOW_fourexpr_in_fourexpr189 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_NUMBER_in_fourexpr195 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_IFWRAPPER_in_fourexpr201 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_ifcondition_in_fourexpr205 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_18_in_ifcondition219 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_condition_in_ifcondition223 = new BitSet(new long[]{0x000000000004F7D0L});
+    public static final BitSet FOLLOW_expr_in_ifcondition227 = new BitSet(new long[]{0x0000000000600000L});
+    public static final BitSet FOLLOW_elseifcondition_in_ifcondition231 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_21_in_elseifcondition244 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_condition_in_elseifcondition248 = new BitSet(new long[]{0x000000000004F7D0L});
+    public static final BitSet FOLLOW_expr_in_elseifcondition252 = new BitSet(new long[]{0x0000000000600000L});
+    public static final BitSet FOLLOW_elseifcondition_in_elseifcondition256 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_22_in_elseifcondition263 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_expr_in_elseifcondition267 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_24_in_condition280 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_condition_in_condition284 = new BitSet(new long[]{0x00000001FB800000L});
+    public static final BitSet FOLLOW_condition_in_condition288 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_23_in_condition295 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_condition_in_condition299 = new BitSet(new long[]{0x00000001FB800000L});
+    public static final BitSet FOLLOW_condition_in_condition303 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_25_in_condition310 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_condition_in_condition314 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_comparecondition_in_condition323 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_27_in_comparecondition336 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_fourexpr_in_comparecondition340 = new BitSet(new long[]{0x000000000000F7D0L});
+    public static final BitSet FOLLOW_fourexpr_in_comparecondition344 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_28_in_comparecondition351 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_fourexpr_in_comparecondition355 = new BitSet(new long[]{0x000000000000F7D0L});
+    public static final BitSet FOLLOW_fourexpr_in_comparecondition359 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_29_in_comparecondition366 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_fourexpr_in_comparecondition370 = new BitSet(new long[]{0x000000000000F7D0L});
+    public static final BitSet FOLLOW_fourexpr_in_comparecondition374 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_30_in_comparecondition381 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_fourexpr_in_comparecondition385 = new BitSet(new long[]{0x000000000000F7D0L});
+    public static final BitSet FOLLOW_fourexpr_in_comparecondition389 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_31_in_comparecondition396 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_fourexpr_in_comparecondition400 = new BitSet(new long[]{0x000000000000F7D0L});
+    public static final BitSet FOLLOW_fourexpr_in_comparecondition404 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_32_in_comparecondition411 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_fourexpr_in_comparecondition415 = new BitSet(new long[]{0x000000000000F7D0L});
+    public static final BitSet FOLLOW_fourexpr_in_comparecondition419 = new BitSet(new long[]{0x0000000000000008L});
+    public Map<String, Boolean> varDict = new HashMap<String, Boolean>();
+
+    public ComputeEngineScanner(TreeNodeStream input) {
+        this(input, new RecognizerSharedState());
+    }
+
+    public ComputeEngineScanner(TreeNodeStream input, RecognizerSharedState state) {
+        super(input, state);
+
+    }
+
+    @Override
+    public String[] getTokenNames() {
+        return ComputeEngineScanner.tokenNames;
+    }
+
+    @Override
+    public String getGrammarFileName() {
+        return "ComputeEngineScanner.g";
+    }
+
+    private void AddVar(String var) {
+        if (!this.varDict.containsKey(var)) {
+            this.varDict.put(var, true);
+        }
+    }
+
+    // $ANTLR start "prog"
+    // ComputeEngineScanner.g:29:1: prog : (a= expr ) ;
+    public final void prog() throws RecognitionException {
+        try {
+            // ComputeEngineScanner.g:30:2: ( (a= expr ) )
+            // ComputeEngineScanner.g:30:4: (a= expr )
+            {
+                // ComputeEngineScanner.g:30:4: (a= expr )
+                // ComputeEngineScanner.g:30:5: a= expr
+                {
+                    pushFollow(FOLLOW_expr_in_prog60);
+                    expr();
+
+                    state._fsp--;
+
+
+                }
+
+
+            }
+
+        } catch (RecognitionException re) {
+            reportError(re);
+            recover(input, re);
+        } finally {
+        }
+        return;
+    }
+
+    // $ANTLR start "expr"
+    // ComputeEngineScanner.g:33:1: expr : ( (a= fourexpr ) | (a= ifcondition ) );
+    public final void expr() throws RecognitionException {
+        try {
+            // ComputeEngineScanner.g:34:2: ( (a= fourexpr ) | (a= ifcondition ) )
+            int alt1 = 2;
+            int LA1_0 = input.LA(1);
+
+            if ((LA1_0 == IFWRAPPER || (LA1_0 >= NUMBER && LA1_0 <= F2) || (LA1_0 >= 12 && LA1_0 <= 15))) {
+                alt1 = 1;
+            } else if ((LA1_0 == 18)) {
+                alt1 = 2;
+            } else {
+                NoViableAltException nvae =
+                        new NoViableAltException("", 1, 0, input);
+
+                throw nvae;
+            }
+            switch (alt1) {
+                case 1:
+                    // ComputeEngineScanner.g:34:4: (a= fourexpr )
+                {
+                    // ComputeEngineScanner.g:34:4: (a= fourexpr )
+                    // ComputeEngineScanner.g:34:5: a= fourexpr
+                    {
+                        pushFollow(FOLLOW_fourexpr_in_expr76);
+                        fourexpr();
+
+                        state._fsp--;
+
+
+                    }
+
+
+                }
+                break;
+                case 2:
+                    // ComputeEngineScanner.g:35:4: (a= ifcondition )
+                {
+                    // ComputeEngineScanner.g:35:4: (a= ifcondition )
+                    // ComputeEngineScanner.g:35:5: a= ifcondition
+                    {
+                        pushFollow(FOLLOW_ifcondition_in_expr85);
+                        ifcondition();
+
+                        state._fsp--;
+
+
+                    }
+
+
+                }
+                break;
+                default:
+            }
+        } catch (RecognitionException re) {
+            reportError(re);
+            recover(input, re);
+        } finally {
+        }
+        return;
+    }
+
+    // $ANTLR start "fourexpr"
+    // ComputeEngineScanner.g:38:1: fourexpr : ( ^( '+' a= fourexpr b= fourexpr ) | ^( '-' a= fourexpr b= fourexpr ) | ^( '*' a= fourexpr b= fourexpr ) | ^( '/' a= fourexpr b= fourexpr ) | ID | F0 | ^( F1 a= fourexpr ) | ^( F2 a= fourexpr b= fourexpr ) | NUMBER | ^( IFWRAPPER a= ifcondition ) );
+    public final void fourexpr() throws RecognitionException {
+        CommonTree ID1 = null;
+
+        try {
+            // ComputeEngineScanner.g:39:2: ( ^( '+' a= fourexpr b= fourexpr ) | ^( '-' a= fourexpr b= fourexpr ) | ^( '*' a= fourexpr b= fourexpr ) | ^( '/' a= fourexpr b= fourexpr ) | ID | F0 | ^( F1 a= fourexpr ) | ^( F2 a= fourexpr b= fourexpr ) | NUMBER | ^( IFWRAPPER a= ifcondition ) )
+            int alt2 = 10;
+            switch (input.LA(1)) {
+                case 12: {
+                    alt2 = 1;
+                }
+                break;
+                case 13: {
+                    alt2 = 2;
+                }
+                break;
+                case 14: {
+                    alt2 = 3;
+                }
+                break;
+                case 15: {
+                    alt2 = 4;
+                }
+                break;
+                case ID: {
+                    alt2 = 5;
+                }
+                break;
+                case F0: {
+                    alt2 = 6;
+                }
+                break;
+                case F1: {
+                    alt2 = 7;
+                }
+                break;
+                case F2: {
+                    alt2 = 8;
+                }
+                break;
+                case NUMBER: {
+                    alt2 = 9;
+                }
+                break;
+                case IFWRAPPER: {
+                    alt2 = 10;
+                }
+                break;
+                default:
+                    NoViableAltException nvae =
+                            new NoViableAltException("", 2, 0, input);
+
+                    throw nvae;
+            }
+
+            switch (alt2) {
+                case 1:
+                    // ComputeEngineScanner.g:39:4: ^( '+' a= fourexpr b= fourexpr )
+                {
+                    match(input, 12, FOLLOW_12_in_fourexpr98);
+
+                    match(input, Token.DOWN, null);
+                    pushFollow(FOLLOW_fourexpr_in_fourexpr102);
+                    fourexpr();
+
+                    state._fsp--;
+
+                    pushFollow(FOLLOW_fourexpr_in_fourexpr106);
+                    fourexpr();
+
+                    state._fsp--;
+
+
+                    match(input, Token.UP, null);
+
+                }
+                break;
+                case 2:
+                    // ComputeEngineScanner.g:40:4: ^( '-' a= fourexpr b= fourexpr )
+                {
+                    match(input, 13, FOLLOW_13_in_fourexpr113);
+
+                    match(input, Token.DOWN, null);
+                    pushFollow(FOLLOW_fourexpr_in_fourexpr117);
+                    fourexpr();
+
+                    state._fsp--;
+
+                    pushFollow(FOLLOW_fourexpr_in_fourexpr121);
+                    fourexpr();
+
+                    state._fsp--;
+
+
+                    match(input, Token.UP, null);
+
+                }
+                break;
+                case 3:
+                    // ComputeEngineScanner.g:41:4: ^( '*' a= fourexpr b= fourexpr )
+                {
+                    match(input, 14, FOLLOW_14_in_fourexpr128);
+
+                    match(input, Token.DOWN, null);
+                    pushFollow(FOLLOW_fourexpr_in_fourexpr132);
+                    fourexpr();
+
+                    state._fsp--;
+
+                    pushFollow(FOLLOW_fourexpr_in_fourexpr136);
+                    fourexpr();
+
+                    state._fsp--;
+
+
+                    match(input, Token.UP, null);
+
+                }
+                break;
+                case 4:
+                    // ComputeEngineScanner.g:42:4: ^( '/' a= fourexpr b= fourexpr )
+                {
+                    match(input, 15, FOLLOW_15_in_fourexpr143);
+
+                    match(input, Token.DOWN, null);
+                    pushFollow(FOLLOW_fourexpr_in_fourexpr147);
+                    fourexpr();
+
+                    state._fsp--;
+
+                    pushFollow(FOLLOW_fourexpr_in_fourexpr151);
+                    fourexpr();
+
+                    state._fsp--;
+
+
+                    match(input, Token.UP, null);
+
+                }
+                break;
+                case 5:
+                    // ComputeEngineScanner.g:43:4: ID
+                {
+                    ID1 = (CommonTree) match(input, ID, FOLLOW_ID_in_fourexpr157);
+                    this.AddVar((ID1 != null ? ID1.getText() : null));
+
+                }
+                break;
+                case 6:
+                    // ComputeEngineScanner.g:44:4: F0
+                {
+                    match(input, F0, FOLLOW_F0_in_fourexpr164);
+
+                }
+                break;
+                case 7:
+                    // ComputeEngineScanner.g:45:4: ^( F1 a= fourexpr )
+                {
+                    match(input, F1, FOLLOW_F1_in_fourexpr170);
+
+                    match(input, Token.DOWN, null);
+                    pushFollow(FOLLOW_fourexpr_in_fourexpr174);
+                    fourexpr();
+
+                    state._fsp--;
+
+
+                    match(input, Token.UP, null);
+
+                }
+                break;
+                case 8:
+                    // ComputeEngineScanner.g:46:4: ^( F2 a= fourexpr b= fourexpr )
+                {
+                    match(input, F2, FOLLOW_F2_in_fourexpr181);
+
+                    match(input, Token.DOWN, null);
+                    pushFollow(FOLLOW_fourexpr_in_fourexpr185);
+                    fourexpr();
+
+                    state._fsp--;
+
+                    pushFollow(FOLLOW_fourexpr_in_fourexpr189);
+                    fourexpr();
+
+                    state._fsp--;
+
+
+                    match(input, Token.UP, null);
+
+                }
+                break;
+                case 9:
+                    // ComputeEngineScanner.g:47:4: NUMBER
+                {
+                    match(input, NUMBER, FOLLOW_NUMBER_in_fourexpr195);
+
+                }
+                break;
+                case 10:
+                    // ComputeEngineScanner.g:48:4: ^( IFWRAPPER a= ifcondition )
+                {
+                    match(input, IFWRAPPER, FOLLOW_IFWRAPPER_in_fourexpr201);
+
+                    match(input, Token.DOWN, null);
+                    pushFollow(FOLLOW_ifcondition_in_fourexpr205);
+                    ifcondition();
+
+                    state._fsp--;
+
+
+                    match(input, Token.UP, null);
+
+                }
+                break;
+                default:
+            }
+        } catch (RecognitionException re) {
+            reportError(re);
+            recover(input, re);
+        } finally {
+        }
+        return;
+    }
+
+    // $ANTLR start "ifcondition"
+    // ComputeEngineScanner.g:51:1: ifcondition : ^( 'if' con= condition a= expr b= elseifcondition ) ;
+    public final void ifcondition() throws RecognitionException {
+        try {
+            // ComputeEngineScanner.g:52:2: ( ^( 'if' con= condition a= expr b= elseifcondition ) )
+            // ComputeEngineScanner.g:52:4: ^( 'if' con= condition a= expr b= elseifcondition )
+            {
+                match(input, 18, FOLLOW_18_in_ifcondition219);
+
+                match(input, Token.DOWN, null);
+                pushFollow(FOLLOW_condition_in_ifcondition223);
+                condition();
+
+                state._fsp--;
+
+                pushFollow(FOLLOW_expr_in_ifcondition227);
+                expr();
+
+                state._fsp--;
+
+                pushFollow(FOLLOW_elseifcondition_in_ifcondition231);
+                elseifcondition();
+
+                state._fsp--;
+
+
+                match(input, Token.UP, null);
+
+            }
+
+        } catch (RecognitionException re) {
+            reportError(re);
+            recover(input, re);
+        } finally {
+        }
+        return;
+    }
+
+    // $ANTLR start "elseifcondition"
+    // ComputeEngineScanner.g:55:1: elseifcondition : ( ^( 'elseif' con= condition a= expr b= elseifcondition ) | ^( 'else' a= expr ) );
+    public final void elseifcondition() throws RecognitionException {
+        try {
+            // ComputeEngineScanner.g:56:2: ( ^( 'elseif' con= condition a= expr b= elseifcondition ) | ^( 'else' a= expr ) )
+            int alt3 = 2;
+            int LA3_0 = input.LA(1);
+
+            if ((LA3_0 == 21)) {
+                alt3 = 1;
+            } else if ((LA3_0 == 22)) {
+                alt3 = 2;
+            } else {
+                NoViableAltException nvae =
+                        new NoViableAltException("", 3, 0, input);
+
+                throw nvae;
+            }
+            switch (alt3) {
+                case 1:
+                    // ComputeEngineScanner.g:56:4: ^( 'elseif' con= condition a= expr b= elseifcondition )
+                {
+                    match(input, 21, FOLLOW_21_in_elseifcondition244);
+
+                    match(input, Token.DOWN, null);
+                    pushFollow(FOLLOW_condition_in_elseifcondition248);
+                    condition();
+
+                    state._fsp--;
+
+                    pushFollow(FOLLOW_expr_in_elseifcondition252);
+                    expr();
+
+                    state._fsp--;
+
+                    pushFollow(FOLLOW_elseifcondition_in_elseifcondition256);
+                    elseifcondition();
+
+                    state._fsp--;
+
+
+                    match(input, Token.UP, null);
+
+                }
+                break;
+                case 2:
+                    // ComputeEngineScanner.g:57:4: ^( 'else' a= expr )
+                {
+                    match(input, 22, FOLLOW_22_in_elseifcondition263);
+
+                    match(input, Token.DOWN, null);
+                    pushFollow(FOLLOW_expr_in_elseifcondition267);
+                    expr();
+
+                    state._fsp--;
+
+
+                    match(input, Token.UP, null);
+
+                }
+                break;
+                default:
+            }
+        } catch (RecognitionException re) {
+            reportError(re);
+            recover(input, re);
+        } finally {
+        }
+        return;
+    }
+
+    // $ANTLR start "condition"
+    // ComputeEngineScanner.g:60:1: condition : ( ^( '&&' a= condition b= condition ) | ^( '||' a= condition b= condition ) | ^( '!' a= condition ) | (a= comparecondition ) );
+    public final void condition() throws RecognitionException {
+        try {
+            // ComputeEngineScanner.g:61:2: ( ^( '&&' a= condition b= condition ) | ^( '||' a= condition b= condition ) | ^( '!' a= condition ) | (a= comparecondition ) )
+            int alt4 = 4;
+            switch (input.LA(1)) {
+                case 24: {
+                    alt4 = 1;
+                }
+                break;
+                case 23: {
+                    alt4 = 2;
+                }
+                break;
+                case 25: {
+                    alt4 = 3;
+                }
+                break;
+                case 27:
+                case 28:
+                case 29:
+                case 30:
+                case 31:
+                case 32: {
+                    alt4 = 4;
+                }
+                break;
+                default:
+                    NoViableAltException nvae =
+                            new NoViableAltException("", 4, 0, input);
+
+                    throw nvae;
+            }
+
+            switch (alt4) {
+                case 1:
+                    // ComputeEngineScanner.g:61:4: ^( '&&' a= condition b= condition )
+                {
+                    match(input, 24, FOLLOW_24_in_condition280);
+
+                    match(input, Token.DOWN, null);
+                    pushFollow(FOLLOW_condition_in_condition284);
+                    condition();
+
+                    state._fsp--;
+
+                    pushFollow(FOLLOW_condition_in_condition288);
+                    condition();
+
+                    state._fsp--;
+
+
+                    match(input, Token.UP, null);
+
+                }
+                break;
+                case 2:
+                    // ComputeEngineScanner.g:62:4: ^( '||' a= condition b= condition )
+                {
+                    match(input, 23, FOLLOW_23_in_condition295);
+
+                    match(input, Token.DOWN, null);
+                    pushFollow(FOLLOW_condition_in_condition299);
+                    condition();
+
+                    state._fsp--;
+
+                    pushFollow(FOLLOW_condition_in_condition303);
+                    condition();
+
+                    state._fsp--;
+
+
+                    match(input, Token.UP, null);
+
+                }
+                break;
+                case 3:
+                    // ComputeEngineScanner.g:63:4: ^( '!' a= condition )
+                {
+                    match(input, 25, FOLLOW_25_in_condition310);
+
+                    match(input, Token.DOWN, null);
+                    pushFollow(FOLLOW_condition_in_condition314);
+                    condition();
+
+                    state._fsp--;
+
+
+                    match(input, Token.UP, null);
+
+                }
+                break;
+                case 4:
+                    // ComputeEngineScanner.g:64:4: (a= comparecondition )
+                {
+                    // ComputeEngineScanner.g:64:4: (a= comparecondition )
+                    // ComputeEngineScanner.g:64:5: a= comparecondition
+                    {
+                        pushFollow(FOLLOW_comparecondition_in_condition323);
+                        comparecondition();
+
+                        state._fsp--;
+
+
+                    }
+
+
+                }
+                break;
+                default:
+            }
+        } catch (RecognitionException re) {
+            reportError(re);
+            recover(input, re);
+        } finally {
+        }
+        return;
+    }
+
+    // $ANTLR start "comparecondition"
+    // ComputeEngineScanner.g:67:1: comparecondition : ( ^( '<' a= fourexpr b= fourexpr ) | ^( '<=' a= fourexpr b= fourexpr ) | ^( '>' a= fourexpr b= fourexpr ) | ^( '>=' a= fourexpr b= fourexpr ) | ^( '==' a= fourexpr b= fourexpr ) | ^( '!=' a= fourexpr b= fourexpr ) );
+    public final void comparecondition() throws RecognitionException {
+        try {
+            // ComputeEngineScanner.g:68:2: ( ^( '<' a= fourexpr b= fourexpr ) | ^( '<=' a= fourexpr b= fourexpr ) | ^( '>' a= fourexpr b= fourexpr ) | ^( '>=' a= fourexpr b= fourexpr ) | ^( '==' a= fourexpr b= fourexpr ) | ^( '!=' a= fourexpr b= fourexpr ) )
+            int alt5 = 6;
+            switch (input.LA(1)) {
+                case 27: {
+                    alt5 = 1;
+                }
+                break;
+                case 28: {
+                    alt5 = 2;
+                }
+                break;
+                case 29: {
+                    alt5 = 3;
+                }
+                break;
+                case 30: {
+                    alt5 = 4;
+                }
+                break;
+                case 31: {
+                    alt5 = 5;
+                }
+                break;
+                case 32: {
+                    alt5 = 6;
+                }
+                break;
+                default:
+                    NoViableAltException nvae =
+                            new NoViableAltException("", 5, 0, input);
+
+                    throw nvae;
+            }
+
+            switch (alt5) {
+                case 1:
+                    // ComputeEngineScanner.g:68:4: ^( '<' a= fourexpr b= fourexpr )
+                {
+                    match(input, 27, FOLLOW_27_in_comparecondition336);
+
+                    match(input, Token.DOWN, null);
+                    pushFollow(FOLLOW_fourexpr_in_comparecondition340);
+                    fourexpr();
+
+                    state._fsp--;
+
+                    pushFollow(FOLLOW_fourexpr_in_comparecondition344);
+                    fourexpr();
+
+                    state._fsp--;
+
+
+                    match(input, Token.UP, null);
+
+                }
+                break;
+                case 2:
+                    // ComputeEngineScanner.g:69:4: ^( '<=' a= fourexpr b= fourexpr )
+                {
+                    match(input, 28, FOLLOW_28_in_comparecondition351);
+
+                    match(input, Token.DOWN, null);
+                    pushFollow(FOLLOW_fourexpr_in_comparecondition355);
+                    fourexpr();
+
+                    state._fsp--;
+
+                    pushFollow(FOLLOW_fourexpr_in_comparecondition359);
+                    fourexpr();
+
+                    state._fsp--;
+
+
+                    match(input, Token.UP, null);
+
+                }
+                break;
+                case 3:
+                    // ComputeEngineScanner.g:70:4: ^( '>' a= fourexpr b= fourexpr )
+                {
+                    match(input, 29, FOLLOW_29_in_comparecondition366);
+
+                    match(input, Token.DOWN, null);
+                    pushFollow(FOLLOW_fourexpr_in_comparecondition370);
+                    fourexpr();
+
+                    state._fsp--;
+
+                    pushFollow(FOLLOW_fourexpr_in_comparecondition374);
+                    fourexpr();
+
+                    state._fsp--;
+
+
+                    match(input, Token.UP, null);
+
+                }
+                break;
+                case 4:
+                    // ComputeEngineScanner.g:71:4: ^( '>=' a= fourexpr b= fourexpr )
+                {
+                    match(input, 30, FOLLOW_30_in_comparecondition381);
+
+                    match(input, Token.DOWN, null);
+                    pushFollow(FOLLOW_fourexpr_in_comparecondition385);
+                    fourexpr();
+
+                    state._fsp--;
+
+                    pushFollow(FOLLOW_fourexpr_in_comparecondition389);
+                    fourexpr();
+
+                    state._fsp--;
+
+
+                    match(input, Token.UP, null);
+
+                }
+                break;
+                case 5:
+                    // ComputeEngineScanner.g:72:4: ^( '==' a= fourexpr b= fourexpr )
+                {
+                    match(input, 31, FOLLOW_31_in_comparecondition396);
+
+                    match(input, Token.DOWN, null);
+                    pushFollow(FOLLOW_fourexpr_in_comparecondition400);
+                    fourexpr();
+
+                    state._fsp--;
+
+                    pushFollow(FOLLOW_fourexpr_in_comparecondition404);
+                    fourexpr();
+
+                    state._fsp--;
+
+
+                    match(input, Token.UP, null);
+
+                }
+                break;
+                case 6:
+                    // ComputeEngineScanner.g:73:4: ^( '!=' a= fourexpr b= fourexpr )
+                {
+                    match(input, 32, FOLLOW_32_in_comparecondition411);
+
+                    match(input, Token.DOWN, null);
+                    pushFollow(FOLLOW_fourexpr_in_comparecondition415);
+                    fourexpr();
+
+                    state._fsp--;
+
+                    pushFollow(FOLLOW_fourexpr_in_comparecondition419);
+                    fourexpr();
+
+                    state._fsp--;
+
+
+                    match(input, Token.UP, null);
+
+                }
+                break;
+
+            }
+        } catch (RecognitionException re) {
+            reportError(re);
+            recover(input, re);
+        } finally {
+        }
+        return;
+    }
+
+}

+ 961 - 0
src/main/java/com/sagacloud/parser/simulator/ComputeEngineWalker.java

@@ -0,0 +1,961 @@
+// $ANTLR 3.1 ComputeEngineWalker.g 2020-05-14 10:30:08
+
+package com.sagacloud.parser.simulator;
+
+import com.sagacloud.util.math.MathUtil;
+import org.antlr.runtime.*;
+import org.antlr.runtime.tree.CommonTree;
+import org.antlr.runtime.tree.TreeNodeStream;
+import org.antlr.runtime.tree.TreeParser;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class ComputeEngineWalker extends TreeParser {
+    public static final String[] tokenNames = new String[]{
+            "<invalid>", "<EOR>", "<DOWN>", "<UP>", "IFWRAPPER", "NEWLINE", "NUMBER", "ID", "F0", "F1", "F2", "WS", "'+'", "'-'", "'*'", "'/'", "'('", "')'", "'if'", "'{'", "'}'", "'elseif'", "'else'", "'||'", "'&&'", "'!'", "'['", "'<'", "'<='", "'>'", "'>='", "'=='", "'!='", "']'", "','"
+    };
+    public static final int T__29 = 29;
+    public static final int T__28 = 28;
+    public static final int T__27 = 27;
+    public static final int T__26 = 26;
+    public static final int T__25 = 25;
+    public static final int T__24 = 24;
+    public static final int T__23 = 23;
+    public static final int T__22 = 22;
+    public static final int T__21 = 21;
+    public static final int T__20 = 20;
+    public static final int NUMBER = 6;
+    public static final int ID = 7;
+    public static final int EOF = -1;
+    public static final int T__30 = 30;
+    public static final int T__19 = 19;
+    public static final int T__31 = 31;
+    public static final int T__32 = 32;
+    public static final int T__16 = 16;
+    public static final int T__33 = 33;
+    public static final int WS = 11;
+    public static final int T__15 = 15;
+    public static final int T__34 = 34;
+    public static final int T__18 = 18;
+    public static final int NEWLINE = 5;
+    public static final int T__17 = 17;
+    public static final int T__12 = 12;
+    public static final int T__14 = 14;
+    public static final int T__13 = 13;
+    public static final int F1 = 9;
+    public static final int F0 = 8;
+    public static final int F2 = 10;
+    public static final int IFWRAPPER = 4;
+
+    // delegates
+    // delegators
+    public static final BitSet FOLLOW_expr_in_prog64 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_fourexpr_in_expr86 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ifcondition_in_expr97 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_12_in_fourexpr116 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_fourexpr_in_fourexpr120 = new BitSet(new long[]{0x000000000000F7D0L});
+    public static final BitSet FOLLOW_fourexpr_in_fourexpr124 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_13_in_fourexpr133 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_fourexpr_in_fourexpr137 = new BitSet(new long[]{0x000000000000F7D0L});
+    // $ANTLR end "prog"
+    public static final BitSet FOLLOW_fourexpr_in_fourexpr141 = new BitSet(new long[]{0x0000000000000008L});
+    // $ANTLR end "expr"
+    public static final BitSet FOLLOW_14_in_fourexpr150 = new BitSet(new long[]{0x0000000000000004L});
+    // $ANTLR end "fourexpr"
+    public static final BitSet FOLLOW_fourexpr_in_fourexpr154 = new BitSet(new long[]{0x000000000000F7D0L});
+    // $ANTLR end "ifcondition"
+    public static final BitSet FOLLOW_fourexpr_in_fourexpr158 = new BitSet(new long[]{0x0000000000000008L});
+    // $ANTLR end "elseifcondition"
+    public static final BitSet FOLLOW_15_in_fourexpr167 = new BitSet(new long[]{0x0000000000000004L});
+    // $ANTLR end "condition"
+    public static final BitSet FOLLOW_fourexpr_in_fourexpr171 = new BitSet(new long[]{0x000000000000F7D0L});
+    // $ANTLR end "comparecondition"
+
+    // Delegated rules
+    public static final BitSet FOLLOW_fourexpr_in_fourexpr175 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_ID_in_fourexpr183 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_F0_in_fourexpr190 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_F1_in_fourexpr198 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_fourexpr_in_fourexpr202 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_F2_in_fourexpr211 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_fourexpr_in_fourexpr215 = new BitSet(new long[]{0x000000000000F7D0L});
+    public static final BitSet FOLLOW_fourexpr_in_fourexpr219 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_NUMBER_in_fourexpr227 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_IFWRAPPER_in_fourexpr236 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_ifcondition_in_fourexpr240 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_18_in_ifcondition260 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_condition_in_ifcondition264 = new BitSet(new long[]{0x000000000004F7D0L});
+    public static final BitSet FOLLOW_expr_in_ifcondition268 = new BitSet(new long[]{0x0000000000600000L});
+    public static final BitSet FOLLOW_elseifcondition_in_ifcondition272 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_21_in_elseifcondition291 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_condition_in_elseifcondition295 = new BitSet(new long[]{0x000000000004F7D0L});
+    public static final BitSet FOLLOW_expr_in_elseifcondition299 = new BitSet(new long[]{0x0000000000600000L});
+    public static final BitSet FOLLOW_elseifcondition_in_elseifcondition303 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_22_in_elseifcondition312 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_expr_in_elseifcondition316 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_24_in_condition335 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_condition_in_condition339 = new BitSet(new long[]{0x00000001FB800000L});
+    public static final BitSet FOLLOW_condition_in_condition343 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_23_in_condition352 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_condition_in_condition356 = new BitSet(new long[]{0x00000001FB800000L});
+    public static final BitSet FOLLOW_condition_in_condition360 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_25_in_condition369 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_condition_in_condition373 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_comparecondition_in_condition385 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_27_in_comparecondition404 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_fourexpr_in_comparecondition408 = new BitSet(new long[]{0x000000000000F7D0L});
+    public static final BitSet FOLLOW_fourexpr_in_comparecondition412 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_28_in_comparecondition421 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_fourexpr_in_comparecondition425 = new BitSet(new long[]{0x000000000000F7D0L});
+    public static final BitSet FOLLOW_fourexpr_in_comparecondition429 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_29_in_comparecondition438 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_fourexpr_in_comparecondition442 = new BitSet(new long[]{0x000000000000F7D0L});
+    public static final BitSet FOLLOW_fourexpr_in_comparecondition446 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_30_in_comparecondition455 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_fourexpr_in_comparecondition459 = new BitSet(new long[]{0x000000000000F7D0L});
+    public static final BitSet FOLLOW_fourexpr_in_comparecondition463 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_31_in_comparecondition472 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_fourexpr_in_comparecondition476 = new BitSet(new long[]{0x000000000000F7D0L});
+    public static final BitSet FOLLOW_fourexpr_in_comparecondition480 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_32_in_comparecondition489 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_fourexpr_in_comparecondition493 = new BitSet(new long[]{0x000000000000F7D0L});
+    public static final BitSet FOLLOW_fourexpr_in_comparecondition497 = new BitSet(new long[]{0x0000000000000008L});
+    private final Map<String, Double> varValueMap = new HashMap<String, Double>();
+
+    public ComputeEngineWalker(TreeNodeStream input) {
+        this(input, new RecognizerSharedState());
+    }
+
+    public ComputeEngineWalker(TreeNodeStream input, RecognizerSharedState state) {
+        super(input, state);
+
+    }
+
+    @Override
+    public String[] getTokenNames() {
+        return ComputeEngineWalker.tokenNames;
+    }
+
+    @Override
+    public String getGrammarFileName() {
+        return "ComputeEngineWalker.g";
+    }
+
+    public void clear() {
+        this.varValueMap.clear();
+    }
+
+    public void put(String var, double value) {
+        this.varValueMap.put(var, value);
+    }
+
+    // $ANTLR start "prog"
+    // ComputeEngineWalker.g:30:1: prog returns [double value] : (a= expr ) ;
+    public final double prog() throws RecognitionException {
+        double value = 0.0;
+
+        double a = 0.0;
+
+
+        try {
+            // ComputeEngineWalker.g:31:2: ( (a= expr ) )
+            // ComputeEngineWalker.g:31:4: (a= expr )
+            {
+                // ComputeEngineWalker.g:31:4: (a= expr )
+                // ComputeEngineWalker.g:31:5: a= expr
+                {
+                    pushFollow(FOLLOW_expr_in_prog64);
+                    a = expr();
+
+                    state._fsp--;
+
+
+                }
+
+                value = a;
+
+            }
+
+        } catch (RecognitionException re) {
+            reportError(re);
+            recover(input, re);
+        } finally {
+        }
+        return value;
+    }
+
+    // $ANTLR start "expr"
+    // ComputeEngineWalker.g:34:1: expr returns [double value] : ( (a= fourexpr ) | (a= ifcondition ) );
+    public final double expr() throws RecognitionException {
+        double value = 0.0;
+
+        double a = 0.0;
+
+
+        try {
+            // ComputeEngineWalker.g:35:2: ( (a= fourexpr ) | (a= ifcondition ) )
+            int alt1 = 2;
+            int LA1_0 = input.LA(1);
+
+            if ((LA1_0 == IFWRAPPER || (LA1_0 >= NUMBER && LA1_0 <= F2) || (LA1_0 >= 12 && LA1_0 <= 15))) {
+                alt1 = 1;
+            } else if ((LA1_0 == 18)) {
+                alt1 = 2;
+            } else {
+                NoViableAltException nvae =
+                        new NoViableAltException("", 1, 0, input);
+
+                throw nvae;
+            }
+            switch (alt1) {
+                case 1:
+                    // ComputeEngineWalker.g:35:4: (a= fourexpr )
+                {
+                    // ComputeEngineWalker.g:35:4: (a= fourexpr )
+                    // ComputeEngineWalker.g:35:5: a= fourexpr
+                    {
+                        pushFollow(FOLLOW_fourexpr_in_expr86);
+                        a = fourexpr();
+
+                        state._fsp--;
+
+
+                    }
+
+                    value = a;
+
+                }
+                break;
+                case 2:
+                    // ComputeEngineWalker.g:36:4: (a= ifcondition )
+                {
+                    // ComputeEngineWalker.g:36:4: (a= ifcondition )
+                    // ComputeEngineWalker.g:36:5: a= ifcondition
+                    {
+                        pushFollow(FOLLOW_ifcondition_in_expr97);
+                        a = ifcondition();
+
+                        state._fsp--;
+
+
+                    }
+
+                    value = a;
+
+                }
+                break;
+                default:
+            }
+        } catch (RecognitionException re) {
+            reportError(re);
+            recover(input, re);
+        } finally {
+        }
+        return value;
+    }
+
+    // $ANTLR start "fourexpr"
+    // ComputeEngineWalker.g:39:1: fourexpr returns [double value] : ( ^( '+' a= fourexpr b= fourexpr ) | ^( '-' a= fourexpr b= fourexpr ) | ^( '*' a= fourexpr b= fourexpr ) | ^( '/' a= fourexpr b= fourexpr ) | ID | F0 | ^( F1 a= fourexpr ) | ^( F2 a= fourexpr b= fourexpr ) | NUMBER | ^( IFWRAPPER a= ifcondition ) );
+    public final double fourexpr() throws RecognitionException {
+        double value = 0.0;
+
+        CommonTree ID1 = null;
+        CommonTree F02 = null;
+        CommonTree F13 = null;
+        CommonTree F24 = null;
+        CommonTree NUMBER5 = null;
+        double a = 0.0;
+
+        double b = 0.0;
+
+
+        try {
+            // ComputeEngineWalker.g:40:2: ( ^( '+' a= fourexpr b= fourexpr ) | ^( '-' a= fourexpr b= fourexpr ) | ^( '*' a= fourexpr b= fourexpr ) | ^( '/' a= fourexpr b= fourexpr ) | ID | F0 | ^( F1 a= fourexpr ) | ^( F2 a= fourexpr b= fourexpr ) | NUMBER | ^( IFWRAPPER a= ifcondition ) )
+            int alt2 = 10;
+            switch (input.LA(1)) {
+                case 12: {
+                    alt2 = 1;
+                }
+                break;
+                case 13: {
+                    alt2 = 2;
+                }
+                break;
+                case 14: {
+                    alt2 = 3;
+                }
+                break;
+                case 15: {
+                    alt2 = 4;
+                }
+                break;
+                case ID: {
+                    alt2 = 5;
+                }
+                break;
+                case F0: {
+                    alt2 = 6;
+                }
+                break;
+                case F1: {
+                    alt2 = 7;
+                }
+                break;
+                case F2: {
+                    alt2 = 8;
+                }
+                break;
+                case NUMBER: {
+                    alt2 = 9;
+                }
+                break;
+                case IFWRAPPER: {
+                    alt2 = 10;
+                }
+                break;
+                default:
+                    NoViableAltException nvae =
+                            new NoViableAltException("", 2, 0, input);
+
+                    throw nvae;
+            }
+
+            switch (alt2) {
+                case 1:
+                    // ComputeEngineWalker.g:40:4: ^( '+' a= fourexpr b= fourexpr )
+                {
+                    match(input, 12, FOLLOW_12_in_fourexpr116);
+
+                    match(input, Token.DOWN, null);
+                    pushFollow(FOLLOW_fourexpr_in_fourexpr120);
+                    a = fourexpr();
+
+                    state._fsp--;
+
+                    pushFollow(FOLLOW_fourexpr_in_fourexpr124);
+                    b = fourexpr();
+
+                    state._fsp--;
+
+
+                    match(input, Token.UP, null);
+                    value = a + b;
+
+                }
+                break;
+                case 2:
+                    // ComputeEngineWalker.g:41:4: ^( '-' a= fourexpr b= fourexpr )
+                {
+                    match(input, 13, FOLLOW_13_in_fourexpr133);
+
+                    match(input, Token.DOWN, null);
+                    pushFollow(FOLLOW_fourexpr_in_fourexpr137);
+                    a = fourexpr();
+
+                    state._fsp--;
+
+                    pushFollow(FOLLOW_fourexpr_in_fourexpr141);
+                    b = fourexpr();
+
+                    state._fsp--;
+
+
+                    match(input, Token.UP, null);
+                    value = a - b;
+
+                }
+                break;
+                case 3:
+                    // ComputeEngineWalker.g:42:4: ^( '*' a= fourexpr b= fourexpr )
+                {
+                    match(input, 14, FOLLOW_14_in_fourexpr150);
+
+                    match(input, Token.DOWN, null);
+                    pushFollow(FOLLOW_fourexpr_in_fourexpr154);
+                    a = fourexpr();
+
+                    state._fsp--;
+
+                    pushFollow(FOLLOW_fourexpr_in_fourexpr158);
+                    b = fourexpr();
+
+                    state._fsp--;
+
+
+                    match(input, Token.UP, null);
+                    value = a * b;
+
+                }
+                break;
+                case 4:
+                    // ComputeEngineWalker.g:43:4: ^( '/' a= fourexpr b= fourexpr )
+                {
+                    match(input, 15, FOLLOW_15_in_fourexpr167);
+
+                    match(input, Token.DOWN, null);
+                    pushFollow(FOLLOW_fourexpr_in_fourexpr171);
+                    a = fourexpr();
+
+                    state._fsp--;
+
+                    pushFollow(FOLLOW_fourexpr_in_fourexpr175);
+                    b = fourexpr();
+
+                    state._fsp--;
+
+
+                    match(input, Token.UP, null);
+                    value = a / b;
+
+                }
+                break;
+                case 5:
+                    // ComputeEngineWalker.g:44:4: ID
+                {
+                    ID1 = (CommonTree) match(input, ID, FOLLOW_ID_in_fourexpr183);
+                    value = this.varValueMap.get((ID1 != null ? ID1.getText() : null));
+
+                }
+                break;
+                case 6:
+                    // ComputeEngineWalker.g:45:4: F0
+                {
+                    F02 = (CommonTree) match(input, F0, FOLLOW_F0_in_fourexpr190);
+                    value = MathUtil.Instance().fun0p_value((F02 != null ? F02.getText() : null));
+
+                }
+                break;
+                case 7:
+                    // ComputeEngineWalker.g:46:4: ^( F1 a= fourexpr )
+                {
+                    F13 = (CommonTree) match(input, F1, FOLLOW_F1_in_fourexpr198);
+
+                    match(input, Token.DOWN, null);
+                    pushFollow(FOLLOW_fourexpr_in_fourexpr202);
+                    a = fourexpr();
+
+                    state._fsp--;
+
+
+                    match(input, Token.UP, null);
+                    value = MathUtil.Instance().fun1p_value((F13 != null ? F13.getText() : null), a);
+
+                }
+                break;
+                case 8:
+                    // ComputeEngineWalker.g:47:4: ^( F2 a= fourexpr b= fourexpr )
+                {
+                    F24 = (CommonTree) match(input, F2, FOLLOW_F2_in_fourexpr211);
+
+                    match(input, Token.DOWN, null);
+                    pushFollow(FOLLOW_fourexpr_in_fourexpr215);
+                    a = fourexpr();
+
+                    state._fsp--;
+
+                    pushFollow(FOLLOW_fourexpr_in_fourexpr219);
+                    b = fourexpr();
+
+                    state._fsp--;
+
+
+                    match(input, Token.UP, null);
+                    value = MathUtil.Instance().fun2p_value((F24 != null ? F24.getText() : null), a, b);
+
+                }
+                break;
+                case 9:
+                    // ComputeEngineWalker.g:48:4: NUMBER
+                {
+                    NUMBER5 = (CommonTree) match(input, NUMBER, FOLLOW_NUMBER_in_fourexpr227);
+                    value = Double.parseDouble((NUMBER5 != null ? NUMBER5.getText() : null));
+
+                }
+                break;
+                case 10:
+                    // ComputeEngineWalker.g:49:4: ^( IFWRAPPER a= ifcondition )
+                {
+                    match(input, IFWRAPPER, FOLLOW_IFWRAPPER_in_fourexpr236);
+
+                    match(input, Token.DOWN, null);
+                    pushFollow(FOLLOW_ifcondition_in_fourexpr240);
+                    a = ifcondition();
+
+                    state._fsp--;
+
+
+                    match(input, Token.UP, null);
+                    value = a;
+
+                }
+                break;
+                default:
+            }
+        } catch (RecognitionException re) {
+            reportError(re);
+            recover(input, re);
+        } finally {
+        }
+        return value;
+    }
+
+    // $ANTLR start "ifcondition"
+    // ComputeEngineWalker.g:52:1: ifcondition returns [double value] : ^( 'if' con= condition a= expr b= elseifcondition ) ;
+    public final double ifcondition() throws RecognitionException {
+        double value = 0.0;
+
+        boolean con = false;
+
+        double a = 0.0;
+
+        double b = 0.0;
+
+
+        try {
+            // ComputeEngineWalker.g:53:2: ( ^( 'if' con= condition a= expr b= elseifcondition ) )
+            // ComputeEngineWalker.g:53:4: ^( 'if' con= condition a= expr b= elseifcondition )
+            {
+                match(input, 18, FOLLOW_18_in_ifcondition260);
+
+                match(input, Token.DOWN, null);
+                pushFollow(FOLLOW_condition_in_ifcondition264);
+                con = condition();
+
+                state._fsp--;
+
+                pushFollow(FOLLOW_expr_in_ifcondition268);
+                a = expr();
+
+                state._fsp--;
+
+                pushFollow(FOLLOW_elseifcondition_in_ifcondition272);
+                b = elseifcondition();
+
+                state._fsp--;
+
+
+                match(input, Token.UP, null);
+                if (con) {
+                    value = a;
+                } else {
+                    value = b;
+                }
+
+            }
+
+        } catch (RecognitionException re) {
+            reportError(re);
+            recover(input, re);
+        } finally {
+        }
+        return value;
+    }
+
+    // $ANTLR start "elseifcondition"
+    // ComputeEngineWalker.g:56:1: elseifcondition returns [double value] : ( ^( 'elseif' con= condition a= expr b= elseifcondition ) | ^( 'else' a= expr ) );
+    public final double elseifcondition() throws RecognitionException {
+        double value = 0.0;
+
+        boolean con = false;
+
+        double a = 0.0;
+
+        double b = 0.0;
+
+
+        try {
+            // ComputeEngineWalker.g:57:2: ( ^( 'elseif' con= condition a= expr b= elseifcondition ) | ^( 'else' a= expr ) )
+            int alt3 = 2;
+            int LA3_0 = input.LA(1);
+
+            if ((LA3_0 == 21)) {
+                alt3 = 1;
+            } else if ((LA3_0 == 22)) {
+                alt3 = 2;
+            } else {
+                NoViableAltException nvae =
+                        new NoViableAltException("", 3, 0, input);
+
+                throw nvae;
+            }
+            switch (alt3) {
+                case 1:
+                    // ComputeEngineWalker.g:57:4: ^( 'elseif' con= condition a= expr b= elseifcondition )
+                {
+                    match(input, 21, FOLLOW_21_in_elseifcondition291);
+
+                    match(input, Token.DOWN, null);
+                    pushFollow(FOLLOW_condition_in_elseifcondition295);
+                    con = condition();
+
+                    state._fsp--;
+
+                    pushFollow(FOLLOW_expr_in_elseifcondition299);
+                    a = expr();
+
+                    state._fsp--;
+
+                    pushFollow(FOLLOW_elseifcondition_in_elseifcondition303);
+                    b = elseifcondition();
+
+                    state._fsp--;
+
+
+                    match(input, Token.UP, null);
+                    if (con) {
+                        value = a;
+                    } else {
+                        value = b;
+                    }
+
+                }
+                break;
+                case 2:
+                    // ComputeEngineWalker.g:58:4: ^( 'else' a= expr )
+                {
+                    match(input, 22, FOLLOW_22_in_elseifcondition312);
+
+                    match(input, Token.DOWN, null);
+                    pushFollow(FOLLOW_expr_in_elseifcondition316);
+                    a = expr();
+
+                    state._fsp--;
+
+
+                    match(input, Token.UP, null);
+                    value = a;
+
+                }
+                break;
+                default:
+            }
+        } catch (RecognitionException re) {
+            reportError(re);
+            recover(input, re);
+        } finally {
+        }
+        return value;
+    }
+
+    // $ANTLR start "condition"
+    // ComputeEngineWalker.g:61:1: condition returns [boolean value] : ( ^( '&&' a= condition b= condition ) | ^( '||' a= condition b= condition ) | ^( '!' a= condition ) | (a= comparecondition ) );
+    public final boolean condition() throws RecognitionException {
+        boolean value = false;
+
+        boolean a = false;
+
+        boolean b = false;
+
+
+        try {
+            // ComputeEngineWalker.g:62:2: ( ^( '&&' a= condition b= condition ) | ^( '||' a= condition b= condition ) | ^( '!' a= condition ) | (a= comparecondition ) )
+            int alt4 = 4;
+            switch (input.LA(1)) {
+                case 24: {
+                    alt4 = 1;
+                }
+                break;
+                case 23: {
+                    alt4 = 2;
+                }
+                break;
+                case 25: {
+                    alt4 = 3;
+                }
+                break;
+                case 27:
+                case 28:
+                case 29:
+                case 30:
+                case 31:
+                case 32: {
+                    alt4 = 4;
+                }
+                break;
+                default:
+                    NoViableAltException nvae =
+                            new NoViableAltException("", 4, 0, input);
+
+                    throw nvae;
+            }
+
+            switch (alt4) {
+                case 1:
+                    // ComputeEngineWalker.g:62:4: ^( '&&' a= condition b= condition )
+                {
+                    match(input, 24, FOLLOW_24_in_condition335);
+
+                    match(input, Token.DOWN, null);
+                    pushFollow(FOLLOW_condition_in_condition339);
+                    a = condition();
+
+                    state._fsp--;
+
+                    pushFollow(FOLLOW_condition_in_condition343);
+                    b = condition();
+
+                    state._fsp--;
+
+
+                    match(input, Token.UP, null);
+                    value = a && b;
+
+                }
+                break;
+                case 2:
+                    // ComputeEngineWalker.g:63:4: ^( '||' a= condition b= condition )
+                {
+                    match(input, 23, FOLLOW_23_in_condition352);
+
+                    match(input, Token.DOWN, null);
+                    pushFollow(FOLLOW_condition_in_condition356);
+                    a = condition();
+
+                    state._fsp--;
+
+                    pushFollow(FOLLOW_condition_in_condition360);
+                    b = condition();
+
+                    state._fsp--;
+
+
+                    match(input, Token.UP, null);
+                    value = a || b;
+
+                }
+                break;
+                case 3:
+                    // ComputeEngineWalker.g:64:4: ^( '!' a= condition )
+                {
+                    match(input, 25, FOLLOW_25_in_condition369);
+
+                    match(input, Token.DOWN, null);
+                    pushFollow(FOLLOW_condition_in_condition373);
+                    a = condition();
+
+                    state._fsp--;
+
+
+                    match(input, Token.UP, null);
+                    value = !a;
+
+                }
+                break;
+                case 4:
+                    // ComputeEngineWalker.g:65:4: (a= comparecondition )
+                {
+                    // ComputeEngineWalker.g:65:4: (a= comparecondition )
+                    // ComputeEngineWalker.g:65:5: a= comparecondition
+                    {
+                        pushFollow(FOLLOW_comparecondition_in_condition385);
+                        a = comparecondition();
+
+                        state._fsp--;
+
+
+                    }
+
+                    value = a;
+
+                }
+                break;
+
+            }
+        } catch (RecognitionException re) {
+            reportError(re);
+            recover(input, re);
+        } finally {
+        }
+        return value;
+    }
+
+    // $ANTLR start "comparecondition"
+    // ComputeEngineWalker.g:68:1: comparecondition returns [boolean value] : ( ^( '<' a= fourexpr b= fourexpr ) | ^( '<=' a= fourexpr b= fourexpr ) | ^( '>' a= fourexpr b= fourexpr ) | ^( '>=' a= fourexpr b= fourexpr ) | ^( '==' a= fourexpr b= fourexpr ) | ^( '!=' a= fourexpr b= fourexpr ) );
+    public final boolean comparecondition() throws RecognitionException {
+        boolean value = false;
+
+        double a = 0.0;
+
+        double b = 0.0;
+
+
+        try {
+            // ComputeEngineWalker.g:69:2: ( ^( '<' a= fourexpr b= fourexpr ) | ^( '<=' a= fourexpr b= fourexpr ) | ^( '>' a= fourexpr b= fourexpr ) | ^( '>=' a= fourexpr b= fourexpr ) | ^( '==' a= fourexpr b= fourexpr ) | ^( '!=' a= fourexpr b= fourexpr ) )
+            int alt5 = 6;
+            switch (input.LA(1)) {
+                case 27: {
+                    alt5 = 1;
+                }
+                break;
+                case 28: {
+                    alt5 = 2;
+                }
+                break;
+                case 29: {
+                    alt5 = 3;
+                }
+                break;
+                case 30: {
+                    alt5 = 4;
+                }
+                break;
+                case 31: {
+                    alt5 = 5;
+                }
+                break;
+                case 32: {
+                    alt5 = 6;
+                }
+                break;
+                default:
+                    NoViableAltException nvae =
+                            new NoViableAltException("", 5, 0, input);
+
+                    throw nvae;
+            }
+
+            switch (alt5) {
+                case 1:
+                    // ComputeEngineWalker.g:69:4: ^( '<' a= fourexpr b= fourexpr )
+                {
+                    match(input, 27, FOLLOW_27_in_comparecondition404);
+
+                    match(input, Token.DOWN, null);
+                    pushFollow(FOLLOW_fourexpr_in_comparecondition408);
+                    a = fourexpr();
+
+                    state._fsp--;
+
+                    pushFollow(FOLLOW_fourexpr_in_comparecondition412);
+                    b = fourexpr();
+
+                    state._fsp--;
+
+
+                    match(input, Token.UP, null);
+                    value = MathUtil.Instance().cmp_value("<", a, b);
+
+                }
+                break;
+                case 2:
+                    // ComputeEngineWalker.g:70:4: ^( '<=' a= fourexpr b= fourexpr )
+                {
+                    match(input, 28, FOLLOW_28_in_comparecondition421);
+
+                    match(input, Token.DOWN, null);
+                    pushFollow(FOLLOW_fourexpr_in_comparecondition425);
+                    a = fourexpr();
+
+                    state._fsp--;
+
+                    pushFollow(FOLLOW_fourexpr_in_comparecondition429);
+                    b = fourexpr();
+
+                    state._fsp--;
+
+
+                    match(input, Token.UP, null);
+                    value = MathUtil.Instance().cmp_value("<=", a, b);
+
+                }
+                break;
+                case 3:
+                    // ComputeEngineWalker.g:71:4: ^( '>' a= fourexpr b= fourexpr )
+                {
+                    match(input, 29, FOLLOW_29_in_comparecondition438);
+
+                    match(input, Token.DOWN, null);
+                    pushFollow(FOLLOW_fourexpr_in_comparecondition442);
+                    a = fourexpr();
+
+                    state._fsp--;
+
+                    pushFollow(FOLLOW_fourexpr_in_comparecondition446);
+                    b = fourexpr();
+
+                    state._fsp--;
+
+
+                    match(input, Token.UP, null);
+                    value = MathUtil.Instance().cmp_value(">", a, b);
+
+                }
+                break;
+                case 4:
+                    // ComputeEngineWalker.g:72:4: ^( '>=' a= fourexpr b= fourexpr )
+                {
+                    match(input, 30, FOLLOW_30_in_comparecondition455);
+
+                    match(input, Token.DOWN, null);
+                    pushFollow(FOLLOW_fourexpr_in_comparecondition459);
+                    a = fourexpr();
+
+                    state._fsp--;
+
+                    pushFollow(FOLLOW_fourexpr_in_comparecondition463);
+                    b = fourexpr();
+
+                    state._fsp--;
+
+
+                    match(input, Token.UP, null);
+                    value = MathUtil.Instance().cmp_value(">=", a, b);
+
+                }
+                break;
+                case 5:
+                    // ComputeEngineWalker.g:73:4: ^( '==' a= fourexpr b= fourexpr )
+                {
+                    match(input, 31, FOLLOW_31_in_comparecondition472);
+
+                    match(input, Token.DOWN, null);
+                    pushFollow(FOLLOW_fourexpr_in_comparecondition476);
+                    a = fourexpr();
+
+                    state._fsp--;
+
+                    pushFollow(FOLLOW_fourexpr_in_comparecondition480);
+                    b = fourexpr();
+
+                    state._fsp--;
+
+
+                    match(input, Token.UP, null);
+                    value = MathUtil.Instance().cmp_value("==", a, b);
+
+                }
+                break;
+                case 6:
+                    // ComputeEngineWalker.g:74:4: ^( '!=' a= fourexpr b= fourexpr )
+                {
+                    match(input, 32, FOLLOW_32_in_comparecondition489);
+
+                    match(input, Token.DOWN, null);
+                    pushFollow(FOLLOW_fourexpr_in_comparecondition493);
+                    a = fourexpr();
+
+                    state._fsp--;
+
+                    pushFollow(FOLLOW_fourexpr_in_comparecondition497);
+                    b = fourexpr();
+
+                    state._fsp--;
+
+
+                    match(input, Token.UP, null);
+                    value = MathUtil.Instance().cmp_value("!=", a, b);
+
+                }
+                break;
+
+            }
+        } catch (RecognitionException re) {
+            reportError(re);
+            recover(input, re);
+        } finally {
+        }
+        return value;
+    }
+
+}

+ 133 - 0
src/main/java/com/sagacloud/parser/simulator/String2Grammar.java

@@ -0,0 +1,133 @@
+package com.sagacloud.parser.simulator;
+
+import com.sagacloud.util.compute_engine.core.GrammarCompare;
+import com.sagacloud.util.compute_engine.core.GrammarTreeNode;
+import com.sagacloud.util.math.MathUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.antlr.runtime.ANTLRInputStream;
+import org.antlr.runtime.CommonTokenStream;
+import org.antlr.runtime.tree.CommonTree;
+
+import java.io.ByteArrayInputStream;
+import java.util.ArrayList;
+import java.util.List;
+
+@Slf4j
+public class String2Grammar {
+
+    public static GrammarTreeNode Generate(String str) throws Exception {
+        ANTLRInputStream input = new ANTLRInputStream(new ByteArrayInputStream((str + "$").getBytes()));
+        ComputeEngineLexer lexer = new ComputeEngineLexer(input);
+        CommonTokenStream tokens = new CommonTokenStream(lexer);
+        ComputeEngineParser parser = new ComputeEngineParser(tokens);
+        ComputeEngineParser.prog_return r = parser.prog();
+        CommonTree t = (CommonTree) r.getTree();
+
+        GrammarTreeNode result = GenerateNode(t);
+        return result;
+    }
+
+    private static GrammarTreeNode GenerateNode(CommonTree t) throws Exception {
+        String text = t.getText();
+        List children = t.getChildren();
+
+        if ("if".equals(text) || "elseif".equals(text)) {
+            GrammarTreeNode result = new GrammarTreeNode();
+            result.type = "compare";
+            result.compare = Generate_compare((CommonTree) children.get(0));
+            result.compare_yes_node = GenerateNode((CommonTree) children.get(1));
+            result.compare_no_node = GenerateNode((CommonTree) children.get(2));
+            return result;
+        } else if ("else".equals(text)) {
+            GrammarTreeNode result = GenerateNode((CommonTree) children.get(0));
+            return result;
+        } else {
+            if (MathUtil.Instance().diy_funname(MathUtil.Instance().fun0p, text)) {
+                GrammarTreeNode result = new GrammarTreeNode();
+                result.type = "evaluate";
+                result.evaluate = text;
+                result.evaluateItemList = new ArrayList<GrammarTreeNode>();
+                return result;
+            } else if (MathUtil.Instance().diy_funname(MathUtil.Instance().fun1p, text)) {
+                GrammarTreeNode result = new GrammarTreeNode();
+                result.type = "evaluate";
+                result.evaluate = text;
+                result.evaluateItemList = new ArrayList<GrammarTreeNode>();
+                result.evaluateItemList.add(GenerateNode((CommonTree) children.get(0)));
+                return result;
+            } else if (MathUtil.Instance().diy_funname(MathUtil.Instance().fun2p, text)) {
+                GrammarTreeNode result = new GrammarTreeNode();
+                result.type = "evaluate";
+                result.evaluate = text;
+                result.evaluateItemList = new ArrayList<GrammarTreeNode>();
+                result.evaluateItemList.add(GenerateNode((CommonTree) children.get(0)));
+                result.evaluateItemList.add(GenerateNode((CommonTree) children.get(1)));
+                return result;
+            } else if ("+".equals(text) || "-".equals(text) || "*".equals(text) || "/".equals(text)) {
+                GrammarTreeNode result = new GrammarTreeNode();
+                result.type = "evaluate";
+                result.evaluate = text;
+                result.evaluateItemList = new ArrayList<GrammarTreeNode>();
+                result.evaluateItemList.add(GenerateNode((CommonTree) children.get(0)));
+                result.evaluateItemList.add(GenerateNode((CommonTree) children.get(1)));
+                return result;
+            } else if (text.startsWith("other_")) {
+                GrammarTreeNode result = new GrammarTreeNode();
+                result.type = "other";
+                result.other = text.substring("other_".length());
+                return result;
+            } else {
+                try {
+                    GrammarTreeNode result = new GrammarTreeNode();
+                    result.const_value = Double.parseDouble(text);
+                    result.type = "const";
+                    return result;
+                } catch (NumberFormatException e) {
+                    GrammarTreeNode result = new GrammarTreeNode();
+                    result.type = "var";
+                    result.var_original = text;
+                    int index = text.indexOf('\'');
+                    if (index != -1) {
+                        result.var_sign = text.substring(0, index);
+                        result.var_offset = Integer.parseInt(text.substring(index + 1));
+                    } else {
+                        result.var_sign = text;
+                        result.var_offset = 0;
+                    }
+                    return result;
+                }
+            }
+        }
+    }
+
+    private static GrammarCompare Generate_compare(CommonTree t) throws Exception {
+        String text = t.getText();
+        List children = t.getChildren();
+
+        if (MathUtil.Instance().diy_funname(MathUtil.Instance().cmp, text)) {
+            GrammarCompare result = new GrammarCompare();
+            result.type = "itom";
+            result.itom_op = text;
+            result.itom_left = GenerateNode((CommonTree) children.get(0));
+            result.itom_right = GenerateNode((CommonTree) children.get(1));
+            return result;
+        } else if ("&&".equals(text) || "||".equals(text)) {
+            GrammarCompare result = new GrammarCompare();
+            result.type = "group";
+            result.group_op = text;
+            result.groupItemList = new ArrayList<GrammarCompare>();
+            result.groupItemList.add(Generate_compare((CommonTree) children.get(0)));
+            result.groupItemList.add(Generate_compare((CommonTree) children.get(1)));
+            return result;
+        } else if ("!".equals(text)) {
+            GrammarCompare result = new GrammarCompare();
+            result.type = "group";
+            result.group_op = text;
+            result.groupItemList = new ArrayList<GrammarCompare>();
+            result.groupItemList.add(Generate_compare((CommonTree) children.get(0)));
+            return result;
+        } else {
+            throw new Exception("GrammarCompare error:" + text);
+        }
+    }
+}

+ 35 - 0
src/main/java/com/sagacloud/parser/simulator/TestComputeEngine.java

@@ -0,0 +1,35 @@
+package com.sagacloud.parser.simulator;
+
+
+import cn.hutool.core.io.resource.ResourceUtil;
+import org.antlr.runtime.ANTLRInputStream;
+import org.antlr.runtime.CommonTokenStream;
+import org.antlr.runtime.tree.CommonTree;
+import org.antlr.runtime.tree.CommonTreeNodeStream;
+
+import java.util.List;
+
+public class TestComputeEngine {
+    public static void main(String[] args) throws Exception {
+        ANTLRInputStream input = new ANTLRInputStream(ResourceUtil.getStream("simulator.cm"));
+        ComputeEngineLexer lexer = new ComputeEngineLexer(input);
+        CommonTokenStream tokens = new CommonTokenStream(lexer);
+        ComputeEngineParser parser = new ComputeEngineParser(tokens);
+        ComputeEngineParser.prog_return r = parser.prog();
+        CommonTree t = (CommonTree) r.getTree();
+        System.out.println(t.toStringTree());
+        List<?> children = t.getChildren();
+        System.out.println(children.size());
+
+        CommonTreeNodeStream nodes = new CommonTreeNodeStream(t);
+        nodes.setTokenStream(tokens);
+        for (int i = 0; i < 1; i++) {
+            ComputeEngineWalker walker = new ComputeEngineWalker(nodes);
+            walker.reset();
+            walker.clear();
+            walker.put("t", i);
+            double result = walker.prog();
+            System.out.println(result);
+        }
+    }
+}

+ 55 - 0
src/main/java/com/sagacloud/repository/HBaseSaveManagerRepository.java

@@ -0,0 +1,55 @@
+package com.sagacloud.repository;
+
+import cn.hutool.core.lang.Assert;
+import cn.hutool.core.util.RandomUtil;
+import com.sagacloud.util.compute_engine.fjd.ComputeEngineMain;
+import com.zillion.database.agent.ZillionAgent;
+import com.zillion.util.common.ZillionConstant;
+import lombok.extern.slf4j.Slf4j;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author lgy
+ * @date 2022/04/24 17:56
+ * 查询Hbase的时候,批量范围查询分精度接口无法抗住QPS 100的并发,多节点启动有明显改善的情况下,测试启动多个ZillionAgent验证
+ */
+@Slf4j
+public class HBaseSaveManagerRepository {
+
+    private static final List<ZillionAgent> zillionAgentList = new ArrayList<>();
+    private static final List<ComputeEngineMain> computeEngineMainList = new ArrayList<>();
+
+    public static ZillionAgent randomZillionAgent() {
+        if (zillionAgentList.isEmpty()) {
+            return null;
+        }
+        return RandomUtil.randomEle(zillionAgentList);
+    }
+
+    public static void init(int zillionAgentCount) {
+        Assert.checkBetween(zillionAgentCount, 1, 20);
+        ZillionConstant.ObserverWait = 0L;
+        for (int i = 0; i < zillionAgentCount; i++) {
+            try {
+                log.warn("----初始化第【{}】个zillionAgent开始----", i + 1);
+                ComputeEngineMain computeEngineMain = new ComputeEngineMain();
+                ZillionAgent zillionAgent = computeEngineMain.initZillionAgent();
+                zillionAgentList.add(zillionAgent);
+                computeEngineMainList.add(computeEngineMain);
+                log.warn("----初始化第【{}】个zillionAgent结束----", i + 1);
+            } catch (Exception e) {
+                log.error("----初始化第【{}】个zillionAgent失败:{}----", i + 1, e.getMessage(), e);
+            }
+        }
+        if (!zillionAgentList.isEmpty()) {
+            try {
+                RandomUtil.randomEle(computeEngineMainList).initDatabaseAndTable();
+                log.warn("----初始化库表结束----");
+            } catch (Exception e) {
+                log.error("----初始化库表失败----:" + e.getMessage(), e);
+            }
+        }
+    }
+}

+ 189 - 0
src/main/java/com/sagacloud/util/compute_engine/ci/Dao_ci.java

@@ -0,0 +1,189 @@
+package com.sagacloud.util.compute_engine.ci;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.sagacloud.util.compute_engine.core.CoreInput;
+import com.sagacloud.util.compute_engine.core.CoreInstance;
+import com.sagacloud.util.compute_engine.core.CoreOutput;
+import com.sagacloud.util.compute_engine.util.QueryUtil;
+
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+
+public class Dao_ci {
+
+    String database_name;
+
+    public void Initialize(String database_name) {
+
+        this.database_name = database_name;
+    }
+
+    public List<CoreInstance> GetList() throws Exception {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
+        List<CoreInstance> result = new ArrayList<CoreInstance>();
+
+        JSONObject Criteria = new JSONObject();
+        JSONArray resultContent = QueryUtil.select(database_name, "ci_instance", Criteria);
+        for (int ii = 0; ii < resultContent.size(); ii++) {
+            JSONObject jsonItem = (JSONObject) resultContent.get(ii);
+            CoreInstance data = new CoreInstance();
+            data.object_sign = (String) jsonItem.get("object_sign");
+            data.instance_name = (String) jsonItem.get("instance_name");
+            result.add(data);
+        }
+
+        Criteria = new JSONObject();
+        resultContent = QueryUtil.select(database_name, "ci_instanceinput", Criteria);
+        for (int ii = 0; ii < resultContent.size(); ii++) {
+            JSONObject jsonItem = (JSONObject) resultContent.get(ii);
+            String object_sign = (String) jsonItem.get("object_sign");
+            String instance_name = (String) jsonItem.get("instance_name");
+            CoreInstance data = null;
+            for (CoreInstance instance : result) {
+                if (instance.object_sign.equals(object_sign) && instance.instance_name.equals(instance_name)) {
+                    data = instance;
+                    break;
+                }
+            }
+            if (data != null) {
+                CoreInput input = new CoreInput();
+                input.input_sign = (String) jsonItem.get("input_sign");
+                input.time_period = (String) jsonItem.get("time_period");
+                input.data_class = (String) jsonItem.get("data_class");
+                input.dao_type = (String) jsonItem.get("dao_type");
+                input.dao_key = (JSONObject) JSON.parse((String) jsonItem.get("dao_key"));
+                input.source_object_sign = (String) jsonItem.get("source_object_sign");
+                input.source_instance_name = (String) jsonItem.get("source_instance_name");
+                input.source_output_sign = (String) jsonItem.get("source_output_sign");
+                data.inputList.add(input);
+            }
+        }
+
+        Criteria = new JSONObject();
+        resultContent = QueryUtil.select(database_name, "ci_instanceoutput", Criteria);
+        for (int ii = 0; ii < resultContent.size(); ii++) {
+            JSONObject jsonItem = (JSONObject) resultContent.get(ii);
+            String object_sign = (String) jsonItem.get("object_sign");
+            String instance_name = (String) jsonItem.get("instance_name");
+            CoreInstance data = null;
+            for (CoreInstance instance : result) {
+                if (instance.object_sign.equals(object_sign) && instance.instance_name.equals(instance_name)) {
+                    data = instance;
+                    break;
+                }
+            }
+            if (data != null) {
+                CoreOutput output = new CoreOutput();
+                output.output_sign = (String) jsonItem.get("output_sign");
+                output.time_begin = sdf.parse((String) jsonItem.get("time_begin"));
+                output.time_end = sdf.parse((String) jsonItem.get("time_end"));
+                output.data_class = (String) jsonItem.get("data_class");
+                output.dao_type = (String) jsonItem.get("dao_type");
+                output.dao_key = (JSONObject) JSON.parse((String) jsonItem.get("dao_key"));
+                output.need_all_var_data = (Boolean) jsonItem.get("need_all_var_data");
+                output.time_period_intialized = (Boolean) jsonItem.get("time_period_intialized");
+                output.time_period = (String) jsonItem.get("time_period");
+                output.mode = (String) jsonItem.get("mode");
+                if (jsonItem.containsKey("expression")) {
+                    Object itemObject = jsonItem.get("expression");
+                    if (itemObject != null) {
+                        output.expression = (String) itemObject;
+                    }
+                }
+                if (jsonItem.containsKey("custom_function_name")) {
+                    Object itemObject = jsonItem.get("custom_function_name");
+                    if (itemObject != null) {
+                        output.custom_function_name = (String) itemObject;
+                    }
+                }
+                if (jsonItem.containsKey("custom_paramsMap")) {
+                    Object itemObject = jsonItem.get("custom_paramsMap");
+                    if (itemObject != null) {
+                        output.custom_paramsMap = new HashMap<String, String>();
+                        JSONObject jsonColumn = (JSONObject) JSON.parse((String) itemObject);
+                        for (String key : jsonColumn.keySet()) {
+                            output.custom_paramsMap.put(key, (String) jsonColumn.get(key));
+                        }
+                    }
+                }
+                data.outputList.add(output);
+            }
+        }
+
+        return result;
+    }
+
+    public void Insert(CoreInstance instance) throws Exception {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
+        {
+            JSONObject InsertObject = new JSONObject();
+            InsertObject.put("object_sign", instance.object_sign);
+            InsertObject.put("instance_name", instance.instance_name);
+            QueryUtil.insert(database_name, "ci_instance", InsertObject);
+        }
+        {
+            JSONArray InsertObjects = new JSONArray();
+            for (CoreInput data : instance.inputList) {
+                JSONObject InsertObject = new JSONObject();
+                InsertObject.put("object_sign", instance.object_sign);
+                InsertObject.put("instance_name", instance.instance_name);
+                InsertObject.put("input_sign", data.input_sign);
+                InsertObject.put("time_period", data.time_period);
+                InsertObject.put("data_class", data.data_class);
+                InsertObject.put("dao_type", data.dao_type);
+                InsertObject.put("dao_key", data.dao_key.toJSONString());
+                InsertObject.put("source_object_sign", data.source_object_sign);
+                InsertObject.put("source_instance_name", data.source_instance_name);
+                InsertObject.put("source_output_sign", data.source_output_sign);
+                InsertObjects.add(InsertObject);
+            }
+            QueryUtil.batch_insert(database_name, "ci_instanceinput", InsertObjects);
+        }
+        {
+            JSONArray InsertObjects = new JSONArray();
+            for (CoreOutput data : instance.outputList) {
+                JSONObject InsertObject = new JSONObject();
+                InsertObject.put("object_sign", instance.object_sign);
+                InsertObject.put("instance_name", instance.instance_name);
+                InsertObject.put("output_sign", data.output_sign);
+                InsertObject.put("time_begin", sdf.format(data.time_begin));
+                InsertObject.put("time_end", sdf.format(data.time_end));
+                InsertObject.put("data_class", data.data_class);
+                InsertObject.put("dao_type", data.dao_type);
+                InsertObject.put("dao_key", data.dao_key.toJSONString());
+                InsertObject.put("need_all_var_data", data.need_all_var_data);
+                InsertObject.put("time_period_intialized", data.time_period_intialized);
+                InsertObject.put("time_period", data.time_period);
+                InsertObject.put("mode", data.mode);
+                if (data.expression != null) {
+                    InsertObject.put("expression", data.expression);
+                }
+                if (data.custom_function_name != null) {
+                    InsertObject.put("custom_function_name", data.custom_function_name);
+                }
+                if (data.custom_paramsMap.size() > 0) {
+                    JSONObject jsonColumn = new JSONObject();
+                    for (String key : data.custom_paramsMap.keySet()) {
+                        jsonColumn.put(key, data.custom_paramsMap.get(key));
+                    }
+                    InsertObject.put("custom_paramsMap", jsonColumn.toJSONString());
+                }
+                InsertObjects.add(InsertObject);
+            }
+            QueryUtil.batch_insert(database_name, "ci_instanceoutput", InsertObjects);
+        }
+    }
+
+    public void Delete(String object_sign, String instance_name) throws Exception {
+        JSONObject Criteria = new JSONObject();
+        Criteria.put("object_sign", object_sign);
+        Criteria.put("instance_name", instance_name);
+        QueryUtil.delete(database_name, "ci_instance", Criteria);
+        QueryUtil.delete(database_name, "ci_instanceinput", Criteria);
+        QueryUtil.delete(database_name, "ci_instanceoutput", Criteria);
+    }
+}

+ 10 - 0
src/main/java/com/sagacloud/util/compute_engine/core/AnnotationDescription.java

@@ -0,0 +1,10 @@
+package com.sagacloud.util.compute_engine.core;
+
+import java.lang.annotation.*;
+
+@Target(ElementType.TYPE)
+@Retention(RetentionPolicy.RUNTIME)
+@Documented
+public @interface AnnotationDescription {
+    String value();
+}

+ 902 - 0
src/main/java/com/sagacloud/util/compute_engine/core/CoreComputeUtil.java

@@ -0,0 +1,902 @@
+package com.sagacloud.util.compute_engine.core;
+
+import com.alibaba.fastjson.JSONObject;
+import com.sagacloud.extend.dao_data.ImplDao_fjd_statinst;
+import com.sagacloud.parser.simulator.String2Grammar;
+import com.sagacloud.util.compute_engine.util.*;
+import com.sagacloud.util.math.MathUtil;
+import lombok.extern.slf4j.Slf4j;
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+@Slf4j
+public class CoreComputeUtil {
+    static List<Date> splitDateList = new ArrayList<Date>();
+
+    static {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
+        try {
+            Date date_from = sdf.parse("20000101000000");
+            Date date_to = sdf.parse("21000101000000");
+            Date date_tmp = date_from;
+            while (date_tmp.compareTo(date_to) < 0) {
+                Date date_next = DateUtil.Instance().GetDate_offset(date_tmp, "1m", 1);
+                splitDateList.add(date_tmp);
+                date_tmp = date_next;
+            }
+        } catch (ParseException e) {
+            log.error(e.getMessage(),e);
+        }
+    }
+
+    public static Map<String, List<TimeSpan>> ComputeByPart(String object_sign, String instance_name, List<CoreInput> inputList,
+                                                            List<CoreOutput> outputList, long compute_round, Map<String, List<TimeSpan>> inputTimeSpanMap,
+                                                            Map<String, List<TimeSpan>> outputdetailListMap, IDao_log dao_log) throws Exception {
+        SimpleDateFormat sdf_ = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        for (int index_split = 0; index_split < splitDateList.size() - 1; index_split++) {
+            Date date_from = splitDateList.get(index_split);
+            Date date_to = splitDateList.get(index_split + 1);
+            Map<String, List<TimeSpan>> inputTimeSpanMapInner = new HashMap<String, List<TimeSpan>>();
+            for (CoreInput input : inputList) {
+                if (inputTimeSpanMap.containsKey(input.input_sign)) {
+                    List<TimeSpan> timeSpanList = DateUtil.Instance().Clone(inputTimeSpanMap.get(input.input_sign));
+                    DateUtil.Instance().Limit(timeSpanList, date_from, DateUtil.Instance().GetDate_offset(date_to, input.time_period, -1));
+                    if (timeSpanList.size() > 0) {
+                        inputTimeSpanMapInner.put(input.input_sign, timeSpanList);
+                    }
+                }
+            }
+            if (inputTimeSpanMapInner.size() > 0) {
+                log.info("**************************************************************** ComputeByPartOnce " + object_sign + " "
+                        + instance_name + "\t" + sdf_.format(date_from) + "\t" + sdf_.format(date_to) + "begin");
+                ComputeOnce(object_sign, instance_name, inputList, outputList, compute_round, inputTimeSpanMapInner, outputdetailListMap, dao_log,
+                        false);
+                log.info("**************************************************************** ComputeByPartOnce " + object_sign + " "
+                        + instance_name + "\t" + sdf_.format(date_from) + "\t" + sdf_.format(date_to) + "end");
+            }
+        }
+
+        Map<String, List<TimeSpan>> result = ComputeByPartAfter(object_sign, instance_name, inputList, outputList, compute_round, inputTimeSpanMap,
+                outputdetailListMap, dao_log);
+        return result;
+    }
+
+    public static Map<String, List<TimeSpan>> ComputeOnce(String object_sign, String instance_name, List<CoreInput> inputList,
+                                                          List<CoreOutput> outputList, long compute_round, Map<String, List<TimeSpan>> inputTimeSpanMap,
+                                                          Map<String, List<TimeSpan>> outputdetailListMap, IDao_log dao_log, boolean isAll) throws Exception {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
+        Map<String, CoreInput> inputMap = new HashMap<String, CoreInput>();
+        for (CoreInput input : inputList) {
+            inputMap.put(input.input_sign, input);
+        }
+        Map<String, CoreOutput> outputMap = new HashMap<String, CoreOutput>();
+        for (CoreOutput output : outputList) {
+            outputMap.put(output.output_sign, output);
+        }
+
+        // 确定相关输出需要计算的时间段,以及每个输入每种精度要取的数据的时间范围(去掉已经计算的output的时间段)
+        Map<String, Map<String, List<TimeSpan>>> inputIntervalTimeSpanMap = new HashMap<String, Map<String, List<TimeSpan>>>();
+        Map<String, List<TimeSpan>> outputTimeSpanMap = new HashMap<String, List<TimeSpan>>();
+        for (int i = 0; i < outputList.size(); i++) {
+            CoreOutput output = outputList.get(i);
+            List<TimeSpan> timeSpanList = new ArrayList<TimeSpan>();
+            if (output.dao_type.endsWith("_max") || output.dao_type.endsWith("_stat")) {
+                List<TimeSpan> timeSpanList_input = inputTimeSpanMap.get(output.output_sign);
+                DateUtil.Instance().ConvertAndMergeTo(timeSpanList_input, output.var_stepSpanMap.get(output.output_sign), output.time_period,
+                        output.data_class, timeSpanList);
+            } else {
+                for (String input_sign : output.all_input.keySet()) {
+                    CoreInput input = inputMap.get(input_sign);
+                    if (inputTimeSpanMap.containsKey(input_sign)) {
+                        List<TimeSpan> timeSpanList_input = inputTimeSpanMap.get(input_sign);
+                        DateUtil.Instance().ConvertAndMergeTo(timeSpanList_input, output.var_stepSpanMap.get(input_sign), output.time_period,
+                                input.data_class, timeSpanList);
+                    }
+                }
+            }
+            DateUtil.Instance().Limit(timeSpanList, output.time_begin, DateUtil.Instance().GetDate_offset(output.time_end, output.time_period, -1));
+            List<TimeSpan> timeSpanList_finish = outputdetailListMap.get(output.output_sign);
+            for (int ii = timeSpanList.size() - 1; ii >= 0; ii--) {
+                TimeSpan timeSpan = timeSpanList.get(ii);
+                boolean finish = false;
+                if (timeSpanList_finish != null) {
+                    for (TimeSpan timeSpanInner : timeSpanList_finish) {
+                        if (timeSpanInner.timefrom.getTime() == timeSpan.timefrom.getTime()) {
+                            finish = true;
+                            break;
+                        }
+                    }
+                }
+                if (finish) {
+                    timeSpanList.remove(ii);
+                }
+            }
+
+            outputTimeSpanMap.put(output.output_sign + "_" + sdf.format(output.time_begin), timeSpanList);
+
+            if (output.dao_type.endsWith("_max")) {
+                // TODO
+            } else if (output.dao_type.endsWith("_stat")) {
+                // TODO
+            } else {
+                for (String input_sign : output.all_input.keySet()) {
+                    if (!inputIntervalTimeSpanMap.containsKey(input_sign)) {
+                        inputIntervalTimeSpanMap.put(input_sign, new HashMap<String, List<TimeSpan>>());
+                    }
+                    Map<String, List<TimeSpan>> IntervalTimeSpanMap = inputIntervalTimeSpanMap.get(input_sign);
+                    if (!IntervalTimeSpanMap.containsKey(output.time_period)) {
+                        IntervalTimeSpanMap.put(output.time_period, new ArrayList<TimeSpan>());
+                    }
+                    List<TimeSpan> timeSpanList_input = IntervalTimeSpanMap.get(output.time_period);
+                    DateUtil.Instance().MergeTo(timeSpanList, output.time_period, output.var_stepSpanMap.get(input_sign), timeSpanList_input);
+                }
+            }
+        }
+
+        DataCache dataCache = new DataCache();
+        // 读取数据
+        for (String input_sign : inputIntervalTimeSpanMap.keySet()) {
+            CoreInput input = inputMap.get(input_sign);
+            Map<String, List<TimeSpan>> timeSpanListMap = inputIntervalTimeSpanMap.get(input_sign);
+            for (String time_period : timeSpanListMap.keySet()) {
+                List<TimeSpan> timeSpanList = timeSpanListMap.get(time_period);
+                for (TimeSpan timeSpan : timeSpanList) {
+                    dataCache.GetData(input_sign, input.dao_type, input.dao_key, time_period, timeSpan.timefrom, timeSpan.timeto);
+                }
+            }
+        }
+
+        // 依次计算每个相关输出,计算同时填充DataCache
+        for (int i = 0; i < outputList.size(); i++) {
+            CoreOutput output = outputList.get(i);
+            String time_period = output.time_period;
+            List<TimeSpan> timeSpanList = outputTimeSpanMap.get(output.output_sign + "_" + sdf.format(output.time_begin));
+
+            if (output.dao_type.endsWith("_max")) {
+                CoreInput input = inputMap.get(output.output_sign);
+                double ratio = 1.0;
+                // 累计量计算max才需要折算功率
+                if ("consumption".equals(input.data_class)) {
+                    ratio = 1.0 * (1000L * 60 * 60) / Parser_time_period.collect_cycle2Milliseconds(input.time_period);
+                }
+                List<String> biggerList = Parser_time_period.getBigger("1y", input.time_period);
+                for (String time_period_bigger : biggerList) {
+                    List<TimeSpan> timeSpanList_new = new ArrayList<TimeSpan>();
+                    DateUtil.Instance().ConvertAndMergeTo(timeSpanList, time_period_bigger, "consumption", timeSpanList_new);
+                    for (TimeSpan timeSpan : timeSpanList_new) {
+                        // 准备数据
+                        List<DoubleTimeObject> dataList = Dao_dataManager.Instance().Get(input.dao_type).GetDataListGteLte(input.dao_key,
+                                input.time_period, timeSpan.timefrom, DateUtil.Instance().GetDate_offset(timeSpan.timeto, time_period_bigger, 1),
+                                false);
+
+                        // 计算
+                        List<DoubleTimeObject_max> outputDataList = new ArrayList<DoubleTimeObject_max>();
+                        int tmp_data_index = 0;
+                        Date tmpDate = timeSpan.timefrom;
+                        while (tmpDate.getTime() <= timeSpan.timeto.getTime()) {
+                            Date tmpDateNext = DateUtil.Instance().GetDate_offset(tmpDate, time_period_bigger, 1);
+
+                            Double max_value = null;
+                            Date max_time = null;
+                            int data_count = 0;
+                            for (int index_data = tmp_data_index; index_data < dataList.size(); index_data++) {
+                                tmp_data_index = index_data;
+                                DoubleTimeObject data = dataList.get(index_data);
+                                if (data.data_time.getTime() < tmpDate.getTime()) {
+                                } else if (data.data_time.getTime() < tmpDateNext.getTime()) {
+                                    if (max_value == null || max_value < data.data_value * ratio) {
+                                        max_value = data.data_value * ratio;
+                                        max_time = data.data_time;
+                                    }
+                                    data_count++;
+                                } else {
+                                    break;
+                                }
+                            }
+                            if (data_count > 0) {
+                                DoubleTimeObject_max outputData = new DoubleTimeObject_max();
+                                outputData.data_time = tmpDate;
+                                outputData.data_value = max_value;
+                                outputData.max_time = max_time;
+                                outputDataList.add(outputData);
+                            }
+
+                            tmpDate = tmpDateNext;
+                        }
+
+                        // 删除数据
+                        Dao_data_maxManager.Instance().Get(output.dao_type).DeleteDataListGteLte(output.dao_key, time_period_bigger,
+                                timeSpan.timefrom, timeSpan.timeto);
+                        ConstantCE.SleepBetweenDeleteAndInsert();
+                        // 保存数据
+                        Dao_data_maxManager.Instance().Get(output.dao_type).InsertDataListGteLte(output.dao_key, time_period_bigger, outputDataList);
+                    }
+                }
+            } else if (output.dao_type.endsWith("_stat")) {
+                CoreInput input = inputMap.get(output.output_sign);
+                if ("inststat".equals(output.data_class)) {
+                    CoreComputeUtil.Stat_inststat(input.dao_type, output.dao_key, timeSpanList, input.time_period, "1y");
+                } else if ("consumption".equals(output.data_class)) {
+                    CoreComputeUtil.Stat_consumption(input.dao_type, output.dao_key, timeSpanList, input.time_period, "1y");
+                }
+            } else {
+                List<List<DoubleTimeObject>> outputDataListList = new ArrayList<List<DoubleTimeObject>>();
+                List<DoubleTimeObject> outputDataList_all = new ArrayList<DoubleTimeObject>();
+                for (TimeSpan timeSpan : timeSpanList) {
+                    // 准备数据
+                    Map<String, List<DoubleTimeObject>> inputDataListMap = new HashMap<String, List<DoubleTimeObject>>();
+                    for (String input_sign : output.var_signMap.keySet()) {
+                        String dao_type;
+                        JSONObject dao_key;
+                        if (inputMap.containsKey(input_sign)) {
+                            CoreInput input = inputMap.get(input_sign);
+                            dao_type = input.dao_type;
+                            dao_key = input.dao_key;
+                        } else {
+                            CoreOutput input = outputMap.get(input_sign);
+                            dao_type = input.dao_type;
+                            dao_key = input.dao_key;
+                        }
+                        List<DoubleTimeObject> inputDataList = dataCache.GetData(input_sign, dao_type, dao_key, time_period,
+                                DateUtil.Instance().GetDate_offset(timeSpan.timefrom, time_period, output.var_stepSpanMap.get(input_sign).backward),
+                                DateUtil.Instance().GetDate_offset(timeSpan.timeto, time_period, output.var_stepSpanMap.get(input_sign).forward));
+                        inputDataListMap.put(input_sign, inputDataList);
+                    }
+                    // 计算
+                    List<DoubleTimeObject> outputDataList = new ArrayList<DoubleTimeObject>();
+                    for (Date tmpDate = timeSpan.timefrom; tmpDate.compareTo(timeSpan.timeto) <= 0; tmpDate = DateUtil.Instance()
+                            .GetDate_offset(tmpDate, time_period, 1)) {
+                        Map<String, Double> dataMap = new HashMap<String, Double>();
+                        int valid_data_count = 0;
+                        for (String var_original : output.var_originalMap.keySet()) {
+                            String var_sign;
+                            int var_offset;
+                            int index = var_original.indexOf('\'');
+                            if (index != -1) {
+                                var_sign = var_original.substring(0, index);
+                                var_offset = Integer.parseInt(var_original.substring(index + 1));
+                            } else {
+                                var_sign = var_original;
+                                var_offset = 0;
+                            }
+                            List<DoubleTimeObject> inputDataList = inputDataListMap.get(var_sign);
+                            Date findDate = DateUtil.Instance().GetDate_offset(tmpDate, time_period, var_offset);
+                            int findIndex = InsertUtil.Instance().FindIndex(inputDataList, findDate);
+                            DoubleTimeObject input_data = null;
+                            if (findIndex != -1) {
+                                input_data = inputDataList.get(findIndex);
+                            }
+                            if (input_data == null) {
+                                dataMap.put(var_original, null);
+                            } else {
+                                dataMap.put(var_original, input_data.data_value);
+                                valid_data_count++;
+                            }
+                        }
+                        for (String other_param : output.other_paramMap.keySet()) {
+                            double opv = CoreComputeUtil_other.GetOtherValue(sdf.format(tmpDate), output.otherMap, other_param);
+                            dataMap.put(other_param, opv);
+                        }
+                        if ((output.need_all_var_data && valid_data_count == output.var_originalMap.size())
+                                || (!output.need_all_var_data && valid_data_count > 0)) {
+                            DoubleTimeObject outputData = new DoubleTimeObject();
+                            outputData.data_time = tmpDate;
+                            if ("expression".equals(output.mode)) {
+                                if (CoreComputeUtilUtil.CantCompute(output.root, dataMap)) {
+                                    outputData.data_value = null;
+                                } else {
+                                    outputData.data_value = ComputeNode(output.root, dataMap);
+                                }
+                            } else if ("custom".equals(output.mode)) {
+                                outputData.data_value = CustomFunctionManager.Instance().Compute(output.custom_function_name, output.custom_paramsMap,
+                                        dataMap);
+                            } else {
+                                throw new Exception("output.mode error:" + output.mode);
+                            }
+                            if (outputData.data_value != null) {
+                                if (Double.isInfinite(outputData.data_value) || Double.isNaN(outputData.data_value)) {
+                                    outputData.data_value = 0.0;
+                                }
+                                if (ConstantCE.expression_negative_to_0 && outputData.data_value < 0.0) {
+                                    outputData.data_value = 0.0;
+                                }
+                                outputDataList.add(outputData);
+                            }
+                        }
+                    }
+                    if (output.successorList.size() > 0) {
+                        dataCache.PutData(output.output_sign, time_period, timeSpan.timefrom, timeSpan.timeto, outputDataList);
+                    }
+                    outputDataListList.add(outputDataList);
+                    outputDataList_all.addAll(outputDataList);
+
+                    // 删除数据
+                    Dao_dataManager.Instance().Get(output.dao_type).DeleteDataListGteLte(output.dao_key, time_period, timeSpan.timefrom,
+                            timeSpan.timeto);
+                    ConstantCE.SleepBetweenDeleteAndInsert();
+                    // 保存数据
+                    Dao_dataManager.Instance().Get(output.dao_type).InsertDataListGteLte(output.dao_key, time_period, outputDataList);
+                }
+
+                // 统计
+                if ("consumption".equals(output.data_class)) {
+                    Stat_consumption(output.dao_type, output.dao_key, timeSpanList, time_period, "1d");
+                } else if ("near".equals(output.data_class)) {
+                    Stat_near(output.dao_type, output.dao_key, timeSpanList, time_period, outputDataList_all);
+                }
+
+                if (output.other_type != null && timeSpanList.size() > 0) {
+                    CoreComputeUtil_other.Compute_other(output.other_type, object_sign, instance_name, compute_round, output, time_period,
+                            timeSpanList, outputDataListList, outputDataList_all, dao_log);
+                }
+            }
+
+            if (isAll) {
+                for (TimeSpan timeSpan : timeSpanList) {
+                    // 保存日志
+                    {
+                        JSONObject InsertObject = new JSONObject();
+                        InsertObject.put("object_sign", object_sign);
+                        InsertObject.put("instance_name", instance_name);
+                        InsertObject.put("compute_round", compute_round);
+                        InsertObject.put("output_sign", output.output_sign);
+                        InsertObject.put("valid_time_from", sdf.format(timeSpan.timefrom));
+                        InsertObject.put("valid_time_to", sdf.format(timeSpan.timeto));
+                        InsertObject.put("operate_time_to", sdf.format(new Date()));
+                        dao_log.InsertData(InsertObject);
+                    }
+                }
+            }
+        }
+
+        return outputTimeSpanMap;
+    }
+
+    private static Map<String, List<TimeSpan>> ComputeByPartAfter(String object_sign, String instance_name, List<CoreInput> inputList,
+                                                                  List<CoreOutput> outputList, long compute_round, Map<String, List<TimeSpan>> inputTimeSpanMap,
+                                                                  Map<String, List<TimeSpan>> outputdetailListMap, IDao_log dao_log) throws Exception {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
+        Map<String, CoreInput> inputMap = new HashMap<String, CoreInput>();
+        for (CoreInput input : inputList) {
+            inputMap.put(input.input_sign, input);
+        }
+
+        Map<String, List<TimeSpan>> outputTimeSpanMap = new HashMap<String, List<TimeSpan>>();
+        for (int i = 0; i < outputList.size(); i++) {
+            CoreOutput output = outputList.get(i);
+            List<TimeSpan> timeSpanList = new ArrayList<TimeSpan>();
+            if (output.dao_type.endsWith("_max") || output.dao_type.endsWith("_stat")) {
+                List<TimeSpan> timeSpanList_input = inputTimeSpanMap.get(output.output_sign);
+                DateUtil.Instance().ConvertAndMergeTo(timeSpanList_input, output.var_stepSpanMap.get(output.output_sign), output.time_period,
+                        output.data_class, timeSpanList);
+            } else {
+                for (String input_sign : output.all_input.keySet()) {
+                    CoreInput input = inputMap.get(input_sign);
+                    if (inputTimeSpanMap.containsKey(input_sign)) {
+                        List<TimeSpan> timeSpanList_input = inputTimeSpanMap.get(input_sign);
+                        DateUtil.Instance().ConvertAndMergeTo(timeSpanList_input, output.var_stepSpanMap.get(input_sign), output.time_period,
+                                input.data_class, timeSpanList);
+                    }
+                }
+            }
+            DateUtil.Instance().Limit(timeSpanList, output.time_begin, DateUtil.Instance().GetDate_offset(output.time_end, output.time_period, -1));
+            List<TimeSpan> timeSpanList_finish = outputdetailListMap.get(output.output_sign);
+            for (int ii = timeSpanList.size() - 1; ii >= 0; ii--) {
+                TimeSpan timeSpan = timeSpanList.get(ii);
+                boolean finish = false;
+                if (timeSpanList_finish != null) {
+                    for (TimeSpan timeSpanInner : timeSpanList_finish) {
+                        if (timeSpanInner.timefrom.getTime() == timeSpan.timefrom.getTime()) {
+                            finish = true;
+                            break;
+                        }
+                    }
+                }
+                if (finish) {
+                    timeSpanList.remove(ii);
+                }
+            }
+
+            outputTimeSpanMap.put(output.output_sign + "_" + sdf.format(output.time_begin), timeSpanList);
+        }
+
+        for (int i = 0; i < outputList.size(); i++) {
+            CoreOutput output = outputList.get(i);
+            List<TimeSpan> timeSpanList = outputTimeSpanMap.get(output.output_sign + "_" + sdf.format(output.time_begin));
+            for (TimeSpan timeSpan : timeSpanList) {
+                // 保存日志
+                {
+                    JSONObject InsertObject = new JSONObject();
+                    InsertObject.put("object_sign", object_sign);
+                    InsertObject.put("instance_name", instance_name);
+                    InsertObject.put("compute_round", compute_round);
+                    InsertObject.put("output_sign", output.output_sign);
+                    InsertObject.put("valid_time_from", sdf.format(timeSpan.timefrom));
+                    InsertObject.put("valid_time_to", sdf.format(timeSpan.timeto));
+                    InsertObject.put("operate_time_to", sdf.format(new Date()));
+                    dao_log.InsertData(InsertObject);
+                }
+            }
+        }
+
+        return outputTimeSpanMap;
+    }
+
+    public static void Stat_inststat(String dao_type, JSONObject dao_key, List<TimeSpan> timeSpanList, String time_period, String max_time_period)
+            throws Exception {
+        if (timeSpanList.size() == 0) {
+            return;
+        }
+
+        ImplDao_fjd_statinst dao_fjd_statinst = (ImplDao_fjd_statinst) Dao_dataManager.Instance().Get("fjd_statinst");
+
+        List<String> biggerList = Parser_time_period.getBigger(max_time_period, time_period);
+        List<String> allList = new ArrayList<String>();
+        allList.add(time_period);
+        allList.addAll(biggerList);
+        for (int i = 1; i < allList.size(); i++) {
+            String time_period_base = allList.get(i - 1);
+            String time_period_bigger = allList.get(i);
+            List<TimeSpan> timeSpanList_new = new ArrayList<TimeSpan>();
+            DateUtil.Instance().ConvertAndMergeTo(timeSpanList, time_period_bigger, "inststat", timeSpanList_new);
+            for (TimeSpan timeSpan : timeSpanList_new) {
+                // 准备数据
+                List<DoubleTimeObject_statinst> dataList = dao_fjd_statinst.GetDataListGteLte_statinst(dao_key, time_period_base, timeSpan.timefrom,
+                        DateUtil.Instance().GetDate_offset(timeSpan.timeto, time_period_bigger, 1), false);
+
+                // 计算
+                List<DoubleTimeObject_statinst> outputDataList = new ArrayList<DoubleTimeObject_statinst>();
+                int tmp_data_index = 0;
+                Date tmpDate = timeSpan.timefrom;
+                while (tmpDate.getTime() <= timeSpan.timeto.getTime()) {
+                    Date tmpDateNext = DateUtil.Instance().GetDate_offset(tmpDate, time_period_bigger, 1);
+
+                    DoubleTimeObject_statinst stat_data = new DoubleTimeObject_statinst();
+                    double data_total = 0.0;
+                    int data_count = 0;
+                    for (int index_data = tmp_data_index; index_data < dataList.size(); index_data++) {
+                        tmp_data_index = index_data;
+                        DoubleTimeObject_statinst data = dataList.get(index_data);
+                        if (data.data_time.getTime() < tmpDate.getTime()) {
+                        } else if (data.data_time.getTime() < tmpDateNext.getTime()) {
+                            if (stat_data.data_max == null) {
+                                stat_data.time_max = data.time_max;
+                                stat_data.data_max = data.data_max;
+                            } else {
+                                if (data.data_max != null) {
+                                    if (stat_data.data_max == null || stat_data.data_max < data.data_max) {
+                                        stat_data.time_max = data.time_max;
+                                        stat_data.data_max = data.data_max;
+                                    }
+                                }
+                            }
+                            if (stat_data.data_min == null) {
+                                stat_data.time_min = data.time_min;
+                                stat_data.data_min = data.data_min;
+                            } else {
+                                if (data.data_min != null) {
+                                    if (stat_data.data_min == null || stat_data.data_min > data.data_min) {
+                                        stat_data.time_min = data.time_min;
+                                        stat_data.data_min = data.data_min;
+                                    }
+                                }
+                            }
+                            data_total += data.data_avg * data.data_count;
+                            data_count += data.data_count;
+                        } else {
+                            break;
+                        }
+                    }
+                    if (data_count > 0) {
+                        stat_data.data_time = tmpDate;
+                        stat_data.data_avg = data_total / data_count;
+                        stat_data.data_count = (long) data_count;
+                        outputDataList.add(stat_data);
+                    }
+
+                    tmpDate = tmpDateNext;
+                }
+
+                // 删除数据
+                dao_fjd_statinst.DeleteDataListGteLte_statinst(dao_key, time_period_bigger, timeSpan.timefrom, timeSpan.timeto);
+                ConstantCE.SleepBetweenDeleteAndInsert();
+                // 保存数据
+                dao_fjd_statinst.InsertDataListGteLte_statinst(dao_key, time_period_bigger, outputDataList);
+            }
+        }
+    }
+
+    public static void Stat_consumption(String dao_type, JSONObject dao_key, List<TimeSpan> timeSpanList, String time_period, String max_time_period)
+            throws Exception {
+        if (timeSpanList.size() == 0) {
+            return;
+        }
+
+        List<String> biggerList = Parser_time_period.getBigger(max_time_period, time_period);
+        List<List<TimeSpan>> biggerTimeSpanList = new ArrayList<List<TimeSpan>>();
+        for (String bigger : biggerList) {
+            List<TimeSpan> bts = new ArrayList<TimeSpan>();
+            DateUtil.Instance().ConvertAndMergeTo(timeSpanList, bigger, "consumption", bts);
+            biggerTimeSpanList.add(bts);
+        }
+        List<TimeSpan> biggestTimeSpanList = biggerTimeSpanList.get(biggerTimeSpanList.size() - 1);
+        String biggest = biggerList.get(biggerList.size() - 1);
+        Date stat_from = biggestTimeSpanList.get(0).timefrom;
+        Date stat_to = DateUtil.Instance().GetDate_offset(biggestTimeSpanList.get(biggestTimeSpanList.size() - 1).timeto, biggest, 1);
+        List<DoubleTimeObject> dataList = Dao_dataManager.Instance().Get(dao_type).GetDataListGteLte(dao_key, time_period, stat_from, stat_to, false);
+        for (int index = 0; index < biggerList.size(); index++) {
+            String bigger = biggerList.get(index);
+            List<TimeSpan> bts = biggerTimeSpanList.get(index);
+            for (TimeSpan biggerTimeSpan : bts) {
+                List<DoubleTimeObject> outputDataList = new ArrayList<DoubleTimeObject>();
+                int tmp_data_index = 0;
+                Date tmpDate = biggerTimeSpan.timefrom;
+                while (tmpDate.getTime() <= biggerTimeSpan.timeto.getTime()) {
+                    Date tmpDateNext = DateUtil.Instance().GetDate_offset(tmpDate, bigger, 1);
+
+                    double data_value = 0.0;
+                    int data_count = 0;
+                    for (int index_data = tmp_data_index; index_data < dataList.size(); index_data++) {
+                        tmp_data_index = index_data;
+                        DoubleTimeObject data = dataList.get(index_data);
+                        if (data.data_time.getTime() < tmpDate.getTime()) {
+                        } else if (data.data_time.getTime() < tmpDateNext.getTime()) {
+                            data_value += data.data_value;
+                            data_count++;
+                        } else {
+                            break;
+                        }
+                    }
+                    if (data_count > 0) {
+                        DoubleTimeObject outputData = new DoubleTimeObject();
+                        outputData.data_time = tmpDate;
+                        outputData.data_value = data_value;
+                        outputDataList.add(outputData);
+                    }
+
+                    tmpDate = tmpDateNext;
+                }
+                // 删除数据
+                Dao_dataManager.Instance().Get(dao_type).DeleteDataListGteLte(dao_key, bigger, biggerTimeSpan.timefrom, biggerTimeSpan.timeto);
+                ConstantCE.SleepBetweenDeleteAndInsert();
+                // 保存数据
+                Dao_dataManager.Instance().Get(dao_type).InsertDataListGteLte(dao_key, bigger, outputDataList);
+            }
+        }
+    }
+
+    public static void Stat_near(String dao_type, JSONObject dao_key, List<TimeSpan> timeSpanList, String time_period,
+                                 List<DoubleTimeObject> dataList) throws Exception {
+        if (timeSpanList.size() == 0) {
+            return;
+        }
+        if (dataList.size() == 0) {
+            return;
+        }
+
+        List<String> biggerList = Parser_time_period.getBigger(ConstantCE.Stat_time_period_fjd_near, time_period);
+        List<List<TimeSpan>> biggerTimeSpanList = new ArrayList<List<TimeSpan>>();
+        for (String bigger : biggerList) {
+            List<TimeSpan> bts = new ArrayList<TimeSpan>();
+            DateUtil.Instance().ConvertAndMergeTo(timeSpanList, bigger, "near", bts);
+            biggerTimeSpanList.add(bts);
+        }
+        for (int index = 0; index < biggerList.size(); index++) {
+            String bigger = biggerList.get(index);
+            List<TimeSpan> bts = biggerTimeSpanList.get(index);
+            for (TimeSpan biggerTimeSpan : bts) {
+                List<DoubleTimeObject> outputDataList = new ArrayList<DoubleTimeObject>();
+                int tmp_data_index = 0;
+                Date tmpDate = biggerTimeSpan.timefrom;
+                while (tmpDate.getTime() <= biggerTimeSpan.timeto.getTime()) {
+                    Date tmpDateNext = DateUtil.Instance().GetDate_offset(tmpDate, bigger, 1);
+
+                    double data_value = 0.0;
+                    int data_count = 0;
+                    for (int index_data = tmp_data_index; index_data < dataList.size(); index_data++) {
+                        tmp_data_index = index_data;
+                        DoubleTimeObject data = dataList.get(index_data);
+                        if (data.data_time.getTime() < tmpDate.getTime()) {
+                        } else if (data.data_time.getTime() == tmpDate.getTime()) {
+                            data_value = data.data_value;
+                            data_count++;
+                            break;
+                        } else {
+                            break;
+                        }
+                    }
+                    if (data_count > 0) {
+                        DoubleTimeObject outputData = new DoubleTimeObject();
+                        outputData.data_time = tmpDate;
+                        outputData.data_value = data_value;
+                        outputDataList.add(outputData);
+                    }
+
+                    tmpDate = tmpDateNext;
+                }
+                // 删除数据
+                Dao_dataManager.Instance().Get(dao_type).DeleteDataListGteLte(dao_key, bigger, biggerTimeSpan.timefrom, biggerTimeSpan.timeto);
+                ConstantCE.SleepBetweenDeleteAndInsert();
+                // 保存数据
+                Dao_dataManager.Instance().Get(dao_type).InsertDataListGteLte(dao_key, bigger, outputDataList);
+            }
+        }
+    }
+
+    // 任务加入之前就需要PreCompute
+    public static void Refresh(CoreInstance instance) throws Exception {
+        if (instance.instance_name.startsWith("fjd_0_") || "servicedata".equals(instance.instance_name)
+                || "servicedataoftenant".equals(instance.instance_name) || instance.instance_name.endsWith("_max")
+                || instance.instance_name.endsWith("_stat")) {
+            for (CoreOutput output : instance.outputList) {
+                output.var_originalMap.put(output.expression, true);
+                output.var_signMap.put(output.expression, true);
+                output.var_stepSpanMap.put(output.expression, new StepSpan(0, 0));
+            }
+            return;
+        }
+        List<CoreInput> inputList = instance.inputList;
+        List<CoreOutput> outputList = instance.outputList;
+        Map<String, CoreInput> inputMap = new HashMap<String, CoreInput>();
+        for (CoreInput input : inputList) {
+            inputMap.put(input.input_sign, input);
+        }
+        Map<String, CoreOutput> outputMap = new HashMap<String, CoreOutput>();
+        for (CoreOutput output : outputList) {
+            outputMap.put(output.output_sign, output);
+        }
+        Map<String, Boolean> all_var = new HashMap<String, Boolean>();
+        for (CoreOutput output : outputList) {
+            if ("expression".equals(output.mode)) {
+                if (output.expression != null) {
+                    try {
+                        output.root = String2Grammar.Generate(output.expression);
+                    } catch (Exception e) {
+                        log.error("Error expression:" + instance.object_sign + "_" + instance.instance_name + "\t" + output.output_sign + "\t"
+                                + output.expression);
+                        throw e;
+                    }
+                }
+                RefreshByNode(inputMap, outputMap, output, output.root);
+            } else if ("custom".equals(output.mode)) {
+                for (String custom_param : output.custom_paramsMap.keySet()) {
+                    String var_original = output.custom_paramsMap.get(custom_param);
+                    try {
+                        Double.parseDouble(var_original);
+                    } catch (NumberFormatException e) {
+                        String var_sign;
+                        int var_offset;
+                        int index = var_original.indexOf('\'');
+                        if (index != -1) {
+                            var_sign = var_original.substring(0, index);
+                            var_offset = Integer.parseInt(var_original.substring(index + 1));
+                        } else {
+                            var_sign = var_original;
+                            var_offset = 0;
+                        }
+
+                        if (!output.var_originalMap.containsKey(var_original)) {
+                            output.var_originalMap.put(var_original, true);
+                        }
+                        if (!output.var_signMap.containsKey(var_sign)) {
+                            output.var_signMap.put(var_sign, true);
+                        }
+                        if (!output.var_stepSpanMap.containsKey(var_sign)) {
+                            output.var_stepSpanMap.put(var_sign, new StepSpan(var_offset, var_offset));
+                        } else {
+                            StepSpan stepSpan = output.var_stepSpanMap.get(var_sign);
+                            if (stepSpan.backward > var_offset) {
+                                stepSpan.backward = var_offset;
+                            }
+                            if (stepSpan.forward < var_offset) {
+                                stepSpan.forward = var_offset;
+                            }
+                        }
+                        if (inputMap.containsKey(var_sign)) {
+                            CoreInput input = inputMap.get(var_sign);
+                            if (!output.time_period_intialized) {
+                                if (DateUtil.Instance().compare(output.time_period, input.time_period) < 0) {
+                                    output.time_period = input.time_period;
+                                }
+                            }
+                        }
+                    }
+                }
+            } else {
+                throw new Exception("output.mode error:" + output.mode);
+            }
+            for (String input_sign : output.var_signMap.keySet()) {
+                if (!all_var.containsKey(input_sign)) {
+                    all_var.put(input_sign, true);
+                }
+            }
+        }
+
+        List<Integer> removeList = new ArrayList<Integer>();
+        for (int i = 0; i < inputList.size(); i++) {
+            CoreInput input = inputList.get(i);
+            if (!all_var.containsKey(input.input_sign)) {
+                removeList.add(i);
+            }
+        }
+        for (int i = removeList.size() - 1; i >= 0; i--) {
+            inputList.remove(removeList.get(i));
+        }
+    }
+
+    private static void RefreshByNode(Map<String, CoreInput> inputMap, Map<String, CoreOutput> outputMap, CoreOutput output, GrammarTreeNode node)
+            throws Exception {
+        if ("const".equals(node.type)) {
+        } else if ("var".equals(node.type)) {
+            if (!output.var_originalMap.containsKey(node.var_original)) {
+                output.var_originalMap.put(node.var_original, true);
+            }
+            if (!output.var_signMap.containsKey(node.var_sign)) {
+                output.var_signMap.put(node.var_sign, true);
+            }
+            if (!inputMap.containsKey(node.var_sign) && !outputMap.containsKey(node.var_sign)) {
+                throw new Exception("var not exist in input:" + node.var_sign);
+            }
+            if (!output.var_stepSpanMap.containsKey(node.var_sign)) {
+                output.var_stepSpanMap.put(node.var_sign, new StepSpan(node.var_offset, node.var_offset));
+            } else {
+                StepSpan stepSpan = output.var_stepSpanMap.get(node.var_sign);
+                if (stepSpan.backward > node.var_offset) {
+                    stepSpan.backward = node.var_offset;
+                }
+                if (stepSpan.forward < node.var_offset) {
+                    stepSpan.forward = node.var_offset;
+                }
+            }
+            if (inputMap.containsKey(node.var_sign)) {
+                CoreInput input = inputMap.get(node.var_sign);
+                if (!output.time_period_intialized) {
+                    if (DateUtil.Instance().compare(output.time_period, input.time_period) < 0) {
+                        output.time_period = input.time_period;
+                    }
+                }
+            }
+        } else if ("other".equals(node.type)) {
+            output.other_paramMap.put(node.other, true);
+        } else if ("evaluate".equals(node.type)) {
+            for (GrammarTreeNode nodeInner : node.evaluateItemList) {
+                RefreshByNode(inputMap, outputMap, output, nodeInner);
+            }
+        } else if ("compare".equals(node.type)) {
+            RefreshByCompare(inputMap, outputMap, output, node.compare);
+            RefreshByNode(inputMap, outputMap, output, node.compare_yes_node);
+            RefreshByNode(inputMap, outputMap, output, node.compare_no_node);
+        }
+    }
+
+    private static void RefreshByCompare(Map<String, CoreInput> inputMap, Map<String, CoreOutput> outputMap, CoreOutput output,
+                                         GrammarCompare compare) throws Exception {
+        if ("itom".equals(compare.type)) {
+            RefreshByNode(inputMap, outputMap, output, compare.itom_left);
+            RefreshByNode(inputMap, outputMap, output, compare.itom_right);
+        } else if ("group".equals(compare.type)) {
+            for (GrammarCompare compareInner : compare.groupItemList) {
+                RefreshByCompare(inputMap, outputMap, output, compareInner);
+            }
+        }
+    }
+
+    public static double ComputeNode(GrammarTreeNode node, Map<String, Double> dataMap) throws Exception {
+        if ("const".equals(node.type)) {
+            return node.const_value;
+        } else if ("var".equals(node.type)) {
+            Double value = dataMap.get(node.var_original);
+            if (value != null) {
+                return value;
+            } else {
+                return 0.0;
+            }
+        } else if ("other".equals(node.type)) {
+            Double value = dataMap.get(node.other);
+            if (value != null) {
+                return value;
+            } else {
+                return 0.0;
+            }
+        } else if ("evaluate".equals(node.type)) {
+            List<Double> children = new ArrayList<Double>();
+            for (GrammarTreeNode nodeInner : node.evaluateItemList) {
+                double child = ComputeNode(nodeInner, dataMap);
+                children.add(child);
+            }
+            Double result = null;
+            if ("+".equals(node.evaluate)) {
+                result = 0.0;
+                for (Double child : children) {
+                    result += child;
+                }
+            } else if ("-".equals(node.evaluate)) {
+                result = children.get(0) - children.get(1);
+            } else if ("*".equals(node.evaluate)) {
+                result = 1.0;
+                for (Double child : children) {
+                    result *= child;
+                }
+            } else if ("/".equals(node.evaluate)) {
+                result = children.get(0) / children.get(1);
+            } else if ("max".equals(node.evaluate)) {
+                for (Double child : children) {
+                    if (result == null) {
+                        result = child;
+                    } else {
+                        if (result < child) {
+                            result = child;
+                        }
+                    }
+                }
+            } else if ("min".equals(node.evaluate)) {
+                result = 1.0;
+                for (Double child : children) {
+                    if (result == null) {
+                        result = child;
+                    } else {
+                        if (result > child) {
+                            result = child;
+                        }
+                    }
+                }
+            } else if (MathUtil.Instance().diy_funname(MathUtil.Instance().fun0p, node.evaluate)) {
+                result = MathUtil.Instance().fun0p_value(node.evaluate);
+            } else if (MathUtil.Instance().diy_funname(MathUtil.Instance().fun1p, node.evaluate)) {
+                result = MathUtil.Instance().fun1p_value(node.evaluate, children.get(0));
+            } else if (MathUtil.Instance().diy_funname(MathUtil.Instance().fun2p, node.evaluate)) {
+                result = MathUtil.Instance().fun2p_value(node.evaluate, children.get(0), children.get(1));
+            } else {
+                throw new Exception("operator error:" + node.evaluate);
+            }
+            return result;
+        } else if ("compare".equals(node.type)) {
+            Double result;
+            boolean com = Compute_compare(node.compare, dataMap);
+            if (com) {
+                result = ComputeNode(node.compare_yes_node, dataMap);
+            } else {
+                result = ComputeNode(node.compare_no_node, dataMap);
+            }
+            return result;
+        } else {
+            throw new Exception("type error:" + node.type);
+        }
+    }
+
+    private static boolean Compute_compare(GrammarCompare compare, Map<String, Double> dataMap) throws Exception {
+        if ("itom".equals(compare.type)) {
+            double left = ComputeNode(compare.itom_left, dataMap);
+            double right = ComputeNode(compare.itom_right, dataMap);
+            return MathUtil.Instance().cmp_value(compare.itom_op, left, right);
+        } else if ("group".equals(compare.type)) {
+            if ("&&".equals(compare.group_op)) {
+                boolean all_yes = true;
+                for (GrammarCompare compareInner : compare.groupItemList) {
+                    if (!Compute_compare(compareInner, dataMap)) {
+                        all_yes = false;
+                        break;
+                    }
+                }
+                return all_yes;
+            } else if ("||".equals(compare.group_op)) {
+                boolean exist_yes = false;
+                for (GrammarCompare compareInner : compare.groupItemList) {
+                    if (Compute_compare(compareInner, dataMap)) {
+                        exist_yes = true;
+                        break;
+                    }
+                }
+                return exist_yes;
+            } else if ("!".equals(compare.group_op)) {
+                return !Compute_compare(compare.groupItemList.get(0), dataMap);
+            } else {
+                throw new Exception("compare group_op error:" + compare.group_op);
+            }
+        } else {
+            throw new Exception("compare type error:" + compare.type);
+        }
+    }
+}

+ 195 - 0
src/main/java/com/sagacloud/util/compute_engine/core/CoreComputeUtilUtil.java

@@ -0,0 +1,195 @@
+package com.sagacloud.util.compute_engine.core;
+
+import com.sagacloud.parser.simulator.String2Grammar;
+import com.sagacloud.util.compute_engine.util.DateUtil;
+
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+public class CoreComputeUtilUtil {
+    public static void main(String[] args) throws Exception {
+        String expression = "servicedata_1001_10101+servicedata_1002_10101-servicedata_1003_10101-servicedata_1004_10101";
+        GrammarTreeNode node = String2Grammar.Generate(expression);
+        Map<String, Double> dataMap = new HashMap<String, Double>();
+        dataMap.put("servicedata_1001_10101", null);
+        dataMap.put("servicedata_1002_10101", 0.0);
+        dataMap.put("servicedata_1003_10101", 0.0);
+        dataMap.put("servicedata_1003_10101", null);
+        boolean rrr = CantCompute(node, dataMap);
+        System.out.println(rrr);
+    }
+
+    public static void BuildNetwork(CoreInstance instance) throws Exception {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
+        List<CoreOutput> outputListOrdered = new ArrayList<CoreOutput>();
+        List<CoreInput> inputList = instance.inputList;
+        List<CoreOutput> outputList = instance.outputList;
+        Map<String, CoreInput> inputMap = new HashMap<String, CoreInput>();
+        for (CoreInput input : inputList) {
+            input.successorList = new ArrayList<CoreOutput>();
+            inputMap.put(input.input_sign, input);
+        }
+        Map<String, CoreOutput> outputMap = new HashMap<String, CoreOutput>();
+        Map<String, List<CoreOutput>> sign2listMap = new HashMap<String, List<CoreOutput>>();
+        for (CoreOutput output : outputList) {
+            output.predecessorList = new ArrayList<Object>();
+            output.successorList = new ArrayList<CoreOutput>();
+            output.all_input = new HashMap<String, Boolean>();
+            outputMap.put(output.output_sign + "-" + sdf.format(output.time_begin), output);
+            if (!sign2listMap.containsKey(output.output_sign)) {
+                sign2listMap.put(output.output_sign, new ArrayList<CoreOutput>());
+            }
+            sign2listMap.get(output.output_sign).add(output);
+        }
+        for (CoreOutput output : outputList) {
+            List<CoreInput> tmpInputList = new ArrayList<CoreInput>();
+            List<CoreOutput> tmpOutputList = new ArrayList<CoreOutput>();
+            for (String input_sign : output.var_signMap.keySet()) {
+                if (inputMap.containsKey(input_sign)) {
+                    CoreInput input = inputMap.get(input_sign);
+                    tmpInputList.add(input);
+                } else {
+                    CoreOutput tmp_output = outputMap.get(input_sign + "-" + sdf.format(output.time_begin));
+                    if (tmp_output == null) {
+                        List<CoreOutput> relList = sign2listMap.get(input_sign);
+                        if (relList.size() == 1) {
+                            tmp_output = relList.get(0);
+                        }
+                    }
+                    tmpOutputList.add(tmp_output);
+                }
+            }
+            for (CoreInput tmpInput : tmpInputList) {
+                tmpInput.successorList.add(output);
+                output.predecessorList.add(tmpInput);
+            }
+            for (CoreOutput tmpOutput : tmpOutputList) {
+                tmpOutput.successorList.add(output);
+                output.predecessorList.add(tmpOutput);
+            }
+        }
+        Map<String, Boolean> finishMap = new HashMap<String, Boolean>();
+        while (true) {
+            int size1 = finishMap.size();
+            for (CoreOutput output : outputList) {
+                if (finishMap.containsKey(output.output_sign + "_" + sdf.format(output.time_begin))) {
+                    continue;
+                }
+                List<CoreOutput> tmpOutputList = new ArrayList<CoreOutput>();
+                for (Object predecessor : output.predecessorList) {
+                    if (predecessor instanceof CoreOutput) {
+                        tmpOutputList.add((CoreOutput) predecessor);
+                    }
+                }
+                boolean children_ok = true;
+                for (CoreOutput tmpOutput : tmpOutputList) {
+                    if (!finishMap.containsKey(tmpOutput.output_sign + "_" + sdf.format(tmpOutput.time_begin))) {
+                        children_ok = false;
+                        break;
+                    }
+                }
+                if (!children_ok) {
+                    continue;
+                }
+                for (Object predecessor : output.predecessorList) {
+                    if (predecessor instanceof CoreInput) {
+                        CoreInput input = (CoreInput) predecessor;
+                        output.all_input.putIfAbsent(input.input_sign, true);
+                        if (!output.time_period_intialized) {
+                            if (DateUtil.Instance().compare(output.time_period, input.time_period) < 0) {
+                                output.time_period = input.time_period;
+                            }
+                        }
+                    } else if (predecessor instanceof CoreOutput) {
+                        CoreOutput tmpOutput = (CoreOutput) predecessor;
+                        if (!output.time_period_intialized) {
+                            if (DateUtil.Instance().compare(output.time_period, tmpOutput.time_period) < 0) {
+                                output.time_period = tmpOutput.time_period;
+                            }
+                        }
+                    }
+                }
+                for (CoreOutput tmpOutput : tmpOutputList) {
+                    for (String tmpkey : tmpOutput.all_input.keySet()) {
+                        output.all_input.putIfAbsent(tmpkey, true);
+                    }
+                }
+                finishMap.put(output.output_sign + "_" + sdf.format(output.time_begin), true);
+                outputListOrdered.add(output);
+            }
+            int size2 = finishMap.size();
+            if (size2 == size1) {
+                break;
+            }
+        }
+        if (finishMap.size() != outputList.size()) {
+            StringBuffer sb = new StringBuffer();
+            for (CoreOutput output : outputList) {
+                if (!finishMap.containsKey(output.output_sign + "_" + sdf.format(output.time_begin))) {
+                    sb.append("\t" + output.output_sign + "_" + sdf.format(output.time_begin));
+                }
+            }
+            throw new Exception("CoreInstance network cant build:" + sb);
+        }
+        instance.outputList = outputListOrdered;
+    }
+
+    public static boolean CantCompute(GrammarTreeNode node, Map<String, Double> dataMap) {
+        Map<String, Boolean> jiashuMap = new HashMap<String, Boolean>();
+        boolean jiahao = jiahao(node, jiashuMap);
+        if (jiahao) {
+            boolean exist_data = false;
+            Iterator<String> iter = jiashuMap.keySet().iterator();
+            while (iter.hasNext()) {
+                String key = iter.next();
+                if (dataMap.get(key) != null) {
+                    exist_data = true;
+                    break;
+                }
+            }
+            return !exist_data;
+        } else {
+            return false;
+        }
+    }
+
+    private static boolean jiahao(GrammarTreeNode node, Map<String, Boolean> jiashuMap) {
+        if ("evaluate".equals(node.type)) {
+            if ("+".equals(node.evaluate)) {
+                boolean all_true = true;
+                for (int i = 0; i < node.evaluateItemList.size(); i++) {
+                    GrammarTreeNode jia_node = node.evaluateItemList.get(i);
+                    if ("evaluate".equals(jia_node.type)) {
+                        boolean tmp = jiahao(jia_node, jiashuMap);
+                        if (!tmp) {
+                            all_true = false;
+                        }
+                    } else if ("const".equals(jia_node.type)) {
+                    } else if ("var".equals(jia_node.type)) {
+                        jiashuMap.put(jia_node.var_original, true);
+                    } else {
+                        all_true = false;
+                    }
+                }
+                return all_true;
+            } else if ("-".equals(node.evaluate)) {
+                GrammarTreeNode jia_node = node.evaluateItemList.get(0);
+                if ("evaluate".equals(jia_node.type)) {
+                    return jiahao(jia_node, jiashuMap);
+                } else if ("const".equals(jia_node.type)) {
+                    return true;
+                } else if ("var".equals(jia_node.type)) {
+                    jiashuMap.put(jia_node.var_original, true);
+                    return true;
+                } else {
+                    return false;
+                }
+            } else {
+                return false;
+            }
+        } else {
+            return false;
+        }
+    }
+
+}

+ 129 - 0
src/main/java/com/sagacloud/util/compute_engine/core/CoreComputeUtil_other.java

@@ -0,0 +1,129 @@
+package com.sagacloud.util.compute_engine.core;
+
+import com.alibaba.fastjson.JSONObject;
+import com.sagacloud.extend.dao_data.ImplDao_tenantbalance;
+import com.sagacloud.util.compute_engine.entity.Entity_tenant_energy_price;
+import com.sagacloud.util.compute_engine.util.ConstantCE;
+import com.sagacloud.util.compute_engine.util.DateUtil;
+import com.sagacloud.util.compute_engine.util.DoubleTimeObject;
+import com.sagacloud.util.compute_engine.util.TimeSpan;
+
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+@SuppressWarnings("unchecked")
+public class CoreComputeUtil_other {
+    private static double value2double(Object value) throws Exception {
+        if (value instanceof Integer) {
+            return ((Integer) value).doubleValue();
+        } else if (value instanceof Long) {
+            return ((Long) value).doubleValue();
+        } else if (value instanceof BigInteger) {
+            return ((BigInteger) value).doubleValue();
+        } else if (value instanceof Float) {
+            return ((Float) value).doubleValue();
+        } else if (value instanceof Double) {
+            return ((Double) value).doubleValue();
+        } else if (value instanceof BigDecimal) {
+            return ((BigDecimal) value).doubleValue();
+        } else {
+            return (Double) value;
+        }
+    }
+
+    public static double GetOtherValue(String tmpDate, Map<String, Object> otherMap, String other_param) throws Exception {
+        if (other_param.startsWith("time_price") || other_param.startsWith("fixed_price")) {
+            Map<String, List<Entity_tenant_energy_price>> priceListMap = (Map<String, List<Entity_tenant_energy_price>>) otherMap.get("priceListMap");
+            int index_ = other_param.lastIndexOf("_");
+            String energy_type = other_param.substring(index_ + 1);
+            List<Entity_tenant_energy_price> priceList = priceListMap.get(energy_type);
+            for (Entity_tenant_energy_price price : priceList) {
+                if (price.getValid_time_from() == null || price.getValid_time_from().compareTo(tmpDate) <= 0) {
+                    if (price.getValid_time_to() == null || price.getValid_time_to().compareTo(tmpDate) > 0) {
+                        if (price.priceObject instanceof JSONObject) {
+                            JSONObject json = (JSONObject) price.priceObject;
+                            String JFGP = other_param.substring("time_price".length() + 1, "time_price".length() + 2);
+                            return value2double(json.get(JFGP));
+                        } else {
+                            return value2double(price.priceObject);
+                        }
+                    }
+                } else {
+                    break;
+                }
+            }
+        }
+        throw new Exception("price not found");
+    }
+
+    public static void Compute_other(String other_type, String object_sign, String instance_name, long compute_round, CoreOutput output,
+                                     String time_period, List<TimeSpan> timeSpanList, List<List<DoubleTimeObject>> outputDataListList,
+                                     List<DoubleTimeObject> outputDataList_all, IDao_log dao_log) throws Exception {
+        if ("tenant_ruanchongruankou".equals(other_type)) {
+            JSONObject dao_key = output.dao_key;
+            IDao_data dao_tenantfee = Dao_dataManager.Instance().Get("tenantfee");
+            ImplDao_tenantbalance dao_tenantbalance = (ImplDao_tenantbalance) Dao_dataManager.Instance().Get("tenantbalance");
+            // 起始时间和数据列表
+            Date first_time = timeSpanList.get(0).timefrom;
+            first_time = DateUtil.Instance().GetDate_offset(first_time, time_period, -1);
+            List<DoubleTimeObject> feeList = dao_tenantfee.GetDataListGteLte(dao_key, time_period, first_time, null, true);
+
+            // 之前的余额
+            DoubleTimeObject balanceLast = dao_tenantbalance.GetData_last(dao_key, first_time);
+            if (balanceLast == null) {
+                balanceLast = dao_tenantbalance.GetBalance_initial(dao_key);
+            }
+            // 充值记录
+            List<DoubleTimeObject> rechargeList = dao_tenantbalance.GetRechargeList(dao_key, first_time);
+            List<DoubleTimeObject> rechargeList_used = new ArrayList<DoubleTimeObject>();
+            int index_recharge = 0;
+            List<DoubleTimeObject> balanceList = new ArrayList<DoubleTimeObject>();
+            double tmp = balanceLast.data_value;
+            for (int i = 0; i < feeList.size(); i++) {
+                DoubleTimeObject fee = feeList.get(i);
+                Date nextTmp = DateUtil.Instance().GetDate_offset(fee.data_time, time_period, 1);
+                List<DoubleTimeObject> rechargeList_tmp = new ArrayList<DoubleTimeObject>();
+                for (int ii = index_recharge; ii < rechargeList.size(); ii++) {
+                    DoubleTimeObject recharge_tmp = rechargeList.get(ii);
+                    index_recharge = ii;
+                    if (recharge_tmp.data_time.getTime() > nextTmp.getTime()) {
+                        break;
+                    } else if (recharge_tmp.data_time.getTime() > fee.data_time.getTime()) {
+                        rechargeList_tmp.add(recharge_tmp);
+                        rechargeList_used.add(recharge_tmp);
+                    }
+                }
+                tmp -= fee.data_value;
+                for (DoubleTimeObject recharge_tmp : rechargeList_tmp) {
+                    tmp += recharge_tmp.data_value;
+                }
+                DoubleTimeObject balance = new DoubleTimeObject();
+                balance.data_time = nextTmp;
+                balance.data_value = tmp;
+                balanceList.add(balance);
+            }
+            for (DoubleTimeObject recharge_used : rechargeList_used) {
+                dao_tenantbalance.SetRecharge_used(dao_key, recharge_used.data_time);
+            }
+
+            if (balanceList.size() > 0) {
+                Date nextDate = DateUtil.Instance().GetDate_offset(first_time, time_period, 1);
+                dao_tenantbalance.DeleteDataListGteLte(dao_key, time_period, nextDate, null);
+                ConstantCE.SleepBetweenDeleteAndInsert();
+                dao_tenantbalance.InsertDataListGteLte(dao_key, time_period, balanceList);
+
+                DoubleTimeObject present = balanceList.get(balanceList.size() - 1);
+                DoubleTimeObject present_exist = dao_tenantbalance.GetBalance_present(dao_key);
+                if (present_exist == null) {
+                    dao_tenantbalance.InsertDataBalance_present(dao_key, present);
+                } else {
+                    dao_tenantbalance.UpdateBalance_present(dao_key, present);
+                }
+            }
+        }
+    }
+}

+ 26 - 0
src/main/java/com/sagacloud/util/compute_engine/core/CoreInput.java

@@ -0,0 +1,26 @@
+package com.sagacloud.util.compute_engine.core;
+
+import com.alibaba.fastjson.JSONObject;
+
+import java.util.List;
+
+public class CoreInput {
+    // 编号
+    public String input_sign;
+    public String time_period;
+    // near,consumption
+    public String data_class;
+    // 传递给dao_data的标记
+    public String dao_type;
+    public JSONObject dao_key;
+    //
+    public String source_object_sign;
+    public String source_instance_name;
+    public String source_output_sign;
+
+    // 只有servicedata用到
+    public String data_type;
+
+    // network
+    public List<CoreOutput> successorList;
+}

+ 77 - 0
src/main/java/com/sagacloud/util/compute_engine/core/CoreInstance.java

@@ -0,0 +1,77 @@
+package com.sagacloud.util.compute_engine.core;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.sagacloud.util.compute_engine.entity.Entity_ci_instance;
+import com.sagacloud.util.compute_engine.entity.Entity_ci_instanceinput;
+import com.sagacloud.util.compute_engine.entity.Entity_ci_instanceoutput;
+import lombok.extern.slf4j.Slf4j;
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.List;
+@Slf4j
+public class CoreInstance {
+    public String object_sign;
+    public String instance_name;
+    public List<CoreInput> inputList = new ArrayList<CoreInput>();
+    public List<CoreOutput> outputList = new ArrayList<CoreOutput>();
+
+    public static CoreInstance Convert(Entity_ci_instance instance) {
+        CoreInstance result = new CoreInstance();
+        try {
+            result.object_sign = instance.getObject_sign();
+            result.instance_name = instance.getInstance_name();
+            for (Entity_ci_instanceinput instanceinput : instance.getInputs()) {
+                CoreInput input = Convert_input(instanceinput);
+                result.inputList.add(input);
+            }
+            for (Entity_ci_instanceoutput instanceoutput : instance.getOutputs()) {
+                CoreOutput output = Convert_output(instanceoutput);
+                result.outputList.add(output);
+            }
+        } catch (ParseException e) {
+            log.error(e.getMessage(),e);
+        }
+        return result;
+    }
+
+    public static CoreInput Convert_input(Entity_ci_instanceinput instanceinput) {
+        CoreInput input = new CoreInput();
+        input.input_sign = instanceinput.getInput_sign();
+        input.time_period = instanceinput.getTime_period();
+        input.data_class = instanceinput.getData_class();
+        input.dao_type = instanceinput.getDao_type();
+        input.dao_key = (JSONObject) JSON.parse(instanceinput.getDao_key());
+        input.source_object_sign = instanceinput.getSource_object_sign();
+        input.source_instance_name = instanceinput.getSource_instance_name();
+        input.source_output_sign = instanceinput.getSource_output_sign();
+        return input;
+    }
+
+    public static CoreOutput Convert_output(Entity_ci_instanceoutput instanceoutput) throws ParseException {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
+        CoreOutput output = new CoreOutput();
+        output.output_sign = instanceoutput.getOutput_sign();
+        output.time_begin = sdf.parse(instanceoutput.getTime_begin());
+        output.time_end = sdf.parse(instanceoutput.getTime_end());
+        output.data_class = instanceoutput.getData_class();
+        output.dao_type = instanceoutput.getDao_type();
+        output.dao_key = (JSONObject) JSON.parse(instanceoutput.getDao_key());
+        output.need_all_var_data = instanceoutput.getNeed_all_var_data();
+        output.time_period_intialized = instanceoutput.getTime_period_intialized();
+        output.time_period = instanceoutput.getTime_period();
+        output.mode = instanceoutput.getMode();
+        output.expression = instanceoutput.getExpression();
+        output.custom_function_name = instanceoutput.getCustom_function_name();
+        if (instanceoutput.getCustom_paramsMap() != null) {
+            JSONObject itemJSON = (JSONObject) JSON.parse(instanceoutput.getCustom_paramsMap());
+            for (String key : itemJSON.keySet()) {
+                output.custom_paramsMap.put(key, (String) itemJSON.get(key));
+            }
+        }
+        output.otherMap = instanceoutput.getOtherMap();
+        return output;
+    }
+}

+ 51 - 0
src/main/java/com/sagacloud/util/compute_engine/core/CoreOutput.java

@@ -0,0 +1,51 @@
+package com.sagacloud.util.compute_engine.core;
+
+import com.alibaba.fastjson.JSONObject;
+import com.sagacloud.util.compute_engine.util.StepSpan;
+
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class CoreOutput {
+    // 编号
+    public String output_sign;
+    public Date time_begin;
+    public Date time_end;
+    // near,consumption
+    public String data_class;
+    // 传递给dao_data的标记
+    public String dao_type;
+    public JSONObject dao_key;
+    // 默认有一个输入数据就计算,true表示所有输入数据齐活了才算
+    public boolean need_all_var_data = false;
+    // 是否已经初始化
+    public boolean time_period_intialized = false;
+    // 未初始化,则根据mode和输入自动设置的字段
+    public String time_period;
+    // expression,custom
+    public String mode;
+    // 公式
+    public String expression;
+    //
+    public String custom_function_name;
+    //
+    public Map<String, String> custom_paramsMap = new HashMap<String, String>();
+
+    // 语法树
+    public GrammarTreeNode root;
+    public Map<String, Boolean> var_originalMap = new HashMap<String, Boolean>();
+    public Map<String, Boolean> var_signMap = new HashMap<String, Boolean>();
+    public Map<String, StepSpan> var_stepSpanMap = new HashMap<String, StepSpan>();
+    public Map<String, Boolean> other_paramMap = new HashMap<String, Boolean>();
+
+    // 其他
+    public String other_type;
+    public Map<String, Object> otherMap;
+
+    // network
+    public List<Object> predecessorList;
+    public List<CoreOutput> successorList;
+    public Map<String, Boolean> all_input;
+}

+ 15 - 0
src/main/java/com/sagacloud/util/compute_engine/core/CoreOutputBag.java

@@ -0,0 +1,15 @@
+package com.sagacloud.util.compute_engine.core;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class CoreOutputBag {
+    public String source_object_sign;
+    public String source_instance_name;
+    public Map<String, CoreInput> outputMap = new HashMap<String, CoreInput>();
+
+    public CoreOutputBag(String source_object_sign, String source_instance_name) {
+        this.source_object_sign = source_object_sign;
+        this.source_instance_name = source_instance_name;
+    }
+}

+ 131 - 0
src/main/java/com/sagacloud/util/compute_engine/core/CustomFunctionManager.java

@@ -0,0 +1,131 @@
+package com.sagacloud.util.compute_engine.core;
+
+
+import lombok.extern.slf4j.Slf4j;
+import org.reflections.Reflections;
+
+import java.io.File;
+import java.net.URL;
+import java.net.URLClassLoader;
+import java.util.*;
+import java.util.jar.JarEntry;
+import java.util.jar.JarFile;
+@Slf4j
+public class CustomFunctionManager {
+    private static final CustomFunctionManager instance = new CustomFunctionManager();
+    Map<String, ICustomFunction> functionMap = new HashMap<String, ICustomFunction>();
+
+    private CustomFunctionManager() {
+        this.LoadClassByReflections();
+        this.LoadClassByJar();
+    }
+
+    public static CustomFunctionManager Instance() {
+        return instance;
+    }
+
+    private void LoadClassByReflections() {
+        try {
+            Reflections reflections = new Reflections("com.sagacloud.extend.customfunction");
+            Set<Class<?>> annotated = reflections.getTypesAnnotatedWith(AnnotationDescription.class);
+            Iterator<Class<?>> classIter = annotated.iterator();
+            while (classIter.hasNext()) {
+                Class<?> clazz = classIter.next();
+                Class<?>[] interfaces = clazz.getInterfaces();
+                boolean flag = false;
+                for (int ii = 0; ii < interfaces.length; ii++) {
+                    Class<?> inter = interfaces[ii];
+                    if ("com.sagacloud.util.compute_engine.core.ICustomFunction".equals(inter.getName())) {
+                        flag = true;
+                    }
+                }
+                if (flag) {
+                    this.add((ICustomFunction) clazz.newInstance());
+                }
+            }
+        } catch (Exception e) {
+            log.error(e.getMessage(),e);
+        }
+    }
+
+    private void LoadClassByJar() {
+        try {
+            String dirPath = System.getProperty("user.dir") + "/custom/";
+            File dir = new File(dirPath);
+            String[] files = new String[0];
+            // wrapper
+            if (!dir.exists()) {
+                dirPath = System.getProperty("user.dir") + "/../lib/custom/";
+                dir = new File(dirPath);
+                if (dir.exists()) {
+                    files = dir.list();
+                }
+            } else {
+                files = dir.list();
+            }
+            URL[] urls = new URL[files.length];
+            for (int i = 0; i < files.length; i++) {
+                urls[i] = new URL("file:" + dirPath + files[i]);
+            }
+            URLClassLoader loader = new URLClassLoader(urls);
+            for (int i = 0; i < files.length; i++) {
+                File file = new File(dirPath + files[i]);
+                if (file.isFile()) {
+                    JarFile jar = new JarFile(file);
+
+                    Enumeration<JarEntry> entries = jar.entries();
+                    while (entries.hasMoreElements()) {
+                        JarEntry entry = entries.nextElement();
+
+                        if (entry.getName().endsWith(".class")) {
+                            String name = entry.getName();
+                            name = name.substring(0, name.length() - 6);
+                            name = name.replaceAll("/", ".");
+                            Class<?> clazz = loader.loadClass(name);
+                            Class<?>[] interfaces = clazz.getInterfaces();
+                            boolean flag = false;
+                            for (int ii = 0; ii < interfaces.length; ii++) {
+                                Class<?> inter = interfaces[ii];
+                                if ("com.sagacloud.util.compute_engine.core.ICustomFunction".equals(inter.getName())) {
+                                    flag = true;
+                                }
+                            }
+                            if (flag) {
+                                this.add((ICustomFunction) clazz.newInstance());
+                            }
+                        }
+                    }
+
+                    jar.close();
+                }
+            }
+            loader.close();
+        } catch (Exception e) {
+            log.error(e.getMessage(),e);
+        }
+    }
+
+    private void add(ICustomFunction function) {
+        this.functionMap.put(function.GetName(), function);
+    }
+
+    public ICustomFunction Get(String name) {
+        return this.functionMap.get(name);
+    }
+
+    public double Compute(String custom_function_name, Map<String, String> custom_paramsMap, Map<String, Double> dataMap)
+            throws Exception {
+        Map<String, Double> inputMap = new HashMap<String, Double>();
+        for (String custom_param : custom_paramsMap.keySet()) {
+            String var_original = custom_paramsMap.get(custom_param);
+            try {
+                double const_value = Double.parseDouble(var_original);
+                inputMap.put(custom_param, const_value);
+            } catch (NumberFormatException e) {
+                inputMap.put(custom_param, dataMap.get(var_original));
+            }
+        }
+        ICustomFunction function = this.Get(custom_function_name);
+        return function.Compute(inputMap);
+    }
+}

+ 123 - 0
src/main/java/com/sagacloud/util/compute_engine/core/Dao_dataManager.java

@@ -0,0 +1,123 @@
+package com.sagacloud.util.compute_engine.core;
+
+
+import lombok.extern.slf4j.Slf4j;
+import org.reflections.Reflections;
+
+import java.io.File;
+import java.net.URL;
+import java.net.URLClassLoader;
+import java.util.*;
+import java.util.jar.JarEntry;
+import java.util.jar.JarFile;
+@Slf4j
+public class Dao_dataManager {
+    private static final Dao_dataManager instance = new Dao_dataManager();
+    Map<String, IDao_data> daoMap = new HashMap<String, IDao_data>();
+    private String database_name;
+
+    private Dao_dataManager() {
+    }
+
+    public static Dao_dataManager Instance() {
+        return instance;
+    }
+
+    public void Initialize(String database_name) {
+
+        this.database_name = database_name;
+
+        this.LoadClassByReflections();
+        this.LoadClassByJar();
+    }
+
+    private void LoadClassByReflections() {
+        try {
+            Reflections reflections = new Reflections("com.sagacloud.extend.dao_data");
+            Set<Class<?>> annotated = reflections.getTypesAnnotatedWith(AnnotationDescription.class);
+            Iterator<Class<?>> classIter = annotated.iterator();
+            while (classIter.hasNext()) {
+                Class<?> clazz = classIter.next();
+                Class<?>[] interfaces = clazz.getInterfaces();
+                boolean flag = false;
+                for (int ii = 0; ii < interfaces.length; ii++) {
+                    Class<?> inter = interfaces[ii];
+                    if ("com.sagacloud.util.compute_engine.core.IDao_data".equals(inter.getName())) {
+                        flag = true;
+                    }
+                }
+                if (flag) {
+                    add((IDao_data) clazz.newInstance());
+                }
+            }
+        } catch (Exception e) {
+            log.error(e.getMessage(),e);
+        }
+    }
+
+    private void LoadClassByJar() {
+        try {
+            String dirPath = System.getProperty("user.dir") + "/dao_data/";
+            File dir = new File(dirPath);
+            String[] files = new String[0];
+            // wrapper
+            if (!dir.exists()) {
+                dirPath = System.getProperty("user.dir") + "/../lib/dao_data/";
+                dir = new File(dirPath);
+                if (dir.exists()) {
+                    files = dir.list();
+                }
+            } else {
+                files = dir.list();
+            }
+            URL[] urls = new URL[files.length];
+            for (int i = 0; i < files.length; i++) {
+                urls[i] = new URL("file:" + dirPath + files[i]);
+            }
+            URLClassLoader loader = new URLClassLoader(urls);
+            for (int i = 0; i < files.length; i++) {
+                File file = new File(dirPath + files[i]);
+                if (file.isFile()) {
+                    JarFile jar = new JarFile(file);
+
+                    Enumeration<JarEntry> entries = jar.entries();
+                    while (entries.hasMoreElements()) {
+                        JarEntry entry = entries.nextElement();
+
+                        if (entry.getName().endsWith(".class")) {
+                            String name = entry.getName();
+                            name = name.substring(0, name.length() - 6);
+                            name = name.replaceAll("/", ".");
+                            Class<?> clazz = loader.loadClass(name);
+                            Class<?>[] interfaces = clazz.getInterfaces();
+                            boolean flag = false;
+                            for (int ii = 0; ii < interfaces.length; ii++) {
+                                Class<?> inter = interfaces[ii];
+                                if ("com.sagacloud.util.compute_engine.core.IDao_data".equals(inter.getName())) {
+                                    flag = true;
+                                }
+                            }
+                            if (flag) {
+                                add((IDao_data) clazz.newInstance());
+                            }
+                        }
+                    }
+
+                    jar.close();
+                }
+            }
+            loader.close();
+        } catch (Exception e) {
+            log.error(e.getMessage(),e);
+        }
+    }
+
+    private void add(IDao_data function) {
+        function.Initialize(database_name);
+        daoMap.put(function.GetName(), function);
+    }
+
+    public IDao_data Get(String dao_type) {
+        return daoMap.get(dao_type);
+    }
+}

+ 123 - 0
src/main/java/com/sagacloud/util/compute_engine/core/Dao_data_maxManager.java

@@ -0,0 +1,123 @@
+package com.sagacloud.util.compute_engine.core;
+
+
+import lombok.extern.slf4j.Slf4j;
+import org.reflections.Reflections;
+
+import java.io.File;
+import java.net.URL;
+import java.net.URLClassLoader;
+import java.util.*;
+import java.util.jar.JarEntry;
+import java.util.jar.JarFile;
+@Slf4j
+public class Dao_data_maxManager {
+    private static final Dao_data_maxManager instance = new Dao_data_maxManager();
+    Map<String, IDao_data_max> daoMap = new HashMap<String, IDao_data_max>();
+    private String database_name;
+
+    private Dao_data_maxManager() {
+    }
+
+    public static Dao_data_maxManager Instance() {
+        return instance;
+    }
+
+    public void Initialize(String database_name) {
+
+        this.database_name = database_name;
+
+        this.LoadClassByReflections();
+        this.LoadClassByJar();
+    }
+
+    private void LoadClassByReflections() {
+        try {
+            Reflections reflections = new Reflections("com.sagacloud.extend.dao_data_max");
+            Set<Class<?>> annotated = reflections.getTypesAnnotatedWith(AnnotationDescription.class);
+            Iterator<Class<?>> classIter = annotated.iterator();
+            while (classIter.hasNext()) {
+                Class<?> clazz = classIter.next();
+                Class<?>[] interfaces = clazz.getInterfaces();
+                boolean flag = false;
+                for (int ii = 0; ii < interfaces.length; ii++) {
+                    Class<?> inter = interfaces[ii];
+                    if ("com.sagacloud.util.compute_engine.core.IDao_data_max".equals(inter.getName())) {
+                        flag = true;
+                    }
+                }
+                if (flag) {
+                    add((IDao_data_max) clazz.newInstance());
+                }
+            }
+        } catch (Exception e) {
+            log.error(e.getMessage(),e);
+        }
+    }
+
+    private void LoadClassByJar() {
+        try {
+            String dirPath = System.getProperty("user.dir") + "/dao_data_max/";
+            File dir = new File(dirPath);
+            String[] files = new String[0];
+            // wrapper
+            if (!dir.exists()) {
+                dirPath = System.getProperty("user.dir") + "/../lib/dao_data_max/";
+                dir = new File(dirPath);
+                if (dir.exists()) {
+                    files = dir.list();
+                }
+            } else {
+                files = dir.list();
+            }
+            URL[] urls = new URL[files.length];
+            for (int i = 0; i < files.length; i++) {
+                urls[i] = new URL("file:" + dirPath + files[i]);
+            }
+            URLClassLoader loader = new URLClassLoader(urls);
+            for (int i = 0; i < files.length; i++) {
+                File file = new File(dirPath + files[i]);
+                if (file.isFile()) {
+                    JarFile jar = new JarFile(file);
+
+                    Enumeration<JarEntry> entries = jar.entries();
+                    while (entries.hasMoreElements()) {
+                        JarEntry entry = entries.nextElement();
+
+                        if (entry.getName().endsWith(".class")) {
+                            String name = entry.getName();
+                            name = name.substring(0, name.length() - 6);
+                            name = name.replaceAll("/", ".");
+                            Class<?> clazz = loader.loadClass(name);
+                            Class<?>[] interfaces = clazz.getInterfaces();
+                            boolean flag = false;
+                            for (int ii = 0; ii < interfaces.length; ii++) {
+                                Class<?> inter = interfaces[ii];
+                                if ("com.sagacloud.util.compute_engine.core.IDao_data_max".equals(inter.getName())) {
+                                    flag = true;
+                                }
+                            }
+                            if (flag) {
+                                add((IDao_data_max) clazz.newInstance());
+                            }
+                        }
+                    }
+
+                    jar.close();
+                }
+            }
+            loader.close();
+        } catch (Exception e) {
+            log.error(e.getMessage(),e);
+        }
+    }
+
+    private void add(IDao_data_max function) {
+        function.Initialize(database_name);
+        daoMap.put(function.GetName(), function);
+    }
+
+    public IDao_data_max Get(String dao_type) {
+        return daoMap.get(dao_type);
+    }
+}

+ 146 - 0
src/main/java/com/sagacloud/util/compute_engine/core/DataCache.java

@@ -0,0 +1,146 @@
+package com.sagacloud.util.compute_engine.core;
+
+import com.alibaba.fastjson.JSONObject;
+import com.sagacloud.util.compute_engine.util.*;
+
+import java.util.*;
+
+@SuppressWarnings("rawtypes")
+public class DataCache {
+    private final Map<String, Map<String, List<TimeSpan>>> TimeSpanListMapMap = new HashMap<String, Map<String, List<TimeSpan>>>();
+    private final Map<String, Map<String, List<DoubleTimeObject>>> DataListMapMap = new HashMap<String, Map<String, List<DoubleTimeObject>>>();
+
+    public void SetData(String input_sign, Date timefrom, Date timeto, List dataListInner, String time_period) {
+        if (!this.TimeSpanListMapMap.containsKey(input_sign)) {
+            this.TimeSpanListMapMap.put(input_sign, new HashMap<String, List<TimeSpan>>());
+            this.DataListMapMap.put(input_sign, new HashMap<String, List<DoubleTimeObject>>());
+        }
+        Map<String, List<TimeSpan>> TimeSpanListMap = this.TimeSpanListMapMap.get(input_sign);
+        Map<String, List<DoubleTimeObject>> DataListMap = this.DataListMapMap.get(input_sign);
+        if (!TimeSpanListMap.containsKey(time_period)) {
+            TimeSpanListMap.put(time_period, new ArrayList<TimeSpan>());
+            DataListMap.put(time_period, new ArrayList<DoubleTimeObject>());
+        }
+        List<TimeSpan> TimeSpanList = TimeSpanListMap.get(time_period);
+        List<DoubleTimeObject> DataList = DataListMap.get(time_period);
+        DateUtil.Instance().Merge(TimeSpanList, timefrom, timeto, time_period);
+        this.InsertDataList(DataList, dataListInner);
+    }
+
+    public List<DoubleTimeObject> GetData(String input_sign, String dao_type, JSONObject dao_key, String time_period, Date timefrom, Date timeto)
+            throws Exception {
+        if (!this.TimeSpanListMapMap.containsKey(input_sign)) {
+            this.TimeSpanListMapMap.put(input_sign, new HashMap<String, List<TimeSpan>>());
+            this.DataListMapMap.put(input_sign, new HashMap<String, List<DoubleTimeObject>>());
+        }
+        Map<String, List<TimeSpan>> TimeSpanListMap = this.TimeSpanListMapMap.get(input_sign);
+        Map<String, List<DoubleTimeObject>> DataListMap = this.DataListMapMap.get(input_sign);
+        if (!TimeSpanListMap.containsKey(time_period)) {
+            TimeSpanListMap.put(time_period, new ArrayList<TimeSpan>());
+            DataListMap.put(time_period, new ArrayList<DoubleTimeObject>());
+        }
+        List<TimeSpan> TimeSpanList = TimeSpanListMap.get(time_period);
+        List<DoubleTimeObject> DataList = DataListMap.get(time_period);
+
+        List<TimeSpan> intervalList = DateUtil.Instance().Merge(TimeSpanList, timefrom, timeto, time_period);
+        for (int i = 0; i < intervalList.size(); i++) {
+            TimeSpan intervalInner = intervalList.get(i);
+
+            long interval_real = DateUtil.Instance().get_about(time_period);
+            long interval_15min = DateUtil.Instance().get_about("15min");
+            long interval_1h = DateUtil.Instance().get_about("1h");
+            String time_period_query = time_period;
+            if (ConstantCE.high_density_enable) {
+                if (("servicedata".equals(dao_type)) && interval_real < interval_15min) {
+                    time_period_query = "15min";
+                }
+            }
+
+            List<DoubleTimeObject> dataListInner = Dao_dataManager.Instance().Get(dao_type).GetDataListGteLte(dao_key, time_period_query,
+                    intervalInner.timefrom, intervalInner.timeto, true);
+            if (ConstantCE.high_density_enable) {
+                if (("servicedata".equals(dao_type)) && interval_real < interval_15min) {
+                    dataListInner = this.sub_cycle(dataListInner, interval_15min, interval_real);
+                }
+            }
+
+            if (ConstantCE.high_density_enable) {
+                if (("servicedata".equals(dao_type)) && interval_real < interval_1h) {
+                    if (dataListInner.size() == 0) {
+                        dataListInner = Dao_dataManager.Instance().Get(dao_type).GetDataListGteLte(dao_key, "1h", intervalInner.timefrom,
+                                intervalInner.timeto, true);
+                        dataListInner = this.sub_cycle(dataListInner, interval_1h, interval_real);
+                    }
+                }
+
+                if (("energydata".equals(dao_type) || "objectdata".equals(dao_type)) && interval_real < interval_15min) {
+                    if (dataListInner.size() == 0) {
+                        dataListInner = Dao_dataManager.Instance().Get(dao_type).GetDataListGteLte(dao_key, "15min", intervalInner.timefrom,
+                                intervalInner.timeto, true);
+                        dataListInner = this.sub_cycle(dataListInner, interval_15min, interval_real);
+                    }
+                }
+                if (("energydata".equals(dao_type) || "objectdata".equals(dao_type)) && interval_real < interval_1h) {
+                    if (dataListInner.size() == 0) {
+                        dataListInner = Dao_dataManager.Instance().Get(dao_type).GetDataListGteLte(dao_key, "1h", intervalInner.timefrom,
+                                intervalInner.timeto, true);
+                        dataListInner = this.sub_cycle(dataListInner, interval_1h, interval_real);
+                    }
+                }
+            }
+
+            this.InsertDataList(DataList, dataListInner);
+        }
+
+        DoubleTimeObject datafrom = new DoubleTimeObject(timefrom, 0.0);
+        DoubleTimeObject datato = new DoubleTimeObject(timeto, 0.0);
+        int index_from = InsertUtil.Instance().FindInsertIndex(DataList, datafrom, true, 0);
+        int index_to = InsertUtil.Instance().FindInsertIndex(DataList, datato, true, 1);
+        List<DoubleTimeObject> result = new ArrayList<DoubleTimeObject>();
+        for (int i = index_from; i < index_to; i++) {
+            result.add(DataList.get(i));
+        }
+        return result;
+    }
+
+    public List<DoubleTimeObject> sub_cycle(List<DoubleTimeObject> dataListInner, long interval_15min, long interval_real) {
+        long count = interval_15min / interval_real;
+        List<DoubleTimeObject> inputDataList_arrange = new ArrayList<DoubleTimeObject>();
+        for (DoubleTimeObject data_ori : dataListInner) {
+            for (int index_tmp = 0; index_tmp < count; index_tmp++) {
+                DoubleTimeObject data_real = new DoubleTimeObject();
+                data_real.data_time = new Date(data_ori.data_time.getTime() + interval_real * index_tmp);
+                data_real.data_value = data_ori.data_value / count;
+                inputDataList_arrange.add(data_real);
+            }
+        }
+        return inputDataList_arrange;
+    }
+
+    public void PutData(String input_sign, String time_period, Date timefrom, Date timeto, List<DoubleTimeObject> dataListTmp) {
+        if (!this.TimeSpanListMapMap.containsKey(input_sign)) {
+            this.TimeSpanListMapMap.put(input_sign, new HashMap<String, List<TimeSpan>>());
+            this.DataListMapMap.put(input_sign, new HashMap<String, List<DoubleTimeObject>>());
+        }
+        Map<String, List<TimeSpan>> TimeSpanListMap = this.TimeSpanListMapMap.get(input_sign);
+        Map<String, List<DoubleTimeObject>> DataListMap = this.DataListMapMap.get(input_sign);
+        if (!TimeSpanListMap.containsKey(time_period)) {
+            TimeSpanListMap.put(time_period, new ArrayList<TimeSpan>());
+            DataListMap.put(time_period, new ArrayList<DoubleTimeObject>());
+        }
+        List<TimeSpan> TimeSpanList = TimeSpanListMap.get(time_period);
+        List<DoubleTimeObject> DataList = DataListMap.get(time_period);
+
+        DateUtil.Instance().Merge(TimeSpanList, timefrom, timeto, time_period);
+        this.InsertDataList(DataList, dataListTmp);
+    }
+
+    private void InsertDataList(List<DoubleTimeObject> DataList, List dataListInner) {
+        for (int i = 0; i < dataListInner.size(); i++) {
+            Object dataObject = dataListInner.get(i);
+            if (dataObject instanceof DoubleTimeObject) {
+                InsertUtil.Instance().InsertIntoDataList(DataList, dataObject);
+            }
+        }
+    }
+}

+ 14 - 0
src/main/java/com/sagacloud/util/compute_engine/core/GrammarCompare.java

@@ -0,0 +1,14 @@
+package com.sagacloud.util.compute_engine.core;
+
+import java.util.List;
+
+public class GrammarCompare {
+    public String type;// itom,group
+
+    public String itom_op;
+    public GrammarTreeNode itom_left;
+    public GrammarTreeNode itom_right;
+
+    public String group_op;
+    public List<GrammarCompare> groupItemList;
+}

+ 27 - 0
src/main/java/com/sagacloud/util/compute_engine/core/GrammarTreeNode.java

@@ -0,0 +1,27 @@
+package com.sagacloud.util.compute_engine.core;
+
+import java.util.List;
+
+public class GrammarTreeNode {
+    public String type;// const,var,other,evaluate,compare
+
+    // const
+    public double const_value;
+
+    // var
+    public String var_original;
+    public String var_sign;
+    public int var_offset;
+
+    // other
+    public String other;
+
+    // evaluate
+    public String evaluate;
+    public List<GrammarTreeNode> evaluateItemList;
+
+    // compare
+    public GrammarCompare compare;
+    public GrammarTreeNode compare_yes_node;
+    public GrammarTreeNode compare_no_node;
+}

+ 9 - 0
src/main/java/com/sagacloud/util/compute_engine/core/ICustomFunction.java

@@ -0,0 +1,9 @@
+package com.sagacloud.util.compute_engine.core;
+
+import java.util.Map;
+
+public interface ICustomFunction {
+    String GetName();
+
+    double Compute(Map<String, Double> inputMap);
+}

+ 19 - 0
src/main/java/com/sagacloud/util/compute_engine/core/IDao_data.java

@@ -0,0 +1,19 @@
+package com.sagacloud.util.compute_engine.core;
+
+import com.alibaba.fastjson.JSONObject;
+import com.sagacloud.util.compute_engine.util.DoubleTimeObject;
+
+import java.util.Date;
+import java.util.List;
+
+public interface IDao_data {
+    void Initialize(String database_name);
+
+    String GetName();
+
+    List<DoubleTimeObject> GetDataListGteLte(JSONObject dao_key, String time_period, Date time_from, Date time_to, boolean GteLte) throws Exception;
+
+    void DeleteDataListGteLte(JSONObject dao_key, String time_period, Date time_from, Date time_to) throws Exception;
+
+    void InsertDataListGteLte(JSONObject dao_key, String time_period, List<DoubleTimeObject> outputDataList) throws Exception;
+}

+ 20 - 0
src/main/java/com/sagacloud/util/compute_engine/core/IDao_data_max.java

@@ -0,0 +1,20 @@
+package com.sagacloud.util.compute_engine.core;
+
+import com.alibaba.fastjson.JSONObject;
+import com.sagacloud.util.compute_engine.util.DoubleTimeObject_max;
+
+import java.util.Date;
+import java.util.List;
+
+public interface IDao_data_max {
+    void Initialize(String database_name);
+
+    String GetName();
+
+    List<DoubleTimeObject_max> GetDataListGteLte(JSONObject dao_key, String time_period, Date time_from, Date time_to, boolean GteLte)
+            throws Exception;
+
+    void DeleteDataListGteLte(JSONObject dao_key, String time_period, Date time_from, Date time_to) throws Exception;
+
+    void InsertDataListGteLte(JSONObject dao_key, String time_period, List<DoubleTimeObject_max> outputDataList) throws Exception;
+}

+ 10 - 0
src/main/java/com/sagacloud/util/compute_engine/core/IDao_log.java

@@ -0,0 +1,10 @@
+package com.sagacloud.util.compute_engine.core;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+
+public interface IDao_log {
+    void InsertData(JSONObject InsertObject) throws Exception;
+
+    void InsertDataList(JSONArray InsertObjects) throws Exception;
+}

+ 70 - 0
src/main/java/com/sagacloud/util/compute_engine/data/Data_near.java

@@ -0,0 +1,70 @@
+package com.sagacloud.util.compute_engine.data;
+
+import java.util.Date;
+
+public class Data_near {
+    public String building;
+    public String meter;
+    public long funcid;
+    public String time_period;
+    public Date data_time;
+    public long data_flag;
+    public double data_value;
+
+    public String getBuilding() {
+        return building;
+    }
+
+    public void setBuilding(String building) {
+        this.building = building;
+    }
+
+    public String getMeter() {
+        return meter;
+    }
+
+    public void setMeter(String meter) {
+        this.meter = meter;
+    }
+
+    public long getFuncid() {
+        return funcid;
+    }
+
+    public void setFuncid(long funcid) {
+        this.funcid = funcid;
+    }
+
+    public String getTime_period() {
+        return time_period;
+    }
+
+    public void setTime_period(String time_period) {
+        this.time_period = time_period;
+    }
+
+    public Date getData_time() {
+        return data_time;
+    }
+
+    public void setData_time(Date data_time) {
+        this.data_time = data_time;
+    }
+
+    public long getData_flag() {
+        return data_flag;
+    }
+
+    public void setData_flag(long data_flag) {
+        this.data_flag = data_flag;
+    }
+
+    public double getData_value() {
+        return data_value;
+    }
+
+    public void setData_value(double data_value) {
+        this.data_value = data_value;
+    }
+
+}

+ 61 - 0
src/main/java/com/sagacloud/util/compute_engine/data/Data_service.java

@@ -0,0 +1,61 @@
+package com.sagacloud.util.compute_engine.data;
+
+import java.util.Date;
+
+public class Data_service {
+    public String building;
+    public String meter;
+    public long funcid;
+    public String time_period;
+    public Date data_time;
+    public double data_value;
+
+    public String getBuilding() {
+        return building;
+    }
+
+    public void setBuilding(String building) {
+        this.building = building;
+    }
+
+    public String getMeter() {
+        return meter;
+    }
+
+    public void setMeter(String meter) {
+        this.meter = meter;
+    }
+
+    public long getFuncid() {
+        return funcid;
+    }
+
+    public void setFuncid(long funcid) {
+        this.funcid = funcid;
+    }
+
+    public String getTime_period() {
+        return time_period;
+    }
+
+    public void setTime_period(String time_period) {
+        this.time_period = time_period;
+    }
+
+    public Date getData_time() {
+        return data_time;
+    }
+
+    public void setData_time(Date data_time) {
+        this.data_time = data_time;
+    }
+
+    public double getData_value() {
+        return data_value;
+    }
+
+    public void setData_value(double data_value) {
+        this.data_value = data_value;
+    }
+
+}

+ 61 - 0
src/main/java/com/sagacloud/util/compute_engine/entity/Entity_ce_computeinputdetail.java

@@ -0,0 +1,61 @@
+package com.sagacloud.util.compute_engine.entity;
+
+import java.util.Date;
+
+public class Entity_ce_computeinputdetail {
+    public String object_sign;
+    public String instance_name;
+    public long compute_round;
+    public String input_sign;
+    public Date valid_time_from;
+    public Date valid_time_to;
+
+    public String getObject_sign() {
+        return object_sign;
+    }
+
+    public void setObject_sign(String object_sign) {
+        this.object_sign = object_sign;
+    }
+
+    public String getInstance_name() {
+        return instance_name;
+    }
+
+    public void setInstance_name(String instance_name) {
+        this.instance_name = instance_name;
+    }
+
+    public long getCompute_round() {
+        return compute_round;
+    }
+
+    public void setCompute_round(long compute_round) {
+        this.compute_round = compute_round;
+    }
+
+    public String getInput_sign() {
+        return input_sign;
+    }
+
+    public void setInput_sign(String input_sign) {
+        this.input_sign = input_sign;
+    }
+
+    public Date getValid_time_from() {
+        return valid_time_from;
+    }
+
+    public void setValid_time_from(Date valid_time_from) {
+        this.valid_time_from = valid_time_from;
+    }
+
+    public Date getValid_time_to() {
+        return valid_time_to;
+    }
+
+    public void setValid_time_to(Date valid_time_to) {
+        this.valid_time_to = valid_time_to;
+    }
+
+}

+ 59 - 0
src/main/java/com/sagacloud/util/compute_engine/entity/Entity_ce_computeinputlog.java

@@ -0,0 +1,59 @@
+package com.sagacloud.util.compute_engine.entity;
+
+public class Entity_ce_computeinputlog {
+    public String object_sign;
+    public String instance_name;
+    public long compute_round;
+    public String source_object_sign;
+    public String source_instance_name;
+    public String compute_rounds;
+
+    public String getObject_sign() {
+        return object_sign;
+    }
+
+    public void setObject_sign(String object_sign) {
+        this.object_sign = object_sign;
+    }
+
+    public String getInstance_name() {
+        return instance_name;
+    }
+
+    public void setInstance_name(String instance_name) {
+        this.instance_name = instance_name;
+    }
+
+    public long getCompute_round() {
+        return compute_round;
+    }
+
+    public void setCompute_round(long compute_round) {
+        this.compute_round = compute_round;
+    }
+
+    public String getSource_object_sign() {
+        return source_object_sign;
+    }
+
+    public void setSource_object_sign(String source_object_sign) {
+        this.source_object_sign = source_object_sign;
+    }
+
+    public String getSource_instance_name() {
+        return source_instance_name;
+    }
+
+    public void setSource_instance_name(String source_instance_name) {
+        this.source_instance_name = source_instance_name;
+    }
+
+    public String getCompute_rounds() {
+        return compute_rounds;
+    }
+
+    public void setCompute_rounds(String compute_rounds) {
+        this.compute_rounds = compute_rounds;
+    }
+
+}

+ 78 - 0
src/main/java/com/sagacloud/util/compute_engine/entity/Entity_ce_computelog.java

@@ -0,0 +1,78 @@
+package com.sagacloud.util.compute_engine.entity;
+
+import java.util.Date;
+
+public class Entity_ce_computelog {
+    public String object_sign;
+    public String instance_name;
+    public long compute_round;
+    public Date compute_time_from;
+    public Date compute_time_to;
+    public long is_finished;
+    public Date operate_time_from;
+    public Date operate_time_to;
+
+    public String getObject_sign() {
+        return object_sign;
+    }
+
+    public void setObject_sign(String object_sign) {
+        this.object_sign = object_sign;
+    }
+
+    public String getInstance_name() {
+        return instance_name;
+    }
+
+    public void setInstance_name(String instance_name) {
+        this.instance_name = instance_name;
+    }
+
+    public long getCompute_round() {
+        return compute_round;
+    }
+
+    public void setCompute_round(long compute_round) {
+        this.compute_round = compute_round;
+    }
+
+    public Date getCompute_time_from() {
+        return compute_time_from;
+    }
+
+    public void setCompute_time_from(Date compute_time_from) {
+        this.compute_time_from = compute_time_from;
+    }
+
+    public Date getCompute_time_to() {
+        return compute_time_to;
+    }
+
+    public void setCompute_time_to(Date compute_time_to) {
+        this.compute_time_to = compute_time_to;
+    }
+
+    public long getIs_finished() {
+        return is_finished;
+    }
+
+    public void setIs_finished(long is_finished) {
+        this.is_finished = is_finished;
+    }
+
+    public Date getOperate_time_from() {
+        return operate_time_from;
+    }
+
+    public void setOperate_time_from(Date operate_time_from) {
+        this.operate_time_from = operate_time_from;
+    }
+
+    public Date getOperate_time_to() {
+        return operate_time_to;
+    }
+
+    public void setOperate_time_to(Date operate_time_to) {
+        this.operate_time_to = operate_time_to;
+    }
+}

+ 69 - 0
src/main/java/com/sagacloud/util/compute_engine/entity/Entity_ce_computeoutputdetail.java

@@ -0,0 +1,69 @@
+package com.sagacloud.util.compute_engine.entity;
+
+import java.util.Date;
+
+public class Entity_ce_computeoutputdetail {
+    public String object_sign;
+    public String instance_name;
+    public long compute_round;
+    public String output_sign;
+    public Date valid_time_from;
+    public Date valid_time_to;
+    public Date operate_time_to;
+
+    public String getObject_sign() {
+        return object_sign;
+    }
+
+    public void setObject_sign(String object_sign) {
+        this.object_sign = object_sign;
+    }
+
+    public String getInstance_name() {
+        return instance_name;
+    }
+
+    public void setInstance_name(String instance_name) {
+        this.instance_name = instance_name;
+    }
+
+    public long getCompute_round() {
+        return compute_round;
+    }
+
+    public void setCompute_round(long compute_round) {
+        this.compute_round = compute_round;
+    }
+
+    public String getOutput_sign() {
+        return output_sign;
+    }
+
+    public void setOutput_sign(String output_sign) {
+        this.output_sign = output_sign;
+    }
+
+    public Date getValid_time_from() {
+        return valid_time_from;
+    }
+
+    public void setValid_time_from(Date valid_time_from) {
+        this.valid_time_from = valid_time_from;
+    }
+
+    public Date getValid_time_to() {
+        return valid_time_to;
+    }
+
+    public void setValid_time_to(Date valid_time_to) {
+        this.valid_time_to = valid_time_to;
+    }
+
+    public Date getOperate_time_to() {
+        return operate_time_to;
+    }
+
+    public void setOperate_time_to(Date operate_time_to) {
+        this.operate_time_to = operate_time_to;
+    }
+}

+ 10 - 0
src/main/java/com/sagacloud/util/compute_engine/entity/Entity_ces_detail.java

@@ -0,0 +1,10 @@
+package com.sagacloud.util.compute_engine.entity;
+
+import java.util.Date;
+
+public class Entity_ces_detail {
+    public long compute_round;
+    public String output_sign;
+    public Date valid_time_from;
+    public Date valid_time_to;
+}

+ 10 - 0
src/main/java/com/sagacloud/util/compute_engine/entity/Entity_ces_log.java

@@ -0,0 +1,10 @@
+package com.sagacloud.util.compute_engine.entity;
+
+import java.util.Date;
+
+public class Entity_ces_log {
+    public long compute_round;
+    public Date compute_time_from;
+    public Date compute_time_to;
+    public long is_recompute = 0L;
+}

+ 79 - 0
src/main/java/com/sagacloud/util/compute_engine/entity/Entity_ci_instance.java

@@ -0,0 +1,79 @@
+package com.sagacloud.util.compute_engine.entity;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import lombok.extern.slf4j.Slf4j;
+import org.zillion.util.json.FastJsonUtil;
+
+import javax.xml.bind.annotation.XmlRootElement;
+@Slf4j
+@XmlRootElement(name = "Entity_ci_instance")
+public class Entity_ci_instance {
+    String object_sign;
+    String instance_name;
+    Long flag_valid;
+    Long compute_interval_seconds;
+    Entity_ci_instanceinput[] inputs;
+    Entity_ci_instanceoutput[] outputs;
+
+    public Entity_ci_instance() {
+
+    }
+
+    public Entity_ci_instance(String str) {
+        try {
+            JSONObject json = (JSONObject) JSON.parse(str);
+            FastJsonUtil.Set_JavaObject(json, this);
+        } catch (Exception e) {
+            log.error(e.getMessage(),e);
+        }
+    }
+
+    public String getObject_sign() {
+        return object_sign;
+    }
+
+    public void setObject_sign(String object_sign) {
+        this.object_sign = object_sign;
+    }
+
+    public String getInstance_name() {
+        return instance_name;
+    }
+
+    public void setInstance_name(String instance_name) {
+        this.instance_name = instance_name;
+    }
+
+    public Long getFlag_valid() {
+        return flag_valid;
+    }
+
+    public void setFlag_valid(Long flag_valid) {
+        this.flag_valid = flag_valid;
+    }
+
+    public Long getCompute_interval_seconds() {
+        return compute_interval_seconds;
+    }
+
+    public void setCompute_interval_seconds(Long compute_interval_seconds) {
+        this.compute_interval_seconds = compute_interval_seconds;
+    }
+
+    public Entity_ci_instanceinput[] getInputs() {
+        return inputs;
+    }
+
+    public void setInputs(Entity_ci_instanceinput[] inputs) {
+        this.inputs = inputs;
+    }
+
+    public Entity_ci_instanceoutput[] getOutputs() {
+        return outputs;
+    }
+
+    public void setOutputs(Entity_ci_instanceoutput[] outputs) {
+        this.outputs = outputs;
+    }
+}

+ 115 - 0
src/main/java/com/sagacloud/util/compute_engine/entity/Entity_ci_instanceinput.java

@@ -0,0 +1,115 @@
+package com.sagacloud.util.compute_engine.entity;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import lombok.extern.slf4j.Slf4j;
+import org.zillion.util.json.FastJsonUtil;
+
+import javax.xml.bind.annotation.XmlRootElement;
+@Slf4j
+@XmlRootElement(name = "Entity_ci_instanceinput")
+public class Entity_ci_instanceinput {
+    String object_sign;
+    String instance_name;
+    String input_sign;
+    String time_period;
+    String data_class;
+    String dao_type;
+    String dao_key;
+    String source_object_sign;
+    String source_instance_name;
+    String source_output_sign;
+
+    public Entity_ci_instanceinput() {
+
+    }
+
+    public Entity_ci_instanceinput(String str) {
+        try {
+            JSONObject json = (JSONObject) JSON.parse(str);
+            FastJsonUtil.Set_JavaObject(json, this);
+        } catch (Exception e) {
+            log.error(e.getMessage(),e);
+        }
+    }
+
+    public String getObject_sign() {
+        return object_sign;
+    }
+
+    public void setObject_sign(String object_sign) {
+        this.object_sign = object_sign;
+    }
+
+    public String getInstance_name() {
+        return instance_name;
+    }
+
+    public void setInstance_name(String instance_name) {
+        this.instance_name = instance_name;
+    }
+
+    public String getInput_sign() {
+        return input_sign;
+    }
+
+    public void setInput_sign(String input_sign) {
+        this.input_sign = input_sign;
+    }
+
+    public String getTime_period() {
+        return time_period;
+    }
+
+    public void setTime_period(String time_period) {
+        this.time_period = time_period;
+    }
+
+    public String getData_class() {
+        return data_class;
+    }
+
+    public void setData_class(String data_class) {
+        this.data_class = data_class;
+    }
+
+    public String getDao_type() {
+        return dao_type;
+    }
+
+    public void setDao_type(String dao_type) {
+        this.dao_type = dao_type;
+    }
+
+    public String getDao_key() {
+        return dao_key;
+    }
+
+    public void setDao_key(String dao_key) {
+        this.dao_key = dao_key;
+    }
+
+    public String getSource_object_sign() {
+        return source_object_sign;
+    }
+
+    public void setSource_object_sign(String source_object_sign) {
+        this.source_object_sign = source_object_sign;
+    }
+
+    public String getSource_instance_name() {
+        return source_instance_name;
+    }
+
+    public void setSource_instance_name(String source_instance_name) {
+        this.source_instance_name = source_instance_name;
+    }
+
+    public String getSource_output_sign() {
+        return source_output_sign;
+    }
+
+    public void setSource_output_sign(String source_output_sign) {
+        this.source_output_sign = source_output_sign;
+    }
+}

+ 170 - 0
src/main/java/com/sagacloud/util/compute_engine/entity/Entity_ci_instanceoutput.java

@@ -0,0 +1,170 @@
+package com.sagacloud.util.compute_engine.entity;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import lombok.extern.slf4j.Slf4j;
+import org.zillion.util.json.FastJsonUtil;
+
+import javax.xml.bind.annotation.XmlRootElement;
+import java.util.Map;
+@Slf4j
+@XmlRootElement(name = "Entity_ci_instanceoutput")
+public class Entity_ci_instanceoutput {
+    String object_sign;
+    String instance_name;
+    String output_sign;
+    String time_begin;
+    String time_end;
+    String data_class;
+    String dao_type;
+    String dao_key;
+    Boolean need_all_var_data;
+    Boolean time_period_intialized;
+    String time_period;
+    String mode;
+    String expression;
+    String custom_function_name;
+    String custom_paramsMap;
+    Map<String, Object> otherMap;
+
+    public Entity_ci_instanceoutput() {
+
+    }
+
+    public Entity_ci_instanceoutput(String str) {
+        try {
+            JSONObject json = (JSONObject) JSON.parse(str);
+            FastJsonUtil.Set_JavaObject(json, this);
+        } catch (Exception e) {
+            log.error(e.getMessage(),e);
+        }
+    }
+
+    public String getObject_sign() {
+        return object_sign;
+    }
+
+    public void setObject_sign(String object_sign) {
+        this.object_sign = object_sign;
+    }
+
+    public String getInstance_name() {
+        return instance_name;
+    }
+
+    public void setInstance_name(String instance_name) {
+        this.instance_name = instance_name;
+    }
+
+    public String getOutput_sign() {
+        return output_sign;
+    }
+
+    public void setOutput_sign(String output_sign) {
+        this.output_sign = output_sign;
+    }
+
+    public String getTime_begin() {
+        return time_begin;
+    }
+
+    public void setTime_begin(String time_begin) {
+        this.time_begin = time_begin;
+    }
+
+    public String getTime_end() {
+        return time_end;
+    }
+
+    public void setTime_end(String time_end) {
+        this.time_end = time_end;
+    }
+
+    public String getData_class() {
+        return data_class;
+    }
+
+    public void setData_class(String data_class) {
+        this.data_class = data_class;
+    }
+
+    public String getDao_type() {
+        return dao_type;
+    }
+
+    public void setDao_type(String dao_type) {
+        this.dao_type = dao_type;
+    }
+
+    public String getDao_key() {
+        return dao_key;
+    }
+
+    public void setDao_key(String dao_key) {
+        this.dao_key = dao_key;
+    }
+
+    public Boolean getNeed_all_var_data() {
+        return need_all_var_data;
+    }
+
+    public void setNeed_all_var_data(Boolean need_all_var_data) {
+        this.need_all_var_data = need_all_var_data;
+    }
+
+    public Boolean getTime_period_intialized() {
+        return time_period_intialized;
+    }
+
+    public void setTime_period_intialized(Boolean time_period_intialized) {
+        this.time_period_intialized = time_period_intialized;
+    }
+
+    public String getTime_period() {
+        return time_period;
+    }
+
+    public void setTime_period(String time_period) {
+        this.time_period = time_period;
+    }
+
+    public String getMode() {
+        return mode;
+    }
+
+    public void setMode(String mode) {
+        this.mode = mode;
+    }
+
+    public String getExpression() {
+        return expression;
+    }
+
+    public void setExpression(String expression) {
+        this.expression = expression;
+    }
+
+    public String getCustom_function_name() {
+        return custom_function_name;
+    }
+
+    public void setCustom_function_name(String custom_function_name) {
+        this.custom_function_name = custom_function_name;
+    }
+
+    public String getCustom_paramsMap() {
+        return custom_paramsMap;
+    }
+
+    public void setCustom_paramsMap(String custom_paramsMap) {
+        this.custom_paramsMap = custom_paramsMap;
+    }
+
+    public Map<String, Object> getOtherMap() {
+        return otherMap;
+    }
+
+    public void setOtherMap(Map<String, Object> otherMap) {
+        this.otherMap = otherMap;
+    }
+}

+ 34 - 0
src/main/java/com/sagacloud/util/compute_engine/entity/Entity_ci_instances.java

@@ -0,0 +1,34 @@
+package com.sagacloud.util.compute_engine.entity;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import lombok.extern.slf4j.Slf4j;
+import org.zillion.util.json.FastJsonUtil;
+
+import javax.xml.bind.annotation.XmlRootElement;
+@Slf4j
+@XmlRootElement(name = "Entity_ci_instance")
+public class Entity_ci_instances {
+    Entity_ci_instance[] instances;
+
+    public Entity_ci_instances() {
+
+    }
+
+    public Entity_ci_instances(String str) {
+        try {
+            JSONObject json = (JSONObject) JSON.parse(str);
+            FastJsonUtil.Set_JavaObject(json, this);
+        } catch (Exception e) {
+            log.error(e.getMessage(),e);
+        }
+    }
+
+    public Entity_ci_instance[] getInstances() {
+        return instances;
+    }
+
+    public void setInstances(Entity_ci_instance[] instances) {
+        this.instances = instances;
+    }
+}

+ 88 - 0
src/main/java/com/sagacloud/util/compute_engine/entity/Entity_ci_status.java

@@ -0,0 +1,88 @@
+package com.sagacloud.util.compute_engine.entity;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import lombok.extern.slf4j.Slf4j;
+import org.zillion.util.json.FastJsonUtil;
+
+import javax.xml.bind.annotation.XmlRootElement;
+@Slf4j
+@XmlRootElement(name = "Entity_ci_status")
+public class Entity_ci_status {
+    String object_sign;
+    String instance_name;
+    String status_request;
+    String status_current;
+    Long compute_round;
+    String operate_time;
+    String operate_owner;
+
+    public Entity_ci_status() {
+
+    }
+
+    public Entity_ci_status(String str) {
+        try {
+            JSONObject json = (JSONObject) JSON.parse(str);
+            FastJsonUtil.Set_JavaObject(json, this);
+        } catch (Exception e) {
+            log.error(e.getMessage(),e);
+        }
+    }
+
+    public String getObject_sign() {
+        return object_sign;
+    }
+
+    public void setObject_sign(String object_sign) {
+        this.object_sign = object_sign;
+    }
+
+    public String getInstance_name() {
+        return instance_name;
+    }
+
+    public void setInstance_name(String instance_name) {
+        this.instance_name = instance_name;
+    }
+
+    public String getStatus_request() {
+        return status_request;
+    }
+
+    public void setStatus_request(String status_request) {
+        this.status_request = status_request;
+    }
+
+    public String getStatus_current() {
+        return status_current;
+    }
+
+    public void setStatus_current(String status_current) {
+        this.status_current = status_current;
+    }
+
+    public Long getCompute_round() {
+        return compute_round;
+    }
+
+    public void setCompute_round(Long compute_round) {
+        this.compute_round = compute_round;
+    }
+
+    public String getOperate_time() {
+        return operate_time;
+    }
+
+    public void setOperate_time(String operate_time) {
+        this.operate_time = operate_time;
+    }
+
+    public String getOperate_owner() {
+        return operate_owner;
+    }
+
+    public void setOperate_owner(String operate_owner) {
+        this.operate_owner = operate_owner;
+    }
+}

+ 34 - 0
src/main/java/com/sagacloud/util/compute_engine/entity/Entity_fjd_0_buildingcomputetime.java

@@ -0,0 +1,34 @@
+package com.sagacloud.util.compute_engine.entity;
+
+import java.util.Date;
+
+public class Entity_fjd_0_buildingcomputetime {
+    public String building;
+    public Date compute_time;
+    public Date first_compute_time;
+
+    public String getBuilding() {
+        return building;
+    }
+
+    public void setBuilding(String building) {
+        this.building = building;
+    }
+
+    public Date getCompute_time() {
+        return compute_time;
+    }
+
+    public void setCompute_time(Date compute_time) {
+        this.compute_time = compute_time;
+    }
+
+    public Date getFirst_compute_time() {
+        return first_compute_time;
+    }
+
+    public void setFirst_compute_time(Date first_compute_time) {
+        this.first_compute_time = first_compute_time;
+    }
+
+}

+ 70 - 0
src/main/java/com/sagacloud/util/compute_engine/entity/Entity_fjd_0_computedetail.java

@@ -0,0 +1,70 @@
+package com.sagacloud.util.compute_engine.entity;
+
+import java.util.Date;
+
+public class Entity_fjd_0_computedetail {
+    public String building;
+    public long compute_round;
+    public String meter;
+    public long funcid;
+    public Date valid_time_from;
+    public Date valid_time_to;
+    public Date operate_time_to;
+
+    public String getBuilding() {
+        return building;
+    }
+
+    public void setBuilding(String building) {
+        this.building = building;
+    }
+
+    public long getCompute_round() {
+        return compute_round;
+    }
+
+    public void setCompute_round(long compute_round) {
+        this.compute_round = compute_round;
+    }
+
+    public String getMeter() {
+        return meter;
+    }
+
+    public void setMeter(String meter) {
+        this.meter = meter;
+    }
+
+    public long getFuncid() {
+        return funcid;
+    }
+
+    public void setFuncid(long funcid) {
+        this.funcid = funcid;
+    }
+
+    public Date getValid_time_from() {
+        return valid_time_from;
+    }
+
+    public void setValid_time_from(Date valid_time_from) {
+        this.valid_time_from = valid_time_from;
+    }
+
+    public Date getValid_time_to() {
+        return valid_time_to;
+    }
+
+    public void setValid_time_to(Date valid_time_to) {
+        this.valid_time_to = valid_time_to;
+    }
+
+    public Date getOperate_time_to() {
+        return operate_time_to;
+    }
+
+    public void setOperate_time_to(Date operate_time_to) {
+        this.operate_time_to = operate_time_to;
+    }
+
+}

+ 88 - 0
src/main/java/com/sagacloud/util/compute_engine/entity/Entity_fjd_0_computelog.java

@@ -0,0 +1,88 @@
+package com.sagacloud.util.compute_engine.entity;
+
+import java.util.Date;
+
+public class Entity_fjd_0_computelog {
+    public String building;
+    public long compute_round;
+    public Date compute_time_from;
+    public Date compute_time_to;
+    public String detail_content;
+    public long is_finished;
+    public long is_recompute;
+    public Date operate_time_from;
+    public Date operate_time_to;
+
+    public String getBuilding() {
+        return building;
+    }
+
+    public void setBuilding(String building) {
+        this.building = building;
+    }
+
+    public long getCompute_round() {
+        return compute_round;
+    }
+
+    public void setCompute_round(long compute_round) {
+        this.compute_round = compute_round;
+    }
+
+    public Date getCompute_time_from() {
+        return compute_time_from;
+    }
+
+    public void setCompute_time_from(Date compute_time_from) {
+        this.compute_time_from = compute_time_from;
+    }
+
+    public Date getCompute_time_to() {
+        return compute_time_to;
+    }
+
+    public void setCompute_time_to(Date compute_time_to) {
+        this.compute_time_to = compute_time_to;
+    }
+
+    public String getDetail_content() {
+        return detail_content;
+    }
+
+    public void setDetail_content(String detail_content) {
+        this.detail_content = detail_content;
+    }
+
+    public long getIs_finished() {
+        return is_finished;
+    }
+
+    public void setIs_finished(long is_finished) {
+        this.is_finished = is_finished;
+    }
+
+    public long getIs_recompute() {
+        return is_recompute;
+    }
+
+    public void setIs_recompute(long is_recompute) {
+        this.is_recompute = is_recompute;
+    }
+
+    public Date getOperate_time_from() {
+        return operate_time_from;
+    }
+
+    public void setOperate_time_from(Date operate_time_from) {
+        this.operate_time_from = operate_time_from;
+    }
+
+    public Date getOperate_time_to() {
+        return operate_time_to;
+    }
+
+    public void setOperate_time_to(Date operate_time_to) {
+        this.operate_time_to = operate_time_to;
+    }
+
+}

+ 52 - 0
src/main/java/com/sagacloud/util/compute_engine/entity/Entity_fjd_0_metercomputetime.java

@@ -0,0 +1,52 @@
+package com.sagacloud.util.compute_engine.entity;
+
+import java.util.Date;
+
+public class Entity_fjd_0_metercomputetime {
+    public String building;
+    public String meter;
+    public Long funcid;
+    public Date next_data_time;
+    public Date first_compute_time;
+
+    public String getBuilding() {
+        return building;
+    }
+
+    public void setBuilding(String building) {
+        this.building = building;
+    }
+
+    public String getMeter() {
+        return meter;
+    }
+
+    public void setMeter(String meter) {
+        this.meter = meter;
+    }
+
+    public Long getFuncid() {
+        return funcid;
+    }
+
+    public void setFuncid(Long funcid) {
+        this.funcid = funcid;
+    }
+
+    public Date getNext_data_time() {
+        return next_data_time;
+    }
+
+    public void setNext_data_time(Date next_data_time) {
+        this.next_data_time = next_data_time;
+    }
+
+    public Date getFirst_compute_time() {
+        return first_compute_time;
+    }
+
+    public void setFirst_compute_time(Date first_compute_time) {
+        this.first_compute_time = first_compute_time;
+    }
+
+}

+ 4 - 0
src/main/java/com/sagacloud/util/compute_engine/entity/Entity_fjd_1_computedetail.java

@@ -0,0 +1,4 @@
+package com.sagacloud.util.compute_engine.entity;
+
+public class Entity_fjd_1_computedetail extends Entity_fjd_0_computedetail {
+}

+ 88 - 0
src/main/java/com/sagacloud/util/compute_engine/entity/Entity_fjd_1_computelog.java

@@ -0,0 +1,88 @@
+package com.sagacloud.util.compute_engine.entity;
+
+import java.util.Date;
+
+public class Entity_fjd_1_computelog {
+    public String building;
+    public long compute_round;
+    public Date compute_time_from;
+    public Date compute_time_to;
+    public long is_finished;
+    public long fjd_compute_round_from;
+    public long fjd_compute_round_to;
+    public Date operate_time_from;
+    public Date operate_time_to;
+
+    public String getBuilding() {
+        return building;
+    }
+
+    public void setBuilding(String building) {
+        this.building = building;
+    }
+
+    public long getCompute_round() {
+        return compute_round;
+    }
+
+    public void setCompute_round(long compute_round) {
+        this.compute_round = compute_round;
+    }
+
+    public Date getCompute_time_from() {
+        return compute_time_from;
+    }
+
+    public void setCompute_time_from(Date compute_time_from) {
+        this.compute_time_from = compute_time_from;
+    }
+
+    public Date getCompute_time_to() {
+        return compute_time_to;
+    }
+
+    public void setCompute_time_to(Date compute_time_to) {
+        this.compute_time_to = compute_time_to;
+    }
+
+    public long getIs_finished() {
+        return is_finished;
+    }
+
+    public void setIs_finished(long is_finished) {
+        this.is_finished = is_finished;
+    }
+
+    public long getFjd_compute_round_from() {
+        return fjd_compute_round_from;
+    }
+
+    public void setFjd_compute_round_from(long fjd_compute_round_from) {
+        this.fjd_compute_round_from = fjd_compute_round_from;
+    }
+
+    public long getFjd_compute_round_to() {
+        return fjd_compute_round_to;
+    }
+
+    public void setFjd_compute_round_to(long fjd_compute_round_to) {
+        this.fjd_compute_round_to = fjd_compute_round_to;
+    }
+
+    public Date getOperate_time_from() {
+        return operate_time_from;
+    }
+
+    public void setOperate_time_from(Date operate_time_from) {
+        this.operate_time_from = operate_time_from;
+    }
+
+    public Date getOperate_time_to() {
+        return operate_time_to;
+    }
+
+    public void setOperate_time_to(Date operate_time_to) {
+        this.operate_time_to = operate_time_to;
+    }
+
+}

+ 4 - 0
src/main/java/com/sagacloud/util/compute_engine/entity/Entity_fjd_2_computedetail.java

@@ -0,0 +1,4 @@
+package com.sagacloud.util.compute_engine.entity;
+
+public class Entity_fjd_2_computedetail extends Entity_fjd_0_computedetail {
+}

+ 52 - 0
src/main/java/com/sagacloud/util/compute_engine/entity/Entity_fjd_2_computelog.java

@@ -0,0 +1,52 @@
+package com.sagacloud.util.compute_engine.entity;
+
+import java.util.Date;
+
+public class Entity_fjd_2_computelog {
+    public String building;
+    public long compute_round;
+    public Date compute_time_from;
+    public Date compute_time_to;
+    public long is_finished;
+
+    public String getBuilding() {
+        return building;
+    }
+
+    public void setBuilding(String building) {
+        this.building = building;
+    }
+
+    public long getCompute_round() {
+        return compute_round;
+    }
+
+    public void setCompute_round(long compute_round) {
+        this.compute_round = compute_round;
+    }
+
+    public Date getCompute_time_from() {
+        return compute_time_from;
+    }
+
+    public void setCompute_time_from(Date compute_time_from) {
+        this.compute_time_from = compute_time_from;
+    }
+
+    public Date getCompute_time_to() {
+        return compute_time_to;
+    }
+
+    public void setCompute_time_to(Date compute_time_to) {
+        this.compute_time_to = compute_time_to;
+    }
+
+    public long getIs_finished() {
+        return is_finished;
+    }
+
+    public void setIs_finished(long is_finished) {
+        this.is_finished = is_finished;
+    }
+
+}

+ 61 - 0
src/main/java/com/sagacloud/util/compute_engine/entity/Entity_originaldata.java

@@ -0,0 +1,61 @@
+package com.sagacloud.util.compute_engine.entity;
+
+import java.util.Date;
+
+public class Entity_originaldata {
+    public String building;
+    public String meter;
+    public Long funcid;
+    public Date receivetime;
+    public Double data;
+    public Boolean gaopin;
+
+    public String getBuilding() {
+        return building;
+    }
+
+    public void setBuilding(String building) {
+        this.building = building;
+    }
+
+    public String getMeter() {
+        return meter;
+    }
+
+    public void setMeter(String meter) {
+        this.meter = meter;
+    }
+
+    public Long getFuncid() {
+        return funcid;
+    }
+
+    public void setFuncid(Long funcid) {
+        this.funcid = funcid;
+    }
+
+    public Date getReceivetime() {
+        return receivetime;
+    }
+
+    public void setReceivetime(Date receivetime) {
+        this.receivetime = receivetime;
+    }
+
+    public Double getData() {
+        return data;
+    }
+
+    public void setData(Double data) {
+        this.data = data;
+    }
+
+    public Boolean getGaopin() {
+        return gaopin;
+    }
+
+    public void setGaopin(Boolean gaopin) {
+        this.gaopin = gaopin;
+    }
+
+}

+ 59 - 0
src/main/java/com/sagacloud/util/compute_engine/entity/Entity_point.java

@@ -0,0 +1,59 @@
+package com.sagacloud.util.compute_engine.entity;
+
+public class Entity_point {
+    public String building;
+    public String meter;
+    public long funcid;
+    public String data_type;
+    public String collect_cycle;
+
+    public String point_class;
+
+    public String getBuilding() {
+        return building;
+    }
+
+    public void setBuilding(String building) {
+        this.building = building;
+    }
+
+    public String getMeter() {
+        return meter;
+    }
+
+    public void setMeter(String meter) {
+        this.meter = meter;
+    }
+
+    public long getFuncid() {
+        return funcid;
+    }
+
+    public void setFuncid(long funcid) {
+        this.funcid = funcid;
+    }
+
+    public String getData_type() {
+        return data_type;
+    }
+
+    public void setData_type(String data_type) {
+        this.data_type = data_type;
+    }
+
+    public String getCollect_cycle() {
+        return collect_cycle;
+    }
+
+    public void setCollect_cycle(String collect_cycle) {
+        this.collect_cycle = collect_cycle;
+    }
+
+    public String getPoint_class() {
+        return point_class;
+    }
+
+    public void setPoint_class(String point_class) {
+        this.point_class = point_class;
+    }
+}

+ 82 - 0
src/main/java/com/sagacloud/util/compute_engine/entity/Entity_tenant.java

@@ -0,0 +1,82 @@
+package com.sagacloud.util.compute_engine.entity;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import lombok.extern.slf4j.Slf4j;
+import org.zillion.util.json.FastJsonUtil;
+
+import javax.xml.bind.annotation.XmlRootElement;
+import java.util.HashMap;
+import java.util.Map;
+@Slf4j
+@XmlRootElement(name = "Entity_tenant")
+public class Entity_tenant {
+    public Map<String, Entity_tenant_energy> energyMap = new HashMap<String, Entity_tenant_energy>();
+    String building;
+    String sign;
+    Boolean soft_enable;
+    Double soft_initial_yuer;
+    String valid_time_from;
+    String valid_time_to;
+
+    public Entity_tenant() {
+
+    }
+
+    public Entity_tenant(String str) {
+        try {
+            JSONObject json = (JSONObject) JSON.parse(str);
+            FastJsonUtil.Set_JavaObject(json, this);
+        } catch (Exception e) {
+            log.error(e.getMessage(),e);
+        }
+    }
+
+    public String getBuilding() {
+        return building;
+    }
+
+    public void setBuilding(String building) {
+        this.building = building;
+    }
+
+    public String getSign() {
+        return sign;
+    }
+
+    public void setSign(String sign) {
+        this.sign = sign;
+    }
+
+    public Boolean getSoft_enable() {
+        return soft_enable;
+    }
+
+    public void setSoft_enable(Boolean soft_enable) {
+        this.soft_enable = soft_enable;
+    }
+
+    public Double getSoft_initial_yuer() {
+        return soft_initial_yuer;
+    }
+
+    public void setSoft_initial_yuer(Double soft_initial_yuer) {
+        this.soft_initial_yuer = soft_initial_yuer;
+    }
+
+    public String getValid_time_from() {
+        return valid_time_from;
+    }
+
+    public void setValid_time_from(String valid_time_from) {
+        this.valid_time_from = valid_time_from;
+    }
+
+    public String getValid_time_to() {
+        return valid_time_to;
+    }
+
+    public void setValid_time_to(String valid_time_to) {
+        this.valid_time_to = valid_time_to;
+    }
+}

+ 85 - 0
src/main/java/com/sagacloud/util/compute_engine/entity/Entity_tenant_energy.java

@@ -0,0 +1,85 @@
+package com.sagacloud.util.compute_engine.entity;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import lombok.extern.slf4j.Slf4j;
+import org.zillion.util.json.FastJsonUtil;
+
+import javax.xml.bind.annotation.XmlRootElement;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+@Slf4j
+@XmlRootElement(name = "Entity_tenant_energy")
+public class Entity_tenant_energy {
+    public Map<String, Entity_tenant_energy_meter> meterMap = new HashMap<String, Entity_tenant_energy_meter>();
+    public List<Entity_tenant_energy_price> priceList = new ArrayList<Entity_tenant_energy_price>();
+    String building;
+    String sign;
+    String energy_type;
+    String price_type;
+    Boolean soft_enable;
+    Double soft_initial_yuer;
+
+    public Entity_tenant_energy() {
+
+    }
+
+    public Entity_tenant_energy(String str) {
+        try {
+            JSONObject json = (JSONObject) JSON.parse(str);
+            FastJsonUtil.Set_JavaObject(json, this);
+        } catch (Exception e) {
+            log.error(e.getMessage(),e);
+        }
+    }
+
+    public String getBuilding() {
+        return building;
+    }
+
+    public void setBuilding(String building) {
+        this.building = building;
+    }
+
+    public String getSign() {
+        return sign;
+    }
+
+    public void setSign(String sign) {
+        this.sign = sign;
+    }
+
+    public String getEnergy_type() {
+        return energy_type;
+    }
+
+    public void setEnergy_type(String energy_type) {
+        this.energy_type = energy_type;
+    }
+
+    public String getPrice_type() {
+        return price_type;
+    }
+
+    public void setPrice_type(String price_type) {
+        this.price_type = price_type;
+    }
+
+    public Boolean getSoft_enable() {
+        return soft_enable;
+    }
+
+    public void setSoft_enable(Boolean soft_enable) {
+        this.soft_enable = soft_enable;
+    }
+
+    public Double getSoft_initial_yuer() {
+        return soft_initial_yuer;
+    }
+
+    public void setSoft_initial_yuer(Double soft_initial_yuer) {
+        this.soft_initial_yuer = soft_initial_yuer;
+    }
+}

+ 79 - 0
src/main/java/com/sagacloud/util/compute_engine/entity/Entity_tenant_energy_meter.java

@@ -0,0 +1,79 @@
+package com.sagacloud.util.compute_engine.entity;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import lombok.extern.slf4j.Slf4j;
+import org.zillion.util.json.FastJsonUtil;
+
+import javax.xml.bind.annotation.XmlRootElement;
+@Slf4j
+@XmlRootElement(name = "Entity_tenant_energy_meter")
+public class Entity_tenant_energy_meter {
+    String building;
+    String sign;
+    String energy_type;
+    String meter_sign;
+    Double share_ratio;
+    Double transformer_ratio;
+
+    public Entity_tenant_energy_meter() {
+
+    }
+
+    public Entity_tenant_energy_meter(String str) {
+        try {
+            JSONObject json = (JSONObject) JSON.parse(str);
+            FastJsonUtil.Set_JavaObject(json, this);
+        } catch (Exception e) {
+            log.error(e.getMessage(),e);
+        }
+    }
+
+    public String getBuilding() {
+        return building;
+    }
+
+    public void setBuilding(String building) {
+        this.building = building;
+    }
+
+    public String getSign() {
+        return sign;
+    }
+
+    public void setSign(String sign) {
+        this.sign = sign;
+    }
+
+    public String getEnergy_type() {
+        return energy_type;
+    }
+
+    public void setEnergy_type(String energy_type) {
+        this.energy_type = energy_type;
+    }
+
+    public String getMeter_sign() {
+        return meter_sign;
+    }
+
+    public void setMeter_sign(String meter_sign) {
+        this.meter_sign = meter_sign;
+    }
+
+    public Double getShare_ratio() {
+        return share_ratio;
+    }
+
+    public void setShare_ratio(Double share_ratio) {
+        this.share_ratio = share_ratio;
+    }
+
+    public Double getTransformer_ratio() {
+        return transformer_ratio;
+    }
+
+    public void setTransformer_ratio(Double transformer_ratio) {
+        this.transformer_ratio = transformer_ratio;
+    }
+}

+ 80 - 0
src/main/java/com/sagacloud/util/compute_engine/entity/Entity_tenant_energy_price.java

@@ -0,0 +1,80 @@
+package com.sagacloud.util.compute_engine.entity;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import lombok.extern.slf4j.Slf4j;
+import org.zillion.util.json.FastJsonUtil;
+
+import javax.xml.bind.annotation.XmlRootElement;
+@Slf4j
+@XmlRootElement(name = "Entity_tenant_energy_price")
+public class Entity_tenant_energy_price {
+    public Object priceObject;
+    String building;
+    String sign;
+    String energy_type;
+    String valid_time_from;
+    String valid_time_to;
+    String price_content;
+
+    public Entity_tenant_energy_price() {
+
+    }
+
+    public Entity_tenant_energy_price(String str) {
+        try {
+            JSONObject json = (JSONObject) JSON.parse(str);
+            FastJsonUtil.Set_JavaObject(json, this);
+        } catch (Exception e) {
+            log.error(e.getMessage(),e);
+        }
+    }
+
+    public String getBuilding() {
+        return building;
+    }
+
+    public void setBuilding(String building) {
+        this.building = building;
+    }
+
+    public String getSign() {
+        return sign;
+    }
+
+    public void setSign(String sign) {
+        this.sign = sign;
+    }
+
+    public String getEnergy_type() {
+        return energy_type;
+    }
+
+    public void setEnergy_type(String energy_type) {
+        this.energy_type = energy_type;
+    }
+
+    public String getValid_time_from() {
+        return valid_time_from;
+    }
+
+    public void setValid_time_from(String valid_time_from) {
+        this.valid_time_from = valid_time_from;
+    }
+
+    public String getValid_time_to() {
+        return valid_time_to;
+    }
+
+    public void setValid_time_to(String valid_time_to) {
+        this.valid_time_to = valid_time_to;
+    }
+
+    public String getPrice_content() {
+        return price_content;
+    }
+
+    public void setPrice_content(String price_content) {
+        this.price_content = price_content;
+    }
+}

+ 16 - 0
src/main/java/com/sagacloud/util/compute_engine/entity/Entitys_ce_compute.java

@@ -0,0 +1,16 @@
+package com.sagacloud.util.compute_engine.entity;
+
+import com.sagacloud.util.compute_engine.util.TimeSpan;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class Entitys_ce_compute {
+    public Entity_ce_computelog log;
+    public long is_recompute = 0L;
+    public List<Entity_ce_computeinputlog> inputlogList = new ArrayList<Entity_ce_computeinputlog>();
+    public Map<String, List<TimeSpan>> inputdetailListMap = new HashMap<String, List<TimeSpan>>();
+    public Map<String, List<TimeSpan>> outputdetailListMap = new HashMap<String, List<TimeSpan>>();
+}

+ 125 - 0
src/main/java/com/sagacloud/util/compute_engine/fjd/ComputeEngineMain.java

@@ -0,0 +1,125 @@
+package com.sagacloud.util.compute_engine.fjd;
+
+import cn.hutool.core.thread.ThreadUtil;
+import com.sagacloud.repository.HBaseSaveManagerRepository;
+import com.sagacloud.util.compute_engine.core.Dao_dataManager;
+import com.sagacloud.util.compute_engine.core.Dao_data_maxManager;
+import com.sagacloud.util.compute_engine.core.IDao_log;
+import com.sagacloud.util.compute_engine.util.ConstantCE;
+import com.sagacloud.util.compute_engine.util.QueryUtil;
+import com.zillion.database.agent.ZillionAgent;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.hadoop.conf.Configuration;
+
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.List;
+
+@Slf4j
+public class ComputeEngineMain {
+    List<ThreadCompute> threadList;
+    List<ThreadComputeJob> threadJobList;
+    ThreadDelay threadDelay;
+
+    public void initDatabaseAndTable() throws Exception {
+        if (!QueryUtil.database_exist(ConstantCE.database_name)) {
+            HBaseSaveManagerRepository.randomZillionAgent().NDL_AddDatabase(ConstantCE.database_name);
+        }
+        TableUtil.AddTables(ConstantCE.database_name);
+        ThreadUtil.safeSleep(10 * 1000);
+        TableUtil.AlterTables(ConstantCE.database_name);
+
+        //可能是分局反射扩展jar包的任务设计,作废注释掉
+        Dao_dataManager.Instance().Initialize(ConstantCE.database_name);
+        Dao_data_maxManager.Instance().Initialize(ConstantCE.database_name);
+
+        IDao_log dao_log = new ImplDao_log(ConstantCE.database_name);
+        threadList = new ArrayList<ThreadCompute>();
+        for (int i = 0; i < ConstantCE.thread_count; i++) {
+            ThreadCompute thread = new ThreadCompute(ConstantCE.database_name, dao_log);
+            thread.start();
+            threadList.add(thread);
+        }
+
+        if (ConstantCE.job_split) {
+            threadJobList = new ArrayList<ThreadComputeJob>();
+            for (int i = 0; i < ConstantCE.job_thread_count; i++) {
+                ThreadComputeJob thread = new ThreadComputeJob();
+                thread.start();
+                threadJobList.add(thread);
+            }
+        }
+
+        if (ConstantCE.original_delay_enable) {
+            TableUtil.AddTable(ConstantCE.database_name, "original_delaylog");
+            TableUtil.AddTable(ConstantCE.database_name, "original_delaydetail");
+            TableUtil.AddTable(ConstantCE.database_name, "original_delaystat");
+
+            threadDelay = new ThreadDelay(ConstantCE.database_name);
+            threadDelay.start();
+        }
+    }
+
+    public ZillionAgent initZillionAgent() throws Exception {
+        Configuration configuration = new Configuration();
+        InputStream inCoreSite = ConstantCE.getStream("core-site.xml");
+        configuration.addResource(inCoreSite);
+        InputStream inHbaseSite = ConstantCE.getStream("hbase-site.xml");
+        configuration.addResource(inHbaseSite);
+        InputStream inHdfsSite = ConstantCE.getStream("hdfs-site.xml");
+        configuration.addResource(inHdfsSite);
+        ZillionAgent agent = new ZillionAgent(configuration);
+        agent.Start();
+        return agent;
+    }
+
+    public int stop(int exitCode) {
+        log.warn("service stopping");
+
+        if (ConstantCE.original_delay_enable) {
+            threadDelay.requestStop();
+            while (true) {
+                try {
+                    Thread.sleep(1L);
+                } catch (InterruptedException e) {
+                    log.error(e.getMessage(),e);
+                }
+                if (threadDelay.isAlive()) {
+                    continue;
+                } else {
+                    break;
+                }
+            }
+        }
+
+        for (int i = 0; i < threadList.size(); i++) {
+            ThreadCompute thread = threadList.get(i);
+            thread.requestStop();
+        }
+        while (true) {
+            try {
+                Thread.sleep(1L);
+            } catch (InterruptedException e) {
+                log.error(e.getMessage(),e);
+            }
+
+            boolean all_finish = true;
+            for (ThreadCompute thread : threadList) {
+                if (thread.isAlive()) {
+                    all_finish = false;
+                    break;
+                }
+            }
+            if (all_finish) {
+                break;
+            }
+        }
+
+
+        log.warn("service stopped");
+
+        return exitCode;
+    }
+
+
+}

+ 52 - 0
src/main/java/com/sagacloud/util/compute_engine/fjd/ComputeEngineReset.java

@@ -0,0 +1,52 @@
+package com.sagacloud.util.compute_engine.fjd;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.sagacloud.repository.HBaseSaveManagerRepository;
+import com.sagacloud.util.compute_engine.util.ConstantCE;
+import com.sagacloud.util.compute_engine.util.QueryUtil;
+import com.zillion.database.agent.ZillionAgent;
+import com.zillion.util.common.ZillionConstant;
+import org.apache.hadoop.conf.Configuration;
+
+import java.io.InputStream;
+
+public class ComputeEngineReset {
+
+    public static void main(String[] args) throws Exception {
+        ZillionConstant.ObserverWait = 0L;
+
+        Configuration configuration = new Configuration();
+        InputStream inCoreSite = ConstantCE.getStream("core-site.xml");
+        configuration.addResource(inCoreSite);
+        InputStream inHbaseSite = ConstantCE.getStream("hbase-site.xml");
+        configuration.addResource(inHbaseSite);
+        InputStream inHdfsSite = ConstantCE.getStream("hdfs-site.xml");
+        configuration.addResource(inHdfsSite);
+        ZillionAgent agent = new ZillionAgent(configuration);
+        agent.Start();
+
+        if (!QueryUtil.database_exist(ConstantCE.database_name)) {
+            HBaseSaveManagerRepository.randomZillionAgent().NDL_AddDatabase(ConstantCE.database_name);
+        }
+        // TableUtil.DropTables( ConstantCE.database_name);
+        TableUtil.AddTables(ConstantCE.database_name);
+        boolean ci_include = false;
+        boolean is_clear = false;
+        boolean only_log = true;
+        TableUtil.ClearTables(ConstantCE.database_name, ci_include, is_clear, only_log);
+
+        JSONArray times = QueryUtil.select(ConstantCE.database_name, "fjd_0_buildingcomputetime", new JSONObject());
+        for (int i = 0; i < times.size(); i++) {
+            JSONObject time = (JSONObject) times.get(i);
+            JSONObject Criteria = new JSONObject();
+            Criteria.put("building", time.get("building"));
+            JSONObject Set = new JSONObject();
+            Set.put("compute_time", time.get("first_compute_time"));
+            QueryUtil.update(ConstantCE.database_name, "fjd_0_buildingcomputetime", Criteria, Set);
+        }
+
+
+    }
+
+}

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 1383 - 0
src/main/java/com/sagacloud/util/compute_engine/fjd/ComputeEngineUtil.java


+ 27 - 0
src/main/java/com/sagacloud/util/compute_engine/fjd/ComputeJob.java

@@ -0,0 +1,27 @@
+package com.sagacloud.util.compute_engine.fjd;
+
+import com.sagacloud.util.compute_engine.core.CoreInput;
+import com.sagacloud.util.compute_engine.core.CoreOutput;
+import com.sagacloud.util.compute_engine.core.IDao_log;
+import com.sagacloud.util.compute_engine.util.TimeSpan;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+public class ComputeJob {
+    public String object_sign;
+    public String instance_name;
+    public List<CoreInput> inputList;
+    public List<CoreOutput> outputList;
+    public Date compute_time_from;
+    public Date compute_time_to;
+    public Map<String, List<TimeSpan>> inputdetailListMap;
+    public Map<String, List<TimeSpan>> outputdetailListMap;
+    public IDao_log dao_log;
+    public Map<String, List<TimeSpan>> outputTimeSpanMap;
+    public int pop_count = 0;
+    public int finish_count = 0;
+    public boolean finish_error = false;
+    long compute_round;
+}

+ 4 - 0
src/main/java/com/sagacloud/util/compute_engine/fjd/ComputeJobItem.java

@@ -0,0 +1,4 @@
+package com.sagacloud.util.compute_engine.fjd;
+
+public class ComputeJobItem extends ComputeJob {
+}

+ 0 - 0
src/main/java/com/sagacloud/util/compute_engine/fjd/ComputeJobRepository.java


이 변경점에서 너무 많은 파일들이 변경되어 몇몇 파일들은 표시되지 않았습니다.