base.go 3.4 KB

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