添加平台查询指定用户发送过的信息接口,

使查询给租户发送信息的接口,使其可以进行条件查询,
优化bug,插入记录后,未添加have_new_info字段为0
This commit is contained in:
wen 2022-01-16 18:07:37 +08:00
parent a419b3d405
commit 80c41b4662
6 changed files with 125 additions and 15 deletions

View File

@ -1,8 +1,6 @@
package com.xhpc.board.controller;
import com.xhpc.board.domain.PlatformSendMessageToUserRequest;
import com.xhpc.board.domain.QueryUserListRequest;
import com.xhpc.board.domain.QueryUserListResponse;
import com.xhpc.board.domain.*;
import com.xhpc.board.service.XhpcMessageBoardService;
import com.xhpc.common.core.web.domain.AjaxResult;
import lombok.extern.slf4j.Slf4j;
@ -57,4 +55,20 @@ public class XhpcMessageBoardController {
}
/**
* 平台查询指定用户消息
*
* @author WH
* @date 2022/1/15 18:47
* @since version-1.0
*/
@GetMapping("/user/message")
public AjaxResult platformQueryMessage(UserQueryCondition userQueryCondition) throws Exception {
QueryUserMassageResponse queryUserMassageResponse = xhpcMessageBoardService.platformQueryMessage(userQueryCondition);
return AjaxResult.success(queryUserMassageResponse);
}
}

View File

@ -17,7 +17,6 @@ import javax.validation.constraints.NotNull;
*/
@NoArgsConstructor
@Data
public class QueryUserListRequest {
/**
@ -42,7 +41,7 @@ public class QueryUserListRequest {
*/
@JsonProperty("items")
@NotNull(message = "items的参数名不正确或者items的值为空请检查传入参数")
@Min(value = 1, message = "每页显示至少1条数据")
@Min(value = 1, message = "每页至少需要显示1条数据")
private Integer items;
/**
* tenantId

View File

@ -36,6 +36,7 @@ public interface XhpcMessageBoardService {
*
* @param userQueryCondition 用户传入的条件
* @return 用户在数据库中发送的记录
*
* @author WH
* @date 2022/1/12 15:30
* @since version-1.0
@ -66,5 +67,15 @@ public interface XhpcMessageBoardService {
*/
QueryUserListResponse queryUserList(QueryUserListRequest param) throws Exception;
/**
* 平台查询用户发送过来的信息与用户查看它自己的信息一致
*
* @param userQueryCondition 要查询的用户的信息
* @return 返回用户与平台用户的一个月的聊天记录
* @author WH
* @date 2022/1/16 15:39
* @since version-1.0
*/
QueryUserMassageResponse platformQueryMessage(UserQueryCondition userQueryCondition);
}

View File

@ -161,11 +161,13 @@ public class XhpcMessageBoardServiceImpl implements XhpcMessageBoardService {
* 根据用户条件查询指定的数据库中的记录
*
* @param userQueryCondition 用户传入的条件
* @return 用户在数据库中发送的记录
* @author WH
* @date 2022/1/12 15:30
* @since version-1.0
*/
@Override
@Transactional(rollbackFor = Exception.class)
public QueryUserMassageResponse queryUserMessage(UserQueryCondition userQueryCondition) {
//完善条件集合
LoginUser loginUser = tokenService.getLoginUser();
@ -209,8 +211,9 @@ public class XhpcMessageBoardServiceImpl implements XhpcMessageBoardService {
Long messageId = aMonthRecords.get(index).getMessageId();
messageIdList.add(messageId);
}
//设置查询出来的记录为已读状态
//设置查询出来的记录为已读状态然后再查询保证查询出来的是否有新信息状态被改变
messageBoardMapper.setUserReadedStatus(messageIdList);
aMonthRecords = messageBoardMapper.selectBy(userQueryCondition, nextTimeStr);
//封装数据
ArrayList<QueryUserMassageResponse.DataDTO> dataDTOS = new ArrayList<>();
for (XhpcMessageBoard aMonthRecord : aMonthRecords) {
@ -220,7 +223,6 @@ public class XhpcMessageBoardServiceImpl implements XhpcMessageBoardService {
dataDTOS.add(dataDTO);
}
//处理下次查询时间
//todo 截取时间
response.setNextQueryTime(nextTimeStr);
response.setData(dataDTOS);
return response;
@ -259,7 +261,7 @@ public class XhpcMessageBoardServiceImpl implements XhpcMessageBoardService {
//查询用户列表
SysUser receiverInfo = tokenService.getLoginUser().getSysUser();
if (receiverInfo == null) {
throw new Exception("查询不到指定的租户receiver为null请检查传递的参数");
throw new Exception("查询不到指定的租户receiverInfo为null请检查传递的参数");
}
QueryUserListResponse queryUserListResponse = new QueryUserListResponse();
//查询出该租户拥有的所有用户列表
@ -282,4 +284,76 @@ public class XhpcMessageBoardServiceImpl implements XhpcMessageBoardService {
return queryUserListResponse;
}
/**
* 平台查询用户发送过来的信息与用户查看它自己的信息的代码逻辑一致
*
* @param userQueryCondition 要查询的用户的信息
* @return 返回用户与平台用户的一个月的聊天记录
* @author WH
* @date 2022/1/16 15:39
* @since version-1.0
*/
@Override
@Transactional(rollbackFor = Exception.class)
public QueryUserMassageResponse platformQueryMessage(UserQueryCondition userQueryCondition) {
//完善条件集合
SysUser sysUser = tokenService.getLoginUser().getSysUser();
userQueryCondition.setTenantId(sysUser.getTenantId());
userQueryCondition.setTenantType(0);
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);
aMonthRecords = messageBoardMapper.selectBy(userQueryCondition, nextTimeStr);
//封装数据
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

@ -131,8 +131,8 @@
</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)
(sender_type, sender_account, send_message_time, tenant_type, tenant_id, have_new_info, sender)
values (#{senderType}, #{senderAccount}, #{sendMessageTime}, #{tenantType}, #{tenantId}, 0, 1)
</insert>
<insert id="insertUserMessage">
insert into xhpc_message_board
@ -230,8 +230,8 @@
</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)
(sender_type, sender_account, send_message_time, tenant_type, tenant_id, have_new_info, sender)
values (#{senderType}, #{senderAccount}, #{sendMessageTime}, #{tenantType}, #{tenantId}, 0, 1)
</insert>
<update id="updateByPrimaryKeySelective" parameterType="com.xhpc.board.pojo.XhpcMessageBoard">
update xhpc_message_board

View File

@ -109,14 +109,26 @@
AND tenant_type = #{tenantType}
AND del_flag IS NULL
AND have_new_info = 0
<if test="userType!=null">
AND sender_type = #{userType}
</if>
<if test="senderAccount">
AND sender_account = #{senderAccount}
</if>
LIMIT #{currentPage},#{items}
</select>
<select id="totalUserNumber" resultType="java.lang.Long">
SELECT count(tenant_id)
FROM `xhpc_message_board_receive_user`
WHERE tenant_id = #{tenantId}
AND tenant_type = #{tenantType}
AND del_flag IS NULL
AND have_new_info = 0
AND tenant_type = #{tenantType}
AND del_flag IS NULL
AND have_new_info = 0
<if test="userType!=null">
AND sender_type = #{userType}
</if>
<if test="senderAccount">
AND sender_account = #{senderAccount}
</if>
</select>
</mapper>