2
This commit is contained in:
@@ -12,6 +12,8 @@ import (
|
||||
"management/internal/erpserver/store"
|
||||
"management/internal/pkg/redis"
|
||||
"management/internal/pkg/session"
|
||||
|
||||
"github.com/drhin/logger"
|
||||
)
|
||||
|
||||
// IBiz 定义了业务层需要实现的方法.
|
||||
@@ -36,20 +38,22 @@ type IBiz interface {
|
||||
type biz struct {
|
||||
database store.IStore
|
||||
store db.Store
|
||||
redis redis.IRedis
|
||||
session session.ISession
|
||||
redis redis.RedisCache
|
||||
session session.Session
|
||||
logger *logger.Logger
|
||||
}
|
||||
|
||||
// 确保 biz 实现了 IBiz 接口.
|
||||
var _ IBiz = (*biz)(nil)
|
||||
|
||||
// NewBiz 创建一个 IBiz 类型的实例.
|
||||
func NewBiz(database store.IStore, store db.Store, redis redis.IRedis, session session.ISession) *biz {
|
||||
func NewBiz(database store.IStore, store db.Store, redis redis.RedisCache, session session.Session, logger *logger.Logger) *biz {
|
||||
return &biz{
|
||||
database: database,
|
||||
store: store,
|
||||
redis: redis,
|
||||
session: session,
|
||||
logger: logger,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -60,7 +64,7 @@ func (b *biz) CommonV1() commonv1.CommonBiz {
|
||||
|
||||
// SystemV1 返回一个实现了 SystemBiz 接口的实例.
|
||||
func (b *biz) SystemV1() systemv1.SystemBiz {
|
||||
return systemv1.New(b.database, b.store, b.redis, b.session)
|
||||
return systemv1.New(b.database, b.store, b.redis, b.session, b.logger)
|
||||
}
|
||||
|
||||
func (b *biz) ProjectV1() projectv1.ProjectBiz {
|
||||
|
||||
@@ -16,12 +16,12 @@ type BudgetBiz interface {
|
||||
|
||||
type budgetBiz struct {
|
||||
store db.Store
|
||||
redis redis.IRedis
|
||||
redis redis.RedisCache
|
||||
}
|
||||
|
||||
var _ BudgetBiz = (*budgetBiz)(nil)
|
||||
|
||||
func New(store db.Store, redis redis.IRedis) *budgetBiz {
|
||||
func New(store db.Store, redis redis.RedisCache) *budgetBiz {
|
||||
return &budgetBiz{
|
||||
store: store,
|
||||
redis: redis,
|
||||
|
||||
@@ -16,12 +16,12 @@ type CustomerBiz interface {
|
||||
|
||||
type customerBiz struct {
|
||||
store db.Store
|
||||
redis redis.IRedis
|
||||
redis redis.RedisCache
|
||||
}
|
||||
|
||||
var _ CustomerBiz = (*customerBiz)(nil)
|
||||
|
||||
func New(store db.Store, redis redis.IRedis) *customerBiz {
|
||||
func New(store db.Store, redis redis.RedisCache) *customerBiz {
|
||||
return &customerBiz{
|
||||
store: store,
|
||||
redis: redis,
|
||||
|
||||
@@ -22,12 +22,12 @@ type ExpenseBiz interface {
|
||||
|
||||
type expenseBiz struct {
|
||||
store db.Store
|
||||
redis redis.IRedis
|
||||
redis redis.RedisCache
|
||||
}
|
||||
|
||||
var _ ExpenseBiz = (*expenseBiz)(nil)
|
||||
|
||||
func New(store db.Store, redis redis.IRedis) *expenseBiz {
|
||||
func New(store db.Store, redis redis.RedisCache) *expenseBiz {
|
||||
return &expenseBiz{
|
||||
store: store,
|
||||
redis: redis,
|
||||
|
||||
@@ -22,12 +22,12 @@ type IncomeBiz interface {
|
||||
|
||||
type incomeBiz struct {
|
||||
store db.Store
|
||||
redis redis.IRedis
|
||||
redis redis.RedisCache
|
||||
}
|
||||
|
||||
var _ IncomeBiz = (*incomeBiz)(nil)
|
||||
|
||||
func New(store db.Store, redis redis.IRedis) *incomeBiz {
|
||||
func New(store db.Store, redis redis.RedisCache) *incomeBiz {
|
||||
return &incomeBiz{
|
||||
store: store,
|
||||
redis: redis,
|
||||
|
||||
@@ -31,12 +31,12 @@ type ProjectExpansion interface {
|
||||
|
||||
type projectBiz struct {
|
||||
store db.Store
|
||||
redis redis.IRedis
|
||||
redis redis.RedisCache
|
||||
}
|
||||
|
||||
var _ ProjectBiz = (*projectBiz)(nil)
|
||||
|
||||
func New(store db.Store, redis redis.IRedis) *projectBiz {
|
||||
func New(store db.Store, redis redis.RedisCache) *projectBiz {
|
||||
return &projectBiz{
|
||||
store: store,
|
||||
redis: redis,
|
||||
|
||||
@@ -40,12 +40,12 @@ type CategoryBiz interface {
|
||||
|
||||
type categoryBiz struct {
|
||||
store db.Store
|
||||
redis redis.IRedis
|
||||
redis redis.RedisCache
|
||||
}
|
||||
|
||||
var _ CategoryBiz = (*categoryBiz)(nil)
|
||||
|
||||
func NewCategory(store db.Store, redis redis.IRedis) *categoryBiz {
|
||||
func NewCategory(store db.Store, redis redis.RedisCache) *categoryBiz {
|
||||
return &categoryBiz{
|
||||
store: store,
|
||||
redis: redis,
|
||||
|
||||
@@ -27,12 +27,12 @@ type ConfigExpansion interface {
|
||||
|
||||
type configBiz struct {
|
||||
store db.Store
|
||||
redis redis.IRedis
|
||||
redis redis.RedisCache
|
||||
}
|
||||
|
||||
var _ ConfigBiz = (*configBiz)(nil)
|
||||
|
||||
func NewConfig(store db.Store, redis redis.IRedis) *configBiz {
|
||||
func NewConfig(store db.Store, redis redis.RedisCache) *configBiz {
|
||||
return &configBiz{
|
||||
store: store,
|
||||
redis: redis,
|
||||
|
||||
@@ -36,12 +36,12 @@ type DepartmentExpansion interface{}
|
||||
|
||||
type departmentBiz struct {
|
||||
store db.Store
|
||||
redis redis.IRedis
|
||||
redis redis.RedisCache
|
||||
}
|
||||
|
||||
var _ DepartmentBiz = (*departmentBiz)(nil)
|
||||
|
||||
func NewDepartment(store db.Store, redis redis.IRedis) *departmentBiz {
|
||||
func NewDepartment(store db.Store, redis redis.RedisCache) *departmentBiz {
|
||||
return &departmentBiz{
|
||||
store: store,
|
||||
redis: redis,
|
||||
|
||||
@@ -2,68 +2,41 @@ package system
|
||||
|
||||
import (
|
||||
"context"
|
||||
"time"
|
||||
|
||||
"management/internal/db/model/dto"
|
||||
db "management/internal/db/sqlc"
|
||||
systemmodel "management/internal/erpserver/model/system"
|
||||
"management/internal/erpserver/store"
|
||||
)
|
||||
|
||||
type LoginLogBiz interface {
|
||||
Create(ctx context.Context, arg *db.CreateSysUserLoginLogParams) error
|
||||
List(ctx context.Context, q dto.SearchDto) ([]*db.SysUserLoginLog, int64, error)
|
||||
Create(ctx context.Context, obj *systemmodel.LoginLog) error
|
||||
List(ctx context.Context, q dto.SearchDto) ([]*systemmodel.LoginLog, int64, error)
|
||||
}
|
||||
|
||||
type loginLogBiz struct {
|
||||
store db.Store
|
||||
database store.IStore
|
||||
store db.Store
|
||||
}
|
||||
|
||||
var _ LoginLogBiz = (*loginLogBiz)(nil)
|
||||
|
||||
func NewLoginLog(store db.Store) *loginLogBiz {
|
||||
func NewLoginLog(database store.IStore, store db.Store) *loginLogBiz {
|
||||
return &loginLogBiz{
|
||||
store: store,
|
||||
database: database,
|
||||
store: store,
|
||||
}
|
||||
}
|
||||
|
||||
func (b *loginLogBiz) Create(ctx context.Context, arg *db.CreateSysUserLoginLogParams) error {
|
||||
return b.store.CreateSysUserLoginLog(ctx, arg)
|
||||
func (b *loginLogBiz) Create(ctx context.Context, obj *systemmodel.LoginLog) error {
|
||||
return b.database.LoginLog().Create(ctx, obj)
|
||||
}
|
||||
|
||||
func (b *loginLogBiz) List(ctx context.Context, q dto.SearchDto) ([]*db.SysUserLoginLog, int64, error) {
|
||||
start, err := time.ParseInLocation(time.DateTime, q.SearchTimeBegin, time.Local)
|
||||
if err != nil {
|
||||
return nil, 0, err
|
||||
}
|
||||
end, err := time.ParseInLocation(time.DateTime, q.SearchTimeEnd, time.Local)
|
||||
func (b *loginLogBiz) List(ctx context.Context, q dto.SearchDto) ([]*systemmodel.LoginLog, int64, error) {
|
||||
res, count, err := b.database.LoginLog().List(ctx, q)
|
||||
if err != nil {
|
||||
return nil, 0, err
|
||||
}
|
||||
|
||||
countArg := &db.CountSysUserLoginLogConditionParams{
|
||||
StartAt: start,
|
||||
EndAt: end,
|
||||
Email: q.SearchEmail,
|
||||
Username: q.SearchName,
|
||||
}
|
||||
|
||||
dataArg := &db.ListSysUserLoginLogConditionParams{
|
||||
StartAt: start,
|
||||
EndAt: end,
|
||||
Email: q.SearchEmail,
|
||||
Username: q.SearchName,
|
||||
Skip: (int32(q.Page) - 1) * int32(q.Rows),
|
||||
Size: int32(q.Rows),
|
||||
}
|
||||
|
||||
count, err := b.store.CountSysUserLoginLogCondition(ctx, countArg)
|
||||
if err != nil {
|
||||
return nil, 0, err
|
||||
}
|
||||
|
||||
logs, err := b.store.ListSysUserLoginLogCondition(ctx, dataArg)
|
||||
if err != nil {
|
||||
return nil, 0, err
|
||||
}
|
||||
|
||||
return logs, count, nil
|
||||
return res, count, nil
|
||||
}
|
||||
|
||||
@@ -42,12 +42,12 @@ type MenuExpansion interface {
|
||||
|
||||
type menuBiz struct {
|
||||
store db.Store
|
||||
redis redis.IRedis
|
||||
redis redis.RedisCache
|
||||
}
|
||||
|
||||
var _ MenuBiz = (*menuBiz)(nil)
|
||||
|
||||
func NewMenu(store db.Store, redis redis.IRedis) *menuBiz {
|
||||
func NewMenu(store db.Store, redis redis.RedisCache) *menuBiz {
|
||||
return &menuBiz{
|
||||
store: store,
|
||||
redis: redis,
|
||||
|
||||
@@ -37,12 +37,12 @@ type RoleExpansion interface{}
|
||||
|
||||
type roleBiz struct {
|
||||
store db.Store
|
||||
redis redis.IRedis
|
||||
redis redis.RedisCache
|
||||
}
|
||||
|
||||
var _ RoleBiz = (*roleBiz)(nil)
|
||||
|
||||
func NewRole(store db.Store, redis redis.IRedis) *roleBiz {
|
||||
func NewRole(store db.Store, redis redis.RedisCache) *roleBiz {
|
||||
return &roleBiz{
|
||||
store: store,
|
||||
redis: redis,
|
||||
|
||||
@@ -5,6 +5,8 @@ import (
|
||||
"management/internal/erpserver/store"
|
||||
"management/internal/pkg/redis"
|
||||
"management/internal/pkg/session"
|
||||
|
||||
"github.com/drhin/logger"
|
||||
)
|
||||
|
||||
type SystemBiz interface {
|
||||
@@ -21,23 +23,25 @@ type SystemBiz interface {
|
||||
type systemBiz struct {
|
||||
database store.IStore
|
||||
store db.Store
|
||||
redis redis.IRedis
|
||||
session session.ISession
|
||||
redis redis.RedisCache
|
||||
session session.Session
|
||||
logger *logger.Logger
|
||||
}
|
||||
|
||||
var _ SystemBiz = (*systemBiz)(nil)
|
||||
|
||||
func New(database store.IStore, store db.Store, redis redis.IRedis, session session.ISession) *systemBiz {
|
||||
func New(database store.IStore, store db.Store, redis redis.RedisCache, session session.Session, logger *logger.Logger) *systemBiz {
|
||||
return &systemBiz{
|
||||
database: database,
|
||||
store: store,
|
||||
redis: redis,
|
||||
session: session,
|
||||
logger: logger,
|
||||
}
|
||||
}
|
||||
|
||||
func (b *systemBiz) UserBiz() UserBiz {
|
||||
return NewUser(b.database, b.store, b.session)
|
||||
return NewUser(b.database, b.store, b.session, b.logger)
|
||||
}
|
||||
|
||||
func (b *systemBiz) MenuBiz() MenuBiz {
|
||||
@@ -61,7 +65,7 @@ func (b *systemBiz) AuditBiz() AuditBiz {
|
||||
}
|
||||
|
||||
func (b *systemBiz) LoginLogBiz() LoginLogBiz {
|
||||
return NewLoginLog(b.store)
|
||||
return NewLoginLog(b.database, b.store)
|
||||
}
|
||||
|
||||
func (b *systemBiz) CategoryBiz() CategoryBiz {
|
||||
|
||||
@@ -4,13 +4,13 @@ import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"strconv"
|
||||
"time"
|
||||
|
||||
"management/internal/db/model/dto"
|
||||
db "management/internal/db/sqlc"
|
||||
"management/internal/erpserver/model/form"
|
||||
systemmodel "management/internal/erpserver/model/system"
|
||||
"management/internal/erpserver/model/view"
|
||||
"management/internal/erpserver/store"
|
||||
"management/internal/pkg/crypto"
|
||||
@@ -18,7 +18,9 @@ import (
|
||||
"management/internal/pkg/rand"
|
||||
"management/internal/pkg/session"
|
||||
|
||||
"github.com/drhin/logger"
|
||||
"github.com/google/uuid"
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
|
||||
// UserBiz 定义处理用户请求所需的方法.
|
||||
@@ -43,17 +45,19 @@ type UserExpansion interface {
|
||||
type userBiz struct {
|
||||
database store.IStore
|
||||
store db.Store
|
||||
session session.ISession
|
||||
session session.Session
|
||||
log *logger.Logger
|
||||
}
|
||||
|
||||
// 确保 userBiz 实现了 UserBiz 接口.
|
||||
var _ UserBiz = (*userBiz)(nil)
|
||||
|
||||
func NewUser(database store.IStore, store db.Store, session session.ISession) *userBiz {
|
||||
func NewUser(database store.IStore, store db.Store, session session.Session, log *logger.Logger) *userBiz {
|
||||
return &userBiz{
|
||||
database: database,
|
||||
store: store,
|
||||
session: session,
|
||||
log: log,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -183,73 +187,67 @@ func (b *userBiz) XmSelect(ctx context.Context) ([]*view.XmSelect, error) {
|
||||
}
|
||||
|
||||
func (b *userBiz) Login(ctx context.Context, req *form.Login) error {
|
||||
log := &db.CreateSysUserLoginLogParams{
|
||||
CreatedAt: time.Now(),
|
||||
Email: req.Email,
|
||||
IsSuccess: false,
|
||||
RefererUrl: req.Referrer,
|
||||
Url: req.Url,
|
||||
Os: req.Os,
|
||||
Ip: req.Ip,
|
||||
Browser: req.Browser,
|
||||
}
|
||||
|
||||
user, err := b.database.User().GetByEmail(ctx, req.Email)
|
||||
// user, err = b.store.GetSysUserByEmail(ctx, req.Email)
|
||||
l := systemmodel.NewLoginLog(req.Email, req.Os, req.Ip, req.Browser, req.Url, req.Referrer)
|
||||
err := b.login(ctx, req)
|
||||
if err != nil {
|
||||
if err := b.database.LoginLog().Create(ctx, l.SetMessage(err.Error())); err != nil {
|
||||
b.log.Error(err.Error(), err, zap.Any("login_log", l))
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
if err := b.database.LoginLog().Create(ctx, l.SetOk("登录成功")); err != nil {
|
||||
b.log.Error(err.Error(), err, zap.Any("login_log", l))
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (b *userBiz) login(ctx context.Context, req *form.Login) error {
|
||||
user, err := b.database.User().GetByEmail(ctx, req.Email)
|
||||
if err != nil {
|
||||
log.Message = err.Error()
|
||||
_ = b.store.CreateSysUserLoginLog(ctx, log)
|
||||
return err
|
||||
}
|
||||
fmt.Printf("%+v", user)
|
||||
log.UserUuid = user.Uuid
|
||||
log.Username = user.Username
|
||||
|
||||
err = crypto.BcryptComparePassword(user.HashedPassword, req.Password+user.Salt)
|
||||
if err != nil {
|
||||
log.Message = "compare password failed"
|
||||
_ = b.store.CreateSysUserLoginLog(ctx, log)
|
||||
return errors.New(log.Message)
|
||||
return errors.New("账号或密码错误")
|
||||
}
|
||||
|
||||
user.Role, err = b.database.Role().Get(ctx, user.RoleID)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if user.Role == nil || user.Role.ID == 0 {
|
||||
return errors.New("账号没有配置角色, 请联系管理员")
|
||||
}
|
||||
|
||||
// 登陆成功
|
||||
|
||||
if user.RoleID == 0 {
|
||||
log.Message = "账号没有配置角色, 请联系管理员"
|
||||
_ = b.store.CreateSysUserLoginLog(ctx, log)
|
||||
return errors.New(log.Message)
|
||||
}
|
||||
|
||||
sysRole, err := b.store.GetSysRole(ctx, user.RoleID)
|
||||
err = b.loginSuccess(ctx, user, req)
|
||||
if err != nil {
|
||||
log.Message = "账号配置的角色错误, 请联系管理员"
|
||||
_ = b.store.CreateSysUserLoginLog(ctx, log)
|
||||
return errors.New(log.Message)
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (b *userBiz) loginSuccess(ctx context.Context, user *systemmodel.User, req *form.Login) error {
|
||||
auth := dto.AuthorizeUser{
|
||||
ID: user.ID,
|
||||
Uuid: user.Uuid,
|
||||
Email: user.Email,
|
||||
Username: user.Username,
|
||||
RoleID: sysRole.ID,
|
||||
RoleName: sysRole.Name,
|
||||
OS: log.Os,
|
||||
IP: log.Ip,
|
||||
Browser: log.Browser,
|
||||
RoleID: user.Role.ID,
|
||||
RoleName: user.Role.Name,
|
||||
OS: req.Os,
|
||||
IP: req.Ip,
|
||||
Browser: req.Browser,
|
||||
}
|
||||
|
||||
gob, err := json.Marshal(auth)
|
||||
if err != nil {
|
||||
log.Message = err.Error()
|
||||
_ = b.store.CreateSysUserLoginLog(ctx, log)
|
||||
return err
|
||||
}
|
||||
|
||||
b.session.Put(ctx, know.StoreName, gob)
|
||||
|
||||
log.IsSuccess = true
|
||||
log.Message = "登陆成功"
|
||||
_ = b.store.CreateSysUserLoginLog(ctx, log)
|
||||
return nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user