From c92534229c83436ffe9e6752209200dd70b77808 Mon Sep 17 00:00:00 2001
From: wangpengfei <274878379@qq.com>
Date: 星期四, 17 八月 2023 19:19:44 +0800
Subject: [PATCH] add

---
 conf/aps-crm.json |    3 +
 service/user.go   |   31 +++++++++++----
 api/v1/product.go |    6 +++
 model/user.go     |   10 +++++
 conf/config.go    |    3 +
 main.go           |    8 ++++
 api/v1/city.go    |    5 --
 7 files changed, 51 insertions(+), 15 deletions(-)

diff --git a/api/v1/city.go b/api/v1/city.go
index 2c7eeab..c7ef526 100644
--- a/api/v1/city.go
+++ b/api/v1/city.go
@@ -90,11 +90,6 @@
 		return
 	}
 
-	err := userService.SyncUserInfo()
-	if err != nil {
-		return
-	}
-
 	ctx.OkWithDetailed(response.CityResponse{
 		List: cities,
 	})
diff --git a/api/v1/product.go b/api/v1/product.go
index f34eb07..0b51826 100644
--- a/api/v1/product.go
+++ b/api/v1/product.go
@@ -31,6 +31,12 @@
 	}
 }
 
+func CloseProductServiceConn() {
+	if productServiceConn != nil {
+		productServiceConn.Close()
+	}
+}
+
 // List
 //
 // @Tags		浜у搧
diff --git a/conf/aps-crm.json b/conf/aps-crm.json
index a616fdd..60a7b07 100644
--- a/conf/aps-crm.json
+++ b/conf/aps-crm.json
@@ -48,7 +48,8 @@
     "Issuer": "qmPlus"
   },
   "GrpcServiceAddr": {
-    "Aps": "192.168.20.120:9091"
+    "Aps": "192.168.20.120:9091",
+    "Admin": "192.168.20.118:50051"
   }
 }
 
diff --git a/conf/config.go b/conf/config.go
index 7626b25..2a9a3eb 100644
--- a/conf/config.go
+++ b/conf/config.go
@@ -59,7 +59,8 @@
 	}
 
 	GrpcServiceAddr struct {
-		Aps string // jwt绛惧悕
+		Aps   string // aps鏈嶅姟鍦板潃
+		Admin string // admin鏈嶅姟鍦板潃
 	}
 
 	config struct {
diff --git a/main.go b/main.go
index ef7a064..0c78964 100644
--- a/main.go
+++ b/main.go
@@ -9,6 +9,7 @@
 	"aps_crm/router"
 	"aps_crm/service"
 	"fmt"
+	"github.com/robfig/cron/v3"
 	"net/http"
 	"os"
 	"os/signal"
@@ -49,6 +50,10 @@
 	go v1.InitProductServiceConn()
 	go service.InitUserConn()
 
+	c := cron.New()
+	c.AddFunc("@every 15s", service.SyncUserInfo) // 姣�15绉掑悓姝ヤ竴娆�
+	c.Start()
+
 	logx.Error(server.ListenAndServe().Error())
 }
 
@@ -57,6 +62,9 @@
 	signal.Notify(quit, syscall.SIGKILL, syscall.SIGQUIT, syscall.SIGINT, syscall.SIGTERM)
 	<-quit
 
+	v1.CloseProductServiceConn()
+	service.CloseUserConn()
+
 	logx.Infof("aps-admin exited...")
 	os.Exit(0)
 }
diff --git a/model/user.go b/model/user.go
index 69fc4fa..6cbf77f 100644
--- a/model/user.go
+++ b/model/user.go
@@ -276,3 +276,13 @@
 
 	return records, nil
 }
+
+func (slf *UserSearch) FirstOrCreate(record User) error {
+	var db = slf.build()
+
+	if err := db.FirstOrCreate(&User{}, record).Error; err != nil {
+		return fmt.Errorf("first or create err: %v, record: %+v", err, record)
+	}
+
+	return nil
+}
diff --git a/service/user.go b/service/user.go
index ad83ad2..c5a1c8e 100644
--- a/service/user.go
+++ b/service/user.go
@@ -10,6 +10,7 @@
 	"aps_crm/proto/user"
 	"context"
 	"errors"
+	"fmt"
 	"google.golang.org/grpc"
 	"google.golang.org/grpc/credentials/insecure"
 	"gorm.io/gorm"
@@ -107,20 +108,23 @@
 
 func InitUserConn() {
 	var err error
-	userConn, err = grpc.Dial(conf.Conf.GrpcServiceAddr.Aps, grpc.WithTransportCredentials(insecure.NewCredentials()))
+	userConn, err = grpc.Dial(conf.Conf.GrpcServiceAddr.Admin, grpc.WithTransportCredentials(insecure.NewCredentials()))
 	if err != nil {
 		logx.Errorf("grpc dial user service error: %v", err.Error())
 		return
 	}
-	defer userConn.Close()
 }
 
-func (userService *UserService) SyncUserInfo() (err error) {
+func CloseUserConn() {
+	if userConn != nil {
+		userConn.Close()
+	}
+}
+
+func SyncUserInfo() {
 	cli := user.NewUserServiceClient(userConn)
 
-	users := []*user.User{
-		// ... fetched users
-	}
+	var users []*user.User
 
 	ctx, cancel := context.WithTimeout(context.Background(), time.Second)
 	defer cancel()
@@ -129,7 +133,18 @@
 		logx.Fatalf("could not sync users: %v", err)
 	}
 
-	logx.Infof("Synced: %v, Message: %s", r.List, r.Message)
+	fmt.Printf("Synced: %v, Message: %s", r.List, r.Message)
 
-	return nil
+	for _, member := range r.List {
+		err = model.NewUserSearch(nil).FirstOrCreate(model.User{
+			UUID:     member.Uuid,
+			Username: member.Username,
+			UserType: constvar.UserType(member.Usertype),
+			NickName: member.Nickname,
+		})
+		if err != nil {
+			logx.Errorf("sync user error: %v", err.Error())
+			continue
+		}
+	}
 }

--
Gitblit v1.8.0