package main import ( util "jygit.jydev.jianyu360.cn/data_processing/common_utils" "jygit.jydev.jianyu360.cn/data_processing/common_utils/elastic" "jygit.jydev.jianyu360.cn/data_processing/common_utils/mongodb" "log" "sort" "strings" ) func main() { //name := "宣威市西泽乡社会保障服务中心" //rs := ruleBuyer(name) //log.Println("rs", rs) log.Println("111111112222") //getCompany() //updateReport()//更新获取年报信息 //return //projectTopInformation() //处理项目情报 updateCapital() log.Println("处理完毕") } // ruleBuyer 判断采购单位正确,名称错误返回true,名称正确返回false func ruleBuyer(input string) (res bool) { //开头的单词 preWords := []string{"转发", "省", "会议室", "某", "某单位", "某公司", "某学校", "测试", "某大学", "某医院", "拟建", "机械", "县", "市", "区", "巡察", "人民路", "对", "楼", "家长", "春季", "对", "度", "初级中学", "州", "总部", "一号", "含", "育场", "选择", "第包", "医院", "共赢资产", "从", "实验中学", "公共", "乘用车", "部与", "一直", "一体化", "现对", "现为", "之", "份", "半坡", "下属", "程", "信息", "带", "工务", "技术", "于", "号", "辖属", "造", "计财", "实验", "原", "器械", "是", "师", "雨山区", "云城区", "阜涣", "公联", "批", "总承包", "姓市", "秋季学期", "哈巴河", "保险", "开发区", "尘设资", "团", "物业", "农村", "部", "二", "后勤", "位于", "选定", "依法", "口", "代表", "这", "逝沮省", "上半年", "第一", "门市", "配套", "八月", "七月", "集回", "维修", "遴选", "但", "增加", "取消", "采购", "一直", "一体化", "现对", "现为", "之", "份", "取消", "转发", "省", "会议室", "某", "某单位", "某公司", "某学校", "测试", "某大学", "某医院", "拟建", "机械", "县", "市", "区", "巡察", "人民", "对", "楼", "家长", "春季", "于", "度", "初级中学", "州", "总部", "一号", "含", "育场", "选择", "第包", "医院", "共赢资产", "从", "实验中学", "公共", "乘用车", "部与", "一直", "一体化", "现对", "现为", "之", "份", "半坡", "下属", "程", "信息", "带", "工务", "技术", "于", "号", "辖属", "造", "计财", "实验", "原", "器械", "是", "师", "阜涣", "公联", "批", "总承包", "姓市", "秋季学期", "哈巴河", "保险", "开发区", "尘设资", "团", "物业", "农村", "部", "东省", "于", "章", "董", "分局", "再", "微", "明", "建", "公司", "审计", "满足", "中学", "届", "大学", "按摩", "中心", "附属", "总", "教育局", "中学", "小学", "学院", "中医院", "人医院", "学校", "输", "十六", "有限", "节能", "二公司", "分公司", "子公司", "公司", "审计", "河河", "地公司", "六公司", "三公司", "十六公司", "节能", "股份", "运输公司", "堇", "家纺", "港区", "检查"} //开头关键词 for _, word := range preWords { if strings.HasPrefix(input, word) { res = true log.Println(word) return res } } //结尾关键词 suffixes := []string{"院院", "局局", "场场", "小学室", "和社", "人屡政府", "谈话室", "小区局", "今作社", "点场", "人昆政府", "年度室", "分行银行", "人政府", "人民矢院", "教学楼局", "笺理局", "地场", "人民唉院", "瞥理局", "所院", "农业衣村局", "民丢局", "委员会老干部", "办非处", "等支局", "监督站局", "停车库局", "检查员", "办直处", "进行局", "楼局", "等局", "人民政府社", "模块局", "人民政俯", "人民医标院", "农业农局", "园局", "规则局", "人乓政府", "人事条局", "箐理所", "在政府", "重点局", "大学入场", "入场", "发也站", "赘源局", "计划生育服务中心政府", "第一人民吹院", "有限公司室", "教标育局", "一民政府", "场部", "埋局", "大学大学", "分公司分公司", "医院医院", "测试", "公司", "市", "显微镜", "段", "现场局", "租赁"} for _, word := range suffixes { if strings.HasSuffix(input, word) { res = true log.Println(word) return res } } //包含的关键词 specials := []string{"丿", "艹", "[ ", "【", "?", "亻", "#", "~", "^", "亻", "*", "$", "、", "/", "*", "<>", "[ ", "【", "?", "某", "我", "第一轮", "第一次", "第一词", "第一季", "各学校", "第一批", "完全学校", "一致同意", "X", "保体障局", "人们政府", "上设局", "开发茎", "场场", "设保", "武鳖", "集回", "项日", "代理银行", "辽宁省省会", "菖处", "口国", "人民汰院", "肉州市", "火车站社", "自然资源和规局", "萎员会", "经济技术开发茎", "()", "()", "有限公司厂", "测试", "建设建设", "建设规模", "满足", "郑州郑州", "学校学校", "&", ";", ";", "就医院", "酒医院", "至医院", "对", "所需", "提升", "提高", "学期", "学年", "规模", "必须", "建成", "各公司", "养护", "拿", "艹", "关于", "要求", "举办", "显示所", "右阴公司", "发射", "加装", "扩建", "道路维修", "等所", "维稳中心", "异议", "任务", "分包", "其他", "行为", "中标人", "教室", "安置", "暂行", "选聘", "合同", "转发", "勿救", "既有", "装置", "开展", "依据", "指定", "一般用", "采供", "修缮", "招标单位", "联系方式", "沟通", "该项目", "安装", "造价", "改造", "样品", "课室", "水毁道路", "闲置资产", "某单位", "某公司", "某学校", "测试", "某大学", "某医院", "地产鲨", "项目组", "公国司", "物资", "评估与医院", "年室", "招标", "设有", "复限公司", "服务", "罩套", "有阴公", "人队", "报告", "显微镜", "现场局", "租赁", "镇", "市中心", "勐阿糖厂", "展厅", "等医院", "广场室", "水利顷", "市室", "交界处", "自助银行", "若源局", "布局", "联合体", "气室", "活动场", "包装公司", "投资", "有限", "等", "设备", "急件", "核实", "测汞仪", "黑名单", "制作类", "大学大学", "学院学院", "大学场", "学校室", "部队部队", "内部", "部分支公司", "短管", "投标文件", "汇编", "收购"} for _, v := range specials { if strings.Contains(input, v) { res = true log.Println(v) return res } } return res } // projectTopInformation 处理项目表情报一级分类 func projectTopInformation() { //firsttime 大于21年12月的数据,依赖ids 中的ID查找标讯ID, //然后吧 tag_topinformation 去重求和 更新项目的 tag_topinformation 字段 where := map[string]interface{}{ "pici": map[string]interface{}{ "$gte": 1638288000, //2021-12-01 }, } //测试环境 Es := &elastic.Elastic{ S_esurl: "http://192.168.3.149:9201", I_size: 5, Username: "", Password: "", } Es.InitElasticSize() //Es := &elastic.Elastic{ // //S_esurl: "http://127.0.0.1:19908", // S_esurl: "http://172.17.4.184:19908", // I_size: 5, // Username: "jybid", // Password: "Top2023_JEB01i@31", //} //Es.InitElasticSize() //MgoB := &mongodb.MongodbSim{ // MongodbAddr: "172.17.189.140:27080", // //MongodbAddr: "127.0.0.1:27083", // DbName: "qfw", // Size: 10, // UserName: "SJZY_RWbid_ES", // Password: "SJZY@B4i4D5e6S", // //Direct: true, //} //MgoB.InitPool() ////85 抽取库 //Mgo := &mongodb.MongodbSim{ // //MongodbAddr: "127.0.0.1:27080", // MongodbAddr: "172.17.4.85:27080", // DbName: "qfw", // Size: 10, // //Direct: true, //} //Mgo.InitPool() // 测试环境 MgoB := &mongodb.MongodbSim{ MongodbAddr: "192.168.3.206:27002", Size: 10, DbName: "qfw_data", UserName: "root", Password: "root", //Direct: true, } MgoB.InitPool() defer util.Catch() sess := MgoB.GetMgoConn() defer MgoB.DestoryMongoConn(sess) count := 0 it := sess.DB("qfw_data").C("projectset").Find(where).Select(nil).Iter() for tmp := make(map[string]interface{}); it.Next(&tmp); count++ { if count%5000 == 0 { log.Println("current:", count, tmp["_id"]) } if tmp["ids"] == nil { continue } if ids, ok := tmp["ids"].([]interface{}); ok { var tags = make([]string, 0) for _, id := range ids { biddingData, _ := MgoB.FindById("bidding", util.ObjToString(id), nil) topinformation := (*biddingData)["tag_topinformation"] if topinformation == nil { continue } else { if tagInfos, ok2 := topinformation.([]interface{}); ok2 { for _, v := range tagInfos { if !IsInStringArray(util.ObjToString(v), tags) { tags = append(tags, util.ObjToString(v)) } } } } } if len(tags) > 0 { oldTags := make([]string, 0) if tmp["tag_topinformation"] != nil { if oldtop := tmp["tag_topinformation"].([]interface{}); ok { for _, v := range oldtop { oldTags = append(oldTags, util.ObjToString(v)) } } } if SlicesEqual(tags, oldTags) { continue } //pid := mongodb.BsonIdToSId(tmp["_id"]) //update := map[string]interface{}{ // "tag_topinformation": tags, //} //MgoB.UpdateById("projectset", pid, map[string]interface{}{"$set": update}) //err := Es.UpdateDocument("projectset", pid, update) //if err != nil && err.Error() != "Document not updated: noop" { // log.Println("es update err", err) //} } } } } // IsInStringArray 判断数组中是否存在字符串 func IsInStringArray(str string, arr []string) bool { // 先对字符串数组进行排序 sort.Strings(arr) // 使用二分查找算法查找字符串 pos := sort.SearchStrings(arr, str) // 如果找到了则返回 true,否则返回 false return pos < len(arr) && arr[pos] == str } // SlicesEqual checks if two string slices contain the same elements, regardless of order func SlicesEqual(slice1, slice2 []string) bool { // First check if their lengths are the same if len(slice1) != len(slice2) { return false } // Create a map to count occurrences of each element in slice1 countMap := make(map[string]int) for _, v := range slice1 { countMap[v]++ } // Subtract the count for each element in slice2 for _, v := range slice2 { countMap[v]-- // If any count goes below zero, the slices are not equal if countMap[v] < 0 { return false } } // If all counts are zero, the slices are equal for _, count := range countMap { if count != 0 { return false } } return true }