完成小程序端,用户给平台发送聊天信息接口

完成小程序端,查询用户与平台所发送的信息接口,
大致完成平台端,平台给用户发送留言接口,
添加日志,打印Mybatis过程信息。
This commit is contained in:
wen 2022-01-13 18:09:53 +08:00
parent fad1e6f7cc
commit a8298d868a
17 changed files with 1112 additions and 16 deletions

View File

@ -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;

View File

@ -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);
}
}

View File

@ -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();
}
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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<DataDTO> 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;
}
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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<XhpcMessageBoard> 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<Long> messageIdList);
/**
* 查询用户所有时间记录
*
* @param userQueryCondition 用户信息
* @author WH
* @date 2022/1/13 10:56
* @since version-1.0
*/
List<XhpcMessageBoard> selectTimeRecords(UserQueryCondition userQueryCondition);
}

View File

@ -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);
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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);
}

View File

@ -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<Map<String, Object>> result = userTypeService.getUser(null, loginUser.getUserid(), loginUser.getUserType(), null, userMessage.getTenantId());
Map<String, Object> 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<Map<String, Object>> result = userTypeService.getUser(null, loginUser.getUserid(), loginUser.getUserType(), null, userMessage.getTenantId());
Map<String, Object> 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<XhpcMessageBoard> 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<XhpcMessageBoard> aMonthRecords = messageBoardMapper.selectBy(userQueryCondition, nextTimeStr);
//如果没有数据则返回空实体类对象
QueryUserMassageResponse response = new QueryUserMassageResponse();
if (aMonthRecords.size() == 0) {
return response;
}
List<Long> 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<QueryUserMassageResponse.DataDTO> 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;
}
}

View File

@ -23,3 +23,6 @@ spring:
# 共享配置
shared-configs:
- application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
logging:
level:
com.xhpc.board.mapper: debug

View File

