sys_login_log.go 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. /*
  2. * @desc:登录日志处理
  3. * @company:云南奇讯科技有限公司
  4. * @Author: yixiaohu
  5. * @Date: 2022/3/8 11:42
  6. */
  7. package service
  8. import (
  9. "context"
  10. "github.com/gogf/gf/v2/frame/g"
  11. "github.com/gogf/gf/v2/os/grpool"
  12. "github.com/gogf/gf/v2/util/gconv"
  13. "github.com/tiger1103/gfast/v3/api/v1/system"
  14. "github.com/tiger1103/gfast/v3/internal/app/system/consts"
  15. "github.com/tiger1103/gfast/v3/internal/app/system/model"
  16. "github.com/tiger1103/gfast/v3/internal/app/system/service/internal/dao"
  17. "github.com/tiger1103/gfast/v3/library/liberr"
  18. )
  19. type ISysLoginLog interface {
  20. Invoke(ctx context.Context, data *model.LoginLogParams)
  21. List(ctx context.Context, req *system.LoginLogSearchReq) (res *system.LoginLogSearchRes, err error)
  22. DeleteLoginLogByIds(ctx context.Context, ids []int) (err error)
  23. ClearLoginLog(ctx context.Context) (err error)
  24. }
  25. type sysLoginLogImpl struct {
  26. Pool *grpool.Pool
  27. }
  28. var (
  29. sysLoginLogService = sysLoginLogImpl{
  30. Pool: grpool.New(100),
  31. }
  32. )
  33. func SysLoginLog() ISysLoginLog {
  34. return &sysLoginLogService
  35. }
  36. func (s *sysLoginLogImpl) Invoke(ctx context.Context, data *model.LoginLogParams) {
  37. s.Pool.Add(
  38. ctx,
  39. func(ctx context.Context) {
  40. //写入日志数据
  41. User().LoginLog(ctx, data)
  42. },
  43. )
  44. }
  45. func (s *sysLoginLogImpl) List(ctx context.Context, req *system.LoginLogSearchReq) (res *system.LoginLogSearchRes, err error) {
  46. res = new(system.LoginLogSearchRes)
  47. if req.PageNum == 0 {
  48. req.PageNum = 1
  49. }
  50. res.CurrentPage = req.PageNum
  51. if req.PageSize == 0 {
  52. req.PageSize = consts.PageSize
  53. }
  54. m := dao.SysLoginLog.Ctx(ctx)
  55. order := "info_id DESC"
  56. if req.LoginName != "" {
  57. m = m.Where("login_name like ?", "%"+req.LoginName+"%")
  58. }
  59. if req.Status != "" {
  60. m = m.Where("status", gconv.Int(req.Status))
  61. }
  62. if req.Ipaddr != "" {
  63. m = m.Where("ipaddr like ?", "%"+req.Ipaddr+"%")
  64. }
  65. if req.LoginLocation != "" {
  66. m = m.Where("login_location like ?", "%"+req.LoginLocation+"%")
  67. }
  68. if len(req.DateRange) != 0 {
  69. m = m.Where("login_time >=? AND login_time <=?", req.DateRange[0], req.DateRange[1])
  70. }
  71. if req.SortName != "" {
  72. if req.SortOrder != "" {
  73. order = req.SortName + " " + req.SortOrder
  74. } else {
  75. order = req.SortName + " DESC"
  76. }
  77. }
  78. err = g.Try(func() {
  79. res.Total, err = m.Count()
  80. liberr.ErrIsNil(ctx, err, "获取日志失败")
  81. err = m.Page(req.PageNum, req.PageSize).Order(order).Scan(&res.List)
  82. liberr.ErrIsNil(ctx, err, "获取日志数据失败")
  83. })
  84. return
  85. }
  86. func (s *sysLoginLogImpl) DeleteLoginLogByIds(ctx context.Context, ids []int) (err error) {
  87. err = g.Try(func() {
  88. _, err = dao.SysLoginLog.Ctx(ctx).Delete("info_id in (?)", ids)
  89. liberr.ErrIsNil(ctx, err, "删除失败")
  90. })
  91. return
  92. }
  93. func (s *sysLoginLogImpl) ClearLoginLog(ctx context.Context) (err error) {
  94. err = g.Try(func() {
  95. _, err = g.DB().Ctx(ctx).Exec(ctx, "truncate "+dao.SysLoginLog.Table())
  96. liberr.ErrIsNil(ctx, err, "清除失败")
  97. })
  98. return
  99. }