220 lines
6.1 KiB
Go
220 lines
6.1 KiB
Go
package chat_message_ser
|
|
|
|
import (
|
|
"91porn-server/common"
|
|
"91porn-server/common/log"
|
|
"91porn-server/common/stderr"
|
|
"91porn-server/models/v/messagemod"
|
|
"91porn-server/models/v/sessionmod"
|
|
"91porn-server/models/v/usermod"
|
|
"fmt"
|
|
"go.mongodb.org/mongo-driver/bson"
|
|
"time"
|
|
)
|
|
|
|
func List(req *messagemod.WebListRequest) (interface{}, stderr.Code) {
|
|
var data = map[string]interface{}{
|
|
"list": []interface{}{},
|
|
"count": 0,
|
|
}
|
|
count, err := messagemod.CountDocument(req.Filter())
|
|
if err != nil {
|
|
return nil, stderr.ErrDbQueryError
|
|
}
|
|
if count == 0 {
|
|
return data, stderr.Success
|
|
}
|
|
list, err := messagemod.QueryAllDocument(req.Filter(), req.Options())
|
|
if err != nil {
|
|
return data, stderr.ErrDbQueryError
|
|
}
|
|
data["count"] = count
|
|
data["list"] = list
|
|
return data, stderr.Success
|
|
}
|
|
|
|
func Del(req *messagemod.WebDelReq) stderr.Code {
|
|
data, err := messagemod.FindOneByFilter(req.Filter())
|
|
if err != nil {
|
|
return stderr.ErrDbQueryError
|
|
}
|
|
|
|
if data.ID.IsZero() {
|
|
return stderr.CodeEmptyData
|
|
}
|
|
|
|
err = messagemod.RemoveDocument(req.Filter())
|
|
if err != nil {
|
|
return stderr.ErrDbUpdateError
|
|
}
|
|
return stderr.Success
|
|
}
|
|
|
|
// AddPrivateLetter 新增私信消息
|
|
func AddPrivateLetter(req *messagemod.SendMsg) stderr.Code {
|
|
if req.Sender == 0 || req.Receiver == 0 {
|
|
return stderr.ErrParamError
|
|
}
|
|
data, err := usermod.FindUserByUID(req.Sender)
|
|
if err != nil || data == nil {
|
|
log.Warn(fmt.Sprintf("messageser Sender is null"), log.Any("Sender", req.Sender))
|
|
return stderr.CommentUserInfoErr
|
|
}
|
|
|
|
if req.Sender == req.Receiver {
|
|
log.Warn(fmt.Sprintf("messageser req.Sender == req.Receiver"), log.Any("Sender", req.Sender), log.Any("Receiver", req.Receiver))
|
|
return stderr.NoSelfAddMsg
|
|
}
|
|
|
|
//查询被私信的用户是否存在
|
|
takeUser, err := usermod.FindUserByUID(req.Receiver)
|
|
if err != nil {
|
|
return stderr.CommentUserInfoErr
|
|
}
|
|
if takeUser == nil {
|
|
log.Warn(fmt.Sprintf("messageser Receiver is null"), log.Any("Receiver", req.Receiver))
|
|
return stderr.CommentUserInfoErr
|
|
}
|
|
//会话id
|
|
sessionId := ""
|
|
//新增私聊信息之前, 先查询是否有会话信息
|
|
cond := bson.M{"$or": []bson.M{bson.M{"sendUid": req.Sender, "takeUid": req.Receiver}, bson.M{"sendUid": req.Receiver, "takeUid": req.Sender}}}
|
|
session, err := sessionmod.FindOneByFilter(cond)
|
|
if err != nil {
|
|
log.Warn(fmt.Sprintf("messageser Add sessionmod.FindOneByFilter error:%+v:", err), log.Any("Sender", req.Sender), log.Any("Receiver", req.Receiver))
|
|
return stderr.ErrDbQueryError
|
|
}
|
|
t := time.Now()
|
|
if session.ID.IsZero() {
|
|
sessionId = common.UUID()
|
|
//新增session
|
|
s := &sessionmod.Session{
|
|
SendUid: req.Sender,
|
|
TakeUid: req.Receiver,
|
|
SessionId: sessionId,
|
|
CreatedAt: t,
|
|
UpdatedAt: t,
|
|
}
|
|
err := sessionmod.InsertOne(nil, s)
|
|
if err != nil {
|
|
log.Warn(fmt.Sprintf("messageser Add sessionmod.InsertOne error:%+v:", err), log.Any("session", s), log.Any("Sender", req.Sender), log.Any("Receiver", req.Receiver))
|
|
return stderr.ErrDbInsertError
|
|
}
|
|
} else {
|
|
sessionId = session.SessionId
|
|
}
|
|
|
|
code := PublicAddMsg(messagemod.PublicAddMsg{
|
|
SendUid: req.Sender,
|
|
TakeUid: req.Receiver,
|
|
SessionId: sessionId,
|
|
Content: req.Content,
|
|
//ImgUrl: req.ImgUrl,// 暂时不支持图片
|
|
MsgType: req.MsgType,
|
|
ObjId: req.ObjId,
|
|
ObjName: req.ObjName,
|
|
})
|
|
if code != stderr.Success {
|
|
return code
|
|
}
|
|
common.Go(func() {
|
|
//更新会话预览消息
|
|
content := req.Content
|
|
// 暂时不支持图片
|
|
//if len(req.ImgUrl) > 0 && content == "" {
|
|
// content = "发送了一张图片"
|
|
//}
|
|
err := sessionmod.UpdOneByFilter(nil, bson.M{"sessionId": sessionId}, bson.M{"$set": bson.M{"preContent": content, "updatedAt": t}})
|
|
if err != nil {
|
|
log.Warn(fmt.Sprintf("messageser Add messagemod.UpdOneByFilter error:%+v:", err), log.Any("sessionId", sessionId), log.Any("preContent", req.Content), log.Any("Sender", req.Sender), log.Any("Receiver", req.Receiver))
|
|
}
|
|
})
|
|
return stderr.Success
|
|
}
|
|
|
|
// PublicAddMsg 添加消息公共方法
|
|
func PublicAddMsg(prams messagemod.PublicAddMsg) stderr.Code {
|
|
//查询用户信息
|
|
user, err := usermod.FindUserByUID(prams.SendUid)
|
|
if err != nil {
|
|
return stderr.ErrDbQueryError
|
|
}
|
|
if user == nil || user.HasLocked {
|
|
return stderr.UserIsNotExists
|
|
}
|
|
now := time.Now()
|
|
//新增消息
|
|
msg := &messagemod.Message{
|
|
SendUid: prams.SendUid,
|
|
TakeUid: prams.TakeUid,
|
|
MsgType: prams.MsgType,
|
|
Content: prams.Content,
|
|
ImgUrl: prams.ImgUrl,
|
|
IsRead: false,
|
|
CreatedAt: now,
|
|
UpdatedAt: now,
|
|
ObjId: prams.ObjId,
|
|
ObjName: prams.ObjName,
|
|
}
|
|
// 是否加入未读提醒
|
|
needTip := false
|
|
switch prams.MsgType {
|
|
case messagemod.PrivateLetterMsg:
|
|
//私信
|
|
msg.SessionId = prams.SessionId
|
|
needTip = true
|
|
case messagemod.OfficialPrivateLetterMsg:
|
|
//官方私信
|
|
msg.SessionId = prams.SessionId
|
|
msg.ContentType = prams.ContentType
|
|
needTip = true
|
|
case messagemod.FollowMsg:
|
|
//关注
|
|
msg.Content = "关注了你"
|
|
needTip = true
|
|
case messagemod.LikeMsg:
|
|
//点赞
|
|
msg.Content = "点赞了你的帖子"
|
|
msg.ObjId = prams.ObjId
|
|
msg.ObjName = prams.ObjName
|
|
needTip = true
|
|
case messagemod.ForwardMsg: //转发
|
|
msg.Content = "转发了你的帖子"
|
|
msg.ObjId = prams.ObjId
|
|
msg.ObjName = prams.ObjName
|
|
case messagemod.CommentMsg: //评论
|
|
msg.Content = "评论了你的帖子"
|
|
msg.ObjId = prams.ObjId
|
|
msg.ObjName = prams.ObjName
|
|
needTip = true
|
|
case messagemod.DesireMsg:
|
|
msg.Content = "回复了你的工单"
|
|
msg.ObjId = prams.ObjId
|
|
msg.ObjName = prams.ObjName
|
|
needTip = true
|
|
case messagemod.LikeCommentMsg: // 点赞评论
|
|
msg.Content = "点赞了你的评论"
|
|
msg.ObjId = prams.ObjId
|
|
msg.ObjName = prams.ObjName
|
|
case messagemod.ReplyCommentMsg: // 回复评论
|
|
msg.Content = "回复了你的评论"
|
|
msg.ObjId = prams.ObjId
|
|
msg.ObjName = prams.ObjName
|
|
needTip = true
|
|
}
|
|
_, err = messagemod.InsertOne(nil, msg)
|
|
if err != nil {
|
|
log.Warn(fmt.Sprintf("messageser Add messagemod.InsertOne error:%+v:", err), log.Any("message", msg))
|
|
return stderr.ErrDbQueryError
|
|
}
|
|
go func() {
|
|
err = usermod.IncDynamic(prams.TakeUid)
|
|
}()
|
|
// 更新提示状态
|
|
if needTip {
|
|
//_ = message.SetTip(prams.TakeUid)
|
|
}
|
|
|
|
return stderr.Success
|
|
}
|