@ -0,0 +1,292 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--suppress ALL -->
<mapper namespace="com.xhpc.board.mapper.XhpcMessageBoardMapper">
<resultMap id="BaseResultMap" type="com.xhpc.board.pojo.XhpcMessageBoard">
<id column="message_id" jdbcType="BIGINT" property="messageId"/>
<result column="sender_type" jdbcType="TINYINT" property="senderType"/>
<result column="sender_account" jdbcType="VARCHAR" property="senderAccount"/>
<result column="send_message_time" jdbcType="TIMESTAMP" property="sendMessageTime"/>
<result column="message_content" jdbcType="VARCHAR" property="messageContent"/>
<result column="tenant_type" jdbcType="TINYINT" property="tenantType"/>
<result column="tenant_id" jdbcType="VARCHAR" property="tenantId"/>
<result column="have_new_info" jdbcType="TINYINT" property="haveNewInfo"/>
<result column="del_flag" jdbcType="TINYINT" property="delFlag"/>
<result column="sender" jdbcType="TINYINT" property="sender"/>
</resultMap>
<sql id="Base_Column_List">
message_id
, sender_type, sender_account, send_message_time, message_content, tenant_type,
tenant_id, have_new_info, del_flag, sender
</sql>
<select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap">
select
<include refid="Base_Column_List"/>
from xhpc_message_board
where message_id = #{messageId,jdbcType=BIGINT}
</select>
<select id="selectBy" resultMap="BaseResultMap">
SELECT
<include refid="Base_Column_List"/>
FROM
xhpc_message_board
WHERE
del_flag is NULL
AND sender_type = #{userQueryCondition.senderType}
AND sender_account = #{userQueryCondition.senderAccount}
AND send_message_time &lt;= #{userQueryCondition.sendMessageTime}
<if test="nextTimeStr!=null">
AND send_message_time &gt; #{nextTimeStr}
</if>
AND tenant_type = #{userQueryCondition.tenantType}
AND tenant_id = #{userQueryCondition.tenantId}
</select>
<select id="selectTimeRecords" resultMap="BaseResultMap">
SELECT
<include refid="Base_Column_List"/>
FROM
xhpc_message_board
WHERE
sender_type = #{senderType}
AND sender_account = #{senderAccount}
AND del_flag IS NULL
AND message_content IS NULL
</select>
<delete id="deleteByPrimaryKey" parameterType="java.lang.Long">
delete
from xhpc_message_board
where message_id = #{messageId,jdbcType=BIGINT}
</delete>
<insert id="insert" keyColumn="message_id" keyProperty="messageId"
parameterType="com.xhpc.board.pojo.XhpcMessageBoard" useGeneratedKeys="true">
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>
<insert id="insertSelective" keyColumn="message_id" keyProperty="messageId"
parameterType="com.xhpc.board.pojo.XhpcMessageBoard" useGeneratedKeys="true">
insert into xhpc_message_board
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="senderType != null">
sender_type,
</if>
<if test="senderAccount != null">
sender_account,
</if>
<if test="sendMessageTime != null">
send_message_time,
</if>
<if test="messageContent != null">
message_content,
</if>
<if test="tenantType != null">
tenant_type,
</if>
<if test="tenantId != null">
tenant_id,
</if>
<if test="haveNewInfo != null">
have_new_info,
</if>
<if test="delFlag != null">
del_flag,
</if>
<if test="sender != null">
sender,
</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="senderType != null">
#{senderType,jdbcType=TINYINT},
</if>
<if test="senderAccount != null">
#{senderAccount,jdbcType=VARCHAR},
</if>
<if test="sendMessageTime != null">
#{sendMessageTime,jdbcType=TIMESTAMP},
</if>
<if test="messageContent != null">
#{messageContent,jdbcType=VARCHAR},
</if>
<if test="tenantType != null">
#{tenantType,jdbcType=TINYINT},
</if>
<if test="tenantId != null">
#{tenantId,jdbcType=VARCHAR},
</if>
<if test="haveNewInfo != null">
#{haveNewInfo,jdbcType=BOOLEAN},
</if>
<if test="delFlag != null">
#{delFlag,jdbcType=BOOLEAN},
</if>
<if test="sender != null">
#{sender,jdbcType=BOOLEAN},
</if>
</trim>
</insert>
<insert id="insertUserTimeMessageRecord">
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>
<insert id="insertUserMessage">
insert into xhpc_message_board
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="senderType != null">
sender_type,
</if>
<if test="senderAccount != null">
sender_account,
</if>
<if test="sendMessageTime != null">
send_message_time,
</if>
<if test="messageContent != null">
message_content,
</if>
<if test="tenantType != null">
tenant_type,
</if>
<if test="tenantId != null">
tenant_id,
</if>
have_new_info,
sender,
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="senderType != null">
#{senderType,jdbcType=TINYINT},
</if>
<if test="senderAccount != null">
#{senderAccount,jdbcType=VARCHAR},
</if>
<if test="sendMessageTime != null">
#{sendMessageTime,jdbcType=TIMESTAMP},
</if>
<if test="messageContent != null">
#{messageContent,jdbcType=VARCHAR},
</if>
<if test="tenantType != null">
#{tenantType,jdbcType=TINYINT},
</if>
<if test="tenantId != null">
#{tenantId,jdbcType=VARCHAR},
</if>
0,
0,
</trim>
</insert>
<insert id="insertPlatformMessage">
insert into xhpc_message_board
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="senderType != null">
sender_type,
</if>
<if test="senderAccount != null">
sender_account,
</if>
<if test="sendMessageTime != null">
send_message_time,
</if>
<if test="messageContent != null">
message_content,
</if>
<if test="tenantType != null">
tenant_type,
</if>
<if test="tenantId != null">
tenant_id,
</if>
have_new_info,
sender,
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="senderType != null">
#{senderType,jdbcType=TINYINT},
</if>
<if test="senderAccount != null">
#{senderAccount,jdbcType=VARCHAR},
</if>
<if test="sendMessageTime != null">
#{sendMessageTime,jdbcType=TIMESTAMP},
</if>
<if test="messageContent != null">
#{messageContent,jdbcType=VARCHAR},
</if>
<if test="tenantType != null">
#{tenantType,jdbcType=TINYINT},
</if>
<if test="tenantId != null">
#{tenantId,jdbcType=VARCHAR},
</if>
0,
2,
</trim>
</insert>
<insert id="insertPlatformTimeMessageRecord">
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>
<update id="updateByPrimaryKeySelective" parameterType="com.xhpc.board.pojo.XhpcMessageBoard">
update xhpc_message_board
<set>
<if test="senderType != null">
sender_type = #{senderType,jdbcType=TINYINT},
</if>
<if test="senderAccount != null">
sender_account = #{senderAccount,jdbcType=VARCHAR},
</if>
<if test="sendMessageTime != null">
send_message_time = #{sendMessageTime,jdbcType=TIMESTAMP},
</if>
<if test="messageContent != null">
message_content = #{messageContent,jdbcType=VARCHAR},
</if>
<if test="tenantType != null">
tenant_type = #{tenantType,jdbcType=TINYINT},
</if>
<if test="tenantId != null">
tenant_id = #{tenantId,jdbcType=VARCHAR},
</if>
<if test="haveNewInfo != null">
have_new_info = #{haveNewInfo,jdbcType=BOOLEAN},
</if>
<if test="delFlag != null">
del_flag = #{delFlag,jdbcType=BOOLEAN},
</if>
<if test="sender != null">
sender = #{sender,jdbcType=BOOLEAN},
</if>
</set>
where message_id = #{messageId,jdbcType=BIGINT}
</update>
<update id="updateByPrimaryKey" parameterType="com.xhpc.board.pojo.XhpcMessageBoard">
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>
<update id="setUserReadedStatus">
UPDATE `xhpc_message_board`
SET have_new_info = 1
WHERE
message_id IN
<foreach collection="list" separator="," item="messageId" open="(" close=")">
#{messageId}
</foreach>
AND del_flag IS NULL
</update>
</mapper>

