1. 新增附件下载预览的短链功能
This commit is contained in:
@@ -1,145 +0,0 @@
|
|||||||
DROP TABLE IF EXISTS `bpm_category`;
|
|
||||||
CREATE TABLE `bpm_category` (
|
|
||||||
`id` bigint(0) NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT '分类编号',
|
|
||||||
`name` varchar(255) DEFAULT NULL COMMENT '分类名',
|
|
||||||
`code` varchar(255) DEFAULT NULL COMMENT '分类标志',
|
|
||||||
`description` varchar(255) DEFAULT NULL COMMENT '分类描述',
|
|
||||||
`status` int(11) DEFAULT NULL COMMENT '分类状态,枚举 CommonStatusEnum',
|
|
||||||
`sort` int(11) DEFAULT NULL COMMENT '分类排序',
|
|
||||||
`create_time` datetime COMMENT '创建时间',
|
|
||||||
`update_time` datetime COMMENT '最后更新时间',
|
|
||||||
`creator` varchar(255) COMMENT '创建者,目前使用 SysUser 的 id 编号',
|
|
||||||
`updater` varchar(255) COMMENT '更新者,目前使用 SysUser 的 id 编号',
|
|
||||||
`deleted` tinyint(1) DEFAULT NULL COMMENT '是否删除',
|
|
||||||
`tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号'
|
|
||||||
) ENGINE=InnoDB COMMENT='流程分类';
|
|
||||||
|
|
||||||
DROP TABLE IF EXISTS `bpm_form`;
|
|
||||||
CREATE TABLE `bpm_form` (
|
|
||||||
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号',
|
|
||||||
`name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '表单名',
|
|
||||||
`status` tinyint NOT NULL COMMENT '开启状态',
|
|
||||||
`conf` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '表单的配置',
|
|
||||||
`fields` varchar(5000) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '表单项的数组',
|
|
||||||
`remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '备注',
|
|
||||||
`creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '创建者',
|
|
||||||
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
|
||||||
`updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '更新者',
|
|
||||||
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
|
||||||
`deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
|
|
||||||
`tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号',
|
|
||||||
PRIMARY KEY (`id`) USING BTREE
|
|
||||||
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '工作流的表单定义';
|
|
||||||
|
|
||||||
|
|
||||||
DROP TABLE IF EXISTS `bpm_oa_leave`;
|
|
||||||
CREATE TABLE `bpm_oa_leave` (
|
|
||||||
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '请假表单主键',
|
|
||||||
`user_id` bigint NOT NULL COMMENT '申请人的用户编号',
|
|
||||||
`type` tinyint NOT NULL COMMENT '请假类型',
|
|
||||||
`reason` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '请假原因',
|
|
||||||
`start_time` datetime NOT NULL COMMENT '开始时间',
|
|
||||||
`end_time` datetime NOT NULL COMMENT '结束时间',
|
|
||||||
`day` tinyint NOT NULL COMMENT '请假天数',
|
|
||||||
`result` tinyint NOT NULL COMMENT '请假结果',
|
|
||||||
`process_instance_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '流程实例的编号',
|
|
||||||
`creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '创建者',
|
|
||||||
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
|
||||||
`updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '更新者',
|
|
||||||
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
|
||||||
`deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
|
|
||||||
`tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号',
|
|
||||||
PRIMARY KEY (`id`) USING BTREE
|
|
||||||
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = 'OA 请假申请表';
|
|
||||||
|
|
||||||
|
|
||||||
DROP TABLE IF EXISTS `bpm_process_definition_info`;
|
|
||||||
CREATE TABLE `bpm_process_definition_info` (
|
|
||||||
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号',
|
|
||||||
`process_definition_id` varchar(64) NOT NULL COMMENT '流程定义的编号',
|
|
||||||
`model_id` varchar(64) NOT NULL COMMENT '流程模型的编号',
|
|
||||||
`icon` varchar(255) DEFAULT NULL COMMENT '图标',
|
|
||||||
`description` varchar(255) DEFAULT NULL COMMENT '描述',
|
|
||||||
`form_type` tinyint NOT NULL COMMENT '表单类型',
|
|
||||||
`form_id` bigint NULL DEFAULT NULL COMMENT '表单编号',
|
|
||||||
`form_conf` varchar(1000) DEFAULT NULL COMMENT '表单的配置',
|
|
||||||
`form_fields` varchar(5000) DEFAULT NULL COMMENT '表单项的数组',
|
|
||||||
`form_custom_create_path` varchar(255) DEFAULT NULL COMMENT '自定义表单的提交路径',
|
|
||||||
`form_custom_view_path` varchar(255) DEFAULT NULL COMMENT '自定义表单的查看路径',
|
|
||||||
`creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '创建者',
|
|
||||||
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
|
||||||
`updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '更新者',
|
|
||||||
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
|
||||||
`deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
|
|
||||||
`tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号',
|
|
||||||
PRIMARY KEY (`id`) USING BTREE
|
|
||||||
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = 'Bpm 流程定义信息表';
|
|
||||||
|
|
||||||
|
|
||||||
DROP TABLE IF EXISTS `bpm_process_expression`;
|
|
||||||
CREATE TABLE `bpm_process_expression` (
|
|
||||||
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号',
|
|
||||||
`name` varchar(64) DEFAULT NULL COMMENT '流程实例的名字',
|
|
||||||
`status` tinyint NOT NULL COMMENT '流程实例的状态',
|
|
||||||
`expression` varchar(5000) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '表达式',
|
|
||||||
`creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '创建者',
|
|
||||||
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
|
||||||
`updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '更新者',
|
|
||||||
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
|
||||||
`deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
|
|
||||||
`tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号',
|
|
||||||
PRIMARY KEY (`id`) USING BTREE
|
|
||||||
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '流程表达式';
|
|
||||||
|
|
||||||
DROP TABLE IF EXISTS `bpm_process_instance_copy`;
|
|
||||||
CREATE TABLE `bpm_process_instance_copy` (
|
|
||||||
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号',
|
|
||||||
`start_user_id` bigint NOT NULL COMMENT '发起流程的用户编号',
|
|
||||||
`process_instance_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '流程实例的名字',
|
|
||||||
`process_instance_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '流程实例的编号',
|
|
||||||
`category` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '流程分类',
|
|
||||||
`task_id` varchar(64) DEFAULT NULL COMMENT '任务主键',
|
|
||||||
`task_name` varchar(64) DEFAULT NULL COMMENT '任务名称',
|
|
||||||
`user_id` bigint NOT NULL COMMENT '用户编号(被抄送的用户编号)',
|
|
||||||
`creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '创建者',
|
|
||||||
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
|
||||||
`updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '更新者',
|
|
||||||
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
|
||||||
`deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
|
|
||||||
`tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号',
|
|
||||||
PRIMARY KEY (`id`) USING BTREE
|
|
||||||
) ENGINE = InnoDB AUTO_INCREMENT = 296 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '流程抄送表';
|
|
||||||
|
|
||||||
DROP TABLE IF EXISTS `bpm_process_listener`;
|
|
||||||
CREATE TABLE `bpm_process_listener` (
|
|
||||||
`id` bigint(20) NOT NULL COMMENT '主键 ID,自增',
|
|
||||||
`name` varchar(255) DEFAULT NULL COMMENT '监听器名字',
|
|
||||||
`status` int(11) DEFAULT NULL COMMENT '状态',
|
|
||||||
`type` varchar(255) DEFAULT NULL COMMENT '监听类型',
|
|
||||||
`event` varchar(255) DEFAULT NULL COMMENT '监听事件',
|
|
||||||
`value_type` varchar(255) DEFAULT NULL COMMENT '值类型',
|
|
||||||
`value` varchar(255) DEFAULT NULL COMMENT '值',
|
|
||||||
`creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '创建者',
|
|
||||||
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
|
||||||
`updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '更新者',
|
|
||||||
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
|
||||||
`deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
|
|
||||||
`tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号',
|
|
||||||
PRIMARY KEY (`id`) USING BTREE
|
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='流程监听器';
|
|
||||||
|
|
||||||
DROP TABLE IF EXISTS `bpm_user_group`;
|
|
||||||
CREATE TABLE `bpm_user_group` (
|
|
||||||
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号',
|
|
||||||
`name` varchar(30) DEFAULT '' COMMENT '组名',
|
|
||||||
`description` varchar(255) DEFAULT '' COMMENT '描述',
|
|
||||||
`status` tinyint NOT NULL COMMENT '状态(0正常 1停用)',
|
|
||||||
`user_ids` varchar(1024) DEFAULT '0' COMMENT '成员编号数组',
|
|
||||||
`creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '创建者',
|
|
||||||
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
|
||||||
`updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '更新者',
|
|
||||||
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
|
||||||
`deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
|
|
||||||
`tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号',
|
|
||||||
PRIMARY KEY (`id`) USING BTREE
|
|
||||||
) ENGINE = InnoDB AUTO_INCREMENT = 113 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '用户组';
|
|
||||||
@@ -1,171 +0,0 @@
|
|||||||
-- 删除表,如果已存在
|
|
||||||
DROP TABLE IF EXISTS `bpm_category`;
|
|
||||||
CREATE TABLE `bpm_category` (
|
|
||||||
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '分类编号',
|
|
||||||
`name` varchar(255) NOT NULL COMMENT '分类名',
|
|
||||||
`code` varchar(255) NOT NULL COMMENT '分类标志',
|
|
||||||
`description` varchar(255) DEFAULT NULL COMMENT '分类描述',
|
|
||||||
`status` int NOT NULL COMMENT '分类状态',
|
|
||||||
`sort` int DEFAULT NULL COMMENT '分类排序',
|
|
||||||
`tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号',
|
|
||||||
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
|
||||||
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后更新时间',
|
|
||||||
`creator` varchar(64) DEFAULT NULL COMMENT '创建者',
|
|
||||||
`updater` varchar(64) DEFAULT NULL COMMENT '更新者',
|
|
||||||
`deleted` bit(1) NOT NULL DEFAULT 0 COMMENT '是否删除',
|
|
||||||
PRIMARY KEY (`id`)
|
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='BPM 流程分类';
|
|
||||||
|
|
||||||
-- 删除表,如果已存在
|
|
||||||
DROP TABLE IF EXISTS `bpm_form`;
|
|
||||||
CREATE TABLE `bpm_form` (
|
|
||||||
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号',
|
|
||||||
`name` varchar(255) NOT NULL COMMENT '表单名',
|
|
||||||
`status` int NOT NULL COMMENT '状态',
|
|
||||||
`conf` varchar(2000) DEFAULT NULL COMMENT '表单的配置',
|
|
||||||
`fields` varchar(2000) DEFAULT NULL COMMENT '表单项的数组',
|
|
||||||
`remark` varchar(255) DEFAULT NULL COMMENT '备注',
|
|
||||||
`tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号',
|
|
||||||
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
|
||||||
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后更新时间',
|
|
||||||
`creator` varchar(64) DEFAULT NULL COMMENT '创建者',
|
|
||||||
`updater` varchar(64) DEFAULT NULL COMMENT '更新者',
|
|
||||||
`deleted` bit(1) NOT NULL DEFAULT 0 COMMENT '是否删除',
|
|
||||||
PRIMARY KEY (`id`)
|
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='BPM 工作流的表单定义';
|
|
||||||
|
|
||||||
-- 删除表,如果已存在
|
|
||||||
DROP TABLE IF EXISTS `bpm_process_definition_info`;
|
|
||||||
CREATE TABLE `bpm_process_definition_info` (
|
|
||||||
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号',
|
|
||||||
`process_definition_id` varchar(255) NOT NULL COMMENT '流程定义的编号',
|
|
||||||
`model_id` varchar(255) DEFAULT NULL COMMENT '流程模型的编号',
|
|
||||||
`model_type` int DEFAULT NULL COMMENT '流程模型的类型',
|
|
||||||
`category` varchar(255) DEFAULT NULL COMMENT '流程分类的编码',
|
|
||||||
`icon` varchar(255) DEFAULT NULL COMMENT '图标',
|
|
||||||
`description` varchar(255) DEFAULT NULL COMMENT '描述',
|
|
||||||
`form_type` int DEFAULT NULL COMMENT '表单类型',
|
|
||||||
`form_id` bigint DEFAULT NULL COMMENT '动态表单编号',
|
|
||||||
`form_conf` varchar(2000) DEFAULT NULL COMMENT '表单的配置',
|
|
||||||
`form_fields` varchar(2000) DEFAULT NULL COMMENT '表单项的数组',
|
|
||||||
`form_custom_create_path` varchar(255) DEFAULT NULL COMMENT '自定义表单的提交路径',
|
|
||||||
`form_custom_view_path` varchar(255) DEFAULT NULL COMMENT '自定义表单的查看路径',
|
|
||||||
`simple_model` varchar(2000) DEFAULT NULL COMMENT 'SIMPLE 设计器模型数据 json 格式',
|
|
||||||
`visible` bit(1) DEFAULT NULL COMMENT '是否可见',
|
|
||||||
`sort` bigint DEFAULT NULL COMMENT '排序值',
|
|
||||||
`start_user_ids` varchar(2000) DEFAULT NULL COMMENT '可发起用户编号数组',
|
|
||||||
`start_dept_ids` varchar(2000) DEFAULT NULL COMMENT '可发起部门编号数组',
|
|
||||||
`manager_user_ids` varchar(2000) DEFAULT NULL COMMENT '可管理用户编号数组',
|
|
||||||
`allow_cancel_running_process` bit(1) DEFAULT NULL COMMENT '是否允许撤销审批中的申请',
|
|
||||||
`process_id_rule` varchar(2000) DEFAULT NULL COMMENT '流程 ID 规则',
|
|
||||||
`auto_approval_type` int DEFAULT NULL COMMENT '自动去重类型',
|
|
||||||
`title_setting` varchar(2000) DEFAULT NULL COMMENT '标题设置',
|
|
||||||
`summary_setting` varchar(2000) DEFAULT NULL COMMENT '摘要设置',
|
|
||||||
`process_before_trigger_setting` varchar(2000) DEFAULT NULL COMMENT '流程前置通知设置',
|
|
||||||
`process_after_trigger_setting` varchar(2000) DEFAULT NULL COMMENT '流程后置通知设置',
|
|
||||||
`task_before_trigger_setting` varchar(2000) DEFAULT NULL COMMENT '任务前置通知设置',
|
|
||||||
`task_after_trigger_setting` varchar(2000) DEFAULT NULL COMMENT '任务后置通知设置',
|
|
||||||
`tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号',
|
|
||||||
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
|
||||||
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后更新时间',
|
|
||||||
`creator` varchar(64) DEFAULT NULL COMMENT '创建者',
|
|
||||||
`updater` varchar(64) DEFAULT NULL COMMENT '更新者',
|
|
||||||
`deleted` bit(1) NOT NULL DEFAULT 0 COMMENT '是否删除',
|
|
||||||
PRIMARY KEY (`id`)
|
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='BPM 流程定义的拓信息';
|
|
||||||
|
|
||||||
-- 删除表,如果已存在
|
|
||||||
DROP TABLE IF EXISTS `bpm_process_expression`;
|
|
||||||
CREATE TABLE `bpm_process_expression` (
|
|
||||||
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号',
|
|
||||||
`name` varchar(255) NOT NULL COMMENT '表达式名字',
|
|
||||||
`status` int NOT NULL COMMENT '表达式状态',
|
|
||||||
`expression` varchar(2000) NOT NULL COMMENT '表达式',
|
|
||||||
`tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号',
|
|
||||||
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
|
||||||
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后更新时间',
|
|
||||||
`creator` varchar(64) DEFAULT NULL COMMENT '创建者',
|
|
||||||
`updater` varchar(64) DEFAULT NULL COMMENT '更新者',
|
|
||||||
`deleted` bit(1) NOT NULL DEFAULT 0 COMMENT '是否删除',
|
|
||||||
PRIMARY KEY (`id`)
|
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='BPM 流程表达式';
|
|
||||||
|
|
||||||
-- 删除表,如果已存在
|
|
||||||
DROP TABLE IF EXISTS `bpm_process_listener`;
|
|
||||||
CREATE TABLE `bpm_process_listener` (
|
|
||||||
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键 ID',
|
|
||||||
`name` varchar(255) NOT NULL COMMENT '监听器名字',
|
|
||||||
`status` int NOT NULL COMMENT '状态',
|
|
||||||
`type` varchar(64) NOT NULL COMMENT '监听类型',
|
|
||||||
`event` varchar(64) DEFAULT NULL COMMENT '监听事件',
|
|
||||||
`value_type` varchar(64) DEFAULT NULL COMMENT '值类型',
|
|
||||||
`value` varchar(255) DEFAULT NULL COMMENT '值',
|
|
||||||
`tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号',
|
|
||||||
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
|
||||||
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后更新时间',
|
|
||||||
`creator` varchar(64) DEFAULT NULL COMMENT '创建者',
|
|
||||||
`updater` varchar(64) DEFAULT NULL COMMENT '更新者',
|
|
||||||
`deleted` bit(1) NOT NULL DEFAULT 0 COMMENT '是否删除',
|
|
||||||
PRIMARY KEY (`id`)
|
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='BPM 流程监听器';
|
|
||||||
|
|
||||||
-- 删除表,如果已存在
|
|
||||||
DROP TABLE IF EXISTS `bpm_user_group`;
|
|
||||||
CREATE TABLE `bpm_user_group` (
|
|
||||||
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号',
|
|
||||||
`name` varchar(255) NOT NULL COMMENT '组名',
|
|
||||||
`description` varchar(255) DEFAULT NULL COMMENT '描述',
|
|
||||||
`status` int NOT NULL COMMENT '状态',
|
|
||||||
`user_ids` varchar(2000) DEFAULT NULL COMMENT '成员用户编号数组',
|
|
||||||
`tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号',
|
|
||||||
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
|
||||||
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后更新时间',
|
|
||||||
`creator` varchar(64) DEFAULT NULL COMMENT '创建者',
|
|
||||||
`updater` varchar(64) DEFAULT NULL COMMENT '更新者',
|
|
||||||
`deleted` bit(1) NOT NULL DEFAULT 0 COMMENT '是否删除',
|
|
||||||
PRIMARY KEY (`id`)
|
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='BPM 用户组';
|
|
||||||
|
|
||||||
-- 删除表,如果已存在
|
|
||||||
DROP TABLE IF EXISTS `bpm_oa_leave`;
|
|
||||||
CREATE TABLE `bpm_oa_leave` (
|
|
||||||
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '请假表单主键',
|
|
||||||
`user_id` bigint NOT NULL COMMENT '申请人的用户编号',
|
|
||||||
`type` varchar(255) NOT NULL COMMENT '请假类型',
|
|
||||||
`reason` varchar(255) DEFAULT NULL COMMENT '原因',
|
|
||||||
`start_time` datetime DEFAULT NULL COMMENT '开始时间',
|
|
||||||
`end_time` datetime DEFAULT NULL COMMENT '结束时间',
|
|
||||||
`day` bigint DEFAULT NULL COMMENT '请假天数',
|
|
||||||
`status` int DEFAULT NULL COMMENT '审批结果',
|
|
||||||
`process_instance_id` varchar(255) DEFAULT NULL COMMENT '对应的流程编号',
|
|
||||||
`tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号',
|
|
||||||
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
|
||||||
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后更新时间',
|
|
||||||
`creator` varchar(64) DEFAULT NULL COMMENT '创建者',
|
|
||||||
`updater` varchar(64) DEFAULT NULL COMMENT '更新者',
|
|
||||||
`deleted` bit(1) NOT NULL DEFAULT 0 COMMENT '是否删除',
|
|
||||||
PRIMARY KEY (`id`)
|
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='OA 请假申请';
|
|
||||||
|
|
||||||
-- 删除表,如果已存在
|
|
||||||
DROP TABLE IF EXISTS `bpm_process_instance_copy`;
|
|
||||||
CREATE TABLE `bpm_process_instance_copy` (
|
|
||||||
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号',
|
|
||||||
`start_user_id` bigint DEFAULT NULL COMMENT '发起人 Id',
|
|
||||||
`process_instance_name` varchar(255) DEFAULT NULL COMMENT '流程名',
|
|
||||||
`process_instance_id` varchar(255) DEFAULT NULL COMMENT '流程实例的编号',
|
|
||||||
`process_definition_id` varchar(255) DEFAULT NULL COMMENT '流程实例的流程定义编号',
|
|
||||||
`category` varchar(255) DEFAULT NULL COMMENT '流程分类',
|
|
||||||
`activity_id` varchar(255) DEFAULT NULL COMMENT '流程活动的编号',
|
|
||||||
`activity_name` varchar(255) DEFAULT NULL COMMENT '流程活动的名字',
|
|
||||||
`task_id` varchar(255) DEFAULT NULL COMMENT '流程活动的编号',
|
|
||||||
`user_id` bigint DEFAULT NULL COMMENT '用户编号(被抄送的用户编号)',
|
|
||||||
`reason` varchar(255) DEFAULT NULL COMMENT '抄送意见',
|
|
||||||
`tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号',
|
|
||||||
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
|
||||||
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后更新时间',
|
|
||||||
`creator` varchar(64) DEFAULT NULL COMMENT '创建者',
|
|
||||||
`updater` varchar(64) DEFAULT NULL COMMENT '更新者',
|
|
||||||
`deleted` bit(1) NOT NULL DEFAULT 0 COMMENT '是否删除',
|
|
||||||
PRIMARY KEY (`id`)
|
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='流程抄送';
|
|
||||||
@@ -21,7 +21,6 @@ import jakarta.servlet.http.HttpServletRequest;
|
|||||||
import jakarta.servlet.http.HttpServletResponse;
|
import jakarta.servlet.http.HttpServletResponse;
|
||||||
import jakarta.validation.Valid;
|
import jakarta.validation.Valid;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.beans.factory.annotation.Value;
|
|
||||||
import org.springframework.http.HttpStatus;
|
import org.springframework.http.HttpStatus;
|
||||||
import org.springframework.security.access.prepost.PreAuthorize;
|
import org.springframework.security.access.prepost.PreAuthorize;
|
||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
@@ -29,9 +28,6 @@ import org.springframework.web.bind.annotation.*;
|
|||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.net.URLEncoder;
|
|
||||||
import java.nio.charset.StandardCharsets;
|
|
||||||
import java.util.Base64;
|
|
||||||
|
|
||||||
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
|
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
|
||||||
import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
|
import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
|
||||||
@@ -49,25 +45,8 @@ public class FileController {
|
|||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private FileService fileService;
|
private FileService fileService;
|
||||||
@Value("${yudao.kkfile:}")
|
|
||||||
private String onlinePreview;
|
|
||||||
|
|
||||||
@GetMapping("/download-url")
|
@GetMapping("/get")
|
||||||
@Operation(summary = "获取文件下载地址", description = "根据 fileId 返回文件下载 url")
|
|
||||||
public CommonResult<FileRespVO> getDownloadUrl(@RequestParam("fileId") Long fileId) {
|
|
||||||
FileDO fileDO = fileService.getActiveFileById(fileId);
|
|
||||||
if (fileDO == null) {
|
|
||||||
return CommonResult.error(HttpStatus.NOT_FOUND.value(), "文件不存在");
|
|
||||||
}
|
|
||||||
// FileDO 转换为 FileRespVO
|
|
||||||
FileRespVO fileRespVO = BeanUtils.toBean(fileDO, FileRespVO.class);
|
|
||||||
if (StrUtil.isEmpty(onlinePreview) || StrUtil.isEmpty(fileRespVO.getUrl())) {
|
|
||||||
return CommonResult.error(HttpStatus.BAD_REQUEST.value(), "文件 URL 为空");
|
|
||||||
}
|
|
||||||
return success(fileRespVO);
|
|
||||||
}
|
|
||||||
|
|
||||||
@GetMapping("/preview-url")
|
|
||||||
@Operation(summary = "获取文件预览地址", description = "根据 fileId 返回文件预览 url(kkfile)")
|
@Operation(summary = "获取文件预览地址", description = "根据 fileId 返回文件预览 url(kkfile)")
|
||||||
public CommonResult<FileRespVO> getPreviewUrl(@RequestParam("fileId") Long fileId) {
|
public CommonResult<FileRespVO> getPreviewUrl(@RequestParam("fileId") Long fileId) {
|
||||||
FileDO fileDO = fileService.getActiveFileById(fileId);
|
FileDO fileDO = fileService.getActiveFileById(fileId);
|
||||||
@@ -76,11 +55,6 @@ public class FileController {
|
|||||||
}
|
}
|
||||||
// FileDO 转换为 FileRespVO
|
// FileDO 转换为 FileRespVO
|
||||||
FileRespVO fileRespVO = BeanUtils.toBean(fileDO, FileRespVO.class);
|
FileRespVO fileRespVO = BeanUtils.toBean(fileDO, FileRespVO.class);
|
||||||
if (StrUtil.isEmpty(onlinePreview) || StrUtil.isEmpty(fileRespVO.getUrl())) {
|
|
||||||
return CommonResult.error(HttpStatus.BAD_REQUEST.value(), "在线预览地址未配置或文件 URL 为空");
|
|
||||||
}
|
|
||||||
String previewUrl = onlinePreview + URLEncoder.encode(Base64.getEncoder().encodeToString(fileRespVO.getUrl().getBytes(StandardCharsets.UTF_8)), StandardCharsets.UTF_8);
|
|
||||||
fileRespVO.setPreviewUrl(previewUrl);
|
|
||||||
return success(fileRespVO);
|
return success(fileRespVO);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -99,11 +73,6 @@ public class FileController {
|
|||||||
MultipartFile file = uploadReqVO.getFile();
|
MultipartFile file = uploadReqVO.getFile();
|
||||||
byte[] content = IoUtil.readBytes(file.getInputStream());
|
byte[] content = IoUtil.readBytes(file.getInputStream());
|
||||||
FileRespVO fileWhitReturn = fileService.createFileWhitReturn(content, file.getOriginalFilename(), uploadReqVO.getDirectory(), file.getContentType(), uploadReqVO.getEncrypt());
|
FileRespVO fileWhitReturn = fileService.createFileWhitReturn(content, file.getOriginalFilename(), uploadReqVO.getDirectory(), file.getContentType(), uploadReqVO.getEncrypt());
|
||||||
if (StrUtil.isEmpty(onlinePreview) || StrUtil.isEmpty(fileWhitReturn.getUrl())) {
|
|
||||||
fileWhitReturn.setPreviewUrl(fileWhitReturn.getUrl());
|
|
||||||
return success(fileWhitReturn);
|
|
||||||
}
|
|
||||||
fileWhitReturn.setPreviewUrl(onlinePreview + URLEncoder.encode(fileWhitReturn.getUrl(), StandardCharsets.UTF_8));
|
|
||||||
return success(fileWhitReturn);
|
return success(fileWhitReturn);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,13 +1,34 @@
|
|||||||
package cn.iocoder.yudao.module.infra.controller.admin.file.vo.file;
|
package cn.iocoder.yudao.module.infra.controller.admin.file.vo.file;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.framework.common.util.spring.SpringUtils;
|
||||||
|
import cn.iocoder.yudao.module.infra.service.shortlink.ShortLinkService;
|
||||||
import io.swagger.v3.oas.annotations.media.Schema;
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.nio.charset.StandardCharsets;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
|
import java.util.Base64;
|
||||||
|
|
||||||
|
import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author chenbowen
|
||||||
|
*/
|
||||||
@Schema(description = "管理后台 - 文件 Response VO,不返回 content 字段,太大")
|
@Schema(description = "管理后台 - 文件 Response VO,不返回 content 字段,太大")
|
||||||
@Data
|
@Data
|
||||||
public class FileRespVO {
|
public class FileRespVO {
|
||||||
|
public String getUrl() {
|
||||||
|
if (this.url == null || this.url.isEmpty()) return null;
|
||||||
|
Long fileId = this.id;
|
||||||
|
Long userId = null;
|
||||||
|
try {
|
||||||
|
userId = getLoginUserId();
|
||||||
|
} catch (Exception ignored) {}
|
||||||
|
ShortLinkService shortLinkService = SpringUtils.getBean(ShortLinkService.class);
|
||||||
|
String serverPrefix = SpringUtils.getProperty("yudao.shortlink.server");
|
||||||
|
String key = (userId != null ? userId : "anonymous") + "_" + (fileId != null ? fileId : "nofile");
|
||||||
|
return serverPrefix + shortLinkService.generateShortLink(key, this.url);
|
||||||
|
}
|
||||||
|
|
||||||
@Schema(description = "文件编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
|
@Schema(description = "文件编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
|
||||||
private Long id;
|
private Long id;
|
||||||
@@ -28,6 +49,26 @@ public class FileRespVO {
|
|||||||
@Schema(description = "附件预览地址", example = "https://www.iocoder.cn/yudao.jpg")
|
@Schema(description = "附件预览地址", example = "https://www.iocoder.cn/yudao.jpg")
|
||||||
private String previewUrl;
|
private String previewUrl;
|
||||||
|
|
||||||
|
public String getPreviewUrl() {
|
||||||
|
// 仅当 url 不为空时生成
|
||||||
|
if (this.url == null || this.url.isEmpty()) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
// 这里的 onlinePreview 通过 SpringUtils 获取
|
||||||
|
String onlinePreview = SpringUtils.getProperty("yudao.kkfile");
|
||||||
|
if (onlinePreview == null || onlinePreview.isEmpty()) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
String shortUrl = this.getUrl();
|
||||||
|
if (shortUrl == null || shortUrl.isEmpty()) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
String base64ShortUrl = Base64.getUrlEncoder().encodeToString(shortUrl.getBytes(StandardCharsets.UTF_8));
|
||||||
|
return onlinePreview + base64ShortUrl
|
||||||
|
// + "&fileName=" + URLEncoder.encode(this.getName(), StandardCharsets.UTF_8) + "&watermarkTxt=中国铜业"
|
||||||
|
;
|
||||||
|
}
|
||||||
|
|
||||||
@Schema(description = "文件MIME类型", example = "application/octet-stream")
|
@Schema(description = "文件MIME类型", example = "application/octet-stream")
|
||||||
private String type;
|
private String type;
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,77 @@
|
|||||||
|
package cn.iocoder.yudao.module.infra.controller.admin.shortlink;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
||||||
|
import cn.iocoder.yudao.framework.tenant.core.aop.TenantIgnore;
|
||||||
|
import cn.iocoder.yudao.module.infra.service.shortlink.ShortLinkService;
|
||||||
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
|
import jakarta.annotation.security.PermitAll;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.http.*;
|
||||||
|
import org.springframework.validation.annotation.Validated;
|
||||||
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
import org.springframework.web.client.RestTemplate;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author chenbowen
|
||||||
|
*/
|
||||||
|
@Tag(name = "管理后台 - 文件存储")
|
||||||
|
@Validated
|
||||||
|
@Slf4j
|
||||||
|
@RestController
|
||||||
|
@RequestMapping("/infra/shortlink")
|
||||||
|
public class ShortLinkController {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private ShortLinkService shortLinkService;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 生成短链接
|
||||||
|
*/
|
||||||
|
@PostMapping("/generate")
|
||||||
|
public CommonResult<String> generateShortLink(@RequestParam("key") String key, @RequestParam("url") String url) {
|
||||||
|
String shortLink = "/infra/shortlink/" + shortLinkService.generateShortLink(key, url);
|
||||||
|
return CommonResult.success(shortLink);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 解析短链接并重定向
|
||||||
|
*/
|
||||||
|
@GetMapping("/{shortKey}")
|
||||||
|
@PermitAll
|
||||||
|
@TenantIgnore
|
||||||
|
public ResponseEntity<byte[]> parseShortLink(@PathVariable("shortKey") String shortKey) {
|
||||||
|
String realUrl = shortLinkService.parseShortLink(shortKey);
|
||||||
|
if (realUrl != null) {
|
||||||
|
RestTemplate restTemplate = new RestTemplate();
|
||||||
|
try {
|
||||||
|
ResponseEntity<byte[]> entity = restTemplate.exchange(realUrl, HttpMethod.GET, HttpEntity.EMPTY, byte[].class);
|
||||||
|
HttpHeaders headers = new HttpHeaders();
|
||||||
|
// 只透传部分常用header,可根据需要扩展
|
||||||
|
if (entity.getHeaders().getContentType() != null) {
|
||||||
|
headers.setContentType(entity.getHeaders().getContentType());
|
||||||
|
}
|
||||||
|
if (entity.getHeaders().getContentLength() > 0) {
|
||||||
|
headers.setContentLength(entity.getHeaders().getContentLength());
|
||||||
|
}
|
||||||
|
// 透传 disposition/encoding 等
|
||||||
|
String disposition = entity.getHeaders().getFirst(HttpHeaders.CONTENT_DISPOSITION);
|
||||||
|
if (disposition != null) {
|
||||||
|
headers.set(HttpHeaders.CONTENT_DISPOSITION, disposition);
|
||||||
|
}
|
||||||
|
String encoding = entity.getHeaders().getFirst(HttpHeaders.CONTENT_ENCODING);
|
||||||
|
if (encoding != null) {
|
||||||
|
headers.set(HttpHeaders.CONTENT_ENCODING, encoding);
|
||||||
|
}
|
||||||
|
return new ResponseEntity<>(entity.getBody(), headers, entity.getStatusCode());
|
||||||
|
} catch (Exception e) {
|
||||||
|
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
|
||||||
|
.body(("目标链接内容获取异常: " + e.getMessage()).getBytes());
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return ResponseEntity.status(HttpStatus.NOT_FOUND)
|
||||||
|
.body("当前文件请求链接已失效,请从系统重新进行请求操作".getBytes());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -33,8 +33,9 @@ public class DatabaseTableServiceImpl implements DatabaseTableService {
|
|||||||
@Override
|
@Override
|
||||||
public List<TableInfo> getTableList(Long dataSourceConfigId, String nameLike, String commentLike) {
|
public List<TableInfo> getTableList(Long dataSourceConfigId, String nameLike, String commentLike) {
|
||||||
List<TableInfo> tables = getTableList0(dataSourceConfigId, null);
|
List<TableInfo> tables = getTableList0(dataSourceConfigId, null);
|
||||||
return tables.stream().filter(tableInfo -> (StrUtil.isEmpty(nameLike) || tableInfo.getName().contains(nameLike))
|
return tables.stream().filter(tableInfo ->
|
||||||
&& (StrUtil.isEmpty(commentLike) || tableInfo.getComment().contains(commentLike)))
|
(StrUtil.isEmpty(nameLike) || tableInfo.getName().toLowerCase().contains(nameLike.toLowerCase()))
|
||||||
|
&& (StrUtil.isEmpty(commentLike) || tableInfo.getComment().contains(commentLike)))
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,13 @@
|
|||||||
|
package cn.iocoder.yudao.module.infra.service.shortlink;
|
||||||
|
|
||||||
|
public interface ShortLinkService {
|
||||||
|
/**
|
||||||
|
* 生成短链接
|
||||||
|
*/
|
||||||
|
String generateShortLink(String key, String url);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 解析短链接
|
||||||
|
*/
|
||||||
|
String parseShortLink(String shortKey);
|
||||||
|
}
|
||||||
@@ -0,0 +1,58 @@
|
|||||||
|
package cn.iocoder.yudao.module.infra.service.shortlink;
|
||||||
|
|
||||||
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
|
import org.springframework.data.redis.core.StringRedisTemplate;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import java.security.MessageDigest;
|
||||||
|
import java.security.NoSuchAlgorithmException;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
|
@Service
|
||||||
|
|
||||||
|
public class ShortLinkServiceImpl implements ShortLinkService {
|
||||||
|
private final StringRedisTemplate redisTemplate;
|
||||||
|
|
||||||
|
@Value("${yudao.shortlink.expire-seconds:30}")
|
||||||
|
private long expireSeconds;
|
||||||
|
|
||||||
|
public ShortLinkServiceImpl(StringRedisTemplate redisTemplate) {
|
||||||
|
this.redisTemplate = redisTemplate;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 生成短链接
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public String generateShortLink(String key, String url) {
|
||||||
|
// 使用url生成hash作为短链key
|
||||||
|
String hashKey = hashUrl(url);
|
||||||
|
// 存入Redis并设置过期时间
|
||||||
|
redisTemplate.opsForValue().set(hashKey, url, expireSeconds, TimeUnit.SECONDS);
|
||||||
|
return hashKey;
|
||||||
|
}
|
||||||
|
|
||||||
|
private String hashUrl(String url) {
|
||||||
|
try {
|
||||||
|
MessageDigest digest = MessageDigest.getInstance("SHA-256");
|
||||||
|
byte[] hash = digest.digest(url.getBytes());
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
// 只取前8字节,够短链用
|
||||||
|
for (int i = 0; i < 8 && i < hash.length; i++) {
|
||||||
|
sb.append(String.format("%02x", hash[i]));
|
||||||
|
}
|
||||||
|
return sb.toString();
|
||||||
|
} catch (NoSuchAlgorithmException e) {
|
||||||
|
throw new RuntimeException("Hash算法异常", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 解析短链接
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public String parseShortLink(String shortKey) {
|
||||||
|
// 直接从Redis获取
|
||||||
|
return redisTemplate.opsForValue().get(shortKey);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -114,5 +114,8 @@ spring:
|
|||||||
context-path: /admin # 配置 Spring
|
context-path: /admin # 配置 Spring
|
||||||
|
|
||||||
--- #################### 芋道相关配置 ####################
|
--- #################### 芋道相关配置 ####################
|
||||||
|
yudao:
|
||||||
|
shortlink:
|
||||||
|
server: "http://172.16.46.63:48080/admin-api/infra/shortlink/"
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -139,4 +139,6 @@ yudao:
|
|||||||
access-log: # 访问日志的配置项
|
access-log: # 访问日志的配置项
|
||||||
enable: true
|
enable: true
|
||||||
# 固定验证码
|
# 固定验证码
|
||||||
verify-code: 666666
|
verify-code: 666666
|
||||||
|
shortlink:
|
||||||
|
server: "http://localhost:48080/admin-api/infra/shortlink/"
|
||||||
Reference in New Issue
Block a user