util.go 4.6 KB

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