package service import ( "car-service/models" reqUtil "car-service/extend/util" "encoding/json" "fmt" "strconv" ) type CarService struct { hikUtil *reqUtil.HikHttpUtil } func NewCarService() *CarService { return &CarService{ hikUtil: &reqUtil.HikHttpUtil{ AppKey: hikAppKey, AppSecret: hikAppSecret, ReqHost: "https://172.16.35.50:1443", }, } } func (sv *CarService) Statistic() *models.CarStatistic { m := models.CarStatistic{ Left: 0, } parkList := sv.getHikParkList() //先查有几个停车场 fmt.Println("parkList:", parkList) if parkList != nil { for _,p := range parkList { remainList := sv.getRemainSpaceNum(p.ParkIndexCode) fmt.Println("remainList:", remainList) if remainList != nil { for _,r := range remainList { m.Left += r.LeftPlace } } } } return &m } type ParkInfo struct { ParkIndexCode string `json:"parkIndexCode"` ParentParkIndexCode string `json:"parentParkIndexCode"` ParkName string `json:"parkName"` CreateTime string `json:"createTime"` UpdateTime string `json:"updateTime"` } var ( hikAppKey = "27107808" hikAppSecret = "BEQiCoBTYcJX2d4KzbVK" ) //获取海康停车库列表 func (sv *CarService) getHikParkList() []ParkInfo { url := "/artemis/api/resource/v1/park/parkList" reqBody := map[string]interface{}{} result := sv.hikUtil.Post(url, reqBody) if result == nil { fmt.Println("sv.hikUtil.Post get nil") return nil } if result.Code == reqUtil.HikResult_Success { dbytes, err := json.Marshal(result.Data) if err !=nil { fmt.Println("marshal result.data err:", err) return nil } var pList []ParkInfo err = json.Unmarshal(dbytes, &pList) if err != nil { fmt.Println("unmarshal []ParkInfo err:", err) return nil } return pList } else { fmt.Println("result ret fail, result:", result) return nil } } type RemainSpaceResult struct { 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"` //停车库预约车位剩余数 } func (sv *CarService) getRemainSpaceNum(parkIndexCode string) []RemainSpaceResult { url := "/artemis/api/pms/v1/park/remainSpaceNum" reqBody := map[string]interface{}{ "parkSyscode": parkIndexCode, } result := sv.hikUtil.Post(url, reqBody) if result == nil { fmt.Println("sv.hikUtil.Post get nil") return nil } if result.Code == reqUtil.HikResult_Success { dbytes, err := json.Marshal(result.Data) if err !=nil { fmt.Println("marshal result.data err:", err) return nil } var remainList []RemainSpaceResult err = json.Unmarshal(dbytes, &remainList) if err != nil { fmt.Println("unmarshal []RemainSpaceResult err:", err) return nil } return remainList } fmt.Println("result:", result) return nil } type SpaceNo struct { SpaceSyscode string `json:"spaceSyscode"` SpaceNo string `json:"spaceNo"` ParkSyscode string `json:"parkSyscode"` ParkName string `json:"parkName"` FloorSyscode string `json:"floorSyscode"` FloorName string `json:"floorName"` Longitude string `json:"longitude"` Latitude string `json:"latitude"` CameraSyscode string `json:"cameraSyscode"` State int `json:"state"` ParkingTime string `json:"parkingTime"` SpacePicUri string `json:"spacePicUri"` PlateNoPicUri string `json:"plateNoPicUri"` AswSyscode string `json:"aswSyscode"` PlateNos string `json:"plateNos"` AlarmPlateNos string `json:"alarmPlateNos"` SpaceType string `json:"spaceType"` } func (sv *CarService) FindSpaceNo() models.PosResult { resultList := make(models.PosResult,0) for k,_ := range models.SpaceNo2Pos { st := 0 i, _ := strconv.Atoi(k) if i >= 50 && i <=60 { st = 1 } resultList = append(resultList, models.PosInfo { SpaceNo: k, PosNo: "", State: st, PlateNo: "", }) } //先查车库唯一标识 //parkList := sv.getHikParkList() //先查有几个停车场 //fmt.Println("parkList:", parkList) //if parkList != nil { // url := "/api/pms/v1/parkingSpace/spaceNo" // for _,p := range parkList { // reqBody := map[string]interface{} { // "parkSyscode": p.ParkIndexCode,//停车库唯一标识 // "spaceNos": "", //车位号,多个用逗号隔开 // "state": 1, //车位状态,0:空闲,1:停车 // "bindCars": "", //绑定的车辆车牌号,多个用逗号隔开 // "pageNo": 1, // "pageSize": 1000, // } // result := sv.hikUtil.Post(url, reqBody) // if result.Code == reqUtil.HikResult_Success { // rb, err := json.Marshal(result.Data) // if err != nil { // fmt.Println("hik find spaceNo 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 { // pi := models.PosInfo { // SpaceNo: s.SpaceNo, // PosNo: "", // State: s.State, // PlateNo: s.PlateNos, // } // if v,ok := models.SpaceNo2Pos[s.SpaceNo];ok { // pi.PosNo = v // } // resultList = append(resultList, pi) // } // } // } //} return resultList } func (sv *CarService) BindCarSpace() bool { url := "/api/pms/v1/parking_space/car_bind/add" reqBody := map[string]interface{} { "spaceNos": "", //绑定的车位集 "floorSyscode": "",//楼层唯一标识码 "plateNos": "", //绑定的车牌集合,多个用逗号隔开 } fmt.Println(url, reqBody) return true }