From f64dd9f191dff341b4eb430d7bacc44a3db9a279 Mon Sep 17 00:00:00 2001
From: liuxiaolong <liuxiaolong@aiotlink.com>
Date: 星期五, 04 三月 2022 10:12:45 +0800
Subject: [PATCH] fix nil

---
 service/msgPush.go |  317 +++++++++++++++++++++++++++++++++++++++++++++-------
 1 files changed, 272 insertions(+), 45 deletions(-)

diff --git a/service/msgPush.go b/service/msgPush.go
index 252b74e..d07d3de 100644
--- a/service/msgPush.go
+++ b/service/msgPush.go
@@ -7,6 +7,7 @@
 	"errors"
 	"fmt"
 	"github.com/astaxie/beego"
+	"strings"
 	"sync"
 	"time"
 )
@@ -180,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 {
@@ -193,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 {
@@ -246,7 +261,10 @@
 }
 
 //瀵瑰凡娉ㄥ唽鐨勭敤鎴疯繘琛屾秷鎭帹閫併�傝皟鐢ㄦ鎺ュ彛鍓嶉渶璋冪敤鍒涘缓娑堟伅鎺ュ彛璁剧疆娑堟伅鍐呭
-func PushByAlias(title string, msg string) (bool, error) {
+func PushByAlias(title string, msg string, isTest bool) (bool, error, []string) {
+	if !isPushOpen() {
+		return false,errors.New("鎺ㄩ�佸紑鍏冲凡鍏抽棴"),nil
+	}
 	var aliasArr []string
 
 	pushUserM := make(map[string]string)
@@ -258,23 +276,29 @@
 		}
 	}
 	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)
+				}
 			}
 		}
 	}
@@ -290,13 +314,21 @@
 	}
 	lenAS := len(aliasArr)
 	if  lenAS == 0 {
-		return true, errors.New("aliasArr is empty")
+		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
@@ -330,10 +362,22 @@
 		}
 	}
 	if isSuccess {
-		return true, nil
+		return true, nil,aliasArr
 	}
 
-	return false, errors.New("鎺ㄩ�佸け璐�")
+	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) {
@@ -384,8 +428,12 @@
 	return false, errors.New("鎺ㄩ�佸け璐�")
 }
 
-func NightPush(title string, msg string) (bool, error) {
+func NightPush(title string, msg string) (bool, error, []string, []string) {
+	if !isPushOpen() {
+		return false,errors.New("鎺ㄩ�佸紑鍏冲凡鍏抽棴"),nil,nil
+	}
 	var aliasArr []string
+	var carOwners []string
 
 	pushUserM := make(map[string]string)
 	var userE models.User
@@ -396,24 +444,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 { //姝や汉宸叉敞鍐屽埌绯荤粺,骞朵笖杞︿笉鍦ㄥ仠杞﹀簱鍐�
-					if uc.Exist(phoneNum) {
-						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+"()")
+						}
 					}
 				}
 			}
@@ -422,18 +505,146 @@
 
 	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
 	}
 
-	return doPush(taskId, aliasArr)
+	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, isTest bool) (bool, error, []string) {
+	if !isPushOpen() {
+		return false,errors.New("鎺ㄩ�佸紑鍏冲凡鍏抽棴"),nil
+	}
+	if len(msg) > 256 {
+		fmt.Println("澶滈棿鍋滅暀杞﹀お澶氾紝message:", msg)
+
+		r := []rune(msg)
+		msg = string(r[:125])+"..."
+	}
+	managers := ""
+	if isTest {
+		managers = beego.AppConfig.String("testPushPhones")
+	} else {
+		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 isPushOpen() bool {
+	b, err := beego.AppConfig.Bool("pushOpen")
+	fmt.Println("pushOpen:", b, "err:", err)
+	if err != nil {
+		return false
+	}
+	return b
+}
+
+/*
 func PushAll(title string, msg string) (bool,error) {
 	appId := beego.AppConfig.String("pushAppId")
 	baseUrl := beego.AppConfig.String("pushBaseUrl") + appId
@@ -445,6 +656,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 {
@@ -459,17 +694,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 {
@@ -502,7 +729,7 @@
 	}
 
 	return false, errors.New("鎺ㄩ�佸け璐�")
-}
+}*/
 
 func RefreshToken() (*TokenResult,error) {
 	appId := beego.AppConfig.String("pushAppId")
@@ -543,4 +770,4 @@
 		return &t, nil
 	}
 	return nil, errors.New("鑾峰彇unipush骞冲彴token澶辫触")
-}
\ No newline at end of file
+}

--
Gitblit v1.8.0