package service import ( "dy-admin/internal/pcmserver/common" "dy-admin/internal/pcmserver/global" "dy-admin/internal/pcmserver/pkg/code" "dy-admin/internal/pcmserver/sys/model" "dy-admin/internal/pcmserver/sys/model/request" "dy-admin/internal/pcmserver/utils" "dy-admin/pkg/rescode" "github.com/gin-gonic/gin" "github.com/mssola/user_agent" "gorm.io/gorm" "time" ) type LoginRecordService struct{} func (lr *LoginRecordService) CreateLoginRecord(c *gin.Context, username string, loginErr error) (err error) { var msg = "登录成功" if loginErr != nil { errCode := rescode.ParseCode(loginErr) msg = errCode.Message() } ua := user_agent.New(c.Request.UserAgent()) browserName, browserVersion := ua.Browser() logRecord := model.LoginLog{ UserName: username, Status: "1", Ipaddr: utils.GetClientIP(c), LoginLocation: "", Browser: browserName + " " + browserVersion, Os: ua.OS(), Platform: ua.Platform(), LoginTime: time.Now(), Remark: c.Request.UserAgent(), Msg: msg, CreatedAt: time.Time{}, UpdatedAt: time.Time{}, } err = global.DB.Create(&logRecord).Error if err != nil { return rescode.RegisterErrorWithCause(err, code.ErrCodeMap[code.ErrDatabaseCode]) } return } func (lr *LoginRecordService) DeleteLoginRecordByIDs(ids common.IdsReq) (err error) { if err = global.DB.Delete(&[]model.LoginLog{}, "id in (?)", ids.IDs).Error; err != nil { return rescode.RegisterErrorWithCause(err, code.ErrCodeMap[code.ErrDatabaseCode]) } return } func (lr *LoginRecordService) GetLoginRecord(id int) (*model.LoginLog, error) { var record model.LoginLog err := global.DB.Where("id = ?", id).First(&record).Error if err != nil { if err != gorm.ErrRecordNotFound { return nil, rescode.RegisterErrorWithCause(err, code.ErrCodeMap[code.ErrDatabaseCode]) } else { return nil, nil } } return &record, nil } func (lr *LoginRecordService) GetLoginRecordList(info request.LoginRecordSearch) (logRecords []model.LoginLog, total int64, err error) { limit := info.PageSize offset := info.PageSize * (info.Page - 1) db := global.DB.Model(&model.LoginLog{}) if info.UserName != "" { db = db.Where("user_name LIKE ?", "%"+info.UserName+"%") } if info.Ipaddr != "" { db = db.Where("ipaddr LIKE ?", "%"+info.Ipaddr+"%") } err = db.Count(&total).Error if err != nil { return } if err = db.Order("id desc").Limit(limit).Offset(offset).Find(&logRecords).Error; err != nil { return logRecords, total, rescode.RegisterErrorWithCause(err, code.ErrCodeMap[code.ErrDatabaseCode]) } return }