main.go 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578
  1. package main
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "io/ioutil"
  6. "log"
  7. "mongodb"
  8. "os"
  9. "qfw/util"
  10. "strconv"
  11. "strings"
  12. "time"
  13. )
  14. type Config struct {
  15. MgoAddr string `json:"mgoAddr"`
  16. MgoDbName string `json:"mgoDbName"`
  17. MgoColl string `json:"mgoColl"`
  18. MgoSize int `json:"mgoSize"`
  19. TermFind map[string]interface{} `json:"termFind"`
  20. KeyWordFind map[string]map[string]interface{} `json:"keyWordFind"`
  21. FieldSelect map[string]interface{} `json:"fieldSelect"`
  22. FieldMapping string `json:"fieldMapping"`
  23. }
  24. var (
  25. sysConfig Config
  26. Mgo *mongodb.MongodbSim
  27. SE = util.SimpleEncrypt{Key: "topJYBX2019"}
  28. )
  29. const (
  30. ydkey = "中国移动,中移在线,中移系统,中移铁通,中移&&软件技术,中移&&信息技术有限公司,中移建设,中怡金福,中移物联网,中移互联网,中移智行,中移&&产业研究院,中移信息系统,中国移动通信有限公司,中国移动通信集团有限公司,安徽通信服务有限公司,河南省飞达通信开发有限公司,中国铁通集团有限公司,福建迅捷通信技术服务有限公司,宁夏通信服务有限公司,天津通信服务有限公司,山西通信服务有限公司,北京通信服务有限公司,内蒙古通信服务有限责任公司,吉林中移通信服务有限公司,新疆通信服务有限公司,重庆通信服务有限责任公司,湖北通信服务有限公司,河北通信服务有限公司,云南通信服务有限公司,上海通信服务有限公司,广西通信服务公司,陕西通信实业有限公司,海南省信通通信服务有限公司,中移智行网络科技有限公司,贵州中移通信服务有限公司,四川通信服务有限公司,湖南通信服务有限公司,中移金科控股有限公司,中移资本控股有限责任公司,江西中移通信服务有限公司,甘肃通信服务有限公司,西藏通信服务有限责任公司,青海中移通信服务有限公司,辽宁通信服务有限责任公司,黑龙江通信服务有限公司,山东通信服务有限公司,中京通信服务有限公司,中铁通信中心,吉林中移防腐器材有限公司,三沙华海通信服务有限公司,中移创业投资有限责任公司,郑州梨园村实业有限公司,中移(上海)商业保理有限公司,中国移动通信集团江苏有限公司,中移电子商务有限公司,中国移动通信集团上海有限公司,中移动信息技术有限公司,中国移动通信集团青海有限公司,中移物联网有限公司,中移信息系统集成有限公司,中国移动通信集团河北有限公司,中国移动通信集团甘肃有限公司,中国移动通信集团山西有限公司,中国移动通信集团辽宁有限公司,中国移动通信集团广东有限公司,中国移动通信集团北京有限公司,中国移动通信集团广西有限公司,中国移动通信集团福建有限公司,中国移动通信集团湖北有限公司,中国移动通信集团新疆有限公司,中移投资控股有限责任公司,中移系统集成有限公司,咪咕文化科技有限公司,中国移动通信集团四川有限公司,中国移动通信集团浙江有限公司,中国移动通信集团重庆有限公司,中国移动通信集团海南有限公司,中移动金融科技有限公司,中国移动通信集团黑龙江有限公司,中移(苏州)软件技术有限公司,中移园区建设发展有限公司,中国移动通信集团财务有限公司,中移(杭州)信息技术有限公司,中移在线服务有限公司,中国移动通信集团江西有限公司,中移雄安信息通信科技有限公司,中国移动通信集团西藏有限公司,中移互联网有限公司,中国移动通信集团河南有限公司,中国移动通信集团安徽有限公司,中国移动通信集团终端有限公司,中国移动通信集团宁夏有限公司,中移铁通有限公司,中国移动通信集团陕西有限公司,中国移动通信集团设计院有限公司,中国移动通信集团吉林有限公司,中移(上海)信息通信科技有限公司,中国移动通信集团云南有限公司,中国移动通信集团贵州有限公司,中国移动通信集团内蒙古有限公司,中国移动通信集团山东有限公司,中移(成都)信息通信科技有限公司,中国移动通信集团湖南有限公司,中国移动通信集团天津有限公司,上海中移信息技术有限公司,繁星智算科技(北京)有限公司,咪咕音乐有限公司,黑龙江中移通信技术工程有限公司,山东铁通工程建设有限责任公司,湖北中移通信技术工程有限公司,北京移动系统集成有限公司,长三角一体化示范区(上海)中移数智生态科技有限公司,咪咕数字传媒有限公司,山东中移通信技术有限公司,中移互联(广州)孵化器有限公司,中移湾区(广东)创新研究院有限公司,中移铁通云科技有限公司,湖南中移通信技术工程有限公司,咪咕新空文化科技(厦门)有限公司,江苏移动信息系统集成有限公司,四川中移通信技术工程有限公司,中移数智科技有限公司,咪咕互动娱乐有限公司,中移(江西)虚拟现实科技有限公司,北京北方星辰信息技术有限责任公司,上海咪咕新媒体有限公司,中移建设有限公司,中国移动(浙江)创新研究院有限公司,北京煜金桥通信建设监理咨询有限责任公司,浙江移动信息系统集成有限公司,咪咕视讯科技有限公司,辽宁中移通信技术工程有限公司,中国移动紫金(江苏)创新研究院有限公司,贵州移动信息科技有限公司,沈阳华铁通信工程监理有限公司,咪咕艾瓦文化科技(厦门)有限公司"
  31. ydtag = "运营商-移动"
  32. ydcompany = "中国移动通信集团有限公司"
  33. ltkey = "中国联通,联合网络通信,联通数字科技,联通大数据,联通在线信息,联通时科,联通物联网,联通&&产业互联网,联通智网,中讯邮电,中国联合网络通信集团有限公司,中国联合网络通信有限公司,联通智慧科技产业有限公司,联通数字科技有限公司,联通在线信息科技有限公司,联通信息导航有限公司,联通集团财务有限公司,联通融资租赁有限公司,联通支付有限公司,联通华盛通信有限公司,联通创新创业投资有限公司,中讯邮电咨询设计院有限公司,联通视频科技有限公司,临港数智科技(上海)有限公司,联通(海南)产业互联网有限公司,联通(湖南)产业互联网有限公司,联通(福建)产业互联网有限公司,联通(吉林)产业互联网有限公司,联通(四川)产业互联网有限公司,联通(上海)产业互联网有限公司,联通西部创新研究院有限公司,联通沃悦读科技文化有限公司,小沃科技有限公司,联通云数据有限公司,联通(北京)产业互联网有限公司,联通(黑龙江)产业互联网有限公司,联通(广东)产业互联网有限公司,联通智慧安全科技有限公司,联通(辽宁)产业互联网有限公司,联通大数据有限公司,联通(湖北)产业互联网有限公司,联通(河南)产业互联网有限公司,北京沃数媒广告有限公司,联通旅游(北京)有限公司,广东联通通信建设有限公司,联通物联网有限责任公司,联通(江西)产业互联网有限公司,联通沃音乐文化有限公司,沃百富信息科技(天津)有限公司,华夏邮电咨询监理有限公司,联通雄安产业互联网有限公司,联通(山西)产业互联网有限公司,联通灵境视讯(江西)科技有限公司,联通创新创业投资管理(深圳)有限责任公司,郑州凯成实业有限公司,北京电信规划设计院有限公司,联通(浙江)产业互联网有限公司,联通(江苏)产业互联网有限公司,联通(安徽)产业互联网有限公司,联通(山东)产业互联网有限公司,联通(廊坊)云数据有限公司,联通(浙江)云数据有限公司,山东省联通通信有限公司,中国联通集团黑龙江省通信有限公司,中国联通集团北京市通信有限公司,天津市联通通信有限公司,中国联通集团辽宁省通信有限公司,吉林省联通通信有限公司,河南省联通通信有限公司,中国联通集团河北省通信有限公司,联通资产运营有限公司,联通资本投资控股有限公司,四川省联通通信有限公司,内蒙古联通通信有限公司,山西省联通通信有限公司,北京电信投资有限公司,太原市通信实业有限公司,山东丽天大酒店有限公司,大连邮电通信建设有限公司,山西联通顿村培训有限公司,北京联蒙科技发展有限公司,黑龙江省电信技术服务中心有限责任公司,内蒙古通信建设工程有限责任公司,大连泰立达通信工程有限公司"
  34. lttag = "运营商-联通"
  35. ltcompany = "中国联合网络通信集团有限公司"
  36. dxkey = "中国电信,天翼视讯,天翼电信,公众信息产业,中电万维,中电鸿信,中电信数智,中电福富,天翼云,中电领航,中电智能科技,天翼交通,天翼&&物联,天翼&&数字,天翼乡村,中电信智能,天翼数字,上海理想信息产业,中电信量子信息,中电信数字,中电信,中国电信集团有限公司,陕西电信实业有限公司,上海电信实业(集团)有限公司,湖南省电信实业集团有限公司,中国电信集团投资有限公司,重庆电信菲斯特实业有限公司,海南省电信实业集团有限公司,中国电信集团实业资产管理有限公司,贵州电信实业有限公司,湖北电信实业有限责任公司,浙江省电信实业集团有限公司,中国电信集团卫星通信有限公司,甘肃电信实业有限公司,四川电信实业集团有限责任公司,福建省电信实业集团有限公司,江西省电信实业有限责任公司,广东省电信实业集团有限公司,云南电信网信实业集团通信线路器材有限公司,温州国脉集团有限公司,信元公众信息发展有限责任公司,广西电信实业集团有限公司,江苏省电信实业集团有限责任公司,新疆电信实业(集团)有限责任公司,北京辰茂鸿翔酒店有限责任公司,天翼科技创业投资有限公司,安徽电信实业集团有限公司,新疆寰融实业有限公司,上海华新电线电缆有限公司,北京信元电信维护有限责任公司,中电信私募基金管理有限公司,四川宏致通信设备有限责任公司,四川省南充市第九建筑安装工程有限公司,广东邮电人才服务有限公司,广州市电信实业有限公司,北京信捷苑物业管理有限公司,广东南方通信集团有限公司,北京国信苑物业管理有限公司,广西邮电器材有限公司,北海辰茂海滩酒店有限公司,江苏辰茂新世纪大酒店有限公司,迪佛电信集团有限公司,海口电信城市建设投资有限公司,海口电信滨江建设有限公司,湖南省新南天置业有限公司,海振华源能源科技(成都)有限公司,福信新能源(陕西)有限公司"
  37. dxtag = "运营商-电信"
  38. dxcompany = "中国电信集团有限公司"
  39. )
  40. func init() {
  41. util.ReadConfig(&sysConfig)
  42. log.Println("配置加载成功")
  43. Mgo = &mongodb.MongodbSim{
  44. MongodbAddr: sysConfig.MgoAddr,
  45. DbName: sysConfig.MgoDbName,
  46. Size: 20,
  47. }
  48. Mgo.InitPool()
  49. log.Println("数据库加载成功")
  50. }
  51. func PathExists(path string) (bool, error) {
  52. _, err := os.Stat(path)
  53. if err == nil {
  54. return true, nil
  55. }
  56. if os.IsNotExist(err) {
  57. return false, nil
  58. }
  59. return false, err
  60. }
  61. func main() {
  62. query := map[string]interface{}{}
  63. log.Println("config", sysConfig)
  64. if sysConfig.TermFind != nil && len(sysConfig.TermFind) > 0 {
  65. for k, v := range sysConfig.TermFind {
  66. query[k] = v
  67. }
  68. }
  69. if sysConfig.KeyWordFind != nil && len(sysConfig.KeyWordFind) > 0 {
  70. for k, v := range sysConfig.KeyWordFind {
  71. keyMap := map[string]interface{}{}
  72. for kk, vv := range v {
  73. keyMap[kk] = vv
  74. }
  75. query[k] = keyMap
  76. }
  77. }
  78. log.Println("查询条件 ", query)
  79. count, session := 0, Mgo.GetMgoConn()
  80. defer func() {
  81. Mgo.DestoryMongoConn(session)
  82. }()
  83. iter := session.DB(sysConfig.MgoDbName).C(sysConfig.MgoColl).Find(&query).Select(sysConfig.FieldSelect).Sort("_id").Iter()
  84. data := []map[string]interface{}{}
  85. thisData := map[string]interface{}{}
  86. for {
  87. if !iter.Next(&thisData) {
  88. break
  89. }
  90. count++
  91. log.Println("第", count, "条")
  92. data = append(data, thisData)
  93. }
  94. if len(data) > 0 {
  95. log.Println("数据条数 ", len(data))
  96. for _, v := range data {
  97. fieldMap := map[string]string{}
  98. json.Unmarshal([]byte(sysConfig.FieldMapping), &fieldMap)
  99. if len(fieldMap) > 0 {
  100. subMap := map[string]map[string]string{
  101. "招标": map[string]string{"0": "3"},
  102. "竞谈": map[string]string{"0": "3"},
  103. "单一": map[string]string{"0": "3"},
  104. "询价": map[string]string{"0": "3"},
  105. "竞价": map[string]string{"0": "3"},
  106. "邀标": map[string]string{"0": "3"},
  107. "论证意见": map[string]string{"1": "2"},
  108. "预告": map[string]string{"1": "2"},
  109. "预审": map[string]string{"1": "2"},
  110. "预审结果": map[string]string{"1": "2"},
  111. "需求公示": map[string]string{"1": "2"},
  112. "采购意向": map[string]string{"1": "2"},
  113. "变更": map[string]string{"2": "5"},
  114. "废标": map[string]string{"3": "7"},
  115. "流标": map[string]string{"3": "8"},
  116. "中标": map[string]string{"3": "10"},
  117. "成交": map[string]string{"3": "11"},
  118. "结果变更": map[string]string{"3": "11"},
  119. "合同": map[string]string{"3": "12"},
  120. "验收": map[string]string{"5": "13"},
  121. "违规": map[string]string{"5": "14"},
  122. }
  123. if v["filehref"] != nil {
  124. if filehrefs1, ok := v["filehref"].([]interface{}); ok {
  125. filehrefs := util.ObjArrToMapArr(filehrefs1)
  126. filehrefArr := []map[string]interface{}{}
  127. for _, vv := range filehrefs {
  128. filehrefMaps := map[string]interface{}{}
  129. url := util.ObjToString(vv["url"])
  130. filehrefMaps["infoFileUrl"] = strings.ReplaceAll(url, "jy-datafile.oss-cn-beijing.aliyuncs.com", "60.205.191.245:51235")
  131. filehrefMaps["infoFileName"] = vv["filename"]
  132. filehrefArr = append(filehrefArr, filehrefMaps)
  133. }
  134. v["filehref"] = filehrefArr
  135. } else if filehrefs2, ok1 := v["filehref"].([]map[string]interface{}); ok1 {
  136. filehrefArr := []map[string]interface{}{}
  137. for _, vv := range filehrefs2 {
  138. filehrefMaps := map[string]interface{}{}
  139. url := util.ObjToString(vv["url"])
  140. filehrefMaps["infoFileUrl"] = strings.ReplaceAll(url, "jy-datafile.oss-cn-beijing.aliyuncs.com", "60.205.191.245:51235")
  141. filehrefMaps["infoFileName"] = vv["filename"]
  142. filehrefArr = append(filehrefArr, filehrefMaps)
  143. }
  144. v["filehref"] = filehrefArr
  145. }
  146. }
  147. bidtype := util.ObjToString(v["bidtype"])
  148. toptype := util.ObjToString(v["toptype"])
  149. subtype := util.ObjToString(v["subtype"])
  150. if bidtype != "" {
  151. bidtypeMap := map[string]string{
  152. "招标": "0",
  153. "邀标": "1",
  154. "竞谈": "2",
  155. "单一": "3",
  156. "询价": "4",
  157. "竞价": "6",
  158. }
  159. v["bidtype"] = bidtypeMap[bidtype]
  160. } else {
  161. subtypeMap := map[string]string{
  162. "招标": "0",
  163. "邀标": "1",
  164. "竞谈": "2",
  165. "单一": "3",
  166. "询价": "4",
  167. "其它": "5",
  168. "竞价": "6",
  169. }
  170. v["bidtype"] = subtypeMap[subtype]
  171. }
  172. bidway := util.ObjToString(v["bidway"])
  173. if bidway == "电子投标" {
  174. v["bidway"] = "1"
  175. } else {
  176. v["bidway"] = "0"
  177. }
  178. site := util.ObjToString(v["site"])
  179. siteStr := "全军武器装备采购信息网,军队采购网,军队采购网新网址"
  180. for _, vv := range strings.Split(siteStr, ",") {
  181. if strings.Contains(site, vv) {
  182. v["armySource"] = "是"
  183. }
  184. }
  185. delete(v, "site")
  186. publishtime := util.Int64All(v["publishtime"])
  187. if publishtime > 0 {
  188. v["publishtime"] = time.Unix(publishtime, 0).Format(util.Date_Full_Layout)
  189. // v["infoPublishTimeMonth"] = time.Unix(publishtime, 0).Format("2006-01")
  190. }
  191. bidopentime := util.Int64All(v["bidopentime"])
  192. if bidopentime > 0 {
  193. v["bidopentime"] = time.Unix(bidopentime, 0).Format(util.Date_Full_Layout)
  194. }
  195. docstarttime := util.Int64All(v["docstarttime"])
  196. if docstarttime > 0 {
  197. v["docstarttime"] = time.Unix(docstarttime, 0).Format(util.Date_Full_Layout)
  198. }
  199. docendtime := util.Int64All(v["docendtime"])
  200. if docendtime > 0 {
  201. v["docendtime"] = time.Unix(docendtime, 0).Format(util.Date_Full_Layout)
  202. }
  203. bidstarttime := util.Int64All(v["bidstarttime"])
  204. if bidstarttime > 0 {
  205. v["bidstarttime"] = time.Unix(bidstarttime, 0).Format(util.Date_Full_Layout)
  206. }
  207. bidendtime := util.Int64All(v["bidendtime"])
  208. if bidendtime > 0 {
  209. v["bidendtime"] = time.Unix(bidendtime, 0).Format(util.Date_Full_Layout)
  210. }
  211. tagname := util.ObjToString(v["tagname"])
  212. tagname2 := util.ObjToString(v["tagname2"])
  213. buyer := util.ObjToString(v["buyer"])
  214. buyerperson := util.ObjToString(v["buyerperson"])
  215. buyertel := util.ObjToString(v["buyertel"])
  216. s_winner := util.ObjToString(v["s_winner"])
  217. winnerperson := util.ObjToString(v["winnerperson"])
  218. winnertel := util.ObjToString(v["winnertel"])
  219. agency := util.ObjToString(v["agency"])
  220. agencyperson := util.ObjToString(v["agencyperson"])
  221. agencytel := util.ObjToString(v["agencytel"])
  222. v["tagname"] = strings.Split(tagname, ",")
  223. v["tagname2"] = strings.Split(tagname2, ",")
  224. v["buyer"] = strings.Split(buyer, ",")
  225. v["buyerperson"] = strings.Split(buyerperson, ",")
  226. v["buyertel"] = strings.Split(buyertel, ",")
  227. winnerArr := strings.Split(s_winner, ",")
  228. v["winnerperson"] = strings.Split(winnerperson, ",")
  229. v["winnertel"] = strings.Split(winnertel, ",")
  230. v["agency"] = strings.Split(agency, ",")
  231. v["agencyperson"] = strings.Split(agencyperson, ",")
  232. v["agencytel"] = strings.Split(agencytel, ",")
  233. if v["budget"] != nil {
  234. v["budget"] = []map[string]string{
  235. map[string]string{
  236. "unit": "",
  237. "amount": strconv.FormatFloat(util.Float64All(v["budget"]), 'f', -1, 64),
  238. },
  239. }
  240. } else {
  241. v["budget"] = []map[string]string{
  242. map[string]string{
  243. "unit": "",
  244. "amount": "",
  245. },
  246. }
  247. }
  248. if v["bidamount"] != nil {
  249. v["bidamount"] = []map[string]string{
  250. map[string]string{
  251. "unit": "",
  252. "amount": strconv.FormatFloat(util.Float64All(v["bidamount"]), 'f', -1, 64),
  253. },
  254. }
  255. } else {
  256. v["bidamount"] = []map[string]string{
  257. map[string]string{
  258. "unit": "",
  259. "amount": "",
  260. },
  261. }
  262. }
  263. multipackage := 0
  264. isOptimization := 0
  265. if v["multipackage"] == nil {
  266. v["multipackage"] = "0"
  267. } else {
  268. v["multipackage"] = fmt.Sprint(v["multipackage"])
  269. multipackage = util.IntAll(v["multipackage"])
  270. }
  271. if v["isOptimization"] == nil {
  272. v["isOptimization"] = "0"
  273. } else {
  274. v["isOptimization"] = fmt.Sprint(v["isOptimization"])
  275. isOptimization = util.IntAll(v["isOptimization"])
  276. }
  277. if subtype == "其它" {
  278. if toptype == "预告" {
  279. v["toptype"] = "1"
  280. v["subtype"] = "2"
  281. } else if toptype == "招标" {
  282. v["toptype"] = "2"
  283. v["subtype"] = "6"
  284. } else if toptype == "结果" {
  285. v["toptype"] = "3"
  286. v["subtype"] = "9"
  287. } else {
  288. v["toptype"] = "5"
  289. v["subtype"] = "15"
  290. }
  291. } else {
  292. for t, s := range subMap[subtype] {
  293. v["toptype"] = t
  294. v["subtype"] = s
  295. }
  296. }
  297. //多包合并
  298. if isOptimization == 1 && multipackage == 1 && v["package"] != nil {
  299. wArr := []string{}
  300. bArr := []map[string]string{}
  301. if packages, ok := v["package"].(map[string]interface{}); ok {
  302. for _, vv := range packages {
  303. if packages1, oks := vv.(map[string]interface{}); oks {
  304. if winner_all, wok := packages1["winner_all"].([]map[string]interface{}); wok {
  305. for _, win := range winner_all {
  306. winnerStr := util.ObjToString(win["winner"])
  307. bidamountStr := strconv.FormatFloat(util.Float64All(win["bidamount"]), 'f', -1, 64)
  308. wArr = append(wArr, winnerStr)
  309. bArr = append(bArr, map[string]string{"unit": "", "amount": bidamountStr})
  310. }
  311. } else if winner_all, wok := packages1["winner_all"].([]interface{}); wok {
  312. for _, win := range winner_all {
  313. if win1, wok1 := win.(map[string]interface{}); wok1 {
  314. winnerStr := util.ObjToString(win1["winner"])
  315. bidamountStr := strconv.FormatFloat(util.Float64All(win1["bidamount"]), 'f', -1, 64)
  316. wArr = append(wArr, winnerStr)
  317. bArr = append(bArr, map[string]string{"unit": "", "amount": bidamountStr})
  318. }
  319. }
  320. }
  321. }
  322. }
  323. winnerArr = wArr
  324. v["winner"] = wArr
  325. v["bidamount"] = bArr
  326. }
  327. } else if multipackage == 1 && v["package"] != nil {
  328. wArr := []string{}
  329. bArr := []map[string]string{}
  330. if packages, ok := v["package"].([]map[string]interface{}); ok {
  331. for _, vv := range packages {
  332. winnerStr := util.ObjToString(vv["winner"])
  333. bidamountStr := strconv.FormatFloat(util.Float64All(vv["bidamount"]), 'f', -1, 64)
  334. wArr = append(wArr, winnerStr)
  335. bArr = append(bArr, map[string]string{"unit": "", "amount": bidamountStr})
  336. }
  337. } else if packages, ok := v["package"].([]interface{}); ok {
  338. for _, vv := range packages {
  339. if packages1, vvok := vv.(map[string]interface{}); vvok {
  340. winnerStr := util.ObjToString(packages1["winner"])
  341. bidamountStr := strconv.FormatFloat(util.Float64All(packages1["bidamount"]), 'f', -1, 64)
  342. wArr = append(wArr, winnerStr)
  343. bArr = append(bArr, map[string]string{"unit": "", "amount": bidamountStr})
  344. }
  345. }
  346. }
  347. winnerArr = wArr
  348. v["winner"] = wArr
  349. v["bidamount"] = bArr
  350. } else if strings.Contains(s_winner, ",") {
  351. winnerArr = []string{s_winner}
  352. }
  353. //
  354. delete(v, "package")
  355. tagNameArr := []string{}
  356. mainCompanyArr := []string{}
  357. v["s_winner"] = winnerArr
  358. for _, vv := range winnerArr {
  359. isOk := false
  360. if strings.Contains(vv, ",") {
  361. v["multipackage"] = "2"
  362. tagNameArr111 := []string{}
  363. mainCompanyArr111 := []string{}
  364. for _, vvv := range strings.Split(vv, ",") {
  365. isOks := false
  366. for _, yd := range strings.Split(ydkey, ",") {
  367. if strings.Contains(yd, "&&") {
  368. keys := strings.Split(yd, "&&")
  369. key1, key2 := keys[0], keys[1]
  370. if strings.Contains(vvv, key1) && strings.Contains(vvv, key2) {
  371. if !isOks {
  372. isOks = true
  373. tagNameArr111 = append(tagNameArr111, ydtag)
  374. mainCompanyArr111 = append(mainCompanyArr111, ydcompany)
  375. }
  376. }
  377. if isOks {
  378. break
  379. }
  380. } else {
  381. if strings.Contains(vvv, yd) {
  382. if !isOks {
  383. isOks = true
  384. tagNameArr111 = append(tagNameArr111, ydtag)
  385. mainCompanyArr111 = append(mainCompanyArr111, ydcompany)
  386. }
  387. }
  388. if isOks {
  389. break
  390. }
  391. }
  392. }
  393. for _, yd := range strings.Split(ltkey, ",") {
  394. if strings.Contains(yd, "&&") {
  395. keys := strings.Split(yd, "&&")
  396. key1, key2 := keys[0], keys[1]
  397. if strings.Contains(vvv, key1) && strings.Contains(vvv, key2) {
  398. if !isOks {
  399. isOks = true
  400. tagNameArr111 = append(tagNameArr111, lttag)
  401. mainCompanyArr111 = append(mainCompanyArr111, ltcompany)
  402. }
  403. }
  404. if isOks {
  405. break
  406. }
  407. } else {
  408. if strings.Contains(vvv, yd) {
  409. if !isOks {
  410. isOks = true
  411. tagNameArr111 = append(tagNameArr111, lttag)
  412. mainCompanyArr111 = append(mainCompanyArr111, ltcompany)
  413. }
  414. }
  415. if isOks {
  416. break
  417. }
  418. }
  419. }
  420. for _, yd := range strings.Split(dxkey, ",") {
  421. if strings.Contains(yd, "&&") {
  422. keys := strings.Split(yd, "&&")
  423. key1, key2 := keys[0], keys[1]
  424. if strings.Contains(vvv, key1) && strings.Contains(vvv, key2) {
  425. if !isOks {
  426. isOks = true
  427. tagNameArr111 = append(tagNameArr111, dxtag)
  428. mainCompanyArr111 = append(mainCompanyArr111, dxcompany)
  429. }
  430. }
  431. if isOks {
  432. break
  433. }
  434. } else {
  435. if strings.Contains(vvv, yd) {
  436. if !isOks {
  437. isOks = true
  438. tagNameArr111 = append(tagNameArr111, dxtag)
  439. mainCompanyArr111 = append(mainCompanyArr111, dxcompany)
  440. }
  441. }
  442. if isOks {
  443. break
  444. }
  445. }
  446. }
  447. if !isOks {
  448. tagNameArr111 = append(tagNameArr111, " ")
  449. mainCompanyArr111 = append(mainCompanyArr111, " ")
  450. }
  451. log.Println("isOks ", isOks)
  452. log.Println("tagNameArr111 ", tagNameArr111)
  453. log.Println("mainCompanyArr111 ", mainCompanyArr111)
  454. }
  455. tagNameArr = append(tagNameArr, strings.Join(tagNameArr111, ","))
  456. mainCompanyArr = append(mainCompanyArr, strings.Join(mainCompanyArr111, ","))
  457. } else {
  458. for _, yd := range strings.Split(ydkey, ",") {
  459. if strings.Contains(yd, "&&") {
  460. keys := strings.Split(yd, "&&")
  461. key1, key2 := keys[0], keys[1]
  462. if strings.Contains(vv, key1) && strings.Contains(vv, key2) {
  463. if !isOk {
  464. isOk = true
  465. tagNameArr = append(tagNameArr, ydtag)
  466. mainCompanyArr = append(mainCompanyArr, ydcompany)
  467. }
  468. }
  469. if isOk {
  470. break
  471. }
  472. } else {
  473. if strings.Contains(vv, yd) {
  474. if !isOk {
  475. isOk = true
  476. tagNameArr = append(tagNameArr, ydtag)
  477. mainCompanyArr = append(mainCompanyArr, ydcompany)
  478. }
  479. }
  480. if isOk {
  481. break
  482. }
  483. }
  484. }
  485. for _, yd := range strings.Split(ltkey, ",") {
  486. if strings.Contains(yd, "&&") {
  487. keys := strings.Split(yd, "&&")
  488. key1, key2 := keys[0], keys[1]
  489. if strings.Contains(vv, key1) && strings.Contains(vv, key2) {
  490. if !isOk {
  491. isOk = true
  492. tagNameArr = append(tagNameArr, lttag)
  493. mainCompanyArr = append(mainCompanyArr, ltcompany)
  494. }
  495. }
  496. if isOk {
  497. break
  498. }
  499. } else {
  500. if strings.Contains(vv, yd) {
  501. if !isOk {
  502. isOk = true
  503. tagNameArr = append(tagNameArr, lttag)
  504. mainCompanyArr = append(mainCompanyArr, ltcompany)
  505. }
  506. }
  507. if isOk {
  508. break
  509. }
  510. }
  511. }
  512. for _, yd := range strings.Split(dxkey, ",") {
  513. if strings.Contains(yd, "&&") {
  514. keys := strings.Split(yd, "&&")
  515. key1, key2 := keys[0], keys[1]
  516. if strings.Contains(vv, key1) && strings.Contains(vv, key2) {
  517. if !isOk {
  518. isOk = true
  519. tagNameArr = append(tagNameArr, dxtag)
  520. mainCompanyArr = append(mainCompanyArr, dxcompany)
  521. }
  522. }
  523. if isOk {
  524. break
  525. }
  526. } else {
  527. if strings.Contains(vv, yd) {
  528. if !isOk {
  529. isOk = true
  530. tagNameArr = append(tagNameArr, dxtag)
  531. mainCompanyArr = append(mainCompanyArr, dxcompany)
  532. }
  533. }
  534. if isOk {
  535. break
  536. }
  537. }
  538. }
  539. if !isOk {
  540. tagNameArr = append(tagNameArr, "")
  541. mainCompanyArr = append(mainCompanyArr, "")
  542. }
  543. }
  544. }
  545. v["tagname"] = tagNameArr
  546. v["tagname2"] = mainCompanyArr
  547. for f, m := range fieldMap {
  548. if v[f] != nil {
  549. v[m] = v[f]
  550. if f != m {
  551. delete(v, f)
  552. }
  553. }
  554. }
  555. }
  556. }
  557. dataMap := map[string]interface{}{"data": data}
  558. jsonData, err := json.Marshal(dataMap)
  559. if err != nil {
  560. fmt.Println("JSON marshaling failed:", err)
  561. return
  562. }
  563. err = ioutil.WriteFile("data.json", jsonData, 0644)
  564. if err != nil {
  565. fmt.Println("Writing JSON file failed:", err)
  566. return
  567. }
  568. log.Println("生成json成功")
  569. }
  570. }