package main import ( "encoding/json" "fmt" "io/ioutil" "log" "mongodb" "os" "qfw/util" "strconv" "strings" "time" ) type Config struct { MgoAddr string `json:"mgoAddr"` MgoDbName string `json:"mgoDbName"` MgoColl string `json:"mgoColl"` MgoSize int `json:"mgoSize"` TermFind map[string]interface{} `json:"termFind"` KeyWordFind map[string]map[string]interface{} `json:"keyWordFind"` FieldSelect map[string]interface{} `json:"fieldSelect"` FieldMapping string `json:"fieldMapping"` } var ( sysConfig Config Mgo *mongodb.MongodbSim SE = util.SimpleEncrypt{Key: "topJYBX2019"} ) const ( ydkey = "中国移动,中移在线,中移系统,中移铁通,中移&&软件技术,中移&&信息技术有限公司,中移建设,中怡金福,中移物联网,中移互联网,中移智行,中移&&产业研究院,中移信息系统,中国移动通信有限公司,中国移动通信集团有限公司,安徽通信服务有限公司,河南省飞达通信开发有限公司,中国铁通集团有限公司,福建迅捷通信技术服务有限公司,宁夏通信服务有限公司,天津通信服务有限公司,山西通信服务有限公司,北京通信服务有限公司,内蒙古通信服务有限责任公司,吉林中移通信服务有限公司,新疆通信服务有限公司,重庆通信服务有限责任公司,湖北通信服务有限公司,河北通信服务有限公司,云南通信服务有限公司,上海通信服务有限公司,广西通信服务公司,陕西通信实业有限公司,海南省信通通信服务有限公司,中移智行网络科技有限公司,贵州中移通信服务有限公司,四川通信服务有限公司,湖南通信服务有限公司,中移金科控股有限公司,中移资本控股有限责任公司,江西中移通信服务有限公司,甘肃通信服务有限公司,西藏通信服务有限责任公司,青海中移通信服务有限公司,辽宁通信服务有限责任公司,黑龙江通信服务有限公司,山东通信服务有限公司,中京通信服务有限公司,中铁通信中心,吉林中移防腐器材有限公司,三沙华海通信服务有限公司,中移创业投资有限责任公司,郑州梨园村实业有限公司,中移(上海)商业保理有限公司,中国移动通信集团江苏有限公司,中移电子商务有限公司,中国移动通信集团上海有限公司,中移动信息技术有限公司,中国移动通信集团青海有限公司,中移物联网有限公司,中移信息系统集成有限公司,中国移动通信集团河北有限公司,中国移动通信集团甘肃有限公司,中国移动通信集团山西有限公司,中国移动通信集团辽宁有限公司,中国移动通信集团广东有限公司,中国移动通信集团北京有限公司,中国移动通信集团广西有限公司,中国移动通信集团福建有限公司,中国移动通信集团湖北有限公司,中国移动通信集团新疆有限公司,中移投资控股有限责任公司,中移系统集成有限公司,咪咕文化科技有限公司,中国移动通信集团四川有限公司,中国移动通信集团浙江有限公司,中国移动通信集团重庆有限公司,中国移动通信集团海南有限公司,中移动金融科技有限公司,中国移动通信集团黑龙江有限公司,中移(苏州)软件技术有限公司,中移园区建设发展有限公司,中国移动通信集团财务有限公司,中移(杭州)信息技术有限公司,中移在线服务有限公司,中国移动通信集团江西有限公司,中移雄安信息通信科技有限公司,中国移动通信集团西藏有限公司,中移互联网有限公司,中国移动通信集团河南有限公司,中国移动通信集团安徽有限公司,中国移动通信集团终端有限公司,中国移动通信集团宁夏有限公司,中移铁通有限公司,中国移动通信集团陕西有限公司,中国移动通信集团设计院有限公司,中国移动通信集团吉林有限公司,中移(上海)信息通信科技有限公司,中国移动通信集团云南有限公司,中国移动通信集团贵州有限公司,中国移动通信集团内蒙古有限公司,中国移动通信集团山东有限公司,中移(成都)信息通信科技有限公司,中国移动通信集团湖南有限公司,中国移动通信集团天津有限公司,上海中移信息技术有限公司,繁星智算科技(北京)有限公司,咪咕音乐有限公司,黑龙江中移通信技术工程有限公司,山东铁通工程建设有限责任公司,湖北中移通信技术工程有限公司,北京移动系统集成有限公司,长三角一体化示范区(上海)中移数智生态科技有限公司,咪咕数字传媒有限公司,山东中移通信技术有限公司,中移互联(广州)孵化器有限公司,中移湾区(广东)创新研究院有限公司,中移铁通云科技有限公司,湖南中移通信技术工程有限公司,咪咕新空文化科技(厦门)有限公司,江苏移动信息系统集成有限公司,四川中移通信技术工程有限公司,中移数智科技有限公司,咪咕互动娱乐有限公司,中移(江西)虚拟现实科技有限公司,北京北方星辰信息技术有限责任公司,上海咪咕新媒体有限公司,中移建设有限公司,中国移动(浙江)创新研究院有限公司,北京煜金桥通信建设监理咨询有限责任公司,浙江移动信息系统集成有限公司,咪咕视讯科技有限公司,辽宁中移通信技术工程有限公司,中国移动紫金(江苏)创新研究院有限公司,贵州移动信息科技有限公司,沈阳华铁通信工程监理有限公司,咪咕艾瓦文化科技(厦门)有限公司" ydtag = "运营商-移动" ydcompany = "中国移动通信集团有限公司" ltkey = "中国联通,联合网络通信,联通数字科技,联通大数据,联通在线信息,联通时科,联通物联网,联通&&产业互联网,联通智网,中讯邮电,中国联合网络通信集团有限公司,中国联合网络通信有限公司,联通智慧科技产业有限公司,联通数字科技有限公司,联通在线信息科技有限公司,联通信息导航有限公司,联通集团财务有限公司,联通融资租赁有限公司,联通支付有限公司,联通华盛通信有限公司,联通创新创业投资有限公司,中讯邮电咨询设计院有限公司,联通视频科技有限公司,临港数智科技(上海)有限公司,联通(海南)产业互联网有限公司,联通(湖南)产业互联网有限公司,联通(福建)产业互联网有限公司,联通(吉林)产业互联网有限公司,联通(四川)产业互联网有限公司,联通(上海)产业互联网有限公司,联通西部创新研究院有限公司,联通沃悦读科技文化有限公司,小沃科技有限公司,联通云数据有限公司,联通(北京)产业互联网有限公司,联通(黑龙江)产业互联网有限公司,联通(广东)产业互联网有限公司,联通智慧安全科技有限公司,联通(辽宁)产业互联网有限公司,联通大数据有限公司,联通(湖北)产业互联网有限公司,联通(河南)产业互联网有限公司,北京沃数媒广告有限公司,联通旅游(北京)有限公司,广东联通通信建设有限公司,联通物联网有限责任公司,联通(江西)产业互联网有限公司,联通沃音乐文化有限公司,沃百富信息科技(天津)有限公司,华夏邮电咨询监理有限公司,联通雄安产业互联网有限公司,联通(山西)产业互联网有限公司,联通灵境视讯(江西)科技有限公司,联通创新创业投资管理(深圳)有限责任公司,郑州凯成实业有限公司,北京电信规划设计院有限公司,联通(浙江)产业互联网有限公司,联通(江苏)产业互联网有限公司,联通(安徽)产业互联网有限公司,联通(山东)产业互联网有限公司,联通(廊坊)云数据有限公司,联通(浙江)云数据有限公司,山东省联通通信有限公司,中国联通集团黑龙江省通信有限公司,中国联通集团北京市通信有限公司,天津市联通通信有限公司,中国联通集团辽宁省通信有限公司,吉林省联通通信有限公司,河南省联通通信有限公司,中国联通集团河北省通信有限公司,联通资产运营有限公司,联通资本投资控股有限公司,四川省联通通信有限公司,内蒙古联通通信有限公司,山西省联通通信有限公司,北京电信投资有限公司,太原市通信实业有限公司,山东丽天大酒店有限公司,大连邮电通信建设有限公司,山西联通顿村培训有限公司,北京联蒙科技发展有限公司,黑龙江省电信技术服务中心有限责任公司,内蒙古通信建设工程有限责任公司,大连泰立达通信工程有限公司" lttag = "运营商-联通" ltcompany = "中国联合网络通信集团有限公司" dxkey = "中国电信,天翼视讯,天翼电信,公众信息产业,中电万维,中电鸿信,中电信数智,中电福富,天翼云,中电领航,中电智能科技,天翼交通,天翼&&物联,天翼&&数字,天翼乡村,中电信智能,天翼数字,上海理想信息产业,中电信量子信息,中电信数字,中电信,中国电信集团有限公司,陕西电信实业有限公司,上海电信实业(集团)有限公司,湖南省电信实业集团有限公司,中国电信集团投资有限公司,重庆电信菲斯特实业有限公司,海南省电信实业集团有限公司,中国电信集团实业资产管理有限公司,贵州电信实业有限公司,湖北电信实业有限责任公司,浙江省电信实业集团有限公司,中国电信集团卫星通信有限公司,甘肃电信实业有限公司,四川电信实业集团有限责任公司,福建省电信实业集团有限公司,江西省电信实业有限责任公司,广东省电信实业集团有限公司,云南电信网信实业集团通信线路器材有限公司,温州国脉集团有限公司,信元公众信息发展有限责任公司,广西电信实业集团有限公司,江苏省电信实业集团有限责任公司,新疆电信实业(集团)有限责任公司,北京辰茂鸿翔酒店有限责任公司,天翼科技创业投资有限公司,安徽电信实业集团有限公司,新疆寰融实业有限公司,上海华新电线电缆有限公司,北京信元电信维护有限责任公司,中电信私募基金管理有限公司,四川宏致通信设备有限责任公司,四川省南充市第九建筑安装工程有限公司,广东邮电人才服务有限公司,广州市电信实业有限公司,北京信捷苑物业管理有限公司,广东南方通信集团有限公司,北京国信苑物业管理有限公司,广西邮电器材有限公司,北海辰茂海滩酒店有限公司,江苏辰茂新世纪大酒店有限公司,迪佛电信集团有限公司,海口电信城市建设投资有限公司,海口电信滨江建设有限公司,湖南省新南天置业有限公司,海振华源能源科技(成都)有限公司,福信新能源(陕西)有限公司" dxtag = "运营商-电信" dxcompany = "中国电信集团有限公司" gdkey = "楚天视讯,中国广电,广播电视网络集团,广电网络,玖云大数据" gdtag = "运营商-广电" gdcompany = "中国广播电视网络集团有限公司" ttkey = "中国铁塔,铁塔能源,铁塔智联" tttag = "运营商-铁塔" ttcompany = "中国铁塔股份有限公司" ) func init() { util.ReadConfig(&sysConfig) log.Println("配置加载成功") Mgo = &mongodb.MongodbSim{ MongodbAddr: sysConfig.MgoAddr, DbName: sysConfig.MgoDbName, Size: 20, } Mgo.InitPool() log.Println("数据库加载成功") } func PathExists(path string) (bool, error) { _, err := os.Stat(path) if err == nil { return true, nil } if os.IsNotExist(err) { return false, nil } return false, err } func main() { query := map[string]interface{}{} log.Println("config", sysConfig) if sysConfig.TermFind != nil && len(sysConfig.TermFind) > 0 { for k, v := range sysConfig.TermFind { query[k] = v } } if sysConfig.KeyWordFind != nil && len(sysConfig.KeyWordFind) > 0 { for k, v := range sysConfig.KeyWordFind { keyMap := map[string]interface{}{} for kk, vv := range v { keyMap[kk] = vv } query[k] = keyMap } } log.Println("查询条件 ", query) count, session := 0, Mgo.GetMgoConn() defer func() { Mgo.DestoryMongoConn(session) }() iter := session.DB(sysConfig.MgoDbName).C(sysConfig.MgoColl).Find(&query).Select(sysConfig.FieldSelect).Sort("_id").Iter() data := []map[string]interface{}{} thisData := map[string]interface{}{} for { if !iter.Next(&thisData) { break } count++ log.Println("第", count, "条") data = append(data, thisData) } if len(data) > 0 { log.Println("数据条数 ", len(data)) for _, v := range data { fieldMap := map[string]string{} json.Unmarshal([]byte(sysConfig.FieldMapping), &fieldMap) if len(fieldMap) > 0 { subMap := map[string]map[string]string{ "招标": map[string]string{"0": "3"}, "竞谈": map[string]string{"0": "3"}, "单一": map[string]string{"0": "3"}, "询价": map[string]string{"0": "3"}, "竞价": map[string]string{"0": "3"}, "邀标": map[string]string{"0": "3"}, "论证意见": map[string]string{"1": "2"}, "预告": map[string]string{"1": "2"}, "预审": map[string]string{"1": "2"}, "预审结果": map[string]string{"1": "2"}, "需求公示": map[string]string{"1": "2"}, "采购意向": map[string]string{"1": "2"}, "变更": map[string]string{"2": "5"}, "废标": map[string]string{"3": "7"}, "流标": map[string]string{"3": "8"}, "中标": map[string]string{"3": "10"}, "成交": map[string]string{"3": "11"}, "结果变更": map[string]string{"3": "11"}, "合同": map[string]string{"3": "12"}, "验收": map[string]string{"5": "13"}, "违规": map[string]string{"5": "14"}, } if v["filehref"] != nil { if filehrefs1, ok := v["filehref"].([]interface{}); ok { filehrefs := util.ObjArrToMapArr(filehrefs1) filehrefArr := []map[string]interface{}{} for _, vv := range filehrefs { filehrefMaps := map[string]interface{}{} url := util.ObjToString(vv["url"]) filehrefMaps["infoFileUrl"] = strings.ReplaceAll(url, "jy-datafile.oss-cn-beijing.aliyuncs.com", "60.205.191.245:51235") filehrefMaps["infoFileName"] = vv["filename"] filehrefArr = append(filehrefArr, filehrefMaps) } v["filehref"] = filehrefArr } else if filehrefs2, ok1 := v["filehref"].([]map[string]interface{}); ok1 { filehrefArr := []map[string]interface{}{} for _, vv := range filehrefs2 { filehrefMaps := map[string]interface{}{} url := util.ObjToString(vv["url"]) filehrefMaps["infoFileUrl"] = strings.ReplaceAll(url, "jy-datafile.oss-cn-beijing.aliyuncs.com", "60.205.191.245:51235") filehrefMaps["infoFileName"] = vv["filename"] filehrefArr = append(filehrefArr, filehrefMaps) } v["filehref"] = filehrefArr } } bidtype := util.ObjToString(v["bidtype"]) toptype := util.ObjToString(v["toptype"]) subtype := util.ObjToString(v["subtype"]) if bidtype != "" { bidtypeMap := map[string]string{ "招标": "0", "邀标": "1", "竞谈": "2", "单一": "3", "询价": "4", "竞价": "6", } v["bidtype"] = bidtypeMap[bidtype] } else { subtypeMap := map[string]string{ "招标": "0", "邀标": "1", "竞谈": "2", "单一": "3", "询价": "4", "其它": "5", "竞价": "6", } v["bidtype"] = subtypeMap[subtype] } bidway := util.ObjToString(v["bidway"]) if bidway == "电子投标" { v["bidway"] = "1" } else { v["bidway"] = "0" } site := util.ObjToString(v["site"]) siteStr := "全军武器装备采购信息网,军队采购网,军队采购网新网址" for _, vv := range strings.Split(siteStr, ",") { if strings.Contains(site, vv) { v["armySource"] = "是" } } delete(v, "site") publishtime := util.Int64All(v["publishtime"]) if publishtime > 0 { v["publishtime"] = time.Unix(publishtime, 0).Format(util.Date_Full_Layout) // v["infoPublishTimeMonth"] = time.Unix(publishtime, 0).Format("2006-01") } bidopentime := util.Int64All(v["bidopentime"]) if bidopentime > 0 { v["bidopentime"] = time.Unix(bidopentime, 0).Format(util.Date_Full_Layout) } docstarttime := util.Int64All(v["docstarttime"]) if docstarttime > 0 { v["docstarttime"] = time.Unix(docstarttime, 0).Format(util.Date_Full_Layout) } docendtime := util.Int64All(v["docendtime"]) if docendtime > 0 { v["docendtime"] = time.Unix(docendtime, 0).Format(util.Date_Full_Layout) } bidstarttime := util.Int64All(v["bidstarttime"]) if bidstarttime > 0 { v["bidstarttime"] = time.Unix(bidstarttime, 0).Format(util.Date_Full_Layout) } bidendtime := util.Int64All(v["bidendtime"]) if bidendtime > 0 { v["bidendtime"] = time.Unix(bidendtime, 0).Format(util.Date_Full_Layout) } tagname := util.ObjToString(v["tagname"]) tagname2 := util.ObjToString(v["tagname2"]) buyer := util.ObjToString(v["buyer"]) buyerperson := util.ObjToString(v["buyerperson"]) buyertel := util.ObjToString(v["buyertel"]) s_winner := util.ObjToString(v["s_winner"]) winnerperson := util.ObjToString(v["winnerperson"]) winnertel := util.ObjToString(v["winnertel"]) agency := util.ObjToString(v["agency"]) agencyperson := util.ObjToString(v["agencyperson"]) agencytel := util.ObjToString(v["agencytel"]) v["tagname"] = strings.Split(tagname, ",") v["tagname2"] = strings.Split(tagname2, ",") v["buyer"] = strings.Split(buyer, ",") v["buyerperson"] = strings.Split(buyerperson, ",") v["buyertel"] = strings.Split(buyertel, ",") winnerArr := strings.Split(s_winner, ",") v["winnerperson"] = strings.Split(winnerperson, ",") v["winnertel"] = strings.Split(winnertel, ",") v["agency"] = strings.Split(agency, ",") v["agencyperson"] = strings.Split(agencyperson, ",") v["agencytel"] = strings.Split(agencytel, ",") if v["budget"] != nil { v["budget"] = []map[string]string{ map[string]string{ "unit": "", "amount": strconv.FormatFloat(util.Float64All(v["budget"]), 'f', -1, 64), }, } } else { v["budget"] = []map[string]string{ map[string]string{ "unit": "", "amount": "", }, } } if v["bidamount"] != nil { v["bidamount"] = []map[string]string{ map[string]string{ "unit": "", "amount": strconv.FormatFloat(util.Float64All(v["bidamount"]), 'f', -1, 64), }, } } else { v["bidamount"] = []map[string]string{ map[string]string{ "unit": "", "amount": "", }, } } multipackage := 0 isOptimization := 0 if v["multipackage"] == nil { v["multipackage"] = "0" } else { v["multipackage"] = fmt.Sprint(v["multipackage"]) multipackage = util.IntAll(v["multipackage"]) } if v["isOptimization"] == nil { v["isOptimization"] = "0" } else { v["isOptimization"] = fmt.Sprint(v["isOptimization"]) isOptimization = util.IntAll(v["isOptimization"]) } if subtype == "其它" { if toptype == "预告" { v["toptype"] = "1" v["subtype"] = "2" } else if toptype == "招标" { v["toptype"] = "2" v["subtype"] = "6" } else if toptype == "结果" { v["toptype"] = "3" v["subtype"] = "9" } else { v["toptype"] = "5" v["subtype"] = "15" } } else { for t, s := range subMap[subtype] { v["toptype"] = t v["subtype"] = s } } //多包合并 if isOptimization == 1 && multipackage == 1 && v["package"] != nil { wArr := []string{} bArr := []map[string]string{} if packages, ok := v["package"].(map[string]interface{}); ok { for _, vv := range packages { if packages1, oks := vv.(map[string]interface{}); oks { if winner_all, wok := packages1["winner_all"].([]map[string]interface{}); wok { for _, win := range winner_all { winnerStr := util.ObjToString(win["winner"]) bidamountStr := strconv.FormatFloat(util.Float64All(win["bidamount"]), 'f', -1, 64) wArr = append(wArr, winnerStr) bArr = append(bArr, map[string]string{"unit": "", "amount": bidamountStr}) } } else if winner_all, wok := packages1["winner_all"].([]interface{}); wok { for _, win := range winner_all { if win1, wok1 := win.(map[string]interface{}); wok1 { winnerStr := util.ObjToString(win1["winner"]) bidamountStr := strconv.FormatFloat(util.Float64All(win1["bidamount"]), 'f', -1, 64) wArr = append(wArr, winnerStr) bArr = append(bArr, map[string]string{"unit": "", "amount": bidamountStr}) } } } } } winnerArr = wArr v["winner"] = wArr v["bidamount"] = bArr } } else if multipackage == 1 && v["package"] != nil { wArr := []string{} bArr := []map[string]string{} if packages, ok := v["package"].([]map[string]interface{}); ok { for _, vv := range packages { winnerStr := util.ObjToString(vv["winner"]) bidamountStr := strconv.FormatFloat(util.Float64All(vv["bidamount"]), 'f', -1, 64) wArr = append(wArr, winnerStr) bArr = append(bArr, map[string]string{"unit": "", "amount": bidamountStr}) } } else if packages, ok := v["package"].([]interface{}); ok { for _, vv := range packages { if packages1, vvok := vv.(map[string]interface{}); vvok { winnerStr := util.ObjToString(packages1["winner"]) bidamountStr := strconv.FormatFloat(util.Float64All(packages1["bidamount"]), 'f', -1, 64) wArr = append(wArr, winnerStr) bArr = append(bArr, map[string]string{"unit": "", "amount": bidamountStr}) } } } winnerArr = wArr v["winner"] = wArr v["bidamount"] = bArr } else if strings.Contains(s_winner, ",") { winnerArr = []string{s_winner} } // delete(v, "package") v["s_winner"] = winnerArr tagNameArr, mainCompanyArr := []string{}, []string{} v, tagNameArr, mainCompanyArr = getTag(winnerArr, v, "1") v["tagname"] = tagNameArr v["tagname2"] = mainCompanyArr v = formatWinnerOrder(v) for f, m := range fieldMap { if v[f] != nil { v[m] = v[f] if f != m { delete(v, f) } } } } } dataMap := map[string]interface{}{"data": data} jsonData, err := json.Marshal(dataMap) if err != nil { fmt.Println("JSON marshaling failed:", err) return } err = ioutil.WriteFile("data.json", jsonData, 0644) if err != nil { fmt.Println("Writing JSON file failed:", err) return } log.Println("生成json成功") } } func getTag(winnerArr []string, v map[string]interface{}, isType string) (map[string]interface{}, []string, []string) { tagNameArr := []string{} mainCompanyArr := []string{} for _, vv := range winnerArr { isOk := false if strings.Contains(vv, ",") { if isType == "1" { v["multipackage"] = "2" } tagNameArr111 := []string{} mainCompanyArr111 := []string{} for _, vvv := range strings.Split(vv, ",") { isOks := false isOks, tagNameArr111, mainCompanyArr111 = lHTag(vvv, ydkey, ydtag, ydcompany, isOks, tagNameArr111, mainCompanyArr111) isOks, tagNameArr111, mainCompanyArr111 = lHTag(vvv, ltkey, lttag, ltcompany, isOks, tagNameArr111, mainCompanyArr111) isOks, tagNameArr111, mainCompanyArr111 = lHTag(vvv, dxkey, dxtag, dxcompany, isOks, tagNameArr111, mainCompanyArr111) isOks, tagNameArr111, mainCompanyArr111 = lHTag(vvv, gdkey, gdtag, gdcompany, isOks, tagNameArr111, mainCompanyArr111) isOks, tagNameArr111, mainCompanyArr111 = lHTag(vvv, ttkey, tttag, ttcompany, isOks, tagNameArr111, mainCompanyArr111) if !isOks { tagNameArr111 = append(tagNameArr111, " ") mainCompanyArr111 = append(mainCompanyArr111, " ") } } tagNameArr = append(tagNameArr, strings.Join(tagNameArr111, ",")) mainCompanyArr = append(mainCompanyArr, strings.Join(mainCompanyArr111, ",")) } else { isOk, tagNameArr, mainCompanyArr = unLHTag(vv, ydkey, ydtag, ydcompany, isOk, tagNameArr, mainCompanyArr) isOk, tagNameArr, mainCompanyArr = unLHTag(vv, ltkey, lttag, ltcompany, isOk, tagNameArr, mainCompanyArr) isOk, tagNameArr, mainCompanyArr = unLHTag(vv, dxkey, dxtag, dxcompany, isOk, tagNameArr, mainCompanyArr) isOk, tagNameArr, mainCompanyArr = unLHTag(vv, gdkey, gdtag, gdcompany, isOk, tagNameArr, mainCompanyArr) isOk, tagNameArr, mainCompanyArr = unLHTag(vv, ttkey, tttag, ttcompany, isOk, tagNameArr, mainCompanyArr) if !isOk { tagNameArr = append(tagNameArr, "") mainCompanyArr = append(mainCompanyArr, "") } } } return v, tagNameArr, mainCompanyArr } func lHTag(vvv, ydkey, ydtag, ydcompany string, isOks bool, tagNameArr111, mainCompanyArr111 []string) (bool, []string, []string) { for _, yd := range strings.Split(ydkey, ",") { if strings.Contains(yd, "&&") { keys := strings.Split(yd, "&&") key1, key2 := keys[0], keys[1] if strings.Contains(vvv, key1) && strings.Contains(vvv, key2) { if !isOks { isOks = true tagNameArr111 = append(tagNameArr111, ydtag) mainCompanyArr111 = append(mainCompanyArr111, ydcompany) } } if isOks { break } } else { if strings.Contains(vvv, yd) { if !isOks { isOks = true tagNameArr111 = append(tagNameArr111, ydtag) mainCompanyArr111 = append(mainCompanyArr111, ydcompany) } } if isOks { break } } } return isOks, tagNameArr111, mainCompanyArr111 } func unLHTag(vv, ydkey, ydtag, ydcompany string, isOk bool, tagNameArr, mainCompanyArr []string) (bool, []string, []string) { for _, yd := range strings.Split(ydkey, ",") { if strings.Contains(yd, "&&") { keys := strings.Split(yd, "&&") key1, key2 := keys[0], keys[1] if strings.Contains(vv, key1) && strings.Contains(vv, key2) { if !isOk { isOk = true tagNameArr = append(tagNameArr, ydtag) mainCompanyArr = append(mainCompanyArr, ydcompany) } } if isOk { break } } else { if strings.Contains(vv, yd) { if !isOk { isOk = true tagNameArr = append(tagNameArr, ydtag) mainCompanyArr = append(mainCompanyArr, ydcompany) } } if isOk { break } } } return isOk, tagNameArr, mainCompanyArr } func formatWinnerOrder(v map[string]interface{}) map[string]interface{} { if v["winnerorder"] != nil { if orders, ok := v["winnerorder"].([]interface{}); ok { orderArr := util.ObjArrToMapArr(orders) for k, order := range orderArr { entname := util.ObjToString(order["entname"]) tagNameArr, mainCompanyArr := []string{}, []string{} _, tagNameArr, mainCompanyArr = getTag([]string{entname}, v, "2") orderArr[k]["operatorTag"] = tagNameArr orderArr[k]["mainCompany"] = mainCompanyArr } v["winnerorder"] = orderArr } } return v }