base.go 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. package service
  2. import (
  3. "github.com/gogf/gf/os/gtime"
  4. "log"
  5. "reflect"
  6. )
  7. var (
  8. // UpdateFieldEx 更新过滤字段
  9. UpdateFieldEx = []string{"CreatedBy", "CreatedName", "CreatedTime"}
  10. )
  11. // SetCreatedInfo 插入数据库时设置创建信息
  12. func SetCreatedInfo(entry interface{}, id int, name string) {
  13. v := reflect.ValueOf(entry)
  14. t := reflect.TypeOf(entry)
  15. if t.Kind() == reflect.Map {
  16. data := entry.(map[string]interface{})
  17. data["created_by"] = id
  18. data["created_name"] = name
  19. data["created_time"] = gtime.Now()
  20. return
  21. }
  22. if t.Kind() == reflect.Ptr {
  23. t = t.Elem()
  24. v = v.Elem()
  25. }
  26. if t.Kind() != reflect.Struct {
  27. log.Println("Check type error not Struct")
  28. return
  29. }
  30. for i := 0; i < t.NumField(); i++ {
  31. fieldName := t.Field(i).Name
  32. if tag, ok := t.Field(i).Tag.Lookup("orm"); ok {
  33. switch tag {
  34. case "created_by":
  35. v.FieldByName(fieldName).Set(reflect.ValueOf(id))
  36. case "created_name":
  37. v.FieldByName(fieldName).Set(reflect.ValueOf(name))
  38. case "created_time":
  39. v.FieldByName(fieldName).Set(reflect.ValueOf(gtime.Now()))
  40. }
  41. }
  42. }
  43. }
  44. // SetUpdatedInfo 插入数据库时设置修改信息
  45. func SetUpdatedInfo(entry interface{}, id int, name string) {
  46. v := reflect.ValueOf(entry)
  47. t := reflect.TypeOf(entry)
  48. if t.Kind() == reflect.Map {
  49. data := entry.(map[string]interface{})
  50. data["updated_by"] = id
  51. data["updated_name"] = name
  52. data["updated_time"] = gtime.Now()
  53. return
  54. }
  55. if t.Kind() == reflect.Ptr {
  56. t = t.Elem()
  57. v = v.Elem()
  58. }
  59. if t.Kind() != reflect.Struct {
  60. log.Println("Check type error not Struct")
  61. return
  62. }
  63. for i := 0; i < t.NumField(); i++ {
  64. fieldName := t.Field(i).Name
  65. if tag, ok := t.Field(i).Tag.Lookup("orm"); ok {
  66. switch tag {
  67. case "updated_by":
  68. v.FieldByName(fieldName).Set(reflect.ValueOf(id))
  69. case "updated_name":
  70. v.FieldByName(fieldName).Set(reflect.ValueOf(name))
  71. case "updated_time":
  72. v.FieldByName(fieldName).Set(reflect.ValueOf(gtime.Now()))
  73. }
  74. }
  75. }
  76. }