From df97402324945f426d068702d3050e13af6c0143 Mon Sep 17 00:00:00 2001 From: wen <1455474577@qq.com> Date: Thu, 13 Jan 2022 18:09:53 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90=E5=B0=8F=E7=A8=8B=E5=BA=8F?= =?UTF-8?q?=E7=AB=AF=EF=BC=8C=E7=94=A8=E6=88=B7=E7=BB=99=E5=B9=B3=E5=8F=B0?= =?UTF-8?q?=E5=8F=91=E9=80=81=E8=81=8A=E5=A4=A9=E4=BF=A1=E6=81=AF=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=20=E5=AE=8C=E6=88=90=E5=B0=8F=E7=A8=8B=E5=BA=8F?= =?UTF-8?q?=E7=AB=AF=EF=BC=8C=E6=9F=A5=E8=AF=A2=E7=94=A8=E6=88=B7=E4=B8=8E?= =?UTF-8?q?=E5=B9=B3=E5=8F=B0=E6=89=80=E5=8F=91=E9=80=81=E7=9A=84=E4=BF=A1?= =?UTF-8?q?=E6=81=AF=E6=8E=A5=E5=8F=A3=EF=BC=8C=20=E5=A4=A7=E8=87=B4?= =?UTF-8?q?=E5=AE=8C=E6=88=90=E5=B9=B3=E5=8F=B0=E7=AB=AF=EF=BC=8C=E5=B9=B3?= =?UTF-8?q?=E5=8F=B0=E7=BB=99=E7=94=A8=E6=88=B7=E5=8F=91=E9=80=81=E7=95=99?= =?UTF-8?q?=E8=A8=80=E6=8E=A5=E5=8F=A3=EF=BC=8C=20=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E6=97=A5=E5=BF=97=EF=BC=8C=E6=89=93=E5=8D=B0Mybatis=E8=BF=87?= =?UTF-8?q?=E7=A8=8B=E4=BF=A1=E6=81=AF=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../XhpcMessageBoardApplication.java | 2 +- .../api/XhpcMessageBoardApiController.java | 22 +- .../XhpcMessageBoardController.java | 35 +++ .../board/domain/PlatformQueryCondition.java | 29 ++ .../PlatformSendMessageToUserRequest.java | 31 ++ .../domain/QueryUserMassageResponse.java | 48 +++ .../domain/SendMessageToPlatformRequest.java | 12 +- .../xhpc/board/domain/UserQueryCondition.java | 29 ++ .../board/mapper/XhpcMessageBoardMapper.java | 97 ++++++ .../XhpcMessageBoardReceiveUserMapper.java | 40 +++ .../com/xhpc/board/pojo/XhpcMessageBoard.java | 68 ++++ .../pojo/XhpcMessageBoardReceiveUser.java | 52 ++++ .../service/XhpcMessageBoardService.java | 39 ++- .../impl/XhpcMessageBoardServiceImpl.java | 225 +++++++++++++- .../src/main/resources/bootstrap.yml | 5 +- .../mapper/XhpcMessageBoardMapper.xml | 292 ++++++++++++++++++ .../XhpcMessageBoardReceiveUserMapper.xml | 102 ++++++ 17 files changed, 1112 insertions(+), 16 deletions(-) rename xhpc-modules/xhpc-message-board/src/main/java/com/xhpc/{board => }/XhpcMessageBoardApplication.java (98%) create mode 100644 xhpc-modules/xhpc-message-board/src/main/java/com/xhpc/board/controller/XhpcMessageBoardController.java create mode 100644 xhpc-modules/xhpc-message-board/src/main/java/com/xhpc/board/domain/PlatformQueryCondition.java create mode 100644 xhpc-modules/xhpc-message-board/src/main/java/com/xhpc/board/domain/PlatformSendMessageToUserRequest.java create mode 100644 xhpc-modules/xhpc-message-board/src/main/java/com/xhpc/board/domain/QueryUserMassageResponse.java create mode 100644 xhpc-modules/xhpc-message-board/src/main/java/com/xhpc/board/domain/UserQueryCondition.java create mode 100644 xhpc-modules/xhpc-message-board/src/main/java/com/xhpc/board/mapper/XhpcMessageBoardMapper.java create mode 100644 xhpc-modules/xhpc-message-board/src/main/java/com/xhpc/board/mapper/XhpcMessageBoardReceiveUserMapper.java create mode 100644 xhpc-modules/xhpc-message-board/src/main/java/com/xhpc/board/pojo/XhpcMessageBoard.java create mode 100644 xhpc-modules/xhpc-message-board/src/main/java/com/xhpc/board/pojo/XhpcMessageBoardReceiveUser.java create mode 100644 xhpc-modules/xhpc-message-board/src/main/resources/mapper/XhpcMessageBoardMapper.xml create mode 100644 xhpc-modules/xhpc-message-board/src/main/resources/mapper/XhpcMessageBoardReceiveUserMapper.xml diff --git a/xhpc-modules/xhpc-message-board/src/main/java/com/xhpc/board/XhpcMessageBoardApplication.java b/xhpc-modules/xhpc-message-board/src/main/java/com/xhpc/XhpcMessageBoardApplication.java similarity index 98% rename from xhpc-modules/xhpc-message-board/src/main/java/com/xhpc/board/XhpcMessageBoardApplication.java rename to xhpc-modules/xhpc-message-board/src/main/java/com/xhpc/XhpcMessageBoardApplication.java index 27a76f51..36f0e453 100644 --- a/xhpc-modules/xhpc-message-board/src/main/java/com/xhpc/board/XhpcMessageBoardApplication.java +++ b/xhpc-modules/xhpc-message-board/src/main/java/com/xhpc/XhpcMessageBoardApplication.java @@ -1,4 +1,4 @@ -package com.xhpc.board; +package com.xhpc; import com.xhpc.common.security.annotation.EnableCustomConfig; import com.xhpc.common.security.annotation.EnableRyFeignClients; diff --git a/xhpc-modules/xhpc-message-board/src/main/java/com/xhpc/board/api/XhpcMessageBoardApiController.java b/xhpc-modules/xhpc-message-board/src/main/java/com/xhpc/board/api/XhpcMessageBoardApiController.java index eed7651e..5ff82e64 100644 --- a/xhpc-modules/xhpc-message-board/src/main/java/com/xhpc/board/api/XhpcMessageBoardApiController.java +++ b/xhpc-modules/xhpc-message-board/src/main/java/com/xhpc/board/api/XhpcMessageBoardApiController.java @@ -1,13 +1,14 @@ package com.xhpc.board.api; +import com.xhpc.board.domain.QueryUserMassageResponse; import com.xhpc.board.domain.SendMessageToPlatformRequest; +import com.xhpc.board.domain.UserQueryCondition; import com.xhpc.board.service.XhpcMessageBoardService; import com.xhpc.common.core.web.controller.BaseController; import com.xhpc.common.core.web.domain.AjaxResult; -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 com.xhpc.common.log.annotation.Log; +import com.xhpc.common.log.enums.BusinessType; +import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; @@ -19,7 +20,7 @@ import javax.annotation.Resource; * @since version-1.0 */ @RestController -@RequestMapping("/api/message-board/") +@RequestMapping("/api/message-board") public class XhpcMessageBoardApiController extends BaseController { @Resource @@ -33,9 +34,18 @@ public class XhpcMessageBoardApiController extends BaseController { * @since version-1.0 */ @PostMapping("/user/message") + @Log(title = "留言板-用户发送聊天信息", businessType = BusinessType.INSERT) public AjaxResult sendMessageToPlatform(@RequestBody SendMessageToPlatformRequest userMessage) { + xhpcMessageBoardService.writeUserMessageToDb(userMessage); return AjaxResult.success(); } -} + @GetMapping("/user/message") + public AjaxResult queryUserMessage(UserQueryCondition userQueryCondition) { + + QueryUserMassageResponse queryUserMassageResponse = xhpcMessageBoardService.queryUserMessage(userQueryCondition); + return AjaxResult.success(queryUserMassageResponse); + } + +} \ No newline at end of file diff --git a/xhpc-modules/xhpc-message-board/src/main/java/com/xhpc/board/controller/XhpcMessageBoardController.java b/xhpc-modules/xhpc-message-board/src/main/java/com/xhpc/board/controller/XhpcMessageBoardController.java new file mode 100644 index 00000000..24c2b409 --- /dev/null +++ b/xhpc-modules/xhpc-message-board/src/main/java/com/xhpc/board/controller/XhpcMessageBoardController.java @@ -0,0 +1,35 @@ +package com.xhpc.board.controller; + +import com.xhpc.board.domain.PlatformSendMessageToUserRequest; +import com.xhpc.board.service.XhpcMessageBoardService; +import com.xhpc.common.core.web.domain.AjaxResult; +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 javax.annotation.Resource; + +/** + * 留言板服务Controller + * + * @author WH + * @date 2022/1/10 10:02 + * @since version-1.0 + */ +@RestController +@RequestMapping("/board") +public class XhpcMessageBoardController { + + @Resource + XhpcMessageBoardService xhpcMessageBoardService; + + @PostMapping("/platform/message") + public AjaxResult platformSendMessageToUser(@RequestBody PlatformSendMessageToUserRequest platformRequest) { + + xhpcMessageBoardService.platformSendMessageToUser(platformRequest); + + return AjaxResult.success(); + } + +} diff --git a/xhpc-modules/xhpc-message-board/src/main/java/com/xhpc/board/domain/PlatformQueryCondition.java b/xhpc-modules/xhpc-message-board/src/main/java/com/xhpc/board/domain/PlatformQueryCondition.java new file mode 100644 index 00000000..2d36a24c --- /dev/null +++ b/xhpc-modules/xhpc-message-board/src/main/java/com/xhpc/board/domain/PlatformQueryCondition.java @@ -0,0 +1,29 @@ +package com.xhpc.board.domain; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 平台查询条件 + * + * @author WH + * @date 2022/1/12 15:23 + * @since version-1.0 + */ +@NoArgsConstructor +@Data +public class PlatformQueryCondition { + + @JsonProperty("senderAccount") + private String senderAccount; + @JsonProperty("senderType") + private Integer senderType; + @JsonProperty("tenantId") + private String tenantId; + @JsonProperty("tenantType") + private Integer tenantType; + @JsonProperty("sendMessageTime") + private String sendMessageTime; + +} diff --git a/xhpc-modules/xhpc-message-board/src/main/java/com/xhpc/board/domain/PlatformSendMessageToUserRequest.java b/xhpc-modules/xhpc-message-board/src/main/java/com/xhpc/board/domain/PlatformSendMessageToUserRequest.java new file mode 100644 index 00000000..943e408a --- /dev/null +++ b/xhpc-modules/xhpc-message-board/src/main/java/com/xhpc/board/domain/PlatformSendMessageToUserRequest.java @@ -0,0 +1,31 @@ +package com.xhpc.board.domain; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 平台向用户发送的信息包装类 + * + * @author WH + * @date 2022/1/11 13:47 + * @since version-1.0 + */ +@NoArgsConstructor +@Data +public class PlatformSendMessageToUserRequest { + + @JsonProperty("sendMessageTime") + private String sendMessageTime; + @JsonProperty("senderAccount") + private String senderAccount; + @JsonProperty("senderType") + private Integer senderType; + @JsonProperty("tenantId") + private String tenantId; + @JsonProperty("tenantType") + private Integer tenantType; + @JsonProperty("messageContent") + private String messageContent; + +} diff --git a/xhpc-modules/xhpc-message-board/src/main/java/com/xhpc/board/domain/QueryUserMassageResponse.java b/xhpc-modules/xhpc-message-board/src/main/java/com/xhpc/board/domain/QueryUserMassageResponse.java new file mode 100644 index 00000000..7bf9fb9e --- /dev/null +++ b/xhpc-modules/xhpc-message-board/src/main/java/com/xhpc/board/domain/QueryUserMassageResponse.java @@ -0,0 +1,48 @@ +package com.xhpc.board.domain; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +/** + * 查询用户信息的返回封装数据类 + * + * @author WH + * @date 2022/1/13 10:23 + * @since version-1.0 + */ +@NoArgsConstructor +@Data +public class QueryUserMassageResponse { + + @JsonProperty("nextQueryTime") + private String nextQueryTime; + @JsonProperty("data") + private List data; + + @NoArgsConstructor + @Data + public static class DataDTO { + + @JsonProperty("senderType") + private Integer senderType; + @JsonProperty("senderAccount") + private String senderAccount; + @JsonProperty("sendMessageTime") + private String sendMessageTime; + @JsonProperty("messageContent") + private String messageContent; + @JsonProperty("tenantType") + private Integer tenantType; + @JsonProperty("tenantId") + private String tenantId; + @JsonProperty("have_new_info") + private Integer haveNewInfo; + @JsonProperty("sender") + private Integer sender; + + } + +} diff --git a/xhpc-modules/xhpc-message-board/src/main/java/com/xhpc/board/domain/SendMessageToPlatformRequest.java b/xhpc-modules/xhpc-message-board/src/main/java/com/xhpc/board/domain/SendMessageToPlatformRequest.java index 1a7a2aa4..6b950fa3 100644 --- a/xhpc-modules/xhpc-message-board/src/main/java/com/xhpc/board/domain/SendMessageToPlatformRequest.java +++ b/xhpc-modules/xhpc-message-board/src/main/java/com/xhpc/board/domain/SendMessageToPlatformRequest.java @@ -21,11 +21,11 @@ public class SendMessageToPlatformRequest { private String senderAccount; @JsonProperty("senderType") private Integer senderType; - @JsonProperty("senderContent") - private String senderContent; - @JsonProperty("receiveId") - private String receiveId; - @JsonProperty("receiverType") - private Integer receiverType; + @JsonProperty("messageContent") + private String messageContent; + @JsonProperty("tenantId") + private String tenantId; + @JsonProperty("tenantType") + private Integer tenantType; } diff --git a/xhpc-modules/xhpc-message-board/src/main/java/com/xhpc/board/domain/UserQueryCondition.java b/xhpc-modules/xhpc-message-board/src/main/java/com/xhpc/board/domain/UserQueryCondition.java new file mode 100644 index 00000000..cc8a35b3 --- /dev/null +++ b/xhpc-modules/xhpc-message-board/src/main/java/com/xhpc/board/domain/UserQueryCondition.java @@ -0,0 +1,29 @@ +package com.xhpc.board.domain; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 用户查询条件 + * + * @author WH + * @date 2022/1/12 15:23 + * @since version-1.0 + */ +@NoArgsConstructor +@Data +public class UserQueryCondition { + + @JsonProperty("senderAccount") + private String senderAccount; + @JsonProperty("senderType") + private Integer senderType; + @JsonProperty("tenantId") + private String tenantId; + @JsonProperty("tenantType") + private Integer tenantType; + @JsonProperty("sendMessageTime") + private String sendMessageTime; + +} diff --git a/xhpc-modules/xhpc-message-board/src/main/java/com/xhpc/board/mapper/XhpcMessageBoardMapper.java b/xhpc-modules/xhpc-message-board/src/main/java/com/xhpc/board/mapper/XhpcMessageBoardMapper.java new file mode 100644 index 00000000..2bd03c28 --- /dev/null +++ b/xhpc-modules/xhpc-message-board/src/main/java/com/xhpc/board/mapper/XhpcMessageBoardMapper.java @@ -0,0 +1,97 @@ +package com.xhpc.board.mapper; + +import com.xhpc.board.domain.PlatformSendMessageToUserRequest; +import com.xhpc.board.domain.SendMessageToPlatformRequest; +import com.xhpc.board.domain.UserQueryCondition; +import com.xhpc.board.pojo.XhpcMessageBoard; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface XhpcMessageBoardMapper { + + int deleteByPrimaryKey(Long messageId); + + int insert(XhpcMessageBoard record); + + int insertSelective(XhpcMessageBoard record); + + XhpcMessageBoard selectByPrimaryKey(Long messageId); + + int updateByPrimaryKeySelective(XhpcMessageBoard record); + + int updateByPrimaryKey(XhpcMessageBoard record); + + /** + * 用户端存入时间记录 + * + * @param userMessage 用户时间记录信息 + * @author WH + * @date 2022/1/11 17:46 + * @since version-1.0 + */ + void insertUserTimeMessageRecord(SendMessageToPlatformRequest userMessage); + + /** + * 用户端存入发送的消息 + * + * @param userMessage 用户发送的消息 + * @author WH + * @date 2022/1/11 18:16 + * @since version-1.0 + */ + void insertUserMessage(SendMessageToPlatformRequest userMessage); + + /** + * 平台端存入发送的信息 + * + * @param platformRequest 平台所要发送给用户的信息 + * @author WH + * @date 2022/1/12 11:30 + * @since version-1.0 + */ + void insertPlatformMessage(PlatformSendMessageToUserRequest platformRequest); + + /** + * 平台端存入时间记录 + * + * @param platformRequest 平台时间记录信息 + * @author WH + * @date 2022/1/12 11:49 + * @since version-1.0 + */ + void insertPlatformTimeMessageRecord(PlatformSendMessageToUserRequest platformRequest); + + /** + * 查询用户一个月的记录 + * + * @param userQueryCondition 用户查询条件 + * @param nextTimeStr 上一个月的时间 + * @return 返回一个装有一个月的数据的集合 + * @author WH + * @date 2022/1/12 16:03 + * @since version-1.0 + */ + List selectBy(@Param("userQueryCondition") UserQueryCondition userQueryCondition, @Param("nextTimeStr") String nextTimeStr); + + /** + * 给查询出来的记录,添加用户已读状态 + * + * @param messageIdList 查询出来的记录的id集合 + * @author WH + * @date 2022/1/13 10:16 + * @since version-1.0 + */ + void setUserReadedStatus(List messageIdList); + + /** + * 查询用户所有时间记录 + * + * @param userQueryCondition 用户信息 + * @author WH + * @date 2022/1/13 10:56 + * @since version-1.0 + */ + List selectTimeRecords(UserQueryCondition userQueryCondition); + +} \ No newline at end of file diff --git a/xhpc-modules/xhpc-message-board/src/main/java/com/xhpc/board/mapper/XhpcMessageBoardReceiveUserMapper.java b/xhpc-modules/xhpc-message-board/src/main/java/com/xhpc/board/mapper/XhpcMessageBoardReceiveUserMapper.java new file mode 100644 index 00000000..54ae11b7 --- /dev/null +++ b/xhpc-modules/xhpc-message-board/src/main/java/com/xhpc/board/mapper/XhpcMessageBoardReceiveUserMapper.java @@ -0,0 +1,40 @@ +package com.xhpc.board.mapper; + +import com.xhpc.board.domain.SendMessageToPlatformRequest; +import com.xhpc.board.pojo.XhpcMessageBoardReceiveUser; + +/** + * the mapper of the xhpc_message_board_receive_user + * + * @author WH + * @date 2022/1/11 10:26 + * @since version-1.0 + */ +public interface XhpcMessageBoardReceiveUserMapper { + + int insert(XhpcMessageBoardReceiveUser record); + + int insertSelective(XhpcMessageBoardReceiveUser record); + + /** + * 通过用户id,用户类型,租户id,租户类型,查询指定记录 + * + * @param userMessage 储存条件的包装类 + * @return 指定记录 + * @author WH + * @date 2022/1/10 18:03 + * @since version-1.0 + */ + XhpcMessageBoardReceiveUser findOneByCondition(SendMessageToPlatformRequest userMessage); + + /** + * 将指定用户记录have_new_info字段的值,将其设置为0,即该用户发送了新消息 + * + * @param userMessage 指定要更新哪个记录的条件 + * @author WH + * @date 2022/1/11 10:31 + * @since version-1.0 + */ + void updateHaveNewInfoFiledByUserCondition(SendMessageToPlatformRequest userMessage); + +} \ No newline at end of file diff --git a/xhpc-modules/xhpc-message-board/src/main/java/com/xhpc/board/pojo/XhpcMessageBoard.java b/xhpc-modules/xhpc-message-board/src/main/java/com/xhpc/board/pojo/XhpcMessageBoard.java new file mode 100644 index 00000000..2c41e605 --- /dev/null +++ b/xhpc-modules/xhpc-message-board/src/main/java/com/xhpc/board/pojo/XhpcMessageBoard.java @@ -0,0 +1,68 @@ +package com.xhpc.board.pojo; + +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * xhpc_message_board + * + * @author WH + */ +@Data +public class XhpcMessageBoard implements Serializable { + + /** + * 消息id + */ + private Long messageId; + + /** + * 用户类型 + */ + private Integer senderType; + + /** + * 用户账号 + */ + private String senderAccount; + + /** + * 发送消息的时间 + */ + private Date sendMessageTime; + + /** + * 消息内容 + */ + private String messageContent; + + /** + * 租户类型 + */ + private Integer tenantType; + + /** + * 租户id(平台id) + */ + private String tenantId; + + /** + * 租户发送的消息,用户是否已读,默认为null,表示未读,0表示已读 + */ + private Integer haveNewInfo; + + /** + * 逻辑删除字段 + */ + private Integer delFlag; + + /** + * 发送者(0,用户,1,时间,2,平台(租户)) + */ + private Integer sender; + + private static final long serialVersionUID = 1L; + +} \ No newline at end of file diff --git a/xhpc-modules/xhpc-message-board/src/main/java/com/xhpc/board/pojo/XhpcMessageBoardReceiveUser.java b/xhpc-modules/xhpc-message-board/src/main/java/com/xhpc/board/pojo/XhpcMessageBoardReceiveUser.java new file mode 100644 index 00000000..f71d6430 --- /dev/null +++ b/xhpc-modules/xhpc-message-board/src/main/java/com/xhpc/board/pojo/XhpcMessageBoardReceiveUser.java @@ -0,0 +1,52 @@ +package com.xhpc.board.pojo; + +import lombok.Data; + +import java.io.Serializable; + +/** + * xhpc_message_board_receive_user + * + * @author WH + */ +@Data +public class XhpcMessageBoardReceiveUser implements Serializable { + + /** + * 接收者id(租户id) + */ + private String tenantId; + + /** + * 接收者类型(租户类型) + */ + private Integer tenantType; + + /** + * 发送者账号 + */ + private String senderAccount; + + /** + * 发送者类型(0 C端用户 1 流量方用户 2社区用户 3B端用户) + */ + private Integer senderType; + + /** + * 用户头像地址 + */ + private String userIcon; + + /** + * 是否有新消息(null表示有新消息,0表示没有) + */ + private Integer haveNewInfo; + + /** + * 逻辑删除(0为删除) + */ + private Integer delFlag; + + private static final long serialVersionUID = 1L; + +} \ No newline at end of file diff --git a/xhpc-modules/xhpc-message-board/src/main/java/com/xhpc/board/service/XhpcMessageBoardService.java b/xhpc-modules/xhpc-message-board/src/main/java/com/xhpc/board/service/XhpcMessageBoardService.java index cae8b8ce..d03e5152 100644 --- a/xhpc-modules/xhpc-message-board/src/main/java/com/xhpc/board/service/XhpcMessageBoardService.java +++ b/xhpc-modules/xhpc-message-board/src/main/java/com/xhpc/board/service/XhpcMessageBoardService.java @@ -1,5 +1,10 @@ package com.xhpc.board.service; +import com.xhpc.board.domain.PlatformSendMessageToUserRequest; +import com.xhpc.board.domain.QueryUserMassageResponse; +import com.xhpc.board.domain.SendMessageToPlatformRequest; +import com.xhpc.board.domain.UserQueryCondition; + /** * 留言板服务的Service * @@ -7,6 +12,38 @@ package com.xhpc.board.service; * @date 2022/1/7 17:57 * @since version-1.0 */ -public class XhpcMessageBoardService { +public interface XhpcMessageBoardService { + + /** + * 将用户发送的信息保存到数据库中 + * + * @param userMessage 用户发送的信息 + * @author WH + * @date 2022/1/10 14:17 + * @since version-1.0 + */ + void writeUserMessageToDb(SendMessageToPlatformRequest userMessage); + + /** + * 将平台(租户)发送的信息保存到数据库中 + * + * @param platformRequest 平台消息 + * @author WH + * @date 2022/1/11 13:58 + * @since version-1.0 + */ + void platformSendMessageToUser(PlatformSendMessageToUserRequest platformRequest); + + /** + * 根据用户条件,查询指定的数据库中的记录 + * + * @param userQueryCondition 用户传入的条件 + * @return 用户在数据库中发送的记录 + * @author WH + * @date 2022/1/12 15:30 + * @since version-1.0 + */ + QueryUserMassageResponse queryUserMessage(UserQueryCondition userQueryCondition); + } diff --git a/xhpc-modules/xhpc-message-board/src/main/java/com/xhpc/board/service/impl/XhpcMessageBoardServiceImpl.java b/xhpc-modules/xhpc-message-board/src/main/java/com/xhpc/board/service/impl/XhpcMessageBoardServiceImpl.java index 9fee818f..57d1f8c0 100644 --- a/xhpc-modules/xhpc-message-board/src/main/java/com/xhpc/board/service/impl/XhpcMessageBoardServiceImpl.java +++ b/xhpc-modules/xhpc-message-board/src/main/java/com/xhpc/board/service/impl/XhpcMessageBoardServiceImpl.java @@ -1,5 +1,228 @@ package com.xhpc.board.service.impl; -public class XhpcMessageBoardServiceImpl { +import com.xhpc.board.domain.PlatformSendMessageToUserRequest; +import com.xhpc.board.domain.QueryUserMassageResponse; +import com.xhpc.board.domain.SendMessageToPlatformRequest; +import com.xhpc.board.domain.UserQueryCondition; +import com.xhpc.board.mapper.XhpcMessageBoardMapper; +import com.xhpc.board.mapper.XhpcMessageBoardReceiveUserMapper; +import com.xhpc.board.pojo.XhpcMessageBoard; +import com.xhpc.board.pojo.XhpcMessageBoardReceiveUser; +import com.xhpc.board.service.XhpcMessageBoardService; +import com.xhpc.common.api.UserTypeService; +import com.xhpc.common.core.domain.R; +import com.xhpc.common.core.utils.DateUtils; +import com.xhpc.common.core.utils.bean.BeanUtils; +import com.xhpc.common.redis.service.RedisService; +import com.xhpc.common.security.service.TokenService; +import com.xhpc.common.util.DateUtil; +import com.xhpc.system.api.domain.SysUser; +import com.xhpc.system.api.model.LoginUser; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.*; + +/** + * 留言板实现类 + * + * @author WH + */ +@Service +public class XhpcMessageBoardServiceImpl implements XhpcMessageBoardService { + + @Resource + TokenService tokenService; + @Resource + XhpcMessageBoardMapper messageBoardMapper; + @Resource + XhpcMessageBoardReceiveUserMapper xhpcMessageBoardReceiveUserMapper; + @Resource + RedisService redisService; + @Resource + UserTypeService userTypeService; + + + /** + * 将用户发送的信息保存到数据库中 + * + * @param userMessage 用户发送的信息 + * @author WH + * @date 2022/1/10 14:17 + * @since version-1.0 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public void writeUserMessageToDb(SendMessageToPlatformRequest userMessage) { + //解析Token,获取用户与平台用户信息 + LoginUser loginUser = tokenService.getLoginUser(); + String userRedisKey = "userMessageValidTime:" + loginUser.getUserType() + ":" + loginUser.getUserid() + ":" + userMessage.getTenantType() + ":" + userMessage.getTenantId(); + //使用Redis判断消息发送是否大于5分钟: + Object cacheObject = redisService.getCacheObject(userRedisKey); + String currentTime; + if (cacheObject == null) { + //设置当前时间 + currentTime = DateUtil.getYyyyMmDdHhMmSs(); + redisService.setCacheObject(userRedisKey, currentTime); + redisService.expire(userRedisKey, 60 * 5); + //设置平台RedisKey的有效时间,保证双方时间数据同步 + String platformRedisKey = "PlatformMessageValidTime:" + userMessage.getTenantType() + ":" + userMessage.getTenantId() + ":" + loginUser.getUserType() + ":" + loginUser.getUsername(); + redisService.setCacheObject(platformRedisKey, currentTime); + redisService.expire(platformRedisKey, 60 * 5); + userMessage.setSendMessageTime(currentTime); + userMessage.setSenderAccount(loginUser.getUsername()); + userMessage.setSenderType(loginUser.getUserType()); + messageBoardMapper.insertUserTimeMessageRecord(userMessage); + messageBoardMapper.insertUserMessage(userMessage); + XhpcMessageBoardReceiveUser receiverUser = xhpcMessageBoardReceiveUserMapper.findOneByCondition(userMessage); + if (receiverUser == null) { + XhpcMessageBoardReceiveUser xhpcMessageBoardReceiveUser = new XhpcMessageBoardReceiveUser(); + BeanUtils.copyProperties(userMessage, xhpcMessageBoardReceiveUser); + //发送请求所返回的响应信息 + R> result = userTypeService.getUser(null, loginUser.getUserid(), loginUser.getUserType(), null, userMessage.getTenantId()); + Map userInfo = result.getData(); + String avatar = (String) userInfo.get("avatar"); + xhpcMessageBoardReceiveUser.setUserIcon(avatar); + xhpcMessageBoardReceiveUser.setHaveNewInfo(0); + xhpcMessageBoardReceiveUserMapper.insertSelective(xhpcMessageBoardReceiveUser); + } else { + xhpcMessageBoardReceiveUserMapper.updateHaveNewInfoFiledByUserCondition(userMessage); + } + } else { + //reset redis key valid time + redisService.expire(userRedisKey, 60 * 5); + currentTime = (String) cacheObject; + userMessage.setSendMessageTime(currentTime); + //设置用户账号,用户类型 + userMessage.setSenderAccount(loginUser.getUsername()); + userMessage.setSenderType(loginUser.getUserType()); + messageBoardMapper.insertUserMessage(userMessage); + //向租户显示的列表中添加该用户信息,表示该用户来新消息了,如果列表中已经有该用户了,则只更新状态即可。 + XhpcMessageBoardReceiveUser receiverUser = xhpcMessageBoardReceiveUserMapper.findOneByCondition(userMessage); + if (receiverUser == null) { + XhpcMessageBoardReceiveUser xhpcMessageBoardReceiveUser = new XhpcMessageBoardReceiveUser(); + BeanUtils.copyProperties(userMessage, xhpcMessageBoardReceiveUser); + //发送请求所返回的响应信息 + R> result = userTypeService.getUser(null, loginUser.getUserid(), loginUser.getUserType(), null, userMessage.getTenantId()); + Map userInfo = result.getData(); + String avatar = (String) userInfo.get("avatar"); + xhpcMessageBoardReceiveUser.setUserIcon(avatar); + xhpcMessageBoardReceiveUser.setHaveNewInfo(0); + xhpcMessageBoardReceiveUserMapper.insertSelective(xhpcMessageBoardReceiveUser); + } else { + xhpcMessageBoardReceiveUserMapper.updateHaveNewInfoFiledByUserCondition(userMessage); + } + } + } + + /** + * 将平台(租户)发送的信息保存到数据库中 + * + * @param platformRequest 平台消息 + * @author WH + * @date 2022/1/11 13:58 + * @since version-1.0 + */ + @Override + public void platformSendMessageToUser(PlatformSendMessageToUserRequest platformRequest) { + + //获取平台用户信息 + SysUser sysUser = tokenService.getLoginUser().getSysUser(); + //使用redis控制发送时间 + String platformRedisKey = "PlatformMessageValidTime:" + "0:" + sysUser.getTenantId() + ":" + platformRequest.getSenderType() + ":" + platformRequest.getSenderAccount(); + Object cacheObject = redisService.getCacheObject(platformRedisKey); + String currentTime; + if (cacheObject == null) { + //设置当前时间 + currentTime = DateUtil.getYyyyMmDdHhMmSs(); + redisService.setCacheObject(platformRedisKey, currentTime); + redisService.expire(platformRedisKey, 60 * 5); + //设置用户RedisKey的有效时间,保证双方时间数据同步 + String userRedisKey = "userMessageValidTime:" + platformRequest.getSenderType() + ":" + platformRequest.getSenderAccount() + ":" + "0:" + sysUser.getTenantId(); + redisService.setCacheObject(userRedisKey, currentTime); + redisService.expire(userRedisKey, 60 * 5); + platformRequest.setSendMessageTime(currentTime); + platformRequest.setTenantId(sysUser.getTenantId()); + platformRequest.setTenantType(0); + messageBoardMapper.insertPlatformTimeMessageRecord(platformRequest); + messageBoardMapper.insertPlatformMessage(platformRequest); + } + //reset redis key valid time + redisService.expire(platformRedisKey, 60 * 5); + platformRequest.setSendMessageTime((String) cacheObject); + platformRequest.setTenantId(sysUser.getTenantId()); + platformRequest.setTenantType(0); + messageBoardMapper.insertPlatformMessage(platformRequest); + } + + /** + * 根据用户条件,查询指定的数据库中的记录 + * + * @param userQueryCondition 用户传入的条件 + * @author WH + * @date 2022/1/12 15:30 + * @since version-1.0 + */ + @Override + public QueryUserMassageResponse queryUserMessage(UserQueryCondition userQueryCondition) { + //完善条件集合 + LoginUser loginUser = tokenService.getLoginUser(); + userQueryCondition.setSenderAccount(loginUser.getUsername()); + userQueryCondition.setSenderType(loginUser.getUserType()); + String nextTimeStr = null; + if ("".equals(userQueryCondition.getSendMessageTime()) || userQueryCondition.getSendMessageTime() == null || "null".equals(userQueryCondition.getSendMessageTime())) { + userQueryCondition.setSendMessageTime(DateUtil.getYyyyMmDdHhMmSs()); + //查询用户是否有数据,即查询该用户的所有时间记录(有时间记录表示该用户发送过信息) + List allTimeRecords = messageBoardMapper.selectTimeRecords(userQueryCondition); + QueryUserMassageResponse queryUserMassageResponse = new QueryUserMassageResponse(); + if (allTimeRecords.size() == 0) { + return queryUserMassageResponse; + } + //获取最后一个时间记录,将其减去一个月,放入查询条件中 + XhpcMessageBoard xhpcMessageBoard = allTimeRecords.get(allTimeRecords.size() - 1); + Date finalTime = xhpcMessageBoard.getSendMessageTime(); + userQueryCondition.setSendMessageTime(DateUtils.parseDateToStr(finalTime)); + Calendar finalTimeCalendar = DateUtil.getCalendar(finalTime); + finalTimeCalendar.add(Calendar.MONTH, -1); + Date nextTime = finalTimeCalendar.getTime(); + nextTimeStr = DateUtils.parseDateToStr(nextTime); + } else { + //如果有值过来,说明有之前的记录,计算上一个月的值,作为查询条件,并返回 + String sendMessageTimeStr = userQueryCondition.getSendMessageTime(); + Date sendMessageTimeDate = DateUtils.parseDate(sendMessageTimeStr); + Calendar nextTimeCalendar = DateUtil.getCalendar(sendMessageTimeDate); + nextTimeCalendar.add(Calendar.MONTH, -1); + Date nextTime = nextTimeCalendar.getTime(); + nextTimeStr = DateUtils.parseDateToStr(nextTime); + } + //根据用户信息中所保存的时间,与上个月时间进行区间查询 + List aMonthRecords = messageBoardMapper.selectBy(userQueryCondition, nextTimeStr); + //如果没有数据,则返回空实体类对象 + QueryUserMassageResponse response = new QueryUserMassageResponse(); + if (aMonthRecords.size() == 0) { + return response; + } + List messageIdList = new ArrayList<>(); + for (int index = 0; index <= aMonthRecords.size() - 1; index++) { + Long messageId = aMonthRecords.get(index).getMessageId(); + messageIdList.add(messageId); + } + //设置查询出来的记录为已读状态 + messageBoardMapper.setUserReadedStatus(messageIdList); + //封装数据 + ArrayList dataDTOS = new ArrayList<>(); + for (XhpcMessageBoard aMonthRecord : aMonthRecords) { + QueryUserMassageResponse.DataDTO dataDTO = new QueryUserMassageResponse.DataDTO(); + BeanUtils.copyProperties(aMonthRecord, dataDTO); + dataDTO.setSendMessageTime(DateUtils.parseDateToStr(aMonthRecord.getSendMessageTime())); + dataDTOS.add(dataDTO); + } + //处理下次查询时间 + //todo 截取时间 + response.setNextQueryTime(nextTimeStr); + response.setData(dataDTOS); + return response; + } } diff --git a/xhpc-modules/xhpc-message-board/src/main/resources/bootstrap.yml b/xhpc-modules/xhpc-message-board/src/main/resources/bootstrap.yml index b4365277..c0bbf680 100644 --- a/xhpc-modules/xhpc-message-board/src/main/resources/bootstrap.yml +++ b/xhpc-modules/xhpc-message-board/src/main/resources/bootstrap.yml @@ -22,4 +22,7 @@ spring: file-extension: yml # 共享配置 shared-configs: - - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension} \ No newline at end of file + - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension} +logging: + level: + com.xhpc.board.mapper: debug \ No newline at end of file diff --git a/xhpc-modules/xhpc-message-board/src/main/resources/mapper/XhpcMessageBoardMapper.xml b/xhpc-modules/xhpc-message-board/src/main/resources/mapper/XhpcMessageBoardMapper.xml new file mode 100644 index 00000000..0f2c01bf --- /dev/null +++ b/xhpc-modules/xhpc-message-board/src/main/resources/mapper/XhpcMessageBoardMapper.xml @@ -0,0 +1,292 @@ + + + + + + + + + + + + + + + + + + message_id + , sender_type, sender_account, send_message_time, message_content, tenant_type, + tenant_id, have_new_info, del_flag, sender + + + + + + delete + from xhpc_message_board + where message_id = #{messageId,jdbcType=BIGINT} + + + insert into xhpc_message_board (sender_type, sender_account, send_message_time, + message_content, tenant_type, tenant_id, + have_new_info, del_flag, sender) + values (#{senderType,jdbcType=TINYINT}, #{senderAccount,jdbcType=VARCHAR}, + #{sendMessageTime,jdbcType=TIMESTAMP}, + #{messageContent,jdbcType=VARCHAR}, #{tenantType,jdbcType=TINYINT}, #{tenantId,jdbcType=VARCHAR}, + #{haveNewInfo,jdbcType=BOOLEAN}, #{delFlag,jdbcType=BOOLEAN}, #{sender,jdbcType=BOOLEAN}) + + + insert into xhpc_message_board + + + sender_type, + + + sender_account, + + + send_message_time, + + + message_content, + + + tenant_type, + + + tenant_id, + + + have_new_info, + + + del_flag, + + + sender, + + + + + #{senderType,jdbcType=TINYINT}, + + + #{senderAccount,jdbcType=VARCHAR}, + + + #{sendMessageTime,jdbcType=TIMESTAMP}, + + + #{messageContent,jdbcType=VARCHAR}, + + + #{tenantType,jdbcType=TINYINT}, + + + #{tenantId,jdbcType=VARCHAR}, + + + #{haveNewInfo,jdbcType=BOOLEAN}, + + + #{delFlag,jdbcType=BOOLEAN}, + + + #{sender,jdbcType=BOOLEAN}, + + + + + insert into xhpc_message_board + (sender_type, sender_account, send_message_time, tenant_type, tenant_id, sender) + values (#{senderType}, #{senderAccount}, #{sendMessageTime}, #{tenantType}, #{tenantId}, 1) + + + insert into xhpc_message_board + + + sender_type, + + + sender_account, + + + send_message_time, + + + message_content, + + + tenant_type, + + + tenant_id, + + have_new_info, + sender, + + + + #{senderType,jdbcType=TINYINT}, + + + #{senderAccount,jdbcType=VARCHAR}, + + + #{sendMessageTime,jdbcType=TIMESTAMP}, + + + #{messageContent,jdbcType=VARCHAR}, + + + #{tenantType,jdbcType=TINYINT}, + + + #{tenantId,jdbcType=VARCHAR}, + + 0, + 0, + + + + insert into xhpc_message_board + + + sender_type, + + + sender_account, + + + send_message_time, + + + message_content, + + + tenant_type, + + + tenant_id, + + have_new_info, + sender, + + + + #{senderType,jdbcType=TINYINT}, + + + #{senderAccount,jdbcType=VARCHAR}, + + + #{sendMessageTime,jdbcType=TIMESTAMP}, + + + #{messageContent,jdbcType=VARCHAR}, + + + #{tenantType,jdbcType=TINYINT}, + + + #{tenantId,jdbcType=VARCHAR}, + + 0, + 2, + + + + insert into xhpc_message_board + (sender_type, sender_account, send_message_time, tenant_type, tenant_id, sender) + values (#{senderType}, #{senderAccount}, #{sendMessageTime}, #{tenantType}, #{tenantId}, 1) + + + update xhpc_message_board + + + sender_type = #{senderType,jdbcType=TINYINT}, + + + sender_account = #{senderAccount,jdbcType=VARCHAR}, + + + send_message_time = #{sendMessageTime,jdbcType=TIMESTAMP}, + + + message_content = #{messageContent,jdbcType=VARCHAR}, + + + tenant_type = #{tenantType,jdbcType=TINYINT}, + + + tenant_id = #{tenantId,jdbcType=VARCHAR}, + + + have_new_info = #{haveNewInfo,jdbcType=BOOLEAN}, + + + del_flag = #{delFlag,jdbcType=BOOLEAN}, + + + sender = #{sender,jdbcType=BOOLEAN}, + + + where message_id = #{messageId,jdbcType=BIGINT} + + + update xhpc_message_board + set sender_type = #{senderType,jdbcType=TINYINT}, + sender_account = #{senderAccount,jdbcType=VARCHAR}, + send_message_time = #{sendMessageTime,jdbcType=TIMESTAMP}, + message_content = #{messageContent,jdbcType=VARCHAR}, + tenant_type = #{tenantType,jdbcType=TINYINT}, + tenant_id = #{tenantId,jdbcType=VARCHAR}, + have_new_info = #{haveNewInfo,jdbcType=BOOLEAN}, + del_flag = #{delFlag,jdbcType=BOOLEAN}, + sender = #{sender,jdbcType=BOOLEAN} + where message_id = #{messageId,jdbcType=BIGINT} + + + UPDATE `xhpc_message_board` + SET have_new_info = 1 + WHERE + message_id IN + + #{messageId} + + AND del_flag IS NULL + + \ No newline at end of file diff --git a/xhpc-modules/xhpc-message-board/src/main/resources/mapper/XhpcMessageBoardReceiveUserMapper.xml b/xhpc-modules/xhpc-message-board/src/main/resources/mapper/XhpcMessageBoardReceiveUserMapper.xml new file mode 100644 index 00000000..4a24934c --- /dev/null +++ b/xhpc-modules/xhpc-message-board/src/main/resources/mapper/XhpcMessageBoardReceiveUserMapper.xml @@ -0,0 +1,102 @@ + + + + + + + + + + + + + + + tenant_id + , + tenant_type, + sender_account, + sender_type, + user_icon, + have_new_info, + del_flag + + + insert into xhpc_message_board_receive_user (tenant_id, tenant_type, sender_account, + sender_type, user_icon, have_new_info, + del_flag) + values (#{tenantId,jdbcType=VARCHAR}, #{tenantType,jdbcType=INTEGER}, #{senderAccount,jdbcType=VARCHAR}, + #{senderType,jdbcType=INTEGER}, #{userIcon,jdbcType=VARCHAR}, #{haveNewInfo,jdbcType=BOOLEAN}, + #{delFlag,jdbcType=BOOLEAN}) + + + insert into xhpc_message_board_receive_user + + + tenant_id, + + + tenant_type, + + + sender_account, + + + sender_type, + + + user_icon, + + + have_new_info, + + + del_flag, + + + + + #{tenantId,jdbcType=VARCHAR}, + + + #{tenantType,jdbcType=INTEGER}, + + + #{senderAccount,jdbcType=VARCHAR}, + + + #{senderType,jdbcType=INTEGER}, + + + #{userIcon,jdbcType=VARCHAR}, + + + #{haveNewInfo,jdbcType=BOOLEAN}, + + + #{delFlag,jdbcType=BOOLEAN}, + + + + + UPDATE xhpc_message_board_receive_user + SET have_new_info = 0 + WHERE tenant_type = #{tenantType} + AND tenant_id = #{tenantId} + AND sender_account = #{senderAccount} + AND sender_type = #{senderType} + AND del_flag IS NULL; + + + \ No newline at end of file