Commit 6c8b4b0e by 邹磊浩

修改代码

parent a2e99d76
package com.pz.applet; package com.pz.applet;
import cn.dev33.satoken.annotation.SaIgnore; import cn.dev33.satoken.annotation.SaIgnore;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.pz.common.annotation.Log; import com.pz.common.annotation.Log;
import com.pz.common.annotation.RepeatSubmit; import com.pz.common.annotation.RepeatSubmit;
...@@ -8,6 +11,7 @@ import com.pz.common.core.controller.BaseController; ...@@ -8,6 +11,7 @@ import com.pz.common.core.controller.BaseController;
import com.pz.common.core.domain.BaseEntity; import com.pz.common.core.domain.BaseEntity;
import com.pz.common.core.domain.PageQuery; import com.pz.common.core.domain.PageQuery;
import com.pz.common.core.domain.R; import com.pz.common.core.domain.R;
import com.pz.common.core.domain.entity.SysUser;
import com.pz.common.core.page.TableDataInfo; import com.pz.common.core.page.TableDataInfo;
import com.pz.common.core.validate.AddGroup; import com.pz.common.core.validate.AddGroup;
import com.pz.common.enums.BusinessType; import com.pz.common.enums.BusinessType;
...@@ -15,6 +19,7 @@ import com.pz.system.domain.Message; ...@@ -15,6 +19,7 @@ import com.pz.system.domain.Message;
import com.pz.system.domain.SessionList; import com.pz.system.domain.SessionList;
import com.pz.system.domain.bo.SessionListBo; import com.pz.system.domain.bo.SessionListBo;
import com.pz.system.domain.vo.AvatarUserNameVo; import com.pz.system.domain.vo.AvatarUserNameVo;
import com.pz.system.domain.vo.MessageVo;
import com.pz.system.domain.vo.SessionListVo; import com.pz.system.domain.vo.SessionListVo;
import com.pz.system.mapper.MessageMapper; import com.pz.system.mapper.MessageMapper;
import com.pz.system.mapper.SessionListMapper; import com.pz.system.mapper.SessionListMapper;
...@@ -26,6 +31,7 @@ import org.springframework.validation.annotation.Validated; ...@@ -26,6 +31,7 @@ import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotEmpty;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Optional; import java.util.Optional;
...@@ -52,7 +58,54 @@ public class AppletSessionListController extends BaseController { ...@@ -52,7 +58,54 @@ public class AppletSessionListController extends BaseController {
*/ */
@GetMapping("/list") @GetMapping("/list")
public TableDataInfo<SessionListVo> list(SessionListBo bo, PageQuery pageQuery) { public TableDataInfo<SessionListVo> list(SessionListBo bo, PageQuery pageQuery) {
return sessionListMapper.selectVoPage(pageQuery.build(), Wrappers.<SessionList>lambdaQuery().eq(SessionList::getUserId, getUserId()).or().eq(SessionList::getToUserId, getUserId())); IPage<SessionListVo> sessionListVoIPage = sessionListMapper.selectVoPage(pageQuery.build(), Wrappers.<SessionList>lambdaQuery().eq(SessionList::getUserId, getUserId()).or().eq(SessionList::getToUserId, getUserId()));
List<SessionListVo> records = sessionListVoIPage.getRecords();
if (CollectionUtils.isNotEmpty(records)) {
Long userId = getUserId();
List<SessionListVo> recordsToRemove = new ArrayList<>();
records.forEach(sessionListVo -> {
Long toUserId = sessionListVo.getToUserId();
Long fromUserId = sessionListVo.getUserId();
if (fromUserId == userId || toUserId == userId) {
Long targetUserId = (fromUserId == userId) ? toUserId : fromUserId;
sessionListVo.setToUserId(targetUserId);
Optional<SysUser> optionalSysUser = Optional.ofNullable(sysUserMapper.selectUserById(targetUserId));
optionalSysUser.ifPresent(sysUser -> {
sessionListVo.setToUserName(sysUser.getNickName());
sessionListVo.setToAvatar(sysUser.getAvatar());
});
//获取未读消息数以及最后消息时间
List<MessageVo> messageVos = messageMapper.selectVoList(Wrappers.<Message>lambdaQuery()
.eq(Message::getSender, targetUserId)
.eq(Message::getReceiver, getUserId())
.eq(Message::getIsRead, 0)
.orderByDesc(Message::getCreateTime));
if (CollectionUtils.isNotEmpty(messageVos)) {
//未读消息数
sessionListVo.setUnReadCount(messageVos.size());
//最后发送消息时间
sessionListVo.setLastTime(messageVos.get(0).getCreateTime());
//消息内容
sessionListVo.setMessage(messageVos.get(0).getContent());
} else {
List<MessageVo> messageVoList = messageMapper.selectVoList(Wrappers.<Message>lambdaQuery()
.eq(Message::getSender, targetUserId)
.eq(Message::getReceiver, getUserId())
.eq(Message::getIsRead, 1)
.orderByDesc(Message::getCreateTime));
if (CollectionUtils.isNotEmpty(messageVoList)) {
sessionListVo.setLastTime(messageVoList.get(0).getCreateTime());
sessionListVo.setUnReadCount(0);
} else {
recordsToRemove.add(sessionListVo);
}
}
}
});
// 执行删除操作
records.removeAll(recordsToRemove);
}
return TableDataInfo.build(sessionListVoIPage);
} }
/** /**
...@@ -114,18 +167,6 @@ public class AppletSessionListController extends BaseController { ...@@ -114,18 +167,6 @@ public class AppletSessionListController extends BaseController {
// 插入会话列表记录 // 插入会话列表记录
sessionListMapper.insert(sessionList); sessionListMapper.insert(sessionList);
Integer id = sessionListMapper.selectIdByUser(bo.getToUserId(), bo.getUserId());
// 判断对方和我建立会话没有,如果没有则建立
if (id == null) {
// 新建会话列表对象
SessionList newSessionList = new SessionList();
newSessionList.setUserId(bo.getToUserId());
newSessionList.setToUserId(bo.getUserId());
newSessionList.setUnReadCount(0L);
// 插入新的会话列表记录
sessionListMapper.insert(newSessionList);
}
return R.ok(sessionList.getId()); return R.ok(sessionList.getId());
} }
......
...@@ -104,9 +104,10 @@ public class WebSocketOneToOneController { ...@@ -104,9 +104,10 @@ public class WebSocketOneToOneController {
int msgType = json.getIntValue("messageType"); int msgType = json.getIntValue("messageType");
String lastMessageTime = json.getString("lastMessageTime"); // 使用类型推断,如果不存在键"lastMessageTime",则为null String lastMessageTime = json.getString("lastMessageTime"); // 使用类型推断,如果不存在键"lastMessageTime",则为null
Long receiveId = json.getLong("receiveId"); // 发送对象的用户标识(接收者) Long receiveId = json.getLong("receiveId"); // 发送对象的用户标识(接收者)
String createTime = json.getString("createTime");
// 发送消息 // 发送消息
send(msg, sendId, receiveId, roomId, msgType, requestId, lastMessageTime, sessionId); send(msg, sendId, receiveId, roomId, msgType, requestId, lastMessageTime, sessionId, createTime);
} }
/** /**
...@@ -159,7 +160,7 @@ public class WebSocketOneToOneController { ...@@ -159,7 +160,7 @@ public class WebSocketOneToOneController {
* @param requestId 消息请求ID * @param requestId 消息请求ID
* @param lastMessageTime 最后一次的消息时间 * @param lastMessageTime 最后一次的消息时间
*/ */
public void send(String msg, Long sendId, Long receiveId, String roomId, int msgType, String requestId, String lastMessageTime, String sessionId) { public void send(String msg, Long sendId, Long receiveId, String roomId, int msgType, String requestId, String lastMessageTime, String sessionId, String createTime) {
Message message = new Message(); Message message = new Message();
message.setContent(msg); message.setContent(msg);
Date now = new Date(); Date now = new Date();
...@@ -169,15 +170,7 @@ public class WebSocketOneToOneController { ...@@ -169,15 +170,7 @@ public class WebSocketOneToOneController {
message.setIsRead("0"); message.setIsRead("0");
message.setRequestId(requestId); message.setRequestId(requestId);
message.setType(0); message.setType(0);
message.setCreateTime(new Date());
if (StringUtils.isNotBlank(lastMessageTime)) {
Date lastTime = DateUtils.stringToDate(lastMessageTime, "yyyy-MM-dd HH:mm");
long minute = (now.getTime() - lastTime.getTime()) / 1000 / 60;
log.info("此二人聊天,距离上一次聊天时间相差分钟数:" + minute);
if (minute > 5) {
message.setType(1);
}
}
if (messageMapper == null) { if (messageMapper == null) {
this.messageMapper = (MessageMapper) SpringContextUtil.getBean("messageMapper"); this.messageMapper = (MessageMapper) SpringContextUtil.getBean("messageMapper");
...@@ -197,10 +190,13 @@ public class WebSocketOneToOneController { ...@@ -197,10 +190,13 @@ public class WebSocketOneToOneController {
//发送消息 //发送消息
sendMessage(sessionList, message); sendMessage(sessionList, message);
} else { } else {
Integer toId = Integer.valueOf((String) list.get(0)); String o = (String) list.get(0);
if (Integer.valueOf(sessionId).equals(toId)) { if (StringUtils.isNotBlank(o) && !o.equals("null")) {
//彼此都在会话中,直接发送消息 Integer toId = Integer.valueOf(o);
sendMessage(sessionList, message); if (Integer.valueOf(sessionId).equals(toId)) {
//彼此都在会话中,直接发送消息
sendMessage(sessionList, message);
}
} else { } else {
if (sessionId == null) { if (sessionId == null) {
//创建会话 //创建会话
......
...@@ -22,85 +22,71 @@ public class CompanyBo extends BaseEntity { ...@@ -22,85 +22,71 @@ public class CompanyBo extends BaseEntity {
/** /**
* ID * ID
*/ */
@NotNull(message = "ID不能为空", groups = { EditGroup.class })
private Integer id; private Integer id;
/** /**
* 商户名称 * 商户名称
*/ */
@NotBlank(message = "商户名称不能为空", groups = { AddGroup.class, EditGroup.class })
private String name; private String name;
/** /**
* 城市 * 城市
*/ */
@NotNull(message = "城市不能为空", groups = { AddGroup.class, EditGroup.class })
private Long cityId; private Long cityId;
/** /**
* 商户电话 * 商户电话
*/ */
@NotBlank(message = "商户电话不能为空", groups = { AddGroup.class, EditGroup.class })
private String tel; private String tel;
/** /**
* 商户手机 * 商户手机
*/ */
@NotBlank(message = "商户手机不能为空", groups = { AddGroup.class, EditGroup.class })
private String phone; private String phone;
/** /**
* 商户地址 * 商户地址
*/ */
@NotBlank(message = "商户地址不能为空", groups = { AddGroup.class, EditGroup.class })
private String address; private String address;
/** /**
* 状态 * 状态
*/ */
@NotNull(message = "状态不能为空", groups = { AddGroup.class, EditGroup.class })
private Integer status; private Integer status;
/** /**
* 营业执照 * 营业执照
*/ */
@NotBlank(message = "营业执照不能为空", groups = { AddGroup.class, EditGroup.class })
private String businessLicense; private String businessLicense;
/** /**
* 是否缴纳保证金 * 是否缴纳保证金
*/ */
@NotNull(message = "是否缴纳保证金不能为空", groups = { AddGroup.class, EditGroup.class })
private Integer isCashDeposit; private Integer isCashDeposit;
/** /**
* 保证金金额 * 保证金金额
*/ */
@NotBlank(message = "保证金金额不能为空", groups = { AddGroup.class, EditGroup.class })
private String cashDeposit; private String cashDeposit;
/** /**
* 创建人 * 创建人
*/ */
@NotNull(message = "创建人不能为空", groups = { AddGroup.class, EditGroup.class })
private Integer uid; private Integer uid;
/** /**
* 总收益 * 总收益
*/ */
@NotBlank(message = "总收益不能为空", groups = { AddGroup.class, EditGroup.class })
private String totalRevenue; private String totalRevenue;
/** /**
* 当前余额 * 当前余额
*/ */
@NotBlank(message = "当前余额不能为空", groups = { AddGroup.class, EditGroup.class })
private String balance; private String balance;
/** /**
* 冻结余额 * 冻结余额
*/ */
@NotBlank(message = "冻结余额不能为空", groups = { AddGroup.class, EditGroup.class })
private String freezeBalance; private String freezeBalance;
......
...@@ -6,6 +6,8 @@ import com.pz.common.core.domain.BaseEntity; ...@@ -6,6 +6,8 @@ import com.pz.common.core.domain.BaseEntity;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import java.util.Date;
/** /**
* @author lisw * @author lisw
* @program message * @program message
...@@ -68,4 +70,6 @@ public class Message extends BaseEntity { ...@@ -68,4 +70,6 @@ public class Message extends BaseEntity {
* 备注 * 备注
*/ */
private String remark; private String remark;
private Date createTime;
} }
...@@ -6,6 +6,8 @@ import com.pz.common.annotation.ExcelDictFormat; ...@@ -6,6 +6,8 @@ import com.pz.common.annotation.ExcelDictFormat;
import com.pz.common.convert.ExcelDictConvert; import com.pz.common.convert.ExcelDictConvert;
import lombok.Data; import lombok.Data;
import java.util.Date;
/** /**
* 会话列视图对象 session_list * 会话列视图对象 session_list
...@@ -47,7 +49,20 @@ public class SessionListVo { ...@@ -47,7 +49,20 @@ public class SessionListVo {
* 未读消息数 * 未读消息数
*/ */
@ExcelProperty(value = "未读消息数") @ExcelProperty(value = "未读消息数")
private Long unReadCount; private Integer unReadCount;
/**
* 对方头像
*/
private String toAvatar;
/**
* 对方名称
*/
private String toUserName;
private Date lastTime;
private String message;
} }
...@@ -45,11 +45,12 @@ public class MessageServiceImpl implements IMessageService { ...@@ -45,11 +45,12 @@ public class MessageServiceImpl implements IMessageService {
@Override @Override
public List<MessageVo> queryPageList(MessageBo bo) { public List<MessageVo> queryPageList(MessageBo bo) {
String strTime = bo.getStrTime() + " 00:00:00";
bo.setStrTime(bo.getStrTime() + " 23:59:59"); bo.setStrTime(bo.getStrTime() + " 23:59:59");
List<MessageVo> result = new ArrayList<>(); List<MessageVo> result = new ArrayList<>();
result = baseMapper.selectVoList(new LambdaQueryWrapper<Message>().eq(Message::getSender, bo.getSender()) result = baseMapper.selectVoList(new LambdaQueryWrapper<Message>().eq(Message::getSender, bo.getSender())
.eq(Message::getReceiver, bo.getReceiver()).or().eq(Message::getSender, bo.getReceiver()).eq(Message::getReceiver, bo.getSender()) .eq(Message::getReceiver, bo.getReceiver()).ge(BaseEntity::getCreateTime, strTime).le(BaseEntity::getCreateTime, bo.getStrTime()).or().eq(Message::getSender, bo.getReceiver()).eq(Message::getReceiver, bo.getSender())
.ge(BaseEntity::getCreateTime, bo.getStrTime()).le(BaseEntity::getCreateTime, bo.getStrTime())); .ge(BaseEntity::getCreateTime, strTime).le(BaseEntity::getCreateTime, bo.getStrTime()));
List<Message> messageList = new ArrayList<>(); List<Message> messageList = new ArrayList<>();
if (CollectionUtils.isNotEmpty(result)) { if (CollectionUtils.isNotEmpty(result)) {
......
...@@ -18,6 +18,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" ...@@ -18,6 +18,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
UPDATE session_list SET un_read_count = 0 WHERE user_id = #{fromUserId} AND to_user_id = #{toUserId} UPDATE session_list SET un_read_count = 0 WHERE user_id = #{fromUserId} AND to_user_id = #{toUserId}
</update> </update>
<select id="selectIdByUser" resultType="java.lang.Integer"> <select id="selectIdByUser" resultType="java.lang.Integer">
SELECT id FROM session_list WHERE user_id = #{fromId} AND to_user_id = #{toId} SELECT id FROM session_list WHERE user_id = #{fromId} AND to_user_id = #{toId} or user_id = #{toId} AND to_user_id = #{fromId}
</select> </select>
</mapper> </mapper>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment