liuxiaolong
2020-07-27 7aa0acccfcd2a078c7ca163f4bd8fb4b71600aae
use hik data
3个文件已修改
163 ■■■■ 已修改文件
controllers/car.go 37 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
models/car.go 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service/carService.go 106 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
controllers/car.go
@@ -21,30 +21,31 @@
    ticker := time.NewTicker(3 * time.Second)
    prePushLeft := 0
    sv := service.NewCarService()
    initCacheM := false
    for {
        select {
            case <-ticker.C:
                hikSta := sv.Statistic()
                left := hikSta.Left
                fmt.Println("realTime left:", left)
                hikSta, flag := sv.Statistic()
                if flag {
                    left := hikSta.Left
                    fmt.Println("realTime left:", left)
                    if !initCacheM {
                        models.SetSpaceNo(hikSta.TotalPermPlace)
                        initCacheM = true
                    }
                    if left <=10 && left != prePushLeft {
                        go func() {
                            message := fmt.Sprintf("%s 剩余车位:%d个", time.Now().Format("2006-01-02 15:04:05"), left)
                            b, e := service.Push("育英智慧停车", message)
                //m := time.Now().Minute()
                //i := m % 20
                //left := 80
                //if i == 0 { //整数分钟
                //    left = m / 10
                //}
                if left <=10 && left != prePushLeft {
                    go func() {
                        message := fmt.Sprintf("%s 剩余车位:%d个", time.Now().Format("2006-01-02 15:04:05"), left)
                        b, e := service.Push("育英智慧停车", message)
                            prePushLeft = left
                        prePushLeft = left
                        fmt.Println("b:", b,"e:",e, "message:", message)
                    }()
                            fmt.Println("b:", b,"e:",e, "message:", message)
                        }()
                    }
                    updateSpaceLeft(left)
                }
                updateSpaceLeft(left)
        default:
            time.Sleep(500 * time.Millisecond)
        }
models/car.go
@@ -1,6 +1,9 @@
package models
import "strconv"
import (
    "strconv"
    "sync"
)
var (
    SpaceNo2Pos map[string]string  //海康车位号-页面配置编号
@@ -10,15 +13,20 @@
func init() {
    SpaceNo2Pos = make(map[string]string)
    Pos2SpaceNo = make(map[string]string)
    for i:=1;i<100;i++ {
        posNo := "A"+strconv.Itoa(i)
        SpaceNo2Pos[strconv.Itoa(i)] = posNo
        Pos2SpaceNo[posNo] = strconv.Itoa(i)
}
var lock sync.RWMutex
func SetSpaceNo(totalPermSpace int) {
    lock.Lock()
    defer lock.Unlock()
    for i:=0;i<totalPermSpace;i++{
        SpaceNo2Pos[strconv.Itoa(i+1)] = strconv.Itoa(i+1)
    }
}
type CarStatistic struct {
    Left     int         `json:"left"`
    TotalPermPlace         int         `json:"totalPermPlace"`
    Left                   int         `json:"left"`
}
type PosInfo struct {
service/carService.go
@@ -6,7 +6,6 @@
    "encoding/json"
    "fmt"
    "github.com/astaxie/beego"
    "strconv"
)
type CarService struct {
    hikUtil *reqUtil.HikHttpUtil
@@ -22,25 +21,29 @@
    }
}
func (sv *CarService) Statistic() *models.CarStatistic {
func (sv *CarService) Statistic() (*models.CarStatistic, bool) {
    m := models.CarStatistic{
        Left: 0,
        TotalPermPlace: 0,
        Left:           0,
    }
    parkList := sv.getHikParkList() //先查有几个停车场
    fmt.Println("parkList:", parkList)
    flag := false
    if parkList != nil {
        flag = true
        for _,p := range parkList {
            remainList := sv.getRemainSpaceNum(p.ParkIndexCode)
            fmt.Println("remainList:", remainList)
            if remainList != nil {
                for _,r := range remainList {
                    m.Left += r.LeftPlace
                    m.TotalPermPlace += r.LeftPermPlace
                }
            }
        }
    }
    return &m
    return &m, flag
}
type ParkInfo struct {
@@ -153,62 +156,49 @@
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)
    //            }
    //        }
    //    }
    //}
    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
}