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