base.go 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. package service
  2. import (
  3. "github.com/gogf/gf/os/gtime"
  4. "log"
  5. "reflect"
  6. )
  7. var (
  8. // CommonUpdateFieldEx UpdateFieldEx 更新过滤字段
  9. CommonUpdateFieldEx = []interface{}{"created_by", "created_name", "created_time"}
  10. UpdateFieldEx = []interface{}{"id", "created_by", "created_name", "created_time"}
  11. )
  12. // SetCreatedInfo 插入数据库时设置创建信息
  13. func SetCreatedInfo(entry interface{}, id int, name string) {
  14. v := reflect.ValueOf(entry)
  15. t := reflect.TypeOf(entry)
  16. if t.Kind() == reflect.Map {
  17. data := entry.(map[string]interface{})
  18. data["created_by"] = id
  19. data["created_name"] = name
  20. data["created_time"] = gtime.Now()
  21. return
  22. }
  23. if t.Kind() == reflect.Ptr {
  24. t = t.Elem()
  25. v = v.Elem()
  26. }
  27. if t.Kind() == reflect.Slice {
  28. }
  29. if t.Kind() != reflect.Struct {
  30. log.Println("Check type error not Struct")
  31. return
  32. }
  33. for i := 0; i < t.NumField(); i++ {
  34. fieldName := t.Field(i).Name
  35. if tag, ok := t.Field(i).Tag.Lookup("orm"); ok {
  36. switch tag {
  37. case "created_by":
  38. v.FieldByName(fieldName).Set(reflect.ValueOf(id))
  39. case "created_name":
  40. v.FieldByName(fieldName).Set(reflect.ValueOf(name))
  41. case "created_time":
  42. v.FieldByName(fieldName).Set(reflect.ValueOf(gtime.Now()))
  43. }
  44. }
  45. }
  46. }
  47. // SetUpdatedInfo 插入数据库时设置修改信息
  48. func SetUpdatedInfo(entry interface{}, id int, name string) {
  49. v := reflect.ValueOf(entry)
  50. t := reflect.TypeOf(entry)
  51. if t.Kind() == reflect.Map {
  52. data := entry.(map[string]interface{})
  53. data["updated_by"] = id
  54. data["updated_name"] = name
  55. data["updated_time"] = gtime.Now()
  56. return
  57. }
  58. if t.Kind() == reflect.Ptr {
  59. t = t.Elem()
  60. v = v.Elem()
  61. }
  62. if t.Kind() != reflect.Struct {
  63. log.Println("Check type error not Struct")
  64. return
  65. }
  66. for i := 0; i < t.NumField(); i++ {
  67. fieldName := t.Field(i).Name
  68. if tag, ok := t.Field(i).Tag.Lookup("orm"); ok {
  69. switch tag {
  70. case "updated_by":
  71. v.FieldByName(fieldName).Set(reflect.ValueOf(id))
  72. case "updated_name":
  73. v.FieldByName(fieldName).Set(reflect.ValueOf(name))
  74. case "updated_time":
  75. v.FieldByName(fieldName).Set(reflect.ValueOf(gtime.Now()))
  76. }
  77. }
  78. }
  79. }
  80. // Div 数字转字母
  81. func Div(Num int) string {
  82. var (
  83. Str string = ""
  84. k int
  85. temp []int //保存转化后每一位数据的值,然后通过索引的方式匹配A-Z
  86. )
  87. //用来匹配的字符A-Z
  88. Slice := []string{"", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O",
  89. "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"}
  90. if Num > 26 { //数据大于26需要进行拆分
  91. for {
  92. k = Num % 26 //从个位开始拆分,如果求余为0,说明末尾为26,也就是Z,如果是转化为26进制数,则末尾是可以为0的,这里必须为A-Z中的一个
  93. if k == 0 {
  94. temp = append(temp, 26)
  95. k = 26
  96. } else {
  97. temp = append(temp, k)
  98. }
  99. Num = (Num - k) / 26 //减去Num最后一位数的值,因为已经记录在temp中
  100. if Num <= 26 { //小于等于26直接进行匹配,不需要进行数据拆分
  101. temp = append(temp, Num)
  102. break
  103. }
  104. }
  105. } else {
  106. return Slice[Num]
  107. }
  108. for _, value := range temp {
  109. Str = Slice[value] + Str //因为数据切分后存储顺序是反的,所以Str要放在后面
  110. }
  111. return Str
  112. }