sys_oper_log.go 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. /*
  2. * @desc:操作日志处理
  3. * @company:云南省奇讯科技有限公司
  4. * @Author: yixiaohu
  5. * @Date: 2021/7/19 14:58
  6. */
  7. package service
  8. import (
  9. comModel "gfast/app/common/model"
  10. "gfast/app/system/dao"
  11. "gfast/app/system/model"
  12. "gfast/library"
  13. "github.com/gogf/gf/encoding/gjson"
  14. "github.com/gogf/gf/errors/gerror"
  15. "github.com/gogf/gf/frame/g"
  16. "github.com/gogf/gf/os/grpool"
  17. "github.com/gogf/gf/os/gtime"
  18. "github.com/gogf/gf/util/gconv"
  19. )
  20. type sysOperLog struct {
  21. Pool *grpool.Pool
  22. }
  23. var SysOperLog = &sysOperLog{
  24. Pool: grpool.New(100),
  25. }
  26. func (s *sysOperLog) Invoke(data *dao.SysOperLogAdd) {
  27. s.Pool.Add(func() {
  28. //写入日志数据
  29. s.OperationLogAdd(data)
  30. })
  31. }
  32. // OperationLogAdd 添加操作日志
  33. func (s sysOperLog) OperationLogAdd(data *dao.SysOperLogAdd) {
  34. menuTitle := ""
  35. if data.Menu != nil {
  36. menuTitle = data.Menu.Title
  37. }
  38. err, dept := data.User.GetDept()
  39. if err != nil {
  40. g.Log().Error(err)
  41. return
  42. }
  43. insertData := g.Map{
  44. dao.SysOperLog.C.Title: menuTitle,
  45. dao.SysOperLog.C.Method: data.Url.Path,
  46. dao.SysOperLog.C.RequestMethod: data.Method,
  47. dao.SysOperLog.C.OperatorType: data.OperatorType,
  48. dao.SysOperLog.C.OperName: data.User.UserName,
  49. dao.SysOperLog.C.DeptName: dept.DeptName,
  50. dao.SysOperLog.C.OperIp: data.ClientIp,
  51. dao.SysOperLog.C.OperLocation: library.GetCityByIp(data.ClientIp),
  52. dao.SysOperLog.C.OperTime: gtime.Now(),
  53. }
  54. rawQuery := data.Url.RawQuery
  55. if rawQuery != "" {
  56. rawQuery = "?" + rawQuery
  57. }
  58. insertData[dao.SysOperLog.C.OperUrl] = data.Url.Path + rawQuery
  59. if data.Params != nil {
  60. if v, ok := data.Params["apiReturnRes"]; ok {
  61. res := gconv.Map(v)
  62. if gconv.Int(res["code"]) == 0 {
  63. insertData[dao.SysOperLog.C.Status] = 1
  64. } else {
  65. insertData[dao.SysOperLog.C.Status] = 0
  66. }
  67. if _, ok = res["data"]; ok {
  68. delete(res, "data")
  69. }
  70. b, _ := gjson.Encode(res)
  71. if len(b) > 0 {
  72. insertData[dao.SysOperLog.C.JsonResult] = string(b)
  73. }
  74. delete(data.Params, "apiReturnRes")
  75. }
  76. b, _ := gjson.Encode(data.Params)
  77. if len(b) > 0 {
  78. insertData[dao.SysOperLog.C.OperParam] = string(b)
  79. }
  80. }
  81. _, err = dao.SysOperLog.Insert(insertData)
  82. if err != nil {
  83. g.Log().Error(err)
  84. }
  85. }
  86. func (s *sysOperLog) OperationLogListByPage(req *dao.SysOperLogSearchReq) (total, page int, list []*model.SysOperLog, err error) {
  87. model := dao.SysOperLog.M
  88. order := "oper_id DESC"
  89. if req != nil {
  90. if req.OperName != "" {
  91. model = model.Where("oper_name like ?", "%"+req.OperName+"%")
  92. }
  93. if req.Title != "" {
  94. model = model.Where("title like ?", "%"+req.Title+"%")
  95. }
  96. if req.RequestMethod != "" {
  97. model = model.Where("request_method = ?", req.RequestMethod)
  98. }
  99. if req.Status != "" {
  100. model = model.Where("status", gconv.Int(req.Status))
  101. }
  102. if req.BeginTime != "" {
  103. model = model.Where("oper_time >=", req.BeginTime)
  104. }
  105. if req.EndTime != "" {
  106. model = model.Where("oper_time <=", req.EndTime)
  107. }
  108. if req.SortName != "" {
  109. if req.SortOrder != "" {
  110. order = req.SortName + " " + req.SortOrder
  111. } else {
  112. order = req.SortName + " DESC"
  113. }
  114. }
  115. }
  116. total, err = model.Count()
  117. if err != nil {
  118. g.Log().Error(err)
  119. err = gerror.New("获取总行数失败")
  120. return
  121. }
  122. if req.PageNum == 0 {
  123. req.PageNum = 1
  124. }
  125. page = req.PageNum
  126. if req.PageSize == 0 {
  127. req.PageSize = comModel.PageSize
  128. }
  129. err = model.Page(page, req.PageSize).Order(order).Scan(&list)
  130. if err != nil {
  131. g.Log().Error(err)
  132. err = gerror.New("获取数据失败")
  133. }
  134. return
  135. }
  136. func (s *sysOperLog) DeleteOperationLogByIds(ids []int) (err error) {
  137. if len(ids) == 0 {
  138. err = gerror.New("参数错误")
  139. return
  140. }
  141. _, err = dao.SysOperLog.Delete("oper_id in (?)", ids)
  142. if err != nil {
  143. g.Log().Error(err)
  144. err = gerror.New("删除失败")
  145. }
  146. return
  147. }
  148. func (s *sysOperLog) GetOperationLogById(id int64) (log *model.SysOperLog, err error) {
  149. if id == 0 {
  150. err = gerror.New("参数错误")
  151. return
  152. }
  153. err = dao.SysOperLog.Where("oper_id", id).Scan(&log)
  154. if err != nil {
  155. g.Log().Error(err)
  156. }
  157. if err != nil || log == nil {
  158. err = gerror.New("获取操作日志失败")
  159. }
  160. return
  161. }
  162. func (s *sysOperLog) ClearOperationLog() (err error) {
  163. _, err = g.DB().Exec("truncate " + dao.SysOperLog.Table)
  164. if err != nil {
  165. g.Log().Error(err)
  166. err = gerror.New("清除失败")
  167. }
  168. return
  169. }