package api import ( "strconv" "github.com/flipped-aurora/gin-vue-admin/server/global" "github.com/flipped-aurora/gin-vue-admin/server/model/common/response" "github.com/flipped-aurora/gin-vue-admin/server/plugin/wechat-integration/model/request" wechatResponse "github.com/flipped-aurora/gin-vue-admin/server/plugin/wechat-integration/model/response" "github.com/flipped-aurora/gin-vue-admin/server/plugin/wechat-integration/service" "github.com/gin-gonic/gin" "go.uber.org/zap" ) type MpMessageApi struct{} var mpMessageService = service.ServiceGroupApp.MpMessageService // GetMessageList 获取消息列表 // @Tags MpMessage // @Summary 获取消息列表 // @Description 获取公众号消息记录列表 // @Accept json // @Produce json // @Param page query int false "页码" // @Param pageSize query int false "每页数量" // @Param msgType query string false "消息类型" // @Param openid query string false "用户openid" // @Success 200 {object} response.Response{data=response.PageResult} "获取成功" // @Router /wechat/mp/messages [get] func (m *MpMessageApi) GetMessageList(c *gin.Context) { page, _ := strconv.Atoi(c.DefaultQuery("page", "1")) pageSize, _ := strconv.Atoi(c.DefaultQuery("pageSize", "10")) msgType := c.Query("msgType") openid := c.Query("openid") if page <= 0 { page = 1 } if pageSize <= 0 || pageSize > 100 { pageSize = 10 } messages, total, err := mpMessageService.GetMessageList(page, pageSize, msgType, openid) if err != nil { global.GVA_LOG.Error("获取消息列表失败!", zap.Error(err)) response.FailWithMessage("获取失败: "+err.Error(), c) return } response.OkWithDetailed(wechatResponse.PageResult{ List: messages, Total: total, Page: page, PageSize: pageSize, }, "获取成功", c) } // SendTextMessage 发送文本消息 // @Tags MpMessage // @Summary 发送文本消息 // @Description 向指定用户发送文本消息 // @Accept json // @Produce json // @Param data body request.SendTextMessageRequest true "发送参数" // @Success 200 {object} response.Response "发送成功" // @Router /wechat/mp/message/text [post] func (m *MpMessageApi) SendTextMessage(c *gin.Context) { var req request.SendTextMessageRequest err := c.ShouldBindJSON(&req) if err != nil { response.FailWithMessage(err.Error(), c) return } if req.OpenID == "" || req.Content == "" { response.FailWithMessage("openid和消息内容不能为空", c) return } err = mpMessageService.SendTextMessage(req.OpenID, req.Content) if err != nil { global.GVA_LOG.Error("发送文本消息失败!", zap.Error(err)) response.FailWithMessage("发送失败: "+err.Error(), c) return } response.OkWithMessage("发送成功", c) } // SendImageMessage 发送图片消息 // @Tags MpMessage // @Summary 发送图片消息 // @Description 向指定用户发送图片消息 // @Accept json // @Produce json // @Param data body request.SendImageMessageRequest true "发送参数" // @Success 200 {object} response.Response "发送成功" // @Router /wechat/mp/message/image [post] func (m *MpMessageApi) SendImageMessage(c *gin.Context) { var req request.SendImageMessageRequest err := c.ShouldBindJSON(&req) if err != nil { response.FailWithMessage(err.Error(), c) return } if req.OpenID == "" || req.MediaID == "" { response.FailWithMessage("openid和媒体ID不能为空", c) return } err = mpMessageService.SendImageMessage(req.OpenID, req.MediaID) if err != nil { global.GVA_LOG.Error("发送图片消息失败!", zap.Error(err)) response.FailWithMessage("发送失败: "+err.Error(), c) return } response.OkWithMessage("发送成功", c) } // GetMessageByID 获取消息详情 // @Tags MpMessage // @Summary 获取消息详情 // @Description 根据ID获取消息详细信息 // @Accept json // @Produce json // @Param id path int true "消息ID" // @Success 200 {object} response.Response{data=model.MpMessage} "获取成功" // @Router /wechat/mp/message/{id} [get] func (m *MpMessageApi) GetMessageByID(c *gin.Context) { idStr := c.Param("id") id, err := strconv.ParseUint(idStr, 10, 32) if err != nil { response.FailWithMessage("无效的消息ID", c) return } message, err := mpMessageService.GetMessageByID(uint(id)) if err != nil { global.GVA_LOG.Error("获取消息详情失败!", zap.Error(err)) response.FailWithMessage("获取失败: "+err.Error(), c) return } response.OkWithData(message, c) } // DeleteMessage 删除消息 // @Tags MpMessage // @Summary 删除消息 // @Description 删除指定的消息记录 // @Accept json // @Produce json // @Param id path int true "消息ID" // @Success 200 {object} response.Response "删除成功" // @Router /wechat/mp/message/{id} [delete] func (m *MpMessageApi) DeleteMessage(c *gin.Context) { idStr := c.Param("id") id, err := strconv.ParseUint(idStr, 10, 32) if err != nil { response.FailWithMessage("无效的消息ID", c) return } err = mpMessageService.DeleteMessage(uint(id)) if err != nil { global.GVA_LOG.Error("删除消息失败!", zap.Error(err)) response.FailWithMessage("删除失败: "+err.Error(), c) return } response.OkWithMessage("删除成功", c) }