From ef1821679acfce76e59c21d6db37490fa34ec36b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=A9=AC=E5=93=A5?= <2310732606@qq.com> Date: Sat, 7 Aug 2021 08:03:55 +0000 Subject: [PATCH 01/17] update README.md. --- README.md | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 8cfffca..1cc7c8c 100644 --- a/README.md +++ b/README.md @@ -20,6 +20,14 @@ Tduck 填鸭:是基于B/S架构的一款开源的表单在线收集系统, - 表单设置:支持多种收集方式设置 - 反馈统计:多维度统计收集的反馈数据 +### 项目源码 + +| 后端源码 | 前端源码 | +|--- | --- | +| https://gitee.com/TDuckApp/tduck-platform | https://gitee.com/TDuckApp/tduck-front | +| https://github.com/TDuckCloud/tduck-platform | https://github.com/TDuckCloud/tduck-front | + + ### 演示环境&详细文档👮‍♀️ - 演示地址:http://demo.tduckapp.com/ - 演示账号/密码:扫码注册登录 @@ -30,16 +38,14 @@ Tduck 填鸭:是基于B/S架构的一款开源的表单在线收集系统, - 获取《tduck-纯小白部署教程》请加入社群获取 - 开源不易如果喜欢请给作者 Star 鼓励 +### 参与调研 :star: +亲爱的Tducker,感谢你选择使用Tduck表单系统。 +为了功能更加完善以及能够为开源做更多贡献; +我们迫切需要了解一些信息,如果可以,请帮助完成填写[来访者调研表单](https://demo.tduckapp.com/s/4d162343d29e494ea1701c7c9b368332) + ### 加入社群 logo -### 项目源码 - -| 后端源码 | 前端源码 | -|--- | --- | -| https://gitee.com/TDuckApp/tduck-platform | https://gitee.com/TDuckApp/tduck-front | -| https://github.com/TDuckCloud/tduck-platform | https://github.com/TDuckCloud/tduck-front | - 感谢:logo 提供云服务器资源! From c0e0233adb54e1e6907e3846d12f895dcd9d6e30 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=A9=AC=E5=93=A5?= <2310732606@qq.com> Date: Sat, 7 Aug 2021 08:04:27 +0000 Subject: [PATCH 02/17] update README.md. --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 1cc7c8c..d46114d 100644 --- a/README.md +++ b/README.md @@ -41,7 +41,8 @@ Tduck 填鸭:是基于B/S架构的一款开源的表单在线收集系统, ### 参与调研 :star: 亲爱的Tducker,感谢你选择使用Tduck表单系统。 为了功能更加完善以及能够为开源做更多贡献; -我们迫切需要了解一些信息,如果可以,请帮助完成填写[来访者调研表单](https://demo.tduckapp.com/s/4d162343d29e494ea1701c7c9b368332) +我们迫切需要了解一些信息 +如果可以,请帮助完成填写[来访者调研表单](https://demo.tduckapp.com/s/4d162343d29e494ea1701c7c9b368332) ### 加入社群 logo From c2ae77d0f6c5b2040717cfd3a3976afad3fd9733 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=A9=AC=E5=93=A5?= <2310732606@qq.com> Date: Sat, 7 Aug 2021 08:05:59 +0000 Subject: [PATCH 03/17] update README.md. --- README.md | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index d46114d..1dff528 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,6 @@ Tduck, Form collection system Tduck 填鸭:是基于B/S架构的一款开源的表单在线收集系统,为企业构建自己的信息反馈系统的综合解决方案,助力企业提高反馈收集客户服务效率。 -### 应用场景 主要应用与泛零售、电商、金融、调研、资料收集等行业用户,提供多种工具、多渠道、多方式收集有效信息,更好的提升客户服务,增加客户满意度。 @@ -39,10 +38,10 @@ Tduck 填鸭:是基于B/S架构的一款开源的表单在线收集系统, - 开源不易如果喜欢请给作者 Star 鼓励 ### 参与调研 :star: -亲爱的Tducker,感谢你选择使用Tduck表单系统。 -为了功能更加完善以及能够为开源做更多贡献; -我们迫切需要了解一些信息 -如果可以,请帮助完成填写[来访者调研表单](https://demo.tduckapp.com/s/4d162343d29e494ea1701c7c9b368332) +亲爱的Tducker,感谢你选择使用Tduck表单系统;为了功能更加完善以及能够为开源做更多贡献 + + +我们迫切需要了解一些信息,如果可以,请帮助完成填写[来访者调研表单](https://demo.tduckapp.com/s/4d162343d29e494ea1701c7c9b368332) ### 加入社群 logo From 1558f010f588f88622277463e65e88e07f6ad4ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=A9=AC=E5=93=A5?= <2310732606@qq.com> Date: Sat, 7 Aug 2021 08:16:44 +0000 Subject: [PATCH 04/17] update README.md. --- README.md | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 1dff528..50e9613 100644 --- a/README.md +++ b/README.md @@ -44,10 +44,8 @@ Tduck 填鸭:是基于B/S架构的一款开源的表单在线收集系统, 我们迫切需要了解一些信息,如果可以,请帮助完成填写[来访者调研表单](https://demo.tduckapp.com/s/4d162343d29e494ea1701c7c9b368332) ### 加入社群 - logo + logo -感谢:logo -提供云服务器资源! ### “项目背景” 目前市面上的表单平台虽然功能强大,但是部分业务组件或者额外收取存储等费用,且费用较高,在数据隐私性较强且有特殊表单需求的场景下无法满足业务需求, @@ -87,4 +85,11 @@ Tduck 填鸭:是基于B/S架构的一款开源的表单在线收集系统, ![输入图片说明](https://images.gitee.com/uploads/images/2021/0625/000932_eb5728c8_1674451.png "屏幕截图.png") ![输入图片说明](https://images.gitee.com/uploads/images/2021/0625/001013_eb945bce_1674451.png "屏幕截图.png") ![输入图片说明](https://images.gitee.com/uploads/images/2021/0625/001053_f3c320c4_1674451.png "屏幕截图.png") -![输入图片说明](https://images.gitee.com/uploads/images/2021/0625/001803_d0b579e3_1674451.png "屏幕截图.png") \ No newline at end of file +![输入图片说明](https://images.gitee.com/uploads/images/2021/0625/001803_d0b579e3_1674451.png "屏幕截图.png") + +### 致谢 :heart: +- 感谢[Ucloud优刻得](https://www.ucloud.cn/)提供服务器资源 +- 感谢公众号:“各种折腾”贡献详细部署文档 +- 感谢博主[@daishenghui](https://daishenghui.club/)贡献docker镜像/视频 +- 感谢捐赠区支持Tduck的伙伴 +- 感谢积极为Tduck版本优化贡献力量的小伙伴 \ No newline at end of file From a2de837dc88b78e3ade2e65f8be5f7babcd8e305 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=A9=AC=E5=93=A5?= <2310732606@qq.com> Date: Mon, 9 Aug 2021 12:48:54 +0000 Subject: [PATCH 05/17] update README.md. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 50e9613..f5705bb 100644 --- a/README.md +++ b/README.md @@ -32,7 +32,7 @@ Tduck 填鸭:是基于B/S架构的一款开源的表单在线收集系统, - 演示账号/密码:扫码注册登录 - 文档地址:http://demo.tduckapp.com/ - V2更新日志:https://doc.tduckapp.com/log/ -- 部署默认账号: test@tduck.com/12345678 +- 部署默认账号: test@tduckapp.com/12345678 - 获取《使用Docker运行Tduck》教程请加入社群获取 - 获取《tduck-纯小白部署教程》请加入社群获取 - 开源不易如果喜欢请给作者 Star 鼓励 From e6eea2800bd676d7a349a07ba88968a6961a02ae Mon Sep 17 00:00:00 2001 From: wangqing <250543222@qq.com> Date: Mon, 9 Aug 2021 23:07:55 +0800 Subject: [PATCH 06/17] update sql --- doc/tduck.sql | 37 ++++++++++++++++--------------------- 1 file changed, 16 insertions(+), 21 deletions(-) diff --git a/doc/tduck.sql b/doc/tduck.sql index 863ca58..e9b8245 100644 --- a/doc/tduck.sql +++ b/doc/tduck.sql @@ -1,22 +1,16 @@ /* Navicat Premium Data Transfer - Source Server : ivo Source Server Type : MySQL Source Server Version : 50718 - Source Host : sh-cynosdbmysql-grp-e911sges.sql.tencentcdb.com:29062 Source Schema : tduck - Target Server Type : MySQL - Target Server Version : 50718 - File Encoding : 65001 Date: 17/07/2021 15:12:39 */ SET NAMES utf8mb4; -SET -FOREIGN_KEY_CHECKS = 0; +SET FOREIGN_KEY_CHECKS = 0; -- ---------------------------- -- Table structure for ac_user @@ -39,7 +33,7 @@ CREATE TABLE `ac_user` `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 945 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '用户' ROW_FORMAT = DYNAMIC; +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '用户' ROW_FORMAT = DYNAMIC; -- ---------------------------- -- Table structure for ac_user_authorize @@ -57,7 +51,7 @@ CREATE TABLE `ac_user_authorize` `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '第三方用户授权信息' ROW_FORMAT = DYNAMIC; +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '第三方用户授权信息' ROW_FORMAT = DYNAMIC; -- ---------------------------- -- Table structure for pr_project_template @@ -77,7 +71,7 @@ CREATE TABLE `pr_project_template` `create_time` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', PRIMARY KEY (`id`) USING BTREE, UNIQUE INDEX `code`(`key`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 341 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '项目表' ROW_FORMAT = DYNAMIC; +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '项目表' ROW_FORMAT = DYNAMIC; -- ---------------------------- -- Table structure for pr_project_template_category @@ -117,7 +111,7 @@ CREATE TABLE `pr_project_template_item` `is_display_type` tinyint(1) NOT NULL DEFAULT 0 COMMENT '展示类型组件', PRIMARY KEY (`id`) USING BTREE, INDEX `project_key`(`project_key`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 2451 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '项目表单项' ROW_FORMAT = DYNAMIC; +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '项目表单项' ROW_FORMAT = DYNAMIC; -- ---------------------------- -- Table structure for pr_project_theme @@ -134,7 +128,7 @@ CREATE TABLE `pr_project_theme` `update_time` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间', `create_time` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 216 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '项目主题外观模板' ROW_FORMAT = Dynamic; +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '项目主题外观模板' ROW_FORMAT = Dynamic; -- ---------------------------- -- Table structure for pr_user_project @@ -156,7 +150,7 @@ CREATE TABLE `pr_user_project` `create_time` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', PRIMARY KEY (`id`) USING BTREE, UNIQUE INDEX `code`(`key`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 4081 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '项目表' ROW_FORMAT = DYNAMIC; +) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '项目表' ROW_FORMAT = DYNAMIC; -- ---------------------------- -- Table structure for pr_user_project_item @@ -182,7 +176,7 @@ CREATE TABLE `pr_user_project_item` `create_time` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', PRIMARY KEY (`id`) USING BTREE, INDEX `project_key`(`project_key`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 30013 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '项目表单项' ROW_FORMAT = DYNAMIC; +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '项目表单项' ROW_FORMAT = DYNAMIC; -- ---------------------------- -- Table structure for pr_user_project_logic @@ -199,7 +193,7 @@ CREATE TABLE `pr_user_project_logic` `update_time` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (`id`) USING BTREE, INDEX `project_key`(`project_key`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 569 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '项目逻辑' ROW_FORMAT = DYNAMIC; +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '项目逻辑' ROW_FORMAT = DYNAMIC; -- ---------------------------- -- Table structure for pr_user_project_result @@ -224,7 +218,7 @@ CREATE TABLE `pr_user_project_result` `update_time` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (`id`) USING BTREE, INDEX `project_key`(`project_key`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 2226 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '项目表单项' ROW_FORMAT = DYNAMIC; +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '项目表单项' ROW_FORMAT = DYNAMIC; -- ---------------------------- -- Table structure for pr_user_project_setting @@ -259,7 +253,7 @@ CREATE TABLE `pr_user_project_setting` `create_time` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', PRIMARY KEY (`id`) USING BTREE, UNIQUE INDEX `project_key`(`project_key`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 530 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '项目表单项' ROW_FORMAT = DYNAMIC; +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '项目表单项' ROW_FORMAT = DYNAMIC; -- ---------------------------- -- Table structure for pr_user_project_theme @@ -282,7 +276,7 @@ CREATE TABLE `pr_user_project_theme` `create_time` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', PRIMARY KEY (`id`) USING BTREE, UNIQUE INDEX `project_key`(`project_key`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 945 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '项目表单项' ROW_FORMAT = DYNAMIC; +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '项目表单项' ROW_FORMAT = DYNAMIC; -- ---------------------------- -- Table structure for wx_mp_user @@ -306,7 +300,8 @@ CREATE TABLE `wx_mp_user` `create_time` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', PRIMARY KEY (`id`) USING BTREE, INDEX `wx_union_id`(`head_img_url`(191)) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 728 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '微信公众号用户 ' ROW_FORMAT = DYNAMIC; +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '微信公众号用户 ' ROW_FORMAT = DYNAMIC; + +INSERT INTO `tduck`.`ac_user`( `name`, `avatar`, `gender`, `email`, `phone_number`, `password`, `reg_channel`, `last_login_channel`, `last_login_time`, `last_login_ip`, `deleted`, `create_time`, `update_time`) VALUES ( 'Tduck001', 'https://oss.smileyi.top/757b505cfd34c64c85ca5b5690ee5293/4c415e1c1af04af68d740e667819bece.png', 0, 'test@tduckapp.com', NULL, 'ef797c8118f02dfb649607dd5d3f8c7623048c9c063d532cc95c5ed7a898a64f', '1', 2, '2021-06-24 11:08:21', '111.30.56.26', 0, '2020-11-12 11:50:50', '2021-06-24 11:08:21'); -SET -FOREIGN_KEY_CHECKS = 1; +SET FOREIGN_KEY_CHECKS = 1; From a728b974a9c440fbb1e4f2b598667bdacf8636c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=A9=AC=E5=93=A5?= <2310732606@qq.com> Date: Wed, 18 Aug 2021 05:40:15 +0000 Subject: [PATCH 07/17] update README.md. --- README.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index f5705bb..2816cd9 100644 --- a/README.md +++ b/README.md @@ -92,4 +92,7 @@ Tduck 填鸭:是基于B/S架构的一款开源的表单在线收集系统, - 感谢公众号:“各种折腾”贡献详细部署文档 - 感谢博主[@daishenghui](https://daishenghui.club/)贡献docker镜像/视频 - 感谢捐赠区支持Tduck的伙伴 -- 感谢积极为Tduck版本优化贡献力量的小伙伴 \ No newline at end of file +- 感谢积极为Tduck版本优化贡献力量的小伙伴 + +## Stargazers over time +[![Stargazers over time](https://whnb.wang/stars/kekingcn/file-online-preview?e=86400)](https://whnb.wang) \ No newline at end of file From 7b87916174a54febf02c43241246b185338bd4b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=A9=AC=E5=93=A5?= <2310732606@qq.com> Date: Wed, 18 Aug 2021 05:41:33 +0000 Subject: [PATCH 08/17] update README.md. --- README.md | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/README.md b/README.md index 2816cd9..f5705bb 100644 --- a/README.md +++ b/README.md @@ -92,7 +92,4 @@ Tduck 填鸭:是基于B/S架构的一款开源的表单在线收集系统, - 感谢公众号:“各种折腾”贡献详细部署文档 - 感谢博主[@daishenghui](https://daishenghui.club/)贡献docker镜像/视频 - 感谢捐赠区支持Tduck的伙伴 -- 感谢积极为Tduck版本优化贡献力量的小伙伴 - -## Stargazers over time -[![Stargazers over time](https://whnb.wang/stars/kekingcn/file-online-preview?e=86400)](https://whnb.wang) \ No newline at end of file +- 感谢积极为Tduck版本优化贡献力量的小伙伴 \ No newline at end of file From 2923a9c05f21ee9ed991e244e85d1400e992c09b Mon Sep 17 00:00:00 2001 From: wangqing Date: Fri, 20 Aug 2021 11:22:55 +0800 Subject: [PATCH 09/17] =?UTF-8?q?fix=EF=BC=9A=E8=A1=A8=E5=8D=95=E5=AF=BC?= =?UTF-8?q?=E5=87=BA=E5=88=97=E4=B8=A2=E5=A4=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cloud/common/sms/AliyunSmsServiceImpl.java | 2 +- .../impl/UserProjectResultServiceImpl.java | 18 +++++++++++++++--- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/tduck-common/src/main/java/com/tduck/cloud/common/sms/AliyunSmsServiceImpl.java b/tduck-common/src/main/java/com/tduck/cloud/common/sms/AliyunSmsServiceImpl.java index 2610224..eeef0f8 100644 --- a/tduck-common/src/main/java/com/tduck/cloud/common/sms/AliyunSmsServiceImpl.java +++ b/tduck-common/src/main/java/com/tduck/cloud/common/sms/AliyunSmsServiceImpl.java @@ -14,7 +14,7 @@ import java.util.Map; /** * @author : smalljop - * @description : 腾讯云短信 + * @description : 阿里云短信 * @create : 2020-12-15 10:33 **/ @Data diff --git a/tduck-project/src/main/java/com/tduck/cloud/project/service/impl/UserProjectResultServiceImpl.java b/tduck-project/src/main/java/com/tduck/cloud/project/service/impl/UserProjectResultServiceImpl.java index 9822c5e..4a82b3a 100644 --- a/tduck-project/src/main/java/com/tduck/cloud/project/service/impl/UserProjectResultServiceImpl.java +++ b/tduck-project/src/main/java/com/tduck/cloud/project/service/impl/UserProjectResultServiceImpl.java @@ -36,6 +36,7 @@ import org.springframework.stereotype.Service; import java.io.File; import java.io.FileInputStream; import java.util.*; +import java.util.concurrent.atomic.AtomicReference; import java.util.stream.Collectors; import static com.tduck.cloud.project.constant.ProjectRedisKeyConstants.PROJECT_RESULT_NUMBER; @@ -108,17 +109,28 @@ public class UserProjectResultServiceImpl extends ServiceImpl isFillRow = new AtomicReference<>(false); List> resultList = resultEntityList.stream().map(item -> { Map processData = item.getProcessData(); + if (!isFillRow.get()) { + titleList.stream() + .map(ExportProjectResultVO.ExcelHeader::getFieldKey).collect(Collectors.toList()).forEach(key -> { + if (!processData.containsKey(key)) + processData.put(key, StrUtil.EMPTY); + }); + isFillRow.set(true); + } Iterator iterator = processData.keySet().iterator(); while (iterator.hasNext()) { String key = iterator.next(); - if (!titleList.stream() - .map(ExportProjectResultVO.ExcelHeader::getFieldKey).collect(Collectors.toList()).contains(key)) { + List titleStrList = titleList.stream() + .map(ExportProjectResultVO.ExcelHeader::getFieldKey).collect(Collectors.toList()); + // 不存在导出列的数据移除掉 避免多于字段导致excel格式错乱 + if (!titleStrList.contains(key)) { iterator.remove(); } } - processData.put(BaseEntity.Fields.createTime, item.getCreateTime()); processData.put(UserProjectResultEntity.Fields.submitAddress, item.getSubmitAddress()); return processData; From eaae37b63bd9bdbfa65fc54f0335b4f39548c57c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=A9=AC=E5=93=A5?= <2310732606@qq.com> Date: Mon, 23 Aug 2021 04:38:52 +0000 Subject: [PATCH 10/17] update README.md. --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index f5705bb..c1e03f8 100644 --- a/README.md +++ b/README.md @@ -35,6 +35,7 @@ Tduck 填鸭:是基于B/S架构的一款开源的表单在线收集系统, - 部署默认账号: test@tduckapp.com/12345678 - 获取《使用Docker运行Tduck》教程请加入社群获取 - 获取《tduck-纯小白部署教程》请加入社群获取 +- 提问的艺术:http://t.hk.uy/KME - 开源不易如果喜欢请给作者 Star 鼓励 ### 参与调研 :star: From 86c053f44733a17dda70673675c076a6a6dac25f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=A9=AC=E5=93=A5?= <2310732606@qq.com> Date: Fri, 27 Aug 2021 05:10:54 +0000 Subject: [PATCH 11/17] update README.md. --- README.md | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index c1e03f8..5e1a287 100644 --- a/README.md +++ b/README.md @@ -52,6 +52,11 @@ Tduck 填鸭:是基于B/S架构的一款开源的表单在线收集系统, 目前市面上的表单平台虽然功能强大,但是部分业务组件或者额外收取存储等费用,且费用较高,在数据隐私性较强且有特殊表单需求的场景下无法满足业务需求, 目前国内的的开源平台表单问卷平台比较少,tduck表单平台应运而生。让中小公司拥有独立自定义表单问卷,快速赋能业务。 + +## Stargazers over time +[![Stargazers over time](https://whnb.wang/stars/TDuckApp/tduck-platform)](https://whnb.wang) + + ### “V2新特性” - 【表单逻辑】支持对单选,多选框,下拉框等组件进行逻辑设置,目前仅支持选中 未选中等逻辑关系 @@ -93,4 +98,8 @@ Tduck 填鸭:是基于B/S架构的一款开源的表单在线收集系统, - 感谢公众号:“各种折腾”贡献详细部署文档 - 感谢博主[@daishenghui](https://daishenghui.club/)贡献docker镜像/视频 - 感谢捐赠区支持Tduck的伙伴 -- 感谢积极为Tduck版本优化贡献力量的小伙伴 \ No newline at end of file +- 感谢积极为Tduck版本优化贡献力量的小伙伴 + +### 项目贡献者 +## contributors +[![contributors](https://whnb.wang/contributors/TDuckApp/tduck-platform)](https://whnb.wang) \ No newline at end of file From aa8d18f0d52edfe7111bbc7e47921245cfcf7006 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=A9=AC=E5=93=A5?= <2310732606@qq.com> Date: Sat, 28 Aug 2021 07:09:27 +0000 Subject: [PATCH 12/17] update README.md. --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 5e1a287..bdd9338 100644 --- a/README.md +++ b/README.md @@ -89,9 +89,11 @@ Tduck 填鸭:是基于B/S架构的一款开源的表单在线收集系统, ![输入图片说明](https://images.gitee.com/uploads/images/2021/0729/205432_6ee1e855_1674451.png "微信截图_20210729205409.png") ![输入图片说明](https://images.gitee.com/uploads/images/2021/0625/000932_eb5728c8_1674451.png "屏幕截图.png") +![表单页](https://images.gitee.com/uploads/images/2021/0828/150919_35bfaceb_1674451.png "屏幕截图.png") ![输入图片说明](https://images.gitee.com/uploads/images/2021/0625/001013_eb945bce_1674451.png "屏幕截图.png") ![输入图片说明](https://images.gitee.com/uploads/images/2021/0625/001053_f3c320c4_1674451.png "屏幕截图.png") ![输入图片说明](https://images.gitee.com/uploads/images/2021/0625/001803_d0b579e3_1674451.png "屏幕截图.png") +![模板界面](https://images.gitee.com/uploads/images/2021/0828/145804_14bc4c1d_1674451.png "屏幕截图.png") ### 致谢 :heart: - 感谢[Ucloud优刻得](https://www.ucloud.cn/)提供服务器资源 From 565ca361ec330b54c9ec04f45fd09a37f581acd3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=A9=AC=E5=93=A5?= <2310732606@qq.com> Date: Sat, 28 Aug 2021 07:11:02 +0000 Subject: [PATCH 13/17] update README.md. --- README.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/README.md b/README.md index bdd9338..74a91a1 100644 --- a/README.md +++ b/README.md @@ -88,11 +88,9 @@ Tduck 填鸭:是基于B/S架构的一款开源的表单在线收集系统, “让每个企业轻松拥有自己的问卷系统”是Tduck团队不变的初衷;v2版本的开发工作目前算是暂时结束,经过团队内部自测推出,同时欢迎大家进行测试,对存在的问题在Gitee提issues,社群内反馈可能无法及时解决,后续可能会遗忘。我们会定期对issues问题修复和做一些优化,竭力维护一个稳定的v2版本。 ![输入图片说明](https://images.gitee.com/uploads/images/2021/0729/205432_6ee1e855_1674451.png "微信截图_20210729205409.png") -![输入图片说明](https://images.gitee.com/uploads/images/2021/0625/000932_eb5728c8_1674451.png "屏幕截图.png") +![输入图片说明](https://images.gitee.com/uploads/images/2021/0828/151052_d9af3089_1674451.png "屏幕截图.png") ![表单页](https://images.gitee.com/uploads/images/2021/0828/150919_35bfaceb_1674451.png "屏幕截图.png") ![输入图片说明](https://images.gitee.com/uploads/images/2021/0625/001013_eb945bce_1674451.png "屏幕截图.png") -![输入图片说明](https://images.gitee.com/uploads/images/2021/0625/001053_f3c320c4_1674451.png "屏幕截图.png") -![输入图片说明](https://images.gitee.com/uploads/images/2021/0625/001803_d0b579e3_1674451.png "屏幕截图.png") ![模板界面](https://images.gitee.com/uploads/images/2021/0828/145804_14bc4c1d_1674451.png "屏幕截图.png") ### 致谢 :heart: From da40d2fee5c994a184df8f09d9d5cc4d44602a3b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=A9=AC=E5=93=A5?= <2310732606@qq.com> Date: Sat, 28 Aug 2021 07:12:38 +0000 Subject: [PATCH 14/17] update README.md. --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 74a91a1..29e3a3a 100644 --- a/README.md +++ b/README.md @@ -87,10 +87,10 @@ Tduck 填鸭:是基于B/S架构的一款开源的表单在线收集系统, ### “项目规划” “让每个企业轻松拥有自己的问卷系统”是Tduck团队不变的初衷;v2版本的开发工作目前算是暂时结束,经过团队内部自测推出,同时欢迎大家进行测试,对存在的问题在Gitee提issues,社群内反馈可能无法及时解决,后续可能会遗忘。我们会定期对issues问题修复和做一些优化,竭力维护一个稳定的v2版本。 -![输入图片说明](https://images.gitee.com/uploads/images/2021/0729/205432_6ee1e855_1674451.png "微信截图_20210729205409.png") -![输入图片说明](https://images.gitee.com/uploads/images/2021/0828/151052_d9af3089_1674451.png "屏幕截图.png") +![首页](https://images.gitee.com/uploads/images/2021/0729/205432_6ee1e855_1674451.png "微信截图_20210729205409.png") +![登录界面](https://images.gitee.com/uploads/images/2021/0828/151216_aad75126_1674451.png "屏幕截图.png") +![编辑界面](https://images.gitee.com/uploads/images/2021/0828/151052_d9af3089_1674451.png "屏幕截图.png") ![表单页](https://images.gitee.com/uploads/images/2021/0828/150919_35bfaceb_1674451.png "屏幕截图.png") -![输入图片说明](https://images.gitee.com/uploads/images/2021/0625/001013_eb945bce_1674451.png "屏幕截图.png") ![模板界面](https://images.gitee.com/uploads/images/2021/0828/145804_14bc4c1d_1674451.png "屏幕截图.png") ### 致谢 :heart: From 68c11fa74541e0091ad837d46d00ba90ad727d57 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=A9=AC=E5=93=A5?= <2310732606@qq.com> Date: Sat, 28 Aug 2021 07:22:18 +0000 Subject: [PATCH 15/17] update README.md. --- README.md | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 29e3a3a..1a53c5f 100644 --- a/README.md +++ b/README.md @@ -53,10 +53,6 @@ Tduck 填鸭:是基于B/S架构的一款开源的表单在线收集系统, 目前国内的的开源平台表单问卷平台比较少,tduck表单平台应运而生。让中小公司拥有独立自定义表单问卷,快速赋能业务。 -## Stargazers over time -[![Stargazers over time](https://whnb.wang/stars/TDuckApp/tduck-platform)](https://whnb.wang) - - ### “V2新特性” - 【表单逻辑】支持对单选,多选框,下拉框等组件进行逻辑设置,目前仅支持选中 未选中等逻辑关系 @@ -100,6 +96,9 @@ Tduck 填鸭:是基于B/S架构的一款开源的表单在线收集系统, - 感谢捐赠区支持Tduck的伙伴 - 感谢积极为Tduck版本优化贡献力量的小伙伴 + +[![Stargazers over time](https://whnb.wang/stars/TDuckApp/tduck-platform)](https://whnb.wang) + ### 项目贡献者 ## contributors [![contributors](https://whnb.wang/contributors/TDuckApp/tduck-platform)](https://whnb.wang) \ No newline at end of file From 603889c1e420b9dab535eaddcd4e3224564fd54b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=A9=AC=E5=93=A5?= <2310732606@qq.com> Date: Sat, 28 Aug 2021 07:25:08 +0000 Subject: [PATCH 16/17] update README.md. --- README.md | 35 ++++++++++++----------------------- 1 file changed, 12 insertions(+), 23 deletions(-) diff --git a/README.md b/README.md index 1a53c5f..2bde26e 100644 --- a/README.md +++ b/README.md @@ -1,20 +1,11 @@

