@@ -1,13 +1,9 @@ | |||||
package config | package config | ||||
import ( | import ( | ||||
"context" | |||||
"egg-im/pkg/k8sutil" | |||||
"egg-im/pkg/logger" | "egg-im/pkg/logger" | ||||
"go.uber.org/zap" | "go.uber.org/zap" | ||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" | |||||
"os" | "os" | ||||
"strconv" | |||||
) | ) | ||||
const ( | const ( | ||||
@@ -31,26 +27,26 @@ var ( | |||||
) | ) | ||||
func Init() { | func Init() { | ||||
k8sClient, err := k8sutil.GetK8sClient() | |||||
if err != nil { | |||||
panic(err) | |||||
} | |||||
configmap, err := k8sClient.CoreV1().ConfigMaps(NameSpace).Get(context.TODO(), "config", metav1.GetOptions{}) | |||||
if err != nil { | |||||
panic(err) | |||||
} | |||||
MySQL = configmap.Data["mysql"] | |||||
RedisIP = configmap.Data["redisIP"] | |||||
RedisPassword = configmap.Data["redisPassword"] | |||||
PushRoomSubscribeNum, _ = strconv.Atoi(configmap.Data["pushRoomSubscribeNum"]) | |||||
if PushRoomSubscribeNum == 0 { | |||||
panic("PushRoomSubscribeNum == 0") | |||||
} | |||||
PushAllSubscribeNum, _ = strconv.Atoi(configmap.Data["pushAllSubscribeNum"]) | |||||
if PushRoomSubscribeNum == 0 { | |||||
panic("PushAllSubscribeNum == 0") | |||||
} | |||||
//k8sClient, err := k8sutil.GetK8sClient() | |||||
//if err != nil { | |||||
// panic(err) | |||||
//} | |||||
//configmap, err := k8sClient.CoreV1().ConfigMaps(NameSpace).Get(context.TODO(), "config", metav1.GetOptions{}) | |||||
//if err != nil { | |||||
// panic(err) | |||||
//} | |||||
// | |||||
//MySQL = configmap.Data["mysql"] | |||||
//RedisIP = configmap.Data["redisIP"] | |||||
//RedisPassword = configmap.Data["redisPassword"] | |||||
//PushRoomSubscribeNum, _ = strconv.Atoi(configmap.Data["pushRoomSubscribeNum"]) | |||||
//if PushRoomSubscribeNum == 0 { | |||||
// panic("PushRoomSubscribeNum == 0") | |||||
//} | |||||
//PushAllSubscribeNum, _ = strconv.Atoi(configmap.Data["pushAllSubscribeNum"]) | |||||
//if PushRoomSubscribeNum == 0 { | |||||
// panic("PushAllSubscribeNum == 0") | |||||
//} | |||||
LocalAddr = os.Getenv("POD_IP") + RPCListenAddr | LocalAddr = os.Getenv("POD_IP") + RPCListenAddr | ||||
@@ -41,6 +41,11 @@ func (s *BusinessExtServer) ViewGroupNotice(ctx context.Context, req *pb.ViewGro | |||||
IsLike: false, | IsLike: false, | ||||
}, nil | }, nil | ||||
} | } | ||||
groupNotice.ReadNums++ | |||||
err = repo2.GroupNoticeDao.Save(groupNotice, false) | |||||
if err != nil { | |||||
return nil, err | |||||
} | |||||
groupNoticeWithLikeRecords, err := repo2.GroupNoticeWithLikeRecordsDao.Get(userId, req.GroupId) | groupNoticeWithLikeRecords, err := repo2.GroupNoticeWithLikeRecordsDao.Get(userId, req.GroupId) | ||||
if err != nil { | if err != nil { | ||||
return nil, err | return nil, err | ||||
@@ -53,7 +58,7 @@ func (s *BusinessExtServer) ViewGroupNotice(ctx context.Context, req *pb.ViewGro | |||||
LikeNums: int64(groupNotice.LikeNums), | LikeNums: int64(groupNotice.LikeNums), | ||||
ReadNums: int64(groupNotice.ReadNums), | ReadNums: int64(groupNotice.ReadNums), | ||||
PublishType: pb.GroupNoticePublishType(groupNotice.PublishType), | PublishType: pb.GroupNoticePublishType(groupNotice.PublishType), | ||||
PublishTime: groupNotice.CreateTime.Format("2006-01-02 15:04:05"), | |||||
PublishTime: groupNotice.UpdateTime.Format("2006-01-02 15:04:05"), | |||||
IsLike: func() bool { | IsLike: func() bool { | ||||
if groupNoticeWithLikeRecords == nil { | if groupNoticeWithLikeRecords == nil { | ||||
return false | return false | ||||
@@ -93,7 +98,7 @@ func (s *BusinessExtServer) LikeGroupNotice(ctx context.Context, req *pb.LikeGro | |||||
} | } | ||||
groupNotice.LikeNums++ | groupNotice.LikeNums++ | ||||
return new(pb.Empty), repo2.GroupNoticeDao.Save(groupNotice) | |||||
return new(pb.Empty), repo2.GroupNoticeDao.Save(groupNotice, false) | |||||
} | } | ||||
func (s *BusinessExtServer) CancelLikeGroupNotice(ctx context.Context, req *pb.CancelLikeGroupNoticeReq) (*pb.Empty, error) { | func (s *BusinessExtServer) CancelLikeGroupNotice(ctx context.Context, req *pb.CancelLikeGroupNoticeReq) (*pb.Empty, error) { | ||||
@@ -122,16 +127,8 @@ func (s *BusinessExtServer) CancelLikeGroupNotice(ctx context.Context, req *pb.C | |||||
return nil, err | return nil, err | ||||
} | } | ||||
err = repo2.GroupNoticeWithLikeRecordsDao.Save(&model.GroupNoticeWithLikeRecords{ | |||||
GroupId: req.GroupId, | |||||
UserId: userId, | |||||
}) | |||||
if err != nil { | |||||
return nil, err | |||||
} | |||||
groupNotice.LikeNums-- | groupNotice.LikeNums-- | ||||
return new(pb.Empty), repo2.GroupNoticeDao.Save(groupNotice) | |||||
return new(pb.Empty), repo2.GroupNoticeDao.Save(groupNotice, false) | |||||
} | } | ||||
func (s *BusinessExtServer) PublishGroupNotice(ctx context.Context, req *pb.PublishGroupNoticeReq) (*pb.Empty, error) { | func (s *BusinessExtServer) PublishGroupNotice(ctx context.Context, req *pb.PublishGroupNoticeReq) (*pb.Empty, error) { | ||||
@@ -156,7 +153,7 @@ func (s *BusinessExtServer) PublishGroupNotice(ctx context.Context, req *pb.Publ | |||||
UpdateTime: now, | UpdateTime: now, | ||||
} | } | ||||
return new(pb.Empty), repo2.GroupNoticeDao.Save(&groupComplain) | |||||
return new(pb.Empty), repo2.GroupNoticeDao.Save(&groupComplain, true) | |||||
} | } | ||||
func (s *BusinessExtServer) ComplainGroup(ctx context.Context, req *pb.ComplainGroupReq) (*pb.Empty, error) { | func (s *BusinessExtServer) ComplainGroup(ctx context.Context, req *pb.ComplainGroupReq) (*pb.Empty, error) { | ||||
@@ -4,6 +4,7 @@ import ( | |||||
"context" | "context" | ||||
"egg-im/internal/business/comm/utils" | "egg-im/internal/business/comm/utils" | ||||
"egg-im/internal/logic/app" | "egg-im/internal/logic/app" | ||||
"egg-im/internal/logic/domain/group/repo" | |||||
"egg-im/pkg/grpclib" | "egg-im/pkg/grpclib" | ||||
"egg-im/pkg/pb" | "egg-im/pkg/pb" | ||||
"google.golang.org/protobuf/proto" | "google.golang.org/protobuf/proto" | ||||
@@ -243,7 +244,15 @@ func (*LogicExtServer) UpdateGroup(ctx context.Context, in *pb.UpdateGroupReq) ( | |||||
// GetGroup 获取群组信息 | // GetGroup 获取群组信息 | ||||
func (*LogicExtServer) GetGroup(ctx context.Context, in *pb.GetGroupReq) (*pb.GetGroupResp, error) { | func (*LogicExtServer) GetGroup(ctx context.Context, in *pb.GetGroupReq) (*pb.GetGroupResp, error) { | ||||
group, memberType, userStatusType, err := app.GroupApp.GetGroup(ctx, in.GroupId) | group, memberType, userStatusType, err := app.GroupApp.GetGroup(ctx, in.GroupId) | ||||
return &pb.GetGroupResp{Group: group, MemberType: memberType, GroupUserStatusType: userStatusType}, err | |||||
if err != nil { | |||||
return &pb.GetGroupResp{Group: group, MemberType: memberType, GroupUserStatusType: userStatusType}, err | |||||
} | |||||
groupNotice, err := repo.GroupRepo.GetGroupNotice(in.GroupId) | |||||
return &pb.GetGroupResp{Group: group, MemberType: memberType, GroupUserStatusType: userStatusType, GroupNotice: &pb.GroupNotice{ | |||||
Content: groupNotice.Content, | |||||
PublishType: pb.GroupNoticePublishType(groupNotice.PublishType), | |||||
PublishTime: groupNotice.UpdateTime.Format("2006-01-02 15:04:05"), | |||||
}}, err | |||||
} | } | ||||
// GetGroups 获取用户加入的所有群组 | // GetGroups 获取用户加入的所有群组 | ||||
@@ -44,7 +44,7 @@ func (c *groupCache) GetLimit(limit string, groupId int64) (*model.Group, error) | |||||
// Set 设置群组缓存 | // Set 设置群组缓存 | ||||
func (c *groupCache) Set(group *model.Group) error { | func (c *groupCache) Set(group *model.Group) error { | ||||
err := db.RedisUtil.Set(GroupKey+strconv.FormatInt(group.Id, 10), group, 4*time.Hour) | |||||
err := db.RedisUtil.Set(GroupKey+strconv.FormatInt(group.Id, 10), group, 2*time.Hour) | |||||
if err != nil { | if err != nil { | ||||
return gerrors.WrapError(err) | return gerrors.WrapError(err) | ||||
} | } | ||||
@@ -53,7 +53,7 @@ func (c *groupCache) Set(group *model.Group) error { | |||||
// SetLimit 设置群组缓存 | // SetLimit 设置群组缓存 | ||||
func (c *groupCache) SetLimit(limit string, group *model.Group) error { | func (c *groupCache) SetLimit(limit string, group *model.Group) error { | ||||
err := db.RedisUtil.Set(GroupKey+limit+":"+strconv.FormatInt(group.Id, 10), group, 4*time.Hour) | |||||
err := db.RedisUtil.Set(GroupKey+limit+":"+strconv.FormatInt(group.Id, 10), group, 2*time.Hour) | |||||
if err != nil { | if err != nil { | ||||
return gerrors.WrapError(err) | return gerrors.WrapError(err) | ||||
} | } | ||||
@@ -0,0 +1,48 @@ | |||||
package repo | |||||
import ( | |||||
"egg-im/internal/logic/domain/group/model" | |||||
"egg-im/pkg/db" | |||||
"egg-im/pkg/gerrors" | |||||
"strconv" | |||||
"time" | |||||
"github.com/go-redis/redis" | |||||
) | |||||
const GroupNoticeKey = "group:notice:" | |||||
type groupNoticeCache struct{} | |||||
var GroupNoticeCache = new(groupNoticeCache) | |||||
// Get 获取群组缓存 | |||||
func (c *groupNoticeCache) Get(groupId int64) (*model.GroupNotice, error) { | |||||
var user model.GroupNotice | |||||
err := db.RedisUtil.Get(GroupNoticeKey+strconv.FormatInt(groupId, 10), &user) | |||||
if err != nil && err != redis.Nil { | |||||
return nil, gerrors.WrapError(err) | |||||
} | |||||
if err == redis.Nil { | |||||
return nil, nil | |||||
} | |||||
return &user, nil | |||||
} | |||||
// Set 设置群组缓存 | |||||
func (c *groupNoticeCache) Set(group *model.GroupNotice) error { | |||||
err := db.RedisUtil.Set(GroupNoticeKey+strconv.FormatInt(group.Id, 10), group, 1*time.Hour) | |||||
if err != nil { | |||||
return gerrors.WrapError(err) | |||||
} | |||||
return nil | |||||
} | |||||
// Del 删除群组缓存 | |||||
func (c *groupNoticeCache) Del(groupId int64) error { | |||||
_, err := db.RedisCli.Del(GroupNoticeKey + strconv.FormatInt(groupId, 10)).Result() | |||||
if err != nil { | |||||
return gerrors.WrapError(err) | |||||
} | |||||
return nil | |||||
} |
@@ -26,15 +26,15 @@ func (*groupNoticeDao) Get(groupId int64) (*model.GroupNotice, error) { | |||||
} | } | ||||
// Save 插入一条群组 | // Save 插入一条群组 | ||||
func (g *groupNoticeDao) Save(groupNotice *model.GroupNotice) error { | |||||
func (g *groupNoticeDao) Save(groupNotice *model.GroupNotice, isPublish bool) error { | |||||
mm, err := g.Get(groupNotice.GroupId) | mm, err := g.Get(groupNotice.GroupId) | ||||
if err != nil { | if err != nil { | ||||
return err | return err | ||||
} | } | ||||
if mm != nil { | |||||
if mm != nil && isPublish { | |||||
mm.Content = groupNotice.Content | mm.Content = groupNotice.Content | ||||
mm.LikeNums = groupNotice.LikeNums | |||||
mm.ReadNums = groupNotice.ReadNums | |||||
mm.LikeNums = 0 | |||||
mm.ReadNums = 0 | |||||
mm.PublishType = groupNotice.PublishType | mm.PublishType = groupNotice.PublishType | ||||
mm.UpdateTime = groupNotice.UpdateTime | mm.UpdateTime = groupNotice.UpdateTime | ||||
@@ -43,10 +43,17 @@ func (g *groupNoticeDao) Save(groupNotice *model.GroupNotice) error { | |||||
if err != nil { | if err != nil { | ||||
return err | return err | ||||
} | } | ||||
} | |||||
err = db.DB.Save(&groupNotice).Error | |||||
if err != nil { | |||||
return gerrors.WrapError(err) | |||||
err = db.DB.Save(&mm).Error | |||||
if err != nil { | |||||
return gerrors.WrapError(err) | |||||
} | |||||
//删除缓存 | |||||
GroupCache.Del(groupNotice.GroupId) | |||||
} else { | |||||
err = db.DB.Save(&groupNotice).Error | |||||
if err != nil { | |||||
return gerrors.WrapError(err) | |||||
} | |||||
} | } | ||||
return nil | return nil | ||||
} | } |
@@ -27,7 +27,7 @@ func (*groupNoticeWithLikeRecords) Get(userId, groupId int64) (*model.GroupNotic | |||||
// Save 插入一条群组 | // Save 插入一条群组 | ||||
func (*groupNoticeWithLikeRecords) Save(groupNoticeWithLikeRecords *model.GroupNoticeWithLikeRecords) error { | func (*groupNoticeWithLikeRecords) Save(groupNoticeWithLikeRecords *model.GroupNoticeWithLikeRecords) error { | ||||
err := db.DB.Save(&groupNoticeWithLikeRecords).Error | |||||
err := db.DB.Create(&groupNoticeWithLikeRecords).Error | |||||
if err != nil { | if err != nil { | ||||
return gerrors.WrapError(err) | return gerrors.WrapError(err) | ||||
} | } | ||||
@@ -42,6 +42,27 @@ func (*groupRepo) Get(groupId int64) (*model.Group, error) { | |||||
return group, nil | return group, nil | ||||
} | } | ||||
// GetGroupNotice 获取群组公告信息 | |||||
func (*groupRepo) GetGroupNotice(groupId int64) (*model.GroupNotice, error) { | |||||
group, err := GroupNoticeCache.Get(groupId) | |||||
if err != nil { | |||||
return nil, err | |||||
} | |||||
if group != nil { | |||||
return group, nil | |||||
} | |||||
group, err = GroupNoticeDao.Get(groupId) | |||||
if err != nil { | |||||
return nil, err | |||||
} | |||||
err = GroupNoticeCache.Set(group) | |||||
if err != nil { | |||||
return nil, err | |||||
} | |||||
return group, nil | |||||
} | |||||
// GetLimit 获取群组信息(限量) | // GetLimit 获取群组信息(限量) | ||||
func (*groupRepo) GetLimit(groupId, limit int64) (*model.Group, error) { | func (*groupRepo) GetLimit(groupId, limit int64) (*model.Group, error) { | ||||
group, err := GroupCache.GetLimit(strconv.FormatInt(limit, 10), groupId) | group, err := GroupCache.GetLimit(strconv.FormatInt(limit, 10), groupId) | ||||
@@ -2,6 +2,7 @@ syntax = "proto3"; | |||||
package pb; | package pb; | ||||
option go_package = "egg-im/pkg/pb/"; | option go_package = "egg-im/pkg/pb/"; | ||||
import "business.ext.proto"; | |||||
import "common.ext.proto"; | import "common.ext.proto"; | ||||
import "connect.ext.proto"; | import "connect.ext.proto"; | ||||
@@ -186,8 +187,16 @@ message GetGroupResp { | |||||
Group group = 1; | Group group = 1; | ||||
MemberType member_type = 2; | MemberType member_type = 2; | ||||
GroupUserStatusType group_user_status_type = 3; | GroupUserStatusType group_user_status_type = 3; | ||||
GroupNotice group_notice = 4; //群公告 | |||||
} | } | ||||
message GroupNotice { | |||||
string content = 1; //公告内容 | |||||
GroupNoticePublishType publish_type = 2; // 发布方式 | |||||
string publish_time = 3; // 发布时间 | |||||
} | |||||
message Group { | message Group { | ||||
int64 group_id = 1; // 群组id | int64 group_id = 1; // 群组id | ||||
string name = 2; // 名称 | string name = 2; // 名称 | ||||
@@ -58,10 +58,10 @@ func initConnectIntClient() { | |||||
} | } | ||||
func initBusinessIntClient() { | func initBusinessIntClient() { | ||||
//conn, err := grpc.DialContext(context.TODO(), "127.0.0.1:8000", grpc.WithInsecure(), | |||||
// grpc.WithDefaultServiceConfig(fmt.Sprintf(`{"LoadBalancingPolicy": "%s"}`, roundrobin.Name))) | |||||
conn, err := grpc.DialContext(context.TODO(), k8s.GetK8STarget("egg-im", "business", "8000"), grpc.WithInsecure(), | |||||
conn, err := grpc.DialContext(context.TODO(), "127.0.0.1:8000", grpc.WithInsecure(), | |||||
grpc.WithDefaultServiceConfig(fmt.Sprintf(`{"LoadBalancingPolicy": "%s"}`, roundrobin.Name))) | grpc.WithDefaultServiceConfig(fmt.Sprintf(`{"LoadBalancingPolicy": "%s"}`, roundrobin.Name))) | ||||
//conn, err := grpc.DialContext(context.TODO(), k8s.GetK8STarget("egg-im", "business", "8000"), grpc.WithInsecure(), | |||||
// grpc.WithDefaultServiceConfig(fmt.Sprintf(`{"LoadBalancingPolicy": "%s"}`, roundrobin.Name))) | |||||
if err != nil { | if err != nil { | ||||
panic(err) | panic(err) | ||||
} | } | ||||