From 8dd8e2e3886fc69265f020795f6ec717841a8114 Mon Sep 17 00:00:00 2001 From: fit2cloud-chenyw Date: Fri, 21 Jun 2024 15:51:01 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E4=BB=AA=E8=A1=A8=E6=9D=BF):=20=E4=BB=AA?= =?UTF-8?q?=E8=A1=A8=E6=9D=BF=E5=88=86=E4=BA=AB=E5=8A=9F=E8=83=BD=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0ticket=E8=AE=BE=E7=BD=AE=20#9835?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../io/dataease/MybatisPlusGenerator.java | 8 +- .../share/dao/auto/entity/XpackShare.java | 16 +- .../dao/auto/mapper/XpackShareMapper.java | 2 +- .../dao/ext/mapper/XpackShareExtMapper.java | 4 + .../share/manage/XpackShareManage.java | 12 +- .../main/resources/db/migration/V2.8__ddl.sql | 5 +- .../src/assets/svg/edit-done.svg | 3 + .../src/views/share/share/ShareHandler.vue | 27 +- .../src/views/share/share/ShareTicket.vue | 335 ++++++++++++++---- .../src/views/share/share/option.ts | 1 + .../api/xpack/share/ShareTicketApi.java | 29 ++ .../xpack/share/request/TicketCreator.java | 22 ++ .../xpack/share/request/TicketDelRequest.java | 14 + .../share/request/TicketSwitchRequest.java | 16 + .../share/request/XpackShareProxyRequest.java | 2 + .../dataease/api/xpack/share/vo/TicketVO.java | 27 ++ .../api/xpack/share/vo/TicketValidVO.java | 18 + .../api/xpack/share/vo/XpackShareProxyVO.java | 2 + .../api/xpack/share/vo/XpackShareVO.java | 2 + 19 files changed, 467 insertions(+), 78 deletions(-) create mode 100644 core/core-frontend/src/assets/svg/edit-done.svg create mode 100644 sdk/api/api-base/src/main/java/io/dataease/api/xpack/share/ShareTicketApi.java create mode 100644 sdk/api/api-base/src/main/java/io/dataease/api/xpack/share/request/TicketCreator.java create mode 100644 sdk/api/api-base/src/main/java/io/dataease/api/xpack/share/request/TicketDelRequest.java create mode 100644 sdk/api/api-base/src/main/java/io/dataease/api/xpack/share/request/TicketSwitchRequest.java create mode 100644 sdk/api/api-base/src/main/java/io/dataease/api/xpack/share/vo/TicketVO.java create mode 100644 sdk/api/api-base/src/main/java/io/dataease/api/xpack/share/vo/TicketValidVO.java diff --git a/core/core-backend/src/main/java/io/dataease/MybatisPlusGenerator.java b/core/core-backend/src/main/java/io/dataease/MybatisPlusGenerator.java index e648e87858..2c7d9c5aa8 100644 --- a/core/core-backend/src/main/java/io/dataease/MybatisPlusGenerator.java +++ b/core/core-backend/src/main/java/io/dataease/MybatisPlusGenerator.java @@ -14,18 +14,18 @@ public class MybatisPlusGenerator { * 第一 我嫌麻烦 * 第二 后面配置会放到nacos读起来更麻烦了 */ - private static final String url = "jdbc:mysql://localhost:3306/dataease?autoReconnect=false&useUnicode=true&characterEncoding=UTF-8&characterSetResults=UTF-8&zeroDateTimeBehavior=convertToNull&useSSL=false"; + private static final String url = "jdbc:mysql://localhost:3306/de_standalone?autoReconnect=false&useUnicode=true&characterEncoding=UTF-8&characterSetResults=UTF-8&zeroDateTimeBehavior=convertToNull&useSSL=false"; private static final String username = "root"; - private static final String password = "123456"; + private static final String password = "Password123@mysql"; /** * 业务模块例如datasource,dataset,panel等 */ - private static final String busi = "visualization"; + private static final String busi = "share"; /** * 这是要生成代码的表名称 */ - private static final String TABLE_NAME = "data_visualization_info"; + private static final String TABLE_NAME = "xpack_share"; /** * 下面两个配置基本上不用动 diff --git a/core/core-backend/src/main/java/io/dataease/share/dao/auto/entity/XpackShare.java b/core/core-backend/src/main/java/io/dataease/share/dao/auto/entity/XpackShare.java index 22861cab29..d4fb7720b7 100644 --- a/core/core-backend/src/main/java/io/dataease/share/dao/auto/entity/XpackShare.java +++ b/core/core-backend/src/main/java/io/dataease/share/dao/auto/entity/XpackShare.java @@ -9,7 +9,7 @@ import java.io.Serializable; *

