diff --git a/business/partner/purchase/im/im.go b/business/partner/purchase/im/im.go index d9ccdedcb..b7ad0cf4e 100644 --- a/business/partner/purchase/im/im.go +++ b/business/partner/purchase/im/im.go @@ -87,7 +87,7 @@ func Send(data []byte) { break } else { temp := string(msg) - if temp != HeartCheckSuccess { + if temp != HeartCheckSuccess || temp != "成功" { ReadMsgFromVendor(VendorIDMT, "", msg) } } @@ -221,9 +221,13 @@ func PushMsgByCid(vendorStoreID string, vendorID int) error { func SetMessageDetail(req *JXMsg, vendorID int, elmAppID string) error { //生成京西消息ID detail msgID := GenMsgDetailID(req, vendorID, elmAppID) - + err := rdb.Set("test", "可以插入数据sjdfoiqaj", ExpireTimeDay) + if err != nil { + globals.SugarLogger.Debugf("测试插入err:%v", err) + } data, _ := json.Marshal(req) - err := rdb.RPush(msgID, string(data)) + err = rdb.RPush(msgID, string(data)) + globals.SugarLogger.Debugf("im SetUserList err=%v", err) ok, err := rdb.ExpireResult(msgID, ExpireTimeDay) if err != nil || !ok { return err @@ -247,7 +251,12 @@ func SetUserList(jxMsg *JXMsg, userList *UserMessageList, vendorID int, elmAppID //存储当前数据 data, _ := json.Marshal(userList) err = rdb.RPush(msgID, string(data)) - + globals.SugarLogger.Debugf("im SetUserList msgID=%s", msgID) + globals.SugarLogger.Debugf("im SetUserList err=%v", err) + //test + str := rdb.Get(msgID) + globals.SugarLogger.Debugf("im SetUserList str=%v", str) + //over ok, err := rdb.ExpireResult(msgID, ExpireTimeDay) if err != nil || !ok { return err @@ -308,7 +317,8 @@ func GenMsgListID(jxMsg *JXMsg, vendorID int, elmAppID string) (msgID string) { } // GetImUserList 获取门店用户聊天列表 -func GetImUserList(req []RelInfo) (retVal []interface{}, err error) { +func GetImUserList(req []RelInfo) (map[string][]interface{}, error) { + retVal := make(map[string][]interface{}, 0) if len(req) == 0 { return nil, errors.New("msgID不允许为空") } @@ -318,14 +328,17 @@ func GetImUserList(req []RelInfo) (retVal []interface{}, err error) { keys = append(keys, key) } for _, j := range keys { - temp := rdb.Get(j) - retVal = append(retVal, temp) + temp := rdb.LRange(j) + for _, v := range temp { + retVal[j] = append(retVal[j], v) + } } - return retVal, err + return retVal, nil } // GetImChatDetail 获取门店用户聊天详情 -func GetImChatDetail(req []UserRelInfo) (retVal []interface{}, err error) { +func GetImChatDetail(req []UserRelInfo) (map[string][]interface{}, error) { + retVal := make(map[string][]interface{}, 0) if len(req) == 0 { return nil, errors.New("msgID不允许为空") } @@ -335,27 +348,43 @@ func GetImChatDetail(req []UserRelInfo) (retVal []interface{}, err error) { keys = append(keys, key) } for _, j := range keys { - temp := rdb.Get(j) - retVal = append(retVal, temp) + temp := rdb.LRange(j) + for _, v := range temp { + retVal[j] = append(retVal[j], v) + } } - return retVal, err + return retVal, nil } // SetJxMsgRead 设置jx消息已读 userID(美团:openUserID;饿了么:groupID) func SetJxMsgRead(appID, vendorStoreID, vendorID, userID string) error { - key := appID + ":" + vendorStoreID + ":" + vendorID + var ( + temp = UserMessageList{} + key = appID + ":" + vendorStoreID + ":" + vendorID + ) if n, err := rdb.Exists(key); n > 0 && err == nil { s2 := rdb.LRange(key) for i := 0; i < len(s2); i++ { v := UserMessageList{} _ = json.Unmarshal([]byte(s2[i]), &v) if v.UserID == userID { + //删除此条数据 err = rdb.LSet(key, i, "del") err = rdb.LRem(key, 0, "del") s2 = append(s2[:i], s2[i+1:]...) i-- + //cnt=0 重新赋值 + temp = UserMessageList{ + VendorID: v.VendorID, + UserID: v.UserID, + NewMessageNum: 0, + LatestMsg: v.LatestMsg, + LatestTime: v.LatestTime, + } } } + str, _ := json.Marshal(temp) + err = rdb.RPush(key, str) } return nil } diff --git a/business/partner/purchase/im/im_model.go b/business/partner/purchase/im/im_model.go index f7dc7b9de..a25892efe 100644 --- a/business/partner/purchase/im/im_model.go +++ b/business/partner/purchase/im/im_model.go @@ -6,6 +6,7 @@ import ( "fmt" "io" "log" + r "math/rand" "net" "net/http/httptest" "sync" @@ -284,3 +285,13 @@ func GenFullUrl() (fullUrl string) { //fmt.Printf("Create websocket connect failCount:%d", retVal.UserCount) return fullUrl } + +//生成随机字符串 +func RandString() string { + bytes := make([]byte, 16) + for i := 0; i < 16; i++ { + b := r.Intn(26) + 65 + bytes[i] = byte(b) + } + return string(bytes) +} diff --git a/business/partner/purchase/im/im_server.go b/business/partner/purchase/im/im_server.go index 1d2c5ffe4..a76db0e23 100644 --- a/business/partner/purchase/im/im_server.go +++ b/business/partner/purchase/im/im_server.go @@ -48,8 +48,13 @@ func Run(w http.ResponseWriter, r *http.Request) { //设置读取消息大小上线 conn.SetReadLimit(maxMessageSize) - //clientID := r.FormValue("clientId") - clientID := r.Header.Get("Clientid") + clientID := "" + if temp := r.Header.Get("Clientid"); len(temp) == 0 { + clientID = RandString() + } else { + clientID = temp + } + globals.SugarLogger.Debugf("Run clientID=%s", clientID) clientSocket := NewClient(clientID, conn) //读取客户端消息 @@ -94,6 +99,9 @@ func PingTimer() { for { i++ <-ticker.C + //对美团发送心跳 + Send([]byte(HeartCheckMsg)) + for clientId, conn := range Manager.AllClient() { if err := conn.Socket.WriteControl(websocket.PingMessage, []byte{}, time.Now().Add(time.Second)); err != nil { Manager.DisConnect <- conn @@ -102,7 +110,7 @@ func PingTimer() { if err := ConnRender(conn.Socket, renderData{ClientId: clientId}); err != nil { return } - globals.SugarLogger.Debugf("clientId=%s,i=%d", clientId, i) + globals.SugarLogger.Debugf("发送心跳 clientId=%s,i=%d", clientId, i) } } }() diff --git a/controllers/im.go b/controllers/im.go index 81180e512..862003efd 100644 --- a/controllers/im.go +++ b/controllers/im.go @@ -59,11 +59,11 @@ func (c *IMController) StartWebSocket() { // @Param payLoad formData string true "平台应用映射关系" // @Success 200 {object} controllers.CallResult // @Failure 200 {object} controllers.CallResult -// @router /GetIMUserList [get] -func (c *IMController) GetIMUserList() { - c.callGetIMUserList(func(params *tImGetIMUserListParams) (retVal interface{}, errCode string, err error) { +// @router /GetImUserList [get] +func (c *IMController) GetImUserList() { + c.callGetImUserList(func(params *tImGetImUserListParams) (retVal interface{}, errCode string, err error) { var relInfo []im.RelInfo - if err = json.Unmarshal([]byte(params.PayLoad), &relInfo); err != nil { + if err = json.Unmarshal([]byte(params.PayLoad), &relInfo); err == nil { retVal, err = im.GetImUserList(relInfo) } return retVal, "", err diff --git a/routers/commentsRouter_controllers.go b/routers/commentsRouter_controllers.go index 8be0ac30c..d9d7150a2 100644 --- a/routers/commentsRouter_controllers.go +++ b/routers/commentsRouter_controllers.go @@ -4344,8 +4344,8 @@ func init() { //im web.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:IMController"] = append(web.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:IMController"], web.ControllerComments{ - Method: "GetIMUserList", - Router: `/GetIMUserList`, + Method: "GetImUserList", + Router: `/GetImUserList`, AllowHTTPMethods: []string{"get"}, MethodParams: param.Make(), Filters: nil,