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