From 6409dacbf2dbce2abc5627069f931f7818a2a05a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9B=B2=E6=A0=91=E9=80=9A?= <1976590620@qq.com>
Date: Tue, 10 Jan 2023 10:52:00 +0800
Subject: [PATCH 1/2] =?UTF-8?q?Revert=20"=E6=B5=8B=E8=AF=95=E7=8E=AF?=
=?UTF-8?q?=E5=A2=83=E7=9A=84rocketmq=20namesrv=E5=9C=B0=E5=9D=80=E5=8F=98?=
=?UTF-8?q?=E6=9B=B4"?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
This reverts commit ae59208bd4a2dacbb8b6f0a7c3b981e4b10995de.
---
epmet-admin/epmet-admin-server/pom.xml | 2 +-
epmet-module/data-statistical/data-statistical-server/pom.xml | 2 +-
epmet-module/epmet-heart/epmet-heart-server/pom.xml | 2 +-
epmet-module/epmet-message/epmet-message-server/pom.xml | 2 +-
epmet-module/epmet-point/epmet-point-server/pom.xml | 2 +-
epmet-module/gov-issue/gov-issue-server/pom.xml | 2 +-
epmet-module/gov-org/gov-org-server/pom.xml | 2 +-
epmet-module/open-data-worker/open-data-worker-server/pom.xml | 2 +-
epmet-module/oper-customize/oper-customize-server/pom.xml | 2 +-
epmet-module/resi-group/resi-group-server/pom.xml | 2 +-
epmet-user/epmet-user-server/pom.xml | 2 +-
11 files changed, 11 insertions(+), 11 deletions(-)
diff --git a/epmet-admin/epmet-admin-server/pom.xml b/epmet-admin/epmet-admin-server/pom.xml
index 917387298a..815564766a 100644
--- a/epmet-admin/epmet-admin-server/pom.xml
+++ b/epmet-admin/epmet-admin-server/pom.xml
@@ -233,7 +233,7 @@
true
- 192.168.10.165:9876
+ 192.168.10.161:9876
epmet_message
diff --git a/epmet-module/data-statistical/data-statistical-server/pom.xml b/epmet-module/data-statistical/data-statistical-server/pom.xml
index 35c84f863b..f2fac0ba34 100644
--- a/epmet-module/data-statistical/data-statistical-server/pom.xml
+++ b/epmet-module/data-statistical/data-statistical-server/pom.xml
@@ -588,7 +588,7 @@
true
- 192.168.10.165:9876
+ 192.168.10.161:9876
diff --git a/epmet-module/epmet-heart/epmet-heart-server/pom.xml b/epmet-module/epmet-heart/epmet-heart-server/pom.xml
index f90e54c36b..e9f257a3e5 100644
--- a/epmet-module/epmet-heart/epmet-heart-server/pom.xml
+++ b/epmet-module/epmet-heart/epmet-heart-server/pom.xml
@@ -308,7 +308,7 @@
true
- 192.168.10.165:9876
+ 192.168.10.161:9876
true
diff --git a/epmet-module/epmet-message/epmet-message-server/pom.xml b/epmet-module/epmet-message/epmet-message-server/pom.xml
index e374217adb..fef8b6bded 100644
--- a/epmet-module/epmet-message/epmet-message-server/pom.xml
+++ b/epmet-module/epmet-message/epmet-message-server/pom.xml
@@ -312,7 +312,7 @@
- 192.168.10.165:9876
+ 192.168.10.161:9876
epmet_message
diff --git a/epmet-module/epmet-point/epmet-point-server/pom.xml b/epmet-module/epmet-point/epmet-point-server/pom.xml
index df58cccbef..47de506c6b 100644
--- a/epmet-module/epmet-point/epmet-point-server/pom.xml
+++ b/epmet-module/epmet-point/epmet-point-server/pom.xml
@@ -276,7 +276,7 @@
true
- 192.168.10.165:9876
+ 192.168.10.161:9876
diff --git a/epmet-module/gov-issue/gov-issue-server/pom.xml b/epmet-module/gov-issue/gov-issue-server/pom.xml
index db38938089..8deb3007f5 100644
--- a/epmet-module/gov-issue/gov-issue-server/pom.xml
+++ b/epmet-module/gov-issue/gov-issue-server/pom.xml
@@ -292,7 +292,7 @@
SECfcc020bdc83bb17a2c00f39977b1fbc409ef4188c7beaea11c5caa90eeaf87fd
true
- 192.168.10.165:9876
+ 192.168.10.161:9876
diff --git a/epmet-module/gov-org/gov-org-server/pom.xml b/epmet-module/gov-org/gov-org-server/pom.xml
index 2da6b8b8ac..18b7d897f0 100644
--- a/epmet-module/gov-org/gov-org-server/pom.xml
+++ b/epmet-module/gov-org/gov-org-server/pom.xml
@@ -347,7 +347,7 @@
true
- 192.168.10.165:9876
+ 192.168.10.161:9876
epmet_message
diff --git a/epmet-module/open-data-worker/open-data-worker-server/pom.xml b/epmet-module/open-data-worker/open-data-worker-server/pom.xml
index 1411be9d41..2dd8408185 100644
--- a/epmet-module/open-data-worker/open-data-worker-server/pom.xml
+++ b/epmet-module/open-data-worker/open-data-worker-server/pom.xml
@@ -262,7 +262,7 @@
true
- 192.168.10.165:9876
+ 192.168.10.161:9876
diff --git a/epmet-module/oper-customize/oper-customize-server/pom.xml b/epmet-module/oper-customize/oper-customize-server/pom.xml
index 218a64eb59..697a8b84ab 100644
--- a/epmet-module/oper-customize/oper-customize-server/pom.xml
+++ b/epmet-module/oper-customize/oper-customize-server/pom.xml
@@ -287,7 +287,7 @@
true
- 192.168.10.165:9876
+ 192.168.10.161:9876
epmet_message
diff --git a/epmet-module/resi-group/resi-group-server/pom.xml b/epmet-module/resi-group/resi-group-server/pom.xml
index b2a6785612..5260d57e47 100644
--- a/epmet-module/resi-group/resi-group-server/pom.xml
+++ b/epmet-module/resi-group/resi-group-server/pom.xml
@@ -333,7 +333,7 @@
true
- 192.168.10.165:9876
+ 192.168.10.161:9876
diff --git a/epmet-user/epmet-user-server/pom.xml b/epmet-user/epmet-user-server/pom.xml
index 831b99e408..9ed2a7a8e8 100644
--- a/epmet-user/epmet-user-server/pom.xml
+++ b/epmet-user/epmet-user-server/pom.xml
@@ -329,7 +329,7 @@
true
- 192.168.10.165:9876
+ 192.168.10.161:9876
true
From 4c39b79fac47e7d5f11e22a3832d2cd9da3823e1 Mon Sep 17 00:00:00 2001
From: zhaoqifeng
Date: Tue, 31 Jan 2023 16:45:06 +0800
Subject: [PATCH 2/2] =?UTF-8?q?=E7=83=9F=E5=8F=B0=E6=A5=BC=E9=99=A2?=
=?UTF-8?q?=E5=B0=8F=E7=BB=84=E5=8A=9F=E8=83=BD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../resi/group/constant/TopicConstant.java | 12 +
.../group/dto/topic/YtTopicAttachmentDTO.java | 95 +++++
.../topic/YtTopicCommentAttachmentDTO.java | 109 ++++++
.../group/dto/topic/YtTopicCommentDTO.java | 74 ++++
.../resi/group/dto/topic/YtTopicDTO.java | 125 ++++++
.../group/dto/topic/YtTopicVoteDetailDTO.java | 70 ++++
.../dto/topic/form/CreateYtTopicFormDTO.java | 86 +++++
.../dto/topic/form/YtTopicCommentFormDTO.java | 31 ++
.../dto/topic/form/YtTopicDetailFormDTO.java | 26 ++
.../dto/topic/form/YtTopicPageFormDTO.java | 32 ++
.../dto/topic/form/YtTopicVoteFormDTO.java | 28 ++
.../topic/result/YtTopicCommentResultDTO.java | 65 ++++
.../topic/result/YtTopicDetailResultDTO.java | 85 +++++
.../topic/result/YtTopicInfoResultDTO.java | 64 ++++
.../topic/controller/YtTopicController.java | 134 +++++++
.../topic/dao/YtTopicAttachmentDao.java | 16 +
.../dao/YtTopicCommentAttachmentDao.java | 16 +
.../modules/topic/dao/YtTopicCommentDao.java | 29 ++
.../epmet/modules/topic/dao/YtTopicDao.java | 28 ++
.../topic/dao/YtTopicVoteDetailDao.java | 16 +
.../topic/entity/YtTopicAttachmentEntity.java | 61 +++
.../YtTopicCommentAttachmentEntity.java | 79 ++++
.../topic/entity/YtTopicCommentEntity.java | 41 ++
.../modules/topic/entity/YtTopicEntity.java | 91 +++++
.../topic/entity/YtTopicVoteDetailEntity.java | 36 ++
.../modules/topic/service/YtTopicService.java | 85 +++++
.../service/impl/YtTopicServiceImpl.java | 355 ++++++++++++++++++
.../db/migration/V0.0.28__yt_topic.sql | 92 +++++
.../mapper/topic/YtTopicAttachmentDao.xml | 7 +
.../topic/YtTopicCommentAttachmentDao.xml | 7 +
.../mapper/topic/YtTopicCommentDao.xml | 16 +
.../resources/mapper/topic/YtTopicDao.xml | 19 +
.../mapper/topic/YtTopicVoteDetailDao.xml | 8 +
33 files changed, 2038 insertions(+)
create mode 100644 epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/topic/YtTopicAttachmentDTO.java
create mode 100644 epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/topic/YtTopicCommentAttachmentDTO.java
create mode 100644 epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/topic/YtTopicCommentDTO.java
create mode 100644 epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/topic/YtTopicDTO.java
create mode 100644 epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/topic/YtTopicVoteDetailDTO.java
create mode 100644 epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/topic/form/CreateYtTopicFormDTO.java
create mode 100644 epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/topic/form/YtTopicCommentFormDTO.java
create mode 100644 epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/topic/form/YtTopicDetailFormDTO.java
create mode 100644 epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/topic/form/YtTopicPageFormDTO.java
create mode 100644 epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/topic/form/YtTopicVoteFormDTO.java
create mode 100644 epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/topic/result/YtTopicCommentResultDTO.java
create mode 100644 epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/topic/result/YtTopicDetailResultDTO.java
create mode 100644 epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/topic/result/YtTopicInfoResultDTO.java
create mode 100644 epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/controller/YtTopicController.java
create mode 100644 epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/dao/YtTopicAttachmentDao.java
create mode 100644 epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/dao/YtTopicCommentAttachmentDao.java
create mode 100644 epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/dao/YtTopicCommentDao.java
create mode 100644 epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/dao/YtTopicDao.java
create mode 100644 epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/dao/YtTopicVoteDetailDao.java
create mode 100644 epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/entity/YtTopicAttachmentEntity.java
create mode 100644 epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/entity/YtTopicCommentAttachmentEntity.java
create mode 100644 epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/entity/YtTopicCommentEntity.java
create mode 100644 epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/entity/YtTopicEntity.java
create mode 100644 epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/entity/YtTopicVoteDetailEntity.java
create mode 100644 epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/service/YtTopicService.java
create mode 100644 epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/service/impl/YtTopicServiceImpl.java
create mode 100644 epmet-module/resi-group/resi-group-server/src/main/resources/db/migration/V0.0.28__yt_topic.sql
create mode 100644 epmet-module/resi-group/resi-group-server/src/main/resources/mapper/topic/YtTopicAttachmentDao.xml
create mode 100644 epmet-module/resi-group/resi-group-server/src/main/resources/mapper/topic/YtTopicCommentAttachmentDao.xml
create mode 100644 epmet-module/resi-group/resi-group-server/src/main/resources/mapper/topic/YtTopicCommentDao.xml
create mode 100644 epmet-module/resi-group/resi-group-server/src/main/resources/mapper/topic/YtTopicDao.xml
create mode 100644 epmet-module/resi-group/resi-group-server/src/main/resources/mapper/topic/YtTopicVoteDetailDao.xml
diff --git a/epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/constant/TopicConstant.java b/epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/constant/TopicConstant.java
index 457e794443..1ba2bee6fe 100644
--- a/epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/constant/TopicConstant.java
+++ b/epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/constant/TopicConstant.java
@@ -120,4 +120,16 @@ public interface TopicConstant {
String RESOLVED = "resolved";
String MEMBER = "member";
+ /**
+ * 反对
+ */
+ String OPPOSITION = "opposition";
+ /**
+ * 赞成
+ */
+ String SUPPORT = "support";
+ /**
+ * 无
+ */
+ String NONE = "none";
}
diff --git a/epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/topic/YtTopicAttachmentDTO.java b/epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/topic/YtTopicAttachmentDTO.java
new file mode 100644
index 0000000000..dddb6d1c4c
--- /dev/null
+++ b/epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/topic/YtTopicAttachmentDTO.java
@@ -0,0 +1,95 @@
+package com.epmet.resi.group.dto.topic;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+
+/**
+ * 烟台话题附件表
+ *
+ * @author generator generator@elink-cn.com
+ * @since v1.0.0 2023-01-30
+ */
+@Data
+public class YtTopicAttachmentDTO implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ */
+ private String id;
+
+ /**
+ * 客户ID
+ */
+ private String customerId;
+
+ /**
+ * 话题Id,关联resi_topic的id
+ */
+ private String topicId;
+
+ /**
+ * 附件名(uuid随机生成)
+ */
+ private String attachmentName;
+
+ /**
+ * 文件格式(JPG、PNG、PDF、JPEG、BMP、MP4、WMA、M4A、MP3、DOC、DOCX、XLS)
+ */
+ private String attachmentFormat;
+
+ /**
+ * 附件类型((图片 - image、 视频 - video、 语音 - voice、 文档 - doc))
+ */
+ private String attachmentType;
+
+ /**
+ * 附件地址
+ */
+ private String attachmentUrl;
+
+ /**
+ * 排序字段
+ */
+ private Integer sort;
+
+ /**
+ * 语音或视频时长,秒
+ */
+ private Integer duration;
+
+ /**
+ * 删除标记 0:未删除,1:已删除
+ */
+ private String delFlag;
+
+ /**
+ * 乐观锁
+ */
+ private Integer revision;
+
+ /**
+ * 创建人
+ */
+ private String createdBy;
+
+ /**
+ * 创建时间
+ */
+ private Date createdTime;
+
+ /**
+ * 更新人
+ */
+ private String updatedBy;
+
+ /**
+ * 更新时间
+ */
+ private Date updatedTime;
+
+}
\ No newline at end of file
diff --git a/epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/topic/YtTopicCommentAttachmentDTO.java b/epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/topic/YtTopicCommentAttachmentDTO.java
new file mode 100644
index 0000000000..ff5b669689
--- /dev/null
+++ b/epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/topic/YtTopicCommentAttachmentDTO.java
@@ -0,0 +1,109 @@
+package com.epmet.resi.group.dto.topic;
+
+import java.io.Serializable;
+import java.util.Date;
+import lombok.Data;
+
+
+/**
+ * 烟台话题评论附件表
+ *
+ * @author generator generator@elink-cn.com
+ * @since v1.0.0 2023-01-30
+ */
+@Data
+public class YtTopicCommentAttachmentDTO implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ */
+ private String id;
+
+ /**
+ * 客户ID
+ */
+ private String customerId;
+
+ /**
+ * 话题Id
+ */
+ private String topicId;
+
+ /**
+ * 评论Id
+ */
+ private String topicCommentId;
+
+ /**
+ * 文件名
+ */
+ private String fileName;
+
+ /**
+ * 附件名(uuid随机生成)
+ */
+ private String attachmentName;
+
+ /**
+ * 文件大小,单位b
+ */
+ private Integer attachmentSize;
+
+ /**
+ * 文件格式(JPG、PNG、PDF、JPEG、BMP、MP4、WMA、M4A、MP3、DOC、DOCX、XLS)
+ */
+ private String attachmentFormat;
+
+ /**
+ * 附件类型((图片 - image、 视频 - video、 语音 - voice、 文档 - doc))
+ */
+ private String attachmentType;
+
+ /**
+ * 附件地址
+ */
+ private String attachmentUrl;
+
+ /**
+ * 排序字段
+ */
+ private Integer sort;
+
+ /**
+ * 语音或视频时长,秒
+ */
+ private Integer duration;
+
+ /**
+ * 删除标记 0:未删除,1:已删除
+ */
+ private String delFlag;
+
+ /**
+ * 乐观锁
+ */
+ private Integer revision;
+
+ /**
+ * 创建人
+ */
+ private String createdBy;
+
+ /**
+ * 创建时间
+ */
+ private Date createdTime;
+
+ /**
+ * 更新人
+ */
+ private String updatedBy;
+
+ /**
+ * 更新时间
+ */
+ private Date updatedTime;
+
+}
\ No newline at end of file
diff --git a/epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/topic/YtTopicCommentDTO.java b/epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/topic/YtTopicCommentDTO.java
new file mode 100644
index 0000000000..b397d26fef
--- /dev/null
+++ b/epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/topic/YtTopicCommentDTO.java
@@ -0,0 +1,74 @@
+package com.epmet.resi.group.dto.topic;
+
+import java.io.Serializable;
+import java.util.Date;
+import lombok.Data;
+
+
+/**
+ * 烟台话题评论表
+ *
+ * @author generator generator@elink-cn.com
+ * @since v1.0.0 2023-01-30
+ */
+@Data
+public class YtTopicCommentDTO implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ */
+ private String id;
+
+ /**
+ * 客户ID
+ */
+ private String customerId;
+
+ /**
+ * 话题Id,来自resi_topic
+ */
+ private String topicId;
+
+ /**
+ *
+ */
+ private String commentContent;
+
+ /**
+ * 评论状态:讨论中:discussing;已屏蔽 :hidden
+ */
+ private String status;
+
+ /**
+ * 删除标记 0:未删除,1:已删除
+ */
+ private String delFlag;
+
+ /**
+ * 乐观锁
+ */
+ private Integer revision;
+
+ /**
+ * 创建人,评论人Id,来自user
+ */
+ private String createdBy;
+
+ /**
+ * 创建时间
+ */
+ private Date createdTime;
+
+ /**
+ * 更新人
+ */
+ private String updatedBy;
+
+ /**
+ * 更新时间
+ */
+ private Date updatedTime;
+
+}
\ No newline at end of file
diff --git a/epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/topic/YtTopicDTO.java b/epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/topic/YtTopicDTO.java
new file mode 100644
index 0000000000..8e4fa3add3
--- /dev/null
+++ b/epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/topic/YtTopicDTO.java
@@ -0,0 +1,125 @@
+package com.epmet.resi.group.dto.topic;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+
+/**
+ * 烟台话题信息表
+ *
+ * @author generator generator@elink-cn.com
+ * @since v1.0.0 2023-01-30
+ */
+@Data
+public class YtTopicDTO implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ */
+ private String id;
+
+ /**
+ * 客户ID
+ */
+ private String customerId;
+
+ /**
+ * 网格ID
+ */
+ private String gridId;
+
+ /**
+ *
+ */
+ private String topicContent;
+
+ /**
+ * 话题状态(讨论中 - discussing、 已屏蔽 - hidden、 已关闭 - closed)
+ */
+ private String status;
+
+ /**
+ * 关闭状态:已解决 resolved,未解决 unresolved
+ */
+ private String closedStatus;
+
+ /**
+ * 省
+ */
+ private String province;
+
+ /**
+ * 市
+ */
+ private String city;
+
+ /**
+ * 区
+ */
+ private String area;
+
+ /**
+ * 地址
+ */
+ private String address;
+
+ /**
+ * 经度
+ */
+ private String longitude;
+
+ /**
+ * 维度
+ */
+ private String latitude;
+
+ /**
+ * 定位地址
+ */
+ private String locateAddress;
+
+ /**
+ * 定位经度
+ */
+ private String locateLongitude;
+
+ /**
+ * 定位维度
+ */
+ private String locateLatitude;
+
+ /**
+ * 删除标记 0:未删除,1:已删除
+ */
+ private String delFlag;
+
+ /**
+ * 乐观锁
+ */
+ private Integer revision;
+
+ /**
+ * 创建人,发布人Id来源于user
+ */
+ private String createdBy;
+
+ /**
+ * 创建时间
+ */
+ private Date createdTime;
+
+ /**
+ * 更新人
+ */
+ private String updatedBy;
+
+ /**
+ * 更新时间
+ */
+ private Date updatedTime;
+
+}
\ No newline at end of file
diff --git a/epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/topic/YtTopicVoteDetailDTO.java b/epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/topic/YtTopicVoteDetailDTO.java
new file mode 100644
index 0000000000..bf8d7c10b1
--- /dev/null
+++ b/epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/topic/YtTopicVoteDetailDTO.java
@@ -0,0 +1,70 @@
+package com.epmet.resi.group.dto.topic;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+
+/**
+ * 话题表决记录表
+ *
+ * @author generator generator@elink-cn.com
+ * @since v1.0.0 2023-01-30
+ */
+@Data
+public class YtTopicVoteDetailDTO implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键ID
+ */
+ private String id;
+
+ /**
+ * 客户ID
+ */
+ private String customerId;
+
+ /**
+ * 话题ID
+ */
+ private String topicId;
+
+ /**
+ * 态度 - opposition(反对)support(赞成)
+ */
+ private String attitude;
+
+ /**
+ * 删除标识 0未删除、1已删除
+ */
+ private String delFlag;
+
+ /**
+ * 乐观锁
+ */
+ private Integer revision;
+
+ /**
+ * 创建人
+ */
+ private String createdBy;
+
+ /**
+ * 创建时间
+ */
+ private Date createdTime;
+
+ /**
+ * 更新人
+ */
+ private String updatedBy;
+
+ /**
+ * 更新时间
+ */
+ private Date updatedTime;
+
+}
\ No newline at end of file
diff --git a/epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/topic/form/CreateYtTopicFormDTO.java b/epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/topic/form/CreateYtTopicFormDTO.java
new file mode 100644
index 0000000000..83e899f647
--- /dev/null
+++ b/epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/topic/form/CreateYtTopicFormDTO.java
@@ -0,0 +1,86 @@
+package com.epmet.resi.group.dto.topic.form;
+
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @Author zhaoqifeng
+ * @Date 2023/1/30 16:17
+ */
+@Data
+public class CreateYtTopicFormDTO implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ private String customerId;
+
+ private String gridId;
+
+
+ private String topicContent;
+
+ /**
+ * 经度
+ * */
+ private String longitude;
+
+ /**
+ * 纬度
+ * */
+ private String latitude;
+
+ /**
+ * 地址
+ * */
+ @NotBlank(message = "地址信息不能为空")
+ private String address;
+
+ /**
+ * 经度
+ * */
+ private String locateLongitude;
+
+ /**
+ * 纬度
+ * */
+ private String locateLatitude;
+
+ /**
+ * 地址
+ * */
+ private String locateAddress;
+
+ /**
+ * 省份
+ * */
+ private String province;
+
+ /**
+ * 城市
+ * */
+ private String city;
+
+ /**
+ * 地区
+ * */
+ private String area;
+
+ /**
+ * 图片附件
+ */
+ private List imageList;
+ /**
+ * 文件附件
+ */
+ private List docList;
+ /**
+ * 语音附件
+ */
+ private List voiceList;
+ /**
+ * 视频附件
+ */
+ private List videoList;
+}
diff --git a/epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/topic/form/YtTopicCommentFormDTO.java b/epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/topic/form/YtTopicCommentFormDTO.java
new file mode 100644
index 0000000000..e047e12eae
--- /dev/null
+++ b/epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/topic/form/YtTopicCommentFormDTO.java
@@ -0,0 +1,31 @@
+package com.epmet.resi.group.dto.topic.form;
+
+import com.epmet.resi.group.dto.notice.form.NoticeFileDTO;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @Description
+ * @ClassName ResiPublishCommentFormDTO
+ * @Author wangc
+ * @date 2020.03.31 17:32
+ */
+@Data
+public class YtTopicCommentFormDTO implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @NotBlank(message = "话题Id不能为空")
+ private String topicId;
+
+ //@NotBlank(message = "评论内容不能为空")
+ private String commentContent;
+
+ /**
+ * 图片附件集合
+ */
+ private List imageList;
+}
diff --git a/epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/topic/form/YtTopicDetailFormDTO.java b/epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/topic/form/YtTopicDetailFormDTO.java
new file mode 100644
index 0000000000..058b5049be
--- /dev/null
+++ b/epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/topic/form/YtTopicDetailFormDTO.java
@@ -0,0 +1,26 @@
+package com.epmet.resi.group.dto.topic.form;
+
+import com.epmet.commons.tools.dto.form.PageFormDTO;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import java.io.Serializable;
+
+/**
+ * @Description
+ * @ClassName ResiTopicDetailFormDTO
+ * @Author wangc
+ * @date 2020.04.07 09:07
+ */
+@Data
+public class YtTopicDetailFormDTO extends PageFormDTO implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 话题Id
+ * */
+ @NotBlank(message = "话题Id不能为空")
+ private String topicId;
+
+}
diff --git a/epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/topic/form/YtTopicPageFormDTO.java b/epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/topic/form/YtTopicPageFormDTO.java
new file mode 100644
index 0000000000..45a77a1c6f
--- /dev/null
+++ b/epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/topic/form/YtTopicPageFormDTO.java
@@ -0,0 +1,32 @@
+package com.epmet.resi.group.dto.topic.form;
+
+import com.epmet.commons.tools.dto.form.PageFormDTO;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import java.io.Serializable;
+
+/**
+ * @author Administrator
+ */
+@Data
+public class YtTopicPageFormDTO extends PageFormDTO implements Serializable{
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 组Id
+ * */
+ @NotBlank(message = "网格Id不能为空")
+ private String gridId;
+
+ /**
+ * 搜索时可以带状态的查询,也可以不带
+ * */
+ private String status;
+
+ /**
+ * 用户Id
+ * */
+ private String userId;
+}
diff --git a/epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/topic/form/YtTopicVoteFormDTO.java b/epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/topic/form/YtTopicVoteFormDTO.java
new file mode 100644
index 0000000000..153467c7a2
--- /dev/null
+++ b/epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/topic/form/YtTopicVoteFormDTO.java
@@ -0,0 +1,28 @@
+package com.epmet.resi.group.dto.topic.form;
+
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import java.io.Serializable;
+
+/**
+ * @Description
+ * @ClassName ResiPublishCommentFormDTO
+ * @Author wangc
+ * @date 2020.03.31 17:32
+ */
+@Data
+public class YtTopicVoteFormDTO implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @NotBlank(message = "话题Id不能为空")
+ private String topicId;
+
+ /**
+ * 态度opposition(反对)support(赞成)
+ */
+ @NotBlank(message = "投票结果不能为空")
+ private String attitude;
+
+}
diff --git a/epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/topic/result/YtTopicCommentResultDTO.java b/epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/topic/result/YtTopicCommentResultDTO.java
new file mode 100644
index 0000000000..cf18c2d385
--- /dev/null
+++ b/epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/topic/result/YtTopicCommentResultDTO.java
@@ -0,0 +1,65 @@
+package com.epmet.resi.group.dto.topic.result;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.epmet.resi.group.dto.group.result.CommentFileDTO;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @Description
+ * @ClassName ResiCommentResultDTO
+ * @Author wangc
+ * @date 2020.04.01 17:07
+ */
+@Data
+public class YtTopicCommentResultDTO implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 评论Id
+ * */
+ private String commentId;
+
+ /**
+ * 评论内容
+ * */
+ private String commentContent;
+
+ /**
+ * 评论者头像
+ * */
+ private String commentUserHeadPhoto;
+
+ /**
+ * 评论者姓名
+ * */
+ private String commentUserName;
+
+ /**
+ * 用户Id 评论者Id
+ * */
+ @JsonIgnore
+ private String userId;
+
+ /**
+ * 评论时间 yyyy-MM-dd HH:mm
+ * */
+ @JSONField(format="yyyy-MM-dd HH:mm")
+ private Date commentTime;
+
+ /**
+ * 评论状态
+ * */
+ private String commentStatus;
+
+ /**
+ * 图片附件集合
+ */
+ private List imageList = new ArrayList<>();
+}
diff --git a/epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/topic/result/YtTopicDetailResultDTO.java b/epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/topic/result/YtTopicDetailResultDTO.java
new file mode 100644
index 0000000000..955d88532a
--- /dev/null
+++ b/epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/topic/result/YtTopicDetailResultDTO.java
@@ -0,0 +1,85 @@
+package com.epmet.resi.group.dto.topic.result;
+
+import com.epmet.resi.group.dto.topic.form.FileDTO;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @author Administrator
+ */
+@Data
+public class YtTopicDetailResultDTO implements Serializable {
+ private static final long serialVersionUID = -6790536784979922200L;
+
+ /**
+ * 话题Id
+ * */
+ private String topicId;
+
+
+ /**
+ * 发布人名称
+ * */
+ private String releaseUserName;
+
+ /**
+ * 发布人头像
+ * */
+ private String releaseUserHeadPhoto;
+
+ /**
+ * 发布时间 yyyy-MM-dd HH:mm
+ * */
+ private String releaseTime;
+
+ /**
+ * 发布地址
+ * */
+ private String releaseAddress;
+
+ /**
+ * 经度
+ */
+ private String longitude;
+
+ /**
+ * 维度
+ */
+ private String latitude;
+
+ /**
+ * 话题内容
+ * */
+ private String topicContent;
+
+ /**
+ * 话题状态
+ * */
+ private String topicStatus;
+
+ /**
+ * 图片访问地址
+ * */
+ private List topicImages;
+
+ /**
+ * 话题语音详情
+ * */
+ private List topicVoices;
+
+ /**
+ * 本人投票状态opposition(反对)support(赞成) none(未投票)
+ * */
+ private String voteStatus;
+ /**
+ * 投票支持数
+ * */
+ private String supportCount;
+ /**
+ * 投票反对数
+ * */
+ private String oppositionCount;
+
+}
diff --git a/epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/topic/result/YtTopicInfoResultDTO.java b/epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/topic/result/YtTopicInfoResultDTO.java
new file mode 100644
index 0000000000..4cc58aca38
--- /dev/null
+++ b/epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/topic/result/YtTopicInfoResultDTO.java
@@ -0,0 +1,64 @@
+package com.epmet.resi.group.dto.topic.result;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+
+/**
+ * @author Administrator
+ */
+@Data
+public class YtTopicInfoResultDTO implements Serializable {
+ private static final long serialVersionUID = -7029232911456325417L;
+
+ /**
+ * 话题Id
+ * */
+ private String topicId;
+
+ /**
+ * 用户Id 话题发布人
+ * */
+ private String userId;
+
+ /**
+ * 发布人名称
+ * */
+ private String releaseUserName;
+
+ /**
+ * 发布人头像
+ * */
+ private String releaseUserHeadPhoto;
+
+ /**
+ * 发布时间 yyyy-MM-dd HH:mm
+ * */
+ @JSONField(format="yyyy-MM-dd HH:mm")
+ private Date releaseTime;
+
+ /**
+ * 话题内容
+ * */
+ private String topicContent;
+
+ /**
+ * 话题状态 讨论中 已关闭
+ * */
+ private String status;
+
+ /**
+ * 是否本人 me other
+ * */
+ private String releaseUserFlag;
+
+ /**
+ * 第一张图片
+ * */
+ private List imageList;
+
+}
diff --git a/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/controller/YtTopicController.java b/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/controller/YtTopicController.java
new file mode 100644
index 0000000000..1e6ddcf394
--- /dev/null
+++ b/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/controller/YtTopicController.java
@@ -0,0 +1,134 @@
+package com.epmet.modules.topic.controller;
+
+import com.epmet.commons.tools.annotation.LoginUser;
+import com.epmet.commons.tools.aop.NoRepeatSubmit;
+import com.epmet.commons.tools.page.PageData;
+import com.epmet.commons.tools.security.dto.TokenDto;
+import com.epmet.commons.tools.utils.Result;
+import com.epmet.commons.tools.validator.ValidatorUtils;
+import com.epmet.modules.topic.service.YtTopicService;
+import com.epmet.resi.group.dto.comment.result.ResiCommentResultDTO;
+import com.epmet.resi.group.dto.topic.form.*;
+import com.epmet.resi.group.dto.topic.result.YtTopicCommentResultDTO;
+import com.epmet.resi.group.dto.topic.result.YtTopicDetailResultDTO;
+import com.epmet.resi.group.dto.topic.result.YtTopicInfoResultDTO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+
+/**
+ * 烟台话题信息表
+ *
+ * @author generator generator@elink-cn.com
+ * @since v1.0.0 2023-01-30
+ */
+@RestController
+@RequestMapping("ytTopic")
+public class YtTopicController {
+
+ @Autowired
+ private YtTopicService ytTopicService;
+
+ /**
+ * 发布话题
+ *
+ * @Param tokenDto
+ * @Param formDTO
+ * @Return {@link Result}
+ * @Author zhaoqifeng
+ * @Date 2023/1/30 16:32
+ */
+ @PostMapping("createTopic")
+ @NoRepeatSubmit
+ public Result createTopic(@LoginUser TokenDto tokenDto, @RequestBody CreateYtTopicFormDTO formDTO) {
+ ValidatorUtils.validateEntity(formDTO);
+ ytTopicService.createTopic(tokenDto, formDTO);
+ return new Result();
+ }
+
+ /**
+ * 话题详情
+ *
+ * @Param tokenDto
+ * @Param topicDetailFormDTO
+ * @Return {@link Result< YtTopicDetailResultDTO>}
+ * @Author zhaoqifeng
+ * @Date 2023/1/30 16:39
+ */
+ @PostMapping("topicDetail")
+ public Result getTopicDetail(@LoginUser TokenDto tokenDto, @RequestBody YtTopicDetailFormDTO topicDetailFormDTO) {
+ ValidatorUtils.validateEntity(topicDetailFormDTO);
+ return new Result().ok(ytTopicService.getTopicDetail(tokenDto, topicDetailFormDTO));
+ }
+
+ /**
+ * 话题列表
+ *
+ * @Param tokenDto
+ * @Param topicPageFormDTO
+ * @Return {@link Result< PageData< YtTopicInfoResultDTO>>}
+ * @Author zhaoqifeng
+ * @Date 2023/1/30 16:55
+ */
+ @PostMapping("topicList")
+ public Result> getTopicList(@LoginUser TokenDto tokenDto, @RequestBody YtTopicPageFormDTO topicPageFormDTO) {
+ topicPageFormDTO.setUserId(tokenDto.getUserId());
+ ValidatorUtils.validateEntity(topicPageFormDTO);
+ return new Result>().ok(ytTopicService.getTopicList(tokenDto, topicPageFormDTO));
+ }
+
+ /**
+ * 话题详情评论列表
+ *
+ * @Param tokenDto
+ * @Param queryCommentFormDTO
+ * @Return {@link Result>}
+ * @Author zhaoqifeng
+ * @Date 2023/1/30 16:57
+ */
+ @PostMapping("topicCommentList")
+ public Result> getTopiCommentList(@LoginUser TokenDto tokenDto, @RequestBody YtTopicDetailFormDTO formDTO) {
+ ValidatorUtils.validateEntity(formDTO);
+ return new Result>().ok(ytTopicService.getTopicCommentList(tokenDto, formDTO));
+ }
+
+ /**
+ * 评论话题
+ *
+ * @Param tokenDto
+ * @Param formDTO
+ * @Return {@link Result}
+ * @Author zhaoqifeng
+ * @Date 2023/1/30 17:06
+ */
+ @PostMapping("topicComment")
+ @NoRepeatSubmit
+ public Result topiComment(@LoginUser TokenDto tokenDto, @RequestBody YtTopicCommentFormDTO formDTO) {
+ ValidatorUtils.validateEntity(formDTO);
+ ytTopicService.topicComment(tokenDto, formDTO);
+ return new Result();
+ }
+
+ /**
+ * 话题投票
+ *
+ * @Param tokenDto
+ * @Param formDTO
+ * @Return {@link Result}
+ * @Author zhaoqifeng
+ * @Date 2023/1/30 17:08
+ */
+ @PostMapping("topicVote")
+ @NoRepeatSubmit
+ public Result topicVote(@LoginUser TokenDto tokenDto, @RequestBody YtTopicVoteFormDTO formDTO) {
+ ValidatorUtils.validateEntity(formDTO);
+ ytTopicService.topicVote(tokenDto, formDTO);
+ return new Result();
+ }
+
+}
diff --git a/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/dao/YtTopicAttachmentDao.java b/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/dao/YtTopicAttachmentDao.java
new file mode 100644
index 0000000000..332f1ce641
--- /dev/null
+++ b/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/dao/YtTopicAttachmentDao.java
@@ -0,0 +1,16 @@
+package com.epmet.modules.topic.dao;
+
+import com.epmet.commons.mybatis.dao.BaseDao;
+import com.epmet.modules.topic.entity.YtTopicAttachmentEntity;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 烟台话题附件表
+ *
+ * @author generator generator@elink-cn.com
+ * @since v1.0.0 2023-01-30
+ */
+@Mapper
+public interface YtTopicAttachmentDao extends BaseDao {
+
+}
\ No newline at end of file
diff --git a/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/dao/YtTopicCommentAttachmentDao.java b/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/dao/YtTopicCommentAttachmentDao.java
new file mode 100644
index 0000000000..25ba6fe8a0
--- /dev/null
+++ b/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/dao/YtTopicCommentAttachmentDao.java
@@ -0,0 +1,16 @@
+package com.epmet.modules.topic.dao;
+
+import com.epmet.commons.mybatis.dao.BaseDao;
+import com.epmet.modules.topic.entity.YtTopicCommentAttachmentEntity;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 烟台话题评论附件表
+ *
+ * @author generator generator@elink-cn.com
+ * @since v1.0.0 2023-01-30
+ */
+@Mapper
+public interface YtTopicCommentAttachmentDao extends BaseDao {
+
+}
\ No newline at end of file
diff --git a/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/dao/YtTopicCommentDao.java b/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/dao/YtTopicCommentDao.java
new file mode 100644
index 0000000000..2167e676cf
--- /dev/null
+++ b/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/dao/YtTopicCommentDao.java
@@ -0,0 +1,29 @@
+package com.epmet.modules.topic.dao;
+
+import com.epmet.commons.mybatis.dao.BaseDao;
+import com.epmet.modules.topic.entity.YtTopicCommentEntity;
+import com.epmet.resi.group.dto.topic.form.YtTopicDetailFormDTO;
+import com.epmet.resi.group.dto.topic.result.YtTopicCommentResultDTO;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+/**
+ * 烟台话题评论表
+ *
+ * @author generator generator@elink-cn.com
+ * @since v1.0.0 2023-01-30
+ */
+@Mapper
+public interface YtTopicCommentDao extends BaseDao {
+
+ /**
+ * 获取评论列表
+ *
+ * @Param formDTO
+ * @Return {@link List}
+ * @Author zhaoqifeng
+ * @Date 2023/1/31 14:11
+ */
+ List selectCommentList(YtTopicDetailFormDTO formDTO);
+}
\ No newline at end of file
diff --git a/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/dao/YtTopicDao.java b/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/dao/YtTopicDao.java
new file mode 100644
index 0000000000..42cf49bcd1
--- /dev/null
+++ b/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/dao/YtTopicDao.java
@@ -0,0 +1,28 @@
+package com.epmet.modules.topic.dao;
+
+import com.epmet.commons.mybatis.dao.BaseDao;
+import com.epmet.modules.topic.entity.YtTopicEntity;
+import com.epmet.resi.group.dto.topic.form.YtTopicPageFormDTO;
+import com.epmet.resi.group.dto.topic.result.YtTopicInfoResultDTO;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+/**
+ * 烟台话题信息表
+ *
+ * @author generator generator@elink-cn.com
+ * @since v1.0.0 2023-01-30
+ */
+@Mapper
+public interface YtTopicDao extends BaseDao {
+ /**
+ * 话题列表
+ *
+ * @Param topicPageFormDTO
+ * @Return {@link List}
+ * @Author zhaoqifeng
+ * @Date 2023/1/31 13:52
+ */
+ List selectTopicList(YtTopicPageFormDTO topicPageFormDTO);
+}
\ No newline at end of file
diff --git a/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/dao/YtTopicVoteDetailDao.java b/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/dao/YtTopicVoteDetailDao.java
new file mode 100644
index 0000000000..c947aef1fc
--- /dev/null
+++ b/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/dao/YtTopicVoteDetailDao.java
@@ -0,0 +1,16 @@
+package com.epmet.modules.topic.dao;
+
+import com.epmet.commons.mybatis.dao.BaseDao;
+import com.epmet.modules.topic.entity.YtTopicVoteDetailEntity;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 话题表决记录表
+ *
+ * @author generator generator@elink-cn.com
+ * @since v1.0.0 2023-01-30
+ */
+@Mapper
+public interface YtTopicVoteDetailDao extends BaseDao {
+
+}
\ No newline at end of file
diff --git a/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/entity/YtTopicAttachmentEntity.java b/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/entity/YtTopicAttachmentEntity.java
new file mode 100644
index 0000000000..b7da282f42
--- /dev/null
+++ b/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/entity/YtTopicAttachmentEntity.java
@@ -0,0 +1,61 @@
+package com.epmet.modules.topic.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.epmet.commons.mybatis.entity.BaseEpmetEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 烟台话题附件表
+ *
+ * @author generator generator@elink-cn.com
+ * @since v1.0.0 2023-01-30
+ */
+@Data
+@EqualsAndHashCode(callSuper=false)
+@TableName("yt_topic_attachment")
+public class YtTopicAttachmentEntity extends BaseEpmetEntity {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 客户ID
+ */
+ private String customerId;
+
+ /**
+ * 话题Id,关联resi_topic的id
+ */
+ private String topicId;
+
+ /**
+ * 附件名(uuid随机生成)
+ */
+ private String attachmentName;
+
+ /**
+ * 文件格式(JPG、PNG、PDF、JPEG、BMP、MP4、WMA、M4A、MP3、DOC、DOCX、XLS)
+ */
+ private String attachmentFormat;
+
+ /**
+ * 附件类型((图片 - image、 视频 - video、 语音 - voice、 文档 - doc))
+ */
+ private String attachmentType;
+
+ /**
+ * 附件地址
+ */
+ private String attachmentUrl;
+
+ /**
+ * 排序字段
+ */
+ private Integer sort;
+
+ /**
+ * 语音或视频时长,秒
+ */
+ private Integer duration;
+
+}
diff --git a/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/entity/YtTopicCommentAttachmentEntity.java b/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/entity/YtTopicCommentAttachmentEntity.java
new file mode 100644
index 0000000000..687b276579
--- /dev/null
+++ b/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/entity/YtTopicCommentAttachmentEntity.java
@@ -0,0 +1,79 @@
+package com.epmet.modules.topic.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+
+import com.epmet.commons.mybatis.entity.BaseEpmetEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.Date;
+
+/**
+ * 烟台话题评论附件表
+ *
+ * @author generator generator@elink-cn.com
+ * @since v1.0.0 2023-01-30
+ */
+@Data
+@EqualsAndHashCode(callSuper=false)
+@TableName("yt_topic_comment_attachment")
+public class YtTopicCommentAttachmentEntity extends BaseEpmetEntity {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 客户ID
+ */
+ private String customerId;
+
+ /**
+ * 话题Id
+ */
+ private String topicId;
+
+ /**
+ * 评论Id
+ */
+ private String topicCommentId;
+
+ /**
+ * 文件名
+ */
+ private String fileName;
+
+ /**
+ * 附件名(uuid随机生成)
+ */
+ private String attachmentName;
+
+ /**
+ * 文件大小,单位b
+ */
+ private Integer attachmentSize;
+
+ /**
+ * 文件格式(JPG、PNG、PDF、JPEG、BMP、MP4、WMA、M4A、MP3、DOC、DOCX、XLS)
+ */
+ private String attachmentFormat;
+
+ /**
+ * 附件类型((图片 - image、 视频 - video、 语音 - voice、 文档 - doc))
+ */
+ private String attachmentType;
+
+ /**
+ * 附件地址
+ */
+ private String attachmentUrl;
+
+ /**
+ * 排序字段
+ */
+ private Integer sort;
+
+ /**
+ * 语音或视频时长,秒
+ */
+ private Integer duration;
+
+}
diff --git a/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/entity/YtTopicCommentEntity.java b/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/entity/YtTopicCommentEntity.java
new file mode 100644
index 0000000000..52a60634d2
--- /dev/null
+++ b/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/entity/YtTopicCommentEntity.java
@@ -0,0 +1,41 @@
+package com.epmet.modules.topic.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.epmet.commons.mybatis.entity.BaseEpmetEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 烟台话题评论表
+ *
+ * @author generator generator@elink-cn.com
+ * @since v1.0.0 2023-01-30
+ */
+@Data
+@EqualsAndHashCode(callSuper=false)
+@TableName("yt_topic_comment")
+public class YtTopicCommentEntity extends BaseEpmetEntity {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 客户ID
+ */
+ private String customerId;
+
+ /**
+ * 话题Id,来自resi_topic
+ */
+ private String topicId;
+
+ /**
+ *
+ */
+ private String commentContent;
+
+ /**
+ * 评论状态:讨论中:discussing;已屏蔽 :hidden
+ */
+ private String status;
+
+}
diff --git a/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/entity/YtTopicEntity.java b/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/entity/YtTopicEntity.java
new file mode 100644
index 0000000000..6ccb37a2c8
--- /dev/null
+++ b/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/entity/YtTopicEntity.java
@@ -0,0 +1,91 @@
+package com.epmet.modules.topic.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.epmet.commons.mybatis.entity.BaseEpmetEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 烟台话题信息表
+ *
+ * @author generator generator@elink-cn.com
+ * @since v1.0.0 2023-01-30
+ */
+@Data
+@EqualsAndHashCode(callSuper=false)
+@TableName("yt_topic")
+public class YtTopicEntity extends BaseEpmetEntity {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 客户ID
+ */
+ private String customerId;
+
+ /**
+ * 网格ID
+ */
+ private String gridId;
+
+ /**
+ *
+ */
+ private String topicContent;
+
+ /**
+ * 话题状态(讨论中 - discussing、 已屏蔽 - hidden、 已关闭 - closed)
+ */
+ private String status;
+
+ /**
+ * 关闭状态:已解决 resolved,未解决 unresolved
+ */
+ private String closedStatus;
+
+ /**
+ * 省
+ */
+ private String province;
+
+ /**
+ * 市
+ */
+ private String city;
+
+ /**
+ * 区
+ */
+ private String area;
+
+ /**
+ * 地址
+ */
+ private String address;
+
+ /**
+ * 经度
+ */
+ private String longitude;
+
+ /**
+ * 维度
+ */
+ private String latitude;
+
+ /**
+ * 定位地址
+ */
+ private String locateAddress;
+
+ /**
+ * 定位经度
+ */
+ private String locateLongitude;
+
+ /**
+ * 定位维度
+ */
+ private String locateLatitude;
+
+}
diff --git a/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/entity/YtTopicVoteDetailEntity.java b/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/entity/YtTopicVoteDetailEntity.java
new file mode 100644
index 0000000000..837b34641a
--- /dev/null
+++ b/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/entity/YtTopicVoteDetailEntity.java
@@ -0,0 +1,36 @@
+package com.epmet.modules.topic.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.epmet.commons.mybatis.entity.BaseEpmetEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 话题表决记录表
+ *
+ * @author generator generator@elink-cn.com
+ * @since v1.0.0 2023-01-30
+ */
+@Data
+@EqualsAndHashCode(callSuper=false)
+@TableName("yt_topic_vote_detail")
+public class YtTopicVoteDetailEntity extends BaseEpmetEntity {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 客户ID
+ */
+ private String customerId;
+
+ /**
+ * 话题ID
+ */
+ private String topicId;
+
+ /**
+ * 态度 - opposition(反对)support(赞成)
+ */
+ private String attitude;
+
+}
diff --git a/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/service/YtTopicService.java b/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/service/YtTopicService.java
new file mode 100644
index 0000000000..b0412edfb7
--- /dev/null
+++ b/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/service/YtTopicService.java
@@ -0,0 +1,85 @@
+package com.epmet.modules.topic.service;
+
+import com.epmet.commons.mybatis.service.BaseService;
+import com.epmet.commons.tools.page.PageData;
+import com.epmet.commons.tools.security.dto.TokenDto;
+import com.epmet.modules.topic.entity.YtTopicEntity;
+import com.epmet.resi.group.dto.topic.form.*;
+import com.epmet.resi.group.dto.topic.result.YtTopicCommentResultDTO;
+import com.epmet.resi.group.dto.topic.result.YtTopicDetailResultDTO;
+import com.epmet.resi.group.dto.topic.result.YtTopicInfoResultDTO;
+
+/**
+ * 烟台话题信息表
+ *
+ * @author generator generator@elink-cn.com
+ * @since v1.0.0 2023-01-30
+ */
+public interface YtTopicService extends BaseService {
+
+ /**
+ * 发布话题
+ *
+ * @Param tokenDto
+ * @Param formDTO
+ * @Return
+ * @Author zhaoqifeng
+ * @Date 2023/1/30 16:18
+ */
+ void createTopic(TokenDto tokenDto, CreateYtTopicFormDTO formDTO);
+
+ /**
+ * 话题详情
+ *
+ * @Param tokenDto
+ * @Param formDTO
+ * @Return {@link YtTopicDetailResultDTO}
+ * @Author zhaoqifeng
+ * @Date 2023/1/30 16:39
+ */
+ YtTopicDetailResultDTO getTopicDetail(TokenDto tokenDto, YtTopicDetailFormDTO formDTO);
+
+ /**
+ * 话题列表
+ *
+ * @Param tokenDto
+ * @Param topicPageFormDTO
+ * @Return {@link PageData}
+ * @Author zhaoqifeng
+ * @Date 2023/1/30 16:56
+ */
+ PageData getTopicList(TokenDto tokenDto, YtTopicPageFormDTO topicPageFormDTO);
+
+ /**
+ * 话题详情评论列表
+ *
+ * @Param tokenDto
+ * @Param formDTO
+ * @Return {@link PageData}
+ * @Author zhaoqifeng
+ * @Date 2023/1/30 17:02
+ */
+ PageData getTopicCommentList(TokenDto tokenDto, YtTopicDetailFormDTO formDTO);
+
+ /**
+ * 评论话题
+ *
+ * @Param tokenDto
+ * @Param formDTO
+ * @Return
+ * @Author zhaoqifeng
+ * @Date 2023/1/30 17:05
+ */
+ void topicComment(TokenDto tokenDto, YtTopicCommentFormDTO formDTO);
+
+ /**
+ * 话题投票
+ *
+ * @Param tokenDto
+ * @Param formDTO
+ * @Return
+ * @Author zhaoqifeng
+ * @Date 2023/1/30 17:08
+ */
+ void topicVote(TokenDto tokenDto, YtTopicVoteFormDTO formDTO);
+}
\ No newline at end of file
diff --git a/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/service/impl/YtTopicServiceImpl.java b/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/service/impl/YtTopicServiceImpl.java
new file mode 100644
index 0000000000..36d148cfc3
--- /dev/null
+++ b/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/service/impl/YtTopicServiceImpl.java
@@ -0,0 +1,355 @@
+package com.epmet.modules.topic.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.epmet.commons.mybatis.service.impl.BaseServiceImpl;
+import com.epmet.commons.tools.constant.NumConstant;
+import com.epmet.commons.tools.exception.EpmetErrorCode;
+import com.epmet.commons.tools.exception.EpmetException;
+import com.epmet.commons.tools.page.PageData;
+import com.epmet.commons.tools.redis.common.CustomerResiUserRedis;
+import com.epmet.commons.tools.redis.common.bean.ResiUserInfoCache;
+import com.epmet.commons.tools.security.dto.TokenDto;
+import com.epmet.commons.tools.utils.ConvertUtils;
+import com.epmet.commons.tools.utils.DateUtils;
+import com.epmet.modules.topic.dao.*;
+import com.epmet.modules.topic.entity.*;
+import com.epmet.modules.topic.service.YtTopicService;
+import com.epmet.modules.utils.ModuleConstant;
+import com.epmet.resi.group.constant.TopicConstant;
+import com.epmet.resi.group.dto.group.result.CommentFileDTO;
+import com.epmet.resi.group.dto.topic.form.*;
+import com.epmet.resi.group.dto.topic.result.YtTopicCommentResultDTO;
+import com.epmet.resi.group.dto.topic.result.YtTopicDetailResultDTO;
+import com.epmet.resi.group.dto.topic.result.YtTopicInfoResultDTO;
+import com.github.pagehelper.PageInfo;
+import com.github.pagehelper.page.PageMethod;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.util.*;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.stream.Collectors;
+
+/**
+ * 烟台话题信息表
+ *
+ * @author generator generator@elink-cn.com
+ * @since v1.0.0 2023-01-30
+ */
+@Slf4j
+@Service
+public class YtTopicServiceImpl extends BaseServiceImpl implements YtTopicService {
+
+ @Resource
+ private YtTopicAttachmentDao ytTopicAttachmentDao;
+ @Resource
+ private YtTopicCommentDao ytTopicCommentDao;
+ @Resource
+ private YtTopicCommentAttachmentDao ytTopicCommentAttachmentDao;
+ @Resource
+ private YtTopicVoteDetailDao ytTopicVoteDetailDao;
+
+ /**
+ * 发布话题
+ *
+ * @Param tokenDto
+ * @Param formDTO
+ * @Return
+ * @Author zhaoqifeng
+ * @Date 2023/1/30 16:18
+ */
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public void createTopic(TokenDto tokenDto, CreateYtTopicFormDTO formDTO) {
+ if(StringUtils.isBlank(formDTO.getTopicContent()) && CollectionUtils.isEmpty(formDTO.getVoiceList())) {
+ //话题内容和语音不能同时为空
+ log.error(ModuleConstant.TOPIC_CONTENT_AND_VOICE_IS_NULL);
+ throw new EpmetException(ModuleConstant.TOPIC_CONTENT_AND_VOICE_IS_NULL);
+ }
+
+ //1.保存话题草稿
+ if(formDTO.getTopicContent().length() > TopicConstant.MAX_NUMBER_OF_CONTENT){
+ //内容超过最大限制
+ log.error(ModuleConstant.TOPIC_CONTENT_NUMBER_OF_WORDS_EXCEEDED);
+ throw new EpmetException(ModuleConstant.TOPIC_CONTENT_NUMBER_OF_WORDS_EXCEEDED);
+ }
+
+ YtTopicEntity topic = ConvertUtils.sourceToTarget(formDTO, YtTopicEntity.class);
+ //如果只有语音,则话题内容为语音话题
+ if (CollectionUtils.isNotEmpty(formDTO.getVoiceList()) && StringUtils.isBlank(formDTO.getTopicContent())) {
+ topic.setTopicContent("语音话题");
+ }
+ topic.setCustomerId(tokenDto.getCustomerId());
+ topic.setStatus(TopicConstant.PUBLISHMENT);
+ baseDao.insert(topic);
+
+ //保存图片附件
+ if(CollectionUtils.isNotEmpty(formDTO.getImageList())){
+ int sort = 0;
+ for(String url : formDTO.getImageList()){
+ YtTopicAttachmentEntity attachment = new YtTopicAttachmentEntity();
+ attachment.setCustomerId(formDTO.getCustomerId());
+ attachment.setAttachmentUrl(url);
+ attachment.setTopicId(topic.getId());
+ attachment.setAttachmentFormat(url.substring(url.lastIndexOf(".") + NumConstant.ONE).toLowerCase());
+ attachment.setSort(sort++);
+ attachment.setAttachmentType(TopicConstant.IMAGE);
+ ytTopicAttachmentDao.insert(attachment);
+ }
+ }
+
+ //保存语音附件
+ if(CollectionUtils.isNotEmpty(formDTO.getVoiceList())){
+ int sort = 0;
+ for(FileDTO file : formDTO.getVoiceList()){
+ YtTopicAttachmentEntity attachment = new YtTopicAttachmentEntity();
+ attachment.setCustomerId(formDTO.getCustomerId());
+ attachment.setAttachmentUrl(file.getUrl());
+ attachment.setTopicId(topic.getId());
+ attachment.setCreatedBy(tokenDto.getUserId());
+ attachment.setAttachmentFormat(file.getUrl().substring(file.getUrl().lastIndexOf(".") + NumConstant.ONE).toLowerCase());
+ attachment.setSort(sort++);
+ attachment.setAttachmentType(TopicConstant.VOICE);
+ attachment.setDuration(file.getDuration());
+ ytTopicAttachmentDao.insert(attachment);
+ }
+ }
+
+
+
+ }
+
+ /**
+ * 话题详情
+ *
+ * @Param formDTO
+ * @Return {@link YtTopicDetailResultDTO}
+ * @Author zhaoqifeng
+ * @Date 2023/1/30 16:39
+ */
+ @Override
+ public YtTopicDetailResultDTO getTopicDetail(TokenDto tokenDto, YtTopicDetailFormDTO formDTO) {
+ //1.查询话题信息
+ YtTopicEntity entity = baseDao.selectById(formDTO.getTopicId());
+ if(null == entity){
+ log.error(ModuleConstant.NO_SUCH_TOPIC);
+ throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), ModuleConstant.NO_SUCH_TOPIC, ModuleConstant.NO_SUCH_TOPIC);
+ }
+ YtTopicDetailResultDTO result = ConvertUtils.sourceToTarget(entity, YtTopicDetailResultDTO.class);
+ result.setTopicId(formDTO.getTopicId());
+ result.setTopicStatus(entity.getStatus());
+ result.setReleaseTime(DateUtils.format(entity.getCreatedTime(), DateUtils.DATE_TIME_PATTERN_END_WITH_MINUTE));
+ result.setReleaseAddress(entity.getAddress());
+
+ //2.查询话题图片附件
+ LambdaQueryWrapper imgWrapper = new LambdaQueryWrapper<>();
+ imgWrapper.eq(YtTopicAttachmentEntity::getTopicId, formDTO.getTopicId());
+ imgWrapper.eq(YtTopicAttachmentEntity::getAttachmentType, TopicConstant.IMAGE);
+ imgWrapper.orderByAsc(YtTopicAttachmentEntity::getSort);
+ List imgList = ytTopicAttachmentDao.selectList(imgWrapper);
+ if (CollectionUtils.isNotEmpty(imgList)) {
+ List imageUrls = imgList.stream().map(YtTopicAttachmentEntity::getAttachmentUrl).collect(Collectors.toList());
+ result.setTopicImages(imageUrls);
+ }
+
+ //3.查询话题音频附件
+ LambdaQueryWrapper voiceWrapper = new LambdaQueryWrapper<>();
+ voiceWrapper.eq(YtTopicAttachmentEntity::getTopicId, formDTO.getTopicId());
+ voiceWrapper.eq(YtTopicAttachmentEntity::getAttachmentType, TopicConstant.VOICE);
+ voiceWrapper.orderByAsc(YtTopicAttachmentEntity::getSort);
+ List voiceList = ytTopicAttachmentDao.selectList(voiceWrapper);
+ if (CollectionUtils.isNotEmpty(voiceList)) {
+ List voiceUrls = voiceList.stream().map(item ->{
+ FileDTO fileDTO = new FileDTO();
+ fileDTO.setUrl(item.getAttachmentUrl());
+ fileDTO.setDuration(item.getDuration());
+ return fileDTO;
+ }).collect(Collectors.toList());
+ result.setTopicVoices(voiceUrls);
+ }
+
+
+ //4.获取发布人信息
+ ResiUserInfoCache userInfo = CustomerResiUserRedis.getUserBaseInfo(entity.getCreatedBy());
+ if (null == userInfo) {
+ String msg = "获取发布人信息失败";
+ throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), msg, msg);
+ }
+ result.setReleaseUserName(userInfo.getShowName());
+ result.setReleaseUserHeadPhoto(userInfo.getHeadImgUrl());
+ //5.获取投票信息
+ result.setOppositionCount(NumConstant.ZERO_STR);
+ result.setSupportCount(NumConstant.ZERO_STR);
+ LambdaQueryWrapper voteWrapper = new LambdaQueryWrapper<>();
+ voteWrapper.eq(YtTopicVoteDetailEntity::getTopicId, formDTO.getTopicId());
+ List voteList = ytTopicVoteDetailDao.selectList(voteWrapper);
+ if (CollectionUtils.isNotEmpty(voteList)) {
+ Map voteMap = voteList.stream().collect(Collectors.groupingBy(YtTopicVoteDetailEntity::getAttitude, Collectors.counting()));
+ if (voteMap.containsKey(TopicConstant.OPPOSITION)) {
+ result.setOppositionCount(String.valueOf(voteMap.get(TopicConstant.OPPOSITION)));
+ }
+ if (voteMap.containsKey(TopicConstant.SUPPORT)) {
+ result.setSupportCount(String.valueOf(voteMap.get(TopicConstant.SUPPORT)));
+ }
+ }
+ voteWrapper.eq(YtTopicVoteDetailEntity::getCreatedBy, tokenDto.getUserId());
+ voteList = ytTopicVoteDetailDao.selectList(voteWrapper);
+ if (CollectionUtils.isNotEmpty(voteList)) {
+ result.setVoteStatus(voteList.get(NumConstant.ZERO).getAttitude());
+ } else {
+ result.setVoteStatus(TopicConstant.NONE);
+ }
+ return result;
+ }
+
+ /**
+ * 话题列表
+ *
+ * @Param tokenDto
+ * @Param topicPageFormDTO
+ * @Return {@link PageData}
+ * @Author zhaoqifeng
+ * @Date 2023/1/30 16:56
+ */
+ @Override
+ public PageData getTopicList(TokenDto tokenDto, YtTopicPageFormDTO topicPageFormDTO) {
+ PageMethod.startPage(topicPageFormDTO.getPageNo(), topicPageFormDTO.getPageSize());
+ List list = baseDao.selectTopicList(topicPageFormDTO);
+ PageInfo pageInfo = new PageInfo<>(list);
+ if (CollectionUtils.isNotEmpty(list)) {
+ list.forEach(item -> {
+ ResiUserInfoCache userInfo = CustomerResiUserRedis.getUserBaseInfo(item.getUserId());
+ if (null != userInfo) {
+ item.setReleaseUserName(userInfo.getShowName());
+ item.setReleaseUserHeadPhoto(userInfo.getHeadImgUrl());
+ }
+ if (tokenDto.getUserId().equals(item.getUserId())) {
+ item.setReleaseUserFlag("me");
+ } else {
+ item.setReleaseUserFlag("other");
+ }
+ //获取附件图片
+ LambdaQueryWrapper imgWrapper = new LambdaQueryWrapper<>();
+ imgWrapper.eq(YtTopicAttachmentEntity::getTopicId, item.getTopicId());
+ imgWrapper.eq(YtTopicAttachmentEntity::getAttachmentType, TopicConstant.IMAGE);
+ imgWrapper.orderByAsc(YtTopicAttachmentEntity::getSort);
+ imgWrapper.last("limit 3");
+ List imgList = ytTopicAttachmentDao.selectList(imgWrapper);
+ if (CollectionUtils.isNotEmpty(imgList)) {
+ List imageUrls = imgList.stream().map(YtTopicAttachmentEntity::getAttachmentUrl).collect(Collectors.toList());
+ item.setImageList(imageUrls);
+ }
+ });
+ }
+ return new PageData<>(list, pageInfo.getTotal());
+ }
+
+ /**
+ * 话题详情评论列表
+ *
+ * @Param tokenDto
+ * @Param formDTO
+ * @Return {@link PageData}
+ * @Author zhaoqifeng
+ * @Date 2023/1/30 17:02
+ */
+ @Override
+ public PageData getTopicCommentList(TokenDto tokenDto, YtTopicDetailFormDTO formDTO) {
+ PageMethod.startPage(formDTO.getPageNo(), formDTO.getPageSize());
+ List list = ytTopicCommentDao.selectCommentList(formDTO);
+ PageInfo pageInfo = new PageInfo<>(list);
+ if (CollectionUtils.isNotEmpty(list)) {
+ //获取评论附件信息
+ LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>();
+ wrapper.eq(YtTopicCommentAttachmentEntity::getTopicId, formDTO.getTopicId());
+ List attachmentList = ytTopicCommentAttachmentDao.selectList(wrapper);
+ Map> map = new HashMap<>();
+ if (CollectionUtils.isNotEmpty(attachmentList)) {
+ map = attachmentList.stream().sorted(Comparator.comparingInt(YtTopicCommentAttachmentEntity::getSort))
+ .collect(Collectors.groupingBy(YtTopicCommentAttachmentEntity::getTopicCommentId, LinkedHashMap::new, Collectors.toList()));
+ }
+ Map> finalMap = map;
+ list.forEach(item -> {
+ ResiUserInfoCache userInfo = CustomerResiUserRedis.getUserBaseInfo(item.getUserId());
+ if (null != userInfo) {
+ item.setCommentUserName(userInfo.getShowName());
+ item.setCommentUserHeadPhoto(userInfo.getHeadImgUrl());
+ }
+ if (finalMap.containsKey(item.getCommentId())) {
+ List fileList = finalMap.get(item.getCommentId()).stream().map(i -> {
+ CommentFileDTO file = new CommentFileDTO();
+ file.setName(i.getAttachmentName());
+ file.setUrl(i.getAttachmentUrl());
+ file.setDuration(i.getDuration());
+ file.setSize(i.getAttachmentSize());
+ file.setFormat(i.getAttachmentFormat());
+ file.setType(i.getAttachmentType());
+ return file;
+ }).collect(Collectors.toList());
+ item.setImageList(fileList);
+ }
+ });
+ }
+ return new PageData<>(list, pageInfo.getTotal());
+ }
+
+ /**
+ * 评论话题
+ *
+ * @Param tokenDto
+ * @Param formDTO
+ * @Return
+ * @Author zhaoqifeng
+ * @Date 2023/1/30 17:05
+ */
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public void topicComment(TokenDto tokenDto, YtTopicCommentFormDTO formDTO) {
+ YtTopicCommentEntity comment = ConvertUtils.sourceToTarget(formDTO, YtTopicCommentEntity.class);
+ comment.setStatus(TopicConstant.PUBLISHMENT);
+ comment.setCustomerId(tokenDto.getCustomerId());
+ ytTopicCommentDao.insert(comment);
+ //保存评论附件
+ //图片
+ if (CollectionUtils.isNotEmpty(formDTO.getImageList())) {
+ AtomicInteger sort = new AtomicInteger();
+ formDTO.getImageList().forEach(img -> {
+ YtTopicCommentAttachmentEntity attachment = new YtTopicCommentAttachmentEntity();
+ attachment.setCustomerId(tokenDto.getCustomerId());
+ attachment.setTopicId(formDTO.getTopicId());
+ attachment.setTopicCommentId(comment.getId());
+ attachment.setFileName(img.getName());
+ attachment.setAttachmentName("");
+ attachment.setAttachmentSize(img.getSize());
+ attachment.setAttachmentFormat(img.getFormat());
+ attachment.setAttachmentType(img.getType());
+ attachment.setAttachmentUrl(img.getUrl());
+ attachment.setSort(sort.get());
+ attachment.setDuration(img.getDuration());
+ sort.getAndIncrement();
+ ytTopicCommentAttachmentDao.insert(attachment);
+ });
+ }
+ }
+
+ /**
+ * 话题投票
+ *
+ * @Param tokenDto
+ * @Param formDTO
+ * @Return
+ * @Author zhaoqifeng
+ * @Date 2023/1/30 17:08
+ */
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public void topicVote(TokenDto tokenDto, YtTopicVoteFormDTO formDTO) {
+ YtTopicVoteDetailEntity entity = ConvertUtils.sourceToTarget(formDTO, YtTopicVoteDetailEntity.class);
+ entity.setCustomerId(tokenDto.getCustomerId());
+ ytTopicVoteDetailDao.insert(entity);
+ }
+}
\ No newline at end of file
diff --git a/epmet-module/resi-group/resi-group-server/src/main/resources/db/migration/V0.0.28__yt_topic.sql b/epmet-module/resi-group/resi-group-server/src/main/resources/db/migration/V0.0.28__yt_topic.sql
new file mode 100644
index 0000000000..93d13f692f
--- /dev/null
+++ b/epmet-module/resi-group/resi-group-server/src/main/resources/db/migration/V0.0.28__yt_topic.sql
@@ -0,0 +1,92 @@
+CREATE TABLE `yt_topic` (
+ `ID` varchar(64) NOT NULL COMMENT '主键',
+ `CUSTOMER_ID` varchar(64) DEFAULT NULL COMMENT '客户ID',
+ `GRID_ID` varchar(64) DEFAULT NULL COMMENT '网格ID',
+ `TOPIC_CONTENT` text COMMENT '话题内容',
+ `STATUS` varchar(32) NOT NULL COMMENT '话题状态(讨论中 - discussing、 已屏蔽 - hidden、 已关闭 - closed)',
+ `CLOSED_STATUS` varchar(32) DEFAULT NULL COMMENT '关闭状态:已解决 resolved,未解决 unresolved',
+ `PROVINCE` varchar(32) DEFAULT NULL COMMENT '省',
+ `CITY` varchar(32) DEFAULT NULL COMMENT '市',
+ `AREA` varchar(32) DEFAULT NULL COMMENT '区 ',
+ `ADDRESS` varchar(255) NOT NULL COMMENT '地址',
+ `LONGITUDE` varchar(32) DEFAULT NULL COMMENT '经度',
+ `LATITUDE` varchar(32) DEFAULT NULL COMMENT '维度',
+ `LOCATE_ADDRESS` varchar(255) DEFAULT NULL COMMENT '定位地址',
+ `LOCATE_LONGITUDE` varchar(32) DEFAULT NULL COMMENT '定位经度',
+ `LOCATE_LATITUDE` varchar(32) DEFAULT NULL COMMENT '定位维度',
+ `DEL_FLAG` varchar(1) NOT NULL COMMENT '删除标记 0:未删除,1:已删除',
+ `REVISION` int(11) NOT NULL COMMENT '乐观锁',
+ `CREATED_BY` varchar(32) NOT NULL COMMENT '创建人,发布人Id来源于user',
+ `CREATED_TIME` datetime NOT NULL COMMENT '创建时间',
+ `UPDATED_BY` varchar(32) NOT NULL COMMENT '更新人',
+ `UPDATED_TIME` datetime NOT NULL COMMENT '更新时间',
+ PRIMARY KEY (`ID`) USING BTREE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=COMPACT COMMENT='烟台话题信息表';
+CREATE TABLE `yt_topic_attachment` (
+ `ID` varchar(64) NOT NULL COMMENT '主键',
+ `CUSTOMER_ID` varchar(64) DEFAULT NULL COMMENT '客户ID',
+ `TOPIC_ID` varchar(64) NOT NULL COMMENT '话题Id,关联resi_topic的id',
+ `ATTACHMENT_NAME` varchar(64) DEFAULT NULL COMMENT '附件名(uuid随机生成)',
+ `ATTACHMENT_FORMAT` varchar(64) DEFAULT NULL COMMENT '文件格式(JPG、PNG、PDF、JPEG、BMP、MP4、WMA、M4A、MP3、DOC、DOCX、XLS)',
+ `ATTACHMENT_TYPE` varchar(64) DEFAULT NULL COMMENT '附件类型((图片 - image、 视频 - video、 语音 - voice、 文档 - doc))',
+ `ATTACHMENT_URL` varchar(255) NOT NULL COMMENT '附件地址',
+ `SORT` int(1) NOT NULL COMMENT '排序字段',
+ `DURATION` int(11) unsigned zerofill DEFAULT '00000000000' COMMENT '语音或视频时长,秒',
+ `DEL_FLAG` varchar(1) NOT NULL COMMENT '删除标记 0:未删除,1:已删除',
+ `REVISION` int(11) DEFAULT NULL COMMENT '乐观锁',
+ `CREATED_BY` varchar(32) NOT NULL COMMENT '创建人',
+ `CREATED_TIME` datetime NOT NULL COMMENT '创建时间',
+ `UPDATED_BY` varchar(32) NOT NULL COMMENT '更新人',
+ `UPDATED_TIME` datetime NOT NULL COMMENT '更新时间',
+ PRIMARY KEY (`ID`) USING BTREE,
+ KEY `idx_topic_id` (`TOPIC_ID`) USING BTREE COMMENT '话题主键'
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=COMPACT COMMENT='烟台话题附件表';
+CREATE TABLE `yt_topic_comment` (
+ `ID` varchar(64) NOT NULL COMMENT '主键',
+ `CUSTOMER_ID` varchar(64) DEFAULT NULL COMMENT '客户ID',
+ `TOPIC_ID` varchar(64) NOT NULL COMMENT '话题Id,来自resi_topic',
+ `COMMENT_CONTENT` varchar(300) DEFAULT NULL,
+ `STATUS` varchar(32) DEFAULT NULL COMMENT '评论状态:讨论中:discussing;已屏蔽 :hidden',
+ `DEL_FLAG` varchar(1) NOT NULL COMMENT '删除标记 0:未删除,1:已删除',
+ `REVISION` int(11) DEFAULT NULL COMMENT '乐观锁',
+ `CREATED_BY` varchar(32) NOT NULL COMMENT '创建人,评论人Id,来自user',
+ `CREATED_TIME` datetime NOT NULL COMMENT '创建时间',
+ `UPDATED_BY` varchar(32) NOT NULL COMMENT '更新人',
+ `UPDATED_TIME` datetime NOT NULL COMMENT '更新时间',
+ PRIMARY KEY (`ID`) USING BTREE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=COMPACT COMMENT='烟台话题评论表';
+CREATE TABLE `yt_topic_comment_attachment` (
+ `ID` varchar(64) NOT NULL COMMENT '主键',
+ `CUSTOMER_ID` varchar(64) NOT NULL COMMENT '客户ID',
+ `TOPIC_ID` varchar(64) NOT NULL COMMENT '话题Id',
+ `TOPIC_COMMENT_ID` varchar(64) NOT NULL COMMENT '评论Id',
+ `FILE_NAME` varchar(255) DEFAULT NULL COMMENT '文件名',
+ `ATTACHMENT_NAME` varchar(64) DEFAULT NULL COMMENT '附件名(uuid随机生成)',
+ `ATTACHMENT_SIZE` int(11) DEFAULT NULL COMMENT '文件大小,单位b',
+ `ATTACHMENT_FORMAT` varchar(64) DEFAULT NULL COMMENT '文件格式(JPG、PNG、PDF、JPEG、BMP、MP4、WMA、M4A、MP3、DOC、DOCX、XLS)',
+ `ATTACHMENT_TYPE` varchar(64) DEFAULT NULL COMMENT '附件类型((图片 - image、 视频 - video、 语音 - voice、 文档 - doc))',
+ `ATTACHMENT_URL` varchar(255) NOT NULL COMMENT '附件地址',
+ `SORT` int(1) NOT NULL COMMENT '排序字段',
+ `DURATION` int(11) unsigned zerofill DEFAULT '00000000000' COMMENT '语音或视频时长,秒',
+ `DEL_FLAG` varchar(1) NOT NULL COMMENT '删除标记 0:未删除,1:已删除',
+ `REVISION` int(11) NOT NULL COMMENT '乐观锁',
+ `CREATED_BY` varchar(32) NOT NULL COMMENT '创建人',
+ `CREATED_TIME` datetime NOT NULL COMMENT '创建时间',
+ `UPDATED_BY` varchar(32) NOT NULL COMMENT '更新人',
+ `UPDATED_TIME` datetime NOT NULL COMMENT '更新时间',
+ PRIMARY KEY (`ID`) USING BTREE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=COMPACT COMMENT='烟台话题评论附件表';
+CREATE TABLE `yt_topic_vote_detail` (
+ `ID` varchar(32) NOT NULL COMMENT '主键ID',
+ `CUSTOMER_ID` varchar(64) DEFAULT NULL COMMENT '客户ID',
+ `TOPIC_ID` varchar(32) NOT NULL COMMENT '话题ID',
+ `ATTITUDE` varchar(32) NOT NULL COMMENT '态度 - opposition(反对)support(赞成)',
+ `DEL_FLAG` varchar(1) NOT NULL DEFAULT '0' COMMENT '删除标识 0未删除、1已删除',
+ `REVISION` int(11) NOT NULL DEFAULT '0' COMMENT '乐观锁',
+ `CREATED_BY` varchar(32) NOT NULL COMMENT '创建人',
+ `CREATED_TIME` datetime NOT NULL COMMENT '创建时间',
+ `UPDATED_BY` varchar(32) NOT NULL COMMENT '更新人',
+ `UPDATED_TIME` datetime NOT NULL COMMENT '更新时间',
+ PRIMARY KEY (`ID`),
+ KEY `idx_topic_id` (`TOPIC_ID`) USING BTREE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='话题表决记录表';
\ No newline at end of file
diff --git a/epmet-module/resi-group/resi-group-server/src/main/resources/mapper/topic/YtTopicAttachmentDao.xml b/epmet-module/resi-group/resi-group-server/src/main/resources/mapper/topic/YtTopicAttachmentDao.xml
new file mode 100644
index 0000000000..1ce30b7819
--- /dev/null
+++ b/epmet-module/resi-group/resi-group-server/src/main/resources/mapper/topic/YtTopicAttachmentDao.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/epmet-module/resi-group/resi-group-server/src/main/resources/mapper/topic/YtTopicCommentAttachmentDao.xml b/epmet-module/resi-group/resi-group-server/src/main/resources/mapper/topic/YtTopicCommentAttachmentDao.xml
new file mode 100644
index 0000000000..7046356677
--- /dev/null
+++ b/epmet-module/resi-group/resi-group-server/src/main/resources/mapper/topic/YtTopicCommentAttachmentDao.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/epmet-module/resi-group/resi-group-server/src/main/resources/mapper/topic/YtTopicCommentDao.xml b/epmet-module/resi-group/resi-group-server/src/main/resources/mapper/topic/YtTopicCommentDao.xml
new file mode 100644
index 0000000000..8751ea8bb9
--- /dev/null
+++ b/epmet-module/resi-group/resi-group-server/src/main/resources/mapper/topic/YtTopicCommentDao.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/epmet-module/resi-group/resi-group-server/src/main/resources/mapper/topic/YtTopicDao.xml b/epmet-module/resi-group/resi-group-server/src/main/resources/mapper/topic/YtTopicDao.xml
new file mode 100644
index 0000000000..3abcced9d6
--- /dev/null
+++ b/epmet-module/resi-group/resi-group-server/src/main/resources/mapper/topic/YtTopicDao.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/epmet-module/resi-group/resi-group-server/src/main/resources/mapper/topic/YtTopicVoteDetailDao.xml b/epmet-module/resi-group/resi-group-server/src/main/resources/mapper/topic/YtTopicVoteDetailDao.xml
new file mode 100644
index 0000000000..81277dd963
--- /dev/null
+++ b/epmet-module/resi-group/resi-group-server/src/main/resources/mapper/topic/YtTopicVoteDetailDao.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file