package service
|
|
import (
|
reqUtil "car-service/extend/util"
|
"car-service/models"
|
"encoding/json"
|
"fmt"
|
"github.com/astaxie/beego"
|
"strconv"
|
)
|
type CarService struct {
|
hikUtil *reqUtil.HikHttpUtil
|
}
|
|
func NewCarService() *CarService {
|
return &CarService{
|
hikUtil: &reqUtil.HikHttpUtil{
|
AppKey: hikAppKey,
|
AppSecret: hikAppSecret,
|
ReqHost: beego.AppConfig.String("hikUrl"),
|
},
|
}
|
}
|
|
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
|
}
|