From dbc843d0b37f786fb816131bcc7ebca86dbe72e9 Mon Sep 17 00:00:00 2001
From: liuxiaolong <liuxiaolong@aiotlink.com>
Date: 星期四, 06 八月 2020 09:58:46 +0800
Subject: [PATCH] add crossRecord

---
 service/carService.go |  323 +++++++++++++++++++++++++++++++++++++++++++----------
 1 files changed, 263 insertions(+), 60 deletions(-)

diff --git a/service/carService.go b/service/carService.go
index 84f1ecb..b813db6 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"
@@ -22,25 +23,27 @@
 	}
 }
 
-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 {
@@ -73,8 +76,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)
@@ -127,7 +128,6 @@
 		}
 		return remainList
 	}
-	fmt.Println("result:", result)
 	return nil
 }
 
@@ -151,70 +151,81 @@
 	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)
+	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: "",
-		})
 	}
-
+	//bindCars := strings.Join(myPlateNos, ",")
 	//鍏堟煡杞﹀簱鍞竴鏍囪瘑
 	//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"
+		//for _,p := range parkList {
+			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 {
+					isMine := false
+					if _,exist := myPlateNosMap[s.PlateNos]; exist {
+						isMine = true
+					}
+					pi := models.PosInfo {
+						SpaceNo: s.SpaceNo,
+						PosNo: "",
+						State: s.State,
+						PlateNo: s.PlateNos,
+						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 +233,196 @@
 	}
 	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 (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": 100,
+		"personIds": personId,
+	}
+	pageResult := sv.getHikPageResult(url, reqBody)
+	if pageResult ==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
+		}
+	}
+
+	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