From c3d3167e6215210ec01a7c8c19c85f643a6fc833 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=90=E6=B6=9B?= Date: Mon, 15 Aug 2022 09:58:54 +0800 Subject: [PATCH] =?UTF-8?q?feat(user):=E5=A2=9E=E5=8A=A0=E7=94=9F=E6=88=90?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E5=90=8D=E7=A7=B0=E7=9A=84=E6=8B=BC=E9=9F=B3?= =?UTF-8?q?=E7=BC=A9=E5=86=99=EF=BC=8C=E5=B9=B6=E6=8F=90=E4=BE=9B=E5=B8=A6?= =?UTF-8?q?=E6=9C=89=E9=99=90=E5=88=B6=E6=9D=A1=E6=95=B0=E7=9A=84=E4=BC=81?= =?UTF-8?q?=E4=B8=9A=E6=A3=80=E7=B4=A2=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- controller/user.go | 12 ++++++++++++ go.mod | 1 + go.sum | 2 ++ service/user.go | 34 ++++++++++++++++++++++++++++++++++ 4 files changed, 49 insertions(+) diff --git a/controller/user.go b/controller/user.go index 85af316..c4505f2 100644 --- a/controller/user.go +++ b/controller/user.go @@ -37,6 +37,7 @@ func InitializeUserController(router *gin.Engine) { UserController.Router.GET("/account/:uid", security.MustAuthenticated, UserController.GetUserDetail) UserController.Router.POST("/enterprise", security.OPSAuthorize, UserController.CreateEnterpriseAccount) UserController.Router.PUT("/account/:uid", security.OPSAuthorize, UserController.ModifyAccountDetail) + UserController.Router.GET("/enterprise/quick/search", security.OPSAuthorize, UserController.QuickSearchEnterprise) } type LoginFormData struct { @@ -346,3 +347,14 @@ func (_UserController) ModifyAccountDetail(c *gin.Context) { } result.Success("指定用户的信息已经更新。") } + +func (_UserController) QuickSearchEnterprise(c *gin.Context) { + result := response.NewResult(c) + keyword := c.Query("keyword") + searchResult, err := service.UserService.SearchLimitUsers(keyword, 6) + if err != nil { + result.Error(http.StatusInternalServerError, err.Error()) + return + } + result.Json(http.StatusOK, "已查询到存在符合条件的企业", gin.H{"users": searchResult}) +} diff --git a/go.mod b/go.mod index a8d79bc..055f02e 100644 --- a/go.mod +++ b/go.mod @@ -35,6 +35,7 @@ require ( github.com/mitchellh/mapstructure v1.5.0 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect + github.com/mozillazg/go-pinyin v0.19.0 // indirect github.com/pelletier/go-toml v1.9.5 // indirect github.com/pelletier/go-toml/v2 v2.0.2 // indirect github.com/spf13/afero v1.8.2 // indirect diff --git a/go.sum b/go.sum index 0d3a8a6..754290d 100644 --- a/go.sum +++ b/go.sum @@ -385,6 +385,8 @@ github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lN github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= +github.com/mozillazg/go-pinyin v0.19.0 h1:p+J8/kjJ558KPvVGYLvqBhxf8jbZA2exSLCs2uUVN8c= +github.com/mozillazg/go-pinyin v0.19.0/go.mod h1:iR4EnMMRXkfpFVV5FMi4FNB6wGq9NV6uDWbUuPhP4Yc= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg= github.com/nats-io/jwt v0.3.2/go.mod h1:/euKqTS1ZD+zzjYrY7pseZrTtWQSjujC7xjPc8wL6eU= diff --git a/service/user.go b/service/user.go index b6bcda8..3088af2 100644 --- a/service/user.go +++ b/service/user.go @@ -10,9 +10,12 @@ import ( "electricity_bill_calc/repository" "electricity_bill_calc/utils" "fmt" + "log" + "strings" "time" "github.com/google/uuid" + "github.com/mozillazg/go-pinyin" "xorm.io/builder" ) @@ -193,6 +196,17 @@ func (u _UserService) CreateUser(user *model.User, detail *model.UserDetail) (st user.Password = fmt.Sprintf("%x", hash.Sum(nil)) user.ResetNeeded = true + if detail.Name != nil { + abbr := pinyin.Pinyin(*detail.Name, pinyin.NewArgs()) + var abbrCollect = make([]string, 0) + for _, a := range abbr { + abbrCollect = append(abbrCollect, a[0][0:1]) + } + finalAbbr := strings.Join(abbrCollect, "") + detail.Abbr = &finalAbbr + log.Printf("[service] [debug] detail: %v", detail) + } + tx := global.DBConn.NewSession() defer tx.Close() if err := tx.Begin(); err != nil { @@ -229,3 +243,23 @@ func (u _UserService) SwitchUserState(uid string, enabled bool) error { _, err = global.DBConn.ID(uid).Cols("enabled").Update(newStateUser) return err } + +func (_UserService) SearchLimitUsers(keyword string, limit int) ([]model.JoinedUserDetail, error) { + var users = make([]model.JoinedUserDetail, 0) + err := global.DBConn. + Table("user_detail").Alias("d"). + Join("INNER", []string{"user", "u"}, "d.id=u.id"). + Where( + builder.NewCond(). + Or(builder.Like{"u.username", keyword}). + Or(builder.Like{"d.name", keyword}). + Or(builder.Like{"d.abbr", keyword})). + And(builder.Eq{"u.type": 0}). + Asc("u.created_at"). + Limit(limit). + Find(&users) + if err != nil { + return make([]model.JoinedUserDetail, 0), err + } + return users, nil +}