logo

### 平台简介 - -Tduck, Form collection system Tduck 填鸭:是基于B/S架构的一款开源的表单在线收集系统,为企业构建自己的信息反馈系统的综合解决方案,助力企业提高反馈收集客户服务效率。 - - 主要应用与泛零售、电商、金融、调研、资料收集等行业用户,提供多种工具、多渠道、多方式收集有效信息,更好的提升客户服务,增加客户满意度。 ### 功能特性 ##### 界面美观,全新element-ui支持,使用流畅 -- 以一种全新的设计体验,告别繁琐的设计流程 -- 通过简单有趣的方式,轻轻松松完成表单设计 -- 支持表单样式模板选择,只为显现更精美的表单 - -##### 三大模块助力企业能力升级: - 新建表单:自定义可拖拽式表单设计 - 表单设置:支持多种收集方式设置 - 反馈统计:多维度统计收集的反馈数据 @@ -26,7 +17,6 @@ Tduck 填鸭:是基于B/S架构的一款开源的表单在线收集系统, | https://gitee.com/TDuckApp/tduck-platform | https://gitee.com/TDuckApp/tduck-front | | https://github.com/TDuckCloud/tduck-platform | https://github.com/TDuckCloud/tduck-front | - ### 演示环境&详细文档👮‍♀️ - 演示地址:http://demo.tduckapp.com/ - 演示账号/密码:扫码注册登录 @@ -53,8 +43,19 @@ Tduck 填鸭:是基于B/S架构的一款开源的表单在线收集系统, 目前国内的的开源平台表单问卷平台比较少,tduck表单平台应运而生。让中小公司拥有独立自定义表单问卷,快速赋能业务。 -### “V2新特性” +### “文档支持” +新的文档平台,后续会不断完善文档,有需要完善的内容可以在GItee提issues反馈,收到反馈我们将第一时间调整,当然有想共享文档的也欢迎提Pr。 + +### “项目规划及界面” +“让每个企业轻松拥有自己的问卷系统”是Tduck团队不变的初衷;v2版本的开发工作目前算是暂时结束,经过团队内部自测推出,同时欢迎大家进行测试,对存在的问题在Gitee提issues,社群内反馈可能无法及时解决,后续可能会遗忘。我们会定期对issues问题修复和做一些优化,竭力维护一个稳定的v2版本。 + +![首页](https://images.gitee.com/uploads/images/2021/0729/205432_6ee1e855_1674451.png "微信截图_20210729205409.png") +![登录界面](https://images.gitee.com/uploads/images/2021/0828/151216_aad75126_1674451.png "屏幕截图.png") +![编辑界面](https://images.gitee.com/uploads/images/2021/0828/151052_d9af3089_1674451.png "屏幕截图.png") +![表单页](https://images.gitee.com/uploads/images/2021/0828/150919_35bfaceb_1674451.png "屏幕截图.png") +![模板界面](https://images.gitee.com/uploads/images/2021/0828/145804_14bc4c1d_1674451.png "屏幕截图.png") +### “V2新特性” - 【表单逻辑】支持对单选,多选框,下拉框等组件进行逻辑设置,目前仅支持选中 未选中等逻辑关系 - 【表单分页】支持对问卷问题较多时,进行分页 - 【手写签名】支持手写签名保存上传 @@ -77,18 +78,6 @@ Tduck 填鸭:是基于B/S架构的一款开源的表单在线收集系统, - 【微信功能】 微信功能增加开关配置,可配置关闭微信功能 - 【代码优化】对前后端代码进行部分优化,结构调整 -### “文档支持” -新的文档平台,后续会不断完善文档,有需要完善的内容可以在GItee提issues反馈,收到反馈我们将第一时间调整,当然有想共享文档的也欢迎提Pr。 - -### “项目规划” -“让每个企业轻松拥有自己的问卷系统”是Tduck团队不变的初衷;v2版本的开发工作目前算是暂时结束,经过团队内部自测推出,同时欢迎大家进行测试,对存在的问题在Gitee提issues,社群内反馈可能无法及时解决,后续可能会遗忘。我们会定期对issues问题修复和做一些优化,竭力维护一个稳定的v2版本。 - -![首页](https://images.gitee.com/uploads/images/2021/0729/205432_6ee1e855_1674451.png "微信截图_20210729205409.png") -![登录界面](https://images.gitee.com/uploads/images/2021/0828/151216_aad75126_1674451.png "屏幕截图.png") -![编辑界面](https://images.gitee.com/uploads/images/2021/0828/151052_d9af3089_1674451.png "屏幕截图.png") -![表单页](https://images.gitee.com/uploads/images/2021/0828/150919_35bfaceb_1674451.png "屏幕截图.png") -![模板界面](https://images.gitee.com/uploads/images/2021/0828/145804_14bc4c1d_1674451.png "屏幕截图.png") - ### 致谢 :heart: - 感谢[Ucloud优刻得](https://www.ucloud.cn/)提供服务器资源 - 感谢公众号:“各种折腾”贡献详细部署文档 From e5d4897bfa7347100c39ea9504f6dcaeae247dbc Mon Sep 17 00:00:00 2001 From: SoDoEasy Date: Wed, 15 Sep 2021 12:03:40 +0800 Subject: [PATCH 17/17] =?UTF-8?q?SSO=E7=B1=BB=E5=9E=8B=20=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0MiniO=E5=AF=B9=E8=B1=A1=E5=AD=98=E5=82=A8=E6=94=AF?= =?UTF-8?q?=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tduck-storage/pom.xml | 7 +- .../storage/cloud/MIniOStorageService.java | 69 ++++++ .../storage/cloud/OssStorageFactory.java | 2 + .../storage/entity/enums/MimeTypeEnum.java | 216 ++++++++++++++++++ .../storage/entity/enums/OssTypeEnum.java | 6 +- 5 files changed, 298 insertions(+), 2 deletions(-) create mode 100644 tduck-storage/src/main/java/com/tduck/cloud/storage/cloud/MIniOStorageService.java create mode 100644 tduck-storage/src/main/java/com/tduck/cloud/storage/entity/enums/MimeTypeEnum.java diff --git a/tduck-storage/pom.xml b/tduck-storage/pom.xml index b472bc4..d68dfe3 100644 --- a/tduck-storage/pom.xml +++ b/tduck-storage/pom.xml @@ -38,5 +38,10 @@ com.upyun java-sdk + + io.minio + minio + 7.0.2 + - \ No newline at end of file + diff --git a/tduck-storage/src/main/java/com/tduck/cloud/storage/cloud/MIniOStorageService.java b/tduck-storage/src/main/java/com/tduck/cloud/storage/cloud/MIniOStorageService.java new file mode 100644 index 0000000..4f6da96 --- /dev/null +++ b/tduck-storage/src/main/java/com/tduck/cloud/storage/cloud/MIniOStorageService.java @@ -0,0 +1,69 @@ +package com.tduck.cloud.storage.cloud; + +import com.tduck.cloud.storage.entity.enums.MimeTypeEnum; +import com.tduck.cloud.storage.exception.StorageException; +import io.minio.MinioClient; +import io.minio.PutObjectOptions; +import io.minio.errors.InvalidEndpointException; +import io.minio.errors.InvalidPortException; + +import java.io.ByteArrayInputStream; +import java.io.InputStream; + +/** + * @author pfwang + */ +public class MIniOStorageService extends OssStorageService { + + private MinioClient client; + + public MIniOStorageService(OssStorageConfig config) { + this.config = config; + //初始化 + init(); + } + + private void init() { + try { + client = new MinioClient(config.getEndpoint(), config.getAccessKeyId(), config.getAccessKeySecret(), false); + } catch (InvalidEndpointException e) { + e.printStackTrace(); + } catch (InvalidPortException e) { + e.printStackTrace(); + } + } + + @Override + public String upload(InputStream inputStream, String path) { + try { + PutObjectOptions poo = new PutObjectOptions(inputStream.available(), -1); + poo.setContentType(MimeTypeEnum.getContentType(path)); + client.putObject(config.getBucketName(), path, inputStream, poo); + } catch (Exception e) { + throw new StorageException("上传文件失败,请检查配置信息", e); + } + return config.getDomain() + "/" + path; + } + + @Override + public String upload(byte[] data, String path) { + try { + PutObjectOptions poo = new PutObjectOptions(data.length, -1); + poo.setContentType(MimeTypeEnum.getContentType(path)); + client.putObject(config.getBucketName(), path, new ByteArrayInputStream(data), poo); + } catch (Exception e) { + throw new StorageException("上传文件失败,请检查配置信息", e); + } + return config.getDomain() + "/" + path; + } + + @Override + public void delete(String path) { + try { + client.removeObject(config.getBucketName(), path); + } catch (Exception e) { + throw new StorageException("删除文件失败", e); + } + } + +} diff --git a/tduck-storage/src/main/java/com/tduck/cloud/storage/cloud/OssStorageFactory.java b/tduck-storage/src/main/java/com/tduck/cloud/storage/cloud/OssStorageFactory.java index 6c54f87..4c2e7ef 100644 --- a/tduck-storage/src/main/java/com/tduck/cloud/storage/cloud/OssStorageFactory.java +++ b/tduck-storage/src/main/java/com/tduck/cloud/storage/cloud/OssStorageFactory.java @@ -26,6 +26,8 @@ public final class OssStorageFactory { return new UpyunStorageService(config); } else if (config.getOssType() == OssTypeEnum.LOCAL) { return new localStorageService(config); + }else if (config.getOssType() == OssTypeEnum.MINIO) { + return new MIniOStorageService(config); } return null; } diff --git a/tduck-storage/src/main/java/com/tduck/cloud/storage/entity/enums/MimeTypeEnum.java b/tduck-storage/src/main/java/com/tduck/cloud/storage/entity/enums/MimeTypeEnum.java new file mode 100644 index 0000000..d6efc27 --- /dev/null +++ b/tduck-storage/src/main/java/com/tduck/cloud/storage/entity/enums/MimeTypeEnum.java @@ -0,0 +1,216 @@ +package com.tduck.cloud.storage.entity.enums; + +import lombok.Getter; +import org.apache.commons.lang3.StringUtils; + +/** + * 文件后缀名与ContentType + * @author pfwang + */ +@Getter +public enum MimeTypeEnum { + + AAC("acc", "AAC音频", "audio/aac"), + + ABW("abw", "AbiWord文件", "application/x-abiword"), + + ARC("arc", "存档文件", "application/x-freearc"), + + AVI("avi", "音频视频交错格式", "video/x-msvideo"), + + AZW("azw", "亚马逊Kindle电子书格式", "application/vnd.amazon.ebook"), + + BIN("bin", "任何类型的二进制数据", "application/octet-stream"), + + BMP("bmp", "Windows OS / 2位图图形", "image/bmp"), + + BZ("bz", "BZip存档", "application/x-bzip"), + + BZ2("bz2", "BZip2存档", "application/x-bzip2"), + + CSH("csh", "C-Shell脚本", "application/x-csh"), + + CSS("css", "级联样式表(CSS)", "text/css"), + + CSV("csv", "逗号分隔值(CSV)", "text/csv"), + + DOC("doc", "微软Word文件", "application/msword"), + + DOCX("docx", "Microsoft Word(OpenXML)", "application/vnd.openxmlformats-officedocument.wordprocessingml.document"), + + EOT("eot", "MS Embedded OpenType字体", "application/vnd.ms-fontobject"), + + EPUB("epub", "电子出版物(EPUB)", "application/epub+zip"), + + GZ("gz", "GZip压缩档案", "application/gzip"), + + GIF("gif", "图形交换格式(GIF)", "image/gif"), + + HTM("htm", "超文本标记语言(HTML)", "text/html"), + + HTML("html", "超文本标记语言(HTML)", "text/html"), + + ICO("ico", "图标格式", "image/vnd.microsoft.icon"), + + ICS("ics", "iCalendar格式", "text/calendar"), + + JAR("jar", "Java存档", "application/java-archive"), + + JPEG("jpeg", "JPEG图像", "image/jpeg"), + + JPG("jpg", "JPEG图像", "image/jpeg"), + + JS("js", "JavaScript", "text/javascript"), + + JSON("json", "JSON格式", "application/json"), + + JSONLD("jsonld", "JSON-LD格式", "application/ld+json"), + + MID("mid", "乐器数字接口(MIDI)", "audio/midi"), + + MIDI("midi", "乐器数字接口(MIDI)", "audio/midi"), + + MJS("mjs", "JavaScript模块", "text/javascript"), + + MP3("mp3", "MP3音频", "audio/mpeg"), + + MPEG("mpeg", "MPEG视频", "video/mpeg"), + + MPKG("mpkg", "苹果安装程序包", "application/vnd.apple.installer+xml"), + + ODP("odp", "OpenDocument演示文稿文档", "application/vnd.oasis.opendocument.presentation"), + + ODS("ods", "OpenDocument电子表格文档", "application/vnd.oasis.opendocument.spreadsheet"), + + ODT("odt", "OpenDocument文字文件", "application/vnd.oasis.opendocument.text"), + + OGA("oga", "OGG音讯", "audio/ogg"), + + OGV("ogv", "OGG视频", "video/ogg"), + + OGX("ogx", "OGG", "application/ogg"), + + OPUS("opus", "OPUS音频", "audio/opus"), + + OTF("otf", "otf字体", "font/otf"), + + PNG("png", "便携式网络图形", "image/png"), + + PDF("pdf", "Adobe 可移植文档格式(PDF)", "application/pdf"), + + PHP("php", "php", "application/x-httpd-php"), + + PPT("ppt", "Microsoft PowerPoint", "application/vnd.ms-powerpoint"), + + PPTX("pptx", "Microsoft PowerPoint(OpenXML)", "application/vnd.openxmlformats-officedocument.presentationml.presentation"), + + RAR("rar", "RAR档案", "application/vnd.rar"), + + RTF("rtf", "富文本格式", "application/rtf"), + + SH("sh", "Bourne Shell脚本", "application/x-sh"), + + SVG("svg", "可缩放矢量图形(SVG)", "image/svg+xml"), + + SWF("swf", "小型Web格式(SWF)或Adobe Flash文档", "application/x-shockwave-flash"), + + TAR("tar", "磁带存档(TAR)", "application/x-tar"), + + TIF("tif", "标记图像文件格式(TIFF)", "image/tiff"), + + TIFF("tiff", "标记图像文件格式(TIFF)", "image/tiff"), + + TS("ts", "MPEG传输流", "video/mp2t"), + + TTF("ttf", "ttf字体", "font/ttf"), + + TXT("txt", "文本(通常为ASCII或ISO 8859- n", "text/plain"), + + VSD("vsd", "微软Visio", "application/vnd.visio"), + + WAV("wav", "波形音频格式", "audio/wav"), + + WEBA("weba", "WEBM音频", "audio/webm"), + + WEBM("webm", "WEBM视频", "video/webm"), + + WEBP("webp", "WEBP图像", "image/webp"), + + WOFF("woff", "Web开放字体格式(WOFF)", "font/woff"), + + WOFF2("woff2", "Web开放字体格式(WOFF)", "font/woff2"), + + XHTML("xhtml", "XHTML", "application/xhtml+xml"), + + XLS("xls", "微软Excel", "application/vnd.ms-excel"), + + XLSX("xlsx", "微软Excel(OpenXML)", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"), + + XML("xml", "XML", "application/xml"), + + XUL("xul", "XUL", "application/vnd.mozilla.xul+xml"), + + ZIP("zip", "ZIP", "application/zip"), + + MIME_3GP("3gp", "3GPP audio/video container", "video/3gpp"), + + MIME_3GP_WITHOUT_VIDEO("3gp", "3GPP audio/video container doesn't contain video", "audio/3gpp2"), + + MIME_3G2("3g2", "3GPP2 audio/video container", "video/3gpp2"), + + MIME_3G2_WITHOUT_VIDEO("3g2", "3GPP2 audio/video container doesn't contain video", "audio/3gpp2"), + + MIME_7Z("7z", "7-zip存档", "application/x-7z-compressed"); + + //扩展名 + private final String extension; + //说明 + private final String explain; + //contentType/mime类型 + private final String mimeType; + + /** + * @param extension 上传的文件扩展名 + * @param explain 类型说明 + * @param mimeType Mime对应的类型 + */ + MimeTypeEnum(String extension, String explain, String mimeType) { + this.extension = extension; + this.explain = explain; + this.mimeType = mimeType; + } + + /** + * 通过扩展名获取枚举类型 + * + * @param extension 扩展名 + * @return 枚举类 + */ + public static MimeTypeEnum getByExtension(String extension) { + if (StringUtils.isEmpty(extension)) { + return null; + } + for (MimeTypeEnum typesEnum : MimeTypeEnum.values()) { + if (extension.equals(typesEnum.getExtension())) { + return typesEnum; + } + } + return null; + } + + /** + * Content-Type常用对照 + * 根据后缀获取Mime + * + * @param path 文件名 + * @return mime类型 + */ + public static String getContentType(String path) { + String fileType = path.substring(path.lastIndexOf(".") + 1); + MimeTypeEnum mimeTypeEnum = MimeTypeEnum.getByExtension(fileType); + if (mimeTypeEnum != null) { + return mimeTypeEnum.getMimeType(); + } + return "application/octet-stream"; + } +} diff --git a/tduck-storage/src/main/java/com/tduck/cloud/storage/entity/enums/OssTypeEnum.java b/tduck-storage/src/main/java/com/tduck/cloud/storage/entity/enums/OssTypeEnum.java index c0eae9b..8fe18a4 100644 --- a/tduck-storage/src/main/java/com/tduck/cloud/storage/entity/enums/OssTypeEnum.java +++ b/tduck-storage/src/main/java/com/tduck/cloud/storage/entity/enums/OssTypeEnum.java @@ -29,8 +29,12 @@ public enum OssTypeEnum { /** * 本地存储 */ - LOCAL(3); + LOCAL(3), + /** + * minio + */ + MINIO(4); @EnumValue @JsonValue