From 6525d63459a68a908b9fcbe1028f911c2e2ca5ae Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 9 Jun 2022 12:39:28 +0800 Subject: [PATCH] fix bug --- config/config.yaml | 5 +++ internal/demo/register/onboarding_process.go | 2 +- internal/msg_gateway/gate/logic.go | 2 +- internal/rpc/msg/send_msg.go | 24 ++++++++++++- internal/rpc/organization/organization.go | 5 ++- pkg/common/config/config.go | 12 ++++--- pkg/common/constant/constant.go | 35 ++++++++++--------- pkg/common/constant/error.go | 13 +++---- .../im_mysql_model/organization_model.go | 17 ++++++--- 9 files changed, 79 insertions(+), 36 deletions(-) diff --git a/config/config.yaml b/config/config.yaml index 628192e4f..29b4174d8 100644 --- a/config/config.yaml +++ b/config/config.yaml @@ -230,6 +230,11 @@ chatpersistencemysql: true reliablestorage: false #消息缓存时间 msgCacheTimeout: 1800 +#群聊已读开启 +groupMessageHasReadReceiptEnable: false +#单聊已读开启 +singleMessageHasReadReceiptEnable: false + #token config tokenpolicy: diff --git a/internal/demo/register/onboarding_process.go b/internal/demo/register/onboarding_process.go index 6f3f0b15f..501d49813 100644 --- a/internal/demo/register/onboarding_process.go +++ b/internal/demo/register/onboarding_process.go @@ -181,7 +181,7 @@ func onboardingProcessNotification(operationID, userID, groupID string) { Content: content, MsgFrom: constant.UserMsgType, ContentType: constant.Text, - SessionType: constant.SingleChatType, + SessionType: constant.GroupChatType, OperationID: operationID, } // notification user join group diff --git a/internal/msg_gateway/gate/logic.go b/internal/msg_gateway/gate/logic.go index 7ce2d65ba..b46abee7c 100644 --- a/internal/msg_gateway/gate/logic.go +++ b/internal/msg_gateway/gate/logic.go @@ -210,7 +210,7 @@ func (ws *WServer) sendMsgResp(conn *UserConn, m *Req, pb *pbChat.SendMsgResp) { } func (ws *WServer) sendSignalMsgReq(conn *UserConn, m *Req) { - log.NewInfo(m.OperationID, "Ws call success to sendSignalMsgReq start", m.MsgIncr, m.ReqIdentifier, m.SendID, m.Data) + log.NewInfo(m.OperationID, "Ws call success to sendSignalMsgReq start", m.MsgIncr, m.ReqIdentifier, m.SendID, string(m.Data)) nReply := new(pbChat.SendMsgResp) isPass, errCode, errMsg, pData := ws.argsValidate(m, constant.WSSendSignalMsg) if isPass { diff --git a/internal/rpc/msg/send_msg.go b/internal/rpc/msg/send_msg.go index ca355abc4..fe9b0360d 100644 --- a/internal/rpc/msg/send_msg.go +++ b/internal/rpc/msg/send_msg.go @@ -49,6 +49,24 @@ type MsgCallBackResp struct { } } +func isMessageHasReadEnabled(pb *pbChat.SendMsgReq) (bool, int32, string) { + switch pb.MsgData.ContentType { + case constant.HasReadReceipt: + if config.Config.SingleMessageHasReadReceiptEnable { + return true, 0, "" + } else { + return false, constant.ErrMessageHasReadDisable.ErrCode, constant.ErrMessageHasReadDisable.ErrMsg + } + case constant.GroupHasReadReceipt: + if config.Config.GroupMessageHasReadReceiptEnable { + return true, 0, "" + } else { + return false, constant.ErrMessageHasReadDisable.ErrCode, constant.ErrMessageHasReadDisable.ErrMsg + } + } + return true, 0, "" +} + func userRelationshipVerification(data *pbChat.SendMsgReq) (bool, int32, string) { if data.MsgData.SessionType == constant.SingleChatType { if utils.IsContain(data.MsgData.SendID, config.Config.Manager.AppManagerUid) { @@ -150,7 +168,11 @@ func (rpc *rpcChat) SendMsg(_ context.Context, pb *pbChat.SendMsgReq) (*pbChat.S replay := pbChat.SendMsgResp{} newTime := db.GetCurrentTimestampByMill() log.NewWarn(pb.OperationID, "rpc sendMsg come here", pb.String(), pb.MsgData.ClientMsgID) - flag, errCode, errMsg := userRelationshipVerification(pb) + flag, errCode, errMsg := isMessageHasReadEnabled(pb) + if !flag { + return returnMsg(&replay, pb, errCode, errMsg, "", 0) + } + flag, errCode, errMsg = userRelationshipVerification(pb) if !flag { return returnMsg(&replay, pb, errCode, errMsg, "", 0) } diff --git a/internal/rpc/organization/organization.go b/internal/rpc/organization/organization.go index 5594e760c..7b3624257 100644 --- a/internal/rpc/organization/organization.go +++ b/internal/rpc/organization/organization.go @@ -102,7 +102,7 @@ func (s *organizationServer) CreateDepartment(ctx context.Context, req *rpc.Crea log.Error(req.OperationID, errMsg) return &rpc.CreateDepartmentResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: errMsg}, nil } - err, createdDepartment := imdb.GetDepartment(department.DepartmentID) + createdDepartment, err := imdb.GetDepartment(department.DepartmentID) if err != nil { errMsg := req.OperationID + " " + "GetDepartment failed " + err.Error() + department.DepartmentID log.Error(req.OperationID, errMsg) @@ -141,6 +141,9 @@ func (s *organizationServer) CreateDepartment(ctx context.Context, req *rpc.Crea resp.ErrMsg = constant.ErrDB.ErrMsg + " createGroup failed " + createGroupResp.ErrMsg return resp, nil } + if err := imdb.SetDepartmentRelatedGroupID(createGroupResp.GroupInfo.GroupID, department.DepartmentID); err != nil { + log.NewError(req.OperationID, utils.GetSelfFuncName(), "SetDepartmentRelatedGroupID failed", err.Error()) + } return resp, nil } diff --git a/pkg/common/config/config.go b/pkg/common/config/config.go index 8250199a7..dff8a693e 100644 --- a/pkg/common/config/config.go +++ b/pkg/common/config/config.go @@ -214,11 +214,13 @@ type config struct { MsgToPush string `yaml:"msgToPush"` } } - Secret string `yaml:"secret"` - MultiLoginPolicy int `yaml:"multiloginpolicy"` - ChatPersistenceMysql bool `yaml:"chatpersistencemysql"` - ReliableStorage bool `yaml:"reliablestorage"` - MsgCacheTimeout int `yaml:"msgCacheTimeout"` + Secret string `yaml:"secret"` + MultiLoginPolicy int `yaml:"multiloginpolicy"` + ChatPersistenceMysql bool `yaml:"chatpersistencemysql"` + ReliableStorage bool `yaml:"reliablestorage"` + MsgCacheTimeout int `yaml:"msgCacheTimeout"` + GroupMessageHasReadReceiptEnable bool `yaml:"groupMessageHasReadReceiptEnable"` + SingleMessageHasReadReceiptEnable bool `yaml:"singleMessageHasReadReceiptEnable"` TokenPolicy struct { AccessSecret string `yaml:"accessSecret"` diff --git a/pkg/common/constant/constant.go b/pkg/common/constant/constant.go index bae1f15b9..fe7dbc9f5 100644 --- a/pkg/common/constant/constant.go +++ b/pkg/common/constant/constant.go @@ -28,23 +28,24 @@ const ( ///ContentType //UserRelated - Text = 101 - Picture = 102 - Voice = 103 - Video = 104 - File = 105 - AtText = 106 - Merger = 107 - Card = 108 - Location = 109 - Custom = 110 - Revoke = 111 - HasReadReceipt = 112 - Typing = 113 - Quote = 114 - Common = 200 - GroupMsg = 201 - SignalMsg = 202 + Text = 101 + Picture = 102 + Voice = 103 + Video = 104 + File = 105 + AtText = 106 + Merger = 107 + Card = 108 + Location = 109 + Custom = 110 + Revoke = 111 + HasReadReceipt = 112 + Typing = 113 + Quote = 114 + GroupHasReadReceipt = 116 + Common = 200 + GroupMsg = 201 + SignalMsg = 202 //SysRelated NotificationBegin = 1000 diff --git a/pkg/common/constant/error.go b/pkg/common/constant/error.go index b0c28725e..52c1253e1 100644 --- a/pkg/common/constant/error.go +++ b/pkg/common/constant/error.go @@ -49,12 +49,13 @@ var ( ErrTokenUnknown = ErrInfo{705, TokenUnknownMsg.Error()} ErrTokenKicked = ErrInfo{706, TokenUserKickedMsg.Error()} - ErrAccess = ErrInfo{ErrCode: 801, ErrMsg: AccessMsg.Error()} - ErrDB = ErrInfo{ErrCode: 802, ErrMsg: DBMsg.Error()} - ErrArgs = ErrInfo{ErrCode: 803, ErrMsg: ArgsMsg.Error()} - ErrStatus = ErrInfo{ErrCode: 804, ErrMsg: StatusMsg.Error()} - ErrCallback = ErrInfo{ErrCode: 809, ErrMsg: CallBackMsg.Error()} - ErrSendLimit = ErrInfo{ErrCode: 810, ErrMsg: "send msg limit, to many request, try again later"} + ErrAccess = ErrInfo{ErrCode: 801, ErrMsg: AccessMsg.Error()} + ErrDB = ErrInfo{ErrCode: 802, ErrMsg: DBMsg.Error()} + ErrArgs = ErrInfo{ErrCode: 803, ErrMsg: ArgsMsg.Error()} + ErrStatus = ErrInfo{ErrCode: 804, ErrMsg: StatusMsg.Error()} + ErrCallback = ErrInfo{ErrCode: 809, ErrMsg: CallBackMsg.Error()} + ErrSendLimit = ErrInfo{ErrCode: 810, ErrMsg: "send msg limit, to many request, try again later"} + ErrMessageHasReadDisable = ErrInfo{ErrCode: 811, ErrMsg: "message has read disable"} ) var ( diff --git a/pkg/common/db/mysql_model/im_mysql_model/organization_model.go b/pkg/common/db/mysql_model/im_mysql_model/organization_model.go index fb7a0ab18..7d8a7a2fd 100644 --- a/pkg/common/db/mysql_model/im_mysql_model/organization_model.go +++ b/pkg/common/db/mysql_model/im_mysql_model/organization_model.go @@ -16,14 +16,14 @@ func CreateDepartment(department *db.Department) error { return dbConn.Table("departments").Create(department).Error } -func GetDepartment(departmentID string) (error, *db.Department) { +func GetDepartment(departmentID string) (*db.Department, error) { dbConn, err := db.DB.MysqlDB.DefaultGormDB() if err != nil { - return err, nil + return nil, err } var department db.Department err = dbConn.Table("departments").Where("department_id=?", departmentID).Find(&department).Error - return err, &department + return &department, err } func UpdateDepartment(department *db.Department, args map[string]interface{}) error { @@ -237,6 +237,15 @@ func GetSubDepartmentNum(departmentID string) (error, uint32) { return nil, number } +func SetDepartmentRelatedGroupID(groupID, departmentID string) error { + dbConn, err := db.DB.MysqlDB.DefaultGormDB() + if err != nil { + return utils.Wrap(err, "DefaultGormDB failed") + } + department := &db.Department{RelatedGroupID: groupID} + return dbConn.Model(&department).Where("department_id=?", departmentID).Update(department).Error +} + func GetDepartmentRelatedGroupIDList(departmentIDList []string) ([]string, error) { dbConn, err := db.DB.MysqlDB.DefaultGormDB() if err != nil { @@ -257,7 +266,7 @@ func getDepartmentParent(departmentID string, dbConn *gorm.DB) (*db.Department, return nil, utils.Wrap(err, "") } err = dbConn.Model(&parentDepartment).Where("department_id = ?", department.ParentID).Find(&parentDepartment).Error - return &department, err + return &parentDepartment, utils.Wrap(err, "") } func GetDepartmentParent(departmentID string, dbConn *gorm.DB, parentIDList *[]string) error {