main.go 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517
  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. gdkey = "楚天视讯,中国广电,广播电视网络集团,广电网络,玖云大数据"
  40. gdtag = "运营商-广电"
  41. gdcompany = "中国广播电视网络集团有限公司"
  42. ttkey = "中国铁塔,铁塔能源,铁塔智联"
  43. tttag = "运营商-铁塔"
  44. ttcompany = "中国铁塔股份有限公司"
  45. )
  46. func init() {
  47. util.ReadConfig(&sysConfig)
  48. log.Println("配置加载成功")
  49. Mgo = &mongodb.MongodbSim{
  50. MongodbAddr: sysConfig.MgoAddr,
  51. DbName: sysConfig.MgoDbName,
  52. Size: 20,
  53. }
  54. Mgo.InitPool()
  55. log.Println("数据库加载成功")
  56. }
  57. func PathExists(path string) (bool, error) {
  58. _, err := os.Stat(path)
  59. if err == nil {
  60. return true, nil
  61. }
  62. if os.IsNotExist(err) {
  63. return false, nil
  64. }
  65. return false, err
  66. }
  67. func main() {
  68. query := map[string]interface{}{}
  69. log.Println("config", sysConfig)
  70. if sysConfig.TermFind != nil && len(sysConfig.TermFind) > 0 {
  71. for k, v := range sysConfig.TermFind {
  72. query[k] = v
  73. }
  74. }
  75. if sysConfig.KeyWordFind != nil && len(sysConfig.KeyWordFind) > 0 {
  76. for k, v := range sysConfig.KeyWordFind {
  77. keyMap := map[string]interface{}{}
  78. for kk, vv := range v {
  79. keyMap[kk] = vv
  80. }
  81. query[k] = keyMap
  82. }
  83. }
  84. log.Println("查询条件 ", query)
  85. count, session := 0, Mgo.GetMgoConn()
  86. defer func() {
  87. Mgo.DestoryMongoConn(session)
  88. }()
  89. iter := session.DB(sysConfig.MgoDbName).C(sysConfig.MgoColl).Find(&query).Select(sysConfig.FieldSelect).Sort("_id").Iter()
  90. data := []map[string]interface{}{}
  91. thisData := map[string]interface{}{}
  92. for {
  93. if !iter.Next(&thisData) {
  94. break
  95. }
  96. count++
  97. log.Println("第", count, "条")
  98. data = append(data, thisData)
  99. }
  100. if len(data) > 0 {
  101. log.Println("数据条数 ", len(data))
  102. for _, v := range data {
  103. fieldMap := map[string]string{}
  104. json.Unmarshal([]byte(sysConfig.FieldMapping), &fieldMap)
  105. if len(fieldMap) > 0 {
  106. subMap := map[string]map[string]string{
  107. "招标": map[string]string{"0": "3"},
  108. "竞谈": map[string]string{"0": "3"},
  109. "单一": map[string]string{"0": "3"},
  110. "询价": map[string]string{"0": "3"},
  111. "竞价": map[string]string{"0": "3"},
  112. "邀标": map[string]string{"0": "3"},
  113. "论证意见": map[string]string{"1": "2"},
  114. "预告": map[string]string{"1": "2"},
  115. "预审": map[string]string{"1": "2"},
  116. "预审结果": map[string]string{"1": "2"},
  117. "需求公示": map[string]string{"1": "2"},
  118. "采购意向": map[string]string{"1": "2"},
  119. "变更": map[string]string{"2": "5"},
  120. "废标": map[string]string{"3": "7"},
  121. "流标": map[string]string{"3": "8"},
  122. "中标": map[string]string{"3": "10"},
  123. "成交": map[string]string{"3": "11"},
  124. "结果变更": map[string]string{"3": "11"},
  125. "合同": map[string]string{"3": "12"},
  126. "验收": map[string]string{"5": "13"},
  127. "违规": map[string]string{"5": "14"},
  128. }
  129. if v["filehref"] != nil {
  130. if filehrefs1, ok := v["filehref"].([]interface{}); ok {
  131. filehrefs := util.ObjArrToMapArr(filehrefs1)
  132. filehrefArr := []map[string]interface{}{}
  133. for _, vv := range filehrefs {
  134. filehrefMaps := map[string]interface{}{}
  135. url := util.ObjToString(vv["url"])
  136. filehrefMaps["infoFileUrl"] = strings.ReplaceAll(url, "jy-datafile.oss-cn-beijing.aliyuncs.com", "60.205.191.245:51235")
  137. filehrefMaps["infoFileName"] = vv["filename"]
  138. filehrefArr = append(filehrefArr, filehrefMaps)
  139. }
  140. v["filehref"] = filehrefArr
  141. } else if filehrefs2, ok1 := v["filehref"].([]map[string]interface{}); ok1 {
  142. filehrefArr := []map[string]interface{}{}
  143. for _, vv := range filehrefs2 {
  144. filehrefMaps := map[string]interface{}{}
  145. url := util.ObjToString(vv["url"])
  146. filehrefMaps["infoFileUrl"] = strings.ReplaceAll(url, "jy-datafile.oss-cn-beijing.aliyuncs.com", "60.205.191.245:51235")
  147. filehrefMaps["infoFileName"] = vv["filename"]
  148. filehrefArr = append(filehrefArr, filehrefMaps)
  149. }
  150. v["filehref"] = filehrefArr
  151. }
  152. }
  153. bidtype := util.ObjToString(v["bidtype"])
  154. toptype := util.ObjToString(v["toptype"])
  155. subtype := util.ObjToString(v["subtype"])
  156. if bidtype != "" {
  157. bidtypeMap := map[string]string{
  158. "招标": "0",
  159. "邀标": "1",
  160. "竞谈": "2",
  161. "单一": "3",
  162. "询价": "4",
  163. "竞价": "6",
  164. }
  165. v["bidtype"] = bidtypeMap[bidtype]
  166. } else {
  167. subtypeMap := map[string]string{
  168. "招标": "0",
  169. "邀标": "1",
  170. "竞谈": "2",
  171. "单一": "3",
  172. "询价": "4",
  173. "其它": "5",
  174. "竞价": "6",
  175. }
  176. v["bidtype"] = subtypeMap[subtype]
  177. }
  178. bidway := util.ObjToString(v["bidway"])
  179. if bidway == "电子投标" {
  180. v["bidway"] = "1"
  181. } else {
  182. v["bidway"] = "0"
  183. }
  184. site := util.ObjToString(v["site"])
  185. siteStr := "全军武器装备采购信息网,军队采购网,军队采购网新网址"
  186. for _, vv := range strings.Split(siteStr, ",") {
  187. if strings.Contains(site, vv) {
  188. v["armySource"] = "是"
  189. }
  190. }
  191. delete(v, "site")
  192. publishtime := util.Int64All(v["publishtime"])
  193. if publishtime > 0 {
  194. v["publishtime"] = time.Unix(publishtime, 0).Format(util.Date_Full_Layout)
  195. // v["infoPublishTimeMonth"] = time.Unix(publishtime, 0).Format("2006-01")
  196. }
  197. bidopentime := util.Int64All(v["bidopentime"])
  198. if bidopentime > 0 {
  199. v["bidopentime"] = time.Unix(bidopentime, 0).Format(util.Date_Full_Layout)
  200. }
  201. docstarttime := util.Int64All(v["docstarttime"])
  202. if docstarttime > 0 {
  203. v["docstarttime"] = time.Unix(docstarttime, 0).Format(util.Date_Full_Layout)
  204. }
  205. docendtime := util.Int64All(v["docendtime"])
  206. if docendtime > 0 {
  207. v["docendtime"] = time.Unix(docendtime, 0).Format(util.Date_Full_Layout)
  208. }
  209. bidstarttime := util.Int64All(v["bidstarttime"])
  210. if bidstarttime > 0 {
  211. v["bidstarttime"] = time.Unix(bidstarttime, 0).Format(util.Date_Full_Layout)
  212. }
  213. bidendtime := util.Int64All(v["bidendtime"])
  214. if bidendtime > 0 {
  215. v["bidendtime"] = time.Unix(bidendtime, 0).Format(util.Date_Full_Layout)
  216. }
  217. tagname := util.ObjToString(v["tagname"])
  218. tagname2 := util.ObjToString(v["tagname2"])
  219. buyer := util.ObjToString(v["buyer"])
  220. buyerperson := util.ObjToString(v["buyerperson"])
  221. buyertel := util.ObjToString(v["buyertel"])
  222. s_winner := util.ObjToString(v["s_winner"])
  223. winnerperson := util.ObjToString(v["winnerperson"])
  224. winnertel := util.ObjToString(v["winnertel"])
  225. agency := util.ObjToString(v["agency"])
  226. agencyperson := util.ObjToString(v["agencyperson"])
  227. agencytel := util.ObjToString(v["agencytel"])
  228. v["tagname"] = strings.Split(tagname, ",")
  229. v["tagname2"] = strings.Split(tagname2, ",")
  230. v["buyer"] = strings.Split(buyer, ",")
  231. v["buyerperson"] = strings.Split(buyerperson, ",")
  232. v["buyertel"] = strings.Split(buyertel, ",")
  233. winnerArr := strings.Split(s_winner, ",")
  234. v["winnerperson"] = strings.Split(winnerperson, ",")
  235. v["winnertel"] = strings.Split(winnertel, ",")
  236. v["agency"] = strings.Split(agency, ",")
  237. v["agencyperson"] = strings.Split(agencyperson, ",")
  238. v["agencytel"] = strings.Split(agencytel, ",")
  239. if v["budget"] != nil {
  240. v["budget"] = []map[string]string{
  241. map[string]string{
  242. "unit": "",
  243. "amount": strconv.FormatFloat(util.Float64All(v["budget"]), 'f', -1, 64),
  244. },
  245. }
  246. } else {
  247. v["budget"] = []map[string]string{
  248. map[string]string{
  249. "unit": "",
  250. "amount": "",
  251. },
  252. }
  253. }
  254. if v["bidamount"] != nil {
  255. v["bidamount"] = []map[string]string{
  256. map[string]string{
  257. "unit": "",
  258. "amount": strconv.FormatFloat(util.Float64All(v["bidamount"]), 'f', -1, 64),
  259. },
  260. }
  261. } else {
  262. v["bidamount"] = []map[string]string{
  263. map[string]string{
  264. "unit": "",
  265. "amount": "",
  266. },
  267. }
  268. }
  269. multipackage := 0
  270. isOptimization := 0
  271. if v["multipackage"] == nil {
  272. v["multipackage"] = "0"
  273. } else {
  274. v["multipackage"] = fmt.Sprint(v["multipackage"])
  275. multipackage = util.IntAll(v["multipackage"])
  276. }
  277. if v["isOptimization"] == nil {
  278. v["isOptimization"] = "0"
  279. } else {
  280. v["isOptimization"] = fmt.Sprint(v["isOptimization"])
  281. isOptimization = util.IntAll(v["isOptimization"])
  282. }
  283. if subtype == "其它" {
  284. if toptype == "预告" {
  285. v["toptype"] = "1"
  286. v["subtype"] = "2"
  287. } else if toptype == "招标" {
  288. v["toptype"] = "2"
  289. v["subtype"] = "6"
  290. } else if toptype == "结果" {
  291. v["toptype"] = "3"
  292. v["subtype"] = "9"
  293. } else {
  294. v["toptype"] = "5"
  295. v["subtype"] = "15"
  296. }
  297. } else {
  298. for t, s := range subMap[subtype] {
  299. v["toptype"] = t
  300. v["subtype"] = s
  301. }
  302. }
  303. //多包合并
  304. if isOptimization == 1 && multipackage == 1 && v["package"] != nil {
  305. wArr := []string{}
  306. bArr := []map[string]string{}
  307. if packages, ok := v["package"].(map[string]interface{}); ok {
  308. for _, vv := range packages {
  309. if packages1, oks := vv.(map[string]interface{}); oks {
  310. if winner_all, wok := packages1["winner_all"].([]map[string]interface{}); wok {
  311. for _, win := range winner_all {
  312. winnerStr := util.ObjToString(win["winner"])
  313. bidamountStr := strconv.FormatFloat(util.Float64All(win["bidamount"]), 'f', -1, 64)
  314. wArr = append(wArr, winnerStr)
  315. bArr = append(bArr, map[string]string{"unit": "", "amount": bidamountStr})
  316. }
  317. } else if winner_all, wok := packages1["winner_all"].([]interface{}); wok {
  318. for _, win := range winner_all {
  319. if win1, wok1 := win.(map[string]interface{}); wok1 {
  320. winnerStr := util.ObjToString(win1["winner"])
  321. bidamountStr := strconv.FormatFloat(util.Float64All(win1["bidamount"]), 'f', -1, 64)
  322. wArr = append(wArr, winnerStr)
  323. bArr = append(bArr, map[string]string{"unit": "", "amount": bidamountStr})
  324. }
  325. }
  326. }
  327. }
  328. }
  329. winnerArr = wArr
  330. v["winner"] = wArr
  331. v["bidamount"] = bArr
  332. }
  333. } else if multipackage == 1 && v["package"] != nil {
  334. wArr := []string{}
  335. bArr := []map[string]string{}
  336. if packages, ok := v["package"].([]map[string]interface{}); ok {
  337. for _, vv := range packages {
  338. winnerStr := util.ObjToString(vv["winner"])
  339. bidamountStr := strconv.FormatFloat(util.Float64All(vv["bidamount"]), 'f', -1, 64)
  340. wArr = append(wArr, winnerStr)
  341. bArr = append(bArr, map[string]string{"unit": "", "amount": bidamountStr})
  342. }
  343. } else if packages, ok := v["package"].([]interface{}); ok {
  344. for _, vv := range packages {
  345. if packages1, vvok := vv.(map[string]interface{}); vvok {
  346. winnerStr := util.ObjToString(packages1["winner"])
  347. bidamountStr := strconv.FormatFloat(util.Float64All(packages1["bidamount"]), 'f', -1, 64)
  348. wArr = append(wArr, winnerStr)
  349. bArr = append(bArr, map[string]string{"unit": "", "amount": bidamountStr})
  350. }
  351. }
  352. }
  353. winnerArr = wArr
  354. v["winner"] = wArr
  355. v["bidamount"] = bArr
  356. } else if strings.Contains(s_winner, ",") {
  357. winnerArr = []string{s_winner}
  358. }
  359. //
  360. delete(v, "package")
  361. v["s_winner"] = winnerArr
  362. tagNameArr, mainCompanyArr := []string{}, []string{}
  363. v, tagNameArr, mainCompanyArr = getTag(winnerArr, v, "1")
  364. v["tagname"] = tagNameArr
  365. v["tagname2"] = mainCompanyArr
  366. v = formatWinnerOrder(v)
  367. for f, m := range fieldMap {
  368. if v[f] != nil {
  369. v[m] = v[f]
  370. if f != m {
  371. delete(v, f)
  372. }
  373. }
  374. }
  375. }
  376. }
  377. dataMap := map[string]interface{}{"data": data}
  378. jsonData, err := json.Marshal(dataMap)
  379. if err != nil {
  380. fmt.Println("JSON marshaling failed:", err)
  381. return
  382. }
  383. err = ioutil.WriteFile("data.json", jsonData, 0644)
  384. if err != nil {
  385. fmt.Println("Writing JSON file failed:", err)
  386. return
  387. }
  388. log.Println("生成json成功")
  389. }
  390. }
  391. func getTag(winnerArr []string, v map[string]interface{}, isType string) (map[string]interface{}, []string, []string) {
  392. tagNameArr := []string{}
  393. mainCompanyArr := []string{}
  394. for _, vv := range winnerArr {
  395. isOk := false
  396. if strings.Contains(vv, ",") {
  397. if isType == "1" {
  398. v["multipackage"] = "2"
  399. }
  400. tagNameArr111 := []string{}
  401. mainCompanyArr111 := []string{}
  402. for _, vvv := range strings.Split(vv, ",") {
  403. isOks := false
  404. isOks, tagNameArr111, mainCompanyArr111 = lHTag(vvv, ydkey, ydtag, ydcompany, isOks, tagNameArr111, mainCompanyArr111)
  405. isOks, tagNameArr111, mainCompanyArr111 = lHTag(vvv, ltkey, lttag, ltcompany, isOks, tagNameArr111, mainCompanyArr111)
  406. isOks, tagNameArr111, mainCompanyArr111 = lHTag(vvv, dxkey, dxtag, dxcompany, isOks, tagNameArr111, mainCompanyArr111)
  407. isOks, tagNameArr111, mainCompanyArr111 = lHTag(vvv, gdkey, gdtag, gdcompany, isOks, tagNameArr111, mainCompanyArr111)
  408. isOks, tagNameArr111, mainCompanyArr111 = lHTag(vvv, ttkey, tttag, ttcompany, isOks, tagNameArr111, mainCompanyArr111)
  409. if !isOks {
  410. tagNameArr111 = append(tagNameArr111, " ")
  411. mainCompanyArr111 = append(mainCompanyArr111, " ")
  412. }
  413. }
  414. tagNameArr = append(tagNameArr, strings.Join(tagNameArr111, ","))
  415. mainCompanyArr = append(mainCompanyArr, strings.Join(mainCompanyArr111, ","))
  416. } else {
  417. isOk, tagNameArr, mainCompanyArr = unLHTag(vv, ydkey, ydtag, ydcompany, isOk, tagNameArr, mainCompanyArr)
  418. isOk, tagNameArr, mainCompanyArr = unLHTag(vv, ltkey, lttag, ltcompany, isOk, tagNameArr, mainCompanyArr)
  419. isOk, tagNameArr, mainCompanyArr = unLHTag(vv, dxkey, dxtag, dxcompany, isOk, tagNameArr, mainCompanyArr)
  420. isOk, tagNameArr, mainCompanyArr = unLHTag(vv, gdkey, gdtag, gdcompany, isOk, tagNameArr, mainCompanyArr)
  421. isOk, tagNameArr, mainCompanyArr = unLHTag(vv, ttkey, tttag, ttcompany, isOk, tagNameArr, mainCompanyArr)
  422. if !isOk {
  423. tagNameArr = append(tagNameArr, "")
  424. mainCompanyArr = append(mainCompanyArr, "")
  425. }
  426. }
  427. }
  428. return v, tagNameArr, mainCompanyArr
  429. }
  430. func lHTag(vvv, ydkey, ydtag, ydcompany string, isOks bool, tagNameArr111, mainCompanyArr111 []string) (bool, []string, []string) {
  431. for _, yd := range strings.Split(ydkey, ",") {
  432. if strings.Contains(yd, "&&") {
  433. keys := strings.Split(yd, "&&")
  434. key1, key2 := keys[0], keys[1]
  435. if strings.Contains(vvv, key1) && strings.Contains(vvv, key2) {
  436. if !isOks {
  437. isOks = true
  438. tagNameArr111 = append(tagNameArr111, ydtag)
  439. mainCompanyArr111 = append(mainCompanyArr111, ydcompany)
  440. }
  441. }
  442. if isOks {
  443. break
  444. }
  445. } else {
  446. if strings.Contains(vvv, yd) {
  447. if !isOks {
  448. isOks = true
  449. tagNameArr111 = append(tagNameArr111, ydtag)
  450. mainCompanyArr111 = append(mainCompanyArr111, ydcompany)
  451. }
  452. }
  453. if isOks {
  454. break
  455. }
  456. }
  457. }
  458. return isOks, tagNameArr111, mainCompanyArr111
  459. }
  460. func unLHTag(vv, ydkey, ydtag, ydcompany string, isOk bool, tagNameArr, mainCompanyArr []string) (bool, []string, []string) {
  461. for _, yd := range strings.Split(ydkey, ",") {
  462. if strings.Contains(yd, "&&") {
  463. keys := strings.Split(yd, "&&")
  464. key1, key2 := keys[0], keys[1]
  465. if strings.Contains(vv, key1) && strings.Contains(vv, key2) {
  466. if !isOk {
  467. isOk = true
  468. tagNameArr = append(tagNameArr, ydtag)
  469. mainCompanyArr = append(mainCompanyArr, ydcompany)
  470. }
  471. }
  472. if isOk {
  473. break
  474. }
  475. } else {
  476. if strings.Contains(vv, yd) {
  477. if !isOk {
  478. isOk = true
  479. tagNameArr = append(tagNameArr, ydtag)
  480. mainCompanyArr = append(mainCompanyArr, ydcompany)
  481. }
  482. }
  483. if isOk {
  484. break
  485. }
  486. }
  487. }
  488. return isOk, tagNameArr, mainCompanyArr
  489. }
  490. func formatWinnerOrder(v map[string]interface{}) map[string]interface{} {
  491. if v["winnerorder"] != nil {
  492. if orders, ok := v["winnerorder"].([]interface{}); ok {
  493. orderArr := util.ObjArrToMapArr(orders)
  494. for k, order := range orderArr {
  495. entname := util.ObjToString(order["entname"])
  496. tagNameArr, mainCompanyArr := []string{}, []string{}
  497. _, tagNameArr, mainCompanyArr = getTag([]string{entname}, v, "2")
  498. orderArr[k]["operatorTag"] = tagNameArr
  499. orderArr[k]["mainCompany"] = mainCompanyArr
  500. }
  501. v["winnerorder"] = orderArr
  502. }
  503. }
  504. return v
  505. }