liuxiaolong
2020-08-12 1a53b90590d70be1b389f33ae81c47f0d5238d48
service/msgPush.go
@@ -238,32 +238,37 @@
      }
   }
   if len(pushUserM) == 0 {
      return true,nil
      return true,errors.New("len(pushUserM) == 0")
   }
   carPersonM := make(map[string]string)
   var csv CarService
   carPersonM := make(map[string]string) //以车牌号为key,value是hik的personId
   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 _,ok := carPersonM[sn.PlateNo];ok {
         if pId,ok := carPersonM[sn.PlateNo];ok {
            delPersonIdM[pId] = pId
            delete(carPersonM, sn.PlateNo)
         }
      }
   }
   fmt.Println("len(carPersonM):", len(carPersonM), "len(pushUserM):", len(pushUserM))
   for _,personId := range carPersonM {
      if phoneNum,ok := pushUserM[personId]; ok { //此人已注册到系统,并且车不在停车库内
         aliasArr = append(aliasArr, phoneNum)
         if _,in := delPersonIdM[personId];!in {
            aliasArr = append(aliasArr, phoneNum)
         }
      }
   }
   if len(aliasArr) == 0 {
      fmt.Println("没有推送目标,aliasArr is empty")
      return true, nil
   lenAS := len(aliasArr)
   if  lenAS == 0 {
      return true, errors.New("aliasArr is empty")
   } else {
      fmt.Println("PushByAlias arr:", aliasArr)
   }
@@ -274,6 +279,44 @@
      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
@@ -318,7 +361,6 @@
   } else {
      fmt.Println("推送结果:", result)
   }
   return false, errors.New("推送失败")
}
@@ -337,7 +379,7 @@
      return true,nil
   }
   carPersonM := make(map[string]string)
   var csv CarService
   csv := NewCarService()
   carPersons := csv.GetVehicleListByPerson("")
   if carPersons != nil {
      for _, cp := range carPersons {
@@ -366,52 +408,7 @@
      return false, errors.New("创建推送前置消息失败")
   }
   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("推送失败")
   return doPush(taskId, aliasArr)
}
func PushAll(title string, msg string) (bool,error) {