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