util.go 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. package main
  2. import (
  3. "fmt"
  4. "log"
  5. "reflect"
  6. "strings"
  7. "time"
  8. "unicode/utf8"
  9. "go.mongodb.org/mongo-driver/bson/primitive"
  10. "gopkg.in/mgo.v2/bson"
  11. util "jygit.jydev.jianyu360.cn/data_processing/common_utils"
  12. "jygit.jydev.jianyu360.cn/data_processing/common_utils/redis"
  13. )
  14. // @Description 字段验证、处理
  15. // @Author J 2022/10/8 17:16
  16. func verifyF(f string, v interface{}, tmp1 interface{}) (interface{}, bool) {
  17. tmp := tmp1.(map[string]interface{})
  18. stype := util.ObjToString(tmp["stype"])
  19. vt := reflect.TypeOf(v).String()
  20. if strings.Contains(vt, stype) {
  21. switch stype {
  22. case "string":
  23. v1 := util.ObjToString(v)
  24. lens := util.IntAll(tmp["length"])
  25. if tmp["intercept"].(bool) {
  26. if utf8.RuneCountInString(v1) > lens {
  27. return string(([]rune(v1))[:lens]), true
  28. } else {
  29. return v1, false
  30. }
  31. } else {
  32. if utf8.RuneCountInString(v1) > lens {
  33. return "", true
  34. } else {
  35. return v1, false
  36. }
  37. }
  38. case "float":
  39. v1 := util.Float64All(v)
  40. min := util.Float64All(tmp["mix"])
  41. max := util.Float64All(tmp["max"])
  42. if min != 0 && v1 < min {
  43. return nil, true
  44. }
  45. if max != 0 && v1 >= max {
  46. return nil, true
  47. }
  48. dm := util.IntAll(tmp["decimal"]) //小数点位数
  49. v2, err := util.FormatFloat(v1, dm)
  50. if err != nil {
  51. return nil, true
  52. }
  53. return v2, false
  54. default:
  55. break
  56. }
  57. }
  58. return nil, true
  59. }
  60. func IsMarkInterfaceArr(t interface{}) []string {
  61. sub_list := []string{}
  62. if list_3, ok_3 := t.([]string); ok_3 {
  63. sub_list = list_3
  64. return sub_list
  65. }
  66. if list_1, ok_1 := t.(primitive.A); ok_1 {
  67. sub_list = util.ObjArrToStringArr(list_1)
  68. } else {
  69. if list_2, ok_2 := t.([]interface{}); ok_2 {
  70. sub_list = util.ObjArrToStringArr(list_2)
  71. }
  72. }
  73. return sub_list
  74. }
  75. func IsMarkInterfaceMap(t interface{}) []map[string]interface{} {
  76. p_list := []map[string]interface{}{}
  77. if yl_list_1, ok_1 := t.(primitive.A); ok_1 {
  78. p_list = util.ObjArrToMapArr(yl_list_1)
  79. } else {
  80. if yl_list_2, ok_2 := t.([]interface{}); ok_2 {
  81. p_list = util.ObjArrToMapArr(yl_list_2)
  82. }
  83. }
  84. return p_list
  85. }
  86. //获取企业的nameId
  87. //GetRedisKey 获取entname的key
  88. func GetRedisKey(name string) string {
  89. return fmt.Sprintf("nameId_%s", name)
  90. }
  91. //
  92. func GetNameId(name string) string {
  93. nameId := redis.GetStr("other", GetRedisKey(name))
  94. if nameId != "" {
  95. return nameId
  96. }
  97. info := MysqlTool.FindOne("dws_f_ent_baseinfo", map[string]interface{}{"name": name}, "name_id", "")
  98. if info != nil && (*info)["name_id"] != nil {
  99. name_id := util.ObjToString((*info)["name_id"])
  100. //存储redis
  101. redis.Put("other", GetRedisKey(name), name_id, 600)
  102. return name_id
  103. } else {
  104. return ""
  105. }
  106. }
  107. func GetNameIdByCompanyId(comapnyId string) string {
  108. info := MysqlTool.FindOne("dws_f_ent_baseinfo", map[string]interface{}{"company_id": comapnyId}, "name_id", "")
  109. if info != nil && (*info)["name_id"] != nil {
  110. return util.ObjToString((*info)["name_id"])
  111. } else {
  112. return ""
  113. }
  114. }
  115. // 转换时间
  116. func TransferDateTimeInfo(tmp map[string]interface{}, info *map[string]interface{}, keys []string) {
  117. for _, v := range keys {
  118. if t := util.Int64All(tmp[v]); t > 0 {
  119. key := "d_" + v
  120. (*info)[key] = util.FormatDateByInt64(&t, util.Date_Full_Layout)
  121. }
  122. }
  123. }
  124. // 转换金额费用
  125. func TransferMoneyRateInfo(tmp map[string]interface{}, info *map[string]interface{}, keys []string, maxs []float64) {
  126. for k, v := range keys {
  127. key := "f_" + v
  128. if value, b := CleanFloat64(util.Float64All(tmp[v]), maxs[k]); tmp[v] != nil && b {
  129. (*info)[key] = value
  130. }
  131. }
  132. }
  133. // 通用长度清洗
  134. func CleanLength(name string, l int) string {
  135. if l == -1 {
  136. return name
  137. }
  138. new_name := name
  139. if utf8.RuneCountInString(name) > l {
  140. new_name = string(([]rune(new_name))[:l])
  141. }
  142. return new_name
  143. }
  144. // 通用浮点清洗
  145. func CleanFloat64(value float64, max float64) (float64, bool) {
  146. if value <= max {
  147. return value, true
  148. }
  149. return float64(0), false
  150. }
  151. func GetObjectId() {
  152. sid := bson.NewObjectIdWithTime(time.Unix(1700537100, 0))
  153. eid := bson.NewObjectIdWithTime(time.Unix(1700580300, 0))
  154. log.Println(sid)
  155. log.Println(eid)
  156. return
  157. }
  158. //判断是否varchar类型超过字符串
  159. func VarcharCheck(str string, length int) bool {
  160. return utf8.RuneCountInString(str) > length
  161. }