|
@@ -7,6 +7,7 @@ import (
|
|
|
"app.yhyue.com/moapp/jybase/common"
|
|
|
"app.yhyue.com/moapp/jybase/redis"
|
|
|
"context"
|
|
|
+ "errors"
|
|
|
"fmt"
|
|
|
"log"
|
|
|
"strconv"
|
|
@@ -21,7 +22,6 @@ func BitmapUserMsgList(this *message.UserMsgListReq) (*message.UserMsgList, *mes
|
|
|
userAllMsgArr, userReadArr, userUnreadArr, err := GetUserMsgSummary(this.UserId)
|
|
|
if len(userAllMsgArr) == 0 && err != nil {
|
|
|
fmt.Printf("此用户暂无消息 : %s", err.Error())
|
|
|
- return data, nil
|
|
|
}
|
|
|
//用户分类消息
|
|
|
_, userClassMsgMap := FindUserClassMsg(this.UserId)
|
|
@@ -52,7 +52,7 @@ func BitmapUserMsgList(this *message.UserMsgListReq) (*message.UserMsgList, *mes
|
|
|
lastMsgId = classMsg[len(classMsg)-1]
|
|
|
}
|
|
|
}
|
|
|
- lastMsg := GlobMsgMap[int(lastMsgId)]
|
|
|
+ lastMsg := GlobMsgMap[lastMsgId]
|
|
|
if lastMsg == nil || len(lastMsg) <= 0 {
|
|
|
m := entity.Mysql.FindOne("message_send_log", map[string]interface{}{"id": int(lastMsgId)}, "id,msg_type,title,content,send_time,link,menu_name,group_id", "")
|
|
|
if m != nil && len(*m) > 0 {
|
|
@@ -79,13 +79,14 @@ func BitmapUserMsgList(this *message.UserMsgListReq) (*message.UserMsgList, *mes
|
|
|
var columnData []*message.AllSortData
|
|
|
if this.IsColumn && this.MsgType > 0 && this.IsClassSearch {
|
|
|
// 获取小分类下的未读数
|
|
|
- sortUnread, _ := BitmapCountClassUnread(this.UserId, this.MsgType, classUnreadCountMap)
|
|
|
+ sortUnread, total := BitmapCountClassUnread(this.UserId, this.MsgType, classUnreadCountMap)
|
|
|
columnArr := []entity.MsgClass{}
|
|
|
if !this.IsColumnNewMsg { // 用于区分分类列表页和分类详情页 根据不同情况
|
|
|
columnArr = append(columnArr, entity.ClassMap[this.MsgType])
|
|
|
} else {
|
|
|
columnArr = entity.ClassSearchMap[this.MsgType]
|
|
|
}
|
|
|
+ unread += total
|
|
|
for i := 0; i < len(columnArr); i++ {
|
|
|
tmp := columnArr[i]
|
|
|
var column message.AllSortData
|
|
@@ -95,14 +96,14 @@ func BitmapUserMsgList(this *message.UserMsgListReq) (*message.UserMsgList, *mes
|
|
|
// 消息未读数
|
|
|
msgType := common.InterfaceToStr(tmp.MsgType)
|
|
|
column.UnreadMessages = sortUnread[msgType]
|
|
|
- unread += sortUnread[msgType]
|
|
|
column.Data = sData[msgType]
|
|
|
column.IsClassSearch = true
|
|
|
columnData = append(columnData, &column)
|
|
|
}
|
|
|
} else if this.IsColumn {
|
|
|
//获取所有分类未读数 不初始化
|
|
|
- sortUnread, _ := BitmapCountUnread(this.UserId, classUnreadCountMap, false)
|
|
|
+ sortUnread, total := BitmapCountUnread(this.UserId, classUnreadCountMap, false)
|
|
|
+ unread += total
|
|
|
for _, v := range entity.MessageColumn {
|
|
|
var column message.AllSortData
|
|
|
column.Name = common.InterfaceToStr(v["name"])
|
|
@@ -114,7 +115,6 @@ func BitmapUserMsgList(this *message.UserMsgListReq) (*message.UserMsgList, *mes
|
|
|
//消息未读数
|
|
|
msgType := common.InterfaceToStr(v["group_id"])
|
|
|
column.UnreadMessages = sortUnread[msgType]
|
|
|
- unread += sortUnread[msgType]
|
|
|
column.Data = sData[msgType]
|
|
|
}
|
|
|
if _, ok := entity.ClassSearchMap[column.MsgType]; ok {
|
|
@@ -124,6 +124,10 @@ func BitmapUserMsgList(this *message.UserMsgListReq) (*message.UserMsgList, *mes
|
|
|
}
|
|
|
}
|
|
|
data.SortData = columnData
|
|
|
+ if len(userAllMsgArr) == 0 {
|
|
|
+ fmt.Printf("此用户暂无消息 : %s", err.Error())
|
|
|
+ return data, nil
|
|
|
+ }
|
|
|
count = int64(len(userAllMsgArr))
|
|
|
//pc列表数据、移动端分类列表
|
|
|
if this.IsMsgList {
|
|
@@ -211,10 +215,11 @@ func BitmapUserMsgList(this *message.UserMsgListReq) (*message.UserMsgList, *mes
|
|
|
unread += unreadMsg(this)
|
|
|
}
|
|
|
}
|
|
|
- data.Unread = int64(len(userUnreadArr))
|
|
|
+ data.Unread = unread
|
|
|
//置顶消息
|
|
|
if len(classUnreadMsgMap[1]) > 0 {
|
|
|
- res2 := BitmapMessageGetLast(this, classUnreadMsgMap[1][len(classUnreadMsgMap)-1])
|
|
|
+ activeMsgArr := classUnreadMsgMap[1]
|
|
|
+ res2 := BitmapMessageGetLast(this, activeMsgArr[len(activeMsgArr)-1])
|
|
|
return data, res2
|
|
|
}
|
|
|
return data, nil
|
|
@@ -226,6 +231,12 @@ func BitmapMessageGetLast(this *message.UserMsgListReq, msgId int) *message.Mess
|
|
|
return nil
|
|
|
}
|
|
|
lastMsg := GlobMsgMap[msgId]
|
|
|
+ if lastMsg == nil && len(lastMsg) <= 0 {
|
|
|
+ m := entity.Mysql.FindOne("message_send_log", map[string]interface{}{"id": msgId}, "id,msg_type,title,content,send_time,link,menu_name,group_id", "")
|
|
|
+ if m != nil && len(*m) > 0 {
|
|
|
+ lastMsg = *m
|
|
|
+ }
|
|
|
+ }
|
|
|
if lastMsg != nil && len(lastMsg) > 0 {
|
|
|
msg := message.Messages{
|
|
|
Id: common.InterfaceToStr(lastMsg["id"]),
|
|
@@ -243,8 +254,8 @@ func BitmapMessageGetLast(this *message.UserMsgListReq, msgId int) *message.Mess
|
|
|
}
|
|
|
|
|
|
type UserClassUnread struct {
|
|
|
- GroupId int
|
|
|
- UnreadArr []uint32
|
|
|
+ GroupId int32 `ch:"group_id"`
|
|
|
+ UnreadArr []uint32 `ch:"unreadArr"`
|
|
|
}
|
|
|
|
|
|
// BitmapCountUnread 未读消息合计 isRedis 是否需要初始化redis
|
|
@@ -277,7 +288,7 @@ func BitmapCountUnread(userId string, classUnreadCountMap map[int]int, isRedis b
|
|
|
}
|
|
|
if isRedis {
|
|
|
//用户分类未读
|
|
|
- fmt.Println(util.IntAll(val["group_id"]))
|
|
|
+ //fmt.Println(util.IntAll(val["group_id"]))
|
|
|
key := fmt.Sprintf(MsgCountKey, userId, util.IntAll(val["group_id"]))
|
|
|
redis.Put(redisModule, key, oneClassUnread, 60*60)
|
|
|
}
|
|
@@ -325,14 +336,14 @@ func BitmapCountClassUnread(userId string, groupId int64, classUnreadCountMap ma
|
|
|
|
|
|
//FindUserClassUnread 查询用户分类未读消息id
|
|
|
func FindUserClassUnread(userId string) (map[int]int, map[int][]int) {
|
|
|
- sql := fmt.Sprintf("SELECT bitmapToArray(bitmapAnd(bitmapAndnot(mus.allMsg,mus.readMsg),ms.msg_bitmap)) AS msgArr,ms.group_id FROM messageCenter.message_user_summary mus, messageCenter.message_summary ms WHERE mus.userId = '%s'", userId)
|
|
|
+ sql := fmt.Sprintf("SELECT bitmapToArray(bitmapAnd(bitmapAndnot(mus.allMsg,mus.readMsg),ms.msg_bitmap)) AS unreadArr,ms.group_id FROM messageCenter.message_user_summary mus, messageCenter.message_summary ms WHERE mus.userId = '%s'", userId)
|
|
|
rows, err := entity.ClickhouseConn.Query(context.Background(), sql)
|
|
|
if err != nil {
|
|
|
log.Println("获取各分类未读消息数组出错:", err)
|
|
|
return nil, nil
|
|
|
}
|
|
|
- var classUnreadCountMap map[int]int
|
|
|
- var classUnreadMsgMap map[int][]int
|
|
|
+ classUnreadCountMap := map[int]int{}
|
|
|
+ classUnreadMsgMap := map[int][]int{}
|
|
|
for rows.Next() {
|
|
|
group := UserClassUnread{}
|
|
|
err = rows.ScanStruct(&group)
|
|
@@ -340,22 +351,22 @@ func FindUserClassUnread(userId string) (map[int]int, map[int][]int) {
|
|
|
log.Println("获取各分类读取分类数据出错:", err)
|
|
|
return nil, nil
|
|
|
}
|
|
|
- classUnreadCountMap[group.GroupId] = len(group.UnreadArr)
|
|
|
- classUnreadMsgMap[group.GroupId] = Uint32ArrToIntArr(group.UnreadArr)
|
|
|
+ classUnreadCountMap[int(group.GroupId)] = len(group.UnreadArr)
|
|
|
+ classUnreadMsgMap[int(group.GroupId)] = Uint32ArrToIntArr(group.UnreadArr)
|
|
|
}
|
|
|
return classUnreadCountMap, classUnreadMsgMap
|
|
|
}
|
|
|
|
|
|
//FindUserClassMsg 查询用户分类所有消息id
|
|
|
func FindUserClassMsg(userId string) (map[int]int, map[int][]int) {
|
|
|
- sql := fmt.Sprintf("SELECT bitmapToArray(bitmapAnd(mus.allMsg,ms.msg_bitmap)) AS msgArr,ms.group_id FROM messageCenter.message_user_summary mus, messageCenter.message_summary ms WHERE mus.userId = '%s'", userId)
|
|
|
+ sql := fmt.Sprintf("SELECT bitmapToArray(bitmapAnd(mus.allMsg,ms.msg_bitmap)) AS unreadArr,ms.group_id FROM messageCenter.message_user_summary mus, messageCenter.message_summary ms WHERE mus.userId = '%s'", userId)
|
|
|
rows, err := entity.ClickhouseConn.Query(context.Background(), sql)
|
|
|
if err != nil {
|
|
|
log.Println("获取各分类未读消息数组出错:", err)
|
|
|
return nil, nil
|
|
|
}
|
|
|
- var classCountMap map[int]int
|
|
|
- var classMsgMap map[int][]int
|
|
|
+ classCountMap := map[int]int{}
|
|
|
+ classMsgMap := map[int][]int{}
|
|
|
for rows.Next() {
|
|
|
group := UserClassUnread{}
|
|
|
err = rows.ScanStruct(&group)
|
|
@@ -363,18 +374,28 @@ func FindUserClassMsg(userId string) (map[int]int, map[int][]int) {
|
|
|
log.Println("获取各分类读取分类数据出错:", err)
|
|
|
return nil, nil
|
|
|
}
|
|
|
- classCountMap[group.GroupId] = len(group.UnreadArr)
|
|
|
- classMsgMap[group.GroupId] = Uint32ArrToIntArr(group.UnreadArr)
|
|
|
+ //fmt.Println(int(group.GroupId), len(group.UnreadArr))
|
|
|
+ classCountMap[int(group.GroupId)] = len(group.UnreadArr)
|
|
|
+ classMsgMap[int(group.GroupId)] = Uint32ArrToIntArr(group.UnreadArr)
|
|
|
}
|
|
|
return classCountMap, classMsgMap
|
|
|
}
|
|
|
|
|
|
// GetUserMsgSummary 从用户消息汇总表取数据
|
|
|
func GetUserMsgSummary(userId string) (userAllMsg, userReadMsg, userUnreadMsg []uint32, err error) {
|
|
|
- row := entity.ClickhouseConn.QueryRow(context.Background(), fmt.Sprintf("SELECT bitmapToArray(allMsg) as userAllMsg,bitmapToArray(readMsg) as userReadMsg,bitmapToArray(bitmapAndnot(allMsg,readMsg)) as userunRead from messageCenter.message_user_summary where userId ='%s'", userId))
|
|
|
+ var count int
|
|
|
+ row1, err := entity.ClickhouseConn.Query(context.Background(), fmt.Sprintf("SELECT COUNT(*) from message_user_summary WHERE userId = '%s'", userId))
|
|
|
+ row1.Scan(&count)
|
|
|
+ if count == 0 {
|
|
|
+ err = errors.New("用户暂无数据")
|
|
|
+ return
|
|
|
+ }
|
|
|
+ sql := fmt.Sprintf("SELECT bitmapToArray(allMsg) as userAllMsg,bitmapToArray(readMsg) as userReadMsg,bitmapToArray(bitmapAndnot(allMsg,readMsg)) as userunRead from messageCenter.message_user_summary where userId ='%s'", userId)
|
|
|
+ fmt.Println(sql)
|
|
|
+ row := entity.ClickhouseConn.QueryRow(context.Background(), sql)
|
|
|
err = row.Scan(&userAllMsg, &userReadMsg, &userUnreadMsg)
|
|
|
if err != nil {
|
|
|
- log.Println("GetUserMsgSummary获取用户消息数据出错:", err)
|
|
|
+ log.Println("此用户暂无数据:", err)
|
|
|
}
|
|
|
return
|
|
|
}
|