From 447e03afc0c6cefe4793ffdf64128dc2dd7f7dee Mon Sep 17 00:00:00 2001
From: liuxiaolong <liuxiaolong@aiotlink.com>
Date: 星期六, 10 十月 2020 19:38:18 +0800
Subject: [PATCH] fix
---
service/carService.go | 222 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 216 insertions(+), 6 deletions(-)
diff --git a/service/carService.go b/service/carService.go
index b3b1c25..c0bf785 100644
--- a/service/carService.go
+++ b/service/carService.go
@@ -7,6 +7,7 @@
"encoding/json"
"fmt"
"github.com/astaxie/beego"
+ "sort"
"strconv"
"strings"
)
@@ -143,7 +144,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{} {
@@ -163,16 +164,184 @@
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 isSuper {
+ resultArr = append(resultArr, si)
+ } else {
+ if isSpaceShow(vipPlateNoArr, si.PlateNo) {
+ resultArr = append(resultArr, si)
+ }
+ }
}
}
return resultArr
}
}
return nil
+}
+
+
+type SpaceUser struct {
+ SpaceNo string `json:"spaceNo"`
+ PlateNo string `json:"plateNo"`
+ Username string `json:"username"`
+ PhoneNum string `json:"phoneNum"`
+ CarType string `json:"carType"`
+}
+
+type SpaceUserArr []SpaceUser
+func (arr SpaceUserArr) Len()int {
+ return len(arr)
+}
+func (arr SpaceUserArr) Swap(i,j int) {
+ arr[i],arr[j] = arr[j],arr[i]
+}
+func (arr SpaceUserArr) Less(i,j int) bool {
+ sn1,_ := strconv.Atoi(arr[i].SpaceNo)
+ sn2,_ := strconv.Atoi(arr[j].SpaceNo)
+ return sn1 < sn2
+}
+
+func (sv *CarService) FindHikSpaceUser(userId string) SpaceUserArr {
+ resultList := make(SpaceUserArr, 0)
+ url := "/artemis/api/pms/v1/parkingSpace/spaceNo"
+ reqBody := map[string]interface{} {
+ "pageNo": 1,
+ "pageSize": 1000,
+ }
+ pageResult := sv.getHikPageResult(url, reqBody)
+ if pageResult != nil {
+ rb, err := json.Marshal(pageResult.List)
+ if err != nil {
+ fmt.Println("marshal pageResult.List err:", err)
+ } else {
+ var spaceList []SpaceNo
+ err = json.Unmarshal(rb, &spaceList)
+ if err != nil {
+ fmt.Println("unmarshal spaceNos err:", err)
+ } else {
+ if len(spaceList) > 0 { //褰撳墠鏈夊仠鐣欒溅
+ personMap := sv.GetHikPersonMap()
+ vehicleMap := sv.GetHikVehicleMap()
+ curLoginManagerPhone := ""
+ 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()
+
+ for _,sp := range spaceList {
+ if sp.State == 1 {
+ 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.PlateNo = "鏃犺溅鐗�"
+ }
+
+ if isSuper {
+ resultList = append(resultList, su)
+ } else {
+ if isSpaceShow(vipPlateNoArr, su.PlateNo) {
+ resultList = append(resultList, su)
+ }
+ }
+
+ }
+ }
+ }
+ }
+ }
+ }
+
+ sort.Sort(resultList)
+ 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) { //鏄痸ip杞﹁締
+ return false
+ }
+ }
+
+ return true
}
func (sv *CarService) FindSpaceNo(userId string) models.PosResult {
@@ -183,7 +352,8 @@
if vehicles != nil {
for _,veh := range vehicles {
if veh.PlateNo != "" {
- ncStr := veh.PlateNo[1:] //鎶婄涓�浣嶆眽瀛楀墧闄ゆ帀
+ r := []rune(veh.PlateNo)
+ ncStr := string(r[1:]) //鎶婄涓�浣嶆眽瀛楀墧闄ゆ帀
myPlateNosMap[ncStr] = ncStr
}
//myPlateNosMap[veh.PlateNo] = veh.PlateNo
@@ -214,6 +384,7 @@
fmt.Println("unmarshal spaceNos err:",err)
return nil
}
+ vipPlateNoArr := getVipPlateNoArr()
for _,s := range spaceList {
pi := models.PosInfo {
SpaceNo: s.SpaceNo,
@@ -229,7 +400,13 @@
if v,ok := models.SpaceNo2Pos[s.SpaceNo];ok {
pi.PosNo = v
}
- resultList = append(resultList, pi)
+ if isSpaceShow(vipPlateNoArr, pi.PlateNo) {
+ resultList = append(resultList, pi)
+ } else {
+ pi.State = 0
+ pi.PlateNo = ""
+ resultList = append(resultList, pi)
+ }
}
}
if len(resultList) == 0 {
@@ -253,7 +430,9 @@
//2.姹夊瓧璇瘑鍒殑鍑犵巼姣旇緝楂�
func isMyPlateNo(plateNoM map[string]string, targetPlateNo string) bool {
if targetPlateNo != "" {
- nctPlateNo := targetPlateNo[1:]
+ r := []rune(targetPlateNo)
+ nctPlateNo := string(r[1:])
+
if _,exist := plateNoM[nctPlateNo];exist {
return true
} else {
@@ -262,7 +441,7 @@
newK := strings.ReplaceAll(k, "D", "*")
newK = strings.ReplaceAll(newK, "0", "*")
- tt := strings.ReplaceAll(targetPlateNo,"D", "*")
+ tt := strings.ReplaceAll(nctPlateNo,"D", "*")
tt = strings.ReplaceAll(tt,"0", "*")
if newK == tt {
match = true
@@ -309,6 +488,37 @@
PersonId string `json:"personId"`
}
+//浠ヤ汉鍛榠d涓簁ey
+func (sv *CarService) GetHikPersonMap() map[string]HikPerson {
+ m := make(map[string]HikPerson)
+ personList := sv.GetHikPersonList()
+ if personList != nil {
+ for _,p := range personList {
+ m[p.PersonId] = p
+ }
+ }
+ return m
+}
+
+//浠ヨ溅鐗屽彿涓篕ey
+func (sv *CarService) GetHikVehicleMap() map[string] HikVehicle {
+ m := make(map[string]HikVehicle)
+ carPersons := sv.GetVehicleListByPerson("")
+ if carPersons != nil {
+ for _,veh := range carPersons {
+ if veh.PlateNo != "" {
+ r := []rune(veh.PlateNo)
+ ncStr := string(r[1:]) //鎶婄涓�浣嶆眽瀛楀墧闄ゆ帀
+ newK := strings.ReplaceAll(ncStr, "D", "*")
+ newK = strings.ReplaceAll(newK, "0", "*")
+ m[newK] = veh
+ }
+ }
+ }
+
+ return m
+}
+
func (sv *CarService) GetHikPersonList() []HikPerson {
url := "/artemis/api/resource/v2/person/personList"
pageSize := 1000
--
Gitblit v1.8.0