208 changed files with 4619 additions and 1369 deletions
			
			
		@ -0,0 +1,128 @@ | 
				
			|||
-- platform.xxl_job_group definition | 
				
			|||
 | 
				
			|||
CREATE TABLE `xxl_job_group` ( | 
				
			|||
  `id` int NOT NULL AUTO_INCREMENT, | 
				
			|||
  `app_name` varchar(64) NOT NULL COMMENT '执行器AppName', | 
				
			|||
  `title` varchar(12) NOT NULL COMMENT '执行器名称', | 
				
			|||
  `address_type` tinyint NOT NULL DEFAULT '0' COMMENT '执行器地址类型:0=自动注册、1=手动录入', | 
				
			|||
  `address_list` text COMMENT '执行器地址列表,多地址逗号分隔', | 
				
			|||
  `update_time` datetime DEFAULT NULL, | 
				
			|||
  PRIMARY KEY (`id`) | 
				
			|||
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; | 
				
			|||
 | 
				
			|||
 | 
				
			|||
-- platform.xxl_job_info definition | 
				
			|||
 | 
				
			|||
CREATE TABLE `xxl_job_info` ( | 
				
			|||
  `id` int NOT NULL AUTO_INCREMENT, | 
				
			|||
  `job_group` int NOT NULL COMMENT '执行器主键ID', | 
				
			|||
  `job_desc` varchar(255) NOT NULL, | 
				
			|||
  `add_time` datetime DEFAULT NULL, | 
				
			|||
  `update_time` datetime DEFAULT NULL, | 
				
			|||
  `author` varchar(64) DEFAULT NULL COMMENT '作者', | 
				
			|||
  `alarm_email` varchar(255) DEFAULT NULL COMMENT '报警邮件', | 
				
			|||
  `schedule_type` varchar(50) NOT NULL DEFAULT 'NONE' COMMENT '调度类型', | 
				
			|||
  `schedule_conf` varchar(128) DEFAULT NULL COMMENT '调度配置,值含义取决于调度类型', | 
				
			|||
  `misfire_strategy` varchar(50) NOT NULL DEFAULT 'DO_NOTHING' COMMENT '调度过期策略', | 
				
			|||
  `executor_route_strategy` varchar(50) DEFAULT NULL COMMENT '执行器路由策略', | 
				
			|||
  `executor_handler` varchar(255) DEFAULT NULL COMMENT '执行器任务handler', | 
				
			|||
  `executor_param` varchar(512) DEFAULT NULL COMMENT '执行器任务参数', | 
				
			|||
  `executor_block_strategy` varchar(50) DEFAULT NULL COMMENT '阻塞处理策略', | 
				
			|||
  `executor_timeout` int NOT NULL DEFAULT '0' COMMENT '任务执行超时时间,单位秒', | 
				
			|||
  `executor_fail_retry_count` int NOT NULL DEFAULT '0' COMMENT '失败重试次数', | 
				
			|||
  `glue_type` varchar(50) NOT NULL COMMENT 'GLUE类型', | 
				
			|||
  `glue_source` mediumtext COMMENT 'GLUE源代码', | 
				
			|||
  `glue_remark` varchar(128) DEFAULT NULL COMMENT 'GLUE备注', | 
				
			|||
  `glue_updatetime` datetime DEFAULT NULL COMMENT 'GLUE更新时间', | 
				
			|||
  `child_jobid` varchar(255) DEFAULT NULL COMMENT '子任务ID,多个逗号分隔', | 
				
			|||
  `trigger_status` tinyint NOT NULL DEFAULT '0' COMMENT '调度状态:0-停止,1-运行', | 
				
			|||
  `trigger_last_time` bigint NOT NULL DEFAULT '0' COMMENT '上次调度时间', | 
				
			|||
  `trigger_next_time` bigint NOT NULL DEFAULT '0' COMMENT '下次调度时间', | 
				
			|||
  PRIMARY KEY (`id`) | 
				
			|||
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; | 
				
			|||
 | 
				
			|||
 | 
				
			|||
-- platform.xxl_job_lock definition | 
				
			|||
 | 
				
			|||
CREATE TABLE `xxl_job_lock` ( | 
				
			|||
  `lock_name` varchar(50) NOT NULL COMMENT '锁名称', | 
				
			|||
  PRIMARY KEY (`lock_name`) | 
				
			|||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; | 
				
			|||
 | 
				
			|||
 | 
				
			|||
-- platform.xxl_job_log definition | 
				
			|||
 | 
				
			|||
CREATE TABLE `xxl_job_log` ( | 
				
			|||
  `id` bigint NOT NULL AUTO_INCREMENT, | 
				
			|||
  `job_group` int NOT NULL COMMENT '执行器主键ID', | 
				
			|||
  `job_id` int NOT NULL COMMENT '任务,主键ID', | 
				
			|||
  `executor_address` varchar(255) DEFAULT NULL COMMENT '执行器地址,本次执行的地址', | 
				
			|||
  `executor_handler` varchar(255) DEFAULT NULL COMMENT '执行器任务handler', | 
				
			|||
  `executor_param` varchar(512) DEFAULT NULL COMMENT '执行器任务参数', | 
				
			|||
  `executor_sharding_param` varchar(20) DEFAULT NULL COMMENT '执行器任务分片参数,格式如 1/2', | 
				
			|||
  `executor_fail_retry_count` int NOT NULL DEFAULT '0' COMMENT '失败重试次数', | 
				
			|||
  `trigger_time` datetime DEFAULT NULL COMMENT '调度-时间', | 
				
			|||
  `trigger_code` int NOT NULL COMMENT '调度-结果', | 
				
			|||
  `trigger_msg` text COMMENT '调度-日志', | 
				
			|||
  `handle_time` datetime DEFAULT NULL COMMENT '执行-时间', | 
				
			|||
  `handle_code` int NOT NULL COMMENT '执行-状态', | 
				
			|||
  `handle_msg` text COMMENT '执行-日志', | 
				
			|||
  `alarm_status` tinyint NOT NULL DEFAULT '0' COMMENT '告警状态:0-默认、1-无需告警、2-告警成功、3-告警失败', | 
				
			|||
  PRIMARY KEY (`id`), | 
				
			|||
  KEY `I_trigger_time` (`trigger_time`), | 
				
			|||
  KEY `I_handle_code` (`handle_code`) | 
				
			|||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; | 
				
			|||
 | 
				
			|||
 | 
				
			|||
-- platform.xxl_job_log_report definition | 
				
			|||
 | 
				
			|||
CREATE TABLE `xxl_job_log_report` ( | 
				
			|||
  `id` int NOT NULL AUTO_INCREMENT, | 
				
			|||
  `trigger_day` datetime DEFAULT NULL COMMENT '调度-时间', | 
				
			|||
  `running_count` int NOT NULL DEFAULT '0' COMMENT '运行中-日志数量', | 
				
			|||
  `suc_count` int NOT NULL DEFAULT '0' COMMENT '执行成功-日志数量', | 
				
			|||
  `fail_count` int NOT NULL DEFAULT '0' COMMENT '执行失败-日志数量', | 
				
			|||
  `update_time` datetime DEFAULT NULL, | 
				
			|||
  PRIMARY KEY (`id`), | 
				
			|||
  UNIQUE KEY `i_trigger_day` (`trigger_day`) USING BTREE | 
				
			|||
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; | 
				
			|||
 | 
				
			|||
 | 
				
			|||
-- platform.xxl_job_logglue definition | 
				
			|||
 | 
				
			|||
CREATE TABLE `xxl_job_logglue` ( | 
				
			|||
  `id` int NOT NULL AUTO_INCREMENT, | 
				
			|||
  `job_id` int NOT NULL COMMENT '任务,主键ID', | 
				
			|||
  `glue_type` varchar(50) DEFAULT NULL COMMENT 'GLUE类型', | 
				
			|||
  `glue_source` mediumtext COMMENT 'GLUE源代码', | 
				
			|||
  `glue_remark` varchar(128) NOT NULL COMMENT 'GLUE备注', | 
				
			|||
  `add_time` datetime DEFAULT NULL, | 
				
			|||
  `update_time` datetime DEFAULT NULL, | 
				
			|||
  PRIMARY KEY (`id`) | 
				
			|||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; | 
				
			|||
 | 
				
			|||
 | 
				
			|||
-- platform.xxl_job_registry definition | 
				
			|||
 | 
				
			|||
CREATE TABLE `xxl_job_registry` ( | 
				
			|||
  `id` int NOT NULL AUTO_INCREMENT, | 
				
			|||
  `registry_group` varchar(50) NOT NULL, | 
				
			|||
  `registry_key` varchar(255) NOT NULL, | 
				
			|||
  `registry_value` varchar(255) NOT NULL, | 
				
			|||
  `update_time` datetime DEFAULT NULL, | 
				
			|||
  PRIMARY KEY (`id`), | 
				
			|||
  KEY `i_g_k_v` (`registry_group`,`registry_key`,`registry_value`) | 
				
			|||
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; | 
				
			|||
 | 
				
			|||
 | 
				
			|||
-- platform.xxl_job_user definition | 
				
			|||
 | 
				
			|||
CREATE TABLE `xxl_job_user` ( | 
				
			|||
  `id` int NOT NULL AUTO_INCREMENT, | 
				
			|||
  `username` varchar(50) NOT NULL COMMENT '账号', | 
				
			|||
  `password` varchar(50) NOT NULL COMMENT '密码', | 
				
			|||
  `role` tinyint NOT NULL COMMENT '角色:0-普通用户、1-管理员', | 
				
			|||
  `permission` varchar(255) DEFAULT NULL COMMENT '权限:执行器ID列表,多个逗号分割', | 
				
			|||
  PRIMARY KEY (`id`), | 
				
			|||
  UNIQUE KEY `i_username` (`username`) USING BTREE | 
				
			|||
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; | 
				
			|||
@ -0,0 +1,127 @@ | 
				
			|||
-- platform2.xxl_job_group definition | 
				
			|||
 | 
				
			|||
CREATE TABLE `xxl_job_group` ( | 
				
			|||
  `ID` bigint NOT NULL AUTO_INCREMENT, | 
				
			|||
  `APP_NAME` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL, | 
				
			|||
  `TITLE` varchar(12) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL, | 
				
			|||
  `ADDRESS_TYPE` tinyint NOT NULL DEFAULT '0', | 
				
			|||
  `ADDRESS_LIST` longtext COLLATE utf8mb4_general_ci COMMENT '执行器地址列表,多地址逗号分隔', | 
				
			|||
  `UPDATE_TIME` datetime DEFAULT NULL COMMENT '更新日期', | 
				
			|||
  PRIMARY KEY (`ID`) | 
				
			|||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='JOB 组表'; | 
				
			|||
 | 
				
			|||
 | 
				
			|||
-- platform2.xxl_job_info definition | 
				
			|||
 | 
				
			|||
CREATE TABLE `xxl_job_info` ( | 
				
			|||
  `ID` bigint NOT NULL AUTO_INCREMENT, | 
				
			|||
  `JOB_GROUP` int NOT NULL, | 
				
			|||
  `JOB_DESC` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL, | 
				
			|||
  `ADD_TIME` datetime DEFAULT NULL COMMENT '创建日期', | 
				
			|||
  `UPDATE_TIME` datetime DEFAULT NULL COMMENT '更新日期', | 
				
			|||
  `AUTHOR` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '作者', | 
				
			|||
  `ALARM_EMAIL` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '报警邮件', | 
				
			|||
  `SCHEDULE_TYPE` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT 'NONE', | 
				
			|||
  `SCHEDULE_CONF` varchar(128) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '调度配置,值含义取决于调度类型', | 
				
			|||
  `MISFIRE_STRATEGY` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL DEFAULT 'DO_NOTHING', | 
				
			|||
  `EXECUTOR_ROUTE_STRATEGY` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '执行器路由策略', | 
				
			|||
  `EXECUTOR_HANDLER` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '执行器任务handler', | 
				
			|||
  `EXECUTOR_PARAM` varchar(512) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '执行器任务参数', | 
				
			|||
  `EXECUTOR_BLOCK_STRATEGY` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '阻塞处理策略', | 
				
			|||
  `EXECUTOR_TIMEOUT` int NOT NULL DEFAULT '0', | 
				
			|||
  `EXECUTOR_FAIL_RETRY_COUNT` int NOT NULL DEFAULT '0', | 
				
			|||
  `GLUE_TYPE` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT 'GLUE类型', | 
				
			|||
  `GLUE_SOURCE` longtext COLLATE utf8mb4_general_ci COMMENT 'GLUE源代码', | 
				
			|||
  `GLUE_REMARK` varchar(128) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT 'GLUE备注', | 
				
			|||
  `GLUE_UPDATETIME` datetime DEFAULT NULL COMMENT 'GLUE更新时间', | 
				
			|||
  `CHILD_JOBID` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '子任务ID,多个逗号分隔', | 
				
			|||
  `TRIGGER_STATUS` tinyint NOT NULL DEFAULT '0', | 
				
			|||
  `TRIGGER_LAST_TIME` bigint NOT NULL DEFAULT '0', | 
				
			|||
  `TRIGGER_NEXT_TIME` bigint NOT NULL DEFAULT '0', | 
				
			|||
  PRIMARY KEY (`ID`) | 
				
			|||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='JOB信息表'; | 
				
			|||
 | 
				
			|||
 | 
				
			|||
-- platform2.xxl_job_lock definition | 
				
			|||
 | 
				
			|||
CREATE TABLE `xxl_job_lock` ( | 
				
			|||
  `LOCK_NAME` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT '锁名称', | 
				
			|||
  PRIMARY KEY (`LOCK_NAME`) | 
				
			|||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='JOB 锁表'; | 
				
			|||
 | 
				
			|||
 | 
				
			|||
-- platform2.xxl_job_log definition | 
				
			|||
 | 
				
			|||
CREATE TABLE `xxl_job_log` ( | 
				
			|||
  `ID` bigint NOT NULL AUTO_INCREMENT, | 
				
			|||
  `JOB_GROUP` int NOT NULL, | 
				
			|||
  `JOB_ID` int NOT NULL, | 
				
			|||
  `EXECUTOR_ADDRESS` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '执行器地址,本次执行的地址', | 
				
			|||
  `EXECUTOR_HANDLER` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '执行器任务handler', | 
				
			|||
  `EXECUTOR_PARAM` varchar(512) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '执行器任务参数', | 
				
			|||
  `EXECUTOR_SHARDING_PARAM` varchar(20) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '执行器任务分片参数,格式如 1/2', | 
				
			|||
  `EXECUTOR_FAIL_RETRY_COUNT` bigint NOT NULL DEFAULT '0', | 
				
			|||
  `TRIGGER_TIME` datetime DEFAULT NULL COMMENT '调度-时间', | 
				
			|||
  `TRIGGER_CODE` int NOT NULL, | 
				
			|||
  `TRIGGER_MSG` longtext COLLATE utf8mb4_general_ci COMMENT '调度-日志', | 
				
			|||
  `HANDLE_TIME` datetime DEFAULT NULL COMMENT '执行-时间', | 
				
			|||
  `HANDLE_CODE` int NOT NULL, | 
				
			|||
  `HANDLE_MSG` longtext COLLATE utf8mb4_general_ci COMMENT '执行-日志', | 
				
			|||
  `ALARM_STATUS` tinyint NOT NULL DEFAULT '0', | 
				
			|||
  PRIMARY KEY (`ID`), | 
				
			|||
  KEY `IDX_XXL_JOB_LOG_TRIGGER_TIME` (`TRIGGER_TIME`), | 
				
			|||
  KEY `IDX_XXL_JOB_LOG_HANDLE_CODE` (`HANDLE_CODE`) | 
				
			|||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='JOB日志表'; | 
				
			|||
 | 
				
			|||
 | 
				
			|||
-- platform2.xxl_job_log_report definition | 
				
			|||
 | 
				
			|||
CREATE TABLE `xxl_job_log_report` ( | 
				
			|||
  `ID` bigint NOT NULL AUTO_INCREMENT, | 
				
			|||
  `TRIGGER_DAY` datetime DEFAULT NULL COMMENT '调度-时间', | 
				
			|||
  `RUNNING_COUNT` int NOT NULL DEFAULT '0', | 
				
			|||
  `SUC_COUNT` int NOT NULL DEFAULT '0', | 
				
			|||
  `FAIL_COUNT` int NOT NULL DEFAULT '0', | 
				
			|||
  `UPDATE_TIME` datetime DEFAULT NULL COMMENT '更新日期', | 
				
			|||
  PRIMARY KEY (`ID`), | 
				
			|||
  UNIQUE KEY `IDX_XXL_JOB_LOG_REPORT_TRIGGER_DAY` (`TRIGGER_DAY`) | 
				
			|||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='JOB日志报告表'; | 
				
			|||
 | 
				
			|||
 | 
				
			|||
-- platform2.xxl_job_logglue definition | 
				
			|||
 | 
				
			|||
CREATE TABLE `xxl_job_logglue` ( | 
				
			|||
  `ID` bigint NOT NULL AUTO_INCREMENT, | 
				
			|||
  `JOB_ID` int NOT NULL, | 
				
			|||
  `GLUE_TYPE` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT 'GLUE类型', | 
				
			|||
  `GLUE_SOURCE` longtext COLLATE utf8mb4_general_ci COMMENT 'GLUE源代码', | 
				
			|||
  `GLUE_REMARK` varchar(128) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT 'GLUE备注', | 
				
			|||
  `ADD_TIME` datetime DEFAULT NULL COMMENT '创建日期', | 
				
			|||
  `UPDATE_TIME` datetime DEFAULT NULL COMMENT '更新日期', | 
				
			|||
  PRIMARY KEY (`ID`) | 
				
			|||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='JOB GLUE 表'; | 
				
			|||
 | 
				
			|||
 | 
				
			|||
-- platform2.xxl_job_registry definition | 
				
			|||
 | 
				
			|||
CREATE TABLE `xxl_job_registry` ( | 
				
			|||
  `ID` bigint NOT NULL AUTO_INCREMENT, | 
				
			|||
  `REGISTRY_GROUP` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL, | 
				
			|||
  `REGISTRY_KEY` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL, | 
				
			|||
  `REGISTRY_VALUE` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL, | 
				
			|||
  `UPDATE_TIME` datetime DEFAULT NULL COMMENT '更新日期', | 
				
			|||
  PRIMARY KEY (`ID`), | 
				
			|||
  UNIQUE KEY `REGISTRY_GROUP` (`REGISTRY_GROUP`,`REGISTRY_KEY`,`REGISTRY_VALUE`) | 
				
			|||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='JOB 注册表'; | 
				
			|||
 | 
				
			|||
 | 
				
			|||
-- platform2.xxl_job_user definition | 
				
			|||
 | 
				
			|||
CREATE TABLE `xxl_job_user` ( | 
				
			|||
  `ID` bigint NOT NULL AUTO_INCREMENT, | 
				
			|||
  `USERNAME` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL, | 
				
			|||
  `PASSWORD` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL, | 
				
			|||
  `ROLE` tinyint NOT NULL, | 
				
			|||
  `PERMISSION` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '权限:执行器ID列表,多个逗号分割', | 
				
			|||
  PRIMARY KEY (`ID`) | 
				
			|||
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='JOB 用户表'; | 
				
			|||
@ -0,0 +1,322 @@ | 
				
			|||
<template> | 
				
			|||
  <div> | 
				
			|||
    <div class="row q-gutter-x-md q-gutter-y-sm"> | 
				
			|||
      <q-input label="loginName" outlined dense /> | 
				
			|||
      <q-input label="loginName" outlined dense :options="['ksdjlfsd', 'sdkjfklsd']" /> | 
				
			|||
      <q-input label="loginName" outlined dense /> | 
				
			|||
      <q-input label="loginName" outlined dense /> | 
				
			|||
      <q-input label="loginName" outlined dense /> | 
				
			|||
      <q-input label="loginName" outlined dense /> | 
				
			|||
      <q-input label="loginName" outlined dense /> | 
				
			|||
      <q-input label="loginName" outlined dense /> | 
				
			|||
      <q-input label="loginName" outlined dense /> | 
				
			|||
      <q-input label="loginName" outlined dense /> | 
				
			|||
    </div> | 
				
			|||
    <TableAction title="User List" :no-action-icon="props.noActionIcon" :actions="tableActions"></TableAction> | 
				
			|||
 | 
				
			|||
    <q-table flat bordered separator="cell" :rows="data" :columns="columns" row-key="name"> | 
				
			|||
      <template #header="headerProps"> | 
				
			|||
        <q-tr :props="headerProps"> | 
				
			|||
          <q-th auto-width /> | 
				
			|||
          <q-th v-for="col in headerProps.cols" :key="col.name" :props="headerProps"> | 
				
			|||
            {{ col.label }} | 
				
			|||
          </q-th> | 
				
			|||
        </q-tr> | 
				
			|||
      </template> | 
				
			|||
 | 
				
			|||
      <template #body="bodyProps"> | 
				
			|||
        <q-tr :props="bodyProps"> | 
				
			|||
          <q-td auto-width> | 
				
			|||
            <q-checkbox v-model="bodyProps.row.selected" flat /> | 
				
			|||
            <q-btn size="sm" dense flat :icon="bodyProps.expand ? 'bi-dash-lg' : 'bi-plus-lg'" @click="bodyProps.expand = !bodyProps.expand" /> | 
				
			|||
            <q-icon name="sym_o_folder_open" size="sm"></q-icon> | 
				
			|||
          </q-td> | 
				
			|||
          <q-td v-for="col in bodyProps.cols" :key="col.name" :props="bodyProps"> | 
				
			|||
            <div v-dompurify-html="col.value"></div> | 
				
			|||
          </q-td> | 
				
			|||
        </q-tr> | 
				
			|||
        <q-tr v-for="child in bodyProps.row.children" v-show="bodyProps.expand" :key="child.name" :props="bodyProps"> | 
				
			|||
          <q-td auto-width></q-td> | 
				
			|||
          <q-td v-for="col in bodyProps.cols" :key="col.name" :props="bodyProps"> | 
				
			|||
            {{ child[col.name] }} | 
				
			|||
          </q-td> | 
				
			|||
        </q-tr> | 
				
			|||
      </template> | 
				
			|||
    </q-table> | 
				
			|||
  </div> | 
				
			|||
</template> | 
				
			|||
 | 
				
			|||
<script setup lang="ts"> | 
				
			|||
import { ref, computed, onMounted } from 'vue'; | 
				
			|||
import { useI18n } from 'vue-i18n'; | 
				
			|||
import { axios, Tools, TreeBuilder } from '@/platform'; | 
				
			|||
import TableAction from './TableAction.vue'; | 
				
			|||
 | 
				
			|||
const props = defineProps({ | 
				
			|||
  tree: { type: Boolean, default: false }, | 
				
			|||
  title: { type: String, default: '' }, | 
				
			|||
  noActionIcon: { type: Boolean, default: false }, | 
				
			|||
  targetObjectName: { type: String, default: '' }, | 
				
			|||
  actions: { | 
				
			|||
    type: Array, | 
				
			|||
    default: () => { | 
				
			|||
      return []; | 
				
			|||
    }, | 
				
			|||
  }, | 
				
			|||
  columns: { | 
				
			|||
    type: Array, | 
				
			|||
    default: () => { | 
				
			|||
      return []; | 
				
			|||
    }, | 
				
			|||
  }, | 
				
			|||
  autoFetchData: { type: Boolean, default: false }, | 
				
			|||
  dataUrl: { type: String, default: undefined }, | 
				
			|||
  fetchDataUrl: { type: String, default: undefined }, | 
				
			|||
  addDataUrl: { type: String, default: undefined }, | 
				
			|||
  removeDataUrl: { type: String, default: undefined }, | 
				
			|||
  updateDataUrl: { type: String, default: undefined }, | 
				
			|||
}); | 
				
			|||
 | 
				
			|||
const { t } = useI18n(); | 
				
			|||
 | 
				
			|||
const defaultTableActions = { | 
				
			|||
  separator: { | 
				
			|||
    separator: true, | 
				
			|||
  }, | 
				
			|||
  query: { | 
				
			|||
    name: 'query', | 
				
			|||
    label: t('query'), | 
				
			|||
    icon: 'bi-search', | 
				
			|||
    click: () => { | 
				
			|||
      console.log('query'); | 
				
			|||
    }, | 
				
			|||
  }, | 
				
			|||
  refresh: { | 
				
			|||
    name: 'refresh', | 
				
			|||
    label: t('refresh'), | 
				
			|||
    icon: 'bi-arrow-clockwise', | 
				
			|||
    click: () => { | 
				
			|||
      console.log('refresh'); | 
				
			|||
    }, | 
				
			|||
  }, | 
				
			|||
  add: { | 
				
			|||
    name: 'add', | 
				
			|||
    label: t('addNew'), | 
				
			|||
    icon: 'bi-plus-lg', | 
				
			|||
    click: () => { | 
				
			|||
      console.log('add'); | 
				
			|||
    }, | 
				
			|||
  }, | 
				
			|||
  clone: { | 
				
			|||
    name: 'clone', | 
				
			|||
    label: t('clone'), | 
				
			|||
    icon: 'content_copy', | 
				
			|||
    click: () => { | 
				
			|||
      console.log('clone'); | 
				
			|||
    }, | 
				
			|||
  }, | 
				
			|||
  edit: { | 
				
			|||
    name: 'edit', | 
				
			|||
    label: t('edit'), | 
				
			|||
    icon: 'bi-pencil-square', | 
				
			|||
    click: () => { | 
				
			|||
      console.log('edit'); | 
				
			|||
    }, | 
				
			|||
  }, | 
				
			|||
  remove: { | 
				
			|||
    name: 'remove', | 
				
			|||
    label: t('delete'), | 
				
			|||
    icon: 'bi-x-lg', | 
				
			|||
    click: () => { | 
				
			|||
      console.log('remove'); | 
				
			|||
    }, | 
				
			|||
  }, | 
				
			|||
  removeAll: { | 
				
			|||
    name: 'removeAll', | 
				
			|||
    label: t('deleteAll'), | 
				
			|||
    click: () => { | 
				
			|||
      console.log('removeAll'); | 
				
			|||
    }, | 
				
			|||
  }, | 
				
			|||
  detail: { | 
				
			|||
    name: 'detail', | 
				
			|||
    label: t('detail'), | 
				
			|||
    icon: 'bi-info-circle', | 
				
			|||
    click: () => { | 
				
			|||
      console.log('detail'); | 
				
			|||
    }, | 
				
			|||
  }, | 
				
			|||
  expandAll: { | 
				
			|||
    name: 'expandAll', | 
				
			|||
    label: t('expandAll'), | 
				
			|||
    icon: 'bi-plus-square', | 
				
			|||
    click: () => { | 
				
			|||
      console.log('expandAll'); | 
				
			|||
    }, | 
				
			|||
  }, | 
				
			|||
  selectAll: { | 
				
			|||
    name: 'selectAll', | 
				
			|||
    label: t('selectAll'), | 
				
			|||
    icon: 'bi-check-square', | 
				
			|||
    click: () => { | 
				
			|||
      console.log('selectAll'); | 
				
			|||
    }, | 
				
			|||
  }, | 
				
			|||
  addTop: { | 
				
			|||
    name: 'addTop', | 
				
			|||
    label: t('addTop', { object: props.targetObjectName }), | 
				
			|||
    icon: 'addTop', | 
				
			|||
    click: () => { | 
				
			|||
      console.log('addTop'); | 
				
			|||
    }, | 
				
			|||
  }, | 
				
			|||
  addChild: { | 
				
			|||
    name: 'addChild', | 
				
			|||
    label: t('addChild', { object: props.targetObjectName }), | 
				
			|||
    icon: 'addChild', | 
				
			|||
    click: () => { | 
				
			|||
      console.log('addChild'); | 
				
			|||
    }, | 
				
			|||
  }, | 
				
			|||
}; | 
				
			|||
 | 
				
			|||
const tableActions = []; | 
				
			|||
if (props.actions && props.actions.length > 0) { | 
				
			|||
  for (const action of props.actions) { | 
				
			|||
    if (Tools.isString(action)) { | 
				
			|||
      tableActions.push(defaultTableActions[action]); | 
				
			|||
    } else if (Tools.isObject(action)) { | 
				
			|||
      tableActions.push(action); | 
				
			|||
    } | 
				
			|||
  } | 
				
			|||
} | 
				
			|||
 | 
				
			|||
const data = ref([]); | 
				
			|||
if (props.autoFetchData) { | 
				
			|||
  axios.get(props.fetchDataUrl ? props.fetchDataUrl : props.dataUrl).then((response) => { | 
				
			|||
    if (props.tree) { | 
				
			|||
      TreeBuilder.build(response.data); | 
				
			|||
    } | 
				
			|||
    data.value = response.data; | 
				
			|||
  }); | 
				
			|||
} | 
				
			|||
 | 
				
			|||
const selected = ref([]); | 
				
			|||
const val2 = ref(true); | 
				
			|||
 | 
				
			|||
const rows = ref([ | 
				
			|||
  { | 
				
			|||
    name: 'Frozen Yogurt', | 
				
			|||
    calories: 159, | 
				
			|||
    fat: 6.0, | 
				
			|||
    carbs: 24, | 
				
			|||
    protein: 4.0, | 
				
			|||
    sodium: 87, | 
				
			|||
    calcium: '14%', | 
				
			|||
    iron: '1%', | 
				
			|||
    selected: true, | 
				
			|||
    children: [ | 
				
			|||
      { | 
				
			|||
        name: 'Ice cream sandwich3', | 
				
			|||
        calories: 237, | 
				
			|||
        fat: 9.0, | 
				
			|||
        carbs: 37, | 
				
			|||
        protein: 4.3, | 
				
			|||
        sodium: 129, | 
				
			|||
        calcium: '8%', | 
				
			|||
        iron: '1%', | 
				
			|||
      }, | 
				
			|||
    ], | 
				
			|||
  }, | 
				
			|||
  { | 
				
			|||
    name: 'Ice cream sandwich', | 
				
			|||
    calories: 237, | 
				
			|||
    fat: 9.0, | 
				
			|||
    carbs: 37, | 
				
			|||
    protein: 4.3, | 
				
			|||
    sodium: 129, | 
				
			|||
    calcium: '8%', | 
				
			|||
    iron: '1%', | 
				
			|||
  }, | 
				
			|||
  { | 
				
			|||
    name: 'Eclair', | 
				
			|||
    calories: 262, | 
				
			|||
    fat: 16.0, | 
				
			|||
    carbs: 23, | 
				
			|||
    protein: 6.0, | 
				
			|||
    sodium: 337, | 
				
			|||
    calcium: '6%', | 
				
			|||
    iron: '7%', | 
				
			|||
  }, | 
				
			|||
  { | 
				
			|||
    name: 'Cupcake', | 
				
			|||
    calories: 305, | 
				
			|||
    fat: 3.7, | 
				
			|||
    carbs: 67, | 
				
			|||
    protein: 4.3, | 
				
			|||
    sodium: 413, | 
				
			|||
    calcium: '3%', | 
				
			|||
    iron: '8%', | 
				
			|||
  }, | 
				
			|||
  { | 
				
			|||
    name: 'Gingerbread', | 
				
			|||
    calories: 356, | 
				
			|||
    fat: 16.0, | 
				
			|||
    carbs: 49, | 
				
			|||
    protein: 3.9, | 
				
			|||
    sodium: 327, | 
				
			|||
    calcium: '7%', | 
				
			|||
    iron: '16%', | 
				
			|||
  }, | 
				
			|||
  { | 
				
			|||
    name: 'Jelly bean', | 
				
			|||
    calories: 375, | 
				
			|||
    fat: 0.0, | 
				
			|||
    carbs: 94, | 
				
			|||
    protein: 0.0, | 
				
			|||
    sodium: 50, | 
				
			|||
    calcium: '0%', | 
				
			|||
    iron: '0%', | 
				
			|||
  }, | 
				
			|||
  { | 
				
			|||
    name: '<span style="color: red">This should be red.</span>', | 
				
			|||
    calories: 392, | 
				
			|||
    fat: 0.2, | 
				
			|||
    carbs: 98, | 
				
			|||
    protein: 0, | 
				
			|||
    sodium: 38, | 
				
			|||
    calcium: '0%', | 
				
			|||
    iron: '2%', | 
				
			|||
  }, | 
				
			|||
  { | 
				
			|||
    name: 'Honeycomb', | 
				
			|||
    calories: 408, | 
				
			|||
    fat: 3.2, | 
				
			|||
    carbs: 87, | 
				
			|||
    protein: 6.5, | 
				
			|||
    sodium: 562, | 
				
			|||
    calcium: '0%', | 
				
			|||
    iron: '45%', | 
				
			|||
  }, | 
				
			|||
  { | 
				
			|||
    name: 'Donut', | 
				
			|||
    calories: 452, | 
				
			|||
    fat: 25.0, | 
				
			|||
    carbs: 51, | 
				
			|||
    protein: 4.9, | 
				
			|||
    sodium: 326, | 
				
			|||
    calcium: '2%', | 
				
			|||
    iron: '22%', | 
				
			|||
  }, | 
				
			|||
  { | 
				
			|||
    name: 'KitKat', | 
				
			|||
    calories: 518, | 
				
			|||
    fat: 26.0, | 
				
			|||
    carbs: 65, | 
				
			|||
    protein: 7, | 
				
			|||
    sodium: 54, | 
				
			|||
    calcium: '12%', | 
				
			|||
    iron: '6%', | 
				
			|||
  }, | 
				
			|||
]); | 
				
			|||
</script> | 
				
			|||
@ -0,0 +1,39 @@ | 
				
			|||
<template> | 
				
			|||
  <q-table :binary-state-sort="true" column-sort-order="ad" :v-bind="attrs"> | 
				
			|||
    <template #top> | 
				
			|||
      <div class="row"> | 
				
			|||
        <div class="col">{{ attrs.title }}</div> | 
				
			|||
        <div class="col items-end"> | 
				
			|||
          <q-btn label="dksfj"></q-btn> | 
				
			|||
        </div> | 
				
			|||
      </div> | 
				
			|||
    </template> | 
				
			|||
  </q-table> | 
				
			|||
</template> | 
				
			|||
 | 
				
			|||
<script setup lang="ts"> | 
				
			|||
import { useAttrs } from 'vue'; | 
				
			|||
import { useI18n } from 'vue-i18n'; | 
				
			|||
import { Tools } from '@/platform/utils/Tools'; | 
				
			|||
 | 
				
			|||
const attrs = useAttrs(); | 
				
			|||
const { t } = useI18n(); | 
				
			|||
 | 
				
			|||
for (const column of attrs.columns) { | 
				
			|||
  if (Tools.isUndefinedOrNull(column.label)) { | 
				
			|||
    column.label = t(column.name); | 
				
			|||
  } | 
				
			|||
  if (Tools.isUndefinedOrNull(column.field)) { | 
				
			|||
    column.field = column.name; | 
				
			|||
  } | 
				
			|||
  if (Tools.isUndefinedOrNull(column.align)) { | 
				
			|||
    column.align = 'left'; | 
				
			|||
  } | 
				
			|||
  if (Tools.isUndefinedOrNull(column.sortable)) { | 
				
			|||
    column.sortable = true; | 
				
			|||
  } | 
				
			|||
  if (Tools.isUndefinedOrNull(column.sortOrder)) { | 
				
			|||
    column.sortOrder = 'da'; | 
				
			|||
  } | 
				
			|||
} | 
				
			|||
</script> | 
				
			|||
@ -0,0 +1,54 @@ | 
				
			|||
<template> | 
				
			|||
  <w-list-grid | 
				
			|||
    :tree="true" | 
				
			|||
    title="User List" | 
				
			|||
    :no-action-icon="true" | 
				
			|||
    :target-object-name="$t('菜单')" | 
				
			|||
    :actions="[ | 
				
			|||
      'query', | 
				
			|||
      'refresh', | 
				
			|||
      'expandAll', | 
				
			|||
      'selectAll', | 
				
			|||
      'separator', | 
				
			|||
      'add', | 
				
			|||
      'clone', | 
				
			|||
      'edit', | 
				
			|||
      'remove', | 
				
			|||
      'removeAll', | 
				
			|||
      'separator', | 
				
			|||
      'detail', | 
				
			|||
 | 
				
			|||
      'addTop', | 
				
			|||
      'addChild', | 
				
			|||
    ]" | 
				
			|||
    :columns="columns" | 
				
			|||
    :auto-fetch-data="true" | 
				
			|||
    :data-url="Environment.apiContextPath('/api/system/menu/allMenus')" | 
				
			|||
  ></w-list-grid> | 
				
			|||
</template> | 
				
			|||
 | 
				
			|||
<script setup lang="ts"> | 
				
			|||
import { ref } from 'vue'; | 
				
			|||
import { useI18n } from 'vue-i18n'; | 
				
			|||
import { Environment } from '@/platform'; | 
				
			|||
 | 
				
			|||
const { t } = useI18n(); | 
				
			|||
 | 
				
			|||
const columns = [ | 
				
			|||
  { | 
				
			|||
    name: 'name', | 
				
			|||
    required: true, | 
				
			|||
    label: 'Dessert (100g serving)', | 
				
			|||
    align: 'left', | 
				
			|||
    field: 'name', | 
				
			|||
    sortable: true, | 
				
			|||
  }, | 
				
			|||
  { name: 'calories', align: 'center', label: 'Calories', field: 'calories', sortable: true }, | 
				
			|||
  { name: 'fat', label: 'Fat (g)', field: 'fat', sortable: true }, | 
				
			|||
  { name: 'carbs', label: 'Carbs (g)', field: 'carbs' }, | 
				
			|||
  { name: 'protein', label: 'Protein (g)', field: 'protein' }, | 
				
			|||
  { name: 'sodium', label: 'Sodium (mg)', field: 'sodium' }, | 
				
			|||
  { name: 'calcium', label: 'Calcium (%)', field: 'calcium', sortable: true, sort: (a, b) => parseInt(a, 10) - parseInt(b, 10) }, | 
				
			|||
  { name: 'iron', label: 'Iron (%)', field: 'iron', sortable: true, sort: (a, b) => parseInt(a, 10) - parseInt(b, 10) }, | 
				
			|||
]; | 
				
			|||
</script> | 
				
			|||
@ -0,0 +1,53 @@ | 
				
			|||
<template> | 
				
			|||
  <div> | 
				
			|||
    <w-tree-grid ref="corporationTreeGridRef" title="法人树" label-key="name" :actions="corporationConfigure.actions" /> | 
				
			|||
  </div> | 
				
			|||
</template> | 
				
			|||
<script setup lang="ts"> | 
				
			|||
import { ref, onMounted, toRaw } from 'vue'; | 
				
			|||
import { useRoute } from 'vue-router'; | 
				
			|||
import { useI18n } from 'vue-i18n'; | 
				
			|||
import { Environment, axios } from '@/platform'; | 
				
			|||
 | 
				
			|||
const route = useRoute(); | 
				
			|||
const { t } = useI18n(); | 
				
			|||
 | 
				
			|||
const corporationTreeGridRef = ref(); | 
				
			|||
 | 
				
			|||
const corporationConfigure = { | 
				
			|||
  actions: [ | 
				
			|||
    { | 
				
			|||
      name: 'refresh', | 
				
			|||
      label: t('refresh'), | 
				
			|||
      click: () => {}, | 
				
			|||
    }, | 
				
			|||
 | 
				
			|||
    { | 
				
			|||
      name: 'addRoot', | 
				
			|||
      label: t('system.corporation.action.addTop'), | 
				
			|||
      click: () => {}, | 
				
			|||
    }, | 
				
			|||
    { | 
				
			|||
      name: 'addChild', | 
				
			|||
      label: t('system.corporation.action.addChild'), | 
				
			|||
      click: () => {}, | 
				
			|||
    }, | 
				
			|||
    { | 
				
			|||
      name: 'edit', | 
				
			|||
      label: t('edit'), | 
				
			|||
      click: () => {}, | 
				
			|||
    }, | 
				
			|||
    { | 
				
			|||
      name: 'delete', | 
				
			|||
      label: t('delete'), | 
				
			|||
      click: () => {}, | 
				
			|||
    }, | 
				
			|||
  ], | 
				
			|||
}; | 
				
			|||
 | 
				
			|||
onMounted(() => { | 
				
			|||
  axios.get(Environment.apiContextPath('/api/system/corporation?pageable=false&sortBy=name')).then((response) => { | 
				
			|||
    corporationTreeGridRef.value.setNodes(response.data.content); | 
				
			|||
  }); | 
				
			|||
}); | 
				
			|||
</script> | 
				
			|||
@ -0,0 +1,47 @@ | 
				
			|||
package io.sc.platform.core.util; | 
				
			|||
 | 
				
			|||
import javax.servlet.http.HttpServletRequest; | 
				
			|||
 | 
				
			|||
import inet.ipaddr.IPAddressString; | 
				
			|||
 | 
				
			|||
/** | 
				
			|||
 * IP 地址工具类 | 
				
			|||
 * @author wangshaoping | 
				
			|||
 * | 
				
			|||
 */ | 
				
			|||
public class IpUtil { | 
				
			|||
	public static final String UNKNOW_IP ="0.0.0.0"; | 
				
			|||
 | 
				
			|||
	/** | 
				
			|||
	 * 获取客户端 IP 地址 | 
				
			|||
	 * @param request Http 请求 | 
				
			|||
	 * @return 客户端 IP 地址 | 
				
			|||
	 */ | 
				
			|||
	public static String getRemoteAddress(HttpServletRequest request){ | 
				
			|||
		IPAddressString ipAdress =getRemoteIPAddressString(request); | 
				
			|||
		if(ipAdress!=null){ | 
				
			|||
			return ipAdress.getAddress().toFullString(); | 
				
			|||
		} | 
				
			|||
		return null; | 
				
			|||
	} | 
				
			|||
	 | 
				
			|||
	private static IPAddressString getRemoteIPAddressString(HttpServletRequest request){ | 
				
			|||
		String ip =request.getHeader("x-forwarded-for"); | 
				
			|||
		if(ip==null || ip.length()==0 || "unknown".equalsIgnoreCase(ip)){ | 
				
			|||
			ip =request.getHeader("Proxy-Client-IP"); | 
				
			|||
		} | 
				
			|||
		if(ip==null || ip.length()==0 || "unknown".equalsIgnoreCase(ip)){ | 
				
			|||
			ip =request.getHeader("WL-Proxy-Client-IP"); | 
				
			|||
		} | 
				
			|||
		if(ip==null || ip.length()==0 || "unknown".equalsIgnoreCase(ip)){ | 
				
			|||
			ip =request.getRemoteAddr(); | 
				
			|||
		} | 
				
			|||
		IPAddressString ipAdress =new IPAddressString(ip); | 
				
			|||
		if(ipAdress!=null && ipAdress.isIPAddress()){ | 
				
			|||
			return ipAdress; | 
				
			|||
		} | 
				
			|||
		//当无法正确获取IP时,系统采用特殊IP地址作为IP地址
 | 
				
			|||
		//这样可以避免因为无法获取IP而出现无法认证登录的问题
 | 
				
			|||
		return new IPAddressString(UNKNOW_IP); | 
				
			|||
	} | 
				
			|||
} | 
				
			|||
@ -0,0 +1,124 @@ | 
				
			|||
<?xml version="1.0" encoding="UTF-8"?> | 
				
			|||
<!-- 自动扫描本文件,如果发生变化,则重新初始化日志系统,并设置每隔5秒钟扫描一次 --> | 
				
			|||
<configuration debug="false" scan="true" scanPeriod="5 seconds"> | 
				
			|||
	<!--  | 
				
			|||
		以下为 logback 的 spring 扩展支持的功能,即支持从 application.properties 文件中获取属性,并在此文件中采用 ${} 方式使用。 | 
				
			|||
		要使用此功能,必须使用 logback-ext-spring 扩展 jar 包,以 gradle 构建系统,则需要加入以下依赖 | 
				
			|||
		dependencies { | 
				
			|||
			compile( | 
				
			|||
				"org.logback-extensions:logback-ext-spring:0.1.2" | 
				
			|||
			) | 
				
			|||
		} | 
				
			|||
	--> | 
				
			|||
	<property name="homedir" value="${application.home.dir}"/> | 
				
			|||
	<property name="pattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger{36} - %msg%n"/> | 
				
			|||
	 | 
				
			|||
	<!-- 在控制台中输出日志 --> | 
				
			|||
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> | 
				
			|||
        <encoder><pattern>${pattern}</pattern></encoder> | 
				
			|||
        <filter class="ch.qos.logback.classic.filter.LevelFilter"> | 
				
			|||
            <level>INFO</level> | 
				
			|||
            <onMatch>ACCEPT</onMatch> | 
				
			|||
            <onMismatch>DENY</onMismatch> | 
				
			|||
        </filter> | 
				
			|||
    </appender> | 
				
			|||
 | 
				
			|||
	<!-- 在磁盘文件中输出日志(error) --> | 
				
			|||
    <appender name="FILE_ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender"> | 
				
			|||
    	<encoder><pattern>${pattern}</pattern></encoder> | 
				
			|||
        <file>${homedir}/logs/log-error.log</file> | 
				
			|||
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> | 
				
			|||
            <fileNamePattern>${homedir}/logs/log-error.%d.log</fileNamePattern> | 
				
			|||
            <maxHistory>30</maxHistory> | 
				
			|||
        </rollingPolicy> | 
				
			|||
        <filter class="ch.qos.logback.classic.filter.LevelFilter"> | 
				
			|||
            <level>ERROR</level> | 
				
			|||
            <onMatch>ACCEPT</onMatch> | 
				
			|||
            <onMismatch>DENY</onMismatch> | 
				
			|||
        </filter> | 
				
			|||
    </appender> | 
				
			|||
    <!-- 在磁盘文件中输出日志(warning) --> | 
				
			|||
    <appender name="FILE_WARN" class="ch.qos.logback.core.rolling.RollingFileAppender"> | 
				
			|||
        <encoder><pattern>${pattern}</pattern></encoder> | 
				
			|||
        <file>${homedir}/logs/log-warn.log</file> | 
				
			|||
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> | 
				
			|||
            <fileNamePattern>${homedir}/logs/log-warn.%d.log</fileNamePattern> | 
				
			|||
            <maxHistory>30</maxHistory> | 
				
			|||
        </rollingPolicy> | 
				
			|||
        <filter class="ch.qos.logback.classic.filter.LevelFilter"> | 
				
			|||
            <level>WARN</level> | 
				
			|||
            <onMatch>ACCEPT</onMatch> | 
				
			|||
            <onMismatch>DENY</onMismatch> | 
				
			|||
        </filter> | 
				
			|||
    </appender> | 
				
			|||
    <!-- 在磁盘文件中输出日志(info) --> | 
				
			|||
    <appender name="FILE_INFO" class="ch.qos.logback.core.rolling.RollingFileAppender"> | 
				
			|||
        <encoder><pattern>${pattern}</pattern></encoder> | 
				
			|||
        <file>${homedir}/logs/log-info.log</file> | 
				
			|||
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> | 
				
			|||
            <fileNamePattern>${homedir}/logs/log-info.%d.log</fileNamePattern> | 
				
			|||
            <maxHistory>30</maxHistory> | 
				
			|||
        </rollingPolicy> | 
				
			|||
        <filter class="ch.qos.logback.classic.filter.LevelFilter"> | 
				
			|||
            <level>INFO</level> | 
				
			|||
            <onMatch>ACCEPT</onMatch> | 
				
			|||
            <onMismatch>DENY</onMismatch> | 
				
			|||
        </filter> | 
				
			|||
    </appender> | 
				
			|||
    <!-- 在磁盘文件中输出日志(debug) --> | 
				
			|||
    <appender name="FILE_DEBUG" class="ch.qos.logback.core.rolling.RollingFileAppender"> | 
				
			|||
        <encoder><pattern>${pattern}</pattern></encoder> | 
				
			|||
        <file>${homedir}/logs/log-debug.log</file> | 
				
			|||
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> | 
				
			|||
            <fileNamePattern>${homedir}/logs/log-debug.%d.log</fileNamePattern> | 
				
			|||
            <maxHistory>30</maxHistory> | 
				
			|||
        </rollingPolicy> | 
				
			|||
        <filter class="ch.qos.logback.classic.filter.LevelFilter"> | 
				
			|||
            <level>DEBUG</level> | 
				
			|||
            <onMatch>ACCEPT</onMatch> | 
				
			|||
            <onMismatch>DENY</onMismatch> | 
				
			|||
        </filter> | 
				
			|||
    </appender> | 
				
			|||
    <!-- 在磁盘文件中输出日志(trace) --> | 
				
			|||
    <appender name="FILE_TRACE" class="ch.qos.logback.core.rolling.RollingFileAppender"> | 
				
			|||
        <encoder><pattern>${pattern}</pattern></encoder> | 
				
			|||
        <file>${homedir}/logs/log-trace.log</file> | 
				
			|||
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> | 
				
			|||
            <fileNamePattern>${homedir}/logs/log-trace.%d.log</fileNamePattern> | 
				
			|||
            <maxHistory>30</maxHistory> | 
				
			|||
        </rollingPolicy> | 
				
			|||
        <filter class="ch.qos.logback.classic.filter.LevelFilter"> | 
				
			|||
            <level>TRACE</level> | 
				
			|||
            <onMatch>ACCEPT</onMatch> | 
				
			|||
            <onMismatch>DENY</onMismatch> | 
				
			|||
        </filter> | 
				
			|||
    </appender> | 
				
			|||
     | 
				
			|||
    <root level="trace"> | 
				
			|||
        <appender-ref ref="STDOUT" /> | 
				
			|||
        <appender-ref ref="FILE_ERROR" /> | 
				
			|||
        <appender-ref ref="FILE_WARN" /> | 
				
			|||
        <appender-ref ref="FILE_INFO" /> | 
				
			|||
        <appender-ref ref="FILE_DEBUG" /> | 
				
			|||
        <appender-ref ref="FILE_TRACE" /> | 
				
			|||
    </root> | 
				
			|||
     | 
				
			|||
     | 
				
			|||
    <!-- 可对不同的日志写入不同的文件示例 --> | 
				
			|||
    <!--  | 
				
			|||
    <appender name="RULE_ENGINE_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> | 
				
			|||
    	<encoder><pattern>${pattern}</pattern></encoder> | 
				
			|||
        <file>${homedir}/logs/rule-engine.log</file> | 
				
			|||
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> | 
				
			|||
            <fileNamePattern>${homedir}/logs/rule-engine.%d.log</fileNamePattern> | 
				
			|||
            <maxHistory>30</maxHistory> | 
				
			|||
        </rollingPolicy> | 
				
			|||
    </appender> | 
				
			|||
     | 
				
			|||
    <logger name="org.wsp.engine.rule.core.code" level="debug" additivity="false"> | 
				
			|||
        <appender-ref ref="STDOUT" /> | 
				
			|||
        <appender-ref ref="FILE" /> | 
				
			|||
        <appender-ref ref="RULE_ENGINE_FILE" /> | 
				
			|||
    </logger> | 
				
			|||
    --> | 
				
			|||
</configuration> | 
				
			|||
| 
		 Before Width: | Height: | Size: 105 KiB After Width: | Height: | Size: 699 KiB  | 
@ -0,0 +1,26 @@ | 
				
			|||
<template> | 
				
			|||
  <div class="row q-px-md q-py-md"> | 
				
			|||
    {{ $t('menu.developer.plugin.initializer') }} | 
				
			|||
  </div> | 
				
			|||
  <q-table :rows="rows" :columns="columns" row-key="id" :pagination="{ rowsPerPage: 1000 }" /> | 
				
			|||
</template> | 
				
			|||
<script setup lang="ts"> | 
				
			|||
import { ref } from 'vue'; | 
				
			|||
import { useI18n } from 'vue-i18n'; | 
				
			|||
import { Environment, axios } from 'platform-core'; | 
				
			|||
 | 
				
			|||
const { t } = useI18n(); | 
				
			|||
 | 
				
			|||
const columns = [ | 
				
			|||
  { width: '20%', field: 'order', label: t('order'), align: 'right' }, | 
				
			|||
  { width: '40%', field: 'name', label: t('name'), format: (value) => t(value), align: 'left' }, | 
				
			|||
  { width: '40%', field: 'description', label: t('description'), format: (value) => t(value), align: 'left' }, | 
				
			|||
  { width: '40%', field: 'id', label: t('className'), align: 'left' }, | 
				
			|||
]; | 
				
			|||
 | 
				
			|||
const rows = ref([]); | 
				
			|||
 | 
				
			|||
axios.get(Environment.apiContextPath('/api/developer/plugins/initializer')).then((response) => { | 
				
			|||
  rows.value = response.data; | 
				
			|||
}); | 
				
			|||
</script> | 
				
			|||
@ -0,0 +1,31 @@ | 
				
			|||
package io.sc.platform.developer.plugins.controller; | 
				
			|||
 | 
				
			|||
import io.sc.platform.core.annotation.IgnoreResponseBodyAdvice; | 
				
			|||
import io.sc.platform.core.initializer.ApplicationInitializer; | 
				
			|||
import io.sc.platform.core.util.Sorter; | 
				
			|||
import io.sc.platform.developer.plugins.wrapper.InitializerWrapper; | 
				
			|||
import org.springframework.stereotype.Controller; | 
				
			|||
import org.springframework.web.bind.annotation.GetMapping; | 
				
			|||
import org.springframework.web.bind.annotation.RequestMapping; | 
				
			|||
import org.springframework.web.bind.annotation.ResponseBody; | 
				
			|||
 | 
				
			|||
import java.util.ArrayList; | 
				
			|||
import java.util.List; | 
				
			|||
import java.util.ServiceLoader; | 
				
			|||
 | 
				
			|||
@Controller | 
				
			|||
@RequestMapping("/api/developer/plugins/initializer") | 
				
			|||
public class InitializerWebController { | 
				
			|||
 | 
				
			|||
    @GetMapping("") | 
				
			|||
    @ResponseBody | 
				
			|||
    public List<InitializerWrapper> initializer(){ | 
				
			|||
        List<ApplicationInitializer> initializers =new ArrayList<>(); | 
				
			|||
        ServiceLoader<ApplicationInitializer> loader = ServiceLoader.load(ApplicationInitializer.class,Thread.currentThread().getContextClassLoader()); | 
				
			|||
        loader.iterator().forEachRemaining(item -> { | 
				
			|||
            initializers.add(item); | 
				
			|||
        }); | 
				
			|||
        Sorter.sort(initializers); | 
				
			|||
        return InitializerWrapper.from(initializers); | 
				
			|||
    } | 
				
			|||
} | 
				
			|||
@ -0,0 +1,67 @@ | 
				
			|||
package io.sc.platform.developer.plugins.wrapper; | 
				
			|||
 | 
				
			|||
import io.sc.platform.core.initializer.ApplicationInitializer; | 
				
			|||
 | 
				
			|||
import java.util.ArrayList; | 
				
			|||
import java.util.Collections; | 
				
			|||
import java.util.List; | 
				
			|||
 | 
				
			|||
public class InitializerWrapper { | 
				
			|||
    private String id; | 
				
			|||
    private String name; | 
				
			|||
    private String description; | 
				
			|||
    private int order; | 
				
			|||
 | 
				
			|||
    public static List<InitializerWrapper> from(List<ApplicationInitializer> initializers){ | 
				
			|||
        if(initializers==null || initializers.isEmpty()){ | 
				
			|||
            return Collections.emptyList(); | 
				
			|||
        } | 
				
			|||
        List<InitializerWrapper> wrappers =new ArrayList<>(); | 
				
			|||
        for(ApplicationInitializer initializer : initializers){ | 
				
			|||
            wrappers.add(from(initializer)); | 
				
			|||
        } | 
				
			|||
        return wrappers; | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    public static InitializerWrapper from(ApplicationInitializer initializer){ | 
				
			|||
        InitializerWrapper wrapper =new InitializerWrapper(); | 
				
			|||
        wrapper.setId(initializer.getId()); | 
				
			|||
        wrapper.setName(initializer.getName()); | 
				
			|||
        wrapper.setDescription(initializer.getDescription()); | 
				
			|||
        wrapper.setOrder(initializer.getOrder()); | 
				
			|||
        return wrapper; | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
 | 
				
			|||
    public String getId() { | 
				
			|||
        return id; | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    public void setId(String id) { | 
				
			|||
        this.id = id; | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    public String getName() { | 
				
			|||
        return name; | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    public void setName(String name) { | 
				
			|||
        this.name = name; | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    public String getDescription() { | 
				
			|||
        return description; | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    public void setDescription(String description) { | 
				
			|||
        this.description = description; | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    public int getOrder() { | 
				
			|||
        return order; | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    public void setOrder(int order) { | 
				
			|||
        this.order = order; | 
				
			|||
    } | 
				
			|||
} | 
				
			|||
@ -0,0 +1,5 @@ | 
				
			|||
{ | 
				
			|||
    "includes":[ | 
				
			|||
        "io.sc.platform.developer.plugins.controller" | 
				
			|||
    ] | 
				
			|||
} | 
				
			|||
@ -0,0 +1,98 @@ | 
				
			|||
package io.sc.platform.flowable.api; | 
				
			|||
 | 
				
			|||
import io.sc.platform.orm.api.vo.CorporationAuditorVo; | 
				
			|||
 | 
				
			|||
import java.util.Date; | 
				
			|||
 | 
				
			|||
public class AgentVo extends CorporationAuditorVo { | 
				
			|||
    private String id; | 
				
			|||
    private String loginName; | 
				
			|||
    private String userName; | 
				
			|||
    private String agentLoginName; | 
				
			|||
    private String agentUserName; | 
				
			|||
    private Date startDate; | 
				
			|||
    private Date endDate; | 
				
			|||
    private String reasons; | 
				
			|||
    private Boolean effective; | 
				
			|||
    private String comments; | 
				
			|||
 | 
				
			|||
    public String getId() { | 
				
			|||
        return id; | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    public void setId(String id) { | 
				
			|||
        this.id = id; | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    public String getLoginName() { | 
				
			|||
        return loginName; | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    public void setLoginName(String loginName) { | 
				
			|||
        this.loginName = loginName; | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    public String getUserName() { | 
				
			|||
        return userName; | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    public void setUserName(String userName) { | 
				
			|||
        this.userName = userName; | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    public String getAgentLoginName() { | 
				
			|||
        return agentLoginName; | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    public void setAgentLoginName(String agentLoginName) { | 
				
			|||
        this.agentLoginName = agentLoginName; | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    public String getAgentUserName() { | 
				
			|||
        return agentUserName; | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    public void setAgentUserName(String agentUserName) { | 
				
			|||
        this.agentUserName = agentUserName; | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    public Date getStartDate() { | 
				
			|||
        return startDate; | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    public void setStartDate(Date startDate) { | 
				
			|||
        this.startDate = startDate; | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    public Date getEndDate() { | 
				
			|||
        return endDate; | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    public void setEndDate(Date endDate) { | 
				
			|||
        this.endDate = endDate; | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    public String getReasons() { | 
				
			|||
        return reasons; | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    public void setReasons(String reasons) { | 
				
			|||
        this.reasons = reasons; | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    public Boolean getEffective() { | 
				
			|||
        return effective; | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    public void setEffective(Boolean effective) { | 
				
			|||
        this.effective = effective; | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    public String getComments() { | 
				
			|||
        return comments; | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    public void setComments(String comments) { | 
				
			|||
        this.comments = comments; | 
				
			|||
    } | 
				
			|||
} | 
				
			|||
@ -0,0 +1,97 @@ | 
				
			|||
package io.sc.platform.flowable.api; | 
				
			|||
 | 
				
			|||
import io.sc.platform.flowable.enums.ProcessStatus; | 
				
			|||
import io.sc.platform.orm.api.vo.CorporationAuditorVo; | 
				
			|||
 | 
				
			|||
public class ProcessVo extends CorporationAuditorVo { | 
				
			|||
    private String id; | 
				
			|||
    private String category; | 
				
			|||
    private String key; | 
				
			|||
    private String name; | 
				
			|||
    private String description; | 
				
			|||
    private String deployedId; | 
				
			|||
    private Integer version; | 
				
			|||
    private String xml; | 
				
			|||
    private ProcessStatus status; | 
				
			|||
    private Boolean canClaimTask; | 
				
			|||
 | 
				
			|||
    public String getId() { | 
				
			|||
        return id; | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    public void setId(String id) { | 
				
			|||
        this.id = id; | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    public String getCategory() { | 
				
			|||
        return category; | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    public void setCategory(String category) { | 
				
			|||
        this.category = category; | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    public String getKey() { | 
				
			|||
        return key; | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    public void setKey(String key) { | 
				
			|||
        this.key = key; | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    public String getName() { | 
				
			|||
        return name; | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    public void setName(String name) { | 
				
			|||
        this.name = name; | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    public String getDescription() { | 
				
			|||
        return description; | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    public void setDescription(String description) { | 
				
			|||
        this.description = description; | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    public String getDeployedId() { | 
				
			|||
        return deployedId; | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    public void setDeployedId(String deployedId) { | 
				
			|||
        this.deployedId = deployedId; | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    public Integer getVersion() { | 
				
			|||
        return version; | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    public void setVersion(Integer version) { | 
				
			|||
        this.version = version; | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    public String getXml() { | 
				
			|||
        return xml; | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    public void setXml(String xml) { | 
				
			|||
        this.xml = xml; | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    public ProcessStatus getStatus() { | 
				
			|||
        return status; | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    public void setStatus(ProcessStatus status) { | 
				
			|||
        this.status = status; | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    public Boolean getCanClaimTask() { | 
				
			|||
        return canClaimTask; | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    public void setCanClaimTask(Boolean canClaimTask) { | 
				
			|||
        this.canClaimTask = canClaimTask; | 
				
			|||
    } | 
				
			|||
} | 
				
			|||
@ -1,11 +1,11 @@ | 
				
			|||
package io.sc.platform.flowable.jpa.repository; | 
				
			|||
 | 
				
			|||
import io.sc.platform.flowable.jpa.entity.Agent; | 
				
			|||
import io.sc.platform.flowable.jpa.entity.AgentEntity; | 
				
			|||
import io.sc.platform.orm.repository.DaoRepository; | 
				
			|||
 | 
				
			|||
import java.util.List; | 
				
			|||
 | 
				
			|||
 | 
				
			|||
public interface AgentRepository extends DaoRepository<Agent,String> { | 
				
			|||
	public List<Agent> findByLoginNameAndEffective(String loginName,Boolean effective); | 
				
			|||
public interface AgentRepository extends DaoRepository<AgentEntity,String> { | 
				
			|||
	public List<AgentEntity> findByLoginNameAndEffective(String loginName, Boolean effective); | 
				
			|||
} | 
				
			|||
 | 
				
			|||
@ -1,5 +1,6 @@ | 
				
			|||
{ | 
				
			|||
    "includes":[ | 
				
			|||
        "io/sc/platform/flowable/i18n/initializer", | 
				
			|||
        "io/sc/platform/flowable/i18n/enums" | 
				
			|||
    ] | 
				
			|||
} | 
				
			|||
@ -0,0 +1,2 @@ | 
				
			|||
io.sc.platform.flowable.initializer.SampleWorkFlowSystemDictionaryInitializer.name=Sample Process Dictionary Initializer | 
				
			|||
io.sc.platform.flowable.initializer.SampleWorkFlowSystemDictionaryInitializer.description=initialize sample process dictionary if not exists | 
				
			|||
@ -0,0 +1,2 @@ | 
				
			|||
io.sc.platform.flowable.initializer.SampleWorkFlowSystemDictionaryInitializer.name=\u793A\u4F8B\u6D41\u7A0B\u6578\u64DA\u5B57\u5178\u59CB\u5316\u5668 | 
				
			|||
io.sc.platform.flowable.initializer.SampleWorkFlowSystemDictionaryInitializer.description=\u7576\u7CFB\u7D71\u7F3A\u5931\u793A\u4F8B\u6D41\u7A0B\u6578\u64DA\u5B57\u5178\u6642, \u81EA\u52D5\u5275\u5EFA\u9ED8\u8A8D\u793A\u4F8B\u6D41\u7A0B\u6578\u64DA\u5B57\u5178 | 
				
			|||
@ -0,0 +1,2 @@ | 
				
			|||
io.sc.platform.flowable.initializer.SampleWorkFlowSystemDictionaryInitializer.name=\u793A\u4F8B\u6D41\u7A0B\u6570\u636E\u5B57\u5178\u521D\u59CB\u5316\u5668 | 
				
			|||
io.sc.platform.flowable.initializer.SampleWorkFlowSystemDictionaryInitializer.description=\u5F53\u7CFB\u7EDF\u7F3A\u5931\u793A\u4F8B\u6D41\u7A0B\u6570\u636E\u5B57\u5178\u65F6, \u81EA\u52A8\u521B\u5EFA\u9ED8\u8BA4\u793A\u4F8B\u6D41\u7A0B\u6570\u636E\u5B57\u5178 | 
				
			|||
@ -1,7 +1,11 @@ | 
				
			|||
window.APP = {};                                    // 在浏览器 window 对象中新建名为 APP 的变量, 用于存放应用对象的容器
 | 
				
			|||
window.APP.configure ={                             // 全局配置存储容器
 | 
				
			|||
    webContextPath: '[(@{/})]'.startsWith('[')? '/' : '[(@{/})]', // 应用上下文路径
 | 
				
			|||
// 在浏览器 window 对象中新建名为 APP 的容器变量, 用于存放平台的全局变量
 | 
				
			|||
window.APP = {}; | 
				
			|||
// 全局配置
 | 
				
			|||
window.APP.configure ={ | 
				
			|||
    // 应用上下文路径
 | 
				
			|||
    webContextPath: '[(@{/})]'.startsWith('[')? '/' : '[(@{/})]', | 
				
			|||
    // 默认后端 API 请求的服务地址前缀
 | 
				
			|||
    apiContextPaths: { | 
				
			|||
      DEFAULT: '[(@{/})]'.startsWith('[')     ? 'http://localhost:8080/' : '[(@{/})]', // 后端 API 请求的服务地址前缀
 | 
				
			|||
    } | 
				
			|||
      DEFAULT: '[(@{/})]'.startsWith('[')     ? 'http://localhost:8080/' : '[(@{/})]' | 
				
			|||
    } | 
				
			|||
}; | 
				
			|||
@ -0,0 +1,6 @@ | 
				
			|||
package io.sc.platform.job.core.enums; | 
				
			|||
 | 
				
			|||
public enum ExecutorAddressType { | 
				
			|||
    AUTO,       // 自动注册
 | 
				
			|||
    MANUAL;     // 手工录入
 | 
				
			|||
} | 
				
			|||
@ -0,0 +1,6 @@ | 
				
			|||
dependencies { | 
				
			|||
    api( | 
				
			|||
        project(":io.sc.platform.job.core"), | 
				
			|||
        project(":io.sc.platform.mvc"), | 
				
			|||
    ) | 
				
			|||
} | 
				
			|||
@ -0,0 +1,88 @@ | 
				
			|||
package io.sc.platform.job.manager.jpa.entity; | 
				
			|||
 | 
				
			|||
import io.sc.platform.job.core.enums.ExecutorAddressType; | 
				
			|||
import io.sc.platform.orm.converter.SetStringConverter; | 
				
			|||
import org.hibernate.annotations.GenericGenerator; | 
				
			|||
 | 
				
			|||
import javax.persistence.*; | 
				
			|||
import javax.validation.constraints.Size; | 
				
			|||
import java.util.Date; | 
				
			|||
import java.util.Set; | 
				
			|||
 | 
				
			|||
public class JobGroupEntity { | 
				
			|||
    //主键
 | 
				
			|||
    @Id | 
				
			|||
    @GeneratedValue(generator = "system-uuid") | 
				
			|||
    @GenericGenerator(name = "system-uuid", strategy = "uuid2") | 
				
			|||
    @Column(name="ID_", length=36) | 
				
			|||
    @Size(max=36) | 
				
			|||
    private String id; | 
				
			|||
 | 
				
			|||
    @Column(name="APP_NAME", length=255) | 
				
			|||
    @Size(min=1,max=255) | 
				
			|||
    private String appName; | 
				
			|||
 | 
				
			|||
    @Column(name="TITLE", length=255) | 
				
			|||
    @Size(min=1,max=255) | 
				
			|||
    private String title; | 
				
			|||
 | 
				
			|||
    @Column(name="ADDRESS_TYPE") | 
				
			|||
    @Enumerated(EnumType.STRING) | 
				
			|||
    private ExecutorAddressType addressType; | 
				
			|||
 | 
				
			|||
    @Column(name="ADDRESS_LIST") | 
				
			|||
    @Convert(converter = SetStringConverter.class) | 
				
			|||
    private Set<String> addresses; | 
				
			|||
 | 
				
			|||
    @Column(name="UPDATE_TIME") | 
				
			|||
    @Temporal(TemporalType.TIMESTAMP) | 
				
			|||
    private Date updateTime; | 
				
			|||
 | 
				
			|||
    public String getId() { | 
				
			|||
        return id; | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    public void setId(String id) { | 
				
			|||
        this.id = id; | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    public String getAppName() { | 
				
			|||
        return appName; | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    public void setAppName(String appName) { | 
				
			|||
        this.appName = appName; | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    public String getTitle() { | 
				
			|||
        return title; | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    public void setTitle(String title) { | 
				
			|||
        this.title = title; | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    public ExecutorAddressType getAddressType() { | 
				
			|||
        return addressType; | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    public void setAddressType(ExecutorAddressType addressType) { | 
				
			|||
        this.addressType = addressType; | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    public Set<String> getAddresses() { | 
				
			|||
        return addresses; | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    public void setAddresses(Set<String> addresses) { | 
				
			|||
        this.addresses = addresses; | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    public Date getUpdateTime() { | 
				
			|||
        return updateTime; | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    public void setUpdateTime(Date updateTime) { | 
				
			|||
        this.updateTime = updateTime; | 
				
			|||
    } | 
				
			|||
} | 
				
			|||
@ -0,0 +1,12 @@ | 
				
			|||
package io.sc.platform.job.manager.jpa.repository; | 
				
			|||
 | 
				
			|||
import io.sc.platform.job.core.enums.ExecutorAddressType; | 
				
			|||
import io.sc.platform.job.manager.jpa.entity.JobGroupEntity; | 
				
			|||
import io.sc.platform.orm.repository.DaoRepository; | 
				
			|||
import org.springframework.data.repository.query.Param; | 
				
			|||
 | 
				
			|||
import java.util.List; | 
				
			|||
 | 
				
			|||
public interface JobGroupRepository extends DaoRepository<JobGroupEntity,String> { | 
				
			|||
    public List<JobGroupEntity> findByAddressType(@Param("addressType") ExecutorAddressType addressType); | 
				
			|||
} | 
				
			|||
@ -0,0 +1,10 @@ | 
				
			|||
[ | 
				
			|||
    { | 
				
			|||
        "category" : "install", | 
				
			|||
        "order"    : 1000, | 
				
			|||
        "description":"XXL JOB 相关表", | 
				
			|||
        "locations":[ | 
				
			|||
            "liquibase/PF_8.0.0_20220606__Job_DDL.xml" | 
				
			|||
        ] | 
				
			|||
    } | 
				
			|||
] | 
				
			|||
@ -0,0 +1,233 @@ | 
				
			|||
<?xml version="1.0" encoding="UTF-8"?> | 
				
			|||
<databaseChangeLog | 
				
			|||
    xmlns="http://www.liquibase.org/xml/ns/dbchangelog" | 
				
			|||
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | 
				
			|||
    xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext" | 
				
			|||
    xsi:schemaLocation=" | 
				
			|||
        http://www.liquibase.org/xml/ns/dbchangelog | 
				
			|||
        http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.1.xsd | 
				
			|||
        http://www.liquibase.org/xml/ns/dbchangelog-ext | 
				
			|||
        http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd | 
				
			|||
    " | 
				
			|||
> | 
				
			|||
    <property name="now" value="CURRENT TIMESTAMP"      dbms="db2"/> | 
				
			|||
    <property name="now" value="CURRENT_TIMESTAMP"      dbms="h2"/> | 
				
			|||
    <property name="now" value="sysdate"                dbms="oracle"/> | 
				
			|||
    <property name="now" value="now()"                  dbms="mysql"/> | 
				
			|||
    <property name="now" value="now()"                  dbms="postgresql"/> | 
				
			|||
    <property name="now" value="GETDATE()"              dbms="mssql"/> | 
				
			|||
 | 
				
			|||
    <changeSet id="PF_8.0.0_20220606__Job_DDL" author="platform"> | 
				
			|||
        <!-- JOB信息表 --> | 
				
			|||
        <createTable tableName="XXL_JOB_INFO" remarks="JOB信息表"> | 
				
			|||
            <column name="ID"                           type="INTEGER"               remarks="主键ID"/> | 
				
			|||
            <column name="JOB_GROUP"                    type="INTEGER"               remarks="执行器主键ID" /> | 
				
			|||
            <column name="JOB_DESC"                     type="NVARCHAR(255)"         remarks="描述"/> | 
				
			|||
            <column name="ADD_TIME"                     type="DATETIME"              remarks="创建日期"/> | 
				
			|||
            <column name="UPDATE_TIME"                  type="DATETIME"              remarks="更新日期"/> | 
				
			|||
            <column name="AUTHOR"                       type="NVARCHAR(255)"         remarks="作者"/> | 
				
			|||
            <column name="ALARM_EMAIL"                  type="NVARCHAR(255)"         remarks="报警邮件"/> | 
				
			|||
            <column name="SCHEDULE_TYPE"                type="NVARCHAR(50)"          remarks="调度类型"/> | 
				
			|||
            <column name="SCHEDULE_CONF"                type="NVARCHAR(128)"         remarks="调度配置,值含义取决于调度类型"/> | 
				
			|||
            <column name="MISFIRE_STRATEGY"             type="NVARCHAR(50)"          remarks="调度过期策略"/> | 
				
			|||
            <column name="EXECUTOR_ROUTE_STRATEGY"      type="NVARCHAR(50)"          remarks="执行器路由策略"/> | 
				
			|||
            <column name="EXECUTOR_HANDLER"             type="NVARCHAR(255)"         remarks="执行器任务handler"/> | 
				
			|||
            <column name="EXECUTOR_PARAM"               type="NVARCHAR(512)"         remarks="执行器任务参数"/> | 
				
			|||
            <column name="EXECUTOR_BLOCK_STRATEGY"      type="NVARCHAR(50)"          remarks="阻塞处理策略"/> | 
				
			|||
            <column name="EXECUTOR_TIMEOUT"             type="INTEGER"               remarks="任务执行超时时间,单位秒"/> | 
				
			|||
            <column name="EXECUTOR_FAIL_RETRY_COUNT"    type="INTEGER"               remarks="失败重试次数"/> | 
				
			|||
            <column name="GLUE_TYPE"                    type="NVARCHAR(50)"          remarks="GLUE类型"/> | 
				
			|||
            <column name="GLUE_SOURCE"                  type="CLOB"                  remarks="GLUE源代码"/> | 
				
			|||
            <column name="GLUE_REMARK"                  type="NVARCHAR(128)"         remarks="GLUE备注"/> | 
				
			|||
            <column name="GLUE_UPDATETIME"              type="DATETIME"              remarks="GLUE更新时间"/> | 
				
			|||
            <column name="CHILD_JOBID"                  type="NVARCHAR(255)"         remarks="子任务ID,多个逗号分隔"/> | 
				
			|||
            <column name="TRIGGER_STATUS"               type="TINYINT"               remarks="调度状态:0-停止,1-运行"/> | 
				
			|||
            <column name="TRIGGER_LAST_TIME"            type="BIGINT"                remarks="上次调度时间"/> | 
				
			|||
            <column name="TRIGGER_NEXT_TIME"            type="BIGINT"                remarks="下次调度时间"/> | 
				
			|||
        </createTable> | 
				
			|||
        <addPrimaryKey tableName="XXL_JOB_INFO" columnNames="ID"/> | 
				
			|||
        <addAutoIncrement       columnName="ID"                         columnDataType="INTEGER"         tableName="XXL_JOB_INFO"     startWith="1"   incrementBy="1"/> | 
				
			|||
        <addNotNullConstraint   columnName="JOB_GROUP"                  columnDataType="INTEGER"         tableName="XXL_JOB_INFO"    constraintName="CONST_XXL_JOB_INFO_JOB_GROUP"/> | 
				
			|||
        <addNotNullConstraint   columnName="JOB_DESC"                   columnDataType="NVARCHAR(255)"   tableName="XXL_JOB_INFO"    constraintName="CONST_XXL_JOB_INFO_JOB_DESC"/> | 
				
			|||
        <addNotNullConstraint   columnName="SCHEDULE_TYPE"              columnDataType="NVARCHAR(50)"    tableName="XXL_JOB_INFO"    constraintName="CONST_XXL_JOB_INFO_SCHEDULE_TYPE"/> | 
				
			|||
        <addDefaultValue        columnName="SCHEDULE_TYPE"              columnDataType="NVARCHAR(50)"    tableName="XXL_JOB_INFO"    defaultValue="NONE"/> | 
				
			|||
        <addNotNullConstraint   columnName="MISFIRE_STRATEGY"           columnDataType="NVARCHAR(50)"    tableName="XXL_JOB_INFO"    constraintName="CONST_XXL_JOB_INFO_MISFIRE_STRATEGY"/> | 
				
			|||
        <addDefaultValue        columnName="MISFIRE_STRATEGY"           columnDataType="NVARCHAR(50)"    tableName="XXL_JOB_INFO"    defaultValue="DO_NOTHING"/> | 
				
			|||
        <addNotNullConstraint   columnName="EXECUTOR_TIMEOUT"           columnDataType="INTEGER"         tableName="XXL_JOB_INFO"    constraintName="CONST_XXL_JOB_INFO_EXECUTOR_TIMEOUT"/> | 
				
			|||
        <addDefaultValue        columnName="EXECUTOR_TIMEOUT"           columnDataType="INTEGER"         tableName="XXL_JOB_INFO"    defaultValueNumeric="0"/> | 
				
			|||
        <addNotNullConstraint   columnName="EXECUTOR_FAIL_RETRY_COUNT"  columnDataType="INTEGER"         tableName="XXL_JOB_INFO"    constraintName="CONST_XXL_JOB_INFO_EXECUTOR_FRC"/> | 
				
			|||
        <addDefaultValue        columnName="EXECUTOR_FAIL_RETRY_COUNT"  columnDataType="INTEGER"         tableName="XXL_JOB_INFO"    defaultValueNumeric="0"/> | 
				
			|||
        <addNotNullConstraint   columnName="TRIGGER_STATUS"             columnDataType="TINYINT"         tableName="XXL_JOB_INFO"    constraintName="CONST_XXL_JOB_INFO_TRIGGER_STATUS"/> | 
				
			|||
        <addDefaultValue        columnName="TRIGGER_STATUS"             columnDataType="TINYINT"         tableName="XXL_JOB_INFO"    defaultValueNumeric="0"/> | 
				
			|||
        <addNotNullConstraint   columnName="TRIGGER_LAST_TIME"          columnDataType="BIGINT"          tableName="XXL_JOB_INFO"    constraintName="CONST_XXL_JOB_INFO_TRIGGER_LAST_TIME"/> | 
				
			|||
        <addDefaultValue        columnName="TRIGGER_LAST_TIME"          columnDataType="BIGINT"          tableName="XXL_JOB_INFO"    defaultValueNumeric="0"/> | 
				
			|||
        <addNotNullConstraint   columnName="TRIGGER_NEXT_TIME"          columnDataType="BIGINT"          tableName="XXL_JOB_INFO"    constraintName="CONST_XXL_JOB_INFO_TRIGGER_NEXT_TIME"/> | 
				
			|||
        <addDefaultValue        columnName="TRIGGER_NEXT_TIME"          columnDataType="BIGINT"          tableName="XXL_JOB_INFO"    defaultValueNumeric="0"/> | 
				
			|||
 | 
				
			|||
        <!-- JOB日志表 --> | 
				
			|||
        <createTable tableName="XXL_JOB_LOG" remarks="JOB日志表"> | 
				
			|||
            <column name="ID"                           type="BIGINT"               remarks="主键ID"/> | 
				
			|||
            <column name="JOB_GROUP"                    type="INTEGER"              remarks="执行器主键ID" /> | 
				
			|||
            <column name="JOB_ID"                       type="INTEGER"              remarks="任务主键ID"/> | 
				
			|||
            <column name="EXECUTOR_ADDRESS"             type="NVARCHAR(255)"        remarks="执行器地址,本次执行的地址"/> | 
				
			|||
            <column name="EXECUTOR_HANDLER"             type="NVARCHAR(255)"        remarks="执行器任务handler"/> | 
				
			|||
            <column name="EXECUTOR_PARAM"               type="NVARCHAR(512)"        remarks="执行器任务参数"/> | 
				
			|||
            <column name="EXECUTOR_SHARDING_PARAM"      type="NVARCHAR(20)"         remarks="执行器任务分片参数,格式如 1/2"/> | 
				
			|||
            <column name="EXECUTOR_FAIL_RETRY_COUNT"    type="INTEGER"              remarks="失败重试次数"/> | 
				
			|||
            <column name="TRIGGER_TIME"                 type="DATETIME"             remarks="调度-时间"/> | 
				
			|||
            <column name="TRIGGER_CODE"                 type="INTEGER"              remarks="调度-结果"/> | 
				
			|||
            <column name="TRIGGER_MSG"                  type="CLOB"                 remarks="调度-日志"/> | 
				
			|||
            <column name="HANDLE_TIME"                  type="DATETIME"             remarks="执行-时间"/> | 
				
			|||
            <column name="HANDLE_CODE"                  type="INTEGER"              remarks="执行-状态"/> | 
				
			|||
            <column name="HANDLE_MSG"                   type="CLOB"                 remarks="执行-日志"/> | 
				
			|||
            <column name="ALARM_STATUS"                 type="TINYINT"              remarks="告警状态:0-默认、1-无需告警、2-告警成功、3-告警失败" defaultValueNumeric="0"/> | 
				
			|||
        </createTable> | 
				
			|||
        <addPrimaryKey tableName="XXL_JOB_LOG" columnNames="ID"/> | 
				
			|||
        <addAutoIncrement       columnName="ID"                         columnDataType="BIGINT"         tableName="XXL_JOB_LOG"     startWith="1"   incrementBy="1"/> | 
				
			|||
        <addNotNullConstraint   columnName="JOB_GROUP"                  columnDataType="INTEGER"        tableName="XXL_JOB_LOG"     constraintName="CONST_XXL_JOB_LOG_JOB_GROUP"/> | 
				
			|||
        <addNotNullConstraint   columnName="JOB_ID"                     columnDataType="INTEGER"        tableName="XXL_JOB_LOG"     constraintName="CONST_XXL_JOB_LOG_JOB_ID"/> | 
				
			|||
        <addNotNullConstraint   columnName="EXECUTOR_FAIL_RETRY_COUNT"  columnDataType="BIGINT"         tableName="XXL_JOB_LOG"     constraintName="CONST_XXL_JOB_LOG_EXECUTOR_FRC"/> | 
				
			|||
        <addDefaultValue        columnName="EXECUTOR_FAIL_RETRY_COUNT"  columnDataType="BIGINT"         tableName="XXL_JOB_LOG"     defaultValueNumeric="0"/> | 
				
			|||
        <addNotNullConstraint   columnName="TRIGGER_CODE"               columnDataType="INTEGER"        tableName="XXL_JOB_LOG"     constraintName="CONST_XXL_JOB_LOG_TRIGGER_CODE"/> | 
				
			|||
        <addNotNullConstraint   columnName="HANDLE_CODE"                columnDataType="INTEGER"        tableName="XXL_JOB_LOG"     constraintName="CONST_XXL_JOB_LOG_HANDLE_CODE"/> | 
				
			|||
        <addNotNullConstraint   columnName="ALARM_STATUS"               columnDataType="TINYINT"        tableName="XXL_JOB_LOG"     constraintName="CONST_XXL_JOB_LOG_ALARM_STATUS"/> | 
				
			|||
        <addDefaultValue        columnName="ALARM_STATUS"               columnDataType="TINYINT"        tableName="XXL_JOB_LOG"     defaultValueNumeric="0"/> | 
				
			|||
        <createIndex tableName="XXL_JOB_LOG" indexName="IDX_XXL_JOB_LOG_TRIGGER_TIME"> | 
				
			|||
            <column name="TRIGGER_TIME"></column> | 
				
			|||
        </createIndex> | 
				
			|||
        <createIndex tableName="XXL_JOB_LOG" indexName="IDX_XXL_JOB_LOG_HANDLE_CODE"> | 
				
			|||
            <column name="HANDLE_CODE"></column> | 
				
			|||
        </createIndex> | 
				
			|||
 | 
				
			|||
        <!-- JOB日志报告表 --> | 
				
			|||
        <createTable tableName="XXL_JOB_LOG_REPORT" remarks="JOB日志报告表"> | 
				
			|||
            <column name="ID"                           type="INTEGER"              remarks="主键ID"/> | 
				
			|||
            <column name="TRIGGER_DAY"                  type="DATETIME"             remarks="调度-时间"/> | 
				
			|||
            <column name="RUNNING_COUNT"                type="INTEGER"              remarks="运行中-日志数量" defaultValueNumeric="0"/> | 
				
			|||
            <column name="SUC_COUNT"                    type="INTEGER"              remarks="执行成功-日志数量" defaultValueNumeric="0"/> | 
				
			|||
            <column name="FAIL_COUNT"                   type="INTEGER"              remarks="执行失败-日志数量" defaultValueNumeric="0"/> | 
				
			|||
            <column name="UPDATE_TIME"                  type="DATETIME"             remarks="更新日期"></column> | 
				
			|||
        </createTable> | 
				
			|||
        <addPrimaryKey tableName="XXL_JOB_LOG_REPORT" columnNames="ID"/> | 
				
			|||
        <addAutoIncrement       columnName="ID"                         columnDataType="INTEGER"        tableName="XXL_JOB_LOG_REPORT"     startWith="1"   incrementBy="1"/> | 
				
			|||
        <addNotNullConstraint   columnName="RUNNING_COUNT"              columnDataType="INTEGER"        tableName="XXL_JOB_LOG_REPORT"     constraintName="CONST_XXL_JOB_LOG_REPORT_RUNNING_COUNT"/> | 
				
			|||
        <addDefaultValue        columnName="RUNNING_COUNT"              columnDataType="INTEGER"        tableName="XXL_JOB_LOG_REPORT"     defaultValueNumeric="0"/> | 
				
			|||
        <addNotNullConstraint   columnName="SUC_COUNT"                  columnDataType="INTEGER"        tableName="XXL_JOB_LOG_REPORT"     constraintName="CONST_XXL_JOB_LOG_REPORT_SUC_COUNT"/> | 
				
			|||
        <addDefaultValue        columnName="SUC_COUNT"                  columnDataType="INTEGER"        tableName="XXL_JOB_LOG_REPORT"     defaultValueNumeric="0"/> | 
				
			|||
        <addNotNullConstraint   columnName="FAIL_COUNT"                 columnDataType="INTEGER"        tableName="XXL_JOB_LOG_REPORT"     constraintName="CONST_XXL_JOB_LOG_REPORT_FAIL_COUNT"/> | 
				
			|||
        <addDefaultValue        columnName="FAIL_COUNT"                 columnDataType="INTEGER"        tableName="XXL_JOB_LOG_REPORT"     defaultValueNumeric="0"/> | 
				
			|||
        <createIndex tableName="XXL_JOB_LOG_REPORT" indexName="IDX_XXL_JOB_LOG_REPORT_TRIGGER_DAY" unique="true"> | 
				
			|||
            <column name="TRIGGER_DAY"></column> | 
				
			|||
        </createIndex> | 
				
			|||
 | 
				
			|||
        <!-- JOB GLUE 表 --> | 
				
			|||
        <createTable tableName="XXL_JOB_LOGGLUE" remarks="JOB GLUE 表"> | 
				
			|||
            <column name="ID"                           type="INTEGER"              remarks="主键ID"/> | 
				
			|||
            <column name="JOB_ID"                       type="INTEGER"              remarks="任务主键ID"/> | 
				
			|||
            <column name="GLUE_TYPE"                    type="NVARCHAR(50)"         remarks="GLUE类型"/> | 
				
			|||
            <column name="GLUE_SOURCE"                  type="CLOB"                 remarks="GLUE源代码"/> | 
				
			|||
            <column name="GLUE_REMARK"                  type="NVARCHAR(128)"        remarks="GLUE备注"/> | 
				
			|||
            <column name="ADD_TIME"                     type="DATETIME"             remarks="创建日期"/> | 
				
			|||
            <column name="UPDATE_TIME"                  type="DATETIME"             remarks="更新日期"/> | 
				
			|||
        </createTable> | 
				
			|||
        <addPrimaryKey tableName="XXL_JOB_LOGGLUE" columnNames="ID"/> | 
				
			|||
        <addAutoIncrement       columnName="ID"                         columnDataType="INTEGER"        tableName="XXL_JOB_LOGGLUE"     startWith="1"   incrementBy="1"/> | 
				
			|||
        <addNotNullConstraint   columnName="JOB_ID"                     columnDataType="INTEGER"        tableName="XXL_JOB_LOGGLUE"     constraintName="CONST_XXL_JOB_LOGGLUE_JOB_ID"/> | 
				
			|||
 | 
				
			|||
        <!-- JOB 注册表 --> | 
				
			|||
        <createTable tableName="XXL_JOB_REGISTRY" remarks="JOB 注册表"> | 
				
			|||
            <column name="ID"                           type="INTEGER"              remarks="主键ID"/> | 
				
			|||
            <column name="REGISTRY_GROUP"               type="NVARCHAR(50)"         remarks=""/> | 
				
			|||
            <column name="REGISTRY_KEY"                 type="NVARCHAR(255)"        remarks=""/> | 
				
			|||
            <column name="REGISTRY_VALUE"               type="NVARCHAR(255)"        remarks=""/> | 
				
			|||
            <column name="UPDATE_TIME"                  type="DATETIME"             remarks="更新日期"/> | 
				
			|||
        </createTable> | 
				
			|||
        <addPrimaryKey          tableName="XXL_JOB_REGISTRY"                    columnNames="ID"/> | 
				
			|||
        <addAutoIncrement       columnName="ID"                                 columnDataType="INTEGER"             tableName="XXL_JOB_REGISTRY"    startWith="1"   incrementBy="1"/> | 
				
			|||
        <addUniqueConstraint    tableName="XXL_JOB_REGISTRY"                    columnNames="REGISTRY_GROUP,REGISTRY_KEY,REGISTRY_VALUE"></addUniqueConstraint> | 
				
			|||
        <addNotNullConstraint   columnName="REGISTRY_GROUP"                     columnDataType="NVARCHAR(50)"        tableName="XXL_JOB_REGISTRY"     constraintName="CONST_XXL_JOB_REGISTRY_REGISTRY_GROUP"/> | 
				
			|||
        <addNotNullConstraint   columnName="REGISTRY_KEY"                       columnDataType="NVARCHAR(255)"       tableName="XXL_JOB_REGISTRY"     constraintName="CONST_XXL_JOB_REGISTRY_REGISTRY_KEY"/> | 
				
			|||
        <addNotNullConstraint   columnName="REGISTRY_VALUE"                     columnDataType="NVARCHAR(255)"       tableName="XXL_JOB_REGISTRY"     constraintName="CONST_XXL_JOB_REGISTRY_REGISTRY_VALUE"/> | 
				
			|||
 | 
				
			|||
        <!-- JOB 组表 --> | 
				
			|||
        <createTable tableName="XXL_JOB_GROUP" remarks="JOB 组表"> | 
				
			|||
            <column name="ID"                           type="INTEGER"               remarks="主键ID"/> | 
				
			|||
            <column name="APP_NAME"                     type="NVARCHAR(255)"         remarks="执行器AppName"/> | 
				
			|||
            <column name="TITLE"                        type="NVARCHAR(255)"         remarks="执行器名称"/> | 
				
			|||
            <column name="ADDRESS_TYPE"                 type="TINYINT"               remarks="执行器地址类型:0=自动注册、1=手动录入" defaultValueNumeric="0"/> | 
				
			|||
            <column name="ADDRESS_LIST"                 type="CLOB"                  remarks="执行器地址列表,多地址逗号分隔"/> | 
				
			|||
            <column name="UPDATE_TIME"                  type="DATETIME"              remarks="更新日期"/> | 
				
			|||
        </createTable> | 
				
			|||
        <addPrimaryKey          tableName="XXL_JOB_GROUP"    columnNames="ID"/> | 
				
			|||
        <addAutoIncrement       columnName="ID"                           columnDataType="INTEGER"             tableName="XXL_JOB_GROUP"    startWith="1"   incrementBy="1"/> | 
				
			|||
        <addNotNullConstraint   columnName="APP_NAME"                     columnDataType="NVARCHAR(64)"        tableName="XXL_JOB_GROUP"     constraintName="CONST_XXL_JOB_GROUP_APP_NAME"/> | 
				
			|||
        <addNotNullConstraint   columnName="TITLE"                        columnDataType="NVARCHAR(12)"        tableName="XXL_JOB_GROUP"     constraintName="CONST_XXL_JOB_GROUP_TITLE"/> | 
				
			|||
        <addNotNullConstraint   columnName="ADDRESS_TYPE"                 columnDataType="TINYINT"             tableName="XXL_JOB_GROUP"     constraintName="CONST_XXL_JOB_GROUP_ADDRESS_TYPE"/> | 
				
			|||
        <addDefaultValue        columnName="ADDRESS_TYPE"                 columnDataType="TINYINT"             tableName="XXL_JOB_GROUP"     defaultValueNumeric="0"/> | 
				
			|||
 | 
				
			|||
 | 
				
			|||
        <!-- JOB 用户表 --> | 
				
			|||
        <createTable tableName="XXL_JOB_USER" remarks="JOB 用户表"> | 
				
			|||
            <column name="ID"                           type="INTEGER"               remarks="主键ID"/> | 
				
			|||
            <column name="USERNAME"                     type="NVARCHAR(50)"          remarks="账号"/> | 
				
			|||
            <column name="PASSWORD"                     type="NVARCHAR(50)"          remarks="密码"/> | 
				
			|||
            <column name="ROLE"                         type="TINYINT"               remarks="角色:0-普通用户、1-管理员"/> | 
				
			|||
            <column name="PERMISSION"                   type="NVARCHAR(255)"         remarks="权限:执行器ID列表,多个逗号分割"></column> | 
				
			|||
        </createTable> | 
				
			|||
        <addPrimaryKey          tableName="XXL_JOB_USER"     columnNames="ID"/> | 
				
			|||
        <addAutoIncrement       columnName="ID"              columnDataType="INTEGER"             tableName="XXL_JOB_USER"     startWith="1"   incrementBy="1"/> | 
				
			|||
        <addNotNullConstraint   columnName="USERNAME"        columnDataType="NVARCHAR(50)"        tableName="XXL_JOB_USER"     constraintName="CONST_XXL_JOB_USER_USERNAME"/> | 
				
			|||
        <addNotNullConstraint   columnName="PASSWORD"        columnDataType="NVARCHAR(50)"        tableName="XXL_JOB_USER"     constraintName="CONST_XXL_JOB_USER_PASSWORD"/> | 
				
			|||
        <addNotNullConstraint   columnName="ROLE"            columnDataType="TINYINT"             tableName="XXL_JOB_USER"     constraintName="CONST_XXL_JOB_USER_ROLE"/> | 
				
			|||
 | 
				
			|||
        <!-- JOB 锁表 --> | 
				
			|||
        <createTable tableName="XXL_JOB_LOCK" remarks="JOB 锁表"> | 
				
			|||
            <column name="LOCK_NAME"                type="NVARCHAR(50)"          remarks="锁名称"> | 
				
			|||
                <constraints primaryKey="true"/> | 
				
			|||
            </column> | 
				
			|||
        </createTable> | 
				
			|||
 | 
				
			|||
        <insert tableName="XXL_JOB_GROUP"> | 
				
			|||
            <column name="ID" valueNumeric="1"></column> | 
				
			|||
            <column name="APP_NAME" value="xxl-job-executor-sample"></column> | 
				
			|||
            <column name="TITLE" value="示例执行器"></column> | 
				
			|||
            <column name="ADDRESS_TYPE" valueNumeric="0"></column> | 
				
			|||
            <column name="UPDATE_TIME"  valueDate="${now}"></column> | 
				
			|||
        </insert> | 
				
			|||
 | 
				
			|||
        <insert tableName="XXL_JOB_INFO"> | 
				
			|||
            <column name="ID" valueNumeric="1"></column> | 
				
			|||
            <column name="JOB_GROUP" valueNumeric="1"></column> | 
				
			|||
            <column name="JOB_DESC" value="测试任务1"></column> | 
				
			|||
            <column name="add_time" valueDate="${now}"></column> | 
				
			|||
            <column name="update_time"  valueDate="${now}"></column> | 
				
			|||
            <column name="author"  value="XXL"></column> | 
				
			|||
            <column name="alarm_email"  value=""></column> | 
				
			|||
            <column name="schedule_type"  value="CRON"></column> | 
				
			|||
            <column name="schedule_conf"  value="0 0 0 * * ? *"></column> | 
				
			|||
            <column name="misfire_strategy"  value="DO_NOTHING"></column> | 
				
			|||
            <column name="executor_route_strategy"  value="FIRST"></column> | 
				
			|||
            <column name="executor_handler"  value="demoJobHandler"></column> | 
				
			|||
            <column name="executor_param"  value=""></column> | 
				
			|||
            <column name="executor_block_strategy"  value="SERIAL_EXECUTION"></column> | 
				
			|||
            <column name="executor_timeout"  valueNumeric="0"></column> | 
				
			|||
            <column name="executor_fail_retry_count"  valueNumeric="0"></column> | 
				
			|||
            <column name="glue_type"  value="BEAN"></column> | 
				
			|||
            <column name="glue_source"  value=""></column> | 
				
			|||
            <column name="glue_remark"  value="GLUE代码初始化"></column> | 
				
			|||
            <column name="glue_updatetime"  valueDate="${now}"></column> | 
				
			|||
            <column name="child_jobid"  value=""></column> | 
				
			|||
        </insert> | 
				
			|||
 | 
				
			|||
        <insert tableName="XXL_JOB_USER"> | 
				
			|||
            <column name="id" valueNumeric="1"></column> | 
				
			|||
            <column name="username" value="admin"></column> | 
				
			|||
            <column name="password" value="e10adc3949ba59abbe56e057f20f883e"></column> | 
				
			|||
            <column name="role" valueNumeric="1"></column> | 
				
			|||
        </insert> | 
				
			|||
        <insert tableName="XXL_JOB_LOCK"> | 
				
			|||
            <column name="lock_name" value="schedule_lock"></column> | 
				
			|||
        </insert> | 
				
			|||
 | 
				
			|||
    </changeSet> | 
				
			|||
</databaseChangeLog> | 
				
			|||
@ -0,0 +1,51 @@ | 
				
			|||
package io.sc.platform.lcdp.configure.api; | 
				
			|||
 | 
				
			|||
import io.sc.platform.orm.api.vo.CorporationAuditorVo; | 
				
			|||
 | 
				
			|||
public class ConfigureVo extends CorporationAuditorVo { | 
				
			|||
    private String id; | 
				
			|||
    private String name; | 
				
			|||
    private Boolean active; | 
				
			|||
    private Setting setting; | 
				
			|||
    private Theme theme; | 
				
			|||
 | 
				
			|||
    public String getId() { | 
				
			|||
        return id; | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    public void setId(String id) { | 
				
			|||
        this.id = id; | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    public String getName() { | 
				
			|||
        return name; | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    public void setName(String name) { | 
				
			|||
        this.name = name; | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    public Boolean getActive() { | 
				
			|||
        return active; | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    public void setActive(Boolean active) { | 
				
			|||
        this.active = active; | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    public Setting getSetting() { | 
				
			|||
        return setting; | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    public void setSetting(Setting setting) { | 
				
			|||
        this.setting = setting; | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    public Theme getTheme() { | 
				
			|||
        return theme; | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    public void setTheme(Theme theme) { | 
				
			|||
        this.theme = theme; | 
				
			|||
    } | 
				
			|||
} | 
				
			|||
@ -0,0 +1,5 @@ | 
				
			|||
{ | 
				
			|||
    includes:[ | 
				
			|||
        "io/sc/platform/lcdp/configure/i18n/initializer" | 
				
			|||
    ] | 
				
			|||
} | 
				
			|||
@ -0,0 +1,2 @@ | 
				
			|||
io.sc.platform.lcdp.configure.initializer.ConfigureInitializer.name=Configure Initializer | 
				
			|||
io.sc.platform.lcdp.configure.initializer.ConfigureInitializer.description=initialize default theme if not exists | 
				
			|||
@ -0,0 +1,2 @@ | 
				
			|||
io.sc.platform.lcdp.configure.initializer.ConfigureInitializer.name=\u4E3B\u984C\u98A8\u683C\u521D\u59CB\u5316\u5668 | 
				
			|||
io.sc.platform.lcdp.configure.initializer.ConfigureInitializer.description=\u7576\u7CFB\u7D71\u7F3A\u5931\u4E3B\u984C\u98A8\u683C\u6642, \u81EA\u52D5\u5275\u5EFA\u9ED8\u8A8D\u4E3B\u984C\u98A8\u683C | 
				
			|||
Some files were not shown because too many files changed in this diff
					Loading…
					
					
				
		Reference in new issue