liuxiaolong
2022-03-04 f64dd9f191dff341b4eb430d7bacc44a3db9a279
service/carService.go
@@ -30,12 +30,19 @@
      TotalPlace: 0,
      Left:       0,
   }
   remainList := sv.getRemainSpaceNum("")
   if remainList != nil {
      for _,r:=range remainList {
         m.TotalPlace += r.TotalPlace
         m.Left += r.LeftPlace
   //20201117 修改统计方式,按照  剩余车位数=车位总数-车库内实际停车数(页面上显示的,不含vip车辆占位)
   spaceInfo := sv.FindSpaceNo("")
   if spaceInfo != nil {
      m.TotalPlace = len(spaceInfo)
      usedCount := 0
      for _,si := range spaceInfo {
         if si.State == 1 {
            usedCount++
         }
      }
      m.Left = m.TotalPlace-usedCount
      if m.Left < 0 {
         m.Left = 0
      }
      return &m, true
   } else {
@@ -144,7 +151,7 @@
   SpaceType             string       `json:"spaceType"`
}
func (sv *CarService) FindHikSpaceInfo() []SpaceNo {
func (sv *CarService) FindHikSpaceInfo(userId string) []SpaceNo {
   url := "/artemis/api/pms/v1/parkingSpace/spaceNo"
   reqBody := map[string]interface{} {
@@ -164,10 +171,38 @@
         fmt.Println("unmarshal spaceNos err:", err)
         return nil
      } else {
         curLoginManagerPhone := ""
         personMap := sv.GetHikPersonMap()
         if userId != "" {
            if mm,ok := personMap[userId];ok {
               curLoginManagerPhone = mm.PhoneNo
            }
         }
         isSuper := false
         if curLoginManagerPhone != "" {
            superPhoneArr := strings.Split(beego.AppConfig.String("superManagerPhones"), ",")
            if superPhoneArr != nil {
               for _,sp := range superPhoneArr {
                  if sp == curLoginManagerPhone { //是超级管理员
                     isSuper = true
                     break
                  }
               }
            }
         }
         vipPlateNoArr := getVipPlateNoArr()
         var resultArr []SpaceNo
         for _,si := range spaceList {
            if si.State == 1 { //有车
               resultArr = append(resultArr, si)
            if si.State == 1 &&si.PlateNo != "" && si.PlateNo != "无车牌" { //有车
               if isSuper {
                  resultArr = append(resultArr, si)
               } else {
                  if isSpaceShow(vipPlateNoArr, si.PlateNo) {
                     resultArr = append(resultArr, si)
                  }
               }
            }
         }
         return resultArr
@@ -198,7 +233,7 @@
   return sn1 < sn2
}
func (sv *CarService) FindHikSpaceUser() SpaceUserArr {
func (sv *CarService) FindHikSpaceUser(userId string) SpaceUserArr {
   resultList := make(SpaceUserArr, 0)
   url := "/artemis/api/pms/v1/parkingSpace/spaceNo"
   reqBody := map[string]interface{} {
@@ -219,34 +254,65 @@
            if len(spaceList) > 0 { //当前有停留车
               personMap := sv.GetHikPersonMap()
               vehicleMap := sv.GetHikVehicleMap()
               for _,sp := range spaceList {
                  su := SpaceUser{
                     SpaceNo: sp.SpaceNo,
                     PlateNo: sp.PlateNo,
               curLoginManagerPhone := ""
               if userId != "" {
                  if mm,ok := personMap[userId];ok {
                     curLoginManagerPhone = mm.PhoneNo
                  }
                  if sp.PlateNo != "" {
                     r := []rune(sp.PlateNo)
                     ncStr := string(r[1:]) //把第一位汉字剔除掉
                     newK := strings.ReplaceAll(ncStr, "D", "*")
                     newK = strings.ReplaceAll(newK, "0", "*")
                     personId := ""
                     if v,exist := vehicleMap[newK]; exist {
                        personId = v.PersonId
               }
               isSuper := false
               if curLoginManagerPhone != "" {
                  superPhoneArr := strings.Split(beego.AppConfig.String("superManagerPhones"), ",")
                  if superPhoneArr != nil {
                     for _,sp := range superPhoneArr {
                        if sp == curLoginManagerPhone { //是超级管理员
                           isSuper = true
                           break
                        }
                     }
                  }
               }
                     if personId != "" {
                        su.CarType = "备案车"
                        if person, in := personMap[personId]; in {
                           su.Username = person.PersonName
                           su.PhoneNum = person.PhoneNo
               vipPlateNoArr := getVipPlateNoArr()
               for _,sp := range spaceList {
                  if sp.State == 1 && sp.PlateNo != "" && sp.PlateNo != "无车牌"{
                     su := SpaceUser{
                        SpaceNo: sp.SpaceNo,
                        PlateNo: sp.PlateNo,
                     }
                     if sp.PlateNo != "" {
                        r := []rune(sp.PlateNo)
                        ncStr := string(r[1:]) //把第一位汉字剔除掉
                        newK := strings.ReplaceAll(ncStr, "D", "*")
                        newK = strings.ReplaceAll(newK, "0", "*")
                        personId := ""
                        if v,exist := vehicleMap[newK]; exist {
                           personId = v.PersonId
                        }
                        if personId != "" {
                           su.CarType = "备案车"
                           if person, in := personMap[personId]; in {
                              su.Username = person.PersonName
                              su.PhoneNum = person.PhoneNo
                           }
                        } else {
                           su.CarType = "临时车"
                        }
                     } else {
                        su.CarType = "临时车"
                        su.PlateNo = "无车牌"
                     }
                  } else {
                     su.PlateNo = "无车牌"
                     if isSuper {
                        resultList = append(resultList, su)
                     } else {
                        if isSpaceShow(vipPlateNoArr, su.PlateNo) {
                           resultList = append(resultList, su)
                        }
                     }
                  }
                  resultList = append(resultList, su)
               }
            }
         }
@@ -257,6 +323,34 @@
   return resultList
}
func getVipPlateNoArr() []string {
   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)
            }
         }
      }
   }
   return vipPlateNoArr
}
//白天和夜晚管理员都看不到vip车辆
func isSpaceShow(vipPlateNoArr []string, spacePto string) bool {
   if vipPlateNoArr != nil && len(vipPlateNoArr) >0 {
      targetPto := preDealPlateNo(spacePto)
      if isVipCar(targetPto, vipPlateNoArr) { //是vip车辆
         return false
      }
   }
   return true
}
func (sv *CarService) FindSpaceNo(userId string) models.PosResult {
   resultList := make(models.PosResult,0)
   var myPlateNosMap = make(map[string]string)
@@ -264,7 +358,7 @@
      vehicles := sv.GetVehicleListByPerson(userId)
      if vehicles != nil {
         for _,veh := range vehicles {
            if veh.PlateNo != "" {
            if veh.PlateNo != ""{
               r := []rune(veh.PlateNo)
               ncStr := string(r[1:]) //把第一位汉字剔除掉
               myPlateNosMap[ncStr] = ncStr
@@ -297,6 +391,7 @@
         fmt.Println("unmarshal spaceNos err:",err)
         return nil
      }
      vipPlateNoArr := getVipPlateNoArr()
      for _,s := range spaceList {
         pi := models.PosInfo {
            SpaceNo: s.SpaceNo,
@@ -308,11 +403,23 @@
         } else if s.PlateNos != "" {
            pi.PlateNo = s.PlateNos
         }
         pi.IsMine = isMyPlateNo(myPlateNosMap, pi.PlateNo)
         if v,ok := models.SpaceNo2Pos[s.SpaceNo];ok {
            pi.PosNo = v
         }
         resultList = append(resultList, pi)
            if pi.PlateNo == "无车牌" {
            pi.State = 0
            pi.PlateNo = ""
            resultList = append(resultList, pi)
            } else {
             pi.IsMine = isMyPlateNo(myPlateNosMap, pi.PlateNo)
             if v,ok := models.SpaceNo2Pos[s.SpaceNo];ok {
                pi.PosNo = v
             }
              if isSpaceShow(vipPlateNoArr, pi.PlateNo) {
                resultList = append(resultList, pi)
             } else {
                pi.State = 0
                pi.PlateNo = ""
                resultList = append(resultList, pi)
             }
            }
      }
   }
   if len(resultList) == 0 {
@@ -335,7 +442,7 @@
//1.目前有误识别的问题,会把D识别成0,D和0不分
//2.汉字误识别的几率比较高
func isMyPlateNo(plateNoM map[string]string, targetPlateNo string) bool {
   if targetPlateNo != "" {
   if targetPlateNo != "" && plateNoM != nil {
      r := []rune(targetPlateNo)
      nctPlateNo := string(r[1:])
@@ -508,7 +615,7 @@
func (sv *CarService) getHikPageResult(url string, reqBody map[string]interface{}) *vo.HikPageResult {
   fmt.Println(url, reqBody)
   result := sv.hikUtil.Post(url, reqBody)
   if result.Code == reqUtil.HikResult_Success {
   if result != nil && result.Code == reqUtil.HikResult_Success {
      b, err := json.Marshal(result.Data)
      if err == nil {
         var pageResult vo.HikPageResult
@@ -625,4 +732,4 @@
   }
   return nil
}
}