tool.go 2.3 KB

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