package service import ( "fmt" "log" "time" "app.yhyue.com/moapp/MessageCenter/entity" "app.yhyue.com/moapp/MessageCenter/rpc/message" ) // 类型的顺序 const order = "1,4" func SendMsg(this message.SendMsgRequest) (int64, string) { orm := entity.Engine.NewSession() defer orm.Close() err := orm.Begin() fmt.Println(err) count, _ := orm.Table("conversation").Where("user_id = ? or user_id = ?", this.ReceiveUserId, this.SendUserId).Count() if count < 1 { sql1 := `INSERT INTO conversation(appid,` + "`key`" + `,user_id,receive_id,receive_name,send_id,send_name,sort,createtime) values ('%s','','%s','%s','%s','%s','%s',0,'%s');` sql1 = fmt.Sprintf(sql1, this.Appid, this.SendUserId, this.ReceiveUserId, this.ReceiveName, this.SendUserId, this.SendName, time.Now().Format("2006-01-02 15:04:05")) //_, err = orm.Table("conversation").Insert(&conversation) _, err = orm.Exec(sql1) if err != nil { log.Panicln("会话创建失败:", err) orm.Rollback() return 0, "会话创建失败" } sql2 := `INSERT INTO conversation(appid,` + "`key`" + `,user_id,receive_id,receive_name,send_id,send_name,sort,createtime) values ('%s','','%s','%s','%s','%s','%s',0,'%s');` sql2 = fmt.Sprintf(sql2, this.Appid, this.ReceiveUserId, this.ReceiveUserId, this.ReceiveName, this.SendUserId, this.SendName, time.Now().Format("2006-01-02 15:04:05")) //_, err = orm.Table("conversation").Insert(&conversation) _, err = orm.Exec(sql2) if err != nil { log.Panicln("会话创建失败:", err) orm.Rollback() return 0, "会话创建失败" } } sql := `INSERT INTO message(appid,receive_userid,receive_name,send_userid,send_name,title,content,msg_type,link,cite_id,createtime,isRead,isdel) values ("%s",'%s','%s','%s','%s','%s','%s','%d','%s',0,'%s',0,1);` sql = fmt.Sprintf(sql, this.Appid,this.ReceiveUserId,this.ReceiveName, this.SendUserId, this.SendName,this.Title,this.Content,this.MsgType,this.Link, time.Now().Format("2006-01-02 15:04:05")) //_, err = orm.Table("conversation").Insert(&conversation) _, err = orm.Table("message").Exec(sql) if err != nil { log.Panicln("消息发送失败:", err) orm.Rollback() return 0, "消息发送失败" } orm.Commit() return 1, "消息发送成功" } func FindUserMsg(this message.FindUserMsgReq) message.FindUserMsgRes { orm := entity.Engine var messages []*entity.Message var err error var count int64 q := "" if this.MsgType != -1 { q += fmt.Sprintf(" and msg_type = %d", this.MsgType) } if this.Read != -1 { q += fmt.Sprintf(" and isRead = %d", this.Read) } count, err = orm.Table("message").Where("((receive_userid = ? and send_userid = ?) or (receive_userid = ? and send_userid = ?)) and isdel = ? and appid = ?"+q, this.UserId, this.ReceiveUserId, this.ReceiveUserId, this.UserId, 1, this.Appid).Count() data := message.FindUserMsgRes{} if count > 0 { err = orm.Table("message").Select("*").Where("((receive_userid = ? and send_userid = ?) or (receive_userid = ? and send_userid = ?)) and isdel = ? and appid = ?"+q, this.UserId, this.ReceiveUserId, this.ReceiveUserId, this.UserId, 1, this.Appid). OrderBy("createtime desc"). Limit(int(this.PageSize), (int(this.OffSet)-1)*int(this.PageSize)). Find(&messages) //log.Println("数据:", messages) for _, v := range messages { data.Data = append(data.Data, &message.Messages{ Id: int64(v.Id), Appid: v.AppId, ReceiveUserId: v.ReceiveUserid, ReceiveName: v.ReceiveName, SendUserId: v.SendUserid, SendName: v.SendName, Createtime: v.CreateTime.Format("2006-01-02 15:04:05"), Title: v.Title, MsgType: int64(v.MsgType), Link: v.Link, CiteId: int64(v.CiteId), Content: v.Content, IsRead: int64(v.IsRead), }) } } data.Count = count if err != nil { data.Code = 0 data.Message = "查询失败" } else { data.Code = 1 data.Message = "查询成功" } return data } // 指定分类未读消息合计 func ClassCountUnread(msgType int, userId string, appId string) (int64, string, int64) { orm := entity.Engine count, err := orm.Table("message").Where("msg_type=? and receive_userid=? and isdel=1 and appid=? and isRead=0", msgType, userId, appId).Count() // data, err := orm.Sql("explain select count(*) from message where msg_type = ? and receive_userid=? and isdel=1 and appid=?", msgType, userId, appId).QueryInterface() if err != nil { log.Println(err) return 0, "查询未读消息失败", 0 } //log.Println(count) return 1, "查询指定分类未读消息成功", count }