tool.go 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. package main
  2. import (
  3. "log"
  4. "reflect"
  5. "sort"
  6. "time"
  7. )
  8. var DateTimeSelect = []string{"bidopentime", "bidendtime", "signaturedate", "comeintime"}
  9. // 项目中的字段
  10. var FIELDS = []string{
  11. "area",
  12. "city",
  13. "district",
  14. "projectname",
  15. "projectcode",
  16. "buyer",
  17. "buyerclass",
  18. "buyerperson",
  19. "buyertel",
  20. "winner",
  21. "winnerperson",
  22. "winnertel",
  23. "agency",
  24. "agencyperson",
  25. "agencytel",
  26. "topscopeclass",
  27. "subscopeclass",
  28. "package",
  29. "scenetag",
  30. "buyertag",
  31. "tagname",
  32. "tagname_2",
  33. "tagname_3",
  34. }
  35. // 招标信息字段
  36. var INFOFIELDS = []string{
  37. "projectname",
  38. "projectcode",
  39. "title",
  40. "publishtime",
  41. "comeintime",
  42. "bidopentime",
  43. "toptype",
  44. "subtype",
  45. "buyer",
  46. "buyerclass",
  47. "agency",
  48. "agencyperson",
  49. "agencytel",
  50. "winner",
  51. "winnertel",
  52. "winnerperson",
  53. "budget",
  54. "bidamount",
  55. "buyerperson",
  56. "buyertel",
  57. "area",
  58. "city",
  59. "district",
  60. }
  61. var bidstatus = map[string]string{
  62. "预告": "预告",
  63. "中标": "中标",
  64. "成交": "成交",
  65. "废标": "废标",
  66. "流标": "流标",
  67. "合同": "合同",
  68. }
  69. var bidtype = map[string]string{
  70. "招标": "招标",
  71. "邀标": "邀标",
  72. "询价": "询价",
  73. "单一": "单一",
  74. "竞价": "竞价",
  75. "竞谈": "竞谈",
  76. }
  77. func Duplicate(a interface{}) (ret []interface{}) {
  78. va := reflect.ValueOf(a)
  79. for i := 0; i < va.Len(); i++ {
  80. if i > 0 && reflect.DeepEqual(va.Index(i-1).Interface(), va.Index(i).Interface()) {
  81. continue
  82. }
  83. ret = append(ret, va.Index(i).Interface())
  84. }
  85. return ret
  86. }
  87. // 二分字符串查找
  88. func BinarySearch(s []string, k string) int {
  89. sort.Strings(s)
  90. lo, hi := 0, len(s)-1
  91. for lo <= hi {
  92. m := (lo + hi) >> 1
  93. if s[m] < k {
  94. lo = m + 1
  95. } else if s[m] > k {
  96. hi = m - 1
  97. } else {
  98. return m
  99. }
  100. }
  101. return -1
  102. }
  103. // 从数组中删除元素
  104. func deleteSlice(arr []string, v, stype string) []string {
  105. for k, v1 := range arr {
  106. if v1 == v {
  107. ts := time.Now().Unix()
  108. arr = append(arr[:k], arr[k+1:]...)
  109. rt := time.Now().Unix() - ts
  110. if rt > 0 {
  111. log.Println("deleteSlice", stype, rt, v, len(arr))
  112. }
  113. return arr
  114. }
  115. }
  116. return arr
  117. }