main.go 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266
  1. package main
  2. import (
  3. "encoding/json"
  4. "flag"
  5. "mongodb"
  6. "qfw/util"
  7. "qfw/util/redis"
  8. "sort"
  9. "strings"
  10. "sync"
  11. )
  12. var (
  13. MongoTool *mongodb.MongodbSim
  14. PnameLength int
  15. PurchasingLength int
  16. )
  17. func init() {
  18. MongoTool = &mongodb.MongodbSim{
  19. MongodbAddr: "172.17.4.85:27080", // 172.17.4.85:27080
  20. Size: 10,
  21. DbName: "qfw",
  22. }
  23. MongoTool.InitPool()
  24. //MongoTool = &mongodb.MongodbSim{
  25. // MongodbAddr: "172.17.4.187:27082,172.17.145.163:27083",
  26. // Size: 10,
  27. // DbName: "mixdata",
  28. // UserName: "SJZY_RWMIX_Other",
  29. // Password: "SJZY@M34I6x7D9ata",
  30. //}
  31. //MongoTool.InitPool()
  32. //redis.InitRedis1("qyxy_id=172.17.4.189:8379", 2) // 企业company_id(中标单位)
  33. redis.InitRedis1("qyxy=172.17.4.189:8379", 3) // 剑鱼企业搜索搜索
  34. PnameLength = 500
  35. PurchasingLength = 500
  36. }
  37. var name string
  38. func main1() {
  39. flag.StringVar(&name, "n", "", "企业名称")
  40. flag.Parse()
  41. if name == "" {
  42. flag.PrintDefaults()
  43. return
  44. }
  45. text := redis.GetStr("qyxy_id", name)
  46. //maps := make(map[string]interface{})
  47. //err1 := json.Unmarshal([]byte(text), &maps)
  48. //if err1 != nil {
  49. // util.Debug("-----map解析异常")
  50. //}
  51. util.Debug("company_id=", text)
  52. }
  53. func main() {
  54. sess := MongoTool.GetMgoConn()
  55. defer MongoTool.DestoryMongoConn(sess)
  56. ch := make(chan bool, 3)
  57. wg := &sync.WaitGroup{}
  58. //q := map[string]interface{}{
  59. // "_id": map[string]interface{}{
  60. // "$gte": mongodb.StringTOBsonId("5c2a3d000000000000000000"),
  61. // "$lte": mongodb.StringTOBsonId("5e0a1f000000000000000000"),
  62. // },
  63. //}
  64. field := map[string]interface{}{"agency": 1, "buyer": 1, "s_winner": 1, "projectname": 1, "purchasing": 1, "area": 1}
  65. //field := map[string]interface{}{"use_flag": 1, "company_type": 1, "company_name": 1}
  66. query := sess.DB("qfw").C("projectset_20200918").Find(nil).Select(field).Iter()
  67. count := 0
  68. for tmp := make(map[string]interface{}); query.Next(tmp); count++ {
  69. if count%5000 == 0 {
  70. util.Debug("current ---", count)
  71. }
  72. ch <- true
  73. wg.Add(1)
  74. go func(tmp map[string]interface{}) {
  75. defer func() {
  76. <-ch
  77. wg.Done()
  78. }()
  79. //redis.PutCKV("qyxy_id", util.ObjToString(tmp["company_name"]), util.ObjToString(tmp["_id"]))
  80. taskinfo1(tmp)
  81. }(tmp)
  82. tmp = make(map[string]interface{})
  83. }
  84. wg.Wait()
  85. util.Debug("over ---", count)
  86. }
  87. func taskinfo1(tmp map[string]interface{}) {
  88. if util.ObjToString(tmp["s_winner"]) != "" {
  89. winners := strings.Split(util.ObjToString(tmp["s_winner"]), ",")
  90. for _, v := range winners {
  91. winnermap := make(map[string]interface{})
  92. if b, err := redis.Exists("qyxy", v); err == nil && b {
  93. text := redis.GetStr("qyxy", v)
  94. err1 := json.Unmarshal([]byte(text), &winnermap)
  95. if err1 != nil {
  96. util.Debug(v, "winner-----map解析异常")
  97. }
  98. // bid_projectname
  99. pname := util.ObjToString(tmp["projectname"])
  100. if pname != "" {
  101. if winnermap["bid_projectname"] != nil {
  102. arr := winnermap["bid_projectname"].([]interface{})
  103. pnameArr := util.ObjArrToStringArr(arr)
  104. if BinarySearch(pnameArr, util.ObjToString(tmp["projectname"])) == -1 {
  105. pnameArr = append(pnameArr, util.ObjToString(tmp["projectname"]))
  106. }
  107. if len(pnameArr) > PnameLength {
  108. pnameArr1 := pnameArr[len(pnameArr)-PnameLength:]
  109. winnermap["bid_projectname"] = pnameArr1
  110. } else {
  111. winnermap["bid_projectname"] = pnameArr
  112. }
  113. } else {
  114. pname := []string{util.ObjToString(tmp["projectname"])}
  115. winnermap["bid_projectname"] = pname
  116. }
  117. }
  118. // bid_purchasing
  119. if util.ObjToString(tmp["purchasing"]) != "" {
  120. if winnermap["bid_purchasing"] != nil {
  121. arr := winnermap["bid_purchasing"].([]interface{})
  122. purs := util.ObjArrToStringArr(arr)
  123. if BinarySearch(purs, util.ObjToString(tmp["purchasing"])) == -1 {
  124. purs = append(purs, util.ObjToString(tmp["purchasing"]))
  125. }
  126. if len(purs) > PurchasingLength {
  127. purs1 := purs[len(purs)-PurchasingLength:]
  128. winnermap["bid_purchasing"] = purs1
  129. } else {
  130. winnermap["bid_purchasing"] = purs
  131. }
  132. } else {
  133. purs := []string{util.ObjToString(tmp["purchasing"])}
  134. winnermap["bid_purchasing"] = purs
  135. }
  136. }
  137. // bid_area
  138. if winnermap["bid_area"] != nil {
  139. arr := winnermap["bid_area"].([]interface{})
  140. areas := util.ObjArrToStringArr(arr)
  141. if BinarySearch(areas, util.ObjToString(tmp["area"])) == -1 {
  142. areas = append(areas, util.ObjToString(tmp["area"]))
  143. }
  144. winnermap["bid_area"] = areas
  145. } else {
  146. areas := []string{util.ObjToString(tmp["area"])}
  147. winnermap["bid_area"] = areas
  148. }
  149. // bid_unittype
  150. if winnermap["bid_unittype"] != nil {
  151. arr := winnermap["bid_unittype"].([]interface{})
  152. types := util.ObjArrToStringArr(arr)
  153. if BinarySearch(types, "中标单位") == -1 {
  154. types = append(types, "中标单位")
  155. }
  156. winnermap["bid_unittype"] = types
  157. } else {
  158. types := []string{"中标单位"}
  159. winnermap["bid_unittype"] = types
  160. }
  161. } else {
  162. // bid_projectname
  163. if tmp["projectname"] != nil && tmp["projectname"] != "" {
  164. winnermap["bid_projectname"] = []string{util.ObjToString(tmp["projectname"])}
  165. }
  166. // bid_purchasing
  167. if tmp["purchasing"] != nil && tmp["purchasing"] != "" {
  168. winnermap["bid_purchasing"] = strings.Split(util.ObjToString(tmp["purchasing"]), ",")
  169. }
  170. // bid_area
  171. winnermap["bid_area"] = []string{util.ObjToString(tmp["area"])}
  172. // bid_unittype
  173. winnermap["bid_unittype"] = []string{"中标单位"}
  174. }
  175. if len(winnermap) > 0 {
  176. data, _ := json.Marshal(winnermap)
  177. redis.Put("qyxy", v, string(data), 0)
  178. }
  179. }
  180. }
  181. if buyer := util.ObjToString(tmp["buyer"]); buyer != "" {
  182. buyermap := make(map[string]interface{})
  183. if b, err := redis.Exists("qyxy", buyer); err == nil && b {
  184. text := redis.GetStr("qyxy", buyer)
  185. err1 := json.Unmarshal([]byte(text), &buyermap)
  186. if err1 != nil {
  187. util.Debug(buyer, "buyer-----map解析异常")
  188. }
  189. // bid_unittype
  190. if buyermap["bid_unittype"] != nil {
  191. arr := buyermap["bid_unittype"].([]interface{})
  192. types := util.ObjArrToStringArr(arr)
  193. if BinarySearch(types, "采购单位") == -1 {
  194. types = append(types, "采购单位")
  195. }
  196. buyermap["bid_unittype"] = types
  197. } else {
  198. types := []string{"采购单位"}
  199. buyermap["bid_unittype"] = types
  200. }
  201. } else {
  202. buyermap["bid_unittype"] = []string{"采购单位"}
  203. }
  204. if len(buyermap) > 0 {
  205. data, _ := json.Marshal(buyermap)
  206. redis.Put("qyxy", buyer, string(data), 0)
  207. }
  208. }
  209. if agency := util.ObjToString(tmp["agency"]); agency != "" {
  210. agencymap := make(map[string]interface{})
  211. if b, err := redis.Exists("qyxy", agency); err == nil && b {
  212. text := redis.GetStr("qyxy", agency)
  213. err1 := json.Unmarshal([]byte(text), &agencymap)
  214. if err1 != nil {
  215. util.Debug(agency, "agency----map解析异常")
  216. }
  217. // bid_unittype
  218. if agencymap["bid_unittype"] != nil {
  219. arr := agencymap["bid_unittype"].([]interface{})
  220. types := util.ObjArrToStringArr(arr)
  221. if BinarySearch(types, "代理机构") == -1 {
  222. types = append(types, "代理机构")
  223. }
  224. agencymap["bid_unittype"] = types
  225. } else {
  226. types := []string{"代理机构"}
  227. agencymap["bid_unittype"] = types
  228. }
  229. } else {
  230. agencymap["bid_unittype"] = []string{"代理机构"}
  231. }
  232. if len(agencymap) > 0 {
  233. data, _ := json.Marshal(agencymap)
  234. redis.Put("qyxy", agency, string(data), 0)
  235. }
  236. }
  237. }
  238. func BinarySearch(s []string, k string) int {
  239. sort.Strings(s)
  240. lo, hi := 0, len(s)-1
  241. for lo <= hi {
  242. m := (lo + hi) >> 1
  243. if s[m] < k {
  244. lo = m + 1
  245. } else if s[m] > k {
  246. hi = m - 1
  247. } else {
  248. return m
  249. }
  250. }
  251. return -1
  252. }