From 27f1012d2fecda7bcc3d9f44c5dd4c10a7cf38a4 Mon Sep 17 00:00:00 2001
From: liuxiaolong <liuxiaolong@aiotlink.com>
Date: 星期二, 18 八月 2020 12:13:54 +0800
Subject: [PATCH] add log
---
service/msgPush.go | 390 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 385 insertions(+), 5 deletions(-)
diff --git a/service/msgPush.go b/service/msgPush.go
index a1c29e0..27d1201 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,277 @@
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, []string) {
+ 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 false,errors.New("len(pushUserM) == 0"),aliasArr
+ }
+ 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 false, errors.New("aliasArr is empty"),aliasArr
+ }
+
+ cResult, taskId, ce := createPushMsg(title, msg)
+ fmt.Println("createPushMsg taskId:", taskId, "cResult:",cResult, "err:", ce)
+ if !cResult {
+ return false, errors.New("鍒涘缓鎺ㄩ�佸墠缃秷鎭け璐�"),aliasArr
+ }
+
+ //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,aliasArr
+ }
+
+ return false, errors.New("鎺ㄩ�佸け璐�"),aliasArr
+}
+
+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, []string) {
+ 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, aliasArr
+ }
+ 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, aliasArr
+ }
+
+ cResult, taskId, ce := createPushMsg(title, msg)
+ if !cResult {
+ fmt.Println("createPushMsg taskId:", taskId, "err:", ce)
+ return false, errors.New("鍒涘缓鎺ㄩ�佸墠缃秷鎭け璐�"), aliasArr
+ }
+
+ b,e := doPush(taskId, aliasArr)
+ return b,e, aliasArr
+}
+
+func PushAll(title string, msg string) (bool,error) {
appId := beego.AppConfig.String("pushAppId")
baseUrl := beego.AppConfig.String("pushBaseUrl") + appId
retryTimes := 0
@@ -66,6 +445,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 +456,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 +466,8 @@
"notification": {
"title": title,
"body": msg,
- "click_type": "url",
- "url": "http://baidu.com",
+ "click_type": "intent",
+ "intent": intent,
},
},
},
--
Gitblit v1.8.0