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 | 511 +++++++++++++++++++++++++++++++++++++++++++++++---------
1 files changed, 428 insertions(+), 83 deletions(-)
diff --git a/service/carService.go b/service/carService.go
index 4848976..c0bf785 100644
--- a/service/carService.go
+++ b/service/carService.go
@@ -7,7 +7,9 @@
"encoding/json"
"fmt"
"github.com/astaxie/beego"
+ "sort"
"strconv"
+ "strings"
)
type CarService struct {
hikUtil *reqUtil.HikHttpUtil
@@ -16,8 +18,8 @@
func NewCarService() *CarService {
return &CarService{
hikUtil: &reqUtil.HikHttpUtil{
- AppKey: hikAppKey,
- AppSecret: hikAppSecret,
+ AppKey: beego.AppConfig.String("hikAppKey"),
+ AppSecret: beego.AppConfig.String("hikAppSecret"),
ReqHost: beego.AppConfig.String("hikUrl"),
},
}
@@ -25,25 +27,20 @@
func (sv *CarService) Statistic() (*models.CarStatistic, bool) {
m := models.CarStatistic{
- TotalPermPlace: 0,
- Left: 0,
- }
- parkList := sv.getHikParkList() //鍏堟煡鏈夊嚑涓仠杞﹀満
- flag := false
- if parkList != nil {
- flag = true
- for _,p := range parkList {
- remainList := sv.getRemainSpaceNum(p.ParkIndexCode)
- if remainList != nil {
- for _,r := range remainList {
- m.Left += r.LeftPlace
- m.TotalPermPlace += r.LeftPermPlace
- }
- }
- }
+ TotalPlace: 0,
+ Left: 0,
}
- return &m, flag
+ remainList := sv.getRemainSpaceNum("")
+ if remainList != nil {
+ for _,r:=range remainList {
+ m.TotalPlace += r.TotalPlace
+ m.Left += r.LeftPlace
+ }
+ return &m, true
+ } else {
+ return &m, false
+ }
}
type ParkInfo struct {
@@ -53,11 +50,6 @@
CreateTime string `json:"createTime"`
UpdateTime string `json:"updateTime"`
}
-
-var (
- hikAppKey = "27107808"
- hikAppSecret = "BEQiCoBTYcJX2d4KzbVK"
-)
//鑾峰彇娴峰悍鍋滆溅搴撳垪琛�
@@ -94,12 +86,12 @@
ParkSysCode string `json:"parkSyscode"` //鍋滆溅搴撳敮涓�鏍囪瘑鐮�
ParkName string `json:"parkName"` //鍋滆溅搴撳悕绉�
ParentParkSyscode string `json:"parentParkSyscode"` //鐖跺仠杞﹀簱鍞竴鏍囪瘑
- TotalPlace int `json:"totalPlace"` //鍋滆溅搴撹溅浣嶆�绘暟
- TotalPermPlace int `json:"totalPermPlace"` //鍋滆溅搴撳浐瀹氳溅浣嶆�绘暟
- TotalReservePlace int `json:"totalReservePlace"` //鍋滆溅浣嶉绾﹁溅浣嶆�绘暟
- LeftPlace int `json:"leftPlace"` //鍋滆溅搴撹溅浣嶅墿浣欐暟
- LeftPermPlace int `json:"leftPermPlace"` //鍋滆溅搴撳浐瀹氳溅浣嶅墿浣欐暟
- LeftReservePlace int `json:"leftReservePlace"` //鍋滆溅搴撻绾﹁溅浣嶅墿浣欐暟
+ TotalPlace int `json:"totalPlace"` //鍋滆溅搴撹溅浣嶆�绘暟
+ TotalPermPlace int `json:"totalPermPlace"` //鍋滆溅搴撳浐瀹氳溅浣嶆�绘暟
+ TotalReservePlace int `json:"totalReservePlace"` //鍋滆溅浣嶉绾﹁溅浣嶆�绘暟
+ LeftPlace int `json:"leftPlace"` //鍋滆溅搴撹溅浣嶅墿浣欐暟
+ LeftPermPlace int `json:"leftPermPlace"` //鍋滆溅搴撳浐瀹氳溅浣嶅墿浣欐暟
+ LeftReservePlace int `json:"leftReservePlace"` //鍋滆溅搴撻绾﹁溅浣嶅墿浣欐暟
}
func (sv *CarService) getRemainSpaceNum(parkIndexCode string) []RemainSpaceResult {
@@ -147,69 +139,278 @@
PlateNoPicUri string `json:"plateNoPicUri"`
AswSyscode string `json:"aswSyscode"`
PlateNos string `json:"plateNos"`
+ PlateNo string `json:"plateNo"`
AlarmPlateNos string `json:"alarmPlateNos"`
SpaceType string `json:"spaceType"`
+}
+
+func (sv *CarService) FindHikSpaceInfo(userId string) []SpaceNo {
+ 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)
+ return nil
+ }
+ var spaceList []SpaceNo
+ err = json.Unmarshal(rb, &spaceList)
+ if err != nil {
+ 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 { //鏈夎溅
+ 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 {
resultList := make(models.PosResult,0)
var myPlateNosMap = make(map[string]string)
- vehicles := sv.GetVehicleListByPerson(userId)
- if vehicles != nil {
- for _,veh := range vehicles {
- myPlateNosMap[veh.PlateNo] = veh.PlateNo
- //myPlateNos = append(myPlateNos, veh.PlateNo)
+ if userId !="" {
+ vehicles := sv.GetVehicleListByPerson(userId)
+ if vehicles != nil {
+ for _,veh := range vehicles {
+ if veh.PlateNo != "" {
+ r := []rune(veh.PlateNo)
+ ncStr := string(r[1:]) //鎶婄涓�浣嶆眽瀛楀墧闄ゆ帀
+ myPlateNosMap[ncStr] = ncStr
+ }
+ //myPlateNosMap[veh.PlateNo] = veh.PlateNo
+ }
}
}
- //bindCars := strings.Join(myPlateNos, ",")
- //鍏堟煡杞﹀簱鍞竴鏍囪瘑
- //parkList := sv.getHikParkList() //鍏堟煡鏈夊嚑涓仠杞﹀満
- //if parkList != nil {
- url := "/artemis/api/pms/v1/parkingSpace/spaceNo"
- //for _,p := range parkList {
- reqBody := map[string]interface{} {
- //"parkSyscode": p.ParkIndexCode,//鍋滆溅搴撳敮涓�鏍囪瘑
- //"state": 1, //杞︿綅鐘舵�侊紝0锛氱┖闂诧紝1锛氬仠杞�
- //"bindCars": bindCars,
- "pageNo": 1,
- "pageSize": 1000,
+
+ url := "/artemis/api/pms/v1/parkingSpace/spaceNo"
+
+ reqBody := map[string]interface{} {
+ //"parkSyscode": p.ParkIndexCode,//鍋滆溅搴撳敮涓�鏍囪瘑
+ //"state": 1, //杞︿綅鐘舵�侊紝0锛氱┖闂诧紝1锛氬仠杞�
+ //"bindCars": bindCars,
+ "pageNo": 1,
+ "pageSize": 1000,
+ }
+ pageResult := sv.getHikPageResult(url, reqBody)
+ //fmt.Println("findSpaceNo pageResult:", pageResult)
+ if pageResult != nil {
+ rb, err := json.Marshal(pageResult.List)
+ if err != nil {
+ fmt.Println("marshal pageResult.List err:",err)
+ return nil
+ }
+ var spaceList []SpaceNo
+ err = json.Unmarshal(rb, &spaceList)
+ if err != nil {
+ fmt.Println("unmarshal spaceNos err:",err)
+ return nil
+ }
+ vipPlateNoArr := getVipPlateNoArr()
+ for _,s := range spaceList {
+ pi := models.PosInfo {
+ SpaceNo: s.SpaceNo,
+ PosNo: "",
+ State: s.State,
}
- pageResult := sv.getHikPageResult(url, reqBody)
- fmt.Println("findSpaceNo pageResult:", pageResult)
- if pageResult != nil {
- rb, err := json.Marshal(pageResult.List)
- if err != nil {
- fmt.Println("marshal pageResult.List err:",err)
- return nil
- }
- var spaceList []SpaceNo
- err = json.Unmarshal(rb, &spaceList)
- if err != nil {
- fmt.Println("unmarshal spaceNos err:",err)
- return nil
- }
- for _,s := range spaceList {
- isMine := false
- if _,exist := myPlateNosMap[s.PlateNos]; exist {
- isMine = true
- }
- pi := models.PosInfo {
- SpaceNo: s.SpaceNo,
- PosNo: "",
- State: s.State,
- PlateNo: s.PlateNos,
- IsMine: isMine,
- }
- if v,ok := models.SpaceNo2Pos[s.SpaceNo];ok {
- pi.PosNo = v
- }
- resultList = append(resultList, pi)
- }
+ if s.PlateNo != "" {
+ pi.PlateNo = s.PlateNo
+ } 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
+ }
+ if isSpaceShow(vipPlateNoArr, pi.PlateNo) {
+ resultList = append(resultList, pi)
+ } else {
+ pi.State = 0
+ pi.PlateNo = ""
+ resultList = append(resultList, pi)
+ }
+ }
+ }
if len(resultList) == 0 {
- for i:=1;i<89;i++ {
+ for i:=1;i<91;i++ {
pi := models.PosInfo {
SpaceNo: strconv.Itoa(i),
PosNo: "",
@@ -222,6 +423,35 @@
}
return resultList
+}
+
+//鍒ゆ柇鏄笉鏄嚜宸辩殑杞︾墝鍙�
+//1.鐩墠鏈夎璇嗗埆鐨勯棶棰橈紝浼氭妸D璇嗗埆鎴�0,D鍜�0涓嶅垎
+//2.姹夊瓧璇瘑鍒殑鍑犵巼姣旇緝楂�
+func isMyPlateNo(plateNoM map[string]string, targetPlateNo string) bool {
+ if targetPlateNo != "" {
+ r := []rune(targetPlateNo)
+ nctPlateNo := string(r[1:])
+
+ if _,exist := plateNoM[nctPlateNo];exist {
+ return true
+ } else {
+ match := false
+ for k,_ := range plateNoM {
+ newK := strings.ReplaceAll(k, "D", "*")
+ newK = strings.ReplaceAll(newK, "0", "*")
+
+ tt := strings.ReplaceAll(nctPlateNo,"D", "*")
+ tt = strings.ReplaceAll(tt,"0", "*")
+ if newK == tt {
+ match = true
+ break
+ }
+ }
+ return match
+ }
+ }
+ return false
}
func (sv *CarService) BindCarSpace() bool {
@@ -256,6 +486,37 @@
PicUri string `json:"picUri"`
ServerIndexCode string `json:"serverIndexCode"`
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 {
@@ -310,6 +571,34 @@
return list
}
+func SyncHikPerson() int {
+ syncCount := 0
+ sv := NewCarService()
+ hikPersons := sv.GetHikPersonList()
+ if hikPersons != nil && len(hikPersons) >0 {
+ var u models.User
+ idMap := u.GetAllMap()
+ hikPM := make(map[string]string)
+ for _,hp := range hikPersons {
+ hikPM[hp.PersonId] = hp.PhoneNo
+ if sp,ok := idMap[hp.PersonId];ok {
+ if sp.PhoneNum != hp.PhoneNo {
+ u.UpdatePhoneNum(hp.PhoneNo, hp.PersonId)
+ syncCount++
+ }
+ }
+ }
+ for k,_ := range idMap {
+ if _,in := hikPM[k];!in {
+ u.Delete(k)
+ syncCount++
+ }
+ }
+
+ }
+ return syncCount
+}
+
func (sv *CarService) getHikPageResult(url string, reqBody map[string]interface{}) *vo.HikPageResult {
fmt.Println(url, reqBody)
result := sv.hikUtil.Post(url, reqBody)
@@ -357,11 +646,14 @@
url := "/artemis/api/resource/v2/vehicle/advance/vehicleList"
reqBody := map[string]interface{} {
"pageNo": 1,
- "pageSize": 100,
- "personIds": personId,
+ "pageSize": 1000,
+ }
+ if personId != "" {
+ reqBody["personIds"] = personId
}
pageResult := sv.getHikPageResult(url, reqBody)
if pageResult ==nil {
+ fmt.Println("GetVehicleListByPerson pageResult is nil")
return nil
}
@@ -370,6 +662,59 @@
var list []HikVehicle
if err = json.Unmarshal(b, &list);err == nil {
return list
+ } else {
+ fmt.Println("unmarshal err:", err)
+ }
+ }
+
+ return nil
+}
+
+//杩囪溅璁板綍
+type CrossRecord struct {
+ CrossRecordSyscode string `json:"crossRecordSyscode"`
+ parkSyscode string `json:"parkSyscode"`
+ ParkName string `json:"parkName"`
+ EntranceSyscode string `json:"entranceSyscode"`
+ EntranceName string `json:"entranceName"`
+ RoadwaySyscode string `json:"roadwaySyscode"`
+ RoadwayName string `json:"roadwayName"`
+ VehicleOut int `json:"vehicleOut"`
+ ReleaseMode int `json:"releaseMode"`
+ ReleaseResult int `json:"releaseResult"`
+ ReleaseWay int `json:"releaseWay"`
+ ReleaseReason int `json:"releaseReason"`
+ PlateNo string `json:"plateNo"`
+ CardNo string `json:"cardNo"`
+ //VehicleColor int `json:"vehicleColor"`
+ //VehicleType int `json:"vehicleType"`
+ //PlateColor int `json:"plateColor"`
+ //PlateType int `json:"plateType"`
+ //CarCategory string `json:"carCategory"`
+ //CarCategoryName string `json:"carCategoryName"`
+ VehiclePicUri string `json:"vehiclePicUri"`
+ PlateNoPicUri string `json:"plateNoPicUri"`
+ FacePicUri string `json:"facePicUri"`
+ AswSyscode string `json:"aswSyscode"`
+ CrossTime string `json:"crossTime"`
+ CreateTime string `json:"createTime"`
+}
+
+func (sv *CarService) CrossRecords() []CrossRecord {
+ url := "/artemis/api/pms/v1/crossRecords/page"
+ reqBody := map[string]interface{} {
+ "pageNo": 1,
+ "pageSize": 100,
+ }
+ pageResult := sv.getHikPageResult(url, reqBody)
+ if pageResult ==nil {
+ return nil
+ }
+ b, err := json.Marshal(pageResult.List)
+ if err == nil {
+ var list []CrossRecord
+ if err = json.Unmarshal(b, &list);err == nil {
+ return list
}
}
--
Gitblit v1.8.0