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