package main import ( "fmt" "github.com/xuri/excelize/v2" util "jygit.jydev.jianyu360.cn/data_processing/common_utils" "jygit.jydev.jianyu360.cn/data_processing/common_utils/mongodb" "log" "strings" ) // getCountBidding 根据企业名称,获取企业的招标信息总数 func getCountBidding() { f, err := excelize.OpenFile("./银行业金融机构法人名单.xlsx") if err != nil { fmt.Println(err) return } defer func() { f.Save() if err := f.Close(); err != nil { fmt.Println(err) } }() rows, err := f.GetRows("Sheet3") if err != nil { fmt.Println(err) return } /// MgoB := &mongodb.MongodbSim{ MongodbAddr: "172.31.31.202:27081,172.20.45.128:27080", //MongodbAddr: "127.0.0.1:27083", Size: 10, DbName: "qfw", UserName: "SJZY_RWbid_ES", Password: "SJZY@B4i4D5e6S", //Direct: true, } MgoB.InitPool() //url := "http://172.17.4.184:19908" //url := "http://127.0.0.1:19908" //username := "jybid" //password := "Top2023_JEB01i@31" //index := "bidding" //索引名称 //// 创建 Elasticsearch 客户端 //client, err := elastic.NewClient( // elastic.SetURL(url), // elastic.SetBasicAuth(username, password), // elastic.SetSniff(false), //) //if err != nil { // log.Fatalf("创建 Elasticsearch 客户端失败:%s", err) //} buyers := make([]string, 0) numMap := make(map[string]int) for i := 1; i < len(rows); i++ { companyName := rows[i][0] numMap[companyName] = 0 buyers = append(buyers, companyName) } sess := MgoB.GetMgoConn() defer MgoB.DestoryMongoConn(sess) query := sess.DB("qfw").C("bidding").Find(nil).Iter() count := 0 for tmp := make(map[string]interface{}); query.Next(tmp); count++ { buyer := util.ObjToString(tmp["buyer"]) if count%1000 == 0 { log.Println("curren:", count, buyer) } res := buyerContains(buyers, buyer) if res != "" { numMap[res]++ } } for i := 1; i < len(rows); i++ { companyName := rows[i][0] log.Println("companyName", companyName) f.SetCellValue("Sheet3", fmt.Sprintf("%s%d", "B", i+1), numMap[companyName]) } //for i := 1; i < len(rows); i++ { // companyName := rows[i][0] // numMap[companyName]++ // //if i%100 == 0 { // // log.Println("iiii", i, companyName) // // f.Save() // //} // // // // // // 构建查询条件 // //query := elastic.NewBoolQuery(). // // Must(elastic.NewMatchQuery("buyer", companyName)). // buyer = "中国建筑股份有限公司" // // Should( // // elastic.NewMatchQuery("subtype", "合同"), // // elastic.NewMatchQuery("toptype", "结果"), // // elastic.NewMatchQuery("toptype", "招标"), // // ). // // MinimumShouldMatch("1"). // 至少满足一个Should条件 // buyer = "中国建筑股份有限公司" // // Must(elastic.NewRangeQuery("publishtime").Gte(1704038400).Lt(1735660800)) // publishtime 2024年 // ////Must(elastic.NewRangeQuery("bidamount").Gt(1000000)). // bidamount > 1000000 // ////MustNot(elastic.NewMatchQuery("s_winner", companyName)) // s_winner != "中国建筑股份有限公司" // // // //// 执行查询,返回所有匹配的数据 // //searchResult, err := client.Search(). // // Index(index). // 查询的索引名称 // // Query(query). // 使用上述构建的查询 // // Do(context.Background()) // 执行查询 // //if err != nil { // // log.Fatalf("Error executing search: %s", err) // //} // // // //f.SetCellValue("Sheet3", fmt.Sprintf("%s%d", "B", i+1), searchResult.Hits.TotalHits.Value) // //} log.Println("数据处理完毕") } // buyerContains 判断 buyer 是否完全包含 buyers 列表中的某个字符串 // 如果找到完全包含的字符串,则返回该字符串;否则返回空字符串 func buyerContains(buyers []string, buyer string) string { for _, b := range buyers { if strings.Contains(buyer, b) { // 判断 buyer 是否包含 buyers 里的某个字符串 return b // 找到第一个匹配的就返回 } } return "" // 没有找到匹配项,返回空字符串 }