修改登录、管理员详情、对接销售服务

This commit is contained in:
2026-08-28 16:03:06 +08:00
parent 914a11d05a
commit 3759433495
6 changed files with 152 additions and 12 deletions
+8
View File
@@ -2,6 +2,11 @@ package dao
import "lone-services/pkg/utils"
const (
AdminTypeAdmin = 2
AdminTypeSale = 1
)
// Admin 公司内部人员表
type Admin struct {
Id int64 `gorm:"column:id;type:int(11);primary_key;AUTO_INCREMENT;comment:ID" json:"id"`
@@ -53,6 +58,9 @@ type AdminInfo struct {
Type uint8 `json:"type" gorm:"type"` // 1:销售,2:管理员
SaleId int64 `json:"sale_id" gorm:"sale_id"` // 销售ID
FailNumber int `gorm:"column:fail_number;type:tinyint(2);default:0;comment:连续登录失败次数" json:"fail_number"`
SaleName string `json:"sale_name" gorm:"-"`
GroupId int64 `json:"group_id" gorm:"-"`
GroupName string `json:"group_name" gorm:"-"`
}
type AdminInfoRet struct {
+14 -9
View File
@@ -3,15 +3,20 @@ package dao
import "lone-services/pkg/utils"
type JwtInfo struct {
Id int64 `gorm:"column:id;type:int(11);primary_key;AUTO_INCREMENT" json:"id"`
Avatar string `gorm:"column:avatar;type:varchar(255);comment:头像" json:"avatar"`
Name string `gorm:"column:name;type:varchar(30);comment:真实姓名;NOT NULL" json:"name"`
Phone string `gorm:"column:phone;type:char(12);comment:电话" json:"phone"`
Email string `gorm:"column:email;type:varchar(255);comment:邮箱" json:"email"`
LastTime utils.CustomTime `gorm:"column:last_time;type:datetime;comment:最后一次登录时间" json:"last_time"`
Time int `json:"time"`
Roles []JwtInfoServices `json:"roles"`
Refresh string `json:"refresh"`
Id int64 `gorm:"column:id;type:int(11);primary_key;AUTO_INCREMENT" json:"id"`
Avatar string `gorm:"column:avatar;type:varchar(255);comment:头像" json:"avatar"`
Name string `gorm:"column:name;type:varchar(30);comment:真实姓名;NOT NULL" json:"name"`
Phone string `gorm:"column:phone;type:char(12);comment:电话" json:"phone"`
Email string `gorm:"column:email;type:varchar(255);comment:邮箱" json:"email"`
LastTime utils.CustomTime `gorm:"column:last_time;type:datetime;comment:最后一次登录时间" json:"last_time"`
Time int `json:"time"`
Roles []JwtInfoServices `json:"roles"`
Refresh string `json:"refresh"`
SaleId int64 `json:"sale_id" gorm:"sale_id"` // 销售ID
Type uint8 `json:"type" gorm:"type"` // 销售ID
SaleName string `json:"sale_name" gorm:"-"`
GroupId int64 `json:"group_id" gorm:"-"`
GroupName string `json:"group_name" gorm:"-"`
}
type JwtOutInfo struct {
@@ -5,6 +5,7 @@ import (
"lone-services/pkg/modelbase"
"lone-services/pkg/utils"
admin "lone-services/rpc/admin/pb"
sale "lone-services/rpc/sale/pb"
"lone-services/services/admin/internal/dao"
"lone-services/services/admin/internal/model"
"lone-services/services/admin/internal/svc"
@@ -57,6 +58,24 @@ func (l *AdminInfoLogic) AdminInfo(in *admin.AdminInfoRequest) (*admin.Response,
roles = append(roles, r)
}
}
if info.Type == dao.AdminTypeSale {
cli, err := svc.GetRpcClient(l.svcCtx.SaleSvcName)
if err != nil {
logx.Errorf("get rpc client err: %v", err)
return l.fail(utils.ErrorInternalServer)
}
saleClient := sale.NewSaleClient(cli.Conn())
saleInfo, err := saleClient.InfoInternal(context.Background(), &sale.InfoReq{Id: info.SaleId})
if err != nil {
logx.Errorf("get sale err: %v", err)
return l.fail(utils.ErrorInternalServer)
}
info.GroupName = saleInfo.Group.Name
info.GroupId = saleInfo.GroupId
info.SaleName = saleInfo.Name
}
retData := dao.AdminInfoRet{
AdminInfo: info,
Roles: roles,
@@ -6,6 +6,7 @@ import (
"lone-services/pkg/redis"
"lone-services/pkg/utils"
admin "lone-services/rpc/admin/pb"
sale "lone-services/rpc/sale/pb"
"lone-services/services/admin/internal/dao"
"lone-services/services/admin/internal/model"
"lone-services/services/admin/internal/svc"
@@ -69,10 +70,30 @@ func (l *LoginLogic) Login(in *admin.LoginRequest) (*admin.Response, error) {
Id: info.Id,
Name: info.Name,
Email: info.Email,
Type: info.Type,
Avatar: info.Avatar,
LastTime: utils.Now(),
}
if info.Type == dao.AdminTypeSale {
cli, err := svc.GetRpcClient(l.svcCtx.SaleSvcName)
if err != nil {
logx.Errorf("get rpc client err: %v", err)
return l.fail(utils.ErrorInternalServer)
}
saleClient := sale.NewSaleClient(cli.Conn())
saleInfo, err := saleClient.InfoInternal(context.Background(), &sale.InfoReq{Id: info.SaleId})
if err != nil {
logx.Errorf("get sale err: %v", err)
return l.fail(utils.ErrorInternalServer)
}
data.GroupName = saleInfo.Group.Name
data.GroupId = saleInfo.GroupId
data.SaleId = saleInfo.Id
data.SaleName = saleInfo.Name
}
data.Phone, _ = utils.DecryptPhone(info.Phone)
retData := dao.Token{
+77 -3
View File
@@ -1,22 +1,96 @@
package svc
import (
"fmt"
"lone-services/pkg/discovery"
"lone-services/pkg/utils"
"lone-services/services/admin/internal/config"
"net"
"strconv"
"sync"
"time"
"github.com/zeromicro/go-zero/core/logx"
"github.com/zeromicro/go-zero/zrpc"
"gorm.io/gorm"
)
type rpcClientCacheEntry struct {
cli zrpc.Client
target string
expireAt time.Time
}
const rpcClientCacheTTL = 30 * time.Second //缓存过期时间
var (
rpcCacheLock sync.Mutex
rpcCache = make(map[string]*rpcClientCacheEntry)
)
func GetRpcClient(serviceName string) (zrpc.Client, error) {
if serviceName == utils.StringEmpty {
err := fmt.Errorf("rpc serviceName is empty")
logx.Error(err)
return nil, err
}
cacheKey := serviceName
rpcCacheLock.Lock()
entry, ok := rpcCache[cacheKey]
if ok && time.Now().Before(entry.expireAt) {
rpcCacheLock.Unlock()
return entry.cli, nil
}
delete(rpcCache, cacheKey)
rpcCacheLock.Unlock()
inst, err := discovery.Pick(serviceName)
if err != nil {
err = fmt.Errorf("discovery pick %s failed: %w", serviceName, err)
logx.Error(err)
return nil, err
}
target := net.JoinHostPort(inst.IP, strconv.FormatUint(inst.Port, utils.NumberTen))
cli := zrpc.MustNewClient(zrpc.RpcClientConf{
Target: target,
Timeout: utils.RpcTimeOut, //rpc调用超时5s
})
rpcCacheLock.Lock()
rpcCache[cacheKey] = &rpcClientCacheEntry{
cli: cli,
target: target,
expireAt: time.Now().Add(rpcClientCacheTTL),
}
rpcCacheLock.Unlock()
return cli, nil
}
type ServiceContext struct {
Config config.Config
DB *gorm.DB
Prefix string
SaleSvcName string //服务名
}
func NewServiceContext(c config.Config, db *gorm.DB) *ServiceContext {
//启动仅读取配置,不建立rpc连接 多个服务就多个
SaleSvc := utils.GetConfigString("services.sale")
if SaleSvc == utils.StringEmpty {
logx.Error("config services.sale empty")
}
return &ServiceContext{
Config: c,
DB: db,
Prefix: utils.GetConfigString("mysql.prefix"),
Config: c,
DB: db,
Prefix: utils.GetConfigString("mysql.prefix"),
SaleSvcName: SaleSvc,
}
}