package controller import ( "net/http" "strings" req "xiawan/wx/api/req" "xiawan/wx/api/service" "xiawan/wx/api/vo" "log" "github.com/gin-gonic/gin" "github.com/gorilla/websocket" ) // AddMessageMgrApi 添加要发送的文本消息进入管理器 func AddMessageMgrApi(ctx *gin.Context) { reqModel := new(req.SendMessageModel) queryKey, isExist := ctx.GetQuery("key") if !isExist || strings.Trim(queryKey, "") == "" || strings.Trim(queryKey, "") == "null" { //确保每次都有Key ctx.JSON(http.StatusOK, vo.NewFailUUId("")) return } if !validateData(ctx, &reqModel) { return } result := service.AddMessageMgrService(queryKey, *reqModel) ctx.JSON(http.StatusOK, result) } var ( upgrader = websocket.Upgrader{ ReadBufferSize: 1024, WriteBufferSize: 1024, } ) // GetSyncMsgApi 同步消息,ws协议; 下面有【同步消息-HTTP-轮询方式】 // GetSyncMsgApi 处理同步消息的 API 请求。 // 它从请求中获取查询参数 "key",如果不存在或为空,则返回 400 错误和相应的错误信息。 // 如果 "key" 有效,则调用 WebSocketHandler 进行后续处理。 func GetSyncMsgApi(ctx *gin.Context) { queryKey, isExist := ctx.GetQuery("key") if !isExist || strings.Trim(queryKey, "") == "" || strings.Trim(queryKey, "") == "null" { ctx.JSON(http.StatusBadRequest, gin.H{ "error": "无效的key", }) return } service.WebSocketHandler(ctx, queryKey) return } // HttpSyncMsg 同步消息, HTTP-轮询方式 func HttpSyncMsg(ctx *gin.Context) { reqModel := new(req.SyncMessageModel) queryKey, isExist := ctx.GetQuery("key") if !isExist || strings.Trim(queryKey, "") == "" || strings.Trim(queryKey, "") == "null" { //确保每次都有Key ctx.JSON(http.StatusOK, vo.NewFailUUId(queryKey)) return } _ = ctx.ShouldBindJSON(&reqModel) if reqModel.Count < 0 { ctx.JSON(http.StatusOK, vo.NewFail("Count参数错误")) return } result := service.HttpSyncMsg(queryKey, reqModel.Count) ctx.JSON(http.StatusOK, result) } // SendImageMessageApi 发送图片消息 func SendImageMessageApi(ctx *gin.Context) { reqModel := new(req.SendMessageModel) queryKey, isExist := ctx.GetQuery("key") if !isExist || strings.Trim(queryKey, "") == "" || strings.Trim(queryKey, "") == "null" { //确保每次都有Key ctx.JSON(http.StatusOK, vo.NewFailUUId(queryKey)) return } if !validateData(ctx, &reqModel) { return } result := service.SendImageMessageService(queryKey, *reqModel) ctx.JSON(http.StatusOK, result) } // SendImageNewMessageApi 发送图片消息(New) func SendImageNewMessageApi(ctx *gin.Context) { reqModel := new(req.SendMessageModel) queryKey, isExist := ctx.GetQuery("key") if !isExist || strings.Trim(queryKey, "") == "" || strings.Trim(queryKey, "") == "null" { //确保每次都有Keys ctx.JSON(http.StatusOK, vo.NewFailUUId("")) return } if !validateData(ctx, &reqModel) { return } result := service.SendImageNewMessageService(queryKey, *reqModel) ctx.JSON(http.StatusOK, result) } // SendTextMessageApi 发送文本消息 func SendTextMessageApi(ctx *gin.Context) { reqModel := new(req.SendMessageModel) queryKey, isExist := ctx.GetQuery("key") if !isExist || strings.Trim(queryKey, "") == "" || strings.Trim(queryKey, "") == "null" { //确保每次都有Key ctx.JSON(http.StatusOK, vo.NewFailUUId("")) return } if !validateData(ctx, &reqModel) { return } result := service.SendTextMessageService(queryKey, *reqModel) ctx.JSON(http.StatusOK, result) } // ShareCardMessageApi 分享名片消息 func ShareCardMessageApi(ctx *gin.Context) { reqModel := new(req.ShareCardParam) queryKey, isExist := ctx.GetQuery("key") if !isExist || strings.Trim(queryKey, "") == "" || strings.Trim(queryKey, "") == "null" { //确保每次都有Key ctx.JSON(http.StatusOK, vo.NewFailUUId("")) return } if !validateData(ctx, &reqModel) { return } result := service.ShareCardMessageService(queryKey, *reqModel) ctx.JSON(http.StatusOK, result) } // SendTextMessageNoShow 不显示会话(不删聊天记录) func SendTextMessageNoShow(ctx *gin.Context) { reqModel := new(req.MessageNoShowParam) queryKey, isExist := ctx.GetQuery("key") if !isExist || strings.Trim(queryKey, "") == "" || strings.Trim(queryKey, "") == "null" { //确保每次都有Key ctx.JSON(http.StatusOK, vo.NewFailUUId("")) return } if !validateData(ctx, &reqModel) { return } result := service.SendTextMessageNoShowService(queryKey, *reqModel) ctx.JSON(http.StatusOK, result) } // ForwardImageMessageApi 转发图片 func ForwardImageMessageApi(ctx *gin.Context) { reqModel := new(req.ForwardMessageModel) queryKey, isExist := ctx.GetQuery("key") if !isExist || strings.Trim(queryKey, "") == "" || strings.Trim(queryKey, "") == "null" { //确保每次都有Key ctx.JSON(http.StatusOK, vo.NewFailUUId("")) return } if !validateData(ctx, &reqModel) { return } result := service.ForwardImageMessageService(queryKey, *reqModel) ctx.JSON(http.StatusOK, result) } // ForwardVideoMessageApi 转发视频 func ForwardVideoMessageApi(ctx *gin.Context) { reqModel := new(req.ForwardMessageModel) queryKey, isExist := ctx.GetQuery("key") if !isExist || strings.Trim(queryKey, "") == "" || strings.Trim(queryKey, "") == "null" { //确保每次都有Key ctx.JSON(http.StatusOK, vo.NewFailUUId("")) return } if !validateData(ctx, &reqModel) { return } result := service.ForwardVideoMessageService(queryKey, *reqModel) ctx.JSON(http.StatusOK, result) } // SendEmojiMessageApi 发送表情 func SendEmojiMessageApi(ctx *gin.Context) { reqModel := new(req.SendEmojiMessageModel) queryKey, isExist := ctx.GetQuery("key") if !isExist || strings.Trim(queryKey, "") == "" || strings.Trim(queryKey, "") == "null" { //确保每次都有Key ctx.JSON(http.StatusOK, vo.NewFailUUId("")) return } if !validateData(ctx, &reqModel) { return } result := service.SendEmojiMessageService(queryKey, *reqModel) ctx.JSON(http.StatusOK, result) } // ForwardEmojiApi 转发表情,包含动图 func ForwardEmojiApi(ctx *gin.Context) { reqModel := new(req.SendEmojiMessageModel) queryKey, isExist := ctx.GetQuery("key") if !isExist || strings.Trim(queryKey, "") == "" || strings.Trim(queryKey, "") == "null" { //确保每次都有Key ctx.JSON(http.StatusOK, vo.NewFailUUId("")) return } if !validateData(ctx, &reqModel) { return } result := service.ForwardEmojiService(queryKey, *reqModel) ctx.JSON(http.StatusOK, result) } // SendAppMessageApi 发送App消息 func SendAppMessageApi(ctx *gin.Context) { reqModel := new(req.AppMessageModel) queryKey, isExist := ctx.GetQuery("key") if !isExist || strings.Trim(queryKey, "") == "" || strings.Trim(queryKey, "") == "null" { //确保每次都有Key ctx.JSON(http.StatusOK, vo.NewFailUUId("")) return } if !validateData(ctx, &reqModel) { return } result := service.SendAppMessageService(queryKey, *reqModel) ctx.JSON(http.StatusOK, result) } // RevokeMsgApi 撤销消息 func RevokeMsgApi(ctx *gin.Context) { reqModel := new(req.RevokeMsgModel) queryKey, isExist := ctx.GetQuery("key") if !isExist || strings.Trim(queryKey, "") == "" || strings.Trim(queryKey, "") == "null" { //确保每次都有Key ctx.JSON(http.StatusOK, vo.NewFailUUId("")) return } if !validateData(ctx, &reqModel) { return } result := service.RevokeMsgService(queryKey, *reqModel) ctx.JSON(http.StatusOK, result) } // RevokeMsgNewApi 撤回消息(New) func RevokeMsgNewApi(ctx *gin.Context) { reqModel := new(req.RevokeMsgModel) queryKey, isExist := ctx.GetQuery("key") if !isExist || strings.Trim(queryKey, "") == "" || strings.Trim(queryKey, "") == "null" { //确保每次都有Key ctx.JSON(http.StatusOK, vo.NewFailUUId("")) return } if !validateData(ctx, &reqModel) { return } // 检查是否有ClientImgIdStr字段,如果有则是图片消息 if reqModel.ClientImgIdStr != "" { reqModel.IsImage = true log.Printf("尝试撤回图片消息: NewMsgId=%s, ClientMsgId=%d, CreateTime=%d, ClientImgIdStr=%s", reqModel.NewMsgId, reqModel.ClientMsgId, reqModel.CreateTime, reqModel.ClientImgIdStr) } result := service.RevokeMsgNewService(queryKey, *reqModel) ctx.JSON(http.StatusOK, result) } // UploadVoiceRequestApi 发送语音 func UploadVoiceRequestApi(ctx *gin.Context) { reqModel := new(req.SendUploadVoiceRequestModel) queryKey, isExist := ctx.GetQuery("key") if !isExist || strings.Trim(queryKey, "") == "" || strings.Trim(queryKey, "") == "null" { //确保每次都有Key ctx.JSON(http.StatusOK, vo.NewFailUUId("")) return } if !validateData(ctx, &reqModel) { return } result := service.UploadVoiceRequestService(queryKey, *reqModel) ctx.JSON(http.StatusOK, result) } // CdnUploadVideoRequestApi 上传视频 func CdnUploadVideoRequestApi(ctx *gin.Context) { reqModel := new(req.CdnUploadVideoRequest) queryKey, isExist := ctx.GetQuery("key") if !isExist || strings.Trim(queryKey, "") == "" || strings.Trim(queryKey, "") == "null" { //确保每次都有Key ctx.JSON(http.StatusOK, vo.NewFailUUId("")) return } if !validateData(ctx, &reqModel) { return } result := service.SendCdnUploadVideoRequestService(queryKey, *reqModel) ctx.JSON(http.StatusOK, result) } // SendCdnDownloadApi 下载 请求 func SendCdnDownloadApi(ctx *gin.Context) { reqModel := new(req.DownMediaModel) queryKey, isExist := ctx.GetQuery("key") if !isExist || strings.Trim(queryKey, "") == "" || strings.Trim(queryKey, "") == "null" { //确保每次都有Key ctx.JSON(http.StatusOK, vo.NewFailUUId("")) return } if !validateData(ctx, &reqModel) { return } result := service.SendCdnDownloadService(queryKey, *reqModel) ctx.JSON(http.StatusOK, result) } // GetMsgBigImgApi 获取图片(高清图片下载) func GetMsgBigImgApi(ctx *gin.Context) { reqModel := new(req.DownloadParam) queryKey, isExist := ctx.GetQuery("key") if !isExist || strings.Trim(queryKey, "") == "" || strings.Trim(queryKey, "") == "null" { //确保每次都有Key ctx.JSON(http.StatusOK, vo.NewFailUUId("")) return } if !validateData(ctx, &reqModel) { return } result := service.GetMsgBigImgService(queryKey, *reqModel) ctx.JSON(http.StatusOK, result) } // GetMsgVideoApi 获取视频(视频数据下载) func GetMsgVideoApi(ctx *gin.Context) { reqModel := new(req.DownloadParam) queryKey, isExist := ctx.GetQuery("key") if !isExist || strings.Trim(queryKey, "") == "" || strings.Trim(queryKey, "") == "null" { //确保每次都有Key ctx.JSON(http.StatusOK, vo.NewFailUUId("")) return } if !validateData(ctx, &reqModel) { return } result := service.GetMsgVideoService(queryKey, *reqModel) ctx.JSON(http.StatusOK, result) } // NewSyncHistoryMessageApi 同步历史消息 func NewSyncHistoryMessageApi(ctx *gin.Context) { queryKey, isExist := ctx.GetQuery("key") if !isExist || strings.Trim(queryKey, "") == "" || strings.Trim(queryKey, "") == "null" { //确保每次都有Key ctx.JSON(http.StatusOK, vo.NewFailUUId("")) return } result := service.NewSyncHistoryMessageService(queryKey) ctx.JSON(http.StatusOK, result) } // GroupMassMsgTextApi 群发接口 func GroupMassMsgTextApi(ctx *gin.Context) { reqModel := new(req.GroupMassMsgTextModel) queryKey, isExist := ctx.GetQuery("key") if !isExist || strings.Trim(queryKey, "") == "" || strings.Trim(queryKey, "") == "null" { //确保每次都有Key ctx.JSON(http.StatusOK, vo.NewFailUUId("")) return } if !validateData(ctx, &reqModel) { return } result := service.GroupMassMsgTextService(queryKey, *reqModel) ctx.JSON(http.StatusOK, result) } // GroupMassMsgImageApi 群发图片 func GroupMassMsgImageApi(ctx *gin.Context) { reqModel := new(req.GroupMassMsgImageModel) queryKey, isExist := ctx.GetQuery("key") if !isExist || strings.Trim(queryKey, "") == "" || strings.Trim(queryKey, "") == "null" { //确保每次都有Key ctx.JSON(http.StatusOK, vo.NewFailUUId("")) return } if !validateData(ctx, &reqModel) { return } result := service.GroupMassMsgImageService(queryKey, *reqModel) ctx.JSON(http.StatusOK, result) } // GetMsgVoiceApi 下载语音消息 func GetMsgVoiceApi(ctx *gin.Context) { reqModel := new(req.DownloadVoiceModel) queryKey, isExist := ctx.GetQuery("key") if !isExist || strings.Trim(queryKey, "") == "" || strings.Trim(queryKey, "") == "null" { //确保每次都有Key ctx.JSON(http.StatusOK, vo.NewFailUUId("")) return } if !validateData(ctx, &reqModel) { return } result := service.GetMsgVoiceService(queryKey, *reqModel) ctx.JSON(http.StatusOK, result) } // DownloadEmojiGifApi 下载表情 func DownloadEmojiGifApi(ctx *gin.Context) { reqModel := new(req.DownloadEmojiModel) queryKey, isExist := ctx.GetQuery("key") if !isExist || strings.Trim(queryKey, "") == "" || strings.Trim(queryKey, "") == "null" { //确保每次都有Key ctx.JSON(http.StatusOK, vo.NewFailUUId(queryKey)) return } if !validateData(ctx, &reqModel) { return } result := service.DownloadEmojiGifService(queryKey, *reqModel) ctx.JSON(http.StatusOK, result) } // UploadImageToCDNApi 纯CDN图片上传接口 func UploadImageToCDNApi(ctx *gin.Context) { reqModel := new(req.UploadImageToCDNModel) queryKey, isExist := ctx.GetQuery("key") if !isExist || strings.Trim(queryKey, "") == "" || strings.Trim(queryKey, "") == "null" { ctx.JSON(http.StatusOK, vo.NewFailUUId("")) return } if !validateData(ctx, &reqModel) { return } result := service.UploadImageToCDNService(queryKey, *reqModel) ctx.JSON(http.StatusOK, result) }