logSvc.go 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209
  1. package log
  2. import (
  3. "errors"
  4. "github.com/gogf/gf/os/glog"
  5. "github.com/gogf/gf/util/gconv"
  6. "gmanager/app/component/started"
  7. "gmanager/app/constants"
  8. "gmanager/app/model/log"
  9. "gmanager/library"
  10. "gmanager/library/base"
  11. "reflect"
  12. )
  13. // 请求参数
  14. type Request struct {
  15. log.Entity
  16. UserId int `form:"userId" json:"userId"`
  17. }
  18. // 通过id获取实体
  19. func GetById(id int64) (*log.Entity, error) {
  20. if id <= 0 {
  21. glog.Error(" get id error")
  22. return new(log.Entity), errors.New("参数不合法")
  23. }
  24. return log.Model.FindOne(" id = ?", id)
  25. }
  26. // 根据条件获取实体
  27. func GetOne(form *base.BaseForm) (*log.Entity, error) {
  28. where := " 1 = 1 "
  29. var params []interface{}
  30. if form.Params != nil && form.Params["id"] != "" {
  31. where += " and id = ? "
  32. params = append(params, gconv.Int(form.Params["id"]))
  33. }
  34. return log.Model.FindOne(where, params)
  35. }
  36. // 删除实体
  37. func Delete(id int64, userId int) (int64, error) {
  38. if id <= 0 {
  39. glog.Error("delete id error")
  40. return 0, errors.New("参数不合法")
  41. }
  42. r, err1 := log.Model.Delete(" id = ?", id)
  43. if err1 != nil {
  44. return 0, err1
  45. }
  46. return r.RowsAffected()
  47. }
  48. // 保存实体
  49. func Save(request *Request) (int64, error) {
  50. entity := (*log.Entity)(nil)
  51. err := gconv.Struct(request.Entity, &entity)
  52. if err != nil {
  53. return 0, errors.New("数据错误")
  54. }
  55. entity.UpdateId = request.UserId
  56. entity.UpdateTime = library.GetNow()
  57. // 判断新增还是修改
  58. if entity.Id <= 0 {
  59. entity.CreateId = request.UserId
  60. entity.CreateTime = library.GetNow()
  61. r, err := log.Model.Insert(entity)
  62. if err != nil {
  63. return 0, err
  64. }
  65. // 回写主键
  66. lastId, err := r.LastInsertId()
  67. if err != nil {
  68. return 0, err
  69. }
  70. entity.Id = gconv.Int(lastId)
  71. return r.RowsAffected()
  72. } else {
  73. r, err := log.Model.OmitEmpty().Where(" id = ?", entity.Id).Update(entity)
  74. if err != nil {
  75. return 0, err
  76. }
  77. return r.RowsAffected()
  78. }
  79. }
  80. // 列表数据查询
  81. func List(form *base.BaseForm) ([]*log.Entity, error) {
  82. where := " 1 = 1 "
  83. var params []interface{}
  84. if form.Params != nil && form.Params["name"] != "" {
  85. where += " and name like ? "
  86. params = append(params, "%"+form.Params["name"]+"%")
  87. }
  88. return log.Model.Order(form.OrderBy).FindAll(where, params)
  89. }
  90. // 分页查询
  91. func Page(form *base.BaseForm) ([]log.Entity, error) {
  92. if form.Page <= 0 || form.Rows <= 0 {
  93. glog.Error("page param error", form.Page, form.Rows)
  94. return []log.Entity{}, nil
  95. }
  96. where := " 1 = 1 "
  97. var params []interface{}
  98. if form.Params != nil && form.Params["operObject"] != "" {
  99. where += " and oper_object like ? "
  100. params = append(params, "%"+form.Params["operObject"]+"%")
  101. }
  102. if form.Params != nil && form.Params["operTable"] != "" {
  103. where += " and oper_table like ? "
  104. params = append(params, "%"+form.Params["operTable"]+"%")
  105. }
  106. if form.Params != nil && gconv.Int(form.Params["logType"]) > 0 {
  107. where += " and log_type = ? "
  108. params = append(params, gconv.Int(form.Params["logType"]))
  109. }
  110. if form.Params != nil && gconv.Int(form.Params["operType"]) > 0 {
  111. where += " and oper_type = ? "
  112. params = append(params, gconv.Int(form.Params["operType"]))
  113. }
  114. num, err := log.Model.As("t").FindCount(where, params)
  115. form.TotalSize = num
  116. form.TotalPage = num / form.Rows
  117. if err != nil {
  118. glog.Error("page count error", err)
  119. return []log.Entity{}, err
  120. }
  121. // 没有数据直接返回
  122. if num == 0 {
  123. form.TotalPage = 0
  124. form.TotalSize = 0
  125. return []log.Entity{}, err
  126. }
  127. var resData []log.Entity
  128. dbModel := log.Model.As("t").Fields(log.Model.Columns() + ",su1.real_name as updateName,su2.real_name as createName")
  129. dbModel = dbModel.LeftJoin("sys_user su1", " t.update_id = su1.id ")
  130. dbModel = dbModel.LeftJoin("sys_user su2", " t.update_id = su2.id ")
  131. err = dbModel.Where(where, params).Order(form.OrderBy).Page(form.Page, form.Rows).M.Structs(&resData)
  132. if err != nil {
  133. glog.Error("page list error", err)
  134. return []log.Entity{}, err
  135. }
  136. return resData, nil
  137. }
  138. // 日志保存
  139. func SaveLog(model interface{}, operType string) (int64, error) {
  140. iModel, ok := model.(base.IModel)
  141. if !ok {
  142. glog.Error("transfer error", model)
  143. return 0, errors.New("transfer error")
  144. }
  145. var updateId int
  146. var updateTime string
  147. baseModel := reflect.ValueOf(model)
  148. if kind := baseModel.Kind(); kind == reflect.Ptr {
  149. updateId = gconv.Int(baseModel.Elem().FieldByName("UpdateId").Interface())
  150. updateTime = baseModel.Elem().FieldByName("UpdateTime").String()
  151. } else {
  152. updateId = gconv.Int(baseModel.FieldByName("UpdateId").Interface())
  153. updateTime = baseModel.FieldByName("UpdateTime").String()
  154. }
  155. logType := constants.TypeEdit
  156. // SELECT table_name,table_comment FROM information_schema.TABLES where table_SCHEMA='gmanager'
  157. operRemark := ""
  158. operObject := started.TableInfo[iModel.TableName()]
  159. if operType == constants.LOGIN || operType == constants.LOGOUT {
  160. logType = constants.TypeSystem
  161. } else {
  162. operRemark = gconv.String(model)
  163. }
  164. entity := log.Entity{
  165. LogType: logType,
  166. OperType: operType,
  167. OperId: iModel.PkVal(),
  168. OperTable: iModel.TableName(),
  169. OperObject: operObject,
  170. OperRemark: operRemark,
  171. UpdateId: updateId,
  172. UpdateTime: updateTime,
  173. CreateId: updateId,
  174. CreateTime: updateTime,
  175. }
  176. result, err := log.Insert(entity)
  177. if err != nil {
  178. return 0, err
  179. }
  180. return result.RowsAffected()
  181. }