* * @author fit2cloud - * @since 2024-04-07 + * @since 2024-06-21 */ @TableName("xpack_share") public class XpackShare implements Serializable { @@ -66,6 +66,11 @@ public class XpackShare implements Serializable { */ private Boolean autoPwd; + /** + * ticket必须 + */ + private Boolean ticketRequire; + public Long getId() { return id; } @@ -146,6 +151,14 @@ public class XpackShare implements Serializable { this.autoPwd = autoPwd; } + public Boolean getTicketRequire() { + return ticketRequire; + } + + public void setTicketRequire(Boolean ticketRequire) { + this.ticketRequire = ticketRequire; + } + @Override public String toString() { return "XpackShare{" + @@ -159,6 +172,7 @@ public class XpackShare implements Serializable { ", oid = " + oid + ", type = " + type + ", autoPwd = " + autoPwd + + ", ticketRequire = " + ticketRequire + "}"; } } diff --git a/core/core-backend/src/main/java/io/dataease/share/dao/auto/mapper/XpackShareMapper.java b/core/core-backend/src/main/java/io/dataease/share/dao/auto/mapper/XpackShareMapper.java index b2ecd60bb4..ffea74deac 100644 --- a/core/core-backend/src/main/java/io/dataease/share/dao/auto/mapper/XpackShareMapper.java +++ b/core/core-backend/src/main/java/io/dataease/share/dao/auto/mapper/XpackShareMapper.java @@ -10,7 +10,7 @@ import org.apache.ibatis.annotations.Mapper; *

* * @author fit2cloud - * @since 2024-04-07 + * @since 2024-06-21 */ @Mapper public interface XpackShareMapper extends BaseMapper { diff --git a/core/core-backend/src/main/java/io/dataease/share/dao/ext/mapper/XpackShareExtMapper.java b/core/core-backend/src/main/java/io/dataease/share/dao/ext/mapper/XpackShareExtMapper.java index 140f0b0a1a..fa437945f4 100644 --- a/core/core-backend/src/main/java/io/dataease/share/dao/ext/mapper/XpackShareExtMapper.java +++ b/core/core-backend/src/main/java/io/dataease/share/dao/ext/mapper/XpackShareExtMapper.java @@ -6,6 +6,7 @@ import io.dataease.share.dao.ext.po.XpackSharePO; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; +import org.apache.ibatis.annotations.Update; @Mapper public interface XpackShareExtMapper { @@ -28,4 +29,7 @@ public interface XpackShareExtMapper { @Select("select type from data_visualization_info where id = #{id}") String visualizationType(@Param("id") Long id); + + @Update("update core_share_ticket set uuid = #{ticketUuid} where uuid = #{originUuid}") + void updateTicketUuid(@Param("originUuid") String originUuid, @Param("ticketUuid") String ticketUuid); } diff --git a/core/core-backend/src/main/java/io/dataease/share/manage/XpackShareManage.java b/core/core-backend/src/main/java/io/dataease/share/manage/XpackShareManage.java index 9df28b897a..9392461ac8 100644 --- a/core/core-backend/src/main/java/io/dataease/share/manage/XpackShareManage.java +++ b/core/core-backend/src/main/java/io/dataease/share/manage/XpackShareManage.java @@ -7,6 +7,7 @@ import io.dataease.api.visualization.request.VisualizationWorkbranchQueryRequest import io.dataease.api.xpack.share.request.XpackShareProxyRequest; import io.dataease.api.xpack.share.request.XpackSharePwdValidator; import io.dataease.api.xpack.share.request.XpackShareUuidEditor; +import io.dataease.api.xpack.share.vo.TicketValidVO; import io.dataease.api.xpack.share.vo.XpackShareGridVO; import io.dataease.api.xpack.share.vo.XpackShareProxyVO; import io.dataease.auth.bo.TokenUserBO; @@ -28,6 +29,7 @@ import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.RandomStringUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.HashMap; @@ -46,6 +48,9 @@ public class XpackShareManage { @Resource(name = "xpackShareExtMapper") private XpackShareExtMapper xpackShareExtMapper; + @Resource + private ShareTicketManage shareTicketManage; + public XpackShare queryByResource(Long resourceId) { Long userId = AuthUtils.getUser().getUserId(); QueryWrapper queryWrapper = new QueryWrapper<>(); @@ -54,10 +59,12 @@ public class XpackShareManage { return xpackShareMapper.selectOne(queryWrapper); } + @Transactional public void switcher(Long resourceId) { XpackShare originData = queryByResource(resourceId); if (ObjectUtils.isNotEmpty(originData)) { xpackShareMapper.deleteById(originData.getId()); + shareTicketManage.deleteByShare(originData.getUuid()); return; } TokenUserBO user = AuthUtils.getUser(); @@ -74,6 +81,7 @@ public class XpackShareManage { xpackShareMapper.insert(xpackShare); } + @Transactional public String editUuid(XpackShareUuidEditor editor) { Long resourceId = editor.getResourceId(); String uuid = editor.getUuid(); @@ -98,6 +106,7 @@ public class XpackShareManage { if (!matcher.matches()) { return "仅支持8-16位(字母数字),请重新输入!"; } + shareTicketManage.updateByUuidChange(originData.getUuid(), uuid); originData.setUuid(uuid); xpackShareMapper.updateById(originData); return ""; @@ -196,7 +205,8 @@ public class XpackShareManage { response.addHeader(AuthConstant.LINK_TOKEN_KEY, linkToken); Integer type = xpackShare.getType(); String typeText = (ObjectUtils.isNotEmpty(type) && type == 1) ? "dashboard" : "dataV"; - return new XpackShareProxyVO(xpackShare.getResourceId(), xpackShare.getCreator(), linkExp(xpackShare), pwdValid(xpackShare, request.getCiphertext()), typeText, inIframeError); + TicketValidVO validVO = shareTicketManage.validateTicket(request.getTicket(), xpackShare); + return new XpackShareProxyVO(xpackShare.getResourceId(), xpackShare.getCreator(), linkExp(xpackShare), pwdValid(xpackShare, request.getCiphertext()), typeText, inIframeError, validVO); } private boolean linkExp(XpackShare xpackShare) { diff --git a/core/core-backend/src/main/resources/db/migration/V2.8__ddl.sql b/core/core-backend/src/main/resources/db/migration/V2.8__ddl.sql index 369bac5301..dc361259ef 100644 --- a/core/core-backend/src/main/resources/db/migration/V2.8__ddl.sql +++ b/core/core-backend/src/main/resources/db/migration/V2.8__ddl.sql @@ -17,4 +17,7 @@ CREATE TABLE `xpack_plugin` `module_name` varchar(255) NOT NULL COMMENT '模块名称', `jar_name` varchar(255) NOT NULL COMMENT 'Jar包名称', PRIMARY KEY (`id`) -) COMMENT ='插件表'; \ No newline at end of file +) COMMENT ='插件表'; + +ALTER TABLE `xpack_share` + ADD COLUMN `ticket_require` tinyint(1) NOT NULL DEFAULT 0 COMMENT 'ticket必须' AFTER `auto_pwd`; \ No newline at end of file diff --git a/core/core-frontend/src/assets/svg/edit-done.svg b/core/core-frontend/src/assets/svg/edit-done.svg new file mode 100644 index 0000000000..e2049b6b67 --- /dev/null +++ b/core/core-frontend/src/assets/svg/edit-done.svg @@ -0,0 +1,3 @@ + + + diff --git a/core/core-frontend/src/views/share/share/ShareHandler.vue b/core/core-frontend/src/views/share/share/ShareHandler.vue index 043501118c..c68c07d22f 100644 --- a/core/core-frontend/src/views/share/share/ShareHandler.vue +++ b/core/core-frontend/src/views/share/share/ShareHandler.vue @@ -16,7 +16,10 @@