Commit 7b3f643c by Li Feifei

优化代码

parents faf23f43 e66cefc2
...@@ -57,7 +57,7 @@ func newMysqlClient() { ...@@ -57,7 +57,7 @@ func newMysqlClient() {
return return
} }
orm.RegisterModel(new(CompanyApp), new(ImBase), new(ImChatRoom), orm.RegisterModel(new(CompanyApp), new(ImBase), new(ImChatRoom),
new(ImUserRelationship), new(ImUser), new(ImFriendRequest),new(ImChatRoomUser)) new(ImUserRelationship), new(ImUser), new(ImFriendRequest), new(ImChatRoomUser), new(ImUserLogin))
orm.Debug = true orm.Debug = true
MysqlClient = orm.NewOrm() MysqlClient = orm.NewOrm()
beeLogger.Log.Success("MySQL connect success") beeLogger.Log.Success("MySQL connect success")
......
...@@ -60,9 +60,6 @@ type ImUser struct { ...@@ -60,9 +60,6 @@ type ImUser struct {
MuteAudioVideo int64 MuteAudioVideo int64
Ext string Ext string
Createtime string Createtime string
Updatetime string
LoginStatus int64
Platform string
Edition string Edition string
} }
...@@ -74,3 +71,11 @@ type ImFriendRequest struct { ...@@ -74,3 +71,11 @@ type ImFriendRequest struct {
Createtime string Createtime string
Updatetime string Updatetime string
} }
type ImUserLogin struct {
Id int64
UserId int64
LoginStatus int64
Updatetime string
Platform string
}
...@@ -7,9 +7,11 @@ import ( ...@@ -7,9 +7,11 @@ import (
"im-microservice/pb" "im-microservice/pb"
"im-microservice/sevice/health" "im-microservice/sevice/health"
"im-microservice/sevice/im_chat_room" "im-microservice/sevice/im_chat_room"
"im-microservice/sevice/im_friend_request"
//"im-microservice/sevice/im_chat_room_user" //"im-microservice/sevice/im_chat_room_user"
ic "im-microservice/sevice/im_configure" ic "im-microservice/sevice/im_configure"
"im-microservice/sevice/im_friend_request"
"im-microservice/sevice/im_user" "im-microservice/sevice/im_user"
iur "im-microservice/sevice/im_user_relationship" iur "im-microservice/sevice/im_user_relationship"
...@@ -17,7 +19,6 @@ import ( ...@@ -17,7 +19,6 @@ import (
grpc_zap "github.com/grpc-ecosystem/go-grpc-middleware/logging/zap" grpc_zap "github.com/grpc-ecosystem/go-grpc-middleware/logging/zap"
grpc_recovery "github.com/grpc-ecosystem/go-grpc-middleware/recovery" grpc_recovery "github.com/grpc-ecosystem/go-grpc-middleware/recovery"
grpc_validator "github.com/grpc-ecosystem/go-grpc-middleware/validator" grpc_validator "github.com/grpc-ecosystem/go-grpc-middleware/validator"
"google.golang.org/grpc" "google.golang.org/grpc"
"google.golang.org/grpc/keepalive" "google.golang.org/grpc/keepalive"
"google.golang.org/grpc/reflection" "google.golang.org/grpc/reflection"
......
package im_chat_room_user
import (
"errors"
"im-microservice/db"
"im-microservice/helper"
"im-microservice/pb"
"github.com/astaxie/beego/orm"
"google.golang.org/grpc/status"
)
const (
cr_table_name = "im_chat_room_user"
)
//查询房间管理员
func GetChatRoomUserOper(room_id int64, operator string) (db.ImChatRoomUser, error) {
var r_user db.ImChatRoomUser
err := db.MysqlClient.QueryTable(cr_table_name).Filter("room_id", room_id).Filter("operator", operator).One(&r_user)
if err != nil {
return r_user, err
}
return r_user, nil
}
//查询房间用户信息
func GetChatRoomUser(room_id int64, accid string) (db.ImChatRoomUser, error) {
var r_user db.ImChatRoomUser
err := db.MysqlClient.QueryTable(cr_table_name).Filter("room_id", room_id).Filter("accid", accid).One(&r_user)
if err != nil {
return r_user, err
}
return r_user, nil
}
//添加用户
func AddChatRoomUser(room_id int64, accid string, oper bool) (db.ImChatRoomUser, error) {
var r_user db.ImChatRoomUser
r_user.RoomId = room_id
r_user.Accid = accid
r_user.Role = 2
r_user.Createtime = helper.GetNowTime()
if oper == true {
r_user.Operator = accid
r_user.Role = 1
}
_, err := db.MysqlClient.Insert(&r_user)
if err != nil {
return r_user, err
}
return r_user, nil
}
//设置用户
func SetChatRoomUser(room_id int64, accid string, role int64) (db.ImChatRoomUser, error) {
var r_user db.ImChatRoomUser
orm_params := make(orm.Params)
orm_params["role"] = role
orm_params["updatetime"] = helper.GetNowTime()
res, err := db.MysqlClient.QueryTable(cr_table_name).Filter("room_id", room_id).Filter("accid", accid).Update(orm_params)
if res != 1 {
err = errors.New("没有查询到任何数据")
return r_user, err
}
r_user, _ = GetChatRoomUser(room_id, accid)
return r_user, nil
}
//获取房间用户列表
func GetChatRoomUserList(request *pb.RoomUserListRequest) (results map[string]interface{}, err error) {
var (
page = request.GetPage()
room_id = request.GetRoomId()
role = request.GetRole()
accid = request.GetAccid()
)
if page == 0 {
page = 1
}
count_db := db.MysqlClient.QueryTable(cr_table_name)
count_db = count_db.Filter("room_id", room_id)
if role != 0 {
count_db = count_db.Filter("role", role)
}
if accid != "" {
count_db = count_db.Filter("accid", accid)
}
ctn, err := count_db.Count()
if err != nil {
return
}
if ctn == 0 {
err = errors.New("没有查询到任何数据")
return
}
//获取
offset, total_page := helper.Paginate(ctn, 20, page)
// 查询数据
var c_user []db.ImChatRoomUser
if _, err = count_db.Limit(20, offset).All(&c_user); err != nil {
return
}
results = make(map[string]interface{})
results["list"] = c_user
results["total_page"] = total_page
results["total_count"] = ctn
results["page"] = page
results["page_size"] = 20
return
}
//删除用户
func DelChatRoomUser(room_id int64, accid string) error {
_, err := db.MysqlClient.QueryTable(cr_table_name).Filter("room_id", room_id).Filter("accid", accid).Delete()
if err != nil {
err = status.Error(500, err.Error())
}
return err
}
package im_chat_room_user
import (
"context"
"im-microservice/db"
"im-microservice/helper"
"im-microservice/pb"
"google.golang.org/grpc/status"
)
type ChatRoomUserServer struct {
pb.UnimplementedChatRoomUserServer
}
type RoomUserOperator struct {
RoomId int64 `validate:"required"`
Operator string `validate:"required"`
}
type ChatRoomUser struct {
RoomId int64 `validate:"required"`
Accid string `validate:"required"`
}
type ChatRoomUserRole struct {
RoomId int64 `validate:"required"`
Operator string `validate:"required"`
Accid string `validate:"required"`
Role int64 `validate:"required,numeric"`
}
//添加管理员
func (c *ChatRoomUserServer) AddOperator(ctx context.Context, in *pb.RoomUserAddOpeRequest) (reply *pb.RoomUserReply, err error) {
roomUserOperator := &RoomUserOperator{
RoomId: in.GetRoomId(),
Operator: in.GetOperator(),
}
//验证参数
if err = helper.Valiator(roomUserOperator); err != nil {
return
}
//查询房间是否已经添加过了
if r_user, _ := GetChatRoomUserOper(roomUserOperator.RoomId, roomUserOperator.Operator); r_user.Operator != "" {
err = status.Error(20438, "该聊天室已存在管理员")
return
}
//添加管理员
r_user, err := AddChatRoomUser(roomUserOperator.RoomId, roomUserOperator.Operator, true)
if err != nil {
err = status.Error(500, "添加管理员失败")
return
}
reply = &pb.RoomUserReply{}
reply.RoomId = r_user.RoomId
reply.Operator = r_user.Operator
reply.Accid = r_user.Accid
reply.Role = r_user.Role
return
}
//添加普通用户
func (c *ChatRoomUserServer) ChatRoomUserAdd(ctx context.Context, in *pb.RoomUserAddRequest) (reply *pb.RoomUserReply, err error) {
chatRoomUser := &ChatRoomUser{
RoomId: in.GetRoomId(),
Accid: in.GetAccid(),
}
//验证参数
if err = helper.Valiator(chatRoomUser); err != nil {
return
}
//查询是否已经有了
if r_user, _ := GetChatRoomUser(chatRoomUser.RoomId, chatRoomUser.Accid); r_user.Accid != "" {
err = status.Error(20438, "聊天室已存在该用户")
return
}
//添加用户
r_user, err := AddChatRoomUser(chatRoomUser.RoomId, chatRoomUser.Accid, false)
if err != nil {
err = status.Error(500, "聊天室添加用户失败")
return
}
reply = &pb.RoomUserReply{}
reply.RoomId = r_user.RoomId
reply.Accid = r_user.Accid
reply.Role = r_user.Role
return
}
//设置用户角色
func (c *ChatRoomUserServer) ChatRoomUserSetRole(ctx context.Context, in *pb.RoomUserSetRoleRequest) (reply *pb.RoomUserReply, err error) {
setRole := &ChatRoomUserRole{
RoomId: in.GetRoomId(),
Operator: in.GetOperator(),
Accid: in.GetAccid(),
Role: in.GetRole(),
}
if err = helper.Valiator(setRole); err != nil {
return
}
if setRole.Role > 4 || setRole.Role < 1 {
err = status.Error(401, "聊天权限超出异常")
return
}
//查看是否该房间操作者
_, err = GetChatRoomUserOper(setRole.RoomId, setRole.Operator)
if err != nil {
err = status.Error(403, "不是该聊天室操作者")
return
}
//查询该用户是否存在
_, err = GetChatRoomUser(setRole.RoomId, setRole.Accid)
if err != nil {
err = status.Error(404, "不是该聊天室用户")
return
}
//设置权限
r_user, err := SetChatRoomUser(setRole.RoomId, setRole.Accid, setRole.Role)
if err != nil {
return
}
reply = &pb.RoomUserReply{}
reply.RoomId = r_user.RoomId
reply.Operator = r_user.Operator
reply.Accid = r_user.Accid
reply.Role = r_user.Role
return
}
//获取单个用户
func (c *ChatRoomUserServer) ChatRoomUserOne(ctx context.Context, in *pb.RoomUserOneRequest) (reply *pb.RoomUserOneReply, err error) {
chatRoomUser := &ChatRoomUser{
RoomId: in.GetRoomId(),
Accid: in.GetAccid(),
}
//验证参数
if err = helper.Valiator(chatRoomUser); err != nil {
return
}
c_user, err := GetChatRoomUser(chatRoomUser.RoomId, chatRoomUser.Accid)
if err != nil {
return
}
reply = &pb.RoomUserOneReply{}
reply = getOneData(c_user)
return
}
func getOneData(c_user db.ImChatRoomUser) *pb.RoomUserOneReply {
return &pb.RoomUserOneReply{
Id: int64(c_user.Id),
RoomId: int64(c_user.RoomId),
Operator: c_user.Operator,
Accid: c_user.Accid,
Role: c_user.Role,
Createtime: c_user.Createtime,
Updatetime: c_user.Updatetime,
}
}
//获取房间用户列表
func (c *ChatRoomUserServer) ChatRoomUserList(ctx context.Context, in *pb.RoomUserListRequest) (reply *pb.RoomUserListReply, err error) {
results, err := GetChatRoomUserList(in)
if err != nil {
return
}
reply = &pb.RoomUserListReply{Paginate: &pb.Page{}}
c_user_list := results["list"].([]db.ImChatRoomUser)
for _, v := range c_user_list {
reply.List = append(reply.List, getOneData(v))
}
reply.Paginate.PageSize = int64(results["page_size"].(int))
reply.Paginate.PagetNo = results["page"].(int64)
reply.Paginate.TotalCount = results["total_count"].(int64)
reply.Paginate.TotalPage = results["total_page"].(int64)
return
}
//删除
func (c *ChatRoomUserServer) ChatRoomUserDel(ctx context.Context, in *pb.RoomUserOneRequest) (reply *pb.RoomUserDelReply, err error) {
delRoomUser := &ChatRoomUser{
RoomId: in.GetRoomId(),
Accid: in.GetAccid(),
}
if err = DelChatRoomUser(delRoomUser.RoomId, delRoomUser.Accid); err != nil {
return
}
reply = &pb.RoomUserDelReply{}
return
}
...@@ -14,19 +14,20 @@ type ImUserServer struct { ...@@ -14,19 +14,20 @@ type ImUserServer struct {
} }
type ImUser struct { type ImUser struct {
Name string `validate:"required"` Name string
Mobile string `validate:"required,numeric,len=11"` Mobile string
Code string `validate:"required"` Code string
Platform string `validate:"required"` Platform string
} }
type ImUserSet struct { type ImUserSet struct {
Accid string `validate:"required"` Accid string
Mute bool `validate:"required"` Mute bool
} }
type ImUserQ struct { type ImUserQ struct {
Accid string `validate:"required"` Accid string
Platform string
} }
//注册 //注册
...@@ -35,7 +36,6 @@ func (u *ImUserServer) ImUserRegister(ctx context.Context, in *pb.ImUserRequest) ...@@ -35,7 +36,6 @@ func (u *ImUserServer) ImUserRegister(ctx context.Context, in *pb.ImUserRequest)
Name: in.GetName(), Name: in.GetName(),
Mobile: in.GetMobile(), Mobile: in.GetMobile(),
Code: in.GetCode(), Code: in.GetCode(),
Platform: in.GetPlatform(),
} }
// 参数验证是否合法 // 参数验证是否合法
...@@ -78,21 +78,22 @@ func (u *ImUserServer) ImUserLogin(ctx context.Context, in *pb.ImUserRequest) (r ...@@ -78,21 +78,22 @@ func (u *ImUserServer) ImUserLogin(ctx context.Context, in *pb.ImUserRequest) (r
Platform: in.GetPlatform(), Platform: in.GetPlatform(),
} }
// 参数验证是否合法 // // 参数验证是否合法
if err = helper.Valiator(imUser); err != nil { // if err = helper.Valiator(imUser); err != nil {
return // return
} // }
// 从redis获取短信验证码 // // 从redis获取短信验证码
cache_code, err := helper.GetCode(imUser.Mobile) // cache_code, err := helper.GetCode(imUser.Mobile)
if err != nil { // if err != nil {
return // return
} // }
//对比验证码
if cache_code != imUser.Code { // //对比验证码
err = status.Error(302, "验证码不匹配") // if cache_code != imUser.Code {
return // err = status.Error(302, "验证码不匹配")
} // return
// }
reply = &pb.ImUserReply{} reply = &pb.ImUserReply{}
c_user, _ := GetImUserByMobile(imUser.Mobile) c_user, _ := GetImUserByMobile(imUser.Mobile)
if c_user.Accid == "" { if c_user.Accid == "" {
...@@ -100,10 +101,12 @@ func (u *ImUserServer) ImUserLogin(ctx context.Context, in *pb.ImUserRequest) (r ...@@ -100,10 +101,12 @@ func (u *ImUserServer) ImUserLogin(ctx context.Context, in *pb.ImUserRequest) (r
return return
} }
//更新用户登录时间 //更新用户登录时间
if res, _ := SaveUpdatetime(imUser.Mobile, imUser.Platform); res != 1 { _, err = LoginHandle(c_user.Id, imUser.Platform)
err = status.Error(500, "用户登录时间更新失败") if err != nil {
//err = status.Error(500, "用户登录时间更新失败")
return return
} }
reply.Accid = c_user.Accid reply.Accid = c_user.Accid
return return
} }
...@@ -112,19 +115,24 @@ func (u *ImUserServer) ImUserLogin(ctx context.Context, in *pb.ImUserRequest) (r ...@@ -112,19 +115,24 @@ func (u *ImUserServer) ImUserLogin(ctx context.Context, in *pb.ImUserRequest) (r
func (u *ImUserServer) ImUserLoginOut(ctx context.Context, in *pb.ImUserOutRequest) (reply *pb.ImUserSetReply, err error) { func (u *ImUserServer) ImUserLoginOut(ctx context.Context, in *pb.ImUserOutRequest) (reply *pb.ImUserSetReply, err error) {
imUserOut := &ImUserQ{ imUserOut := &ImUserQ{
Accid: in.GetAccid(), Accid: in.GetAccid(),
Platform: in.GetPlatform(),
} }
// 参数验证是否合法 // 参数验证是否合法
if err = helper.Valiator(imUserOut); err != nil { if err = helper.Valiator(imUserOut); err != nil {
return return
} }
m := make(map[string]interface{})
m["login_status"] = 0 reply = &pb.ImUserSetReply{}
if res, _ := UpdateImUser(imUserOut.Accid, m); res != 1 { c_user, _ := GetImUserByAccid(imUserOut.Accid)
err = status.Error(500, "用户更改登录状态信息失败") if c_user.Accid == "" {
err = status.Error(404, "用户不存在")
return return
} }
reply = &pb.ImUserSetReply{} _, err = LoginOutHandle(c_user.Id, imUserOut.Platform)
if err != nil {
return return
}
return reply, nil
} }
//用户禁言 //用户禁言
...@@ -189,9 +197,6 @@ func getImUser(imuser db.ImUser) *pb.ImUserOneReply { ...@@ -189,9 +197,6 @@ func getImUser(imuser db.ImUser) *pb.ImUserOneReply {
MuteAudioVideo: int64(imuser.MuteAudioVideo), MuteAudioVideo: int64(imuser.MuteAudioVideo),
Ext: imuser.Ext, Ext: imuser.Ext,
Createtime: imuser.Createtime, Createtime: imuser.Createtime,
Updatetime: imuser.Updatetime,
LoginStatus: int64(imuser.LoginStatus),
Platform: imuser.Platform,
Edition: imuser.Edition, Edition: imuser.Edition,
} }
} }
......
...@@ -60,20 +60,6 @@ func CreateImUser(name string, mobile string) (db.ImUser, error) { ...@@ -60,20 +60,6 @@ func CreateImUser(name string, mobile string) (db.ImUser, error) {
return c_user, nil return c_user, nil
} }
//用户登录更新登录信息
func SaveUpdatetime(mobile string, platform string) (int64, error) {
updatetime := helper.GetNowTime()
orm_params := make(orm.Params)
orm_params["login_status"] = 1
orm_params["updatetime"] = updatetime
orm_params["platform"] = platform
res, err := db.MysqlClient.QueryTable(u_table_name).Filter("mobile", mobile).Update(orm_params)
if err != nil {
return 0, err
}
return res, nil
}
//修改用户信息 //修改用户信息
func UpdateImUser(accid string, m map[string]interface{}) (int64, error) { func UpdateImUser(accid string, m map[string]interface{}) (int64, error) {
orm_params := make(orm.Params) orm_params := make(orm.Params)
......
package im_user
import (
//"fmt"
//"errors"
"im-microservice/db"
"im-microservice/helper"
//"im-microservice/pb"
"github.com/astaxie/beego/orm"
"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) {
//查询该设备平台是否已经存在数据
log_user, err := GetLogin(user_id, platform)
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
}
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