liuxiaolong
2020-08-17 62f5b98dc2c8084bcab1cf91edf7923d84b56c1c
service/msgPush.go
@@ -46,45 +46,65 @@
   }()
}
//解绑所有与该别名绑定的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 { //解绑成功
//      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)
//}
//批量解绑别名
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 { //解绑成功
      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个cid
func BindAlias(cid, alias string) (bool, error) {
@@ -226,7 +246,7 @@
}
//对已注册的用户进行消息推送。调用此接口前需调用创建消息接口设置消息内容
func PushByAlias(title string, msg string) (bool, error) {
func PushByAlias(title string, msg string) (bool, error, []string) {
   var aliasArr []string
   pushUserM := make(map[string]string)
@@ -238,7 +258,7 @@
      }
   }
   if len(pushUserM) == 0 {
      return true,errors.New("len(pushUserM) == 0")
      return false,errors.New("len(pushUserM) == 0"),aliasArr
   }
   carPersonM := make(map[string]string) //以车牌号为key,value是hik的personId
   csv := NewCarService()
@@ -258,25 +278,25 @@
         }
      }
   }
   fmt.Println("len(carPersonM):", len(carPersonM), "len(pushUserM):", len(pushUserM))
   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)
            }
         }
      }
   }
   lenAS := len(aliasArr)
   if  lenAS == 0 {
      return true, errors.New("aliasArr is empty")
   } else {
      fmt.Println("PushByAlias arr:", aliasArr)
      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("创建推送前置消息失败")
      return false, errors.New("创建推送前置消息失败"),aliasArr
   }
   //alias 单次推送长度上限是200
@@ -310,10 +330,10 @@
      }
   }
   if isSuccess {
      return true, nil
      return true, nil,aliasArr
   }
   return false, errors.New("推送失败")
   return false, errors.New("推送失败"),aliasArr
}
func doPush(taskId string, aliasArr []string) (bool,error) {
@@ -364,7 +384,7 @@
   return false, errors.New("推送失败")
}
func NightPush(title string, msg string) (bool, error) {
func NightPush(title string, msg string) (bool, error, []string) {
   var aliasArr []string
   pushUserM := make(map[string]string)
@@ -376,7 +396,7 @@
      }
   }
   if len(pushUserM) == 0 {
      return true,nil
      return true,nil, aliasArr
   }
   carPersonM := make(map[string]string)
   csv := NewCarService()
@@ -387,11 +407,14 @@
      }
   }
   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 uc.Exist(phoneNum) {
                  aliasArr = append(aliasArr, phoneNum)
               }
            }
         }
      }
@@ -399,16 +422,17 @@
   if len(aliasArr) == 0 {
      fmt.Println("没有推送目标,aliasArr is empty")
      return true, nil
      return true, nil, aliasArr
   }
   cResult, taskId, ce := createPushMsg(title, msg)
   if !cResult {
      fmt.Println("createPushMsg taskId:", taskId, "err:", ce)
      return false, errors.New("创建推送前置消息失败")
      return false, errors.New("创建推送前置消息失败"), aliasArr
   }
   return doPush(taskId, aliasArr)
   b,e := doPush(taskId, aliasArr)
   return b,e, aliasArr
}
func PushAll(title string, msg string) (bool,error) {