liuxiaolong
2020-09-08 f58d6c7e121dc6a16f6b1e12e5beba1e6ce1b992
service/msgPush.go
@@ -186,6 +186,7 @@
         "notification": {
            "title": title,
            "body": msg,
            "big_text": msg,
            "click_type": "intent",
            "intent": intent,
         },
@@ -193,7 +194,7 @@
   }
   iosPush := map[string]interface{}{
      "type":"notify",
      "payload":"育英中学停车",
      "payload": "育英中学停车",
      "aps":map[string]interface{}{
         "alert":map[string]string{
            "title": title,
@@ -310,7 +311,7 @@
   }
   lenAS := len(aliasArr)
   if  lenAS == 0 {
      return false, errors.New("aliasArr is empty"),aliasArr
      return false, errors.New("没有推送目标,aliasArr is empty"),aliasArr
   }
   if isTest {
      //只给内部手机号推
@@ -424,8 +425,9 @@
   return false, errors.New("推送失败")
}
func NightPush(title string, msg string) (bool, error, []string) {
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
@@ -436,24 +438,58 @@
      }
   }
   if len(pushUserM) == 0 {
      return true,nil, aliasArr
      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+"()")
                  }
               }
            }
         }
@@ -462,17 +498,131 @@
   if len(aliasArr) == 0 {
      fmt.Println("没有推送目标,aliasArr is empty")
      return true, nil, aliasArr
      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("创建推送前置消息失败"), aliasArr
      return false, errors.New("创建推送前置消息失败"), aliasArr, carOwners
   }
   b,e := doPush(taskId, aliasArr)
   return b,e, 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 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
}
/*