From f3f7088545c2be0b6da1b4e5e1d8461fa57a63fc Mon Sep 17 00:00:00 2001
From: liuxiaolong <liuxiaolong@aiotlink.com>
Date: 星期二, 08 九月 2020 15:03:56 +0800
Subject: [PATCH] fix url and fix testNightPush
---
service/msgPush.go | 480 +++++++++++++++++++++++++++++++++++++++++++----------------
1 files changed, 350 insertions(+), 130 deletions(-)
diff --git a/service/msgPush.go b/service/msgPush.go
index d957beb..f23263c 100644
--- a/service/msgPush.go
+++ b/service/msgPush.go
@@ -7,6 +7,7 @@
"errors"
"fmt"
"github.com/astaxie/beego"
+ "strings"
"sync"
"time"
)
@@ -46,45 +47,65 @@
}()
}
-//瑙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)
-//}
+//鎵归噺瑙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) {
@@ -160,6 +181,28 @@
}
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"
+ androidPush := map[string]map[string]map[string]string {
+ "ups": {
+ "notification": {
+ "title": title,
+ "body": msg,
+ "big_text": msg,
+ "click_type": "intent",
+ "intent": intent,
+ },
+ },
+ }
+ iosPush := map[string]interface{}{
+ "type":"notify",
+ "payload": "鑲茶嫳涓鍋滆溅",
+ "aps":map[string]interface{}{
+ "alert":map[string]string{
+ "title": title,
+ "body": msg,
+ },
+ "content-available":0,
+ },
+ }
reqBody := map[string]interface{} {
"request_id": time.Now().Format("20060102150405") + util.GenValidateCode(6),
"settings":map[string]int {
@@ -173,17 +216,9 @@
"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,
- },
- },
- },
+ "push_channel": map[string]interface{} {
+ "android": androidPush,
+ "ios":iosPush,
},
}
header := map[string]string {
@@ -226,7 +261,7 @@
}
//瀵瑰凡娉ㄥ唽鐨勭敤鎴疯繘琛屾秷鎭帹閫併�傝皟鐢ㄦ鎺ュ彛鍓嶉渶璋冪敤鍒涘缓娑堟伅鎺ュ彛璁剧疆娑堟伅鍐呭
-func PushByAlias(title string, msg string) (bool, error) {
+func PushByAlias(title string, msg string, isTest bool) (bool, error, []string) {
var aliasArr []string
pushUserM := make(map[string]string)
@@ -238,45 +273,111 @@
}
}
if len(pushUserM) == 0 {
- return true,errors.New("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
+ ncPlateNo := preDealPlateNo(cp.PlateNo) //鍘绘帀姹夊瓧锛孌鍜�0鏇挎崲鎴�*
+ if ncPlateNo != "" {
+ carPersonM[ncPlateNo] = 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)
+ realPlateNo := preDealPlateNo(sn.PlateNo)
+ if realPlateNo != "" {
+ if pId,ok := carPersonM[realPlateNo];ok {
+ delPersonIdM[pId] = pId
+ delete(carPersonM, realPlateNo)
+ }
}
}
}
+ var uc models.UserClient
for _,personId := range carPersonM {
if phoneNum,ok := pushUserM[personId]; ok { //姝や汉宸叉敞鍐屽埌绯荤粺,骞朵笖杞︿笉鍦ㄥ仠杞﹀簱鍐�
if _,in := delPersonIdM[personId];!in {
- aliasArr = append(aliasArr, phoneNum)
+ if uc.Exist(phoneNum) {
+ aliasArr = append(aliasArr, phoneNum)
+ }
}
}
}
- if len(aliasArr) == 0 {
- return true, errors.New("aliasArr is empty")
- } else {
- fmt.Println("PushByAlias arr:", aliasArr)
+ lenAS := len(aliasArr)
+ if lenAS == 0 {
+ return false, errors.New("娌℃湁鎺ㄩ�佺洰鏍囷紝aliasArr is empty"),aliasArr
+ }
+ if isTest {
+ //鍙粰鍐呴儴鎵嬫満鍙锋帹
+ testPhones := beego.AppConfig.String("testPushPhones")
+ if testPhones == "" {
+ return false, errors.New("test push aliasArr is empty"),aliasArr
+ }
+ aliasArr = strings.Split(testPhones, ",")
}
cResult, taskId, ce := createPushMsg(title, msg)
fmt.Println("createPushMsg taskId:", taskId, "cResult:",cResult, "err:", ce)
if !cResult {
- return false, errors.New("鍒涘缓鎺ㄩ�佸墠缃秷鎭け璐�")
+ 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
+}
+
+//棰勫鐞嗚溅鐗屽彿锛屽幓闄ら涓眽瀛楋紝浠ュ強蹇界暐D鍜�0
+func preDealPlateNo(pn string) string {
+ if pn != "" {
+ r := []rune(pn)
+ ncStr := string(r[1:])
+ newPlateNo := strings.ReplaceAll(ncStr, "D", "*")
+ newPlateNo = strings.ReplaceAll(newPlateNo, "0", "*")
+ return newPlateNo
+ }
+ return ""
+}
+
+func doPush(taskId string, aliasArr []string) (bool,error) {
appId := beego.AppConfig.String("pushAppId")
baseUrl := beego.AppConfig.String("pushBaseUrl") + appId
retryTimes := 0
@@ -321,12 +422,12 @@
} else {
fmt.Println("鎺ㄩ�佺粨鏋�:", result)
}
-
return false, errors.New("鎺ㄩ�佸け璐�")
}
-func NightPush(title string, msg string) (bool, error) {
+func NightPush(title string, msg string) (bool, error, []string, []string) {
var aliasArr []string
+ var carOwners []string
pushUserM := make(map[string]string)
var userE models.User
@@ -337,22 +438,59 @@
}
}
if len(pushUserM) == 0 {
- return true,nil
+ return false, errors.New("len(pushUserM) == 0"), aliasArr, carOwners
}
carPersonM := make(map[string]string)
csv := NewCarService()
carPersons := csv.GetVehicleListByPerson("")
if carPersons != nil {
for _, cp := range carPersons {
- carPersonM[cp.PlateNo] = cp.PersonId
+ cnPlateNo := preDealPlateNo(cp.PlateNo)
+ if cnPlateNo != "" {
+ carPersonM[cnPlateNo] = cp.PersonId
+ }
}
}
+ //澶滈棿鏌愪簺棰嗗鐨勮溅鍙互鍋滃湪杞﹀簱鍐�
+ var vipPlateNoArr []string
+ vipArr := strings.Split(beego.AppConfig.String("nightVipPlateNos"), ",")
+ if vipArr != nil && len(vipArr) >0 {
+ for _,po := range vipArr {
+ if po != "" {
+ cnPo := preDealPlateNo(po)
+ if cnPo != "" {
+ vipPlateNoArr = append(vipPlateNoArr, cnPo)
+ }
+ }
+ }
+ }
+
+ hikPersonMap := csv.GetHikPersonMap()
+
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 { //姝や汉宸叉敞鍐屽埌绯荤粺,骞朵笖杞︿笉鍦ㄥ仠杞﹀簱鍐�
- aliasArr = append(aliasArr, phoneNum)
+ if sn.State == 1 { //杞﹀皻鍦ㄥ仠杞﹀満鐨勮溅鐗�
+ inCnPlateNo := preDealPlateNo(sn.PlateNo)
+ if inCnPlateNo != "" {
+ if !isVipCar(inCnPlateNo, vipPlateNoArr) {
+ if personId,ok := carPersonM[inCnPlateNo];ok {
+ if phoneNum,ok := pushUserM[personId]; ok {
+ if uc.Exist(phoneNum) {
+ aliasArr = append(aliasArr, phoneNum)
+ }
+ }
+
+ if v,ex := hikPersonMap[personId]; ex {
+ carOwners = append(carOwners, sn.PlateNo+"("+v.PersonName+")")
+ }
+ } else { //鎵句笉鍒拌溅涓伙紝鍗宠涓轰复鏃惰溅锛屽皢杞︾墝浣滀负杞︿富濮撳悕鎺ㄩ��
+ if sn.PlateNo == "鏃犺溅鐗�" {
+ carOwners = append(carOwners, sn.PlateNo)
+ } else {
+ carOwners = append(carOwners, sn.PlateNo+"()")
+ }
+ }
}
}
}
@@ -360,63 +498,129 @@
if len(aliasArr) == 0 {
fmt.Println("娌℃湁鎺ㄩ�佺洰鏍�,aliasArr is empty")
- return true, nil
+ return false, errors.New("娌℃湁鎺ㄩ�佺洰鏍�,aliasArr is empty"), aliasArr, carOwners
}
cResult, taskId, ce := createPushMsg(title, msg)
if !cResult {
fmt.Println("createPushMsg taskId:", taskId, "err:", ce)
- return false, errors.New("鍒涘缓鎺ㄩ�佸墠缃秷鎭け璐�")
+ return false, errors.New("鍒涘缓鎺ㄩ�佸墠缃秷鎭け璐�"), aliasArr, carOwners
}
- 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("鎺ㄩ�佸け璐�")
+ b,e := doPush(taskId, aliasArr)
+ return b,e, aliasArr, carOwners
}
+
+//姝ゆ柟娉曞仛娴嬭瘯浣跨敤
+//鑾峰彇鍋滅暀鍦ㄨ溅搴撳唴杞︿富鐨勫鍚嶏紝鎵句笉鍒板鍚嶈繑鍥炶繖鐗�
+func GetLeftCarOwners() []string {
+ var carOwners []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
+ }
+ }
+
+ carPersonM := make(map[string]string)
+ csv := NewCarService()
+ carPersons := csv.GetVehicleListByPerson("")
+ if carPersons != nil {
+ for _, cp := range carPersons {
+ cnPlateNo := preDealPlateNo(cp.PlateNo)
+ if cnPlateNo != "" {
+ carPersonM[cnPlateNo] = cp.PersonId
+ }
+ }
+ }
+ //澶滈棿鏌愪簺棰嗗鐨勮溅鍙互鍋滃湪杞﹀簱鍐�
+ var vipPlateNoArr []string
+ vipArr := strings.Split(beego.AppConfig.String("nightVipPlateNos"), ",")
+ if vipArr != nil && len(vipArr) >0 {
+ for _,po := range vipArr {
+ if po != "" {
+ cnPo := preDealPlateNo(po)
+ if cnPo != "" {
+ vipPlateNoArr = append(vipPlateNoArr, cnPo)
+ }
+ }
+ }
+ }
+
+ hikPersonMap := csv.GetHikPersonMap()
+
+ spaceNos := csv.FindSpaceNo("")
+ for _,sn := range spaceNos {
+ if sn.State == 1 { //杞﹀皻鍦ㄥ仠杞﹀満鐨勮溅鐗�
+ inCnPlateNo := preDealPlateNo(sn.PlateNo)
+ if inCnPlateNo != "" {
+ if !isVipCar(inCnPlateNo, vipPlateNoArr) {
+ if personId,ok := carPersonM[inCnPlateNo];ok {
+
+ if v,ex := hikPersonMap[personId]; ex {
+ carOwners = append(carOwners, sn.PlateNo+"("+v.PersonName+")")
+ }
+ } else { //鎵句笉鍒拌溅涓伙紝鍗宠涓轰复鏃惰溅锛屽皢杞︾墝浣滀负杞︿富濮撳悕鎺ㄩ��
+ if sn.PlateNo == "鏃犺溅鐗�" {
+ carOwners = append(carOwners, sn.PlateNo)
+ } else {
+ carOwners = append(carOwners, sn.PlateNo+"()")
+ }
+ }
+ }
+ }
+ }
+ }
+
+ return carOwners
+}
+
+//vip杞︿富锛屼笉鎺ユ敹璇风寮�鐨勯�氱煡锛屼篃涓嶉�氱煡绠$悊鍛樿繖涓溅杩樺湪杞﹀簱鍐�
+func isVipCar(targetPlateNo string, vipPlateNoArr []string) bool {
+ b := false
+ if vipPlateNoArr != nil {
+ for _,v := range vipPlateNoArr {
+ if targetPlateNo == v {
+ b = true
+ break
+ }
+ }
+ }
+ return b
+}
+
+//濡傛灉澶滈棿鏈夌粰杞﹀簱鍐呯殑杞︿富鎺ㄩ�佲�滆灏藉揩椹剁鈥濈殑娑堟伅锛屽垯鍛婄煡绠$悊鍛� 鏈夊摢浜涜溅灏氬仠鍦ㄨ溅搴撳唴
+func Push2Manager(title string, msg string) (bool, error, []string) {
+ if len(msg) > 256 {
+ fmt.Println("澶滈棿鍋滅暀杞﹀お澶氾紝message:", msg)
+
+ r := []rune(msg)
+ msg = string(r[:125])+"..."
+ }
+ managers := beego.AppConfig.String("nightManagerPhones")
+ if managers == "" {
+ return false, errors.New("澶滈棿鎺ㄩ�佺鐞嗗憳鎵嬫満鍙锋湭閰嶇疆"), []string{}
+ }
+ managerArr := strings.Split(managers, ",")
+ if len(managerArr) == 0 {
+ fmt.Println("娌℃湁鎺ㄩ�佺洰鏍�,managerArr is empty")
+ return false, errors.New("绠$悊鍛樻墜鏈哄彿鏈厤缃�"), managerArr
+ }
+
+ cResult, taskId, ce := createPushMsg(title, msg)
+ if !cResult {
+ fmt.Println("createPushMsg taskId:", taskId, "err:", ce)
+ return false, errors.New("鍒涘缓鎺ㄩ�佸墠缃秷鎭け璐�"), managerArr
+ }
+
+ b,e := doPush(taskId, managerArr)
+ return b,e, managerArr
+}
+
+/*
func PushAll(title string, msg string) (bool,error) {
appId := beego.AppConfig.String("pushAppId")
baseUrl := beego.AppConfig.String("pushBaseUrl") + appId
@@ -428,6 +632,30 @@
}
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"
+ androidPush := map[string]map[string]map[string]string {
+ "ups": {
+ "notification": {
+ "title": title,
+ "body": msg,
+ "click_type": "intent",
+ "intent": intent,
+ },
+ },
+ }
+ iosPush := map[string]interface{}{
+ "type":"notify",
+ "payload":"鑲茶嫳涓鍋滆溅",
+ "aps":map[string]interface{}{
+ "alert":map[string]string{
+ "title": title,
+ "body": msg,
+ },
+ "content-available":0,
+ //"sound":"com.gexin.ios.silence",
+ //"category":"ACTIONABLE",
+ },
+ "auto_badge":"+1",
+ }
reqBody := map[string]interface{} {
"request_id": time.Now().Format("20060102150405") + util.GenValidateCode(6),
"settings":map[string]int {
@@ -442,17 +670,9 @@
"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,
- },
- },
- },
+ "push_channel": map[string]interface{} {
+ "android": androidPush,
+ "ios": iosPush,
},
}
header := map[string]string {
@@ -485,7 +705,7 @@
}
return false, errors.New("鎺ㄩ�佸け璐�")
-}
+}*/
func RefreshToken() (*TokenResult,error) {
appId := beego.AppConfig.String("pushAppId")
--
Gitblit v1.8.0