login_record.go 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. package service
  2. import (
  3. "dy-admin/internal/pcmserver/common"
  4. "dy-admin/internal/pcmserver/global"
  5. "dy-admin/internal/pcmserver/pkg/code"
  6. "dy-admin/internal/pcmserver/sys/model"
  7. "dy-admin/internal/pcmserver/sys/model/request"
  8. "dy-admin/internal/pcmserver/utils"
  9. "dy-admin/pkg/rescode"
  10. "github.com/gin-gonic/gin"
  11. "github.com/mssola/user_agent"
  12. "gorm.io/gorm"
  13. "time"
  14. )
  15. type LoginRecordService struct{}
  16. func (lr *LoginRecordService) CreateLoginRecord(c *gin.Context, username string, loginErr error) (err error) {
  17. var msg = "登录成功"
  18. if loginErr != nil {
  19. errCode := rescode.ParseCode(loginErr)
  20. msg = errCode.Message()
  21. }
  22. ua := user_agent.New(c.Request.UserAgent())
  23. browserName, browserVersion := ua.Browser()
  24. logRecord := model.LoginLog{
  25. UserName: username,
  26. Status: "1",
  27. Ipaddr: utils.GetClientIP(c),
  28. LoginLocation: "",
  29. Browser: browserName + " " + browserVersion,
  30. Os: ua.OS(),
  31. Platform: ua.Platform(),
  32. LoginTime: time.Now(),
  33. Remark: c.Request.UserAgent(),
  34. Msg: msg,
  35. CreatedAt: time.Time{},
  36. UpdatedAt: time.Time{},
  37. }
  38. err = global.DB.Create(&logRecord).Error
  39. if err != nil {
  40. return rescode.RegisterErrorWithCause(err, code.ErrCodeMap[code.ErrDatabaseCode])
  41. }
  42. return
  43. }
  44. func (lr *LoginRecordService) DeleteLoginRecordByIDs(ids common.IdsReq) (err error) {
  45. if err = global.DB.Delete(&[]model.LoginLog{}, "id in (?)", ids.IDs).Error; err != nil {
  46. return rescode.RegisterErrorWithCause(err, code.ErrCodeMap[code.ErrDatabaseCode])
  47. }
  48. return
  49. }
  50. func (lr *LoginRecordService) GetLoginRecord(id int) (*model.LoginLog, error) {
  51. var record model.LoginLog
  52. err := global.DB.Where("id = ?", id).First(&record).Error
  53. if err != nil {
  54. if err != gorm.ErrRecordNotFound {
  55. return nil, rescode.RegisterErrorWithCause(err, code.ErrCodeMap[code.ErrDatabaseCode])
  56. } else {
  57. return nil, nil
  58. }
  59. }
  60. return &record, nil
  61. }
  62. func (lr *LoginRecordService) GetLoginRecordList(info request.LoginRecordSearch) (logRecords []model.LoginLog, total int64, err error) {
  63. limit := info.PageSize
  64. offset := info.PageSize * (info.Page - 1)
  65. db := global.DB.Model(&model.LoginLog{})
  66. if info.UserName != "" {
  67. db = db.Where("user_name LIKE ?", "%"+info.UserName+"%")
  68. }
  69. if info.Ipaddr != "" {
  70. db = db.Where("ipaddr LIKE ?", "%"+info.Ipaddr+"%")
  71. }
  72. err = db.Count(&total).Error
  73. if err != nil {
  74. return
  75. }
  76. if err = db.Order("id desc").Limit(limit).Offset(offset).Find(&logRecords).Error; err != nil {
  77. return logRecords, total, rescode.RegisterErrorWithCause(err, code.ErrCodeMap[code.ErrDatabaseCode])
  78. }
  79. return
  80. }