From 4467d152800cafa4ef9ade907af01f2f8caf5dc0 Mon Sep 17 00:00:00 2001 From: nigulasifenhongma <43560796+nigulasifenhongma@users.noreply.github.com> Date: Wed, 20 Jan 2021 18:01:17 +0800 Subject: [PATCH 001/181] Update README.md --- README.md | 71 +++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 45 insertions(+), 26 deletions(-) diff --git a/README.md b/README.md index 0c9780d..2793348 100644 --- a/README.md +++ b/README.md @@ -1,75 +1,85 @@ -[![s8sdOO.png](https://s3.ax1x.com/2021/01/11/s8sdOO.png)](https://imgchr.com/i/s8sdOO) +

+

+

+ logo +

+

Tduck 填鸭 —— 让每个企业都有自己的表单收集系统

-Tduck —— 让每个企业都有自己的表单收集系统 +![ ](https://img.shields.io/:license-apache-blue.svg) +![ ](https://img.shields.io/badge/JDK-1.8+-red.svg) +![ ](https://img.shields.io/badge/BY-SpringBoot-green) +![ ](https://img.shields.io/badge/front-vue%2Belement--ui-blue) - -# 平台简介 +### 平台简介 Tduck, Form collection system -Tduck 是一款基于B/S架构的表单收集系统,为企业构建自己的信息反馈系统的综合解决方案,助力企业提高反馈收集客户服务效率。 - - - - +Tduck 填鸭:是一款基于B/S架构的表单收集系统,为企业构建自己的信息反馈系统的综合解决方案,助力企业提高反馈收集客户服务效率。 - -# 应用场景 +### 应用场景 主要应用与泛零售、电商、金融、调研、资料收集等行业用户,提供多种工具、多渠道、多方式收集有效信息,更好的提升客户服务,增加客户满意度。 -# 功能特性 - -三大模块助力企业营销能力升级: -新建表单:自定义可拖拽式表单设计 -表单设置:支持多种收集方式设置 -反馈统计:多维度统计收集的反馈数据 +### 功能特性 +##### 界面美观,全新element-ui支持,使用流畅 +- 以一种全新的设计体验,告别繁琐的设计流程 +- 通过简单有趣的方式,轻轻松松完成问卷设计 +- 支持问卷样式模板选择,只为显现更精美的表单问卷 +##### 三大模块助力企业能力升级: +- 新建表单:自定义可拖拽式表单设计 +- 表单设置:支持多种收集方式设置 +- 反馈统计:多维度统计收集的反馈数据 -# 在线体验 +## 在线体验 +![首页](https://images.gitee.com/uploads/images/2021/0120/121740_1fcdc627_1674451.png "屏幕截图.png") 演示地址:http://tduck.smileyi.top/ (访问比较慢) 演示账号/密码:可注册登录或使用测试账号 test@tduck.com/12345678 -# 技术体系 +## 技术体系 -## 服务端 +### 服务端 + +``` - SpringBoot 2.3.5 - Mybatis-Plus - Lombok - Hutool - Guava +``` +### 客户端 -## 客户端 - +``` - Vue2 - ElementUI - Echarts - Axios - nprogress +``` -## 后端项目结构 +### 后端项目结构 - tduck-common 通用模块 - tduck-account 账号模块 - tduck-storage 存储模块 - tduck-project 项目模块 - tduck-wx-mp 微信公众号模块 -- -tduck-api 客户端API +- tduck-api 客户端API -## 快速启动 +### 快速启动 1. 配置最小开发环境: @@ -111,6 +121,15 @@ Tduck 是一款基于B/S架构的表单收集系统,为企业构建自己的 |--- | --- | | https://gitee.com/TDuckApp/tduck-platform | https://gitee.com/TDuckApp/tduck-front | +## 项目规划 +![tduck登录页](https://images.gitee.com/uploads/images/2021/0112/124009_1573a7c5_1674451.png "屏幕截图.png") +![首页](https://images.gitee.com/uploads/images/2021/0112/124033_27eb486e_1674451.png "屏幕截图.png") +![我的表单](https://images.gitee.com/uploads/images/2021/0112/124102_c1615270_1674451.png "屏幕截图.png") +![自定义编辑](https://images.gitee.com/uploads/images/2021/0112/124136_db03b4ce_1674451.png "屏幕截图.png") +目前完成框架,细节正在不断完善中,欢迎提出更多意见~ +## 加入社群 +![输入图片说明](https://images.gitee.com/uploads/images/2021/0112/123754_9128ad9b_1674451.png "屏幕截图.png") -**TDuck 使用 Apache License 2.0 协议,源代码完全开源,无商业限制。 开源不易如果喜欢请给作者 Star 鼓励 👇** \ No newline at end of file +**TDuck 使用 Apache License 2.0 协议,源代码完全开源,无商业限制。 +开源不易如果喜欢请给作者 Star 鼓励 👇** From d6bb1e71f998482b254e0d7fa65e9732e8581fa0 Mon Sep 17 00:00:00 2001 From: wangqing Date: Tue, 16 Feb 2021 22:12:42 +0800 Subject: [PATCH 002/181] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E9=BB=98=E8=AE=A4?= =?UTF-8?q?=E7=94=A8=E6=88=B7sql?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/tduck.sql | 2 ++ 1 file changed, 2 insertions(+) diff --git a/doc/tduck.sql b/doc/tduck.sql index dd7a51b..a34fec0 100644 --- a/doc/tduck.sql +++ b/doc/tduck.sql @@ -270,3 +270,5 @@ CREATE TABLE `wx_mp_user` ( ) ENGINE = InnoDB AUTO_INCREMENT = 6 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '微信公众号用户 ' ROW_FORMAT = DYNAMIC; SET FOREIGN_KEY_CHECKS = 1; + +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://freebrio.oss-cn-shanghai.aliyuncs.com/t/avatar.jpg', 0, 'test@tduck.com', NULL, 'ef797c8118f02dfb649607dd5d3f8c7623048c9c063d532cc95c5ed7a898a64f', '1', 2, '2021-01-12 17:45:41', '58.39.239.51', 0, '2020-11-12 11:50:50', '2021-01-12 17:45:41'); From 667e826d70588c03bf0b9b60295660c11397ffee Mon Sep 17 00:00:00 2001 From: wangqing Date: Thu, 4 Mar 2021 17:42:04 +0800 Subject: [PATCH 003/181] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E8=A1=A8=E5=8D=95?= =?UTF-8?q?=E9=BB=98=E8=AE=A4=E5=80=BC=E4=B8=8D=E8=83=BD=E6=81=A2=E5=A4=8D?= =?UTF-8?q?=E4=B8=BA=E7=A9=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 - .../cloud/api/web/controller/UserProjectController.java | 5 ++--- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 2793348..4fafe41 100644 --- a/README.md +++ b/README.md @@ -87,7 +87,6 @@ Tduck 填鸭:是一款基于B/S架构的表单收集系统,为企业构建 * [JDK1.8或以上](http://www.oracle.com/technetwork/java/javase/overview/index.html) * [Maven](https://maven.apache.org/download.cgi) * [Nodejs](https://nodejs.org/en/download/) - * [微信开发者工具](https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html) 2. 创建一个tduck的数据库,并执行项目目录下doc/tduck.sql文件 diff --git a/tduck-api/src/main/java/com/tduck/cloud/api/web/controller/UserProjectController.java b/tduck-api/src/main/java/com/tduck/cloud/api/web/controller/UserProjectController.java index 2814d79..1a69370 100644 --- a/tduck-api/src/main/java/com/tduck/cloud/api/web/controller/UserProjectController.java +++ b/tduck-api/src/main/java/com/tduck/cloud/api/web/controller/UserProjectController.java @@ -270,11 +270,10 @@ private UserProjectItemEntity formatProjectItem(OperateProjectItemRequest reques if (ObjectUtil.isNotEmpty(defaultValue)) { boolean json = JSONUtil.isJson(JsonUtils.objToJson(request.getDefaultValue())); if (json) { - entity.setDefaultValue(new ItemDefaultValueStruct(json, JsonUtils.objToJson(request.getDefaultValue()))); - } else { - entity.setDefaultValue(new ItemDefaultValueStruct(json, defaultValue)); + entity.setDefaultValue(new ItemDefaultValueStruct(true, JsonUtils.objToJson(request.getDefaultValue()))); } } + entity.setDefaultValue(new ItemDefaultValueStruct(false, defaultValue)); return entity; } From 8ef9702375e880e41a66d49559e09af235f91c0d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=A9=AC=E5=93=A5?= <2310732606@qq.com> Date: Mon, 8 Mar 2021 10:26:53 +0800 Subject: [PATCH 004/181] update README.md. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 4fafe41..04ddeb0 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@

logo

-

Tduck 填鸭 —— 让每个企业都有自己的表单收集系统

+

Tduck 填鸭 —— 表单收集器

![ ](https://img.shields.io/:license-apache-blue.svg) ![ ](https://img.shields.io/badge/JDK-1.8+-red.svg) From 10f96d2cff6e2589353a88498f1ab2610fd54d80 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=A9=AC=E5=93=A5?= <2310732606@qq.com> Date: Mon, 8 Mar 2021 14:14:36 +0800 Subject: [PATCH 005/181] update README.md. --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 04ddeb0..fc25c2b 100644 --- a/README.md +++ b/README.md @@ -125,6 +125,7 @@ Tduck 填鸭:是一款基于B/S架构的表单收集系统,为企业构建 ![首页](https://images.gitee.com/uploads/images/2021/0112/124033_27eb486e_1674451.png "屏幕截图.png") ![我的表单](https://images.gitee.com/uploads/images/2021/0112/124102_c1615270_1674451.png "屏幕截图.png") ![自定义编辑](https://images.gitee.com/uploads/images/2021/0112/124136_db03b4ce_1674451.png "屏幕截图.png") +![个人中心](https://images.gitee.com/uploads/images/2021/0308/141425_b5cf7846_1674451.png "微信截图_20210308141340.png") 目前完成框架,细节正在不断完善中,欢迎提出更多意见~ ## 加入社群 From 9dcc3886a1431704fb2bccc9170a23b368962368 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=A9=AC=E5=93=A5?= <2310732606@qq.com> Date: Tue, 9 Mar 2021 19:46:14 +0800 Subject: [PATCH 006/181] update README.md. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index fc25c2b..af445f3 100644 --- a/README.md +++ b/README.md @@ -128,7 +128,7 @@ Tduck 填鸭:是一款基于B/S架构的表单收集系统,为企业构建 ![个人中心](https://images.gitee.com/uploads/images/2021/0308/141425_b5cf7846_1674451.png "微信截图_20210308141340.png") 目前完成框架,细节正在不断完善中,欢迎提出更多意见~ -## 加入社群 +### 联系作者/加入社群/一起摸鱼 ![输入图片说明](https://images.gitee.com/uploads/images/2021/0112/123754_9128ad9b_1674451.png "屏幕截图.png") **TDuck 使用 Apache License 2.0 协议,源代码完全开源,无商业限制。 From 437907e55d371cacc90886028d1211ad1521b922 Mon Sep 17 00:00:00 2001 From: wangqing <250543222@qq.com> Date: Tue, 9 Mar 2021 22:04:56 +0800 Subject: [PATCH 007/181] =?UTF-8?q?UserProjectResultEntity=E5=AD=97?= =?UTF-8?q?=E6=AE=B5=E5=BA=8F=E5=88=97=E5=8C=96=E5=BF=BD=E7=95=A5=E9=94=99?= =?UTF-8?q?=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tduck/cloud/project/entity/UserProjectResultEntity.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tduck-project/src/main/java/com/tduck/cloud/project/entity/UserProjectResultEntity.java b/tduck-project/src/main/java/com/tduck/cloud/project/entity/UserProjectResultEntity.java index 7d7f63a..d23ea4a 100644 --- a/tduck-project/src/main/java/com/tduck/cloud/project/entity/UserProjectResultEntity.java +++ b/tduck-project/src/main/java/com/tduck/cloud/project/entity/UserProjectResultEntity.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.tduck.cloud.common.entity.BaseEntity; import com.tduck.cloud.common.mybatis.handler.JacksonTypeHandler; import lombok.Data; @@ -23,6 +24,8 @@ @Accessors(chain = true) @FieldNameConstants @TableName(value = "pr_user_project_result", autoResultMap = true) +//不允许被序列化 允许被反序列化 +@JsonIgnoreProperties(value = {UserProjectResultEntity.Fields.originalData}, allowSetters = true) public class UserProjectResultEntity extends BaseEntity { /** * @@ -42,7 +45,6 @@ public class UserProjectResultEntity extends BaseEntity * 填写结果原始数据 */ @TableField(typeHandler = JacksonTypeHandler.class) - @JsonIgnore private Map originalData; From beffa98c03bca765fb46bea7904e19702255b211 Mon Sep 17 00:00:00 2001 From: wangqing Date: Wed, 10 Mar 2021 14:37:54 +0800 Subject: [PATCH 008/181] Dockerfile --- tduck-api/Dockerfile | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 tduck-api/Dockerfile diff --git a/tduck-api/Dockerfile b/tduck-api/Dockerfile new file mode 100644 index 0000000..658fe17 --- /dev/null +++ b/tduck-api/Dockerfile @@ -0,0 +1,7 @@ +FROM java:8 +EXPOSE 8999 + +VOLUME /tmp +ADD tduck-api.jar /app.jar +RUN bash -c 'touch /app.jar' +ENTRYPOINT ["java","-jar","/app.jar"] From ccde311c998c64aeaec5fa03750f6739bc0efbf5 Mon Sep 17 00:00:00 2001 From: wangqing Date: Wed, 10 Mar 2021 16:56:14 +0800 Subject: [PATCH 009/181] fix: Dockerfile --- tduck-api/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tduck-api/Dockerfile b/tduck-api/Dockerfile index 658fe17..d170791 100644 --- a/tduck-api/Dockerfile +++ b/tduck-api/Dockerfile @@ -2,6 +2,6 @@ FROM java:8 EXPOSE 8999 VOLUME /tmp -ADD tduck-api.jar /app.jar +ADD target/tduck-api.jar /app.jar RUN bash -c 'touch /app.jar' ENTRYPOINT ["java","-jar","/app.jar"] From 07cd4a799a6cb626f2b304bb66c79d698e868920 Mon Sep 17 00:00:00 2001 From: wangqing Date: Thu, 11 Mar 2021 16:04:36 +0800 Subject: [PATCH 010/181] =?UTF-8?q?fix=EF=BC=9Aip=E5=9C=B0=E5=9D=80null?= =?UTF-8?q?=E5=BC=82=E5=B8=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/tduck/cloud/api/web/controller/UserController.java | 2 +- .../main/java/com/tduck/cloud/common/util/AddressUtils.java | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/tduck-api/src/main/java/com/tduck/cloud/api/web/controller/UserController.java b/tduck-api/src/main/java/com/tduck/cloud/api/web/controller/UserController.java index db5f177..192da53 100644 --- a/tduck-api/src/main/java/com/tduck/cloud/api/web/controller/UserController.java +++ b/tduck-api/src/main/java/com/tduck/cloud/api/web/controller/UserController.java @@ -101,7 +101,7 @@ public Result sendUpdateEmailMsg(@RequestParam String email, @RequestAttribute L /** - * 发送绑定邮箱邮件 + * 修改邮箱 * * @return */ diff --git a/tduck-common/src/main/java/com/tduck/cloud/common/util/AddressUtils.java b/tduck-common/src/main/java/com/tduck/cloud/common/util/AddressUtils.java index d596d86..f109d10 100644 --- a/tduck-common/src/main/java/com/tduck/cloud/common/util/AddressUtils.java +++ b/tduck-common/src/main/java/com/tduck/cloud/common/util/AddressUtils.java @@ -1,6 +1,8 @@ package com.tduck.cloud.common.util; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.map.MapUtil; +import cn.hutool.core.util.ArrayUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.http.HttpUtil; @@ -58,6 +60,9 @@ public boolean internalIp(String ip) { } public static boolean internalIp(byte[] addr) { + if(ArrayUtil.isEmpty(addr)){ + return false; + } final byte b0 = addr[0]; final byte b1 = addr[1]; //10.x.x.x/8 From d04a00f126e612f5232a609be77f1aac15b92187 Mon Sep 17 00:00:00 2001 From: wangqing Date: Thu, 11 Mar 2021 16:19:07 +0800 Subject: [PATCH 011/181] =?UTF-8?q?fix=EF=BC=9Aip=E5=9C=B0=E5=9D=80null?= =?UTF-8?q?=E5=BC=82=E5=B8=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/tduck/cloud/common/util/AddressUtils.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/tduck-common/src/main/java/com/tduck/cloud/common/util/AddressUtils.java b/tduck-common/src/main/java/com/tduck/cloud/common/util/AddressUtils.java index f109d10..b160561 100644 --- a/tduck-common/src/main/java/com/tduck/cloud/common/util/AddressUtils.java +++ b/tduck-common/src/main/java/com/tduck/cloud/common/util/AddressUtils.java @@ -33,6 +33,9 @@ public class AddressUtils { public static String getRealAddressByIP(String ip) { String address = UNKNOWN; + if (StrUtil.isBlank(ip)) { + return address; + } // 内网不查询 if (internalIp(ip)) { return "内网IP"; @@ -60,7 +63,7 @@ public boolean internalIp(String ip) { } public static boolean internalIp(byte[] addr) { - if(ArrayUtil.isEmpty(addr)){ + if (ArrayUtil.isEmpty(addr)) { return false; } final byte b0 = addr[0]; @@ -92,4 +95,8 @@ public static boolean internalIp(byte[] addr) { return false; } } + + public static void main(String[] args) { + getRealAddressByIP("218.23.216.254"); + } } From 976186211b123699511ae8c206064377f92e90df Mon Sep 17 00:00:00 2001 From: wangqing Date: Thu, 11 Mar 2021 16:19:53 +0800 Subject: [PATCH 012/181] =?UTF-8?q?fix=EF=BC=9Aip=E5=9C=B0=E5=9D=80null?= =?UTF-8?q?=E5=BC=82=E5=B8=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/tduck/cloud/common/util/AddressUtils.java | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/tduck-common/src/main/java/com/tduck/cloud/common/util/AddressUtils.java b/tduck-common/src/main/java/com/tduck/cloud/common/util/AddressUtils.java index b160561..49d06a5 100644 --- a/tduck-common/src/main/java/com/tduck/cloud/common/util/AddressUtils.java +++ b/tduck-common/src/main/java/com/tduck/cloud/common/util/AddressUtils.java @@ -33,14 +33,11 @@ public class AddressUtils { public static String getRealAddressByIP(String ip) { String address = UNKNOWN; - if (StrUtil.isBlank(ip)) { - return address; - } - // 内网不查询 - if (internalIp(ip)) { - return "内网IP"; - } try { + // 内网不查询 + if (internalIp(ip)) { + return "内网IP"; + } String rspStr = HttpUtil.get(StrUtil.format("{}?ip={}&json=true", IP_URL, ip)); if (StrUtil.isEmpty(rspStr)) { log.error("获取地理位置异常 {}", ip); From 67e0ae8c7a947f47880936b78bce64128ffa04ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=A9=AC=E5=93=A5?= <2310732606@qq.com> Date: Thu, 11 Mar 2021 16:31:01 +0800 Subject: [PATCH 013/181] update README.md. --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index af445f3..bc93ae5 100644 --- a/README.md +++ b/README.md @@ -9,6 +9,8 @@ ![ ](https://img.shields.io/badge/JDK-1.8+-red.svg) ![ ](https://img.shields.io/badge/BY-SpringBoot-green) ![ ](https://img.shields.io/badge/front-vue%2Belement--ui-blue) +### 联系作者/加入社群/一起摸鱼 +![输入图片说明](https://images.gitee.com/uploads/images/2021/0112/123754_9128ad9b_1674451.png "屏幕截图.png") ### 平台简介 @@ -128,8 +130,6 @@ Tduck 填鸭:是一款基于B/S架构的表单收集系统,为企业构建 ![个人中心](https://images.gitee.com/uploads/images/2021/0308/141425_b5cf7846_1674451.png "微信截图_20210308141340.png") 目前完成框架,细节正在不断完善中,欢迎提出更多意见~ -### 联系作者/加入社群/一起摸鱼 -![输入图片说明](https://images.gitee.com/uploads/images/2021/0112/123754_9128ad9b_1674451.png "屏幕截图.png") **TDuck 使用 Apache License 2.0 协议,源代码完全开源,无商业限制。 开源不易如果喜欢请给作者 Star 鼓励 👇** From 84ef5821448cd4f42171dc3f1ef4b07e8be15aa1 Mon Sep 17 00:00:00 2001 From: wangqing Date: Thu, 11 Mar 2021 17:37:36 +0800 Subject: [PATCH 014/181] =?UTF-8?q?fix=EF=BC=9A=E8=8E=B7=E5=8F=96ip?= =?UTF-8?q?=E5=9C=B0=E5=9D=80=E5=AD=98=E5=9C=A8=E5=A4=9A=E4=B8=AA=E6=97=B6?= =?UTF-8?q?=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/tduck/cloud/api/util/HttpUtils.java | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/tduck-api/src/main/java/com/tduck/cloud/api/util/HttpUtils.java b/tduck-api/src/main/java/com/tduck/cloud/api/util/HttpUtils.java index b4a5c45..fc1cca6 100644 --- a/tduck-api/src/main/java/com/tduck/cloud/api/util/HttpUtils.java +++ b/tduck-api/src/main/java/com/tduck/cloud/api/util/HttpUtils.java @@ -1,5 +1,9 @@ package com.tduck.cloud.api.util; +import cn.hutool.core.lang.PatternPool; +import cn.hutool.core.lang.Validator; +import cn.hutool.core.util.ArrayUtil; +import cn.hutool.core.util.CharUtil; import cn.hutool.core.util.StrUtil; import com.tduck.cloud.api.web.wrapper.BodyReaderHttpServletRequestWrapper; import com.tduck.cloud.common.util.JsonUtils; @@ -10,6 +14,7 @@ import javax.servlet.http.HttpServletRequest; import java.util.*; +import java.util.regex.Pattern; /** * http 工具类 获取请求中的参数 @@ -18,6 +23,7 @@ * @date 14:23 2019/5/29 */ public class HttpUtils { + /** * 将URL的参数和body参数合并 * @@ -113,7 +119,15 @@ public static String getIpAddr(HttpServletRequest request) { if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getRemoteAddr(); } - + //"***.***.***.***".length() = 15 + if (StrUtil.isNotBlank(ip) && ip.length() > 15) { + if (ip.indexOf(CharUtil.COMMA) > 0) { + ip = ip.substring(0, ip.indexOf(",")); + } + } + //处理获取多个ip地址情况 nginx多层代理会出现多个ip 第一个为真实ip地址 return "0:0:0:0:0:0:0:1".equals(ip) ? "127.0.0.1" : ip; } + + } From 436978bd8f1651639d2bc174999ebaa9af132aa0 Mon Sep 17 00:00:00 2001 From: wangqing <250543222@qq.com> Date: Thu, 11 Mar 2021 23:15:40 +0800 Subject: [PATCH 015/181] =?UTF-8?q?fix:=20=E8=A1=A8=E5=8D=95checkbox?= =?UTF-8?q?=E6=A0=B7=E5=BC=8F=E6=97=A0=E6=95=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../project/entity/struct/CheckboxExpandStruct.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/tduck-project/src/main/java/com/tduck/cloud/project/entity/struct/CheckboxExpandStruct.java b/tduck-project/src/main/java/com/tduck/cloud/project/entity/struct/CheckboxExpandStruct.java index 637e90e..131870c 100644 --- a/tduck-project/src/main/java/com/tduck/cloud/project/entity/struct/CheckboxExpandStruct.java +++ b/tduck-project/src/main/java/com/tduck/cloud/project/entity/struct/CheckboxExpandStruct.java @@ -19,6 +19,16 @@ public class CheckboxExpandStruct { */ private Integer max; + /** + * 选项类型 + */ + private String optionType; + + /** + * 选项是按钮时大小 + */ + private String size; + /** * 选项 */ From 9b51370e59add7593c5fcf555c51ccdea1852d43 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=A9=AC=E5=93=A5?= <2310732606@qq.com> Date: Fri, 12 Mar 2021 09:05:12 +0800 Subject: [PATCH 016/181] update README.md. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index bc93ae5..6e1439c 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ ![ ](https://img.shields.io/badge/JDK-1.8+-red.svg) ![ ](https://img.shields.io/badge/BY-SpringBoot-green) ![ ](https://img.shields.io/badge/front-vue%2Belement--ui-blue) -### 联系作者/加入社群/一起摸鱼 +### 联系作者/加入社群 ![输入图片说明](https://images.gitee.com/uploads/images/2021/0112/123754_9128ad9b_1674451.png "屏幕截图.png") From e9bd1872e5b27e0156953a0ae9db1fa8b0102f81 Mon Sep 17 00:00:00 2001 From: smalljop <250543222@qq.com> Date: Fri, 12 Mar 2021 13:12:50 +0800 Subject: [PATCH 017/181] update README.md. --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 6e1439c..20626c3 100644 --- a/README.md +++ b/README.md @@ -40,7 +40,8 @@ Tduck 填鸭:是一款基于B/S架构的表单收集系统,为企业构建 ## 在线体验 ![首页](https://images.gitee.com/uploads/images/2021/0120/121740_1fcdc627_1674451.png "屏幕截图.png") -演示地址:http://tduck.smileyi.top/ (访问比较慢) +演示地址: +http://tduck1.smileyi.top:81 演示账号/密码:可注册登录或使用测试账号 test@tduck.com/12345678 From 2cba755d053239963d0e495904f14fe95219da3a Mon Sep 17 00:00:00 2001 From: smalljop <250543222@qq.com> Date: Mon, 15 Mar 2021 10:29:25 +0800 Subject: [PATCH 018/181] update README.md. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 20626c3..5513ff3 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ Tduck, Form collection system -Tduck 填鸭:是一款基于B/S架构的表单收集系统,为企业构建自己的信息反馈系统的综合解决方案,助力企业提高反馈收集客户服务效率。 +Tduck 填鸭:是基于B/S架构的一款开源的表单问卷在线收集系统,为企业构建自己的信息反馈系统的综合解决方案,助力企业提高反馈收集客户服务效率。 ### 应用场景 From c04a770337dd98f2c54cd4286f6d34c546d8da8d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=A9=AC=E5=93=A5?= <2310732606@qq.com> Date: Tue, 16 Mar 2021 08:59:19 +0800 Subject: [PATCH 019/181] update README.md. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 5513ff3..7406beb 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ ![ ](https://img.shields.io/badge/front-vue%2Belement--ui-blue) ### 联系作者/加入社群 ![输入图片说明](https://images.gitee.com/uploads/images/2021/0112/123754_9128ad9b_1674451.png "屏幕截图.png") - +![输入图片说明](https://images.gitee.com/uploads/images/2021/0316/085909_e8f24d26_1674451.png "微信截图_20210316085843.png") ### 平台简介 From 56918e9ff45486f266e7b07ead17776738073f80 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=A9=AC=E5=93=A5?= <2310732606@qq.com> Date: Tue, 16 Mar 2021 09:08:18 +0800 Subject: [PATCH 020/181] update README.md. --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index 7406beb..2927174 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,6 @@ ![ ](https://img.shields.io/badge/front-vue%2Belement--ui-blue) ### 联系作者/加入社群 ![输入图片说明](https://images.gitee.com/uploads/images/2021/0112/123754_9128ad9b_1674451.png "屏幕截图.png") -![输入图片说明](https://images.gitee.com/uploads/images/2021/0316/085909_e8f24d26_1674451.png "微信截图_20210316085843.png") ### 平台简介 From 45c99b293ec31fd33b05369f8079303ee15bde5c Mon Sep 17 00:00:00 2001 From: smalljop <250543222@qq.com> Date: Tue, 16 Mar 2021 15:43:50 +0800 Subject: [PATCH 021/181] update README.md. --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 2927174..5513ff3 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,7 @@ ### 联系作者/加入社群 ![输入图片说明](https://images.gitee.com/uploads/images/2021/0112/123754_9128ad9b_1674451.png "屏幕截图.png") + ### 平台简介 Tduck, Form collection system From 3eff22f3c67d7de92f874818a3ddbc4d3291bdac Mon Sep 17 00:00:00 2001 From: smalljop <250543222@qq.com> Date: Tue, 16 Mar 2021 15:44:57 +0800 Subject: [PATCH 022/181] update README.md. --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 5513ff3..1fece18 100644 --- a/README.md +++ b/README.md @@ -51,7 +51,7 @@ http://tduck1.smileyi.top:81 ``` -- SpringBoot 2.3.5 +- SpringBoot - Mybatis-Plus - Lombok - Hutool @@ -86,7 +86,7 @@ http://tduck1.smileyi.top:81 1. 配置最小开发环境: - * [MySQL](https://dev.mysql.com/downloads/mysql/) + * [MySQL5.7或以上](https://dev.mysql.com/downloads/mysql/) * [JDK1.8或以上](http://www.oracle.com/technetwork/java/javase/overview/index.html) * [Maven](https://maven.apache.org/download.cgi) * [Nodejs](https://nodejs.org/en/download/) From b98614926b1d88187b2db51a7b7eb006fbad98ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=A9=AC=E5=93=A5?= <2310732606@qq.com> Date: Wed, 17 Mar 2021 10:13:03 +0800 Subject: [PATCH 023/181] update README.md. --- README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index 1fece18..eab189c 100644 --- a/README.md +++ b/README.md @@ -10,8 +10,7 @@ ![ ](https://img.shields.io/badge/BY-SpringBoot-green) ![ ](https://img.shields.io/badge/front-vue%2Belement--ui-blue) ### 联系作者/加入社群 -![输入图片说明](https://images.gitee.com/uploads/images/2021/0112/123754_9128ad9b_1674451.png "屏幕截图.png") - +![输入图片说明](https://images.gitee.com/uploads/images/2021/0317/101257_282bcd5d_1674451.png "微信图片_20210317101254.png") ### 平台简介 From a41c050ca94af8d26b7c20eb704c5e12b814e191 Mon Sep 17 00:00:00 2001 From: wangqing <250543222@qq.com> Date: Wed, 17 Mar 2021 23:10:54 +0800 Subject: [PATCH 024/181] =?UTF-8?q?fix=EF=BC=9A=20=20=20logback=20config?= =?UTF-8?q?=20=20=20sign?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/tduck/cloud/api/util/SignUtils.java | 2 -- .../com/tduck/cloud/api/web/filter/SignAuthFilter.java | 9 +-------- tduck-api/src/main/resources/logback-spring.xml | 9 +++++---- 3 files changed, 6 insertions(+), 14 deletions(-) diff --git a/tduck-api/src/main/java/com/tduck/cloud/api/util/SignUtils.java b/tduck-api/src/main/java/com/tduck/cloud/api/util/SignUtils.java index d247a3e..79d89ac 100644 --- a/tduck-api/src/main/java/com/tduck/cloud/api/util/SignUtils.java +++ b/tduck-api/src/main/java/com/tduck/cloud/api/util/SignUtils.java @@ -50,8 +50,6 @@ public String getParamsSign(SortedMap params, String secret) { params.remove(SIGN_KEY_NAME); String paramsJson = JsonUtils.mapToJson(params); StringBuffer sb = new StringBuffer(secret).append(paramsJson); - log.debug("sign :{}", sb.toString()); - log.debug("sign :{}", DigestUtil.md5Hex(sb.toString()).toLowerCase()); return DigestUtil.md5Hex(sb.toString()).toLowerCase(); } diff --git a/tduck-api/src/main/java/com/tduck/cloud/api/web/filter/SignAuthFilter.java b/tduck-api/src/main/java/com/tduck/cloud/api/web/filter/SignAuthFilter.java index 77a4f43..0f30337 100644 --- a/tduck-api/src/main/java/com/tduck/cloud/api/web/filter/SignAuthFilter.java +++ b/tduck-api/src/main/java/com/tduck/cloud/api/web/filter/SignAuthFilter.java @@ -32,12 +32,6 @@ public class SignAuthFilter implements Filter { private final static String TIMESTAMP_KEY_NAME = "timestamp"; - /** - * swagger debug模式 请求头包含放行 - */ - private final static String DOC_DEBUG_KEY = "signDebug"; - private final static String DOC_DEBUG_VALUE = "nb"; - /** * 最大有效时间 默认 10秒钟失效 超出10s失效 */ @@ -59,8 +53,7 @@ public void doFilter(ServletRequest request, ServletResponse response, FilterCha } } // debug模式 - String value = httpServletRequest.getHeader(DOC_DEBUG_KEY); - if (existsMatch || DOC_DEBUG_VALUE.equals(value)) { + if (existsMatch) { filterChain.doFilter(request, response); return; } else { diff --git a/tduck-api/src/main/resources/logback-spring.xml b/tduck-api/src/main/resources/logback-spring.xml index 82d9c0a..8121424 100644 --- a/tduck-api/src/main/resources/logback-spring.xml +++ b/tduck-api/src/main/resources/logback-spring.xml @@ -33,11 +33,11 @@ - - - ${log.path}/com.tduck.cloud.wx.mp.error.log + + + ${log.path}/error.log - ${log.path}/%d{yyyy-MM}/com.tduck.cloud.wx.mp.error.%d{yyyy-MM-dd}.%i.log.gz + ${log.path}/%d{yyyy-MM}/error.%d{yyyy-MM-dd}.%i.log.gz 50MB 30 @@ -53,5 +53,6 @@ + From c8f450672bab9a04b3cc0fe4172db4f8810f5cae Mon Sep 17 00:00:00 2001 From: wangqing <250543222@qq.com> Date: Wed, 17 Mar 2021 23:24:53 +0800 Subject: [PATCH 025/181] =?UTF-8?q?fix=EF=BC=9A=20=20=20logging=20level?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tduck-api/src/main/resources/application.yml | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/tduck-api/src/main/resources/application.yml b/tduck-api/src/main/resources/application.yml index 0654f08..d92e1dd 100644 --- a/tduck-api/src/main/resources/application.yml +++ b/tduck-api/src/main/resources/application.yml @@ -25,7 +25,7 @@ server: # 日志级别 logging: level: - org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping: trace + org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping: debug com.tduck.cloud: debug mybatis-plus: @@ -45,11 +45,10 @@ mybatis-plus: cache-enabled: false - # 请求日志是否打印 platform: - request: - trace-log: true +# request: +# trace-log: true sign: enable: true secret: 916lWh2WMcbSWiHv @@ -77,8 +76,6 @@ platform: header: token - - aj: captcha: water-mark: tduck From fe18014111cf6f0ae5588891ea2dc8d00a387c46 Mon Sep 17 00:00:00 2001 From: wangqing <250543222@qq.com> Date: Wed, 17 Mar 2021 23:34:01 +0800 Subject: [PATCH 026/181] =?UTF-8?q?fix=EF=BC=9A=20=20=20BaseExceptionHandl?= =?UTF-8?q?er?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/tduck/cloud/api/exception/BaseExceptionHandler.java | 1 + 1 file changed, 1 insertion(+) diff --git a/tduck-api/src/main/java/com/tduck/cloud/api/exception/BaseExceptionHandler.java b/tduck-api/src/main/java/com/tduck/cloud/api/exception/BaseExceptionHandler.java index f024b3b..a9bcb3c 100644 --- a/tduck-api/src/main/java/com/tduck/cloud/api/exception/BaseExceptionHandler.java +++ b/tduck-api/src/main/java/com/tduck/cloud/api/exception/BaseExceptionHandler.java @@ -63,6 +63,7 @@ public Object exceptionHandler(MissingServletRequestParameterException e) { */ @ExceptionHandler(BaseException.class) public Result handleException(BaseException e) { + log.error(e.getMessage(), e); return Result.failed(e.getMessage()); } From 32bb657fd4424642dda55528e8e26c4dd9fc876d Mon Sep 17 00:00:00 2001 From: wangqing Date: Thu, 18 Mar 2021 18:50:34 +0800 Subject: [PATCH 027/181] =?UTF-8?q?feat:=20=E5=A1=AB=E5=86=99=E7=BB=93?= =?UTF-8?q?=E6=9E=9C=E5=AF=BC=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 7 ++ tduck-api/pom.xml | 4 ++ .../com/tduck/cloud/api/annotation/Login.java | 4 +- .../UserProjectResultController.java | 40 ++++++++++++ .../service/UserProjectResultService.java | 10 +++ .../impl/UserProjectResultEntityImpl.java | 39 ++++++++++- .../project/vo/ExportProjectResultVO.java | 64 +++++++++++++++++++ 7 files changed, 164 insertions(+), 4 deletions(-) create mode 100644 tduck-project/src/main/java/com/tduck/cloud/project/vo/ExportProjectResultVO.java diff --git a/pom.xml b/pom.xml index 4a118e4..79330ba 100644 --- a/pom.xml +++ b/pom.xml @@ -32,6 +32,7 @@ 1.2.4 1.2.75 4.0.11 + 5.0.0 @@ -154,6 +155,12 @@ tencentcloud-sdk-java ${tencentcloud.version} + + + org.apache.poi + poi-ooxml + ${poi.version} + diff --git a/tduck-api/pom.xml b/tduck-api/pom.xml index adb83f4..28959bb 100644 --- a/tduck-api/pom.xml +++ b/tduck-api/pom.xml @@ -60,6 +60,10 @@ com.alibaba fastjson + + org.apache.poi + poi-ooxml + diff --git a/tduck-api/src/main/java/com/tduck/cloud/api/annotation/Login.java b/tduck-api/src/main/java/com/tduck/cloud/api/annotation/Login.java index c12f2fc..91864e2 100644 --- a/tduck-api/src/main/java/com/tduck/cloud/api/annotation/Login.java +++ b/tduck-api/src/main/java/com/tduck/cloud/api/annotation/Login.java @@ -3,9 +3,9 @@ import java.lang.annotation.*; /** - * app登录效验 + * 登录验证 在需要登录才能调用的接口使用 * - * @author Mark sunlightcs@gmail.com + * @author smalljop */ @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) diff --git a/tduck-api/src/main/java/com/tduck/cloud/api/web/controller/UserProjectResultController.java b/tduck-api/src/main/java/com/tduck/cloud/api/web/controller/UserProjectResultController.java index a48caab..b647ca0 100644 --- a/tduck-api/src/main/java/com/tduck/cloud/api/web/controller/UserProjectResultController.java +++ b/tduck-api/src/main/java/com/tduck/cloud/api/web/controller/UserProjectResultController.java @@ -2,14 +2,18 @@ import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.convert.Convert; +import cn.hutool.core.io.IoUtil; import cn.hutool.core.map.MapUtil; import cn.hutool.core.thread.ThreadUtil; import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONUtil; +import cn.hutool.poi.excel.ExcelUtil; +import cn.hutool.poi.excel.ExcelWriter; import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.google.common.collect.Sets; import com.tduck.cloud.api.annotation.Login; import com.tduck.cloud.api.annotation.NoRepeatSubmit; @@ -31,6 +35,7 @@ import com.tduck.cloud.project.request.SortProjectItemRequest; import com.tduck.cloud.project.service.*; import com.tduck.cloud.project.util.SortUtils; +import com.tduck.cloud.project.vo.ExportProjectResultVO; import com.tduck.cloud.project.vo.OperateProjectItemVO; import com.tduck.cloud.project.vo.UserProjectDetailVO; import com.tduck.cloud.project.vo.UserProjectThemeVo; @@ -46,8 +51,11 @@ import me.chanjar.weixin.mp.bean.result.WxMpQrCodeTicket; import org.springframework.web.bind.annotation.*; +import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; import javax.validation.constraints.NotBlank; +import java.io.IOException; import java.sql.Struct; import java.util.List; import java.util.Map; @@ -97,6 +105,7 @@ public Result viewProject(HttpServletRequest request, @PathVariable("projectKey" */ @PostMapping("/create") @NoRepeatSubmit + @Login public Result createProjectResult(@RequestBody UserProjectResultEntity entity, HttpServletRequest request) { Result userProjectSettingStatus = userProjectSettingService.getUserProjectSettingStatus(entity.getProjectKey(), HttpUtils.getIpAddr(request)); if (StrUtil.isNotBlank(userProjectSettingStatus.getMsg())) { @@ -112,6 +121,36 @@ public Result createProjectResult(@RequestBody UserProjectResultEntity entity, H return Result.success(); } + /** + * 填写结果excel导出 + * + * @param request + * @return + */ + @GetMapping("/export") + public void exportProjectResult(QueryProjectResultRequest request, HttpServletResponse response) throws IOException { + ExportProjectResultVO exportProjectResultVO = projectResultService.exportProjectResult(request); + // 通过工具类创建writer,默认创建xls格式 + ExcelWriter writer = ExcelUtil.getWriter(); + //自定义标题别名 + exportProjectResultVO.getTitleList().forEach(item -> { + writer.addHeaderAlias(item.getFieldKey(), item.getTitle()); + }); + // 一次性写出内容,使用默认样式,强制输出标题 + writer.write(exportProjectResultVO.getResultList(), true); + //out为OutputStream,需要写出到的目标流 + //response为HttpServletResponse对象 + response.setContentType("application/vnd.ms-excel;charset=utf-8"); + //test.xls是弹出下载对话框的文件名,不能为中文,中文请自行编码 + response.setHeader("Content-Disposition", "attachment;filename=test.xls"); + ServletOutputStream out = response.getOutputStream(); + writer.flush(out, true); + // 关闭writer,释放内存 + writer.close(); + //此处记得关闭输出Servlet流 + IoUtil.close(out); + } + /** * 结果分页 @@ -120,6 +159,7 @@ public Result createProjectResult(@RequestBody UserProjectResultEntity entity, H * @return */ @GetMapping("/page") + @Login public Result queryProjectResults(QueryProjectResultRequest request) { return Result.success(projectResultService.listByQueryConditions(request)); } diff --git a/tduck-project/src/main/java/com/tduck/cloud/project/service/UserProjectResultService.java b/tduck-project/src/main/java/com/tduck/cloud/project/service/UserProjectResultService.java index 9865a82..4e8292a 100644 --- a/tduck-project/src/main/java/com/tduck/cloud/project/service/UserProjectResultService.java +++ b/tduck-project/src/main/java/com/tduck/cloud/project/service/UserProjectResultService.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.tduck.cloud.project.entity.UserProjectResultEntity; import com.tduck.cloud.project.request.QueryProjectResultRequest; +import com.tduck.cloud.project.vo.ExportProjectResultVO; /** * 项目表单项(ProjectResult)表服务接口 @@ -28,4 +29,13 @@ public interface UserProjectResultService extends IService userProjectItemEntityList = userProjectItemService.listByProjectKey(projectKey); + // excel 标题列 + List titleList = userProjectItemEntityList.stream() + .map(item -> new ExportProjectResultVO.ExcelHeader(item.getFormItemId(), item.getLabel())) + .collect(Collectors.toList()); + //结果 + List resultEntityList = this.list(Wrappers.lambdaQuery() + .eq(UserProjectResultEntity::getProjectKey, request.getProjectKey()) + .le(ObjectUtil.isNotNull(request.getEndDateTime()), UserProjectResultEntity::getCreateTime, request.getEndDateTime()) + .ge(ObjectUtil.isNotNull(request.getBeginDateTime()), UserProjectResultEntity::getCreateTime, request.getBeginDateTime()) + .orderByDesc(BaseEntity::getCreateTime)); + List> resultList = resultEntityList.stream().map(item -> { + Map processData = item.getProcessData(); + processData.put(BaseEntity.Fields.createTime, item.getCreateTime()); + processData.put(UserProjectResultEntity.Fields.submitAddress, item.getSubmitAddress()); + return processData; + }).collect(Collectors.toList()); + List allHeaderList = new ArrayList() {{ + addAll(ExportProjectResultVO.DEFAULT_HEADER_NAME); + addAll(titleList); + }}; + return new ExportProjectResultVO(allHeaderList, resultList); + } } \ No newline at end of file diff --git a/tduck-project/src/main/java/com/tduck/cloud/project/vo/ExportProjectResultVO.java b/tduck-project/src/main/java/com/tduck/cloud/project/vo/ExportProjectResultVO.java new file mode 100644 index 0000000..1c13ce0 --- /dev/null +++ b/tduck-project/src/main/java/com/tduck/cloud/project/vo/ExportProjectResultVO.java @@ -0,0 +1,64 @@ +package com.tduck.cloud.project.vo; + +import com.google.common.collect.Lists; +import com.tduck.cloud.common.entity.BaseEntity; +import com.tduck.cloud.project.entity.UserProjectResultEntity; +import lombok.AllArgsConstructor; +import lombok.Data; + +import java.util.List; +import java.util.Map; + +/** + * @author : wangqing + * @description : 导出excel result + * @create : 2021/03/18 16:18 + **/ +@Data +@AllArgsConstructor +public class ExportProjectResultVO { + + /** + * 字段默认前缀 + */ + public final static String FIELD_DEFAULT_PREFIX = "field"; + + + /** + * 默认字段 + */ + public final static List DEFAULT_HEADER_NAME = Lists.newArrayList( + new ExcelHeader(BaseEntity.Fields.createTime, "提交时间"), + new ExcelHeader(UserProjectResultEntity.Fields.submitAddress, "提交地址")); + + /** + * 标题 + */ + private List titleList; + + + /** + * 结果列表 + */ + private List> resultList; + + + /** + * excel表头标题 + */ + @Data + public static class ExcelHeader { + + private String fieldKey; + + private String title; + + + public ExcelHeader(String fieldKey, String title) { + this.fieldKey = FIELD_DEFAULT_PREFIX + fieldKey; + this.title = title; + } + } + + +} From 3e3f2ebd5be23a8f0d44e89c0671e66797095df2 Mon Sep 17 00:00:00 2001 From: wangqing <250543222@qq.com> Date: Thu, 18 Mar 2021 23:11:19 +0800 Subject: [PATCH 028/181] =?UTF-8?q?fix=EF=BC=9A=E8=A1=A8=E5=8D=95=E6=8F=90?= =?UTF-8?q?=E4=BA=A4=E7=BB=93=E6=9E=9C=E5=AF=BC=E5=87=BA=E6=A0=87=E9=A2=98?= =?UTF-8?q?=20feat=EF=BC=9A=E5=88=A0=E9=99=A4=E9=A1=B9=E7=9B=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/web/controller/UserProjectController.java | 14 ++++++++++++++ .../controller/UserProjectResultController.java | 2 ++ .../service/impl/UserProjectResultEntityImpl.java | 6 ++---- .../cloud/project/vo/ExportProjectResultVO.java | 12 ++++++++++-- 4 files changed, 28 insertions(+), 6 deletions(-) diff --git a/tduck-api/src/main/java/com/tduck/cloud/api/web/controller/UserProjectController.java b/tduck-api/src/main/java/com/tduck/cloud/api/web/controller/UserProjectController.java index 1a69370..49a7ab2 100644 --- a/tduck-api/src/main/java/com/tduck/cloud/api/web/controller/UserProjectController.java +++ b/tduck-api/src/main/java/com/tduck/cloud/api/web/controller/UserProjectController.java @@ -175,6 +175,20 @@ public Result publishProject(@RequestBody UserProjectEntity request) { return Result.success(projectService.updateById(entity)); } + /** + * 删除项目 + * + * @param request + * @return + */ + @Login + @PostMapping("/user/project/delete") + public Result deleteProject(@RequestBody UserProjectEntity request) { + boolean del = projectService.remove(Wrappers.lambdaQuery().eq(UserProjectEntity::getKey, request.getKey())); + return Result.success(del); + } + + /** * 查询项目详情 * 包含项目信息 项目保单项信息 项目主题 diff --git a/tduck-api/src/main/java/com/tduck/cloud/api/web/controller/UserProjectResultController.java b/tduck-api/src/main/java/com/tduck/cloud/api/web/controller/UserProjectResultController.java index b647ca0..753e6da 100644 --- a/tduck-api/src/main/java/com/tduck/cloud/api/web/controller/UserProjectResultController.java +++ b/tduck-api/src/main/java/com/tduck/cloud/api/web/controller/UserProjectResultController.java @@ -136,6 +136,8 @@ public void exportProjectResult(QueryProjectResultRequest request, HttpServletRe exportProjectResultVO.getTitleList().forEach(item -> { writer.addHeaderAlias(item.getFieldKey(), item.getTitle()); }); + //设置每列默认宽度 + writer.setColumnWidth(-1, 20); // 一次性写出内容,使用默认样式,强制输出标题 writer.write(exportProjectResultVO.getResultList(), true); //out为OutputStream,需要写出到的目标流 diff --git a/tduck-project/src/main/java/com/tduck/cloud/project/service/impl/UserProjectResultEntityImpl.java b/tduck-project/src/main/java/com/tduck/cloud/project/service/impl/UserProjectResultEntityImpl.java index 1938fc2..13d66aa 100644 --- a/tduck-project/src/main/java/com/tduck/cloud/project/service/impl/UserProjectResultEntityImpl.java +++ b/tduck-project/src/main/java/com/tduck/cloud/project/service/impl/UserProjectResultEntityImpl.java @@ -90,10 +90,8 @@ public ExportProjectResultVO exportProjectResult(QueryProjectResultRequest reque processData.put(UserProjectResultEntity.Fields.submitAddress, item.getSubmitAddress()); return processData; }).collect(Collectors.toList()); - List allHeaderList = new ArrayList() {{ - addAll(ExportProjectResultVO.DEFAULT_HEADER_NAME); - addAll(titleList); - }}; + List allHeaderList = ExportProjectResultVO.DEFAULT_HEADER_NAME; + allHeaderList.addAll(titleList); return new ExportProjectResultVO(allHeaderList, resultList); } } \ No newline at end of file diff --git a/tduck-project/src/main/java/com/tduck/cloud/project/vo/ExportProjectResultVO.java b/tduck-project/src/main/java/com/tduck/cloud/project/vo/ExportProjectResultVO.java index 1c13ce0..17e8039 100644 --- a/tduck-project/src/main/java/com/tduck/cloud/project/vo/ExportProjectResultVO.java +++ b/tduck-project/src/main/java/com/tduck/cloud/project/vo/ExportProjectResultVO.java @@ -5,6 +5,7 @@ import com.tduck.cloud.project.entity.UserProjectResultEntity; import lombok.AllArgsConstructor; import lombok.Data; +import lombok.NoArgsConstructor; import java.util.List; import java.util.Map; @@ -28,8 +29,14 @@ public class ExportProjectResultVO { * 默认字段 */ public final static List DEFAULT_HEADER_NAME = Lists.newArrayList( - new ExcelHeader(BaseEntity.Fields.createTime, "提交时间"), - new ExcelHeader(UserProjectResultEntity.Fields.submitAddress, "提交地址")); + new ExcelHeader() {{ + setFieldKey(BaseEntity.Fields.createTime); + setTitle("提交时间"); + }}, + new ExcelHeader() {{ + setFieldKey(UserProjectResultEntity.Fields.submitAddress); + setTitle("提交地址"); + }}); /** * 标题 @@ -47,6 +54,7 @@ public class ExportProjectResultVO { * excel表头标题 */ @Data + @NoArgsConstructor public static class ExcelHeader { private String fieldKey; From 0fd928d2d4fb4710c6d2623ed14aa8633d784eff Mon Sep 17 00:00:00 2001 From: smalljop <250543222@qq.com> Date: Thu, 18 Mar 2021 23:24:05 +0800 Subject: [PATCH 029/181] update README.md. --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index eab189c..497fe81 100644 --- a/README.md +++ b/README.md @@ -9,6 +9,7 @@ ![ ](https://img.shields.io/badge/JDK-1.8+-red.svg) ![ ](https://img.shields.io/badge/BY-SpringBoot-green) ![ ](https://img.shields.io/badge/front-vue%2Belement--ui-blue) +[![star](https://gitee.com/TDuckApp/tduck-platform/badge/star.svg?theme=white)](https://gitee.com/TDuckApp/tduck-platform/stargazers) ### 联系作者/加入社群 ![输入图片说明](https://images.gitee.com/uploads/images/2021/0317/101257_282bcd5d_1674451.png "微信图片_20210317101254.png") @@ -40,7 +41,7 @@ Tduck 填鸭:是基于B/S架构的一款开源的表单问卷在线收集系 ![首页](https://images.gitee.com/uploads/images/2021/0120/121740_1fcdc627_1674451.png "屏幕截图.png") 演示地址: -http://tduck1.smileyi.top:81 + https://tduck.smileyi.top 演示账号/密码:可注册登录或使用测试账号 test@tduck.com/12345678 From 1fd724306807b09df105b5abcbfa7f6cd72cbcbb Mon Sep 17 00:00:00 2001 From: wangqing Date: Fri, 19 Mar 2021 17:45:55 +0800 Subject: [PATCH 030/181] =?UTF-8?q?feat=EF=BC=9A=20=E9=A1=B9=E7=9B=AE?= =?UTF-8?q?=E5=81=9C=E6=AD=A2=E6=94=B6=E9=9B=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tduck/cloud/api/config/WebMvcConfig.java | 9 --------- .../web/controller/UserProjectController.java | 17 ++++++++++++++++- .../project/entity/enums/ProjectStatusEnum.java | 2 +- 3 files changed, 17 insertions(+), 11 deletions(-) diff --git a/tduck-api/src/main/java/com/tduck/cloud/api/config/WebMvcConfig.java b/tduck-api/src/main/java/com/tduck/cloud/api/config/WebMvcConfig.java index c27ffde..5ad2e25 100644 --- a/tduck-api/src/main/java/com/tduck/cloud/api/config/WebMvcConfig.java +++ b/tduck-api/src/main/java/com/tduck/cloud/api/config/WebMvcConfig.java @@ -36,15 +36,6 @@ public class WebMvcConfig implements WebMvcConfigurer { "/**/*.woff", "/**/*.ttf"); - @Override - public void addCorsMappings(CorsRegistry registry) { - registry.addMapping("/**") - .allowedOrigins("*") - .allowCredentials(true) - .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS") - .maxAge(36000); - } - @Override public void addInterceptors(InterceptorRegistry registry) { //所有路径都被拦截 diff --git a/tduck-api/src/main/java/com/tduck/cloud/api/web/controller/UserProjectController.java b/tduck-api/src/main/java/com/tduck/cloud/api/web/controller/UserProjectController.java index 49a7ab2..db25840 100644 --- a/tduck-api/src/main/java/com/tduck/cloud/api/web/controller/UserProjectController.java +++ b/tduck-api/src/main/java/com/tduck/cloud/api/web/controller/UserProjectController.java @@ -175,6 +175,20 @@ public Result publishProject(@RequestBody UserProjectEntity request) { return Result.success(projectService.updateById(entity)); } + /** + * 停止收集 + * + * @param request + * @return + */ + @Login + @PostMapping("/user/project/stop") + public Result stopProject(@RequestBody UserProjectEntity request) { + UserProjectEntity entity = projectService.getByKey(request.getKey()); + entity.setStatus(ProjectStatusEnum.STOP); + return Result.success(projectService.updateById(entity)); + } + /** * 删除项目 * @@ -421,8 +435,9 @@ public Result querySettingByKey(@PathVariable("key") String projectKey) { * * @return */ - @GetMapping("/setting/status") + @GetMapping("/setting/status1") public Result querySettingStatus(@RequestParam String projectKey, HttpServletRequest request) { + log.info("aaaaa"); return userProjectSettingService.getUserProjectSettingStatus(projectKey, HttpUtils.getIpAddr(request)); } diff --git a/tduck-project/src/main/java/com/tduck/cloud/project/entity/enums/ProjectStatusEnum.java b/tduck-project/src/main/java/com/tduck/cloud/project/entity/enums/ProjectStatusEnum.java index 947e97a..114e70a 100644 --- a/tduck-project/src/main/java/com/tduck/cloud/project/entity/enums/ProjectStatusEnum.java +++ b/tduck-project/src/main/java/com/tduck/cloud/project/entity/enums/ProjectStatusEnum.java @@ -21,7 +21,7 @@ public enum ProjectStatusEnum { CREATE(1, "未发布"), RELEASE(2, "收集中"), - FINISH(4, "已结束"); + STOP(3 ,"停止发布"); @EnumValue From 4f6766e7de978f207e89e3e81699ebe148bf82e8 Mon Sep 17 00:00:00 2001 From: wangqing <250543222@qq.com> Date: Sun, 21 Mar 2021 00:17:22 +0800 Subject: [PATCH 031/181] =?UTF-8?q?fix=EF=BC=9A=20=E8=B7=A8=E5=9F=9F?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E4=B8=8D=E7=94=9F=E6=95=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tduck/cloud/api/config/FilterConfig.java | 21 +++++++++++++++++++ .../tduck/cloud/api/config/WebMvcConfig.java | 8 ------- 2 files changed, 21 insertions(+), 8 deletions(-) diff --git a/tduck-api/src/main/java/com/tduck/cloud/api/config/FilterConfig.java b/tduck-api/src/main/java/com/tduck/cloud/api/config/FilterConfig.java index 97d591b..81a8863 100644 --- a/tduck-api/src/main/java/com/tduck/cloud/api/config/FilterConfig.java +++ b/tduck-api/src/main/java/com/tduck/cloud/api/config/FilterConfig.java @@ -27,6 +27,27 @@ public class FilterConfig { private final PlatformSignProperties platformSignProperties; + /** + * 跨域过滤器 + * + * @return + */ + @Bean + public FilterRegistrationBean corsFilterRegistration() { + FilterRegistrationBean registration = new FilterRegistrationBean(); + registration.setDispatcherTypes(DispatcherType.REQUEST); + CorsConfiguration config = new CorsConfiguration(); + config.addAllowedOrigin("*"); + config.addAllowedMethod("*"); + config.addAllowedHeader("*"); + UrlBasedCorsConfigurationSource corsConfigurationSource = new UrlBasedCorsConfigurationSource(); + corsConfigurationSource.registerCorsConfiguration("/**", config); + CorsFilter corsFilter = new CorsFilter(corsConfigurationSource); + registration.setOrder(Integer.MAX_VALUE - 4); + registration.setFilter(corsFilter); + return registration; + } + /** * xss 过滤器 优先级最高 * 包装 XssHttpServletRequestWrapper 解决request只能使用一次 diff --git a/tduck-api/src/main/java/com/tduck/cloud/api/config/WebMvcConfig.java b/tduck-api/src/main/java/com/tduck/cloud/api/config/WebMvcConfig.java index c27ffde..b159f4b 100644 --- a/tduck-api/src/main/java/com/tduck/cloud/api/config/WebMvcConfig.java +++ b/tduck-api/src/main/java/com/tduck/cloud/api/config/WebMvcConfig.java @@ -36,14 +36,6 @@ public class WebMvcConfig implements WebMvcConfigurer { "/**/*.woff", "/**/*.ttf"); - @Override - public void addCorsMappings(CorsRegistry registry) { - registry.addMapping("/**") - .allowedOrigins("*") - .allowCredentials(true) - .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS") - .maxAge(36000); - } @Override public void addInterceptors(InterceptorRegistry registry) { From 1f6aa9a53ab289fb3ca9d1681c61561a2065d706 Mon Sep 17 00:00:00 2001 From: wangqing <250543222@qq.com> Date: Sun, 21 Mar 2021 01:04:49 +0800 Subject: [PATCH 032/181] =?UTF-8?q?fix=EF=BC=9A=20=20=20=E8=A1=A8=E5=8D=95?= =?UTF-8?q?=E6=A0=85=E6=A0=BC=E8=AE=BE=E7=BD=AE=E6=97=A0=E6=95=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/tduck.sql | 1 + .../tduck/cloud/project/entity/UserProjectItemEntity.java | 6 ++++++ .../cloud/project/request/OperateProjectItemRequest.java | 5 +++++ ...ltEntityImpl.java => UserProjectResultServiceImpl.java} | 7 ++++++- 4 files changed, 18 insertions(+), 1 deletion(-) rename tduck-project/src/main/java/com/tduck/cloud/project/service/impl/{UserProjectResultEntityImpl.java => UserProjectResultServiceImpl.java} (92%) diff --git a/doc/tduck.sql b/doc/tduck.sql index a34fec0..3a50e8a 100644 --- a/doc/tduck.sql +++ b/doc/tduck.sql @@ -103,6 +103,7 @@ CREATE TABLE `pr_project_template_item` ( `required` tinyint(1) NOT NULL COMMENT '是否必填', `placeholder` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '输入型提示文字', `sort` bigint(20) NULL DEFAULT 0 COMMENT '排序', + `span` int(10) NOT NULL DEFAULT '24' COMMENT '栅格宽度', `expand` json NULL COMMENT '扩展字段 表单项独有字段', `reg_list` json NULL COMMENT '正则表达式 ', `update_time` datetime(0) NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '更新时间', diff --git a/tduck-project/src/main/java/com/tduck/cloud/project/entity/UserProjectItemEntity.java b/tduck-project/src/main/java/com/tduck/cloud/project/entity/UserProjectItemEntity.java index e432000..5e6a299 100644 --- a/tduck-project/src/main/java/com/tduck/cloud/project/entity/UserProjectItemEntity.java +++ b/tduck-project/src/main/java/com/tduck/cloud/project/entity/UserProjectItemEntity.java @@ -67,6 +67,12 @@ public class UserProjectItemEntity extends BaseEntity { * 排序 */ private Long sort; + + /** + * 栅格宽度 + */ + private int span; + /** * 扩展字段 表单项独有字段 */ diff --git a/tduck-project/src/main/java/com/tduck/cloud/project/request/OperateProjectItemRequest.java b/tduck-project/src/main/java/com/tduck/cloud/project/request/OperateProjectItemRequest.java index d9665d5..f1f1612 100644 --- a/tduck-project/src/main/java/com/tduck/cloud/project/request/OperateProjectItemRequest.java +++ b/tduck-project/src/main/java/com/tduck/cloud/project/request/OperateProjectItemRequest.java @@ -59,6 +59,11 @@ public class OperateProjectItemRequest { * 排序 */ private Integer sort; + /** + * 栅格宽度 + */ + private String span; + /** * 扩展字段 表单项独有字段 */ diff --git a/tduck-project/src/main/java/com/tduck/cloud/project/service/impl/UserProjectResultEntityImpl.java b/tduck-project/src/main/java/com/tduck/cloud/project/service/impl/UserProjectResultServiceImpl.java similarity index 92% rename from tduck-project/src/main/java/com/tduck/cloud/project/service/impl/UserProjectResultEntityImpl.java rename to tduck-project/src/main/java/com/tduck/cloud/project/service/impl/UserProjectResultServiceImpl.java index 13d66aa..84c1bb9 100644 --- a/tduck-project/src/main/java/com/tduck/cloud/project/service/impl/UserProjectResultEntityImpl.java +++ b/tduck-project/src/main/java/com/tduck/cloud/project/service/impl/UserProjectResultServiceImpl.java @@ -2,6 +2,7 @@ import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.map.MapUtil; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.toolkit.Wrappers; @@ -12,6 +13,7 @@ import com.google.common.collect.Sets; import com.tduck.cloud.common.constant.CommonConstants; import com.tduck.cloud.common.entity.BaseEntity; +import com.tduck.cloud.common.exception.BaseException; import com.tduck.cloud.common.util.AddressUtils; import com.tduck.cloud.common.util.RedisUtils; import com.tduck.cloud.project.entity.UserProjectItemEntity; @@ -38,7 +40,7 @@ */ @Service("projectResultService") @RequiredArgsConstructor -public class UserProjectResultEntityImpl extends ServiceImpl implements UserProjectResultService { +public class UserProjectResultServiceImpl extends ServiceImpl implements UserProjectResultService { private final UserProjectItemService userProjectItemService; private final RedisUtils redisUtils; @@ -84,6 +86,9 @@ public ExportProjectResultVO exportProjectResult(QueryProjectResultRequest reque .le(ObjectUtil.isNotNull(request.getEndDateTime()), UserProjectResultEntity::getCreateTime, request.getEndDateTime()) .ge(ObjectUtil.isNotNull(request.getBeginDateTime()), UserProjectResultEntity::getCreateTime, request.getBeginDateTime()) .orderByDesc(BaseEntity::getCreateTime)); + if (CollectionUtil.isEmpty(resultEntityList)) { + throw new BaseException("此表单无有效反馈,不能导出"); + } List> resultList = resultEntityList.stream().map(item -> { Map processData = item.getProcessData(); processData.put(BaseEntity.Fields.createTime, item.getCreateTime()); From 774c6ab67db461655b10e6c6fcab2f06d44322db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=A9=AC=E5=93=A5?= <2310732606@qq.com> Date: Tue, 23 Mar 2021 09:05:46 +0800 Subject: [PATCH 033/181] update README.md. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 497fe81..8e5ec40 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ ![ ](https://img.shields.io/badge/front-vue%2Belement--ui-blue) [![star](https://gitee.com/TDuckApp/tduck-platform/badge/star.svg?theme=white)](https://gitee.com/TDuckApp/tduck-platform/stargazers) ### 联系作者/加入社群 -![输入图片说明](https://images.gitee.com/uploads/images/2021/0317/101257_282bcd5d_1674451.png "微信图片_20210317101254.png") +![输入图片说明](https://images.gitee.com/uploads/images/2021/0323/090541_43ee5972_1674451.png "微信截图_20210323090340.png") ### 平台简介 From 586a9d09d4acaa1ec424d399c873b21bfb9baf4b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=A9=AC=E5=93=A5?= <2310732606@qq.com> Date: Tue, 23 Mar 2021 09:06:22 +0800 Subject: [PATCH 034/181] update README.md. --- README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index 8e5ec40..469e2e1 100644 --- a/README.md +++ b/README.md @@ -11,8 +11,7 @@ ![ ](https://img.shields.io/badge/front-vue%2Belement--ui-blue) [![star](https://gitee.com/TDuckApp/tduck-platform/badge/star.svg?theme=white)](https://gitee.com/TDuckApp/tduck-platform/stargazers) ### 联系作者/加入社群 -![输入图片说明](https://images.gitee.com/uploads/images/2021/0323/090541_43ee5972_1674451.png "微信截图_20210323090340.png") - +![输入图片说明](https://images.gitee.com/uploads/images/2021/0323/090619_bb22b681_1674451.png "微信截图_20210111111111111.png") ### 平台简介 Tduck, Form collection system From 2356d31793c8bbbb2dcf766870af45217910f08c Mon Sep 17 00:00:00 2001 From: wangqing Date: Tue, 23 Mar 2021 18:49:20 +0800 Subject: [PATCH 035/181] =?UTF-8?q?feat=EF=BC=9B=20=20=E5=9B=9E=E6=94=B6?= =?UTF-8?q?=E7=AB=99=E5=8A=9F=E8=83=BD=20=20=E5=81=9C=E6=AD=A2=E5=8F=91?= =?UTF-8?q?=E5=B8=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/tduck.sql | 1 + .../web/controller/UserProjectController.java | 74 +++++++++++++++++-- .../tduck/cloud/common/entity/BaseEntity.java | 4 +- .../project/entity/UserProjectEntity.java | 3 + .../project/vo/ExportProjectResultVO.java | 2 +- .../cloud/project/vo/RecycleProjectVO.java | 37 ++++++++++ 6 files changed, 112 insertions(+), 9 deletions(-) create mode 100644 tduck-project/src/main/java/com/tduck/cloud/project/vo/RecycleProjectVO.java diff --git a/doc/tduck.sql b/doc/tduck.sql index 3a50e8a..525df3c 100644 --- a/doc/tduck.sql +++ b/doc/tduck.sql @@ -142,6 +142,7 @@ CREATE TABLE `pr_user_project` ( `user_id` bigint(20) NOT NULL COMMENT '用户ID', `type` tinyint(2) NULL DEFAULT NULL COMMENT '项目类型', `status` tinyint(2) NOT NULL DEFAULT 0 COMMENT '状态', + `is_deleted` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否删除', `update_time` datetime(0) NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '更新时间', `create_time` datetime(0) NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '创建时间', PRIMARY KEY (`id`) USING BTREE, diff --git a/tduck-api/src/main/java/com/tduck/cloud/api/web/controller/UserProjectController.java b/tduck-api/src/main/java/com/tduck/cloud/api/web/controller/UserProjectController.java index db25840..f2fe34d 100644 --- a/tduck-api/src/main/java/com/tduck/cloud/api/web/controller/UserProjectController.java +++ b/tduck-api/src/main/java/com/tduck/cloud/api/web/controller/UserProjectController.java @@ -2,12 +2,11 @@ import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.util.IdUtil; -import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONUtil; import com.baomidou.mybatisplus.core.toolkit.Wrappers; -import com.google.common.collect.Lists; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.google.common.collect.Sets; import com.tduck.cloud.api.annotation.Login; import com.tduck.cloud.api.util.HttpUtils; @@ -29,6 +28,7 @@ import com.tduck.cloud.project.service.*; import com.tduck.cloud.project.util.SortUtils; import com.tduck.cloud.project.vo.OperateProjectItemVO; +import com.tduck.cloud.project.vo.RecycleProjectVO; import com.tduck.cloud.project.vo.UserProjectDetailVO; import com.tduck.cloud.project.vo.UserProjectThemeVo; import com.tduck.cloud.wx.mp.constant.WxMpRedisKeyConstants; @@ -60,6 +60,7 @@ public class UserProjectController { private final UserProjectService projectService; private final UserProjectItemService projectItemService; + private final UserProjectResultService projectResultService; private final SortUtils sortUtils; private final UserProjectThemeService userProjectThemeService; private final UserProjectSettingService userProjectSettingService; @@ -141,6 +142,7 @@ public Result listProjects(QueryProjectRequest.List request, @RequestAttribute L public Result queryMyProjects(@RequestAttribute Long userId, QueryProjectRequest.Page request) { return Result.success(projectService.page(request.toMybatisPage(), Wrappers.lambdaQuery().eq(UserProjectEntity::getUserId, userId) + .eq(UserProjectEntity::getDeleted, false) .eq(ObjectUtil.isNotNull(request.getStatus()), UserProjectEntity::getStatus, request.getStatus()) .like(StrUtil.isNotBlank(request.getName()), UserProjectEntity::getName, request.getName()) .le(ObjectUtil.isNotNull(request.getEndDateTime()), UserProjectEntity::getUpdateTime, request.getEndDateTime()) @@ -198,7 +200,11 @@ public Result stopProject(@RequestBody UserProjectEntity request) { @Login @PostMapping("/user/project/delete") public Result deleteProject(@RequestBody UserProjectEntity request) { - boolean del = projectService.remove(Wrappers.lambdaQuery().eq(UserProjectEntity::getKey, request.getKey())); + boolean del = projectService.update( + new UserProjectEntity() {{ + setDeleted(Boolean.TRUE); + }}, + Wrappers.lambdaQuery().eq(UserProjectEntity::getKey, request.getKey())); return Result.success(del); } @@ -435,9 +441,8 @@ public Result querySettingByKey(@PathVariable("key") String projectKey) { * * @return */ - @GetMapping("/setting/status1") + @GetMapping("/user/project/setting-status") public Result querySettingStatus(@RequestParam String projectKey, HttpServletRequest request) { - log.info("aaaaa"); return userProjectSettingService.getUserProjectSettingStatus(projectKey, HttpUtils.getIpAddr(request)); } @@ -468,7 +473,6 @@ public Result deleteWxNotifyQrCode(@RequestParam("key") String key, @RequestPara return Result.success(); } - /** * 获取项目微信通知用户 * @@ -487,4 +491,62 @@ public Result getWxNotifyUser(@RequestParam("key") String projectKey, @RequestPa return Result.success(wxMpUserService.listWxMpUserByOpenId(subNotifyUsers) .stream().map(item -> new WxMpUserVO(item.getNickname(), item.getHeadImgUrl(), item.getOpenId())).collect(Collectors.toList())); } + + /** + * 回收站项目分页 + * + * @return + */ + @Login + @GetMapping("/user/project/recycle/page") + public Result queryRecycleProjects(@RequestAttribute Long userId, QueryProjectRequest.Page request) { + Page page = projectService.page(request.toMybatisPage(), + Wrappers.lambdaQuery().eq(UserProjectEntity::getUserId, userId) + .eq(UserProjectEntity::getDeleted, true) + .orderByDesc(BaseEntity::getUpdateTime)); + List records = page.getRecords(); + List projectVOList = records.stream().map(item -> { + int count = projectResultService.count(Wrappers.lambdaQuery().eq(UserProjectResultEntity::getProjectKey, item.getKey())); + return new RecycleProjectVO(item.getKey(), count, item.getName(), item.getCreateTime(), item.getUpdateTime()); + }).collect(Collectors.toList()); + page.setRecords(projectVOList); + return Result.success(page); + } + + /** + * 从回收站中恢复项目 + * + * @return + */ + @Login + @PostMapping("/user/project/recycle/restore") + public Result restoreRecycleProject(@RequestBody UserProjectEntity request) { + boolean flag = projectService.update( + new UserProjectEntity() {{ + setDeleted(Boolean.FALSE); + }}, + Wrappers.lambdaQuery().eq(UserProjectEntity::getKey, request.getKey())); + return Result.success(flag); + } + + /** + * 从回收站中删除项目 + * + * @return + */ + @Login + @PostMapping("/user/project/recycle/delete") + public Result deleteRecycleProject(@RequestAttribute Long userId,@RequestBody UserProjectEntity projectEntity) { + boolean remove = projectService.remove(Wrappers.lambdaQuery().eq(UserProjectEntity::getUserId, userId) + .eq(UserProjectEntity::getKey, projectEntity.getKey())); + if (remove) { + userProjectThemeService.remove(Wrappers.lambdaQuery() + .eq(UserProjectThemeEntity::getProjectKey, projectEntity.getKey())); + userProjectSettingService.remove(Wrappers.lambdaQuery() + .eq(UserProjectSettingEntity::getProjectKey, projectEntity.getKey())); + } + return Result.success(remove); + } + + } \ No newline at end of file diff --git a/tduck-common/src/main/java/com/tduck/cloud/common/entity/BaseEntity.java b/tduck-common/src/main/java/com/tduck/cloud/common/entity/BaseEntity.java index d57ceb4..c789cdf 100644 --- a/tduck-common/src/main/java/com/tduck/cloud/common/entity/BaseEntity.java +++ b/tduck-common/src/main/java/com/tduck/cloud/common/entity/BaseEntity.java @@ -28,13 +28,13 @@ public class BaseEntity extends Model { **/ @TableField(fill = FieldFill.INSERT) @JsonFormat(pattern = DatePattern.NORM_DATETIME_PATTERN) - private LocalDateTime createTime; + protected LocalDateTime createTime; /** * 更新时间 **/ @TableField(fill = FieldFill.INSERT_UPDATE) @JsonFormat(pattern = DatePattern.NORM_DATETIME_PATTERN) - private LocalDateTime updateTime; + protected LocalDateTime updateTime; } diff --git a/tduck-project/src/main/java/com/tduck/cloud/project/entity/UserProjectEntity.java b/tduck-project/src/main/java/com/tduck/cloud/project/entity/UserProjectEntity.java index c14bb74..0e66fa7 100644 --- a/tduck-project/src/main/java/com/tduck/cloud/project/entity/UserProjectEntity.java +++ b/tduck-project/src/main/java/com/tduck/cloud/project/entity/UserProjectEntity.java @@ -71,5 +71,8 @@ public class UserProjectEntity extends BaseEntity { */ private Integer type; + @TableField(value = "is_deleted") + private Boolean deleted; + } \ No newline at end of file diff --git a/tduck-project/src/main/java/com/tduck/cloud/project/vo/ExportProjectResultVO.java b/tduck-project/src/main/java/com/tduck/cloud/project/vo/ExportProjectResultVO.java index 17e8039..3d5fd4a 100644 --- a/tduck-project/src/main/java/com/tduck/cloud/project/vo/ExportProjectResultVO.java +++ b/tduck-project/src/main/java/com/tduck/cloud/project/vo/ExportProjectResultVO.java @@ -11,7 +11,7 @@ import java.util.Map; /** - * @author : wangqing + * @author : smalljop * @description : 导出excel result * @create : 2021/03/18 16:18 **/ diff --git a/tduck-project/src/main/java/com/tduck/cloud/project/vo/RecycleProjectVO.java b/tduck-project/src/main/java/com/tduck/cloud/project/vo/RecycleProjectVO.java new file mode 100644 index 0000000..803c452 --- /dev/null +++ b/tduck-project/src/main/java/com/tduck/cloud/project/vo/RecycleProjectVO.java @@ -0,0 +1,37 @@ +package com.tduck.cloud.project.vo; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.tduck.cloud.common.entity.BaseEntity; +import com.tduck.cloud.project.entity.UserProjectEntity; +import com.tduck.cloud.project.entity.enums.ProjectSourceTypeEnum; +import com.tduck.cloud.project.entity.enums.ProjectStatusEnum; +import lombok.AllArgsConstructor; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import java.time.LocalDateTime; + +/** + * @author : smalljop + * @description : 回收站项目 + * @create : 2021/03/23 17:13 + **/ +@Data +@AllArgsConstructor +public class RecycleProjectVO extends BaseEntity { + private String key; + /*** + * 收集数量 + */ + private Integer resultCount; + + private String name; + + public RecycleProjectVO(String key, int resultCount, String name, LocalDateTime createTime, LocalDateTime updateTime) { + this.key = key; + this.resultCount = resultCount; + this.name = name; + this.createTime = createTime; + this.updateTime = updateTime; + } +} From 5f4d8561c40461cb4e4b0ed4c3fe2d6f2b17c37a Mon Sep 17 00:00:00 2001 From: wangqing Date: Thu, 25 Mar 2021 10:39:54 +0800 Subject: [PATCH 036/181] =?UTF-8?q?fix:=20=20=20=20=E8=A1=A8=E5=8D=95?= =?UTF-8?q?=E6=97=A0=E5=86=85=E5=AE=B9=E6=97=B6=E4=B8=8D=E5=85=81=E8=AE=B8?= =?UTF-8?q?=E5=8F=91=E5=B8=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cloud/api/web/controller/UserProjectController.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/tduck-api/src/main/java/com/tduck/cloud/api/web/controller/UserProjectController.java b/tduck-api/src/main/java/com/tduck/cloud/api/web/controller/UserProjectController.java index f2fe34d..204acd2 100644 --- a/tduck-api/src/main/java/com/tduck/cloud/api/web/controller/UserProjectController.java +++ b/tduck-api/src/main/java/com/tduck/cloud/api/web/controller/UserProjectController.java @@ -10,6 +10,7 @@ import com.google.common.collect.Sets; import com.tduck.cloud.api.annotation.Login; import com.tduck.cloud.api.util.HttpUtils; +import com.tduck.cloud.common.constant.CommonConstants; import com.tduck.cloud.common.entity.BaseEntity; import com.tduck.cloud.common.util.JsonUtils; import com.tduck.cloud.common.util.RedisUtils; @@ -172,6 +173,11 @@ public Result queryProjectByKey(@PathVariable @NotBlank String key) { @Login @PostMapping("/user/project/publish") public Result publishProject(@RequestBody UserProjectEntity request) { + int count = projectItemService + .count(Wrappers.lambdaQuery().eq(UserProjectItemEntity::getProjectKey, request.getKey())); + if (count == CommonConstants.ConstantNumber.ZERO) { + return Result.failed("无有效表单项,无法发布"); + } UserProjectEntity entity = projectService.getByKey(request.getKey()); entity.setStatus(ProjectStatusEnum.RELEASE); return Result.success(projectService.updateById(entity)); @@ -536,7 +542,7 @@ public Result restoreRecycleProject(@RequestBody UserProjectEntity request) { */ @Login @PostMapping("/user/project/recycle/delete") - public Result deleteRecycleProject(@RequestAttribute Long userId,@RequestBody UserProjectEntity projectEntity) { + public Result deleteRecycleProject(@RequestAttribute Long userId, @RequestBody UserProjectEntity projectEntity) { boolean remove = projectService.remove(Wrappers.lambdaQuery().eq(UserProjectEntity::getUserId, userId) .eq(UserProjectEntity::getKey, projectEntity.getKey())); if (remove) { From f70f1a3b1a014a90823d1395ecd0ce145db4c0bc Mon Sep 17 00:00:00 2001 From: wangqing Date: Thu, 25 Mar 2021 11:45:59 +0800 Subject: [PATCH 037/181] =?UTF-8?q?fix:=20=20=20=20=E8=A1=A8=E5=8D=95?= =?UTF-8?q?=E5=A1=AB=E5=86=99=E5=8E=BB=E9=99=A4=E7=99=BB=E5=BD=95=E6=A0=A1?= =?UTF-8?q?=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cloud/api/web/controller/UserProjectResultController.java | 1 - 1 file changed, 1 deletion(-) diff --git a/tduck-api/src/main/java/com/tduck/cloud/api/web/controller/UserProjectResultController.java b/tduck-api/src/main/java/com/tduck/cloud/api/web/controller/UserProjectResultController.java index 753e6da..3dd8a0e 100644 --- a/tduck-api/src/main/java/com/tduck/cloud/api/web/controller/UserProjectResultController.java +++ b/tduck-api/src/main/java/com/tduck/cloud/api/web/controller/UserProjectResultController.java @@ -105,7 +105,6 @@ public Result viewProject(HttpServletRequest request, @PathVariable("projectKey" */ @PostMapping("/create") @NoRepeatSubmit - @Login public Result createProjectResult(@RequestBody UserProjectResultEntity entity, HttpServletRequest request) { Result userProjectSettingStatus = userProjectSettingService.getUserProjectSettingStatus(entity.getProjectKey(), HttpUtils.getIpAddr(request)); if (StrUtil.isNotBlank(userProjectSettingStatus.getMsg())) { From 91c7721d4582e436dc2546fd53b3f1ac5d223e9a Mon Sep 17 00:00:00 2001 From: wangqing Date: Fri, 26 Mar 2021 10:47:17 +0800 Subject: [PATCH 038/181] =?UTF-8?q?fix:=20=20=20=20sql=E8=A1=A8=E5=AD=97?= =?UTF-8?q?=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/tduck.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/tduck.sql b/doc/tduck.sql index 525df3c..2c40b4c 100644 --- a/doc/tduck.sql +++ b/doc/tduck.sql @@ -103,7 +103,6 @@ CREATE TABLE `pr_project_template_item` ( `required` tinyint(1) NOT NULL COMMENT '是否必填', `placeholder` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '输入型提示文字', `sort` bigint(20) NULL DEFAULT 0 COMMENT '排序', - `span` int(10) NOT NULL DEFAULT '24' COMMENT '栅格宽度', `expand` json NULL COMMENT '扩展字段 表单项独有字段', `reg_list` json NULL COMMENT '正则表达式 ', `update_time` datetime(0) NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '更新时间', @@ -164,6 +163,7 @@ CREATE TABLE `pr_user_project_item` ( `required` tinyint(1) NOT NULL COMMENT '是否必填', `placeholder` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '输入型提示文字', `sort` bigint(20) NULL DEFAULT 0 COMMENT '排序', + `span` int(10) NOT NULL DEFAULT '24' COMMENT '栅格宽度', `expand` json NULL COMMENT '扩展字段 表单项独有字段', `reg_list` json NULL COMMENT '正则表达式 ', `update_time` datetime(0) NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '更新时间', From 2ab2d1684c921cc23fbde7f4dbecc1282a621dbd Mon Sep 17 00:00:00 2001 From: wangqing Date: Fri, 26 Mar 2021 13:53:49 +0800 Subject: [PATCH 039/181] =?UTF-8?q?fix:=20=20=20=20=E7=BA=A7=E8=81=94?= =?UTF-8?q?=E9=80=89=E6=8B=A9=E8=BE=93=E5=85=A5=E5=AD=97=E7=AC=A6=E4=B8=B2?= =?UTF-8?q?=E6=8A=A5=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tduck/cloud/project/entity/struct/CascaderExpandStruct.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tduck-project/src/main/java/com/tduck/cloud/project/entity/struct/CascaderExpandStruct.java b/tduck-project/src/main/java/com/tduck/cloud/project/entity/struct/CascaderExpandStruct.java index 3fbc713..e8feb40 100644 --- a/tduck-project/src/main/java/com/tduck/cloud/project/entity/struct/CascaderExpandStruct.java +++ b/tduck-project/src/main/java/com/tduck/cloud/project/entity/struct/CascaderExpandStruct.java @@ -25,7 +25,7 @@ public class CascaderExpandStruct { public static class Option { public Integer id; public String label; - public Integer value; + public String value; public List