From 3f20e23bb9fba34cf9d7baa2b7a9daf8210d304c Mon Sep 17 00:00:00 2001 From: fit2cloud-chenyw Date: Tue, 15 Feb 2022 11:37:13 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=85=AC=E5=85=B1=E9=93=BE=E6=8E=A5?= =?UTF-8?q?=E4=BD=BF=E7=94=A88=E4=BD=8D=E9=9A=8F=E6=9C=BA=E5=AD=97?= =?UTF-8?q?=E7=AC=A6=E5=90=8E=E7=BC=80,=E5=85=BC=E5=AE=B9=E8=80=81?= =?UTF-8?q?=E7=89=88=E6=9C=AC=E6=95=B0=E5=AD=97=E5=90=8E=E7=BC=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../base/domain/PanelLinkMapping.java | 2 + .../base/domain/PanelLinkMappingExample.java | 70 +++++++++++++++++++ .../base/mapper/PanelLinkMappingMapper.xml | 29 ++++++-- .../io/dataease/commons/utils/CodingUtil.java | 30 ++++++++ .../dataease/controller/IndexController.java | 12 +++- .../service/panel/PanelLinkService.java | 24 ++++++- .../main/resources/db/migration/V32__1.8.sql | 3 + 7 files changed, 160 insertions(+), 10 deletions(-) diff --git a/backend/src/main/java/io/dataease/base/domain/PanelLinkMapping.java b/backend/src/main/java/io/dataease/base/domain/PanelLinkMapping.java index 7321d46342..0bb0bebfd3 100644 --- a/backend/src/main/java/io/dataease/base/domain/PanelLinkMapping.java +++ b/backend/src/main/java/io/dataease/base/domain/PanelLinkMapping.java @@ -11,5 +11,7 @@ public class PanelLinkMapping implements Serializable { private Long userId; + private String uuid; + private static final long serialVersionUID = 1L; } \ No newline at end of file diff --git a/backend/src/main/java/io/dataease/base/domain/PanelLinkMappingExample.java b/backend/src/main/java/io/dataease/base/domain/PanelLinkMappingExample.java index a4e98885dc..baa9094e73 100644 --- a/backend/src/main/java/io/dataease/base/domain/PanelLinkMappingExample.java +++ b/backend/src/main/java/io/dataease/base/domain/PanelLinkMappingExample.java @@ -293,6 +293,76 @@ public class PanelLinkMappingExample { addCriterion("user_id not between", value1, value2, "userId"); return (Criteria) this; } + + public Criteria andUuidIsNull() { + addCriterion("uuid is null"); + return (Criteria) this; + } + + public Criteria andUuidIsNotNull() { + addCriterion("uuid is not null"); + return (Criteria) this; + } + + public Criteria andUuidEqualTo(String value) { + addCriterion("uuid =", value, "uuid"); + return (Criteria) this; + } + + public Criteria andUuidNotEqualTo(String value) { + addCriterion("uuid <>", value, "uuid"); + return (Criteria) this; + } + + public Criteria andUuidGreaterThan(String value) { + addCriterion("uuid >", value, "uuid"); + return (Criteria) this; + } + + public Criteria andUuidGreaterThanOrEqualTo(String value) { + addCriterion("uuid >=", value, "uuid"); + return (Criteria) this; + } + + public Criteria andUuidLessThan(String value) { + addCriterion("uuid <", value, "uuid"); + return (Criteria) this; + } + + public Criteria andUuidLessThanOrEqualTo(String value) { + addCriterion("uuid <=", value, "uuid"); + return (Criteria) this; + } + + public Criteria andUuidLike(String value) { + addCriterion("uuid like", value, "uuid"); + return (Criteria) this; + } + + public Criteria andUuidNotLike(String value) { + addCriterion("uuid not like", value, "uuid"); + return (Criteria) this; + } + + public Criteria andUuidIn(List values) { + addCriterion("uuid in", values, "uuid"); + return (Criteria) this; + } + + public Criteria andUuidNotIn(List values) { + addCriterion("uuid not in", values, "uuid"); + return (Criteria) this; + } + + public Criteria andUuidBetween(String value1, String value2) { + addCriterion("uuid between", value1, value2, "uuid"); + return (Criteria) this; + } + + public Criteria andUuidNotBetween(String value1, String value2) { + addCriterion("uuid not between", value1, value2, "uuid"); + return (Criteria) this; + } } public static class Criteria extends GeneratedCriteria { diff --git a/backend/src/main/java/io/dataease/base/mapper/PanelLinkMappingMapper.xml b/backend/src/main/java/io/dataease/base/mapper/PanelLinkMappingMapper.xml index 1ec9fe2a52..aa8ee9b55e 100644 --- a/backend/src/main/java/io/dataease/base/mapper/PanelLinkMappingMapper.xml +++ b/backend/src/main/java/io/dataease/base/mapper/PanelLinkMappingMapper.xml @@ -5,6 +5,7 @@ + @@ -65,7 +66,7 @@ - id, resource_id, user_id + id, resource_id, user_id, uuid @@ -146,6 +153,9 @@ user_id = #{record.userId,jdbcType=BIGINT}, + + uuid = #{record.uuid,jdbcType=VARCHAR}, + @@ -155,7 +165,8 @@ update panel_link_mapping set id = #{record.id,jdbcType=BIGINT}, resource_id = #{record.resourceId,jdbcType=VARCHAR}, - user_id = #{record.userId,jdbcType=BIGINT} + user_id = #{record.userId,jdbcType=BIGINT}, + uuid = #{record.uuid,jdbcType=VARCHAR} @@ -169,13 +180,17 @@ user_id = #{userId,jdbcType=BIGINT}, + + uuid = #{uuid,jdbcType=VARCHAR}, + where id = #{id,jdbcType=BIGINT} update panel_link_mapping set resource_id = #{resourceId,jdbcType=VARCHAR}, - user_id = #{userId,jdbcType=BIGINT} + user_id = #{userId,jdbcType=BIGINT}, + uuid = #{uuid,jdbcType=VARCHAR} where id = #{id,jdbcType=BIGINT} \ No newline at end of file diff --git a/backend/src/main/java/io/dataease/commons/utils/CodingUtil.java b/backend/src/main/java/io/dataease/commons/utils/CodingUtil.java index ca256b47b7..ec283b549b 100644 --- a/backend/src/main/java/io/dataease/commons/utils/CodingUtil.java +++ b/backend/src/main/java/io/dataease/commons/utils/CodingUtil.java @@ -7,6 +7,7 @@ import javax.crypto.*; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.SecretKeySpec; import java.security.MessageDigest; +import java.util.UUID; /** * 加密解密工具 @@ -19,6 +20,13 @@ public class CodingUtil { private static final char[] HEX_DIGITS = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'}; + + public static String[] chars = new String[] { "a", "b", "c", "d", "e", "f", + "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", + "t", "u", "v", "w", "x", "y", "z", "0", "1", "2", "3", "4", "5", + "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "I", + "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", + "W", "X", "Y", "Z" }; /** * MD5加密 * @@ -165,4 +173,26 @@ public class CodingUtil { } } + + public static boolean isNumeric(String str){ + for (int i = str.length();--i>=0;){ + if (!Character.isDigit(str.charAt(i))){ + return false; + } + } + return true; + } + + + + public static String shortUuid() { + StringBuffer shortBuffer = new StringBuffer(); + String uuid = UUID.randomUUID().toString().replace("-", ""); + for (int i = 0; i < 8; i++) { + String str = uuid.substring(i * 4, i * 4 + 4); + int x = Integer.parseInt(str, 16); + shortBuffer.append(chars[x % 0x3E]); + } + return shortBuffer.toString(); + } } diff --git a/backend/src/main/java/io/dataease/controller/IndexController.java b/backend/src/main/java/io/dataease/controller/IndexController.java index e9d77d1056..e2c5128d71 100644 --- a/backend/src/main/java/io/dataease/controller/IndexController.java +++ b/backend/src/main/java/io/dataease/controller/IndexController.java @@ -3,6 +3,7 @@ package io.dataease.controller; import io.dataease.commons.exception.DEException; import io.dataease.commons.license.DefaultLicenseService; import io.dataease.commons.license.F2CLicenseResponse; +import io.dataease.commons.utils.CodingUtil; import io.dataease.commons.utils.LogUtil; import io.dataease.commons.utils.ServletUtils; import io.dataease.service.panel.PanelLinkService; @@ -48,8 +49,13 @@ public class IndexController { } @GetMapping("/link/{index}") - public void link(@PathVariable(value = "index", required = true) Long index) { - String url = panelLinkService.getUrlByIndex(index); + public void link(@PathVariable(value = "index", required = true) String index) { + String url; + if (CodingUtil.isNumeric(index)) { + url = panelLinkService.getUrlByIndex(Long.parseLong(index)); + }else { + url = panelLinkService.getUrlByUuid(index); + } HttpServletResponse response = ServletUtils.response(); try { response.sendRedirect(url); @@ -59,6 +65,8 @@ public class IndexController { } } + + @GetMapping("/tempMobileLink/{id}/{token}") public void tempMobileLink(@PathVariable("id") String id, @PathVariable("token") String token) { String url = "/#preview/" + id; diff --git a/backend/src/main/java/io/dataease/service/panel/PanelLinkService.java b/backend/src/main/java/io/dataease/service/panel/PanelLinkService.java index 2ec72e2990..fb9f271662 100644 --- a/backend/src/main/java/io/dataease/service/panel/PanelLinkService.java +++ b/backend/src/main/java/io/dataease/service/panel/PanelLinkService.java @@ -8,7 +8,9 @@ import io.dataease.base.mapper.PanelGroupMapper; import io.dataease.base.mapper.PanelLinkMapper; import io.dataease.base.mapper.PanelLinkMappingMapper; import io.dataease.base.mapper.ext.ExtPanelLinkMapper; +import io.dataease.commons.exception.DEException; import io.dataease.commons.utils.AuthUtils; +import io.dataease.commons.utils.CodingUtil; import io.dataease.commons.utils.ServletUtils; import io.dataease.controller.request.panel.link.EnablePwdRequest; import io.dataease.controller.request.panel.link.LinkRequest; @@ -114,7 +116,13 @@ public class PanelLinkService { PanelLinkMapping mapping = new PanelLinkMapping(); mapping.setResourceId(resourceId); mapping.setUserId(AuthUtils.getUser().getUserId()); + mapping.setUuid(CodingUtil.shortUuid()); panelLinkMappingMapper.insert(mapping); + }else { + mappings.stream().filter(mapping -> StringUtils.isBlank(mapping.getUuid())).forEach(item -> { + item.setUuid(CodingUtil.shortUuid()); + panelLinkMappingMapper.updateByPrimaryKey(item); + }); } return convertDto(one); } @@ -206,7 +214,7 @@ public class PanelLinkService { example.createCriteria().andResourceIdEqualTo(resourceId).andUserIdEqualTo(AuthUtils.getUser().getUserId()); List mappings = panelLinkMappingMapper.selectByExample(example); PanelLinkMapping mapping = mappings.get(0); - return SHORT_URL_PREFIX + mapping.getId(); + return SHORT_URL_PREFIX + mapping.getUuid(); } public String getUrlByIndex(Long index) { @@ -216,4 +224,18 @@ public class PanelLinkService { PanelLink one = findOne(resourceId, userId); return convertDto(one).getUri(); } + + public String getUrlByUuid(String uuid) { + PanelLinkMappingExample example = new PanelLinkMappingExample(); + example.createCriteria().andUuidEqualTo(uuid); + List mappings = panelLinkMappingMapper.selectByExample(example); + if (CollectionUtils.isEmpty(mappings)) { + DEException.throwException("link is not exist"); + } + PanelLinkMapping mapping = mappings.get(0); + String resourceId = mapping.getResourceId(); + Long userId = mapping.getUserId(); + PanelLink one = findOne(resourceId, userId); + return convertDto(one).getUri(); + } } diff --git a/backend/src/main/resources/db/migration/V32__1.8.sql b/backend/src/main/resources/db/migration/V32__1.8.sql index a5615ccf45..8f57f6b9cd 100644 --- a/backend/src/main/resources/db/migration/V32__1.8.sql +++ b/backend/src/main/resources/db/migration/V32__1.8.sql @@ -197,3 +197,6 @@ SELECT `plugin_sys_menu`.`i_frame` <> 1 ) OR isnull( `plugin_sys_menu`.`i_frame` )); + +ALTER TABLE `panel_link_mapping` +ADD COLUMN `uuid` varchar(8) NULL COMMENT 'uuid' AFTER `user_id`;