From 7aa0acccfcd2a078c7ca163f4bd8fb4b71600aae Mon Sep 17 00:00:00 2001
From: liuxiaolong <liuxiaolong@aiotlink.com>
Date: 星期一, 27 七月 2020 19:08:38 +0800
Subject: [PATCH] use hik data
---
models/car.go | 20 ++++--
service/carService.go | 106 ++++++++++++++++-------------------
controllers/car.go | 37 ++++++------
3 files changed, 81 insertions(+), 82 deletions(-)
diff --git a/controllers/car.go b/controllers/car.go
index a92440e..56c179b 100644
--- a/controllers/car.go
+++ b/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)
}
diff --git a/models/car.go b/models/car.go
index 9c9a9c1..91caf63 100644
--- a/models/car.go
+++ b/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 {
diff --git a/service/carService.go b/service/carService.go
index 84f1ecb..3a6788a 100644
--- a/service/carService.go
+++ b/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
}
--
Gitblit v1.8.0