From 9358e5ec2d2b65fec4ef9a1be7d1a1e1e2cf9d2d Mon Sep 17 00:00:00 2001 From: liuxiaolong <liuxiaolong@aiotlink.com> Date: 星期一, 10 八月 2020 16:31:34 +0800 Subject: [PATCH] new push schedule --- service/msgPush.go | 358 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 357 insertions(+), 1 deletions(-) diff --git a/service/msgPush.go b/service/msgPush.go index 844ae2e..f13e9a2 100644 --- a/service/msgPush.go +++ b/service/msgPush.go @@ -2,6 +2,7 @@ import ( "car-service/extend/util" + "car-service/models" "encoding/json" "errors" "fmt" @@ -45,6 +46,94 @@ }() } +//瑙g粦鎵�鏈変笌璇ュ埆鍚嶇粦瀹氱殑cid +//func UnbindAlias(alias string) (bool, error) { +// appId := beego.AppConfig.String("pushAppId") +// baseUrl := beego.AppConfig.String("pushBaseUrl") + appId +// retryTimes := 0 +//ReTry: +// token := getCacheToken() +// if token == "" { +// return false, errors.New("token is nil") +// } +// url := baseUrl + "/user/alias/"+alias +// header := map[string]string { +// "token": token, +// } +// b,err := util.DoDeleteRequest(url, util.CONTENT_TYPE_UTF8_JSON, nil, header) +// if err !=nil { +// fmt.Println("DoDelete err:", err) +// return false, err +// } +// var result PushResult +// err = json.Unmarshal(b, &result) +// if err != nil { +// fmt.Println("unmarshal err:", err) +// return false, err +// } +// if result.Code == 0 { //瑙g粦鎴愬姛 +// return true, nil +// } else if result.Code == 10001 { //token杩囨湡 +// if retryTimes <=3 { +// newToken, err := RefreshToken() +// if err == nil { +// updateToken(newToken) +// retryTimes++ +// goto ReTry +// } +// } +// } +// return false, errors.New(result.Msg) +//} + +//涓�涓埆鍚嶆渶澶氬厑璁哥粦瀹�10涓猚id +func BindAlias(cid, alias string) (bool, error) { + appId := beego.AppConfig.String("pushAppId") + baseUrl := beego.AppConfig.String("pushBaseUrl") + appId + retryTimes := 0 +ReTry: + token := getCacheToken() + if token == "" { + return false, errors.New("token is nil") + } + url := baseUrl+"/user/alias" + caArr := make([]map[string]string, 0) + caArr = append(caArr, map[string]string{ + "cid": cid, + "alias": alias, + }) + reqBody := map[string]interface{} { + "data_list":caArr, + } + header := map[string]string { + "token": token, + } + b, err := util.DoPostRequest(url, util.CONTENT_TYPE_UTF8_JSON, reqBody, nil, header) + if err !=nil { + fmt.Println("DoPost err:", err) + return false, err + } + var result PushResult + err = json.Unmarshal(b, &result) + if err != nil { + fmt.Println("unmarshal err:", err) + return false, err + } + if result.Code == 0 { //缁戝畾鎴愬姛 + return true, nil + } else if result.Code == 10001 { //token杩囨湡 + if retryTimes <=3 { + newToken, err := RefreshToken() + if err == nil { + updateToken(newToken) + retryTimes++ + goto ReTry + } + } + } + return false, errors.New(result.Msg) +} + type PushResult struct { Code int `json:"code"` Msg string `json:"msg"` @@ -56,7 +145,274 @@ Token string `json:"token"` } -func Push(title string, msg string) (bool,error) { +type CreatePushMsgResult struct { + TaskId string `json:"taskid"` +} + +func createPushMsg(title string, msg string) (bool,string, error) { + appId := beego.AppConfig.String("pushAppId") + baseUrl := beego.AppConfig.String("pushBaseUrl") + appId + retryTimes := 0 +ReTry: + token := getCacheToken() + if token == "" { + return false, "", errors.New("token is nil") + } + url := baseUrl+"/push/list/message" + intent := "intent:#Intent;action=android.intent.action.oppopush;launchFlags=0x14000000;component=uni.UNIEDF0B5C/io.dcloud.PandoraEntry;S.UP-OL-SU=true;S.title="+title+";S.content="+msg+";S.payload=test;end" + reqBody := map[string]interface{} { + "request_id": time.Now().Format("20060102150405") + util.GenValidateCode(6), + "settings":map[string]int { + "ttl": 8 * 3600 * 1000, + }, + "push_message": map[string]map[string]string { + "notification": { + "title": title, + "body": msg, + "click_type": "intent", + "intent": intent, + }, + }, + "push_channel": map[string]map[string]map[string]map[string]string { + "android": { + "ups": { + "notification": { + "title": title, + "body": msg, + "click_type": "intent", + "intent": intent, + }, + }, + }, + }, + } + header := map[string]string { + "token": token, + } + b, err := util.DoPostRequest(url, util.CONTENT_TYPE_UTF8_JSON, reqBody, nil, header) + if err !=nil { + fmt.Println("DoPost err:", err) + return false, "",err + } + var result PushResult + err = json.Unmarshal(b, &result) + if err != nil { + fmt.Println("unmarshal err:", err) + return false, "",err + } + if result.Code == 0 { + rb,uErr := json.Marshal(result.Data) + if uErr == nil { + var tResult CreatePushMsgResult + if uErr =json.Unmarshal(rb, &tResult); uErr ==nil { + return true, tResult.TaskId, nil + } else { + return false, "", uErr + } + } else { + return false, "", uErr + } + } else if result.Code == 10001 { //token杩囨湡 + if retryTimes <=3 { + newToken, err := RefreshToken() + if err == nil { + updateToken(newToken) + retryTimes++ + goto ReTry + } + } + } + return false, "", errors.New(result.Msg) +} + +//瀵瑰凡娉ㄥ唽鐨勭敤鎴疯繘琛屾秷鎭帹閫併�傝皟鐢ㄦ鎺ュ彛鍓嶉渶璋冪敤鍒涘缓娑堟伅鎺ュ彛璁剧疆娑堟伅鍐呭 +func PushByAlias(title string, msg string) (bool, error) { + var aliasArr []string + + pushUserM := make(map[string]string) + var userE models.User + allUsers, _ := userE.GetAllUsers() + if allUsers != nil { + for _,u := range allUsers { + pushUserM[u.Id] = u.PhoneNum + } + } + if len(pushUserM) == 0 { + return true,nil + } + carPersonM := make(map[string]string) + var csv CarService + carPersons := csv.GetVehicleListByPerson("") + if carPersons != nil { + for _, cp := range carPersons { + carPersonM[cp.PlateNo] = cp.PersonId + } + } + spaceNos := csv.FindSpaceNo("") + for _,sn := range spaceNos { + if sn.State == 1 && sn.PlateNo != "" { //宸茬粡鎶婅溅鍋滃埌鍋滆溅鍦虹殑杞︿富锛屼笉鍐嶆帹閫佹秷鎭� + if _,ok := carPersonM[sn.PlateNo];ok { + delete(carPersonM, sn.PlateNo) + } + } + } + for _,personId := range carPersonM { + if phoneNum,ok := pushUserM[personId]; ok { //姝や汉宸叉敞鍐屽埌绯荤粺,骞朵笖杞︿笉鍦ㄥ仠杞﹀簱鍐� + aliasArr = append(aliasArr, phoneNum) + } + } + if len(aliasArr) == 0 { + fmt.Println("娌℃湁鎺ㄩ�佺洰鏍�,aliasArr is empty") + return true, nil + } + + cResult, taskId, ce := createPushMsg(title, msg) + if !cResult { + fmt.Println("createPushMsg taskId:", taskId, "err:", ce) + return false, errors.New("鍒涘缓鎺ㄩ�佸墠缃秷鎭け璐�") + } + + appId := beego.AppConfig.String("pushAppId") + baseUrl := beego.AppConfig.String("pushBaseUrl") + appId + retryTimes := 0 +ReTry: + token := getCacheToken() + if token == "" { + return false, errors.New("token is nil") + } + url := baseUrl+"/push/list/alias" + reqBody := map[string]interface{} { + "audience":map[string]interface{}{ + "alias": aliasArr, + }, + "taskid": taskId, + "is_async": true, + } + header := map[string]string { + "token": token, + } + b, err := util.DoPostRequest(url, util.CONTENT_TYPE_UTF8_JSON, reqBody, nil, header) + if err !=nil { + fmt.Println("DoPost err:", err) + return false, err + } + var result PushResult + err = json.Unmarshal(b, &result) + if err != nil { + fmt.Println("unmarshal err:", err) + return false, err + } + if result.Code == 0 { + return true, nil + } else if result.Code == 10001 { //token杩囨湡 + if retryTimes <=3 { + newToken, err := RefreshToken() + if err == nil { + updateToken(newToken) + retryTimes++ + goto ReTry + } + } + } else { + fmt.Println("鎺ㄩ�佺粨鏋�:", result) + } + + return false, errors.New("鎺ㄩ�佸け璐�") +} + +func NightPush(title string, msg string) (bool, error) { + var aliasArr []string + + pushUserM := make(map[string]string) + var userE models.User + allUsers, _ := userE.GetAllUsers() + if allUsers != nil { + for _,u := range allUsers { + pushUserM[u.Id] = u.PhoneNum + } + } + if len(pushUserM) == 0 { + return true,nil + } + carPersonM := make(map[string]string) + var csv CarService + carPersons := csv.GetVehicleListByPerson("") + if carPersons != nil { + for _, cp := range carPersons { + carPersonM[cp.PlateNo] = cp.PersonId + } + } + spaceNos := csv.FindSpaceNo("") + for _,sn := range spaceNos { + if sn.State == 1 && sn.PlateNo != "" { //宸茬粡鎶婅溅鍋滃埌鍋滆溅鍦虹殑杞︿富锛屼笉鍐嶆帹閫佹秷鎭� + if personId,ok := carPersonM[sn.PlateNo];ok { + if phoneNum,ok := pushUserM[personId]; ok { //姝や汉宸叉敞鍐屽埌绯荤粺,骞朵笖杞︿笉鍦ㄥ仠杞﹀簱鍐� + aliasArr = append(aliasArr, phoneNum) + } + } + } + } + + if len(aliasArr) == 0 { + fmt.Println("娌℃湁鎺ㄩ�佺洰鏍�,aliasArr is empty") + return true, nil + } + + cResult, taskId, ce := createPushMsg(title, msg) + if !cResult { + fmt.Println("createPushMsg taskId:", taskId, "err:", ce) + return false, errors.New("鍒涘缓鎺ㄩ�佸墠缃秷鎭け璐�") + } + + appId := beego.AppConfig.String("pushAppId") + baseUrl := beego.AppConfig.String("pushBaseUrl") + appId + retryTimes := 0 +ReTry: + token := getCacheToken() + if token == "" { + return false, errors.New("token is nil") + } + url := baseUrl+"/push/list/alias" + reqBody := map[string]interface{} { + "audience":map[string]interface{}{ + "alias": aliasArr, + }, + "taskid": taskId, + "is_async": true, + } + header := map[string]string { + "token": token, + } + b, err := util.DoPostRequest(url, util.CONTENT_TYPE_UTF8_JSON, reqBody, nil, header) + if err !=nil { + fmt.Println("DoPost err:", err) + return false, err + } + var result PushResult + err = json.Unmarshal(b, &result) + if err != nil { + fmt.Println("unmarshal err:", err) + return false, err + } + if result.Code == 0 { + return true, nil + } else if result.Code == 10001 { //token杩囨湡 + if retryTimes <=3 { + newToken, err := RefreshToken() + if err == nil { + updateToken(newToken) + retryTimes++ + goto ReTry + } + } + } else { + fmt.Println("鎺ㄩ�佺粨鏋�:", result) + } + + return false, errors.New("鎺ㄩ�佸け璐�") +} + +func PushAll(title string, msg string) (bool,error) { appId := beego.AppConfig.String("pushAppId") baseUrl := beego.AppConfig.String("pushBaseUrl") + appId retryTimes := 0 -- Gitblit v1.8.0