main.go 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271
  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: "mixdata",
  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_winner=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, 2)
  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("mixdata").C("qyxy_std").Find(nil).Select(field).Skip(52035000).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. if util.IntAll(tmp["use_flag"]) > 5 {
  73. continue
  74. }
  75. if strings.Contains(util.ObjToString(tmp["company_type"]), "个体") {
  76. continue
  77. }
  78. ch <- true
  79. wg.Add(1)
  80. go func(tmp map[string]interface{}) {
  81. defer func() {
  82. <-ch
  83. wg.Done()
  84. }()
  85. redis.PutCKV("qyxy_id", util.ObjToString(tmp["company_name"]), util.ObjToString(tmp["_id"]))
  86. }(tmp)
  87. tmp = make(map[string]interface{})
  88. }
  89. wg.Wait()
  90. util.Debug("over ---", count)
  91. }
  92. func taskinfo1(tmp map[string]interface{}) {
  93. if util.ObjToString(tmp["s_winner"]) != "" {
  94. winners := strings.Split(util.ObjToString(tmp["s_winner"]), ",")
  95. for _, v := range winners{
  96. winnermap := make(map[string]interface{})
  97. if b, err := redis.Exists("qyxy_winner", v); err == nil && b {
  98. text := redis.GetStr("qyxy_winner", v)
  99. err1 := json.Unmarshal([]byte(text), &winnermap)
  100. if err1 != nil {
  101. util.Debug(v, "winner-----map解析异常")
  102. }
  103. // bid_projectname
  104. pname := util.ObjToString(tmp["projectname"])
  105. if pname != "" {
  106. if winnermap["bid_projectname"] != nil {
  107. arr := winnermap["bid_projectname"].([]interface{})
  108. pnameArr := util.ObjArrToStringArr(arr)
  109. if BinarySearch(pnameArr, util.ObjToString(tmp["projectname"])) == -1 {
  110. pnameArr = append(pnameArr, util.ObjToString(tmp["projectname"]))
  111. }
  112. if len(pnameArr) > PnameLength {
  113. pnameArr1 := pnameArr[len(pnameArr)-PnameLength:]
  114. winnermap["bid_projectname"] = pnameArr1
  115. }else {
  116. winnermap["bid_projectname"] = pnameArr
  117. }
  118. }else {
  119. pname := []string{util.ObjToString(tmp["projectname"])}
  120. winnermap["bid_projectname"] = pname
  121. }
  122. }
  123. // bid_purchasing
  124. if util.ObjToString(tmp["purchasing"]) != "" {
  125. if winnermap["bid_purchasing"] != nil {
  126. arr := winnermap["bid_purchasing"].([]interface{})
  127. purs := util.ObjArrToStringArr(arr)
  128. if BinarySearch(purs, util.ObjToString(tmp["purchasing"])) == -1 {
  129. purs = append(purs, util.ObjToString(tmp["purchasing"]))
  130. }
  131. if len(purs) > PurchasingLength {
  132. purs1 := purs[len(purs)-PurchasingLength:]
  133. winnermap["bid_purchasing"] = purs1
  134. }else {
  135. winnermap["bid_purchasing"] = purs
  136. }
  137. }else {
  138. purs := []string{util.ObjToString(tmp["purchasing"])}
  139. winnermap["bid_purchasing"] = purs
  140. }
  141. }
  142. // bid_area
  143. if winnermap["bid_area"] != nil {
  144. arr := winnermap["bid_area"].([]interface{})
  145. areas := util.ObjArrToStringArr(arr)
  146. if BinarySearch(areas, util.ObjToString(tmp["area"])) == -1 {
  147. areas = append(areas, util.ObjToString(tmp["area"]))
  148. }
  149. winnermap["bid_area"] = areas
  150. }else {
  151. areas := []string{util.ObjToString(tmp["area"])}
  152. winnermap["bid_area"] = areas
  153. }
  154. // bid_unittype
  155. if winnermap["bid_unittype"] != nil {
  156. arr := winnermap["bid_unittype"].([]interface{})
  157. types := util.ObjArrToStringArr(arr)
  158. if BinarySearch(types, "中标单位") == -1 {
  159. types = append(types, "中标单位")
  160. }
  161. winnermap["bid_unittype"] = types
  162. }else {
  163. types := []string{"中标单位"}
  164. winnermap["bid_unittype"] = types
  165. }
  166. }else {
  167. // bid_projectname
  168. if tmp["projectname"] != nil && tmp["projectname"] != "" {
  169. winnermap["bid_projectname"] = []string{util.ObjToString(tmp["projectname"])}
  170. }
  171. // bid_purchasing
  172. if tmp["purchasing"] != nil && tmp["purchasing"] != "" {
  173. winnermap["bid_purchasing"] = strings.Split(util.ObjToString(tmp["purchasing"]), ",")
  174. }
  175. // bid_area
  176. winnermap["bid_area"] = []string{util.ObjToString(tmp["area"])}
  177. // bid_unittype
  178. winnermap["bid_unittype"] = []string{"中标单位"}
  179. }
  180. if len(winnermap) > 0 {
  181. data , _ := json.Marshal(winnermap)
  182. redis.Put("qyxy_winner", v, string(data), 0)
  183. }
  184. }
  185. }
  186. if buyer := util.ObjToString(tmp["buyer"]); buyer != "" {
  187. buyermap := make(map[string]interface{})
  188. if b, err := redis.Exists("qyxy_winner", buyer); err == nil && b {
  189. text := redis.GetStr("qyxy_winner", buyer)
  190. err1 := json.Unmarshal([]byte(text), &buyermap)
  191. if err1 != nil {
  192. util.Debug(buyer, "buyer-----map解析异常")
  193. }
  194. // bid_unittype
  195. if buyermap["bid_unittype"] != nil {
  196. arr := buyermap["bid_unittype"].([]interface{})
  197. types := util.ObjArrToStringArr(arr)
  198. if BinarySearch(types, "采购单位") == -1 {
  199. types = append(types, "采购单位")
  200. }
  201. buyermap["bid_unittype"] = types
  202. }else {
  203. types := []string{"采购单位"}
  204. buyermap["bid_unittype"] = types
  205. }
  206. }else {
  207. buyermap["bid_unittype"] = []string{"采购单位"}
  208. }
  209. if len(buyermap) > 0 {
  210. data , _ := json.Marshal(buyermap)
  211. redis.Put("qyxy_winner", buyer, string(data), 0)
  212. }
  213. }
  214. if agency := util.ObjToString(tmp["agency"]); agency != "" {
  215. agencymap := make(map[string]interface{})
  216. if b, err := redis.Exists("qyxy_winner", agency); err == nil && b {
  217. text := redis.GetStr("qyxy_winner", agency)
  218. err1 := json.Unmarshal([]byte(text), &agencymap)
  219. if err1 != nil {
  220. util.Debug(agency, "agency----map解析异常")
  221. }
  222. // bid_unittype
  223. if agencymap["bid_unittype"] != nil {
  224. arr := agencymap["bid_unittype"].([]interface{})
  225. types := util.ObjArrToStringArr(arr)
  226. if BinarySearch(types, "代理机构") == -1 {
  227. types = append(types, "代理机构")
  228. }
  229. agencymap["bid_unittype"] = types
  230. }else {
  231. types := []string{"代理机构"}
  232. agencymap["bid_unittype"] = types
  233. }
  234. }else {
  235. agencymap["bid_unittype"] = []string{"代理机构"}
  236. }
  237. if len(agencymap) > 0 {
  238. data , _ := json.Marshal(agencymap)
  239. redis.Put("qyxy_winner", agency, string(data), 0)
  240. }
  241. }
  242. }
  243. func BinarySearch(s []string, k string) int {
  244. sort.Strings(s)
  245. lo, hi := 0, len(s)-1
  246. for lo <= hi {
  247. m := (lo + hi) >> 1
  248. if s[m] < k {
  249. lo = m + 1
  250. } else if s[m] > k {
  251. hi = m - 1
  252. } else {
  253. return m
  254. }
  255. }
  256. return -1
  257. }