Przeglądaj źródła

升级spring-boot为1.4.2

zhouhao 8 lat temu
rodzic
commit
38214035ce
19 zmienionych plików z 1896 dodań i 5 usunięć
  1. 4 1
      hsweb-web-controller/src/main/java/org/hsweb/web/controller/classified/ClassifiedController.java
  2. 34 0
      hsweb-web-controller/src/main/java/org/hsweb/web/controller/cli/CliController.java
  3. 79 3
      hsweb-web-core/src/main/java/org/hsweb/web/core/CoreAutoConfiguration.java
  4. 12 0
      hsweb-web-core/src/main/resources/scripts/startup/initialize.js
  5. 3 0
      hsweb-web-dao/hsweb-web-dao-mybatis/src/main/java/org/hsweb/web/mybatis/builder/EasyOrmSqlBuilder.java
  6. 33 0
      hsweb-web-message/pom.xml
  7. 46 0
      hsweb-web-message/src/main/java/org/hsweb/web/message/Message.java
  8. 10 0
      hsweb-web-message/src/main/java/org/hsweb/web/message/MessageManager.java
  9. 30 0
      hsweb-web-message/src/test/java/org/hsweb/web/message/AmqpTests.java
  10. 14 0
      hsweb-web-message/src/test/java/org/hsweb/web/message/Consumer.java
  11. 21 0
      hsweb-web-message/src/test/java/org/hsweb/web/message/SampleActiveMQApplication.java
  12. 3 0
      hsweb-web-message/src/test/resources/application.yml
  13. 9 0
      hsweb-web-starter/src/main/resources/org.hsweb.start.scripts/initialize/initialize.groovy
  14. 0 0
      hsweb-web-starter/src/main/resources/org.hsweb.start.scripts/install/install.groovy
  15. 605 0
      hsweb-web-starter/src/main/resources/org.hsweb.start.scripts/install/sql/h2/install.sql
  16. 459 0
      hsweb-web-starter/src/main/resources/org.hsweb.start.scripts/install/sql/mysql/install.sql
  17. 531 0
      hsweb-web-starter/src/main/resources/org.hsweb.start.scripts/install/sql/oracle/install.sql
  18. 0 0
      hsweb-web-starter/src/main/resources/org.hsweb.start.scripts/upgrade/2.2.groovy
  19. 3 1
      pom.xml

+ 4 - 1
hsweb-web-controller/src/main/java/org/hsweb/web/controller/classified/ClassifiedController.java

@@ -20,6 +20,7 @@ import org.hsweb.web.bean.common.QueryParam;
 import org.hsweb.web.bean.po.classified.Classified;
 import org.hsweb.web.controller.GenericController;
 import org.hsweb.web.core.authorize.annotation.Authorize;
+import org.hsweb.web.core.logger.annotation.AccessLogger;
 import org.hsweb.web.core.message.ResponseMessage;
 import org.hsweb.web.service.classified.ClassifiedService;
 import org.springframework.web.bind.annotation.CrossOrigin;
@@ -37,6 +38,7 @@ import javax.annotation.Resource;
 @RestController
 @RequestMapping(value = "/classified")
 @Authorize(module = "classified")
