feat: 发送养护订阅消息
This commit is contained in:
+112
-115
@@ -1,117 +1,114 @@
|
||||
package task
|
||||
|
||||
//
|
||||
//import (
|
||||
// "bytes"
|
||||
// "encoding/json"
|
||||
// "fmt"
|
||||
// "io"
|
||||
// "sundynix-go/global"
|
||||
// "sundynix-go/model/plant"
|
||||
// "sundynix-go/model/system"
|
||||
// "sundynix-go/pkg/httpclient"
|
||||
// "sundynix-go/utils/wechat"
|
||||
// "time"
|
||||
//)
|
||||
//
|
||||
//type TemplateDataItem struct {
|
||||
// Value string `json:"value"`
|
||||
//}
|
||||
//
|
||||
//// SendMessagePayload 是我们发送给微信服务器的消息体
|
||||
//type SendMessagePayload struct {
|
||||
// TemplateID string `json:"template_id"`
|
||||
// Page string `json:"page"`
|
||||
// Touser string `json:"touser"`
|
||||
// Data map[string]TemplateDataItem `json:"data"`
|
||||
// MiniProgramState string `json:"miniprogram_state"` //跳转小程序类型:developer为开发版;trial为体验版;formal为正式版;默认为正式版
|
||||
// Lang string `json:"lang"`
|
||||
//}
|
||||
//
|
||||
//// SendMessageResponse 是发送消息的响应体
|
||||
//type SendMessageResponse struct {
|
||||
// Errcode int `json:"errcode"`
|
||||
// Errmsg string `json:"errmsg"`
|
||||
//}
|
||||
//
|
||||
//// SendCareMsg 发送提醒消息
|
||||
//func SendCareMsg() error {
|
||||
// httpUrl := "https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=" + wechat.GetMiniAccessToken()
|
||||
//
|
||||
// //1.查询出今日的养护任务
|
||||
// now := time.Now()
|
||||
// today := time.Date(now.Year(), now.Month(), now.Day(), 0, 0, 0, 0, time.Local)
|
||||
// var tasks []*plant.TodayCare
|
||||
// err := global.DB.Where("expected_date = ? and status in (1,4)", today).Find(&tasks).Error
|
||||
// if err != nil {
|
||||
// return err
|
||||
// }
|
||||
// if len(tasks) > 0 {
|
||||
// // 将tasks分组,key为用户id 保证无论用户有多少植物,只给用户发送一条消息
|
||||
// tasksMap := make(map[string][]*plant.TodayCare)
|
||||
// for _, task := range tasks {
|
||||
// tasksMap[task.UserId] = append(tasksMap[task.UserId], task)
|
||||
// }
|
||||
// for userId, cares := range tasksMap {
|
||||
// //1.查询用户
|
||||
// var user system.User
|
||||
// err = global.DB.Where("id = ?", userId).First(&user).Error
|
||||
// if err != nil {
|
||||
// return err
|
||||
// }
|
||||
// if user.MiniOpenId != "" {
|
||||
// //2.用户该养护的植物
|
||||
// plantId := cares[0].PlantId
|
||||
// var myPlant plant.MyPlant
|
||||
// err = global.DB.Where("id = ?", plantId).First(&myPlant).Error
|
||||
// if err != nil {
|
||||
// return err
|
||||
// }
|
||||
// //3.构造请求参数 发送订阅消息
|
||||
// payload := SendMessagePayload{
|
||||
// TemplateID: "inVOG9qy5NylOivO4Xb9H1db6PQlfv5doNNVhh_3iFE",
|
||||
// Page: "pages/garden/index",
|
||||
// Touser: user.MiniOpenId,
|
||||
// Data: map[string]TemplateDataItem{
|
||||
// "thing2": {
|
||||
// Value: myPlant.Name + "等",
|
||||
// },
|
||||
// "time3": {
|
||||
// // 今天的九点
|
||||
// Value: time.Date(now.Year(), now.Month(), now.Day(), 9, 0, 0, 0, time.Local).Format("2006-01-02"),
|
||||
// },
|
||||
// },
|
||||
// MiniProgramState: "formal",
|
||||
// //MiniProgramState: "trial",
|
||||
// Lang: "zh_CN",
|
||||
// }
|
||||
// payloadBytes, err := json.Marshal(payload)
|
||||
// if err != nil {
|
||||
// return err
|
||||
// }
|
||||
// myHttpClient := httpclient.GetClient()
|
||||
// resp, err := myHttpClient.Post(httpUrl, "application/json", bytes.NewBuffer(payloadBytes))
|
||||
// if err != nil {
|
||||
// return err
|
||||
// }
|
||||
// defer resp.Body.Close()
|
||||
// body, err := io.ReadAll(resp.Body)
|
||||
// if err != nil {
|
||||
// return fmt.Errorf("读取订阅消息响应失败: %v", err)
|
||||
// }
|
||||
//
|
||||
// var smr SendMessageResponse
|
||||
// err = json.Unmarshal(body, &smr)
|
||||
// if err != nil {
|
||||
// return fmt.Errorf("解析订阅消息响应失败: %v, body: %s", err, string(body))
|
||||
// }
|
||||
//
|
||||
// if smr.Errcode != 0 {
|
||||
// return fmt.Errorf("微信服务器返回错误: errcode=%d, errmsg=%s", smr.Errcode, smr.Errmsg)
|
||||
// }
|
||||
// global.Logger.Info("订阅消息发送成功!")
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// return nil
|
||||
//}
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"io"
|
||||
"sundynix-go/global"
|
||||
"sundynix-go/model/plant"
|
||||
"sundynix-go/model/system"
|
||||
"sundynix-go/pkg/httpclient"
|
||||
"sundynix-go/utils/timer"
|
||||
"sundynix-go/utils/wechat"
|
||||
"time"
|
||||
)
|
||||
|
||||
type TemplateDataItem struct {
|
||||
Value string `json:"value"`
|
||||
}
|
||||
|
||||
// SendMessagePayload 是我们发送给微信服务器的消息体
|
||||
type SendMessagePayload struct {
|
||||
TemplateID string `json:"template_id"`
|
||||
Page string `json:"page"`
|
||||
Touser string `json:"touser"`
|
||||
Data map[string]TemplateDataItem `json:"data"`
|
||||
MiniProgramState string `json:"miniprogram_state"` //跳转小程序类型:developer为开发版;trial为体验版;formal为正式版;默认为正式版
|
||||
Lang string `json:"lang"`
|
||||
}
|
||||
|
||||
// SendMessageResponse 是发送消息的响应体
|
||||
type SendMessageResponse struct {
|
||||
Errcode int `json:"errcode"`
|
||||
Errmsg string `json:"errmsg"`
|
||||
}
|
||||
|
||||
// SendCareMsg 发送提醒消息
|
||||
func SendCareMsg() error {
|
||||
httpUrl := "https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=" + wechat.GetMiniAccessToken()
|
||||
//1.查询出今日的养护任务
|
||||
now := time.Now()
|
||||
today := timer.GetZeroTime()
|
||||
endOfToday := today.Add(24 * time.Hour)
|
||||
var tasks []*plant.CareTask
|
||||
err := global.DB.Where("status = 1 and due_date < ?", endOfToday).Order("due_date ASC").Find(&tasks).Error
|
||||
if len(tasks) > 0 {
|
||||
// 将tasks分组,key为用户id 保证无论用户有多少植物,只给用户发送一条消息
|
||||
tasksMap := make(map[string][]*plant.CareTask)
|
||||
for _, task := range tasks {
|
||||
tasksMap[task.UserId] = append(tasksMap[task.UserId], task)
|
||||
}
|
||||
for userId, cares := range tasksMap {
|
||||
//1.查询用户
|
||||
var user system.User
|
||||
err = global.DB.Where("id = ?", userId).First(&user).Error
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if user.MiniOpenId != "" {
|
||||
//2.用户该养护的植物
|
||||
plantId := cares[0].PlantId
|
||||
var myPlant plant.MyPlant
|
||||
err = global.DB.Where("id = ?", plantId).First(&myPlant).Error
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
//3.构造请求参数 发送订阅消息
|
||||
payload := SendMessagePayload{
|
||||
TemplateID: "R7fh3NDpuV8DYqI83HpEQvC8mLJy5xMWFl1qeGN9JIo",
|
||||
Page: "pages/garden/index",
|
||||
Touser: user.MiniOpenId,
|
||||
Data: map[string]TemplateDataItem{
|
||||
"thing2": {
|
||||
Value: myPlant.Name + "等",
|
||||
},
|
||||
"time3": {
|
||||
// 今天的九点
|
||||
Value: time.Date(now.Year(), now.Month(), now.Day(), 8, 30, 0, 0, time.Local).Format("2006-01-02"),
|
||||
},
|
||||
},
|
||||
//MiniProgramState: "formal",
|
||||
MiniProgramState: "trial",
|
||||
Lang: "zh_CN",
|
||||
}
|
||||
payloadBytes, err := json.Marshal(payload)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
myHttpClient := httpclient.GetClient()
|
||||
resp, err := myHttpClient.Post(httpUrl, "application/json", bytes.NewBuffer(payloadBytes))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
body, err := io.ReadAll(resp.Body)
|
||||
if err != nil {
|
||||
return fmt.Errorf("读取订阅消息响应失败: %v", err)
|
||||
}
|
||||
|
||||
var smr SendMessageResponse
|
||||
err = json.Unmarshal(body, &smr)
|
||||
if err != nil {
|
||||
return fmt.Errorf("解析订阅消息响应失败: %v, body: %s", err, string(body))
|
||||
}
|
||||
|
||||
if smr.Errcode != 0 {
|
||||
return fmt.Errorf("微信服务器返回错误: errcode=%d, errmsg=%s", smr.Errcode, smr.Errmsg)
|
||||
}
|
||||
global.Logger.Info("订阅消息发送成功!")
|
||||
}
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user