From bae4af47f77a195a12a0437584d667465e826e12 Mon Sep 17 00:00:00 2001 From: liuxiaolong <liuxiaolong@aiotlink.com> Date: 星期一, 17 八月 2020 16:09:28 +0800 Subject: [PATCH] add log --- service/msgPush.go | 389 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 384 insertions(+), 5 deletions(-) diff --git a/service/msgPush.go b/service/msgPush.go index a1c29e0..252b74e 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,114 @@ }() } +//鎵归噺瑙g粦鍒悕 +func UnbindAlias(cid string) (bool, error) { + var uc models.UserClient + ucList := uc.GetByCid(cid) + if ucList ==nil { + return true,errors.New("ucList is nil") + } + var aliasArr []string + for _,als := range ucList { + aliasArr = append(aliasArr, als.PhoneNum) + } + 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" + header := map[string]string { + "token": token, + } + caArr := make([]map[string]string, 0) + for _,as := range aliasArr { + caArr = append(caArr, map[string]string{ + "cid": cid, + "alias": as, + }) + } + + reqBody := map[string]interface{}{ + "data_list": caArr, + } + b,err := util.DoDeleteRequest(url, util.CONTENT_TYPE_UTF8_JSON, reqBody, 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 +165,276 @@ 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,errors.New("len(pushUserM) == 0") + } + carPersonM := make(map[string]string) //浠ヨ溅鐗屽彿涓簁ey锛寁alue鏄痟ik鐨刾ersonId + csv := NewCarService() + carPersons := csv.GetVehicleListByPerson("") + if carPersons != nil { + for _, cp := range carPersons { + carPersonM[cp.PlateNo] = cp.PersonId + } + } + delPersonIdM := make(map[string]string) + spaceNos := csv.FindSpaceNo("") + for _,sn := range spaceNos { + if sn.State == 1 && sn.PlateNo != "" { //宸茬粡鎶婅溅鍋滃埌鍋滆溅鍦虹殑杞︿富锛屼笉鍐嶆帹閫佹秷鎭� + if pId,ok := carPersonM[sn.PlateNo];ok { + delPersonIdM[pId] = pId + delete(carPersonM, sn.PlateNo) + } + } + } + var uc models.UserClient + for _,personId := range carPersonM { + if phoneNum,ok := pushUserM[personId]; ok { //姝や汉宸叉敞鍐屽埌绯荤粺,骞朵笖杞︿笉鍦ㄥ仠杞﹀簱鍐� + if _,in := delPersonIdM[personId];!in { + if uc.Exist(phoneNum) { + aliasArr = append(aliasArr, phoneNum) + } + } + } + } + lenAS := len(aliasArr) + if lenAS == 0 { + return true, errors.New("aliasArr is empty") + } + + cResult, taskId, ce := createPushMsg(title, msg) + fmt.Println("createPushMsg taskId:", taskId, "cResult:",cResult, "err:", ce) + if !cResult { + return false, errors.New("鍒涘缓鎺ㄩ�佸墠缃秷鎭け璐�") + } + + //alias 鍗曟鎺ㄩ�侀暱搴︿笂闄愭槸200 + pushTime := 1 + if lenAS > 200 { + pushTime = lenAS / 200 + if lenAS % 200 >0 { + pushTime++ + } + } + + isSuccess := false + for i:=0;i<pushTime;i++ { + var curAliasArr []string + start := i*200 + end := (i+1)*200 -1 + if i<pushTime-1 { + curAliasArr = aliasArr[start:end] + } else { + //鍙栧墿浣欐墍鏈� + curAliasArr = aliasArr[start:] + } + if len(curAliasArr) >0 { + flag, e := doPush(taskId, curAliasArr) + if e != nil { + fmt.Println("doPush err:", e) + } + if flag { + isSuccess = true + } + } + } + if isSuccess { + return true, nil + } + + return false, errors.New("鎺ㄩ�佸け璐�") +} + +func doPush(taskId string, aliasArr []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+"/push/list/alias" + reqBody := map[string]interface{} { + "audience":map[string]interface{}{ + "alias": aliasArr, + }, + "taskid": taskId, + "is_async": false, + } + 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) + csv := NewCarService() + carPersons := csv.GetVehicleListByPerson("") + if carPersons != nil { + for _, cp := range carPersons { + carPersonM[cp.PlateNo] = cp.PersonId + } + } + spaceNos := csv.FindSpaceNo("") + var uc models.UserClient + for _,sn := range spaceNos { + if sn.State == 1 && sn.PlateNo != "" { //宸茬粡鎶婅溅鍋滃埌鍋滆溅鍦虹殑杞︿富锛屼笉鍐嶆帹閫佹秷鎭� + if personId,ok := carPersonM[sn.PlateNo];ok { + if phoneNum,ok := pushUserM[personId]; ok { //姝や汉宸叉敞鍐屽埌绯荤粺,骞朵笖杞︿笉鍦ㄥ仠杞﹀簱鍐� + if uc.Exist(phoneNum) { + 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("鍒涘缓鎺ㄩ�佸墠缃秷鎭け璐�") + } + + return doPush(taskId, aliasArr) +} + +func PushAll(title string, msg string) (bool,error) { appId := beego.AppConfig.String("pushAppId") baseUrl := beego.AppConfig.String("pushBaseUrl") + appId retryTimes := 0 @@ -66,6 +444,7 @@ return false, errors.New("token is nil") } url := baseUrl+"/push/all" + 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 { @@ -76,8 +455,8 @@ "notification": { "title": title, "body": msg, - "click_type": "url", - "url": "http://baidu.com", + "click_type": "intent", + "intent": intent, }, }, "push_channel": map[string]map[string]map[string]map[string]string { @@ -86,8 +465,8 @@ "notification": { "title": title, "body": msg, - "click_type": "url", - "url": "http://baidu.com", + "click_type": "intent", + "intent": intent, }, }, }, -- Gitblit v1.8.0