Commit a21c2425 by 李洪

登录退出修改

parent 263bf26a
...@@ -32,8 +32,8 @@ func GetNowTime() string { ...@@ -32,8 +32,8 @@ func GetNowTime() string {
var ctx = context.Background() var ctx = context.Background()
func GetCode(mobile string) (string, error) { func GetRedis(field string) (string, error) {
val, err := db.RedisClient.Get(ctx, mobile).Result() val, err := db.RedisClient.Get(ctx, field).Result()
if err != nil { if err != nil {
return "", err return "", err
} }
...@@ -41,6 +41,16 @@ func GetCode(mobile string) (string, error) { ...@@ -41,6 +41,16 @@ func GetCode(mobile string) (string, error) {
return val, nil return val, nil
} }
func SetRedis(fieldKey string, val string) error {
err := db.RedisClient.Set(ctx, fieldKey, val, 0).Err()
return err
}
func DelRedis(fieldKey string) error {
err := db.RedisClient.Del(ctx, fieldKey).Err()
return err
}
func Paginate(count, step, page int64) (int64, int64) { func Paginate(count, step, page int64) (int64, int64) {
offset := step * (page - 1) offset := step * (page - 1)
total := int64(math.Ceil(float64(count) / float64(step))) total := int64(math.Ceil(float64(count) / float64(step)))
......
...@@ -6,6 +6,7 @@ import ( ...@@ -6,6 +6,7 @@ import (
"im-microservice/pb" "im-microservice/pb"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/status" "google.golang.org/grpc/status"
) )
...@@ -32,6 +33,11 @@ type ImUserQ struct { ...@@ -32,6 +33,11 @@ type ImUserQ struct {
//注册 //注册
func (u *ImUserServer) ImUserRegister(ctx context.Context, in *pb.ImUserRequest) (reply *pb.ImUserRegReply, err error) { func (u *ImUserServer) ImUserRegister(ctx context.Context, in *pb.ImUserRequest) (reply *pb.ImUserRegReply, err error) {
// 请求超时
if ctx.Err() == context.Canceled {
err = status.New(codes.Canceled, "Client cancelled, abandoning.").Err()
return
}
// 是否已经注册过, 如果已经注册返回用户信息 // 是否已经注册过, 如果已经注册返回用户信息
if c_user, _ := GetImUserByAccidAppkey(in.GetAccid(), in.Common.Appkey); c_user.Accid != "" { if c_user, _ := GetImUserByAccidAppkey(in.GetAccid(), in.Common.Appkey); c_user.Accid != "" {
err = status.Error(10438, "用户已存在") err = status.Error(10438, "用户已存在")
...@@ -52,6 +58,11 @@ func (u *ImUserServer) ImUserRegister(ctx context.Context, in *pb.ImUserRequest) ...@@ -52,6 +58,11 @@ func (u *ImUserServer) ImUserRegister(ctx context.Context, in *pb.ImUserRequest)
//修改用户信息 //修改用户信息
func (u *ImUserServer) ImuserSave(ctx context.Context, in *pb.ImUserRequest) (reply *pb.ImUserSetReply, err error) { func (u *ImUserServer) ImuserSave(ctx context.Context, in *pb.ImUserRequest) (reply *pb.ImUserSetReply, err error) {
// 请求超时
if ctx.Err() == context.Canceled {
err = status.New(codes.Canceled, "Client cancelled, abandoning.").Err()
return
}
//查询用户是否存在 //查询用户是否存在
c_user, _ := GetImUserByAccidAppkey(in.GetAccid(), in.Common.Appkey) c_user, _ := GetImUserByAccidAppkey(in.GetAccid(), in.Common.Appkey)
if c_user.Token == "" { if c_user.Token == "" {
...@@ -95,14 +106,19 @@ func (u *ImUserServer) ImuserSave(ctx context.Context, in *pb.ImUserRequest) (re ...@@ -95,14 +106,19 @@ func (u *ImUserServer) ImuserSave(ctx context.Context, in *pb.ImUserRequest) (re
//用户登录 //用户登录
func (u *ImUserServer) ImUserLogin(ctx context.Context, in *pb.ImUserLoginRequest) (reply *pb.ImUserRegReply, err error) { func (u *ImUserServer) ImUserLogin(ctx context.Context, in *pb.ImUserLoginRequest) (reply *pb.ImUserRegReply, err error) {
// 请求超时
if ctx.Err() == context.Canceled {
err = status.New(codes.Canceled, "Client cancelled, abandoning.").Err()
return
}
//获取用户信息 //获取用户信息
c_user, _ := GetImUserByAccidAppkey(in.GetAccid(), in.Common.Appkey) c_user, _ := GetImUserByAccidAppkey(in.GetAccid(), in.Common.Appkey)
if c_user.Token == "" { if c_user.Token == "" {
err = status.Error(404, "用户不存在") err = status.Error(404, "用户不存在")
return return
} }
//更新用户登录时间 //用户登录处理
_, err = LoginHandle(c_user.Id, in.GetPlatform()) err = LoginHandle(in)
if err != nil { if err != nil {
//err = status.Error(500, "用户登录时间更新失败") //err = status.Error(500, "用户登录时间更新失败")
return return
...@@ -116,14 +132,18 @@ func (u *ImUserServer) ImUserLogin(ctx context.Context, in *pb.ImUserLoginReques ...@@ -116,14 +132,18 @@ func (u *ImUserServer) ImUserLogin(ctx context.Context, in *pb.ImUserLoginReques
//用户退出 //用户退出
func (u *ImUserServer) ImUserLoginOut(ctx context.Context, in *pb.ImUserLoginRequest) (reply *pb.ImUserSetReply, err error) { func (u *ImUserServer) ImUserLoginOut(ctx context.Context, in *pb.ImUserLoginRequest) (reply *pb.ImUserSetReply, err error) {
// 请求超时
if ctx.Err() == context.Canceled {
err = status.New(codes.Canceled, "Client cancelled, abandoning.").Err()
return
}
c_user, _ := GetImUserByAccidAppkey(in.GetAccid(), in.Common.Appkey) c_user, _ := GetImUserByAccidAppkey(in.GetAccid(), in.Common.Appkey)
if c_user.Accid == "" { if c_user.Accid == "" {
err = status.Error(404, "用户不存在") err = status.Error(404, "用户不存在")
return return
} }
_, err = LoginOutHandle(c_user.Id, in.GetPlatform()) err = LoginOutHandle(in)
if err != nil { if err != nil {
err = status.Error(500, "数据库操作失败")
return return
} }
...@@ -133,6 +153,11 @@ func (u *ImUserServer) ImUserLoginOut(ctx context.Context, in *pb.ImUserLoginReq ...@@ -133,6 +153,11 @@ func (u *ImUserServer) ImUserLoginOut(ctx context.Context, in *pb.ImUserLoginReq
//用户禁言 //用户禁言
func (u *ImUserServer) ImUserForbiddenWords(ctx context.Context, in *pb.ImUserSetRequest) (reply *pb.ImUserSetReply, err error) { func (u *ImUserServer) ImUserForbiddenWords(ctx context.Context, in *pb.ImUserSetRequest) (reply *pb.ImUserSetReply, err error) {
// 请求超时
if ctx.Err() == context.Canceled {
err = status.New(codes.Canceled, "Client cancelled, abandoning.").Err()
return
}
var mute int64 = 0 var mute int64 = 0
if in.GetMute() == true { if in.GetMute() == true {
mute = 1 mute = 1
...@@ -160,6 +185,11 @@ func (u *ImUserServer) ImUserForbiddenWords(ctx context.Context, in *pb.ImUserSe ...@@ -160,6 +185,11 @@ func (u *ImUserServer) ImUserForbiddenWords(ctx context.Context, in *pb.ImUserSe
//用户禁音视频 //用户禁音视频
func (u *ImUserServer) ImUserForbiddenAV(ctx context.Context, in *pb.ImUserSetRequest) (reply *pb.ImUserSetReply, err error) { func (u *ImUserServer) ImUserForbiddenAV(ctx context.Context, in *pb.ImUserSetRequest) (reply *pb.ImUserSetReply, err error) {
// 请求超时
if ctx.Err() == context.Canceled {
err = status.New(codes.Canceled, "Client cancelled, abandoning.").Err()
return
}
var mute int64 = 0 var mute int64 = 0
if in.GetMute() == true { if in.GetMute() == true {
mute = 1 mute = 1
...@@ -188,7 +218,11 @@ func (u *ImUserServer) ImUserForbiddenAV(ctx context.Context, in *pb.ImUserSetRe ...@@ -188,7 +218,11 @@ func (u *ImUserServer) ImUserForbiddenAV(ctx context.Context, in *pb.ImUserSetRe
//获取用户信息 //获取用户信息
func (u *ImUserServer) ImUserOne(ctx context.Context, in *pb.ImUserOneRequest) (reply *pb.ImUserOneReply, err error) { func (u *ImUserServer) ImUserOne(ctx context.Context, in *pb.ImUserOneRequest) (reply *pb.ImUserOneReply, err error) {
// 请求超时
if ctx.Err() == context.Canceled {
err = status.New(codes.Canceled, "Client cancelled, abandoning.").Err()
return
}
reply = &pb.ImUserOneReply{} reply = &pb.ImUserOneReply{}
c_user, err := GetImUserByAccidAppkey(in.GetAccid(), in.Common.Appkey) c_user, err := GetImUserByAccidAppkey(in.GetAccid(), in.Common.Appkey)
if err != nil { if err != nil {
......
package im_user package im_user
import ( import (
"im-microservice/pb"
//"fmt" //"fmt"
//"errors" //"errors"
"im-microservice/db" "bytes"
"encoding/json"
"im-microservice/helper" "im-microservice/helper"
//"im-microservice/pb" //"im-microservice/pb"
//"github.com/astaxie/beego/orm"
"github.com/astaxie/beego/orm"
"google.golang.org/grpc/status" "google.golang.org/grpc/status"
) )
const (
ul_table_name = "im_user_login"
ul_user_id = "user_id"
ul_login_status = "login_status"
ul_updatetime = "updatetime"
ul_platform = "platform"
)
//用户登录处理 //用户登录处理
func LoginHandle(user_id int64, platform string) (db.ImUserLogin, error) { func LoginHandle(in *pb.ImUserLoginRequest) error {
loginMap := make(map[int]map[string]interface{})
loginOne := map[string]interface{}{
"platform": in.Platform,
"Updatetime": helper.GetNowTime(),
}
num := 1
//查询该设备平台是否已经存在数据 //查询该设备平台是否已经存在数据
log_user, err := GetLogin(user_id, platform) var buffer bytes.Buffer
if err != nil { buffer.WriteString(in.Accid)
//插入数据 buffer.WriteString("_")
log_user.LoginStatus = 1 buffer.WriteString(in.Common.Appkey)
log_user.Platform = platform fieldKey := buffer.String()
log_user.Updatetime = helper.GetNowTime() jsonStr, err := helper.GetRedis(fieldKey)
log_user.UserId = user_id
_, err := db.MysqlClient.Insert(&log_user) if err == nil {
if err != nil { //不是第一次登录了
return log_user, err json.Unmarshal([]byte(jsonStr), &loginMap)
} for _, m := range loginMap {
} else { if m["platform"] == in.Platform {
//修改数据 err = status.Error(417, "该种设备已经登录了")
if err := UpdateLogin(user_id, platform, 1); err != nil { return err
return log_user, err }
num += 1
} }
log_user.LoginStatus = 1
} }
return log_user, nil
}
//用户退出 loginMap[num] = loginOne
func LoginOutHandle(user_id int64, platform string) (db.ImUserLogin, error) { loginJson, _ := json.Marshal(loginMap)
//查询登录信息 err = helper.SetRedis(fieldKey, string(loginJson))
log_user, err := GetLogin(user_id, platform)
if err != nil { if err != nil {
err = status.Error(500, "用户还没有登录信息") return err
return log_user, err
}
//修改
if err := UpdateLogin(user_id, platform, 0); err != nil {
return log_user, err
} }
return log_user, nil
return nil
} }
//查询 //用户退出处理
func GetLogin(user_id int64, platform string) (db.ImUserLogin, error) { func LoginOutHandle(in *pb.ImUserLoginRequest) error {
var log_user db.ImUserLogin loginMap := make(map[int]map[string]interface{})
err := db.MysqlClient.QueryTable(ul_table_name).Filter(ul_user_id, user_id).Filter(ul_platform, platform).One(&log_user) var buffer bytes.Buffer
if err != nil { buffer.WriteString(in.Accid)
return log_user, err buffer.WriteString("_")
buffer.WriteString(in.Common.Appkey)
fieldKey := buffer.String()
jsonStr, err := helper.GetRedis(fieldKey)
if jsonStr == "" {
err = status.Error(404, "没有登录信息")
return err
}
json.Unmarshal([]byte(jsonStr), &loginMap)
var num int
n := 0
for k, m := range loginMap {
if m["platform"] == in.Platform {
num = k
}
n += 1
}
if n == 1 {
err = helper.DelRedis(fieldKey)
return err
} }
return log_user, nil
}
//修改 delete(loginMap, num)
func UpdateLogin(user_id int64, platform string, login_status int64) error { loginJson, _ := json.Marshal(loginMap)
orm_params := make(orm.Params) err = helper.SetRedis(fieldKey, string(loginJson))
orm_params[ul_login_status] = login_status
orm_params[ul_updatetime] = helper.GetNowTime()
_, err := db.MysqlClient.QueryTable(ul_table_name).Filter(ul_user_id, user_id).Filter(ul_platform, platform).Update(orm_params)
if err != nil { if err != nil {
err = status.Error(500, err.Error())
return err return err
} }
return err return nil
} }
// //用户登录处理
// func LoginHandle(in *pb.ImUserLoginRequest) (db.ImUserLogin, error) {
// //查询该设备平台是否已经存在数据
// var buffer bytes.Buffer
// buffer.WriteString(in.Accid)
// buffer.WriteString("_")
// buffer.WriteString(in.Common.Appkey)
// log_user, err := helper.GetRedis(buffer.String())
// if err != nil {
// //插入数据
// log_user.LoginStatus = 1
// log_user.Platform = platform
// log_user.Updatetime = helper.GetNowTime()
// log_user.UserId = user_id
// _, err := db.MysqlClient.Insert(&log_user)
// if err != nil {
// return log_user, err
// }
// } else {
// //修改数据
// if err := UpdateLogin(user_id, platform, 1); err != nil {
// return log_user, err
// }
// log_user.LoginStatus = 1
// }
// return log_user, nil
// }
// //用户退出
// func LoginOutHandle(user_id int64, platform string) (db.ImUserLogin, error) {
// //查询登录信息
// log_user, err := GetLogin(user_id, platform)
// if err != nil {
// err = status.Error(500, "用户还没有登录信息")
// return log_user, err
// }
// //修改
// if err := UpdateLogin(user_id, platform, 0); err != nil {
// return log_user, err
// }
// return log_user, nil
// }
// //查询
// func GetLogin(user_id int64, platform string) (db.ImUserLogin, error) {
// var log_user db.ImUserLogin
// err := db.MysqlClient.QueryTable(ul_table_name).Filter(ul_user_id, user_id).Filter(ul_platform, platform).One(&log_user)
// if err != nil {
// return log_user, err
// }
// return log_user, nil
// }
// //修改
// func UpdateLogin(user_id int64, platform string, login_status int64) error {
// orm_params := make(orm.Params)
// orm_params[ul_login_status] = login_status
// orm_params[ul_updatetime] = helper.GetNowTime()
// _, err := db.MysqlClient.QueryTable(ul_table_name).Filter(ul_user_id, user_id).Filter(ul_platform, platform).Update(orm_params)
// if err != nil {
// err = status.Error(500, err.Error())
// return err
// }
// return err
// }
...@@ -29,10 +29,10 @@ func (us *UserRelationshipService) Add(ctx context.Context, ...@@ -29,10 +29,10 @@ func (us *UserRelationshipService) Add(ctx context.Context,
// 更改用户版本信息 // 更改用户版本信息
u_map := make(map[string]interface{}) u_map := make(map[string]interface{})
u_map["edition"] = helper.GetNowTime() u_map["edition"] = helper.GetNowTime()
_, _ = im_user.UpdateImUser(in.Accid, u_map) _, _ = im_user.UpdateImUser(in.Accid, in.Common.Appkey, u_map)
// 更改请求用户版本信息 // 更改请求用户版本信息
_, _ = im_user.UpdateImUser(in.Faccid, u_map) _, _ = im_user.UpdateImUser(in.Faccid, in.Common.Appkey, u_map)
reply = &pb.UserRelationshipAddReply{} reply = &pb.UserRelationshipAddReply{}
return return
...@@ -52,10 +52,10 @@ func (us *UserRelationshipService) Delete(ctx context.Context, ...@@ -52,10 +52,10 @@ func (us *UserRelationshipService) Delete(ctx context.Context,
// 更改用户版本信息 // 更改用户版本信息
u_map := make(map[string]interface{}) u_map := make(map[string]interface{})
u_map["edition"] = helper.GetNowTime() u_map["edition"] = helper.GetNowTime()
_, _ = im_user.UpdateImUser(in.Accid, u_map) _, _ = im_user.UpdateImUser(in.Accid, in.Common.Appkey, u_map)
// 更改被添加用户版本信息 // 更改被添加用户版本信息
_, _ = im_user.UpdateImUser(in.Faccid, u_map) _, _ = im_user.UpdateImUser(in.Faccid, in.Common.Appkey, u_map)
reply = &pb.UserRelationshipAddReply{} reply = &pb.UserRelationshipAddReply{}
return return
......
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