global.go 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208
  1. package ent_util
  2. import (
  3. "fmt"
  4. "runtime"
  5. "strconv"
  6. "strings"
  7. "unicode/utf8"
  8. "go.mongodb.org/mongo-driver/bson/primitive"
  9. qu "jygit.jydev.jianyu360.cn/data_processing/common_utils"
  10. )
  11. // 处理地域代码
  12. func CalculateRegionCode(area string, city string, district string) (area_code string, city_code string, district_code string) {
  13. area_code, city_code, district_code = "000000", "", ""
  14. if district != "" {
  15. key := area + "~" + city + "~" + district + "~"
  16. code := RegionCodeData[key]
  17. if code != "" {
  18. district_code = code
  19. city_code = code[:4] + "00"
  20. area_code = code[:2] + "0000"
  21. return
  22. }
  23. }
  24. if city != "" {
  25. key := area + "~" + city + "~" + "" + "~"
  26. code := RegionCodeData[key]
  27. if code != "" {
  28. city_code = code
  29. area_code = city_code[:2] + "0000"
  30. return
  31. }
  32. }
  33. if area != "" {
  34. key := area + "~" + "" + "~" + "" + "~"
  35. code := RegionCodeData[key]
  36. if code != "" {
  37. area_code = code
  38. return
  39. }
  40. }
  41. return
  42. }
  43. // 单位分割~去重 中标单位
  44. func SegmentationEntName(name_1 string, name_2 string) ([]string, []bool) {
  45. new_arr := []string{}
  46. new_bool := []bool{}
  47. key_str := map[string]string{}
  48. if name_1 != "" {
  49. arr_1 := strings.Split(name_1, ",")
  50. if len(arr_1) == 1 {
  51. arr_1 = strings.Split(name_1, ",")
  52. }
  53. for _, v := range arr_1 {
  54. if v != "" && utf8.RuneCountInString(v) > 2 && utf8.RuneCountInString(v) < 30 {
  55. if key_str[v] == "" {
  56. new_arr = append(new_arr, v)
  57. key_str[v] = v
  58. new_bool = append(new_bool, true)
  59. }
  60. }
  61. }
  62. }
  63. if name_2 != "" {
  64. arr_2 := strings.Split(name_2, ",")
  65. if len(arr_2) == 1 {
  66. arr_2 = strings.Split(name_2, ",")
  67. }
  68. for _, v := range arr_2 {
  69. if v != "" && utf8.RuneCountInString(v) > 2 && utf8.RuneCountInString(v) < 30 {
  70. if key_str[v] == "" {
  71. new_arr = append(new_arr, v)
  72. key_str[v] = v
  73. new_bool = append(new_bool, false)
  74. }
  75. }
  76. }
  77. }
  78. return new_arr, new_bool
  79. }
  80. func IsMarkInterfaceArr(t interface{}) []string {
  81. sub_list := []string{}
  82. if list_3, ok_3 := t.([]string); ok_3 {
  83. sub_list = list_3
  84. return sub_list
  85. }
  86. if list_1, ok_1 := t.(primitive.A); ok_1 {
  87. sub_list = qu.ObjArrToStringArr(list_1)
  88. } else {
  89. if list_2, ok_2 := t.([]interface{}); ok_2 {
  90. sub_list = qu.ObjArrToStringArr(list_2)
  91. }
  92. }
  93. return sub_list
  94. }
  95. func IsMarkInterfaceMap(t interface{}) []map[string]interface{} {
  96. p_list := []map[string]interface{}{}
  97. if yl_list_1, ok_3 := t.([]map[string]interface{}); ok_3 {
  98. p_list = yl_list_1
  99. return p_list
  100. }
  101. if yl_list_1, ok_1 := t.(primitive.A); ok_1 {
  102. p_list = qu.ObjArrToMapArr(yl_list_1)
  103. } else {
  104. if yl_list_2, ok_2 := t.([]interface{}); ok_2 {
  105. p_list = qu.ObjArrToMapArr(yl_list_2)
  106. }
  107. }
  108. return p_list
  109. }
  110. // 获取最优企业
  111. func GetOneBaseCompany(arr []map[string]interface{}) int {
  112. index := 0
  113. flag := 100
  114. if len(arr) > 1 {
  115. for k, tmp := range arr {
  116. use_flag := qu.IntAll(tmp["use_flag"])
  117. if use_flag == 0 {
  118. index = k
  119. break
  120. } else {
  121. if use_flag < flag {
  122. flag = use_flag
  123. index = k
  124. }
  125. }
  126. }
  127. }
  128. return index
  129. }
  130. // 创建企业信息
  131. func GetOneQyxyInfo(name string) map[string]interface{} {
  132. qyxy_info := map[string]interface{}{}
  133. dataArr, _ := QyxyMgo.Find("qyxy_std", map[string]interface{}{"company_name": name}, map[string]interface{}{"updatetime": -1}, nil)
  134. if len(dataArr) > 0 {
  135. qyxy_info = dataArr[0] //补充企业信息
  136. } else {
  137. data := SpiMgo.FindOne("company_history_name", map[string]interface{}{
  138. "history_name": name,
  139. })
  140. if len(data) > 0 {
  141. company_id := qu.ObjToString(data["company_id"])
  142. qyxy_info = QyxyMgo.FindOne("qyxy_std", map[string]interface{}{"_id": company_id})
  143. }
  144. }
  145. return qyxy_info
  146. }
  147. // 清洗日期~
  148. func cleanErrDateTime(datetime string) bool {
  149. arr := strings.Split(datetime, "-")
  150. if len(arr) > 0 {
  151. year := qu.IntAll(arr[0])
  152. if year < 1900 || year > 2200 {
  153. return true
  154. }
  155. }
  156. return false
  157. }
  158. // 转二进制.....
  159. func Str2DEC(s string) (num int) {
  160. l := len(s)
  161. for i := l - 1; i >= 0; i-- {
  162. num += (int(s[l-i-1]) & 0xf) << uint8(i)
  163. }
  164. return
  165. }
  166. func ConvertToBin(num int) string {
  167. s := ""
  168. if num == 0 {
  169. return "0"
  170. }
  171. for ; num > 0; num /= 2 {
  172. lsb := num % 2
  173. s = strconv.Itoa(lsb) + s
  174. }
  175. return s
  176. }
  177. func toMegaBytes(bytes uint64) float64 {
  178. return float64(bytes) / 1024 / 1024
  179. }
  180. func traceMemStats() {
  181. var ms runtime.MemStats
  182. runtime.ReadMemStats(&ms)
  183. var result = make([]float64, 7)
  184. result[0] = float64(ms.HeapObjects)
  185. result[1] = toMegaBytes(ms.HeapAlloc)
  186. result[2] = toMegaBytes(ms.TotalAlloc)
  187. result[3] = toMegaBytes(ms.HeapSys)
  188. result[4] = toMegaBytes(ms.HeapIdle)
  189. result[5] = toMegaBytes(ms.HeapReleased)
  190. result[6] = toMegaBytes(ms.HeapIdle - ms.HeapReleased)
  191. for _, v := range result {
  192. fmt.Printf("%.2f\t", v)
  193. }
  194. fmt.Printf("\n")
  195. }