+@AccessLogger("分类管理")
 public class ClassifiedController extends GenericController<Classified, String> {
 
     @Resource
@@ -57,6 +59,7 @@ public class ClassifiedController extends GenericController<Classified, String>
      */
     @RequestMapping(value = "/byType/{type}")
     @Deprecated
+    @AccessLogger(value = "根据类别请求", describe = "已弃用")
     public ResponseMessage listByTypeOld(@PathVariable("type") String type, QueryParam param) {
         param.where("type", type);
         return list(param);
@@ -71,7 +74,7 @@ public class ClassifiedController extends GenericController<Classified, String>
      * @return 查询结果
      */
     @RequestMapping(value = "/type/{type}")
-    @CrossOrigin
+    @AccessLogger("根据类别请求")
     public ResponseMessage listByType(@PathVariable("type") String type, QueryParam param) {
         param.where("type", type);
         return list(param);

+ 34 - 0
hsweb-web-controller/src/main/java/org/hsweb/web/controller/cli/CliController.java

@@ -0,0 +1,34 @@
+package org.hsweb.web.controller.cli;
+
+import org.hsweb.web.core.authorize.annotation.Authorize;
+import org.hsweb.web.core.logger.annotation.AccessLogger;
+import org.hsweb.web.core.message.ResponseMessage;
+import org.springframework.web.bind.annotation.*;
+
+import static org.hsweb.web.core.message.ResponseMessage.*;
+
+/**
+ * @author zhouhao
+ */
+@RestController
+@RequestMapping("/cli")
+@AccessLogger("命令行工具")
+@Authorize(module = "cli")
+public class CliController {
+
+    @RequestMapping(value = "/{language}", method = RequestMethod.POST)
+    @AccessLogger("执行脚本")
+    @Authorize(action = "exec")
+    public ResponseMessage exec(@PathVariable String language,
+                                @RequestBody String script) {
+        return ok();
+    }
+
+    @RequestMapping(value = "/shell", method = RequestMethod.POST)
+    @AccessLogger("执行Shell脚本")
+    @Authorize(action = "exec")
+    public ResponseMessage execShell(@RequestBody String shell, @RequestParam(required = false) String messageHolder) {
+
+        return ok();
+    }
+}

+ 79 - 3
hsweb-web-core/src/main/java/org/hsweb/web/core/CoreAutoConfiguration.java

@@ -1,14 +1,90 @@
 package org.hsweb.web.core;
 
+import org.hsweb.commons.StringUtils;
+import org.hsweb.expands.script.engine.DynamicScriptEngine;
+import org.hsweb.expands.script.engine.DynamicScriptEngineFactory;
+import org.hsweb.web.bean.po.user.User;
+import org.hsweb.web.core.authorize.ExpressionScopeBean;
+import org.hsweb.web.core.utils.WebUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.ComponentScan;
 import org.springframework.context.annotation.Configuration;
+import org.springframework.core.io.Resource;
+import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
+import org.springframework.util.StreamUtils;
+
+import javax.annotation.PostConstruct;
+import java.io.IOException;
+import java.nio.charset.Charset;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.function.Supplier;
 
-/**
- * Created by zhouhao on 16-5-6.
- */
 @Configuration
 @ComponentScan("org.hsweb.web.core")
 public class CoreAutoConfiguration {
 
+    @Autowired(required = false)
+    private Map<String, ExpressionScopeBean> expressionScopeBeanMap = new HashMap<>();
+
+    protected Logger logger = LoggerFactory.getLogger(this.getClass());
+
+    private String initializeScript = "classpath*:scripts/startup/initialize.";
+
+    @PostConstruct
+    public void init() {
+        initScript();
+    }
+
+    private void initScript() {
+        Map<String, Object> vars = new HashMap<>(expressionScopeBeanMap);
+        vars.put("LoginUser", (Supplier) () -> WebUtil.getLoginUser());
+        vars.put("StringUtils", StringUtils.class);
+        vars.put("User", User.class);
+
+        initScript("js", vars);
+        initScript("groovy", vars);
+        initScript("java", vars);
+        initScript("spel", vars);
+        initScript("ognl", vars);
+        initScript("ruby", vars);
+        initScript("python", vars);
+        //执行脚本
+    }
+
+    private void initScript(String language, Map<String, Object> vars) {
+        try {
+            DynamicScriptEngine engine = DynamicScriptEngineFactory.getEngine(language);
+            if (engine == null) return;
+            vars.put("logger", LoggerFactory.getLogger("org.hsweb.script.".concat(language)));
+            vars.put("scriptEngine", engine);
+            engine.addGlobalVariable(vars);
+            Resource[] resources = new PathMatchingResourcePatternResolver().getResources(initializeScript.concat(language));
+            for (Resource resource : resources) {
+                String script = StreamUtils.copyToString(resource.getInputStream(), Charset.forName("utf-8"));
+                engine.compile("__tmp", script);
+                try {
+                    engine.execute("__tmp");
+                } finally {
+                    engine.remove("__tmp");
+                }
+            }
+        } catch (NullPointerException e) {
+            //
+        } catch (IOException e) {
+            logger.error("读取脚本文件失败", e);
+        } catch (Exception e) {
+            logger.error(e.getMessage(), e);
+        }
+    }
+
+    public static void main(String[] args) throws Exception {
+        new CoreAutoConfiguration().init();
+        DynamicScriptEngine e = DynamicScriptEngineFactory.getEngine("javascript");
+        e.compile("test", "alert('aaa');");
+        System.out.println(e.execute("test").getIfSuccess());
 
+    }
 }

+ 12 - 0
hsweb-web-core/src/main/resources/scripts/startup/initialize.js

@@ -0,0 +1,12 @@
+var println = function (args) {
+    try {
+        logger.info(args);
+    } catch (e) {
+        java.lang.System.out.println(args);
+    }
+}
+
+scriptEngine.addGlobalVariable({
+    "println": println,
+    "alert": println
+});

+ 3 - 0
hsweb-web-dao/hsweb-web-dao-mybatis/src/main/java/org/hsweb/web/mybatis/builder/EasyOrmSqlBuilder.java

@@ -10,6 +10,7 @@ import org.hsweb.ezorm.core.param.Term;
 import org.hsweb.ezorm.rdb.meta.RDBColumnMetaData;
 import org.hsweb.ezorm.rdb.meta.RDBDatabaseMetaData;
 import org.hsweb.ezorm.rdb.meta.RDBTableMetaData;
+import org.hsweb.ezorm.rdb.meta.converter.DateTimeConverter;
 import org.hsweb.ezorm.rdb.render.SqlAppender;
 import org.hsweb.ezorm.rdb.render.SqlRender;
 import org.hsweb.ezorm.rdb.render.dialect.Dialect;
@@ -23,6 +24,7 @@ import org.hsweb.web.bean.common.UpdateParam;
 import org.hsweb.web.core.datasource.DataSourceHolder;
 import org.hsweb.web.core.datasource.DatabaseType;
 import org.hsweb.web.core.exception.BusinessException;
+import org.hsweb.web.core.utils.WebUtil;
 import org.hsweb.web.mybatis.plgins.pager.Pager;
 import org.hsweb.web.mybatis.utils.ResultMapsUtils;
 
@@ -113,6 +115,7 @@ public class EasyOrmSqlBuilder {
         if (cached != null) {
             return cached;
         }
+        WebUtil
         RDBTableMetaData rdbTableMetaData = new RDBTableMetaData();
         rdbTableMetaData.setName(tableName);
         rdbTableMetaData.setDatabaseMetaData(active);

+ 33 - 0
hsweb-web-message/pom.xml

@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>hsweb-framework</artifactId>
+        <groupId>org.hsweb</groupId>
+        <version>2.2-SNAPSHOT</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>hsweb-web-message</artifactId>
+
+    <dependencies>
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-test</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-activemq</artifactId>
+        </dependency>
+
+
+    </dependencies>
+
+</project>

+ 46 - 0
hsweb-web-message/src/main/java/org/hsweb/web/message/Message.java

@@ -0,0 +1,46 @@
+package org.hsweb.web.message;
+
+/**
+ * @author zhouhao
+ */
+public class Message {
+    private String callback;
+
+    private String to;
+
+    private String from;
+
+    private String content;
+
+    public String getTo() {
+        return to;
+    }
+
+    public void setTo(String to) {
+        this.to = to;
+    }
+
+    public String getFrom() {
+        return from;
+    }
+
+    public void setFrom(String from) {
+        this.from = from;
+    }
+
+    public String getContent() {
+        return content;
+    }
+
+    public void setContent(String content) {
+        this.content = content;
+    }
+
+    public String getCallback() {
+        return callback;
+    }
+
+    public void setCallback(String callback) {
+        this.callback = callback;
+    }
+}

+ 10 - 0
hsweb-web-message/src/main/java/org/hsweb/web/message/MessageManager.java

@@ -0,0 +1,10 @@
+package org.hsweb.web.message;
+
+/**
+ * @author zhouhao
+ */
+public interface MessageManager {
+
+    void send(Message message, boolean discardIfUserOffline);
+
+}

+ 30 - 0
hsweb-web-message/src/test/java/org/hsweb/web/message/AmqpTests.java

@@ -0,0 +1,30 @@
+package org.hsweb.web.message;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.jms.annotation.EnableJms;
+import org.springframework.jms.core.JmsMessagingTemplate;
+import org.springframework.test.context.junit4.SpringRunner;
+
+import java.util.HashMap;
+
+
+/**
+ * @author zhouhao
+ */
+@RunWith(SpringRunner.class)
+@SpringBootTest(classes = SampleActiveMQApplication.class, properties = "application.yml")
+@EnableJms
+public class AmqpTests {
+
+    @Autowired
+    private JmsMessagingTemplate jmsMessagingTemplate;
+
+    @Test
+    public void testSend() {
+        jmsMessagingTemplate.convertAndSend("test", new HashMap<>());
+    }
+
+}

+ 14 - 0
hsweb-web-message/src/test/java/org/hsweb/web/message/Consumer.java

@@ -0,0 +1,14 @@
+package org.hsweb.web.message;
+
+import org.springframework.jms.annotation.JmsListener;
+import org.springframework.stereotype.Component;
+
+@Component
+public class Consumer {
+
+	@JmsListener(destination = "test")
+    public void receiveQueue(String text) {
+		System.out.println(text);
+	}
+
+}

+ 21 - 0
hsweb-web-message/src/test/java/org/hsweb/web/message/SampleActiveMQApplication.java

@@ -0,0 +1,21 @@
+package org.hsweb.web.message;
+
+import javax.jms.Queue;
+
+import org.apache.activemq.command.ActiveMQQueue;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.context.annotation.Bean;
+import org.springframework.jms.annotation.EnableJms;
+
+@SpringBootApplication
+@EnableJms
+public class SampleActiveMQApplication {
+
+	@Bean
+    public Queue queue() {
+		return new ActiveMQQueue("test");
+	}
+
+}

+ 3 - 0
hsweb-web-message/src/test/resources/application.yml

@@ -0,0 +1,3 @@
+spring:
+    activemq:
+        in-memory: true

+ 9 - 0
hsweb-web-starter/src/main/resources/org.hsweb.start.scripts/initialize/initialize.groovy

@@ -0,0 +1,9 @@
+package org.hsweb.start.scripts.initialize
+
+/**
+ * @TODO
+ * @author zhouhao
+ * @since 
+ */
+class initialize {
+}

+ 0 - 0
hsweb-web-starter/src/main/resources/org.hsweb.start.scripts/install/install.groovy


+ 605 - 0
hsweb-web-starter/src/main/resources/org.hsweb.start.scripts/install/sql/h2/install.sql

@@ -0,0 +1,605 @@
+CREATE TABLE "S_USER_PROFILE" (
+  "U_ID"    VARCHAR2(32)  NOT NULL,
+  "CONTENT" CLOB          NOT NULL,
+  "TYPE"    VARCHAR2(512) NULL,
+  "USER_ID" VARCHAR2(32)  NULL
+);
+COMMENT ON TABLE "S_USER_PROFILE" IS '用户配置表';
+COMMENT ON COLUMN "S_USER_PROFILE"."U_ID" IS 'UID';
+COMMENT ON COLUMN "S_USER_PROFILE"."CONTENT" IS '配置内容';
+COMMENT ON COLUMN "S_USER_PROFILE"."TYPE" IS '类型';
+COMMENT ON COLUMN "S_USER_PROFILE"."USER_ID" IS '用户ID';
+
+
+CREATE TABLE "S_CONFIG" (
+  "U_ID"          VARCHAR2(32)  NOT NULL,
+  "CONTENT"       CLOB          NOT NULL,
+  "REMARK"        VARCHAR2(512) NULL,
+  "CREATE_DATE"   DATETIME      NOT NULL,
+  "CLASSIFIED_ID" VARCHAR2(32)  NULL,
+  "UPDATE_DATE"   DATETIME      NULL
+);
+COMMENT ON TABLE "S_CONFIG" IS '系统配置文件表';
+COMMENT ON COLUMN "S_CONFIG"."U_ID" IS 'UID';
+COMMENT ON COLUMN "S_CONFIG"."CONTENT" IS '配置内容';
+COMMENT ON COLUMN "S_CONFIG"."REMARK" IS '备注';
+COMMENT ON COLUMN "S_CONFIG"."CLASSIFIED_ID" IS '分类ID';
+COMMENT ON COLUMN "S_CONFIG"."CREATE_DATE" IS '创建日期';
+COMMENT ON COLUMN "S_CONFIG"."UPDATE_DATE" IS '修改日期';
+CREATE TABLE "S_FORM" (
+  "U_ID"          VARCHAR2(32)  NOT NULL,
+  "CLASSIFIED_ID" VARCHAR2(32),
+  "NAME"          VARCHAR2(256) NOT NULL,
+  "HTML"          CLOB          NULL,
+  "META"          CLOB          NULL,
+  "CONFIG"        CLOB          NULL,
+  "VERSION"       NUMBER(32)    NULL,
+  "REVISION"      NUMBER(32)    NULL,
+  "RELEASE"       NUMBER(32)    NULL,
+  "USING"         NUMBER(4)     NULL,
+  "CREATE_DATE"   DATETIME      NOT NULL,
+  "UPDATE_DATE"   DATETIME      NULL,
+  "REMARK"        VARCHAR2(200) NULL
+);
+COMMENT ON COLUMN "S_FORM"."U_ID" IS 'UID';
+COMMENT ON COLUMN "S_FORM"."CLASSIFIED_ID" IS '分类ID';
+COMMENT ON COLUMN "S_FORM"."NAME" IS '名称';
+COMMENT ON COLUMN "S_FORM"."HTML" IS 'HTML内容';
+COMMENT ON COLUMN "S_FORM"."META" IS '结构定义';
+COMMENT ON COLUMN "S_FORM"."CONFIG" IS '配置';
+COMMENT ON COLUMN "S_FORM"."VERSION" IS '版本';
+COMMENT ON COLUMN "S_FORM"."REVISION" IS '修订版';
+COMMENT ON COLUMN "S_FORM"."RELEASE" IS '当前发布版本';
+COMMENT ON COLUMN "S_FORM"."USING" IS '是否使用中';
+COMMENT ON COLUMN "S_FORM"."CREATE_DATE" IS '创建日期';
+COMMENT ON COLUMN "S_FORM"."UPDATE_DATE" IS '修改日期';
+CREATE TABLE "S_TEMPLATE" (
+  "U_ID"          VARCHAR2(32)  NOT NULL,
+  "NAME"          VARCHAR2(256) NOT NULL,
+  "TEMPLATE"      CLOB          NULL,
+  "CLASSIFIED_ID" VARCHAR2(32)  NULL,
+  "TYPE"          VARCHAR2(64)  NULL,
+  "SCRIPT"        CLOB          NULL,
+  "CSS"           CLOB          NULL,
+  "CSS_LINKS"     CLOB          NULL,
+  "SCRIPT_LINKS"  CLOB          NULL,
+  "VERSION"       NUMBER(32)    NULL,
+  "REVISION"      NUMBER(32)    NULL,
+  "RELEASE"       NUMBER(32)    NULL,
+  "USING"         NUMBER(4)     NULL,
+  "REMARK"        VARCHAR2(200) NULL
+);
+COMMENT ON COLUMN "S_TEMPLATE"."U_ID" IS 'UID';
+COMMENT ON COLUMN "S_TEMPLATE"."NAME" IS '名称';
+COMMENT ON COLUMN "S_TEMPLATE"."TEMPLATE" IS '模板';
+COMMENT ON COLUMN "S_TEMPLATE"."CLASSIFIED_ID" IS '分类';
+COMMENT ON COLUMN "S_TEMPLATE"."TYPE" IS '类型';
+COMMENT ON COLUMN "S_TEMPLATE"."SCRIPT" IS '脚本';
+COMMENT ON COLUMN "S_TEMPLATE"."CSS" IS '样式';
+COMMENT ON COLUMN "S_TEMPLATE"."CSS_LINKS" IS '样式链接';
+COMMENT ON COLUMN "S_TEMPLATE"."SCRIPT_LINKS" IS '脚本链接';
+COMMENT ON COLUMN "S_TEMPLATE"."VERSION" IS '版本';
+COMMENT ON COLUMN "S_TEMPLATE"."REVISION" IS '修订版';
+COMMENT ON COLUMN "S_TEMPLATE"."RELEASE" IS '当前发布版本';
+COMMENT ON COLUMN "S_TEMPLATE"."USING" IS '是否使用中';
+CREATE TABLE "S_MODULES" (
+  "U_ID"       VARCHAR2(32)   NOT NULL,
+  "NAME"       VARCHAR2(256)  NOT NULL,
+  "URI"        VARCHAR2(1024) NULL,
+  "ICON"       VARCHAR2(256)  NULL,
+  "PARENT_ID"  VARCHAR2(256)  NOT NULL,
+  "REMARK"     VARCHAR2(512)  NULL,
+  "STATUS"     NUMBER(4)      NULL,
+  "OPTIONAL"   CLOB           NOT NULL,
+  "SORT_INDEX" NUMBER(32)     NOT NULL
+);
+COMMENT ON TABLE "S_MODULES" IS '系统模块';
+COMMENT ON COLUMN "S_MODULES"."U_ID" IS 'UID';
+COMMENT ON COLUMN "S_MODULES"."NAME" IS '模块名称';
+COMMENT ON COLUMN "S_MODULES"."URI" IS 'URI';
+COMMENT ON COLUMN "S_MODULES"."ICON" IS '图标';
+COMMENT ON COLUMN "S_MODULES"."PARENT_ID" IS '上级菜单';
+COMMENT ON COLUMN "S_MODULES"."REMARK" IS '备注';
+COMMENT ON COLUMN "S_MODULES"."STATUS" IS '状态';
+COMMENT ON COLUMN "S_MODULES"."OPTIONAL" IS '可选权限';
+COMMENT ON COLUMN "S_MODULES"."SORT_INDEX" IS '排序';
+CREATE TABLE "S_MODULE_META" (
+  "U_ID"      VARCHAR2(32)   NOT NULL,
+  "KEY"       VARCHAR2(256)  NOT NULL,
+  "MODULE_ID" VARCHAR2(32)   NOT NULL,
+  "ROLE_ID"   VARCHAR2(32)   NULL,
+  "REMARK"    VARCHAR2(1024) NULL,
+  "META"      CLOB           NULL,
+  "STATUS"    NUMBER(4)      NULL
+);
+COMMENT ON TABLE "S_MODULE_META" IS '系统模块配置';
+COMMENT ON COLUMN "S_MODULE_META"."U_ID" IS 'UID';
+COMMENT ON COLUMN "S_MODULE_META"."KEY" IS '名称';
+COMMENT ON COLUMN "S_MODULE_META"."MODULE_ID" IS '模块ID';
+COMMENT ON COLUMN "S_MODULE_META"."ROLE_ID" IS '角色ID';
+COMMENT ON COLUMN "S_MODULE_META"."META" IS '内容';
+COMMENT ON COLUMN "S_MODULE_META"."REMARK" IS '备注';
+COMMENT ON COLUMN "S_MODULE_META"."STATUS" IS '状态';
+CREATE TABLE "S_RESOURCES" (
+  "U_ID"        VARCHAR2(32)   NOT NULL,
+  "NAME"        VARCHAR2(256)  NOT NULL,
+  "PATH"        VARCHAR2(1024) NOT NULL,
+  "TYPE"        VARCHAR2(256)  NOT NULL,
+  "MD5"         VARCHAR2(256)  NOT NULL,
+  "SIZE"        NUMBER(32)     NULL,
+  "STATUS"      NUMBER(4)      NULL,
+  "CLASSIFIED"  VARCHAR2(32)   NULL,
+  "CREATE_DATE" DATETIME       NOT NULL,
+  "CREATOR_ID"  VARCHAR2(256)  NOT NULL
+);
+COMMENT ON TABLE "S_RESOURCES" IS '资源表';
+COMMENT ON COLUMN "S_RESOURCES"."U_ID" IS 'UID';
+COMMENT ON COLUMN "S_RESOURCES"."NAME" IS '资源名称';
+COMMENT ON COLUMN "S_RESOURCES"."PATH" IS '路径';
+COMMENT ON COLUMN "S_RESOURCES"."TYPE" IS '类型';
+COMMENT ON COLUMN "S_RESOURCES"."MD5" IS 'MD5校验值';
+COMMENT ON COLUMN "S_RESOURCES"."STATUS" IS '状态';
+COMMENT ON COLUMN "S_RESOURCES"."SIZE" IS '资源大小';
+COMMENT ON COLUMN "S_RESOURCES"."CLASSIFIED" IS '分类';
+COMMENT ON COLUMN "S_RESOURCES"."CREATE_DATE" IS '创建时间';
+COMMENT ON COLUMN "S_RESOURCES"."CREATOR_ID" IS '创建人';
+CREATE TABLE "S_CLASSIFIED" (
+  "U_ID"       VARCHAR2(32)   NOT NULL,
+  "NAME"       VARCHAR2(256)  NOT NULL,
+  "REMARK"     VARCHAR2(1024) NULL,
+  "TYPE"       VARCHAR2(256)  NULL,
+  "PARENT_ID"  VARCHAR2(32)   NOT NULL,
+  "ICON"       VARCHAR2(256)  NULL,
+  "CONFIG"     CLOB           NULL,
+  "SORT_INDEX" NUMBER(32)     NULL
+);
+COMMENT ON TABLE "S_CLASSIFIED" IS '数据分类表';
+COMMENT ON COLUMN "S_CLASSIFIED"."U_ID" IS 'UID';
+COMMENT ON COLUMN "S_CLASSIFIED"."NAME" IS '分类名称';
+COMMENT ON COLUMN "S_CLASSIFIED"."REMARK" IS '备注';
+COMMENT ON COLUMN "S_CLASSIFIED"."TYPE" IS '类型';
+COMMENT ON COLUMN "S_CLASSIFIED"."PARENT_ID" IS '父级分类';
+COMMENT ON COLUMN "S_CLASSIFIED"."ICON" IS '图标';
+COMMENT ON COLUMN "S_CLASSIFIED"."CONFIG" IS '分类配置';
+COMMENT ON COLUMN "S_CLASSIFIED"."SORT_INDEX" IS '排序';
+CREATE TABLE "S_ROLE" (
+  "U_ID"   VARCHAR2(32)  NOT NULL,
+  "NAME"   VARCHAR2(256) NOT NULL,
+  "TYPE"   VARCHAR2(50)  NULL,
+  "REMARK" VARCHAR2(512) NULL
+);
+COMMENT ON TABLE "S_ROLE" IS '角色表';
+COMMENT ON COLUMN "S_ROLE"."U_ID" IS 'UID';
+COMMENT ON COLUMN "S_ROLE"."NAME" IS '角色名称';
+COMMENT ON COLUMN "S_ROLE"."TYPE" IS '类型';
+COMMENT ON COLUMN "S_ROLE"."REMARK" IS '备注';
+CREATE TABLE "S_ROLE_MODULES" (
+  "U_ID"      VARCHAR2(32)  NOT NULL,
+  "MODULE_ID" VARCHAR2(256) NOT NULL,
+  "ROLE_ID"   VARCHAR2(256) NOT NULL,
+  "ACTIONS"   CLOB          NULL
+);
+COMMENT ON TABLE "S_ROLE_MODULES" IS '角色模块绑定表';
+COMMENT ON COLUMN "S_ROLE_MODULES"."U_ID" IS 'UID';
+COMMENT ON COLUMN "S_ROLE_MODULES"."MODULE_ID" IS '模块ID';
+COMMENT ON COLUMN "S_ROLE_MODULES"."ROLE_ID" IS '角色ID';
+COMMENT ON COLUMN "S_ROLE_MODULES"."ACTIONS" IS '可操作权限';
+CREATE TABLE "S_SCRIPT" (
+  "U_ID"          VARCHAR2(32)   NOT NULL,
+  "NAME"          VARCHAR2(256)  NOT NULL,
+  "CLASSIFIED_ID" VARCHAR2(1024) NOT NULL,
+  "TYPE"          VARCHAR2(256)  NOT NULL,
+  "CONTENT"       CLOB           NOT NULL,
+  "REMARK"        VARCHAR2(512)  NULL,
+  "STATUS"        NUMBER(4)      NULL
+);
+COMMENT ON TABLE "S_SCRIPT" IS '脚本';
+COMMENT ON COLUMN "S_SCRIPT"."U_ID" IS 'UID';
+COMMENT ON COLUMN "S_SCRIPT"."NAME" IS '脚本名称';
+COMMENT ON COLUMN "S_SCRIPT"."CLASSIFIED_ID" IS '路径';
+COMMENT ON COLUMN "S_SCRIPT"."TYPE" IS '类型';
+COMMENT ON COLUMN "S_SCRIPT"."CONTENT" IS '内容';
+COMMENT ON COLUMN "S_SCRIPT"."REMARK" IS '备注';
+COMMENT ON COLUMN "S_SCRIPT"."STATUS" IS '状态';
+CREATE TABLE "S_USER" (
+  "U_ID"        VARCHAR2(64)  NOT NULL,
+  "USERNAME"    VARCHAR2(64)  NOT NULL,
+  "PASSWORD"    VARCHAR2(64)  NOT NULL,
+  "NAME"        VARCHAR2(64)  NULL,
+  "EMAIL"       VARCHAR2(512) NULL,
+  "PHONE"       VARCHAR2(64)  NULL,
+  "STATUS"      NUMBER(4)     NULL,
+  "CREATE_DATE" DATETIME      NOT NULL,
+  "UPDATE_DATE" DATETIME      NULL
+);
+COMMENT ON TABLE "S_USER" IS '用户表';
+COMMENT ON COLUMN "S_USER"."U_ID" IS 'ID';
+COMMENT ON COLUMN "S_USER"."USERNAME" IS '用户名';
+COMMENT ON COLUMN "S_USER"."PASSWORD" IS '密码';
+COMMENT ON COLUMN "S_USER"."NAME" IS '姓名';
+COMMENT ON COLUMN "S_USER"."EMAIL" IS '邮箱';
+COMMENT ON COLUMN "S_USER"."PHONE" IS '联系电话';
+COMMENT ON COLUMN "S_USER"."STATUS" IS '状态';
+COMMENT ON COLUMN "S_USER"."CREATE_DATE" IS '创建日期';
+COMMENT ON COLUMN "S_USER"."UPDATE_DATE" IS '修改日期';
+CREATE TABLE "S_USER_ROLE" (
+  "U_ID"    VARCHAR2(32)  NOT NULL,
+  "USER_ID" VARCHAR2(256) NOT NULL,
+  "ROLE_ID" VARCHAR2(256) NOT NULL
+);
+COMMENT ON TABLE "S_USER_ROLE" IS '用户角色关联表';
+COMMENT ON COLUMN "S_USER_ROLE"."U_ID" IS 'UID';
+COMMENT ON COLUMN "S_USER_ROLE"."USER_ID" IS '用户ID';
+COMMENT ON COLUMN "S_USER_ROLE"."ROLE_ID" IS '角色ID';
+CREATE TABLE "S_HISTORY"
+(
+  "U_ID"              VARCHAR2(32) NOT NULL,
+  "TYPE"              VARCHAR2(64) NOT NULL,
+  "DESCRIBE"          VARCHAR2(512),
+  "PRIMARY_KEY_NAME"  VARCHAR2(32),
+  "PRIMARY_KEY_VALUE" VARCHAR2(64),
+  "CHANGE_BEFORE"     CLOB,
+  "CHANGE_AFTER"      CLOB,
+  "CREATE_DATE"       DATETIME     NOT NULL,
+  "CREATOR_ID"        VARCHAR2(32)
+);
+
+CREATE TABLE "S_QUERY_PLAN" (
+  "U_ID"        VARCHAR2(32)  NOT NULL,
+  "NAME"        VARCHAR2(256) NOT NULL,
+  "TYPE"        VARCHAR2(256) NOT NULL,
+  "CONFIG"      CLOB,
+  "SHARING"     NUMBER(4),
+  "CREATOR_ID"  VARCHAR2(32)  NOT NULL,
+  "CREATE_DATE" DATETIME      NOT NULL
+);
+COMMENT ON TABLE "S_QUERY_PLAN" IS '查询方案表';
+COMMENT ON COLUMN "S_QUERY_PLAN"."U_ID" IS '主键';
+COMMENT ON COLUMN "S_QUERY_PLAN"."NAME" IS '方案名称';
+COMMENT ON COLUMN "S_QUERY_PLAN"."TYPE" IS '方案分类';
+COMMENT ON COLUMN "S_QUERY_PLAN"."CONFIG" IS '方案配置';
+COMMENT ON COLUMN "S_QUERY_PLAN"."SHARING" IS '是否共享方案';
+COMMENT ON COLUMN "S_QUERY_PLAN"."CREATOR_ID" IS '创建人ID';
+COMMENT ON COLUMN "S_QUERY_PLAN"."CREATE_DATE" IS '创建日期';
+
+CREATE TABLE S_DATA_SOURCE
+(
+  U_ID        VARCHAR(32) PRIMARY KEY NOT NULL,
+  NAME        VARCHAR(64)             NOT NULL,
+  DRIVER      VARCHAR(128)            NOT NULL,
+  URL         VARCHAR(512)            NOT NULL,
+  USERNAME    VARCHAR(128)            NOT NULL,
+  PASSWORD    VARCHAR(128)            NOT NULL,
+  ENABLED     DECIMAL(4)              NOT NULL,
+  CREATE_DATE DATE                    NOT NULL,
+  PROPERTIES  CLOB,
+  COMMENT     VARCHAR(512),
+  TEST_SQL    VARCHAR(512)
+);
+COMMENT ON COLUMN S_DATA_SOURCE.U_ID IS 'ID';
+COMMENT ON COLUMN S_DATA_SOURCE.NAME IS '数据源名称';
+COMMENT ON COLUMN S_DATA_SOURCE.DRIVER IS '驱动';
+COMMENT ON COLUMN S_DATA_SOURCE.URL IS 'URL';
+COMMENT ON COLUMN S_DATA_SOURCE.USERNAME IS '用户名';
+COMMENT ON COLUMN S_DATA_SOURCE.PASSWORD IS '密码';
+COMMENT ON COLUMN S_DATA_SOURCE.ENABLED IS '是否启用';
+COMMENT ON COLUMN S_DATA_SOURCE.CREATE_DATE IS '创建日期';
+COMMENT ON COLUMN S_DATA_SOURCE.PROPERTIES IS '其他配置';
+COMMENT ON COLUMN S_DATA_SOURCE.COMMENT IS '备注';
+COMMENT ON COLUMN S_DATA_SOURCE.TEST_SQL IS '测试链接时使用的sql';
+
+ALTER TABLE "S_QUERY_PLAN"
+  ADD PRIMARY KEY ("U_ID");
+ALTER TABLE "S_USER_PROFILE"
+  ADD PRIMARY KEY ("U_ID");
+ALTER TABLE "S_CLASSIFIED"
+  ADD PRIMARY KEY ("U_ID");
+ALTER TABLE "S_CONFIG"
+  ADD PRIMARY KEY ("U_ID");
+ALTER TABLE "S_MODULES"
+  ADD PRIMARY KEY ("U_ID");
+ALTER TABLE "S_MODULE_META"
+  ADD PRIMARY KEY ("U_ID");
+ALTER TABLE "S_RESOURCES"
+  ADD PRIMARY KEY ("U_ID");
+ALTER TABLE "S_ROLE"
+  ADD PRIMARY KEY ("U_ID");
+ALTER TABLE "S_ROLE_MODULES"
+  ADD PRIMARY KEY ("U_ID");
+ALTER TABLE "S_SCRIPT"
+  ADD PRIMARY KEY ("U_ID");
+ALTER TABLE "S_USER"
+  ADD PRIMARY KEY ("U_ID");
+ALTER TABLE "S_USER_ROLE"
+  ADD PRIMARY KEY ("U_ID");
+
+--定时任务
+CREATE TABLE S_QUARTZ_JOB_HIS (
+  u_id       VARCHAR(32) NOT NULL  PRIMARY KEY,
+  job_id     VARCHAR(32) NOT NULL,
+  start_time DATETIME    NOT NULL,
+  end_time   DATETIME,
+  result     CLOB,
+  status     NUMBER(4)
+);
+COMMENT ON COLUMN S_QUARTZ_JOB_HIS.u_id IS '主键';
+COMMENT ON COLUMN S_QUARTZ_JOB_HIS.job_id IS '任务ID';
+COMMENT ON COLUMN S_QUARTZ_JOB_HIS.start_time IS '开始时间';
+COMMENT ON COLUMN S_QUARTZ_JOB_HIS.end_time IS '结束时间';
+COMMENT ON COLUMN S_QUARTZ_JOB_HIS.result IS '执行结果';
+COMMENT ON COLUMN S_QUARTZ_JOB_HIS.status IS '状态';
+
+
+CREATE TABLE S_QUARTZ_JOB (
+  u_id       VARCHAR(32)  NOT NULL PRIMARY KEY,
+  name       VARCHAR(128) NOT NULL,
+  remark     VARCHAR(512),
+  cron       VARCHAR(512) NOT NULL,
+  script     CLOB         NOT NULL,
+  language   VARCHAR(32)  NOT NULL,
+  enabled    NUMBER(4),
+  parameters CLOB,
+  type       NUMBER(4)
+);
+COMMENT ON COLUMN S_QUARTZ_JOB.u_id IS '主键';
+COMMENT ON COLUMN S_QUARTZ_JOB.name IS '任务名称';
+COMMENT ON COLUMN S_QUARTZ_JOB.remark IS '备注';
+COMMENT ON COLUMN S_QUARTZ_JOB.cron IS 'cron表达式';
+COMMENT ON COLUMN S_QUARTZ_JOB.script IS '执行脚本';
+COMMENT ON COLUMN S_QUARTZ_JOB.language IS '脚本语言';
+COMMENT ON COLUMN S_QUARTZ_JOB.enabled IS '是否启用';
+COMMENT ON COLUMN S_QUARTZ_JOB.parameters IS '启动参数';
+COMMENT ON COLUMN S_QUARTZ_JOB.type IS '任务类型';
+
+
+CREATE TABLE QRTZ_CALENDARS (
+  SCHED_NAME    VARCHAR(120) NOT NULL,
+  CALENDAR_NAME VARCHAR(200) NOT NULL,
+  CALENDAR      IMAGE        NOT NULL
+);
+
+CREATE TABLE QRTZ_CRON_TRIGGERS (
+  SCHED_NAME      VARCHAR(120) NOT NULL,
+  TRIGGER_NAME    VARCHAR(200) NOT NULL,
+  TRIGGER_GROUP   VARCHAR(200) NOT NULL,
+  CRON_EXPRESSION VARCHAR(120) NOT NULL,
+  TIME_ZONE_ID    VARCHAR(80)
+);
+
+CREATE TABLE QRTZ_FIRED_TRIGGERS (
+  SCHED_NAME        VARCHAR(120) NOT NULL,
+  ENTRY_ID          VARCHAR(95)  NOT NULL,
+  TRIGGER_NAME      VARCHAR(200) NOT NULL,
+  TRIGGER_GROUP     VARCHAR(200) NOT NULL,
+  INSTANCE_NAME     VARCHAR(200) NOT NULL,
+  FIRED_TIME        BIGINT       NOT NULL,
+  SCHED_TIME        BIGINT       NOT NULL,
+  PRIORITY          INTEGER      NOT NULL,
+  STATE             VARCHAR(16)  NOT NULL,
+  JOB_NAME          VARCHAR(200) NULL,
+  JOB_GROUP         VARCHAR(200) NULL,
+  IS_NONCONCURRENT  BOOLEAN      NULL,
+  REQUESTS_RECOVERY BOOLEAN      NULL
+);
+
+CREATE TABLE QRTZ_PAUSED_TRIGGER_GRPS (
+  SCHED_NAME    VARCHAR(120) NOT NULL,
+  TRIGGER_GROUP VARCHAR(200) NOT NULL
+);
+
+CREATE TABLE QRTZ_SCHEDULER_STATE (
+  SCHED_NAME        VARCHAR(120) NOT NULL,
+  INSTANCE_NAME     VARCHAR(200) NOT NULL,
+  LAST_CHECKIN_TIME BIGINT       NOT NULL,
+  CHECKIN_INTERVAL  BIGINT       NOT NULL
+);
+
+CREATE TABLE QRTZ_LOCKS (
+  SCHED_NAME VARCHAR(120) NOT NULL,
+  LOCK_NAME  VARCHAR(40)  NOT NULL
+);
+
+CREATE TABLE QRTZ_JOB_DETAILS (
+  SCHED_NAME        VARCHAR(120) NOT NULL,
+  JOB_NAME          VARCHAR(200) NOT NULL,
+  JOB_GROUP         VARCHAR(200) NOT NULL,
+  DESCRIPTION       VARCHAR(250) NULL,
+  JOB_CLASS_NAME    VARCHAR(250) NOT NULL,
+  IS_DURABLE        BOOLEAN      NOT NULL,
+  IS_NONCONCURRENT  BOOLEAN      NOT NULL,
+  IS_UPDATE_DATA    BOOLEAN      NOT NULL,
+  REQUESTS_RECOVERY BOOLEAN      NOT NULL,
+  JOB_DATA          IMAGE        NULL
+);
+
+CREATE TABLE QRTZ_SIMPLE_TRIGGERS (
+  SCHED_NAME      VARCHAR(120) NOT NULL,
+  TRIGGER_NAME    VARCHAR(200) NOT NULL,
+  TRIGGER_GROUP   VARCHAR(200) NOT NULL,
+  REPEAT_COUNT    BIGINT       NOT NULL,
+  REPEAT_INTERVAL BIGINT       NOT NULL,
+  TIMES_TRIGGERED BIGINT       NOT NULL
+);
+
+CREATE TABLE qrtz_simprop_triggers
+(
+  SCHED_NAME    VARCHAR(120)   NOT NULL,
+  TRIGGER_NAME  VARCHAR(200)   NOT NULL,
+  TRIGGER_GROUP VARCHAR(200)   NOT NULL,
+  STR_PROP_1    VARCHAR(512)   NULL,
+  STR_PROP_2    VARCHAR(512)   NULL,
+  STR_PROP_3    VARCHAR(512)   NULL,
+  INT_PROP_1    INTEGER        NULL,
+  INT_PROP_2    INTEGER        NULL,
+  LONG_PROP_1   BIGINT         NULL,
+  LONG_PROP_2   BIGINT         NULL,
+  DEC_PROP_1    NUMERIC(13, 4) NULL,
+  DEC_PROP_2    NUMERIC(13, 4) NULL,
+  BOOL_PROP_1   BOOLEAN        NULL,
+  BOOL_PROP_2   BOOLEAN        NULL,
+);
+
+CREATE TABLE QRTZ_BLOB_TRIGGERS (
+  SCHED_NAME    VARCHAR(120) NOT NULL,
+  TRIGGER_NAME  VARCHAR(200) NOT NULL,
+  TRIGGER_GROUP VARCHAR(200) NOT NULL,
+  BLOB_DATA     IMAGE        NULL
+);
+
+CREATE TABLE QRTZ_TRIGGERS (
+  SCHED_NAME     VARCHAR(120) NOT NULL,
+  TRIGGER_NAME   VARCHAR(200) NOT NULL,
+  TRIGGER_GROUP  VARCHAR(200) NOT NULL,
+  JOB_NAME       VARCHAR(200) NOT NULL,
+  JOB_GROUP      VARCHAR(200) NOT NULL,
+  DESCRIPTION    VARCHAR(250) NULL,
+  NEXT_FIRE_TIME BIGINT       NULL,
+  PREV_FIRE_TIME BIGINT       NULL,
+  PRIORITY       INTEGER      NULL,
+  TRIGGER_STATE  VARCHAR(16)  NOT NULL,
+  TRIGGER_TYPE   VARCHAR(8)   NOT NULL,
+  START_TIME     BIGINT       NOT NULL,
+  END_TIME       BIGINT       NULL,
+  CALENDAR_NAME  VARCHAR(200) NULL,
+  MISFIRE_INSTR  SMALLINT     NULL,
+  JOB_DATA       IMAGE        NULL
+);
+
+ALTER TABLE QRTZ_CALENDARS
+  ADD
+  CONSTRAINT PK_QRTZ_CALENDARS PRIMARY KEY
+    (
+      SCHED_NAME,
+      CALENDAR_NAME
+    );
+
+ALTER TABLE QRTZ_CRON_TRIGGERS
+  ADD
+  CONSTRAINT PK_QRTZ_CRON_TRIGGERS PRIMARY KEY
+    (
+      SCHED_NAME,
+      TRIGGER_NAME,
+      TRIGGER_GROUP
+    );
+
+ALTER TABLE QRTZ_FIRED_TRIGGERS
+  ADD
+  CONSTRAINT PK_QRTZ_FIRED_TRIGGERS PRIMARY KEY
+    (
+      SCHED_NAME,
+      ENTRY_ID
+    );
+
+ALTER TABLE QRTZ_PAUSED_TRIGGER_GRPS
+  ADD
+  CONSTRAINT PK_QRTZ_PAUSED_TRIGGER_GRPS PRIMARY KEY
+    (
+      SCHED_NAME,
+      TRIGGER_GROUP
+    );
+
+ALTER TABLE QRTZ_SCHEDULER_STATE
+  ADD
+  CONSTRAINT PK_QRTZ_SCHEDULER_STATE PRIMARY KEY
+    (
+      SCHED_NAME,
+      INSTANCE_NAME
+    );
+
+ALTER TABLE QRTZ_LOCKS
+  ADD
+  CONSTRAINT PK_QRTZ_LOCKS PRIMARY KEY
+    (
+      SCHED_NAME,
+      LOCK_NAME
+    );
+
+ALTER TABLE QRTZ_JOB_DETAILS
+  ADD
+  CONSTRAINT PK_QRTZ_JOB_DETAILS PRIMARY KEY
+    (
+      SCHED_NAME,
+      JOB_NAME,
+      JOB_GROUP
+    );
+
+ALTER TABLE QRTZ_SIMPLE_TRIGGERS
+  ADD
+  CONSTRAINT PK_QRTZ_SIMPLE_TRIGGERS PRIMARY KEY
+    (
+      SCHED_NAME,
+      TRIGGER_NAME,
+      TRIGGER_GROUP
+    );
+
+ALTER TABLE QRTZ_SIMPROP_TRIGGERS
+  ADD
+  CONSTRAINT PK_QRTZ_SIMPROP_TRIGGERS PRIMARY KEY
+    (
+      SCHED_NAME,
+      TRIGGER_NAME,
+      TRIGGER_GROUP
+    );
+
+ALTER TABLE QRTZ_TRIGGERS
+  ADD
+  CONSTRAINT PK_QRTZ_TRIGGERS PRIMARY KEY
+    (
+      SCHED_NAME,
+      TRIGGER_NAME,
+      TRIGGER_GROUP
+    );
+
+ALTER TABLE QRTZ_CRON_TRIGGERS
+  ADD
+  CONSTRAINT FK_QRTZ_CRON_TRIGGERS_QRTZ_TRIGGERS FOREIGN KEY
+    (
+      SCHED_NAME,
+      TRIGGER_NAME,
+      TRIGGER_GROUP
+    ) REFERENCES QRTZ_TRIGGERS (
+    SCHED_NAME,
+    TRIGGER_NAME,
+    TRIGGER_GROUP
+  ) ON DELETE CASCADE;
+
+
+ALTER TABLE QRTZ_SIMPLE_TRIGGERS
+  ADD
+  CONSTRAINT FK_QRTZ_SIMPLE_TRIGGERS_QRTZ_TRIGGERS FOREIGN KEY
+    (
+      SCHED_NAME,
+      TRIGGER_NAME,
+      TRIGGER_GROUP
+    ) REFERENCES QRTZ_TRIGGERS (
+    SCHED_NAME,
+    TRIGGER_NAME,
+    TRIGGER_GROUP
+  ) ON DELETE CASCADE;
+
+ALTER TABLE QRTZ_SIMPROP_TRIGGERS
+  ADD
+  CONSTRAINT FK_QRTZ_SIMPROP_TRIGGERS_QRTZ_TRIGGERS FOREIGN KEY
+    (
+      SCHED_NAME,
+      TRIGGER_NAME,
+      TRIGGER_GROUP
+    ) REFERENCES QRTZ_TRIGGERS (
+    SCHED_NAME,
+    TRIGGER_NAME,
+    TRIGGER_GROUP
+  ) ON DELETE CASCADE;
+
+
+ALTER TABLE QRTZ_TRIGGERS
+  ADD
+  CONSTRAINT FK_QRTZ_TRIGGERS_QRTZ_JOB_DETAILS FOREIGN KEY
+    (
+      SCHED_NAME,
+      JOB_NAME,
+      JOB_GROUP
+    ) REFERENCES QRTZ_JOB_DETAILS (
+    SCHED_NAME,
+    JOB_NAME,
+    JOB_GROUP
+  );

+ 459 - 0
hsweb-web-starter/src/main/resources/org.hsweb.start.scripts/install/sql/mysql/install.sql

@@ -0,0 +1,459 @@
+CREATE TABLE `s_user_profile` (
+  `u_id`    VARCHAR(32) NOT NULL PRIMARY KEY
+  COMMENT 'UID',
+  `content` TEXT        NOT NULL
+  COMMENT '配置内容',
+  `type`    VARCHAR(512)
+  COMMENT '类型',
+  `user_id` VARCHAR(32)
+  COMMENT '用户ID'
+);
+
+CREATE TABLE `s_config` (
+  `u_id`          VARCHAR(32) NOT NULL PRIMARY KEY
+  COMMENT 'UID',
+  `content`       TEXT        NOT NULL
+  COMMENT '配置内容',
+  `remark`        VARCHAR(512)
+  COMMENT '备注',
+  `classified_id` VARCHAR(32)
+  COMMENT '分类ID',
+  `create_date`   DATETIME    NOT NULL
+  COMMENT '创建日期',
+  `update_date`   DATETIME
+  COMMENT '修改日期'
+);
+ALTER TABLE `s_config`
+  COMMENT '系统配置文件表';
+CREATE TABLE `s_form` (
+  `u_id`          VARCHAR(32)  NOT NULL PRIMARY KEY
+  COMMENT 'uid',
+  `classified_id` VARCHAR(32) COMMENT '分类ID',
+  `name`          VARCHAR(256) NOT NULL
+  COMMENT '名称',
+  `html`          TEXT COMMENT 'html内容',
+  `meta`          TEXT COMMENT '结构定义',
+  `config`        TEXT COMMENT '配置',
+  `version`       INT COMMENT '版本',
+  `revision`      INT COMMENT '修订版',
+  `release`       INT COMMENT '发布版',
+  `using`         TINYINT COMMENT '是否使用中',
+  `create_date`   DATETIME     NOT NULL
+  COMMENT '创建日期',
+  `update_date`   DATETIME COMMENT '修改日期',
+  `remark`        VARCHAR(200)
+);
+ALTER TABLE `s_form`
+  COMMENT '动态表单';
+CREATE TABLE `s_template` (
+  `u_id`          VARCHAR(32)  NOT NULL PRIMARY KEY
+  COMMENT 'uid',
+  `name`          VARCHAR(256) NOT NULL
+  COMMENT '名称',
+  `template`      TEXT COMMENT '模板内容',
+  `classified_id` VARCHAR(32) COMMENT '分类',
+  `type`          VARCHAR(64) COMMENT '类型',
+  `script`        TEXT COMMENT '脚本',
+  `script_links`  TEXT COMMENT '外部脚本',
+  `css`           TEXT COMMENT '样式',
+  `css_links`     TEXT COMMENT '外部样式',
+  `version`       INT COMMENT '版本',
+  `revision`      INT COMMENT '修订版',
+  `release`       INT COMMENT '发布版',
+  `using`         TINYINT COMMENT '是否使用中',
+  `remark`        VARCHAR(200)
+);
+ALTER TABLE `s_template`
+  COMMENT '模板';
+CREATE TABLE `s_modules` (
+  `u_id`       VARCHAR(32)   NOT NULL PRIMARY KEY
+  COMMENT 'uid',
+  `name`       VARCHAR(256)  NOT NULL
+  COMMENT '模块名称',
+  `uri`        VARCHAR(1024) NULL
+  COMMENT 'uri',
+  `icon`       VARCHAR(256)  NULL
+  COMMENT '图标',
+  `parent_id`  VARCHAR(256)  NOT NULL
+  COMMENT '上级菜单',
+  `remark`     VARCHAR(512)  NULL
+  COMMENT '备注',
+  `status`     INT(4)        NULL
+  COMMENT '状态',
+  `optional`   TEXT          NOT NULL
+  COMMENT '可选权限',
+  `sort_index` INT(32)       NOT NULL
+  COMMENT '排序'
+);
+ALTER TABLE `s_modules`
+  COMMENT '系统模块';
+CREATE TABLE `s_module_meta` (
+  `u_id`      VARCHAR(32)   NOT NULL PRIMARY KEY
+  COMMENT 'uid',
+  `key`       VARCHAR(256)  NOT NULL
+  COMMENT '标识',
+  `module_id` VARCHAR(1024) NOT NULL
+  COMMENT '模块ID',
+  `remark`    VARCHAR(1024) NULL
+  COMMENT '备注',
+  `role_id`   VARCHAR(256)  NULL
+  COMMENT '图标',
+  `status`    INT(4)        NULL
+  COMMENT '状态',
+  `meta`      TEXT          NULL
+  COMMENT '定义内容'
+);
+ALTER TABLE `s_modules`
+  COMMENT '系统模块配置';
+CREATE TABLE `s_resources` (
+  `u_id`        VARCHAR(32)   NOT NULL PRIMARY KEY
+  COMMENT 'uid',
+  `name`        VARCHAR(256)  NOT NULL
+  COMMENT '资源名称',
+  `path`        VARCHAR(1024) NOT NULL
+  COMMENT '路径',
+  `type`        VARCHAR(256)  NOT NULL
+  COMMENT '类型',
+  `md5`         VARCHAR(256)  NOT NULL
+  COMMENT 'md5校验值',
+  `status`      INT(4)        NULL
+  COMMENT '状态',
+  `size`        LONG          NULL
+  COMMENT '资源大小',
+  `create_date` DATETIME      NOT NULL
+  COMMENT '创建时间',
+  `creator_id`  VARCHAR(256)  NOT NULL
+  COMMENT '创建人'
+);
+ALTER TABLE `s_resources`
+  COMMENT '资源表';
+CREATE TABLE `s_classified` (
+  `u_id`       VARCHAR(32)   NOT NULL PRIMARY KEY
+  COMMENT 'uid',
+  `name`       VARCHAR(256)  NOT NULL
+  COMMENT '名称',
+  `remark`     VARCHAR(1024) NULL
+  COMMENT '备注',
+  `type`       VARCHAR(256)  NULL
+  COMMENT '类型',
+  `parent_id`  VARCHAR(32)   NOT NULL
+  COMMENT '父级分类',
+  `icon`       VARCHAR(256)  NULL
+  COMMENT '图标',
+  `config`     TEXT          NULL
+  COMMENT '配置',
+  `sort_index` INT           NULL
+  COMMENT '排序'
+);
+ALTER TABLE `s_classified`
+  COMMENT '分类表';
+CREATE TABLE `s_role` (
+  `u_id`   VARCHAR(32)  NOT NULL PRIMARY KEY
+  COMMENT 'uid',
+  `name`   VARCHAR(256) NOT NULL
+  COMMENT '角色名称',
+  `type`   VARCHAR(50)  NULL
+  COMMENT '类型',
+  `remark` VARCHAR(512) NULL
+  COMMENT '备注'
+);
+ALTER TABLE `s_role`
+  COMMENT '角色表';
+CREATE TABLE `s_role_modules` (
+  `u_id`      VARCHAR(32)  NOT NULL PRIMARY KEY
+  COMMENT 'uid',
+  `module_id` VARCHAR(256) NOT NULL
+  COMMENT '模块id',
+  `role_id`   VARCHAR(256) NOT NULL
+  COMMENT '角色id',
+  `actions`   TEXT         NULL
+  COMMENT '可操作权限'
+);
+ALTER TABLE `s_role_modules`
+  COMMENT '角色模块绑定表';
+CREATE TABLE `s_script` (
+  `u_id`          VARCHAR(32)   NOT NULL PRIMARY KEY
+  COMMENT 'uid',
+  `name`          VARCHAR(256)  NOT NULL
+  COMMENT '脚本名称',
+  `classified_id` VARCHAR(1024) NOT NULL
+  COMMENT '路径',
+  `type`          VARCHAR(256)  NOT NULL
+  COMMENT '类型',
+  `content`       TEXT          NOT NULL
+  COMMENT '内容',
+  `remark`        VARCHAR(512)  NULL
+  COMMENT '备注',
+  `status`        INT(4)        NULL
+  COMMENT '状态'
+);
+ALTER TABLE `s_script`
+  COMMENT '脚本';
+CREATE TABLE `s_user` (
+  `u_id`        VARCHAR(32)  NOT NULL PRIMARY KEY
+  COMMENT 'ID',
+  `username`    VARCHAR(64)  NOT NULL
+  COMMENT '用户名',
+  `password`    VARCHAR(64)  NOT NULL
+  COMMENT '密码',
+  `name`        VARCHAR(64)  NULL
+  COMMENT '姓名',
+  `email`       VARCHAR(512) NULL
+  COMMENT '邮箱',
+  `phone`       VARCHAR(64)  NULL
+  COMMENT '联系电话',
+  `status`      INT(4)       NULL
+  COMMENT '状态',
+  `create_date` DATETIME     NOT NULL
+  COMMENT '创建日期',
+  `update_date` DATETIME     NULL
+  COMMENT '修改日期'
+);
+ALTER TABLE `s_user`
+  COMMENT '用户表';
+CREATE TABLE `s_user_role` (
+  `u_id`    VARCHAR(32)  NOT NULL PRIMARY KEY
+  COMMENT 'UID',
+  `user_id` VARCHAR(256) NOT NULL
+  COMMENT '用户ID',
+  `role_id` VARCHAR(256) NOT NULL
+  COMMENT '角色ID'
+);
+ALTER TABLE `s_user_role`
+  COMMENT '用户角色关联表';
+CREATE TABLE s_history
+(
+  `u_id`              VARCHAR(32) NOT NULL PRIMARY KEY
+  COMMENT 'UID',
+  `type`              VARCHAR(64) NOT NULL
+  COMMENT '类型',
+  `describe`          VARCHAR(512) COMMENT '描述',
+  `primary_key_name`  VARCHAR(32) COMMENT '主键名称',
+  `primary_key_value` VARCHAR(64) COMMENT '主键值',
+  `change_before`     TEXT COMMENT '修改前的值',
+  `change_after`      TEXT COMMENT '修改后的值',
+  `create_date`       DATETIME    NOT NULL
+  COMMENT '创建日期',
+  `creator_id`        VARCHAR(32) COMMENT '创建人'
+);
+ALTER TABLE `s_history`
+  COMMENT '操作记录表';
+
+CREATE TABLE s_query_plan
+(
+  `u_id`        VARCHAR(32)  NOT NULL PRIMARY KEY
+  COMMENT 'UID',
+  `name`        VARCHAR(256) NOT NULL
+  COMMENT '名称',
+  `type`        VARCHAR(256) NOT NULL
+  COMMENT '类型',
+  `CONFIG`      TEXT COMMENT '方案配置内容',
+  `SHARING`     TINYINT COMMENT '是否共享',
+  `CREATOR_ID`  VARCHAR(32)  NOT NULL
+  COMMENT '创建人ID',
+  `CREATE_DATE` DATETIME     NOT NULL
+  COMMENT '创建日期'
+);
+ALTER TABLE `s_query_plan`
+  COMMENT '查询方案';
+
+CREATE TABLE s_data_source
+(
+  u_id        VARCHAR(32) PRIMARY KEY NOT NULL
+  COMMENT 'ID',
+  name        VARCHAR(64)             NOT NULL
+  COMMENT '名称',
+  driver      VARCHAR(128)            NOT NULL
+  COMMENT 'driver',
+  url         VARCHAR(512)            NOT NULL
+  COMMENT 'url',
+  username    VARCHAR(128)            NOT NULL
+  COMMENT '用户名',
+  password    VARCHAR(128)            NOT NULL
+  COMMENT '密码',
+  enabled     TINYINT                 NOT NULL
+  COMMENT '是否启用',
+  create_date DATETIME                NOT NULL
+  COMMENT '创建日期',
+  properties  TEXT COMMENT '其他配置',
+  comment     VARCHAR(512) COMMENT '备注',
+  test_sql    VARCHAR(512) COMMENT '测试sql'
+);
+ALTER TABLE s_data_source
+  COMMENT '数据源';
+
+
+CREATE TABLE S_QUARTZ_JOB_HIS (
+  u_id       VARCHAR(32) NOT NULL  PRIMARY KEY
+  COMMENT '主键',
+  job_id     VARCHAR(32) NOT NULL
+  COMMENT '任务ID',
+  start_time DATETIME    NOT NULL
+  COMMENT '开始时间',
+  end_time   DATETIME COMMENT '结束时间',
+  result     TEXT COMMENT '执行结果',
+  status     TINYINT COMMENT '状态'
+);
+
+CREATE TABLE S_QUARTZ_JOB (
+  u_id       VARCHAR(32)  NOT NULL PRIMARY KEY
+  COMMENT '主键',
+  name       VARCHAR(128) NOT NULL
+  COMMENT '主键',
+  remark     VARCHAR(512) COMMENT '主键',
+  cron       VARCHAR(512) NOT NULL
+  COMMENT '主键',
+  script     TEXT         NOT NULL
+  COMMENT '主键',
+  language   VARCHAR(32)  NOT NULL
+  COMMENT '主键',
+  enabled    TINYINT COMMENT '主键',
+  parameters TEXT COMMENT '主键',
+  type       TINYINT
+);
+
+
+CREATE TABLE QRTZ_JOB_DETAILS
+(
+  SCHED_NAME        VARCHAR(120) NOT NULL,
+  JOB_NAME          VARCHAR(200) NOT NULL,
+  JOB_GROUP         VARCHAR(200) NOT NULL,
+  DESCRIPTION       VARCHAR(250) NULL,
+  JOB_CLASS_NAME    VARCHAR(250) NOT NULL,
+  IS_DURABLE        VARCHAR(1)   NOT NULL,
+  IS_NONCONCURRENT  VARCHAR(1)   NOT NULL,
+  IS_UPDATE_DATA    VARCHAR(1)   NOT NULL,
+  REQUESTS_RECOVERY VARCHAR(1)   NOT NULL,
+  JOB_DATA          BLOB         NULL,
+  PRIMARY KEY (SCHED_NAME, JOB_NAME, JOB_GROUP)
+);
+
+CREATE TABLE QRTZ_TRIGGERS
+(
+  SCHED_NAME     VARCHAR(120) NOT NULL,
+  TRIGGER_NAME   VARCHAR(200) NOT NULL,
+  TRIGGER_GROUP  VARCHAR(200) NOT NULL,
+  JOB_NAME       VARCHAR(200) NOT NULL,
+  JOB_GROUP      VARCHAR(200) NOT NULL,
+  DESCRIPTION    VARCHAR(250) NULL,
+  NEXT_FIRE_TIME BIGINT(13)   NULL,
+  PREV_FIRE_TIME BIGINT(13)   NULL,
+  PRIORITY       INTEGER      NULL,
+  TRIGGER_STATE  VARCHAR(16)  NOT NULL,
+  TRIGGER_TYPE   VARCHAR(8)   NOT NULL,
+  START_TIME     BIGINT(13)   NOT NULL,
+  END_TIME       BIGINT(13)   NULL,
+  CALENDAR_NAME  VARCHAR(200) NULL,
+  MISFIRE_INSTR  SMALLINT(2)  NULL,
+  JOB_DATA       BLOB         NULL,
+  PRIMARY KEY (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP),
+  FOREIGN KEY (SCHED_NAME, JOB_NAME, JOB_GROUP)
+  REFERENCES QRTZ_JOB_DETAILS (SCHED_NAME, JOB_NAME, JOB_GROUP)
+);
+
+CREATE TABLE QRTZ_SIMPLE_TRIGGERS
+(
+  SCHED_NAME      VARCHAR(120) NOT NULL,
+  TRIGGER_NAME    VARCHAR(200) NOT NULL,
+  TRIGGER_GROUP   VARCHAR(200) NOT NULL,
+  REPEAT_COUNT    BIGINT(7)    NOT NULL,
+  REPEAT_INTERVAL BIGINT(12)   NOT NULL,
+  TIMES_TRIGGERED BIGINT(10)   NOT NULL,
+  PRIMARY KEY (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP),
+  FOREIGN KEY (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP)
+  REFERENCES QRTZ_TRIGGERS (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP)
+);
+
+CREATE TABLE QRTZ_CRON_TRIGGERS
+(
+  SCHED_NAME      VARCHAR(120) NOT NULL,
+  TRIGGER_NAME    VARCHAR(200) NOT NULL,
+  TRIGGER_GROUP   VARCHAR(200) NOT NULL,
+  CRON_EXPRESSION VARCHAR(200) NOT NULL,
+  TIME_ZONE_ID    VARCHAR(80),
+  PRIMARY KEY (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP),
+  FOREIGN KEY (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP)
+  REFERENCES QRTZ_TRIGGERS (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP)
+);
+
+CREATE TABLE QRTZ_SIMPROP_TRIGGERS
+(
+  SCHED_NAME    VARCHAR(120)   NOT NULL,
+  TRIGGER_NAME  VARCHAR(200)   NOT NULL,
+  TRIGGER_GROUP VARCHAR(200)   NOT NULL,
+  STR_PROP_1    VARCHAR(512)   NULL,
+  STR_PROP_2    VARCHAR(512)   NULL,
+  STR_PROP_3    VARCHAR(512)   NULL,
+  INT_PROP_1    INT            NULL,
+  INT_PROP_2    INT            NULL,
+  LONG_PROP_1   BIGINT         NULL,
+  LONG_PROP_2   BIGINT         NULL,
+  DEC_PROP_1    NUMERIC(13, 4) NULL,
+  DEC_PROP_2    NUMERIC(13, 4) NULL,
+  BOOL_PROP_1   VARCHAR(1)     NULL,
+  BOOL_PROP_2   VARCHAR(1)     NULL,
+  PRIMARY KEY (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP),
+  FOREIGN KEY (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP)
+  REFERENCES QRTZ_TRIGGERS (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP)
+);
+
+CREATE TABLE QRTZ_BLOB_TRIGGERS
+(
+  SCHED_NAME    VARCHAR(120) NOT NULL,
+  TRIGGER_NAME  VARCHAR(200) NOT NULL,
+  TRIGGER_GROUP VARCHAR(200) NOT NULL,
+  BLOB_DATA     BLOB         NULL,
+  PRIMARY KEY (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP),
+  FOREIGN KEY (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP)
+  REFERENCES QRTZ_TRIGGERS (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP)
+);
+
+CREATE TABLE QRTZ_CALENDARS
+(
+  SCHED_NAME    VARCHAR(120) NOT NULL,
+  CALENDAR_NAME VARCHAR(200) NOT NULL,
+  CALENDAR      BLOB         NOT NULL,
+  PRIMARY KEY (SCHED_NAME, CALENDAR_NAME)
+);
+
+CREATE TABLE QRTZ_PAUSED_TRIGGER_GRPS
+(
+  SCHED_NAME    VARCHAR(120) NOT NULL,
+  TRIGGER_GROUP VARCHAR(200) NOT NULL,
+  PRIMARY KEY (SCHED_NAME, TRIGGER_GROUP)
+);
+
+CREATE TABLE QRTZ_FIRED_TRIGGERS
+(
+  SCHED_NAME        VARCHAR(120) NOT NULL,
+  ENTRY_ID          VARCHAR(95)  NOT NULL,
+  TRIGGER_NAME      VARCHAR(200) NOT NULL,
+  TRIGGER_GROUP     VARCHAR(200) NOT NULL,
+  INSTANCE_NAME     VARCHAR(200) NOT NULL,
+  FIRED_TIME        BIGINT(13)   NOT NULL,
+  SCHED_TIME        BIGINT(13)   NOT NULL,
+  PRIORITY          INTEGER      NOT NULL,
+  STATE             VARCHAR(16)  NOT NULL,
+  JOB_NAME          VARCHAR(200) NULL,
+  JOB_GROUP         VARCHAR(200) NULL,
+  IS_NONCONCURRENT  VARCHAR(1)   NULL,
+  REQUESTS_RECOVERY VARCHAR(1)   NULL,
+  PRIMARY KEY (SCHED_NAME, ENTRY_ID)
+);
+
+CREATE TABLE QRTZ_SCHEDULER_STATE
+(
+  SCHED_NAME        VARCHAR(120) NOT NULL,
+  INSTANCE_NAME     VARCHAR(200) NOT NULL,
+  LAST_CHECKIN_TIME BIGINT(13)   NOT NULL,
+  CHECKIN_INTERVAL  BIGINT(13)   NOT NULL,
+  PRIMARY KEY (SCHED_NAME, INSTANCE_NAME)
+);
+
+CREATE TABLE QRTZ_LOCKS
+(
+  SCHED_NAME VARCHAR(120) NOT NULL,
+  LOCK_NAME  VARCHAR(40)  NOT NULL,
+  PRIMARY KEY (SCHED_NAME, LOCK_NAME)
+);
+

+ 531 - 0
hsweb-web-starter/src/main/resources/org.hsweb.start.scripts/install/sql/oracle/install.sql

@@ -0,0 +1,531 @@
+CREATE TABLE ${jdbc.username}."S_USER_PROFILE" (
+  "U_ID"    VARCHAR2(32)  NOT NULL,
+  "CONTENT" CLOB          NOT NULL,
+  "TYPE"    VARCHAR2(512) NULL,
+  "USER_ID" VARCHAR2(32)  NULL
+);
+COMMENT ON TABLE ${jdbc.username}."S_USER_PROFILE" IS '用户配置表';
+COMMENT ON COLUMN ${jdbc.username}."S_USER_PROFILE"."U_ID" IS 'UID';
+COMMENT ON COLUMN ${jdbc.username}."S_USER_PROFILE"."CONTENT" IS '配置内容';
+COMMENT ON COLUMN ${jdbc.username}."S_USER_PROFILE"."TYPE" IS '类型';
+COMMENT ON COLUMN ${jdbc.username}."S_USER_PROFILE"."USER_ID" IS '用户ID';
+
+CREATE TABLE ${jdbc.username}."S_CONFIG" (
+  "U_ID"          VARCHAR2(32)  NOT NULL,
+  "CONTENT"       CLOB          NOT NULL,
+  "REMARK"        VARCHAR2(512) NULL,
+  "CLASSIFIED_ID" VARCHAR2(32)  NULL,
+  "CREATE_DATE"   DATE          NOT NULL,
+  "UPDATE_DATE"   DATE          NULL
+);
+COMMENT ON TABLE ${jdbc.username}."S_CONFIG" IS '系统配置文件表';
+COMMENT ON COLUMN ${jdbc.username}."S_CONFIG"."U_ID" IS 'UID';
+COMMENT ON COLUMN ${jdbc.username}."S_CONFIG"."CONTENT" IS '配置内容';
+COMMENT ON COLUMN ${jdbc.username}."S_CONFIG"."REMARK" IS '备注';
+COMMENT ON COLUMN ${jdbc.username}."S_CONFIG"."CLASSIFIED_ID" IS '分类ID';
+COMMENT ON COLUMN ${jdbc.username}."S_CONFIG"."CREATE_DATE" IS '创建日期';
+COMMENT ON COLUMN ${jdbc.username}."S_CONFIG"."UPDATE_DATE" IS '修改日期';
+CREATE TABLE ${jdbc.username}."S_FORM" (
+  "U_ID"          VARCHAR2(32)  NOT NULL,
+  "CLASSIFIED_ID" VARCHAR2(32),
+  "NAME"          VARCHAR2(256) NOT NULL,
+  "HTML"          CLOB          NULL,
+  "META"          CLOB          NULL,
+  "CONFIG"        CLOB          NULL,
+  "VERSION"       NUMBER(32)    NULL,
+  "REVISION"      NUMBER(32)    NULL,
+  "RELEASE"       NUMBER(32)    NULL,
+  "USING"         NUMBER(4)     NULL,
+  "CREATE_DATE"   DATE          NOT NULL,
+  "UPDATE_DATE"   DATE          NULL,
+  "REMARK"        VARCHAR2(200) NULL
+);
+COMMENT ON TABLE ${jdbc.username}."S_FORM" IS '动态表单';
+COMMENT ON COLUMN ${jdbc.username}."S_FORM"."U_ID" IS 'UID';
+COMMENT ON COLUMN ${jdbc.username}."S_FORM"."CLASSIFIED_ID" IS '分类ID';
+COMMENT ON COLUMN ${jdbc.username}."S_FORM"."NAME" IS '名称';
+COMMENT ON COLUMN ${jdbc.username}."S_FORM"."HTML" IS 'HTML内容';
+COMMENT ON COLUMN ${jdbc.username}."S_FORM"."META" IS '结构定义';
+COMMENT ON COLUMN ${jdbc.username}."S_FORM"."CONFIG" IS '配置';
+COMMENT ON COLUMN ${jdbc.username}."S_FORM"."VERSION" IS '版本';
+COMMENT ON COLUMN ${jdbc.username}."S_FORM"."REVISION" IS '修订版';
+COMMENT ON COLUMN ${jdbc.username}."S_FORM"."RELEASE" IS '当前发布版本';
+COMMENT ON COLUMN ${jdbc.username}."S_FORM"."USING" IS '是否使用中';
+COMMENT ON COLUMN ${jdbc.username}."S_FORM"."CREATE_DATE" IS '创建日期';
+COMMENT ON COLUMN ${jdbc.username}."S_FORM"."UPDATE_DATE" IS '修改日期';
+CREATE TABLE ${jdbc.username}."S_TEMPLATE" (
+  "U_ID"          VARCHAR2(32)  NOT NULL,
+  "NAME"          VARCHAR2(256) NOT NULL,
+  "TEMPLATE"      CLOB          NULL,
+  "CLASSIFIED_ID" VARCHAR2(32)  NULL,
+  "TYPE"          VARCHAR2(64)  NULL,
+  "SCRIPT"        CLOB          NULL,
+  "CSS"           CLOB          NULL,
+  "CSS_LINKS"     CLOB          NULL,
+  "SCRIPT_LINKS"  CLOB          NULL,
+  "VERSION"       NUMBER(32)    NULL,
+  "REVISION"      NUMBER(32)    NULL,
+  "RELEASE"       NUMBER(32)    NULL,
+  "USING"         NUMBER(4)     NULL,
+  "REMARK"        VARCHAR2(200) NULL
+);
+COMMENT ON TABLE ${jdbc.username}."S_TEMPLATE" IS '模板';
+COMMENT ON COLUMN ${jdbc.username}."S_TEMPLATE"."U_ID" IS 'UID';
+COMMENT ON COLUMN ${jdbc.username}."S_TEMPLATE"."NAME" IS '名称';
+COMMENT ON COLUMN ${jdbc.username}."S_TEMPLATE"."TEMPLATE" IS '模板';
+COMMENT ON COLUMN ${jdbc.username}."S_TEMPLATE"."CLASSIFIED_ID" IS '分类';
+COMMENT ON COLUMN ${jdbc.username}."S_TEMPLATE"."TYPE" IS '类型';
+COMMENT ON COLUMN ${jdbc.username}."S_TEMPLATE"."SCRIPT" IS '脚本';
+COMMENT ON COLUMN ${jdbc.username}."S_TEMPLATE"."CSS" IS '样式';
+COMMENT ON COLUMN ${jdbc.username}."S_TEMPLATE"."CSS_LINKS" IS '样式链接';
+COMMENT ON COLUMN ${jdbc.username}."S_TEMPLATE"."SCRIPT_LINKS" IS '脚本链接';
+COMMENT ON COLUMN ${jdbc.username}."S_TEMPLATE"."VERSION" IS '版本';
+COMMENT ON COLUMN ${jdbc.username}."S_TEMPLATE"."REVISION" IS '修订版';
+COMMENT ON COLUMN ${jdbc.username}."S_TEMPLATE"."RELEASE" IS '当前发布版本';
+COMMENT ON COLUMN ${jdbc.username}."S_TEMPLATE"."USING" IS '是否使用中';
+CREATE TABLE ${jdbc.username}."S_MODULES" (
+  "U_ID"       VARCHAR2(32)   NOT NULL,
+  "NAME"       VARCHAR2(256)  NOT NULL,
+  "URI"        VARCHAR2(1024) NULL,
+  "ICON"       VARCHAR2(256)  NULL,
+  "PARENT_ID"  VARCHAR2(256)  NOT NULL,
+  "REMARK"     VARCHAR2(512)  NULL,
+  "STATUS"     NUMBER(4)      NULL,
+  "OPTIONAL"   CLOB           NOT NULL,
+  "SORT_INDEX" NUMBER(32)     NOT NULL
+);
+COMMENT ON TABLE ${jdbc.username}."S_MODULES" IS '系统模块';
+COMMENT ON COLUMN ${jdbc.username}."S_MODULES"."U_ID" IS 'UID';
+COMMENT ON COLUMN ${jdbc.username}."S_MODULES"."NAME" IS '模块名称';
+COMMENT ON COLUMN ${jdbc.username}."S_MODULES"."URI" IS 'URI';
+COMMENT ON COLUMN ${jdbc.username}."S_MODULES"."ICON" IS '图标';
+COMMENT ON COLUMN ${jdbc.username}."S_MODULES"."PARENT_ID" IS '上级菜单';
+COMMENT ON COLUMN ${jdbc.username}."S_MODULES"."REMARK" IS '备注';
+COMMENT ON COLUMN ${jdbc.username}."S_MODULES"."STATUS" IS '状态';
+COMMENT ON COLUMN ${jdbc.username}."S_MODULES"."OPTIONAL" IS '可选权限';
+COMMENT ON COLUMN ${jdbc.username}."S_MODULES"."SORT_INDEX" IS '排序';
+CREATE TABLE ${jdbc.username}."S_CLASSIFIED" (
+  "U_ID"       VARCHAR2(32)   NOT NULL,
+  "NAME"       VARCHAR2(256)  NOT NULL,
+  "REMARK"     VARCHAR2(1024) NULL,
+  "TYPE"       VARCHAR2(256)  NULL,
+  "PARENT_ID"  VARCHAR2(32)   NOT NULL,
+  "ICON"       VARCHAR2(256)  NULL,
+  "CONFIG"     CLOB           NULL,
+  "SORT_INDEX" NUMBER(32)     NULL
+);
+COMMENT ON TABLE ${jdbc.username}."S_CLASSIFIED" IS '数据分类表';
+COMMENT ON COLUMN ${jdbc.username}."S_CLASSIFIED"."U_ID" IS 'UID';
+COMMENT ON COLUMN ${jdbc.username}."S_CLASSIFIED"."NAME" IS '分类名称';
+COMMENT ON COLUMN ${jdbc.username}."S_CLASSIFIED"."REMARK" IS '备注';
+COMMENT ON COLUMN ${jdbc.username}."S_CLASSIFIED"."TYPE" IS '类型';
+COMMENT ON COLUMN ${jdbc.username}."S_CLASSIFIED"."PARENT_ID" IS '父级分类';
+COMMENT ON COLUMN ${jdbc.username}."S_CLASSIFIED"."ICON" IS '图标';
+COMMENT ON COLUMN ${jdbc.username}."S_CLASSIFIED"."CONFIG" IS '分类配置';
+COMMENT ON COLUMN ${jdbc.username}."S_CLASSIFIED"."SORT_INDEX" IS '排序';
+CREATE TABLE ${jdbc.username}."S_MODULE_META" (
+  "U_ID"      VARCHAR2(32)   NOT NULL,
+  "KEY"       VARCHAR2(256)  NOT NULL,
+  "MODULE_ID" VARCHAR2(32)   NOT NULL,
+  "ROLE_ID"   VARCHAR2(32)   NULL,
+  "REMARK"    VARCHAR2(1024) NULL,
+  "META"      CLOB           NULL,
+  "STATUS"    NUMBER(4)      NULL
+);
+COMMENT ON TABLE ${jdbc.username}."S_MODULE_META" IS '系统模块配置';
+COMMENT ON COLUMN ${jdbc.username}."S_MODULE_META"."U_ID" IS 'UID';
+COMMENT ON COLUMN ${jdbc.username}."S_MODULE_META"."KEY" IS '名称';
+COMMENT ON COLUMN ${jdbc.username}."S_MODULE_META"."MODULE_ID" IS '模块ID';
+COMMENT ON COLUMN ${jdbc.username}."S_MODULE_META"."ROLE_ID" IS '角色ID';
+COMMENT ON COLUMN ${jdbc.username}."S_MODULE_META"."META" IS '定义内容';
+COMMENT ON COLUMN ${jdbc.username}."S_MODULE_META"."REMARK" IS '备注';
+COMMENT ON COLUMN ${jdbc.username}."S_MODULE_META"."STATUS" IS '状态';
+CREATE TABLE ${jdbc.username}."S_RESOURCES" (
+  "U_ID"        VARCHAR2(32)   NOT NULL,
+  "NAME"        VARCHAR2(256)  NOT NULL,
+  "PATH"        VARCHAR2(1024) NOT NULL,
+  "TYPE"        VARCHAR2(256)  NOT NULL,
+  "CLASSIFIED"  VARCHAR2(32)   NULL,
+  "MD5"         VARCHAR2(256)  NOT NULL,
+  "SIZE"        NUMBER(32)     NULL,
+  "STATUS"      NUMBER(4)      NULL,
+  "CREATE_DATE" DATE           NOT NULL,
+  "CREATOR_ID"  VARCHAR2(256)  NOT NULL
+);
+COMMENT ON TABLE ${jdbc.username}."S_RESOURCES" IS '资源表';
+COMMENT ON COLUMN ${jdbc.username}."S_RESOURCES"."U_ID" IS 'UID';
+COMMENT ON COLUMN ${jdbc.username}."S_RESOURCES"."NAME" IS '资源名称';
+COMMENT ON COLUMN ${jdbc.username}."S_RESOURCES"."PATH" IS '路径';
+COMMENT ON COLUMN ${jdbc.username}."S_RESOURCES"."TYPE" IS '类型';
+COMMENT ON COLUMN ${jdbc.username}."S_RESOURCES"."CLASSIFIED" IS '分类';
+COMMENT ON COLUMN ${jdbc.username}."S_RESOURCES"."MD5" IS 'MD5校验值';
+COMMENT ON COLUMN ${jdbc.username}."S_RESOURCES"."SIZE" IS '资源大小';
+COMMENT ON COLUMN ${jdbc.username}."S_RESOURCES"."STATUS" IS '状态';
+COMMENT ON COLUMN ${jdbc.username}."S_RESOURCES"."CREATE_DATE" IS '创建时间';
+COMMENT ON COLUMN ${jdbc.username}."S_RESOURCES"."CREATOR_ID" IS '创建人';
+CREATE TABLE ${jdbc.username}."S_ROLE" (
+  "U_ID"   VARCHAR2(32)  NOT NULL,
+  "NAME"   VARCHAR2(256) NOT NULL,
+  "TYPE"   VARCHAR2(50)  NULL,
+  "REMARK" VARCHAR2(512) NULL
+);
+COMMENT ON TABLE ${jdbc.username}."S_ROLE" IS '角色表';
+COMMENT ON COLUMN ${jdbc.username}."S_ROLE"."U_ID" IS 'UID';
+COMMENT ON COLUMN ${jdbc.username}."S_ROLE"."NAME" IS '角色名称';
+COMMENT ON COLUMN ${jdbc.username}."S_ROLE"."TYPE" IS '类型';
+COMMENT ON COLUMN ${jdbc.username}."S_ROLE"."REMARK" IS '备注';
+CREATE TABLE ${jdbc.username}."S_ROLE_MODULES" (
+  "U_ID"      VARCHAR2(23)  NOT NULL,
+  "MODULE_ID" VARCHAR2(256) NOT NULL,
+  "ROLE_ID"   VARCHAR2(256) NOT NULL,
+  "ACTIONS"   CLOB          NULL
+);
+COMMENT ON TABLE ${jdbc.username}."S_ROLE_MODULES" IS '角色模块绑定表';
+COMMENT ON COLUMN ${jdbc.username}."S_ROLE_MODULES"."U_ID" IS 'UID';
+COMMENT ON COLUMN ${jdbc.username}."S_ROLE_MODULES"."MODULE_ID" IS '模块ID';
+COMMENT ON COLUMN ${jdbc.username}."S_ROLE_MODULES"."ROLE_ID" IS '角色ID';
+COMMENT ON COLUMN ${jdbc.username}."S_ROLE_MODULES"."ACTIONS" IS '可操作权限';
+CREATE TABLE ${jdbc.username}."S_SCRIPT" (
+  "U_ID"          VARCHAR2(32)   NOT NULL,
+  "NAME"          VARCHAR2(256)  NOT NULL,
+  "CLASSIFIED_ID" VARCHAR2(1024) NOT NULL,
+  "TYPE"          VARCHAR2(256)  NOT NULL,
+  "CONTENT"       CLOB           NOT NULL,
+  "REMARK"        VARCHAR2(512)  NULL,
+  "STATUS"        NUMBER(4)      NULL
+);
+COMMENT ON TABLE ${jdbc.username}."S_SCRIPT" IS '脚本';
+COMMENT ON COLUMN ${jdbc.username}."S_SCRIPT"."U_ID" IS 'UID';
+COMMENT ON COLUMN ${jdbc.username}."S_SCRIPT"."NAME" IS '脚本名称';
+COMMENT ON COLUMN ${jdbc.username}."S_SCRIPT"."CLASSIFIED_ID" IS '路径';
+COMMENT ON COLUMN ${jdbc.username}."S_SCRIPT"."TYPE" IS '类型';
+COMMENT ON COLUMN ${jdbc.username}."S_SCRIPT"."CONTENT" IS '内容';
+COMMENT ON COLUMN ${jdbc.username}."S_SCRIPT"."REMARK" IS '备注';
+COMMENT ON COLUMN ${jdbc.username}."S_SCRIPT"."STATUS" IS '状态';
+CREATE TABLE ${jdbc.username}."S_USER" (
+  "U_ID"        VARCHAR2(32)  NOT NULL,
+  "USERNAME"    VARCHAR2(64)  NOT NULL,
+  "PASSWORD"    VARCHAR2(64)  NOT NULL,
+  "NAME"        VARCHAR2(64)  NULL,
+  "EMAIL"       VARCHAR2(512) NULL,
+  "PHONE"       VARCHAR2(64)  NULL,
+  "STATUS"      NUMBER(4)     NULL,
+  "CREATE_DATE" DATE          NOT NULL,
+  "UPDATE_DATE" DATE          NULL
+);
+COMMENT ON TABLE ${jdbc.username}."S_USER" IS '用户表';
+COMMENT ON COLUMN ${jdbc.username}."S_USER"."U_ID" IS 'ID';
+COMMENT ON COLUMN ${jdbc.username}."S_USER"."USERNAME" IS '用户名';
+COMMENT ON COLUMN ${jdbc.username}."S_USER"."PASSWORD" IS '密码';
+COMMENT ON COLUMN ${jdbc.username}."S_USER"."NAME" IS '姓名';
+COMMENT ON COLUMN ${jdbc.username}."S_USER"."EMAIL" IS '邮箱';
+COMMENT ON COLUMN ${jdbc.username}."S_USER"."PHONE" IS '联系电话';
+COMMENT ON COLUMN ${jdbc.username}."S_USER"."STATUS" IS '状态';
+COMMENT ON COLUMN ${jdbc.username}."S_USER"."CREATE_DATE" IS '创建日期';
+COMMENT ON COLUMN ${jdbc.username}."S_USER"."UPDATE_DATE" IS '修改日期';
+CREATE TABLE ${jdbc.username}."S_USER_ROLE" (
+  "U_ID"    VARCHAR2(32)  NOT NULL,
+  "USER_ID" VARCHAR2(256) NOT NULL,
+  "ROLE_ID" VARCHAR2(256) NOT NULL
+);
+CREATE TABLE ${jdbc.username}."S_HISTORY"
+(
+  "U_ID"              VARCHAR2(32) NOT NULL,
+  "TYPE"              VARCHAR2(64) NOT NULL,
+  "DESCRIBE"          VARCHAR2(512),
+  "PRIMARY_KEY_NAME"  VARCHAR2(32),
+  "PRIMARY_KEY_VALUE" VARCHAR2(64),
+  "CHANGE_BEFORE"     CLOB,
+  "CHANGE_AFTER"      CLOB,
+  "CREATE_DATE"       DATE         NOT NULL,
+  "CREATOR_ID"        VARCHAR2(32)
+);
+COMMENT ON TABLE ${jdbc.username}."S_HISTORY" IS '历史记录';
+COMMENT ON COLUMN ${jdbc.username}."S_USER_ROLE"."U_ID" IS 'UID';
+COMMENT ON COLUMN ${jdbc.username}."S_USER_ROLE"."USER_ID" IS '用户ID';
+COMMENT ON COLUMN ${jdbc.username}."S_USER_ROLE"."ROLE_ID" IS '角色ID';
+
+CREATE TABLE ${jdbc.username}."S_QUERY_PLAN" (
+  "U_ID"        VARCHAR2(32)  NOT NULL,
+  "NAME"        VARCHAR2(256) NOT NULL,
+  "TYPE"        VARCHAR2(256) NOT NULL,
+  "CONFIG"      CLOB,
+  "SHARING"     NUMBER(4),
+  "CREATOR_ID"  VARCHAR2(32)  NOT NULL,
+  "CREATE_DATE" DATE          NOT NULL
+);
+COMMENT ON TABLE ${jdbc.username}."S_QUERY_PLAN" IS '查询方案表';
+COMMENT ON COLUMN ${jdbc.username}."S_QUERY_PLAN"."U_ID" IS '主键';
+COMMENT ON COLUMN ${jdbc.username}."S_QUERY_PLAN"."NAME" IS '方案名称';
+COMMENT ON COLUMN ${jdbc.username}."S_QUERY_PLAN"."TYPE" IS '方案分类';
+COMMENT ON COLUMN ${jdbc.username}."S_QUERY_PLAN"."CONFIG" IS '方案配置';
+COMMENT ON COLUMN ${jdbc.username}."S_QUERY_PLAN"."SHARING" IS '是否共享方案';
+COMMENT ON COLUMN ${jdbc.username}."S_QUERY_PLAN"."CREATOR_ID" IS '创建人ID';
+COMMENT ON COLUMN ${jdbc.username}."S_QUERY_PLAN"."CREATE_DATE" IS '创建日期';
+
+CREATE TABLE ${jdbc.username}.S_DATA_SOURCE
+(
+  U_ID        VARCHAR2(32) PRIMARY KEY NOT NULL,
+  NAME        VARCHAR2(64)             NOT NULL,
+  DRIVER      VARCHAR2(128)            NOT NULL,
+  URL         VARCHAR2(512)            NOT NULL,
+  USERNAME    VARCHAR2(128)            NOT NULL,
+  PASSWORD    VARCHAR2(128)            NOT NULL,
+  ENABLED     NUMBER(4)                NOT NULL,
+  CREATE_DATE DATE                     NOT NULL,
+  PROPERTIES  CLOB,
+  COMMENT     VARCHAR2(512),
+  TEST_SQL    VARCHAR2(512)
+);
+COMMENT ON COLUMN ${jdbc.username}.S_DATA_SOURCE.U_ID IS 'ID';
+COMMENT ON COLUMN ${jdbc.username}.S_DATA_SOURCE.NAME IS '数据源名称';
+COMMENT ON COLUMN ${jdbc.username}.S_DATA_SOURCE.DRIVER IS '驱动';
+COMMENT ON COLUMN ${jdbc.username}.S_DATA_SOURCE.URL IS 'URL';
+COMMENT ON COLUMN ${jdbc.username}.S_DATA_SOURCE.USERNAME IS '用户名';
+COMMENT ON COLUMN ${jdbc.username}.S_DATA_SOURCE.PASSWORD IS '密码';
+COMMENT ON COLUMN ${jdbc.username}.S_DATA_SOURCE.ENABLED IS '是否启用';
+COMMENT ON COLUMN ${jdbc.username}.S_DATA_SOURCE.CREATE_DATE IS '创建日期';
+COMMENT ON COLUMN ${jdbc.username}.S_DATA_SOURCE.PROPERTIES IS '其他配置';
+COMMENT ON COLUMN ${jdbc.username}.S_DATA_SOURCE.COMMENT IS '备注';
+COMMENT ON COLUMN ${jdbc.username}.S_DATA_SOURCE.TEST_SQL IS '测试链接时使用的sql';
+
+ALTER TABLE ${jdbc.username}."S_QUERY_PLAN"
+  ADD PRIMARY KEY ("U_ID");
+ALTER TABLE ${jdbc.username}."S_USER_PROFILE"
+  ADD PRIMARY KEY ("U_ID");
+ALTER TABLE ${jdbc.username}."S_CLASSIFIED"
+  ADD PRIMARY KEY ("U_ID");
+ALTER TABLE ${jdbc.username}."S_CONFIG"
+  ADD PRIMARY KEY ("U_ID");
+ALTER TABLE ${jdbc.username}."S_MODULES"
+  ADD PRIMARY KEY ("U_ID");
+ALTER TABLE ${jdbc.username}."S_MODULE_META"
+  ADD PRIMARY KEY ("U_ID");
+ALTER TABLE ${jdbc.username}."S_RESOURCES"
+  ADD PRIMARY KEY ("U_ID");
+ALTER TABLE ${jdbc.username}."S_ROLE"
+  ADD PRIMARY KEY ("U_ID");
+ALTER TABLE ${jdbc.username}."S_ROLE_MODULES"
+  ADD PRIMARY KEY ("U_ID");
+ALTER TABLE ${jdbc.username}."S_SCRIPT"
+  ADD PRIMARY KEY ("U_ID");
+ALTER TABLE ${jdbc.username}."S_USER"
+  ADD PRIMARY KEY ("U_ID");
+ALTER TABLE ${jdbc.username}."S_USER_ROLE"
+  ADD PRIMARY KEY ("U_ID");
+
+--定时任务
+CREATE TABLE ${jdbc.username}.S_QUARTZ_JOB_HIS (
+  u_id       VARCHAR(32) NOT NULL  PRIMARY KEY,
+  job_id     VARCHAR(32) NOT NULL,
+  start_time DATE        NOT NULL,
+  end_time   DATE,
+  result     CLOB,
+  status     NUMBER(4)
+);
+COMMENT ON COLUMN ${jdbc.username}.S_QUARTZ_JOB_HIS.u_id IS '主键';
+COMMENT ON COLUMN ${jdbc.username}.S_QUARTZ_JOB_HIS.job_id IS '任务ID';
+COMMENT ON COLUMN ${jdbc.username}.S_QUARTZ_JOB_HIS.start_time IS '开始时间';
+COMMENT ON COLUMN ${jdbc.username}.S_QUARTZ_JOB_HIS.end_time IS '结束时间';
+COMMENT ON COLUMN ${jdbc.username}.S_QUARTZ_JOB_HIS.result IS '执行结果';
+COMMENT ON COLUMN ${jdbc.username}.S_QUARTZ_JOB_HIS.status IS '状态';
+
+
+CREATE TABLE ${jdbc.username}.S_QUARTZ_JOB (
+  u_id       VARCHAR(32)  NOT NULL PRIMARY KEY,
+  name       VARCHAR(128) NOT NULL,
+  remark     VARCHAR(512),
+  cron       ${jdbc.username}. VARCHAR(512) NOT NULL,
+  script     CLOB         NOT NULL,
+  language   VARCHAR(32)  NOT NULL,
+  enabled    NUMBER(4),
+  parameters CLOB,
+  type       NUMBER(4)
+);
+COMMENT ON COLUMN ${jdbc.username}.S_QUARTZ_JOB.u_id IS '主键';
+COMMENT ON COLUMN ${jdbc.username}.S_QUARTZ_JOB.name IS '任务名称';
+COMMENT ON COLUMN ${jdbc.username}.S_QUARTZ_JOB.remark IS '备注';
+COMMENT ON COLUMN ${jdbc.username}.S_QUARTZ_JOB.cron ${jdbc.username}.IS 'cron表达式';
+COMMENT ON COLUMN ${jdbc.username}.S_QUARTZ_JOB.script IS '执行脚本';
+COMMENT ON COLUMN ${jdbc.username}.S_QUARTZ_JOB.language IS '脚本语言';
+COMMENT ON COLUMN ${jdbc.username}.S_QUARTZ_JOB.enabled IS '是否启用';
+COMMENT ON COLUMN ${jdbc.username}.S_QUARTZ_JOB.parameters IS '启动参数';
+COMMENT ON COLUMN ${jdbc.username}.S_QUARTZ_JOB.type IS '任务类型';
+
+
+CREATE TABLE ${jdbc.username}.qrtz_job_details
+(
+  SCHED_NAME        VARCHAR2(120) NOT NULL,
+  JOB_NAME          VARCHAR2(200) NOT NULL,
+  JOB_GROUP         VARCHAR2(200) NOT NULL,
+  DESCRIPTION       VARCHAR2(250) NULL,
+  JOB_CLASS_NAME    VARCHAR2(250) NOT NULL,
+  IS_DURABLE        VARCHAR2(1)   NOT NULL,
+  IS_NONCONCURRENT  VARCHAR2(1)   NOT NULL,
+  IS_UPDATE_DATA    VARCHAR2(1)   NOT NULL,
+  REQUESTS_RECOVERY VARCHAR2(1)   NOT NULL,
+  JOB_DATA          BLOB          NULL,
+  CONSTRAINT QRTZ_JOB_DETAILS_PK PRIMARY KEY (SCHED_NAME, JOB_NAME, JOB_GROUP)
+);
+CREATE TABLE ${jdbc.username}.qrtz_triggers
+(
+  SCHED_NAME     VARCHAR2(120) NOT NULL,
+  TRIGGER_NAME   VARCHAR2(200) NOT NULL,
+  TRIGGER_GROUP  VARCHAR2(200) NOT NULL,
+  JOB_NAME       VARCHAR2(200) NOT NULL,
+  JOB_GROUP      VARCHAR2(200) NOT NULL,
+  DESCRIPTION    VARCHAR2(250) NULL,
+  NEXT_FIRE_TIME NUMBER(13)    NULL,
+  PREV_FIRE_TIME NUMBER(13)    NULL,
+  PRIORITY       NUMBER(13)    NULL,
+  TRIGGER_STATE  VARCHAR2(16)  NOT NULL,
+  TRIGGER_TYPE   VARCHAR2(8)   NOT NULL,
+  START_TIME     NUMBER(13)    NOT NULL,
+  END_TIME       NUMBER(13)    NULL,
+  CALENDAR_NAME  VARCHAR2(200) NULL,
+  MISFIRE_INSTR  NUMBER(2)     NULL,
+  JOB_DATA       BLOB          NULL,
+  CONSTRAINT QRTZ_TRIGGERS_PK PRIMARY KEY (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP),
+  CONSTRAINT QRTZ_TRIGGER_TO_JOBS_FK FOREIGN KEY (SCHED_NAME, JOB_NAME, JOB_GROUP)
+  REFERENCES QRTZ_JOB_DETAILS (SCHED_NAME, JOB_NAME, JOB_GROUP)
+);
+CREATE TABLE ${jdbc.username}.qrtz_simple_triggers
+(
+  SCHED_NAME      VARCHAR2(120) NOT NULL,
+  TRIGGER_NAME    VARCHAR2(200) NOT NULL,
+  TRIGGER_GROUP   VARCHAR2(200) NOT NULL,
+  REPEAT_COUNT    NUMBER(7)     NOT NULL,
+  REPEAT_INTERVAL NUMBER(12)    NOT NULL,
+  TIMES_TRIGGERED NUMBER(10)    NOT NULL,
+  CONSTRAINT QRTZ_SIMPLE_TRIG_PK PRIMARY KEY (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP),
+  CONSTRAINT QRTZ_SIMPLE_TRIG_TO_TRIG_FK FOREIGN KEY (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP)
+  REFERENCES QRTZ_TRIGGERS (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP)
+);
+CREATE TABLE ${jdbc.username}.qrtz_cron_triggers
+(
+  SCHED_NAME      VARCHAR2(120) NOT NULL,
+  TRIGGER_NAME    VARCHAR2(200) NOT NULL,
+  TRIGGER_GROUP   VARCHAR2(200) NOT NULL,
+  CRON_EXPRESSION VARCHAR2(120) NOT NULL,
+  TIME_ZONE_ID    VARCHAR2(80),
+  CONSTRAINT QRTZ_CRON_TRIG_PK PRIMARY KEY (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP),
+  CONSTRAINT QRTZ_CRON_TRIG_TO_TRIG_FK FOREIGN KEY (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP)
+  REFERENCES QRTZ_TRIGGERS (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP)
+);
+CREATE TABLE ${jdbc.username}.qrtz_simprop_triggers
+(
+  SCHED_NAME    VARCHAR2(120)  NOT NULL,
+  TRIGGER_NAME  VARCHAR2(200)  NOT NULL,
+  TRIGGER_GROUP VARCHAR2(200)  NOT NULL,
+  STR_PROP_1    VARCHAR2(512)  NULL,
+  STR_PROP_2    VARCHAR2(512)  NULL,
+  STR_PROP_3    VARCHAR2(512)  NULL,
+  INT_PROP_1    NUMBER(10)     NULL,
+  INT_PROP_2    NUMBER(10)     NULL,
+  LONG_PROP_1   NUMBER(13)     NULL,
+  LONG_PROP_2   NUMBER(13)     NULL,
+  DEC_PROP_1    NUMERIC(13, 4) NULL,
+  DEC_PROP_2    NUMERIC(13, 4) NULL,
+  BOOL_PROP_1   VARCHAR2(1)    NULL,
+  BOOL_PROP_2   VARCHAR2(1)    NULL,
+  CONSTRAINT QRTZ_SIMPROP_TRIG_PK PRIMARY KEY (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP),
+  CONSTRAINT QRTZ_SIMPROP_TRIG_TO_TRIG_FK FOREIGN KEY (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP)
+  REFERENCES QRTZ_TRIGGERS (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP)
+);
+CREATE TABLE ${jdbc.username}.qrtz_blob_triggers
+(
+  SCHED_NAME    VARCHAR2(120) NOT NULL,
+  TRIGGER_NAME  VARCHAR2(200) NOT NULL,
+  TRIGGER_GROUP VARCHAR2(200) NOT NULL,
+  BLOB_DATA     BLOB          NULL,
+  CONSTRAINT QRTZ_BLOB_TRIG_PK PRIMARY KEY (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP),
+  CONSTRAINT QRTZ_BLOB_TRIG_TO_TRIG_FK FOREIGN KEY (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP)
+  REFERENCES QRTZ_TRIGGERS (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP)
+);
+CREATE TABLE ${jdbc.username}.qrtz_calendars
+(
+  SCHED_NAME    VARCHAR2(120) NOT NULL,
+  CALENDAR_NAME VARCHAR2(200) NOT NULL,
+  CALENDAR      BLOB          NOT NULL,
+  CONSTRAINT QRTZ_CALENDARS_PK PRIMARY KEY (SCHED_NAME, CALENDAR_NAME)
+);
+CREATE TABLE ${jdbc.username}.qrtz_paused_trigger_grps
+(
+  SCHED_NAME    VARCHAR2(120) NOT NULL,
+  TRIGGER_GROUP VARCHAR2(200) NOT NULL,
+  CONSTRAINT QRTZ_PAUSED_TRIG_GRPS_PK PRIMARY KEY (SCHED_NAME, TRIGGER_GROUP)
+);
+CREATE TABLE ${jdbc.username}.qrtz_fired_triggers
+(
+  SCHED_NAME        VARCHAR2(120) NOT NULL,
+  ENTRY_ID          VARCHAR2(95)  NOT NULL,
+  TRIGGER_NAME      VARCHAR2(200) NOT NULL,
+  TRIGGER_GROUP     VARCHAR2(200) NOT NULL,
+  INSTANCE_NAME     VARCHAR2(200) NOT NULL,
+  FIRED_TIME        NUMBER(13)    NOT NULL,
+  SCHED_TIME        NUMBER(13)    NOT NULL,
+  PRIORITY          NUMBER(13)    NOT NULL,
+  STATE             VARCHAR2(16)  NOT NULL,
+  JOB_NAME          VARCHAR2(200) NULL,
+  JOB_GROUP         VARCHAR2(200) NULL,
+  IS_NONCONCURRENT  VARCHAR2(1)   NULL,
+  REQUESTS_RECOVERY VARCHAR2(1)   NULL,
+  CONSTRAINT QRTZ_FIRED_TRIGGER_PK PRIMARY KEY (SCHED_NAME, ENTRY_ID)
+);
+CREATE TABLE ${jdbc.username}.qrtz_scheduler_state
+(
+  SCHED_NAME        VARCHAR2(120) NOT NULL,
+  INSTANCE_NAME     VARCHAR2(200) NOT NULL,
+  LAST_CHECKIN_TIME NUMBER(13)    NOT NULL,
+  CHECKIN_INTERVAL  NUMBER(13)    NOT NULL,
+  CONSTRAINT QRTZ_SCHEDULER_STATE_PK PRIMARY KEY (SCHED_NAME, INSTANCE_NAME)
+);
+CREATE TABLE ${jdbc.username}.qrtz_locks
+(
+  SCHED_NAME VARCHAR2(120) NOT NULL,
+  LOCK_NAME  VARCHAR2(40)  NOT NULL,
+  CONSTRAINT QRTZ_LOCKS_PK PRIMARY KEY (SCHED_NAME, LOCK_NAME)
+);
+
+CREATE INDEX idx_qrtz_j_req_recovery
+  ON ${jdbc.username}.${jdbc.username}.qrtz_job_details (SCHED_NAME, REQUESTS_RECOVERY);
+CREATE INDEX idx_qrtz_j_grp
+  ON ${jdbc.username}.${jdbc.username}.qrtz_job_details (SCHED_NAME, JOB_GROUP);
+
+CREATE INDEX idx_qrtz_t_j
+  ON ${jdbc.username}.${jdbc.username}.qrtz_triggers (SCHED_NAME, JOB_NAME, JOB_GROUP);
+CREATE INDEX idx_qrtz_t_jg
+  ON ${jdbc.username}.qrtz_triggers (SCHED_NAME, JOB_GROUP);
+CREATE INDEX idx_qrtz_t_c
+  ON ${jdbc.username}.qrtz_triggers (SCHED_NAME, CALENDAR_NAME);
+CREATE INDEX idx_qrtz_t_g
+  ON ${jdbc.username}.qrtz_triggers (SCHED_NAME, TRIGGER_GROUP);
+CREATE INDEX idx_qrtz_t_state
+  ON ${jdbc.username}.qrtz_triggers (SCHED_NAME, TRIGGER_STATE);
+CREATE INDEX idx_qrtz_t_n_state
+  ON ${jdbc.username}.qrtz_triggers (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP, TRIGGER_STATE);
+CREATE INDEX idx_qrtz_t_n_g_state
+  ON ${jdbc.username}.qrtz_triggers (SCHED_NAME, TRIGGER_GROUP, TRIGGER_STATE);
+CREATE INDEX idx_qrtz_t_next_fire_time
+  ON ${jdbc.username}.qrtz_triggers (SCHED_NAME, NEXT_FIRE_TIME);
+CREATE INDEX idx_qrtz_t_nft_st
+  ON ${jdbc.username}.qrtz_triggers (SCHED_NAME, TRIGGER_STATE, NEXT_FIRE_TIME);
+CREATE INDEX idx_qrtz_t_nft_misfire
+  ON ${jdbc.username}.qrtz_triggers (SCHED_NAME, MISFIRE_INSTR, NEXT_FIRE_TIME);
+CREATE INDEX idx_qrtz_t_nft_st_misfire
+  ON ${jdbc.username}.qrtz_triggers (SCHED_NAME, MISFIRE_INSTR, NEXT_FIRE_TIME, TRIGGER_STATE);
+CREATE INDEX idx_qrtz_t_nft_st_misfire_grp
+  ON ${jdbc.username}.qrtz_triggers (SCHED_NAME, MISFIRE_INSTR, NEXT_FIRE_TIME, TRIGGER_GROUP, TRIGGER_STATE);
+
+CREATE INDEX idx_qrtz_ft_trig_inst_name
+  ON ${jdbc.username}.qrtz_fired_triggers (SCHED_NAME, INSTANCE_NAME);
+CREATE INDEX idx_qrtz_ft_inst_job_req_rcvry
+  ON ${jdbc.username}.qrtz_fired_triggers (SCHED_NAME, INSTANCE_NAME, REQUESTS_RECOVERY);
+CREATE INDEX idx_qrtz_ft_j_g
+  ON ${jdbc.username}.qrtz_fired_triggers (SCHED_NAME, JOB_NAME, JOB_GROUP);
+CREATE INDEX idx_qrtz_ft_jg
+  ON ${jdbc.username}.qrtz_fired_triggers (SCHED_NAME, JOB_GROUP);
+CREATE INDEX idx_qrtz_ft_t_g
+  ON ${jdbc.username}.qrtz_fired_triggers (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP);
+CREATE INDEX idx_qrtz_ft_tg
+  ON ${jdbc.username}.qrtz_fired_triggers (SCHED_NAME, TRIGGER_GROUP);

+ 0 - 0
hsweb-web-starter/src/main/resources/org.hsweb.start.scripts/upgrade/2.2.groovy


+ 3 - 1
pom.xml

@@ -50,6 +50,7 @@
         <module>hsweb-web-oauth2</module>
         <module>hsweb-web-datasource</module>
         <module>hsweb-web-starter</module>
+        <module>hsweb-web-message</module>
     </modules>
 
     <properties>
@@ -61,7 +62,8 @@
         <javassist.version>3.20.0-GA</javassist.version>
         <project.build.jdk>${java.version}</project.build.jdk>
 
-        <spring.boot.version>1.3.7.RELEASE</spring.boot.version>
+        <spring.boot.version>1.4.2.RELEASE</spring.boot.version>
+
         <activiti.version>5.19.0.2</activiti.version>
 
         <fastjson.version>1.2.6</fastjson.version>