From e5197550d82cfb7a8784899fff435e96ed026ef9 Mon Sep 17 00:00:00 2001
From: liuxiaolong <liuxiaolong@aiotlink.com>
Date: 星期二, 11 八月 2020 11:20:55 +0800
Subject: [PATCH] add syncperson from hik

---
 main.go                |    8 ++++
 service/carService.go  |   16 ++++++++
 service/userService.go |   36 ++++++++++--------
 models/user.go         |   20 ++++++++++
 4 files changed, 64 insertions(+), 16 deletions(-)

diff --git a/main.go b/main.go
index 7679f46..ccff92d 100644
--- a/main.go
+++ b/main.go
@@ -4,7 +4,9 @@
 	"car-service/controllers"
 	"car-service/models"
 	_ "car-service/routers"
+	"car-service/service"
 	"github.com/astaxie/beego"
+	"github.com/robfig/cron"
 )
 
 func main() {
@@ -15,5 +17,11 @@
 	models.InitDb()
 	controllers.Schedule()
 	go controllers.ComputeSpaceLeftRealTime()
+	//姣忓ぉ鍚屾娴峰悍鏁版嵁锛岀湅浜哄憳id鏄惁鏈夊彂鐢熷彉鍖�
+	c := cron.New()
+	c.AddFunc("@daily", func() {
+		service.SyncHikPerson()
+	})
+	c.Start()
 	beego.Run()
 }
diff --git a/models/user.go b/models/user.go
index 46ee619..ff6df42 100644
--- a/models/user.go
+++ b/models/user.go
@@ -55,11 +55,31 @@
 	return all,nil
 }
 
+func (u *User) GetAllMapByPhone() map[string]User {
+	m := make(map[string]User)
+	all, _ := u.GetAllUsers()
+	if all !=nil {
+		for _,p := range all {
+			m[p.PhoneNum] = p
+		}
+	}
+	return m
+}
+
 func (u *User) Update() (int64, error) {
 	o := orm.NewOrm()
 	return o.Update(u)
 }
 
+func (u *User) SyncHikPersonId(phoneNum string, hikPersonId string) (int64, error) {
+	o := orm.NewOrm()
+	res, err := o.Raw("update sys_user set id=? where phoneNum=?", hikPersonId, phoneNum).Exec()
+	if err != nil {
+		return 0, err
+	}
+	return res.RowsAffected()
+}
+
 func Login(username, password string) bool {
 
 	return false
diff --git a/service/carService.go b/service/carService.go
index 318e706..4e2c881 100644
--- a/service/carService.go
+++ b/service/carService.go
@@ -302,6 +302,22 @@
 	return list
 }
 
+func SyncHikPerson() {
+	sv := NewCarService()
+	hikPersons := sv.GetHikPersonList()
+	if hikPersons != nil {
+		var u models.User
+		uMap := u.GetAllMapByPhone()
+		for _,hp := range hikPersons {
+			if sp,ok := uMap[hp.PhoneNo];ok {
+				if sp.Id != hp.PersonId {
+					u.SyncHikPersonId(hp.PhoneNo, hp.PersonId)
+				}
+			}
+		}
+	}
+}
+
 func (sv *CarService) getHikPageResult(url string, reqBody map[string]interface{}) *vo.HikPageResult {
 	fmt.Println(url, reqBody)
 	result := sv.hikUtil.Post(url, reqBody)
diff --git a/service/userService.go b/service/userService.go
index 237cf0d..b6eccdd 100644
--- a/service/userService.go
+++ b/service/userService.go
@@ -20,26 +20,26 @@
 	if verifyCode(phoneNum, code) {
 		carSv := NewCarService()
 
+		//鍏堝垽鏂鎵嬫満鍙锋槸鍚﹀湪娴峰悍骞冲彴涓�
+		hikPersons := carSv.GetHikPersonList()
+		found := false
+		hikPersonId := ""
+		if hikPersons != nil {
+			for _,hikP := range hikPersons {
+				if hikP.PhoneNo == phoneNum {
+					found = true
+					hikPersonId = hikP.PersonId
+				}
+			}
+		}
+		if !found {
+			return false, nil, errors.New("璇疯仈绯诲仠杞﹀満绠$悊鍛�")
+		}
+
 		var tmpUser models.User
 		err := tmpUser.SelectByPhoneNum(phoneNum)
 		fmt.Println("login err:", err)
 		if err != nil { //鐢ㄦ埛涓嶅瓨鍦�,鍒欐柊澧�
-			//鍏堝垽鏂鎵嬫満鍙锋槸鍚﹀湪娴峰悍骞冲彴涓�
-			hikPersons := carSv.GetHikPersonList()
-			found := false
-			hikPersonId := ""
-			if hikPersons != nil {
-				for _,hikP := range hikPersons {
-					if hikP.PhoneNo == phoneNum {
-						found = true
-						hikPersonId = hikP.PersonId
-					}
-				}
-			}
-			if !found {
-				return false, nil, errors.New("璇疯仈绯诲仠杞﹀満绠$悊鍛�")
-			}
-
 			u := models.User{
 				Id: hikPersonId,
 				PhoneNum: phoneNum,
@@ -71,6 +71,10 @@
 				return false, nil, errors.New("娉ㄥ唽澶辫触")
 			}
 		} else { //鐢ㄦ埛宸插瓨鍦�
+			if hikPersonId != tmpUser.Id {
+				tmpUser.Id = hikPersonId
+				tmpUser.SyncHikPersonId(tmpUser.PhoneNum, hikPersonId)
+			}
 			var plateNos = make([]string, 0)
 			hikVehicles := carSv.GetVehicleListByPerson(tmpUser.Id)
 

--
Gitblit v1.8.0