Commit af97f382 by Wangmin

Merge remote-tracking branch 'origin/dev' into dev

parents 4a964f22 6c8b4b0e
package com.pz.applet;
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.pz.common.annotation.Log;
import com.pz.common.annotation.RepeatSubmit;
......@@ -8,6 +11,7 @@ import com.pz.common.core.controller.BaseController;
import com.pz.common.core.domain.BaseEntity;
import com.pz.common.core.domain.PageQuery;
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.validate.AddGroup;
import com.pz.common.enums.BusinessType;
......@@ -15,6 +19,7 @@ import com.pz.system.domain.Message;
import com.pz.system.domain.SessionList;
import com.pz.system.domain.bo.SessionListBo;
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.mapper.MessageMapper;
import com.pz.system.mapper.SessionListMapper;
......@@ -26,6 +31,7 @@ import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.validation.constraints.NotEmpty;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
......@@ -52,7 +58,54 @@ public class AppletSessionListController extends BaseController {
*/
@GetMapping("/list")
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 {
// 插入会话列表记录
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());
}
......
......@@ -104,9 +104,10 @@ public class WebSocketOneToOneController {
int msgType = json.getIntValue("messageType");
String lastMessageTime = json.getString("lastMessageTime"); // 使用类型推断,如果不存在键"lastMessageTime",则为null
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 {
* @param requestId 消息请求ID
* @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.setContent(msg);
Date now = new Date();
......@@ -169,15 +170,7 @@ public class WebSocketOneToOneController {
message.setIsRead("0");
message.setRequestId(requestId);
message.setType(0);
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);
}
}
message.setCreateTime(new Date());
if (messageMapper == null) {
this.messageMapper = (MessageMapper) SpringContextUtil.getBean("messageMapper");
......@@ -197,10 +190,13 @@ public class WebSocketOneToOneController {
//发送消息
sendMessage(sessionList, message);
} else {
Integer toId = Integer.valueOf((String) list.get(0));
String o = (String) list.get(0);
if (StringUtils.isNotBlank(o) && !o.equals("null")) {
Integer toId = Integer.valueOf(o);
if (Integer.valueOf(sessionId).equals(toId)) {
//彼此都在会话中,直接发送消息
sendMessage(sessionList, message);
}
} else {
if (sessionId == null) {
//创建会话
......
......@@ -22,85 +22,71 @@ public class CompanyBo extends BaseEntity {
/**
* ID
*/
@NotNull(message = "ID不能为空", groups = { EditGroup.class })
private Integer id;
/**
* 商户名称
*/
@NotBlank(message = "商户名称不能为空", groups = { AddGroup.class, EditGroup.class })
private String name;
/**
* 城市
*/
@NotNull(message = "城市不能为空", groups = { AddGroup.class, EditGroup.class })
private Long cityId;
/**
* 商户电话
*/
@NotBlank(message = "商户电话不能为空", groups = { AddGroup.class, EditGroup.class })
private String tel;
/**
* 商户手机
*/
@NotBlank(message = "商户手机不能为空", groups = { AddGroup.class, EditGroup.class })
private String phone;
/**
* 商户地址
*/
@NotBlank(message = "商户地址不能为空", groups = { AddGroup.class, EditGroup.class })
private String address;
/**
* 状态
*/
@NotNull(message = "状态不能为空", groups = { AddGroup.class, EditGroup.class })
private Integer status;
/**
* 营业执照
*/
@NotBlank(message = "营业执照不能为空", groups = { AddGroup.class, EditGroup.class })
private String businessLicense;
/**
* 是否缴纳保证金
*/
@NotNull(message = "是否缴纳保证金不能为空", groups = { AddGroup.class, EditGroup.class })
private Integer isCashDeposit;
/**
* 保证金金额
*/
@NotBlank(message = "保证金金额不能为空", groups = { AddGroup.class, EditGroup.class })
private String cashDeposit;
/**
* 创建人
*/
@NotNull(message = "创建人不能为空", groups = { AddGroup.class, EditGroup.class })
private Integer uid;
/**
* 总收益
*/
@NotBlank(message = "总收益不能为空", groups = { AddGroup.class, EditGroup.class })
private String totalRevenue;
/**
* 当前余额
*/
@NotBlank(message = "当前余额不能为空", groups = { AddGroup.class, EditGroup.class })
private String balance;
/**
* 冻结余额
*/
@NotBlank(message = "冻结余额不能为空", groups = { AddGroup.class, EditGroup.class })
private String freezeBalance;
......
......@@ -6,6 +6,8 @@ import com.pz.common.core.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.Date;
/**
* @author lisw
* @program message
......@@ -68,4 +70,6 @@ public class Message extends BaseEntity {
* 备注
*/
private String remark;
private Date createTime;
}
......@@ -6,6 +6,8 @@ import com.pz.common.annotation.ExcelDictFormat;
import com.pz.common.convert.ExcelDictConvert;
import lombok.Data;
import java.util.Date;
/**
* 会话列视图对象 session_list
......@@ -47,7 +49,20 @@ public class SessionListVo {
* 未读消息数
*/
@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 {
@Override
public List<MessageVo> queryPageList(MessageBo bo) {
String strTime = bo.getStrTime() + " 00:00:00";
bo.setStrTime(bo.getStrTime() + " 23:59:59");
List<MessageVo> result = new ArrayList<>();
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())
.ge(BaseEntity::getCreateTime, bo.getStrTime()).le(BaseEntity::getCreateTime, bo.getStrTime()));
.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, strTime).le(BaseEntity::getCreateTime, bo.getStrTime()));
List<Message> messageList = new ArrayList<>();
if (CollectionUtils.isNotEmpty(result)) {
......
......@@ -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>
<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>
</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