From c6b1cadc0214c6791a5c5bcc62ab57601e38f457 Mon Sep 17 00:00:00 2001
From: liuxiaolong <liuxiaolong@aiotlink.com>
Date: 星期四, 13 八月 2020 11:31:08 +0800
Subject: [PATCH] add db restriction
---
service/carService.go | 403 +++++++++++++++++++++++++++++++++++++++++++++------------
1 files changed, 316 insertions(+), 87 deletions(-)
diff --git a/service/carService.go b/service/carService.go
index 84f1ecb..3fdff76 100644
--- a/service/carService.go
+++ b/service/carService.go
@@ -3,6 +3,7 @@
import (
reqUtil "car-service/extend/util"
"car-service/models"
+ "car-service/vo"
"encoding/json"
"fmt"
"github.com/astaxie/beego"
@@ -15,32 +16,29 @@
func NewCarService() *CarService {
return &CarService{
hikUtil: &reqUtil.HikHttpUtil{
- AppKey: hikAppKey,
- AppSecret: hikAppSecret,
+ AppKey: beego.AppConfig.String("hikAppKey"),
+ AppSecret: beego.AppConfig.String("hikAppSecret"),
ReqHost: beego.AppConfig.String("hikUrl"),
},
}
}
-func (sv *CarService) Statistic() *models.CarStatistic {
+func (sv *CarService) Statistic() (*models.CarStatistic, bool) {
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
- }
- }
- }
+ TotalPlace: 0,
+ Left: 0,
}
- return &m
+ remainList := sv.getRemainSpaceNum("")
+ if remainList != nil {
+ for _,r:=range remainList {
+ m.TotalPlace += r.TotalPlace
+ m.Left += r.LeftPlace
+ }
+ return &m, true
+ } else {
+ return &m, false
+ }
}
type ParkInfo struct {
@@ -50,11 +48,6 @@
CreateTime string `json:"createTime"`
UpdateTime string `json:"updateTime"`
}
-
-var (
- hikAppKey = "27107808"
- hikAppSecret = "BEQiCoBTYcJX2d4KzbVK"
-)
//鑾峰彇娴峰悍鍋滆溅搴撳垪琛�
@@ -73,8 +66,6 @@
if err !=nil {
fmt.Println("marshal result.data err:", err)
return nil
- } else {
- fmt.Println("parkList:", result.Data)
}
var pList []ParkInfo
err = json.Unmarshal(dbytes, &pList)
@@ -93,12 +84,12 @@
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"` //鍋滆溅搴撻绾﹁溅浣嶅墿浣欐暟
+ 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 {
@@ -127,7 +118,6 @@
}
return remainList
}
- fmt.Println("result:", result)
return nil
}
@@ -147,74 +137,88 @@
PlateNoPicUri string `json:"plateNoPicUri"`
AswSyscode string `json:"aswSyscode"`
PlateNos string `json:"plateNos"`
+ PlateNo string `json:"plateNo"`
AlarmPlateNos string `json:"alarmPlateNos"`
SpaceType string `json:"spaceType"`
}
-func (sv *CarService) FindSpaceNo() models.PosResult {
+func (sv *CarService) FindSpaceNo(userId string) 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
+ var myPlateNosMap = make(map[string]string)
+ if userId !="" {
+ vehicles := sv.GetVehicleListByPerson(userId)
+ if vehicles != nil {
+ for _,veh := range vehicles {
+ myPlateNosMap[veh.PlateNo] = veh.PlateNo
+ //myPlateNos = append(myPlateNos, veh.PlateNo)
+ }
}
- 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)
- // }
- // }
- // }
- //}
+ url := "/artemis/api/pms/v1/parkingSpace/spaceNo"
+
+ reqBody := map[string]interface{} {
+ //"parkSyscode": p.ParkIndexCode,//鍋滆溅搴撳敮涓�鏍囪瘑
+ //"state": 1, //杞︿綅鐘舵�侊紝0锛氱┖闂诧紝1锛氬仠杞�
+ //"bindCars": bindCars,
+ "pageNo": 1,
+ "pageSize": 1000,
+ }
+ pageResult := sv.getHikPageResult(url, reqBody)
+ //fmt.Println("findSpaceNo pageResult:", pageResult)
+ if pageResult != nil {
+ rb, err := json.Marshal(pageResult.List)
+ if err != nil {
+ fmt.Println("marshal pageResult.List 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,
+ }
+ if s.PlateNo != "" {
+ pi.PlateNo = s.PlateNo
+ } else if s.PlateNos != "" {
+ pi.PlateNo = s.PlateNos
+ }
+ isMine := false
+ if _,exist := myPlateNosMap[pi.PlateNo]; exist {
+ isMine = true
+ }
+ pi.IsMine = isMine
+ if v,ok := models.SpaceNo2Pos[s.SpaceNo];ok {
+ pi.PosNo = v
+ }
+ resultList = append(resultList, pi)
+ }
+ }
+ if len(resultList) == 0 {
+ for i:=1;i<91;i++ {
+ pi := models.PosInfo {
+ SpaceNo: strconv.Itoa(i),
+ PosNo: "",
+ State: 1,
+ PlateNo: "",
+ IsMine: false,
+ }
+ resultList = append(resultList, pi)
+ }
+ }
return resultList
}
func (sv *CarService) BindCarSpace() bool {
- url := "/api/pms/v1/parking_space/car_bind/add"
+ url := "/artemis/api/pms/v1/parking_space/car_bind/add"
reqBody := map[string]interface{} {
"spaceNos": "", //缁戝畾鐨勮溅浣嶉泦
"floorSyscode": "",//妤煎眰鍞竴鏍囪瘑鐮�
@@ -222,4 +226,229 @@
}
fmt.Println(url, reqBody)
return true
+}
+
+type HikPerson struct {
+ PersonId string `json:"personId"`
+ PersonName string `json:"personName"`
+ Gender int `json:"gender"`
+ PhoneNo string `json:"phoneNo"`
+ JobNo string `json:"jobNo"`
+ OrgIndexCode string `json:"orgIndexCode"`
+ CertificateType string `json:"certificateCode"`
+ CertificateNo string `json:"certificateNo"`
+ CreateTime string `json:"createTime"`
+ UpdateTime string `json:"updateTime"`
+ OrgPath string `json:"orgPath"`
+ OrgPathName string `json:"orgPathName"`
+ PersonPhone []HikPersonPhoto `json:"personPhoto"`
+}
+
+type HikPersonPhoto struct {
+ PersonPhotoIndexCode string `json:"personPhotoIndexCode"`
+ PicUri string `json:"picUri"`
+ ServerIndexCode string `json:"serverIndexCode"`
+ PersonId string `json:"personId"`
+}
+
+func (sv *CarService) GetHikPersonList() []HikPerson {
+ url := "/artemis/api/resource/v2/person/personList"
+ pageSize := 1000
+ reqBody := map[string]interface{} {
+ "pageNo": 1,
+ "pageSize": pageSize,
+ }
+ pageResult := sv.getHikPageResult(url, reqBody)
+ if pageResult == nil {
+ return nil
+ }
+ b,err := json.Marshal(pageResult.List)
+ if err != nil {
+ fmt.Println("marshal pageResult.List err:", err)
+ return nil
+ }
+ var list []HikPerson
+ if err = json.Unmarshal(b, &list);err != nil {
+ fmt.Println("unmarshal err:", err)
+ return nil
+ }
+ if pageResult.Total > pageSize {
+ times := pageResult.Total / pageSize
+ if pageResult.Total % pageSize > 0 {
+ times++
+ }
+ for i:=1;i<times;i++ {
+ tpr := sv.getHikPageResult(url, map[string]interface{}{
+ "pageNo": i+1,
+ "pageSize": pageSize,
+ })
+ if tpr != nil {
+ tb,e := json.Marshal(tpr.List)
+ if e != nil {
+ fmt.Println("marshal tpr.List err:", e)
+ continue
+ }
+ var tprList []HikPerson
+ if e = json.Unmarshal(tb, &tprList);e ==nil {
+ list = append(list, tprList...)
+ } else {
+ fmt.Println("unmarshal tprList err:", e)
+ }
+ } else {
+ fmt.Println("total:", pageResult.Total, "tpr is nil")
+ }
+ }
+ }
+
+ return list
+}
+
+func SyncHikPerson() int {
+ syncCount := 0
+ sv := NewCarService()
+ hikPersons := sv.GetHikPersonList()
+ if hikPersons != nil && len(hikPersons) >0 {
+ var u models.User
+ idMap := u.GetAllMap()
+ hikPM := make(map[string]string)
+ for _,hp := range hikPersons {
+ hikPM[hp.PersonId] = hp.PhoneNo
+ if sp,ok := idMap[hp.PersonId];ok {
+ if sp.PhoneNum != hp.PhoneNo {
+ u.UpdatePhoneNum(hp.PhoneNo, hp.PersonId)
+ syncCount++
+ }
+ }
+ }
+ for k,_ := range idMap {
+ if _,in := hikPM[k];!in {
+ u.Delete(k)
+ syncCount++
+ }
+ }
+
+ }
+ return syncCount
+}
+
+func (sv *CarService) getHikPageResult(url string, reqBody map[string]interface{}) *vo.HikPageResult {
+ fmt.Println(url, reqBody)
+ result := sv.hikUtil.Post(url, reqBody)
+ if result.Code == reqUtil.HikResult_Success {
+ b, err := json.Marshal(result.Data)
+ if err == nil {
+ var pageResult vo.HikPageResult
+ if err = json.Unmarshal(b, &pageResult); err == nil {
+ return &pageResult
+ } else {
+ fmt.Println("unmarshal pageResult err:", err)
+ }
+ } else {
+ fmt.Println("marshal result.Data err:", err)
+ }
+ } else {
+ fmt.Println("result:", result)
+ }
+ return nil
+}
+
+type HikVehicle struct {
+ VehicleId string `json:"vehicleId"`
+ PlateNo string `json:"plateNo"`
+ PersonId string `json:"personId"`
+ RegionIndexCode string `json:"regionIndexCode"`
+ PlateType int `json:"plateType"`
+ PlateColor int `json:"plateColor"`
+ VehicleType int `json:"vehicleType"`
+ VehicleColor int `json:"vehicleColor"`
+ Description string `json:"description"`
+ CreateTime string `json:"createTime"`
+ UpdateTime string `json:"updateTime"`
+ RegionName string `json:"regionName"`
+ RegionPath string `json:"regionPath"`
+ RegionPathName string `json:"regionPathName"`
+ IsBandPerson int `json:"isBandPerson"`
+ PersonName string `json:"personName"`
+ OrgPath string `json:"orgPath"`
+ OrgPathName string `json:"orgPathName"`
+}
+
+//鑾峰彇鎸囧畾浜哄憳鐨勮溅杈嗚溅鐗屼俊鎭�
+func (sv *CarService) GetVehicleListByPerson(personId string) []HikVehicle {
+ url := "/artemis/api/resource/v2/vehicle/advance/vehicleList"
+ reqBody := map[string]interface{} {
+ "pageNo": 1,
+ "pageSize": 1000,
+ }
+ if personId != "" {
+ reqBody["personIds"] = personId
+ }
+ pageResult := sv.getHikPageResult(url, reqBody)
+ if pageResult ==nil {
+ fmt.Println("GetVehicleListByPerson pageResult is nil")
+ return nil
+ }
+
+ b, err := json.Marshal(pageResult.List)
+ if err == nil {
+ var list []HikVehicle
+ if err = json.Unmarshal(b, &list);err == nil {
+ return list
+ } else {
+ fmt.Println("unmarshal err:", err)
+ }
+ }
+
+ return nil
+}
+
+//杩囪溅璁板綍
+type CrossRecord struct {
+ CrossRecordSyscode string `json:"crossRecordSyscode"`
+ parkSyscode string `json:"parkSyscode"`
+ ParkName string `json:"parkName"`
+ EntranceSyscode string `json:"entranceSyscode"`
+ EntranceName string `json:"entranceName"`
+ RoadwaySyscode string `json:"roadwaySyscode"`
+ RoadwayName string `json:"roadwayName"`
+ VehicleOut int `json:"vehicleOut"`
+ ReleaseMode int `json:"releaseMode"`
+ ReleaseResult int `json:"releaseResult"`
+ ReleaseWay int `json:"releaseWay"`
+ ReleaseReason int `json:"releaseReason"`
+ PlateNo string `json:"plateNo"`
+ CardNo string `json:"cardNo"`
+ //VehicleColor int `json:"vehicleColor"`
+ //VehicleType int `json:"vehicleType"`
+ //PlateColor int `json:"plateColor"`
+ //PlateType int `json:"plateType"`
+ //CarCategory string `json:"carCategory"`
+ //CarCategoryName string `json:"carCategoryName"`
+ VehiclePicUri string `json:"vehiclePicUri"`
+ PlateNoPicUri string `json:"plateNoPicUri"`
+ FacePicUri string `json:"facePicUri"`
+ AswSyscode string `json:"aswSyscode"`
+ CrossTime string `json:"crossTime"`
+ CreateTime string `json:"createTime"`
+}
+
+func (sv *CarService) CrossRecords() []CrossRecord {
+ url := "/artemis/api/pms/v1/crossRecords/page"
+ reqBody := map[string]interface{} {
+ "pageNo": 1,
+ "pageSize": 100,
+ }
+ pageResult := sv.getHikPageResult(url, reqBody)
+ if pageResult ==nil {
+ return nil
+ }
+ b, err := json.Marshal(pageResult.List)
+ if err == nil {
+ var list []CrossRecord
+ if err = json.Unmarshal(b, &list);err == nil {
+ return list
+ }
+ }
+
+ return nil
}
\ No newline at end of file
--
Gitblit v1.8.0