View File

@ -0,0 +1,102 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--suppress ALL -->
<mapper namespace="com.xhpc.board.mapper.XhpcMessageBoardReceiveUserMapper">
<resultMap id="BaseResultMap" type="com.xhpc.board.pojo.XhpcMessageBoardReceiveUser">
<result column="tenant_id" jdbcType="VARCHAR" property="tenantId"/>
<result column="tenant_type" jdbcType="INTEGER" property="tenantType"/>
<result column="sender_account" jdbcType="VARCHAR" property="senderAccount"/>
<result column="sender_type" jdbcType="INTEGER" property="senderType"/>
<result column="user_icon" jdbcType="VARCHAR" property="userIcon"/>
<result column="have_new_info" jdbcType="BOOLEAN" property="haveNewInfo"/>
<result column="del_flag" jdbcType="BOOLEAN" property="delFlag"/>
</resultMap>
<sql id="Base_Column_List">
tenant_id
,
tenant_type,
sender_account,
sender_type,
user_icon,
have_new_info,
del_flag
</sql>
<insert id="insert" parameterType="com.xhpc.board.pojo.XhpcMessageBoardReceiveUser">
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>
<insert id="insertSelective" parameterType="com.xhpc.board.pojo.XhpcMessageBoardReceiveUser">
insert into xhpc_message_board_receive_user
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="tenantId != null">
tenant_id,
</if>
<if test="tenantType != null">
tenant_type,
</if>
<if test="senderAccount != null">
sender_account,
</if>
<if test="senderType != null">
sender_type,
</if>
<if test="userIcon != null">
user_icon,
</if>
<if test="haveNewInfo != null">
have_new_info,
</if>
<if test="delFlag != null">
del_flag,
</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="tenantId != null">
#{tenantId,jdbcType=VARCHAR},
</if>
<if test="tenantType != null">
#{tenantType,jdbcType=INTEGER},
</if>
<if test="senderAccount != null">
#{senderAccount,jdbcType=VARCHAR},
</if>
<if test="senderType != null">
#{senderType,jdbcType=INTEGER},
</if>
<if test="userIcon != null">
#{userIcon,jdbcType=VARCHAR},
</if>
<if test="haveNewInfo != null">
#{haveNewInfo,jdbcType=BOOLEAN},
</if>
<if test="delFlag != null">
#{delFlag,jdbcType=BOOLEAN},
</if>
</trim>
</insert>
<update id="updateHaveNewInfoFiledByUserCondition">
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;
</update>
<select id="findOneByCondition" resultMap="BaseResultMap">
SELECT
<include refid="Base_Column_List"/>
FROM
xhpc_message_board_receive_user
WHERE
tenant_id = #{tenantId}
AND tenant_type = #{tenantType}
AND sender_account = #{senderAccount}
AND sender_type = #{senderType}
AND del_flag IS NULL
</select>
</mapper>