|
@@ -7,6 +7,7 @@ import (
|
|
qu "qfw/util"
|
|
qu "qfw/util"
|
|
"strings"
|
|
"strings"
|
|
"time"
|
|
"time"
|
|
|
|
+ "unicode/utf8"
|
|
)
|
|
)
|
|
|
|
|
|
var proNameDict = map[string]string{}
|
|
var proNameDict = map[string]string{}
|
|
@@ -16,20 +17,29 @@ func saveBiddingPurMysql() {
|
|
log.Debug("分析数据-保存两个mysql表...")
|
|
log.Debug("分析数据-保存两个mysql表...")
|
|
sess := save_mgo.GetMgoConn()
|
|
sess := save_mgo.GetMgoConn()
|
|
defer save_mgo.DestoryMongoConn(sess)
|
|
defer save_mgo.DestoryMongoConn(sess)
|
|
- q,total:=map[string]interface{}{},0
|
|
|
|
|
|
+ q,total,isok:=map[string]interface{}{},0,0
|
|
it := sess.DB(save_mgo.DbName).C(o_bidding_coll).Find(&q).Iter()
|
|
it := sess.DB(save_mgo.DbName).C(o_bidding_coll).Find(&q).Iter()
|
|
for tmp := make(map[string]interface{}); it.Next(&tmp);total++{
|
|
for tmp := make(map[string]interface{}); it.Next(&tmp);total++{
|
|
- if total%10000==0 {
|
|
|
|
- log.Debug("curent index ",total)
|
|
|
|
|
|
+ if total%1000==0 {
|
|
|
|
+ log.Debug("curent index ",total,isok)
|
|
}
|
|
}
|
|
tmpid := BsonTOStringId(tmp["_id"])
|
|
tmpid := BsonTOStringId(tmp["_id"])
|
|
- dealWithBidData(tmp,tmpid)
|
|
|
|
- dealWithPurData(tmp,tmpid)
|
|
|
|
|
|
+ repeat:= qu.IntAll(tmp["repeat"])
|
|
|
|
+ if repeat!=1 {
|
|
|
|
+ isok++
|
|
|
|
+ dealWithBidData(tmp,tmpid)
|
|
|
|
+ dealWithPurData(tmp,tmpid)
|
|
|
|
+ }
|
|
tmp = make(map[string]interface{})
|
|
tmp = make(map[string]interface{})
|
|
}
|
|
}
|
|
- log.Debug("is over ",total)
|
|
|
|
|
|
+ log.Debug("is over ",total,isok)
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
//构建-招投标数据-无异常
|
|
//构建-招投标数据-无异常
|
|
func dealWithBidData(tmp map[string]interface{},tmpid string){
|
|
func dealWithBidData(tmp map[string]interface{},tmpid string){
|
|
data := map[string]interface{}{}
|
|
data := map[string]interface{}{}
|
|
@@ -108,14 +118,20 @@ func dealWithPurData(tmp map[string]interface{},tmpid string){
|
|
for _,v:=range p_list{
|
|
for _,v:=range p_list{
|
|
data := map[string]interface{}{}
|
|
data := map[string]interface{}{}
|
|
product_name := qu.ObjToString(v["product_name"])
|
|
product_name := qu.ObjToString(v["product_name"])
|
|
-
|
|
|
|
|
|
+ brandname := qu.ObjToString(v["brandname"])
|
|
data["info_id"] = info_id
|
|
data["info_id"] = info_id
|
|
data["bid_name"] = qu.ObjToString(v["itemname"])
|
|
data["bid_name"] = qu.ObjToString(v["itemname"])
|
|
data["product_name"] = product_name
|
|
data["product_name"] = product_name
|
|
- data["product_brand"] = qu.ObjToString(v["brandname"])
|
|
|
|
- data["product_model"] = qu.ObjToString(v["model"])
|
|
|
|
|
|
+ data["product_brand"] = brandname
|
|
data["product_specs"] = ""
|
|
data["product_specs"] = ""
|
|
|
|
|
|
|
|
+ product_model := qu.ObjToString(v["model"])
|
|
|
|
+ if utf8.RuneCountInString(product_model)>100 {
|
|
|
|
+ product_model = ""
|
|
|
|
+ }
|
|
|
|
+ data["product_model"] = product_model
|
|
|
|
+
|
|
|
|
+
|
|
if v["unitprice"]!=nil {
|
|
if v["unitprice"]!=nil {
|
|
data["product_price"] = qu.Float64All(v["unitprice"])
|
|
data["product_price"] = qu.Float64All(v["unitprice"])
|
|
}
|
|
}
|
|
@@ -156,39 +172,23 @@ func dealWithPurData(tmp map[string]interface{},tmpid string){
|
|
}
|
|
}
|
|
|
|
|
|
//涉及-make_company_id make_company_name make_company_ysname -关联f_product
|
|
//涉及-make_company_id make_company_name make_company_ysname -关联f_product
|
|
- query := "SELECT company_id,company_name FROM f_product WHERE business_type=? or business_type=? LIMIT 0,20"
|
|
|
|
- proinfo := MysqlTool.SelectBySql(query, "1","3")
|
|
|
|
|
|
+ query := "SELECT company_id,company_name FROM f_product WHERE product_name = ? and (business_type = ? or business_type = ?)"
|
|
|
|
+ proinfo := MysqlTool.SelectBySql(query, product_name,"1","3")
|
|
if len(*proinfo) == 1 { //查询到多条-同产品信息
|
|
if len(*proinfo) == 1 { //查询到多条-同产品信息
|
|
info :=(*proinfo)[0]
|
|
info :=(*proinfo)[0]
|
|
data["make_company_id"] = qu.ObjToString(info["company_id"])
|
|
data["make_company_id"] = qu.ObjToString(info["company_id"])
|
|
data["make_company_name"] = qu.ObjToString(info["company_name"])
|
|
data["make_company_name"] = qu.ObjToString(info["company_name"])
|
|
data["make_company_ysname"] = ""
|
|
data["make_company_ysname"] = ""
|
|
- }else if len(*proinfo) > 1 {
|
|
|
|
- //是否多个
|
|
|
|
- pro_name := ""
|
|
|
|
- pro_id := ""
|
|
|
|
- isUse:=true
|
|
|
|
- for index,info := range *proinfo {
|
|
|
|
- company_name := qu.ObjToString(info["company_name"])
|
|
|
|
- company_id := qu.ObjToString(info["company_id"])
|
|
|
|
- if index==0 {
|
|
|
|
- pro_name = company_name
|
|
|
|
- pro_id = company_id
|
|
|
|
- }else {
|
|
|
|
- if company_name!=pro_name {
|
|
|
|
- isUse = false
|
|
|
|
- pro_name+=","+company_name
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
|
|
+ }else if len(*proinfo) > 1 {//如果有多个企业-生产信息
|
|
|
|
+ isUse,c_name,c_id := matchedManufacturer(brandname,*proinfo)
|
|
if isUse {
|
|
if isUse {
|
|
- data["make_company_id"] = pro_id
|
|
|
|
- data["make_company_name"] = pro_name
|
|
|
|
|
|
+ data["make_company_id"] = c_id
|
|
|
|
+ data["make_company_name"] = c_name
|
|
data["make_company_ysname"] = ""
|
|
data["make_company_ysname"] = ""
|
|
}else {
|
|
}else {
|
|
data["make_company_id"] = ""
|
|
data["make_company_id"] = ""
|
|
data["make_company_name"] = ""
|
|
data["make_company_name"] = ""
|
|
- data["make_company_ysname"] = pro_name
|
|
|
|
|
|
+ data["make_company_ysname"] = c_name
|
|
}
|
|
}
|
|
}else {
|
|
}else {
|
|
data["make_company_id"] = ""
|
|
data["make_company_id"] = ""
|
|
@@ -213,14 +213,57 @@ func dealWithPurData(tmp map[string]interface{},tmpid string){
|
|
|
|
|
|
|
|
|
|
}
|
|
}
|
|
|
|
+//根据品牌字段匹配-有效生产企业-过多10条
|
|
|
|
+func matchedManufacturer(brandName string,infoArr []map[string]interface{}) (bool,string,string) {
|
|
|
|
+ c_name :=""
|
|
|
|
+ namedict := map[string]string{}
|
|
|
|
+ for i:=0;i<len(infoArr);i++{
|
|
|
|
+ info := infoArr[i]
|
|
|
|
+ company_name := qu.ObjToString(info["company_name"])
|
|
|
|
+ company_id := qu.ObjToString(info["company_id"])
|
|
|
|
+ if brandName!="" { //品牌匹配
|
|
|
|
+ if strings.Contains(company_name,brandName) {
|
|
|
|
+ return true,company_name,company_id
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ if len(namedict) < 10 {
|
|
|
|
+ if c_name=="" {
|
|
|
|
+ c_name = company_name
|
|
|
|
+ namedict[company_name] = company_id
|
|
|
|
+ }else {
|
|
|
|
+ if namedict[company_name]=="" {
|
|
|
|
+ c_name += ","+company_name
|
|
|
|
+ namedict[company_name] = company_id
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if len(namedict)==1 {
|
|
|
|
+ return true,c_name,namedict[c_name]
|
|
|
|
+ }
|
|
|
|
+ return false,c_name,""
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-//导出源数据... 163-qfw
|
|
|
|
-func exportUsefulPurMysql() {
|
|
|
|
|
|
+//准备工作-导出源数据很重要... 163
|
|
|
|
+func exportUsefulPurBidData() {
|
|
sess := qy_mgo.GetMgoConn()
|
|
sess := qy_mgo.GetMgoConn()
|
|
defer qy_mgo.DestoryMongoConn(sess)
|
|
defer qy_mgo.DestoryMongoConn(sess)
|
|
- q,total:=map[string]interface{}{},0
|
|
|
|
|
|
+ //构建标准产品数据
|
|
|
|
+ dataArr,_ := save_mgo.Find("zktest_mairui",nil,nil,nil)
|
|
|
|
+ for _,v := range dataArr {
|
|
|
|
+ name := qu.ObjToString(v["name"])
|
|
|
|
+ proNameDict[name] = name
|
|
|
|
+ }
|
|
|
|
+ log.Debug("迈瑞产品...",len(proNameDict))
|
|
|
|
+ q,total:=map[string]interface{}{
|
|
|
|
+ "publishtime": map[string]interface{}{
|
|
|
|
+ "$gte":1546272000,
|
|
|
|
+ },
|
|
|
|
+ },0
|
|
isok:=0
|
|
isok:=0
|
|
it := sess.DB("qfw").C(s_bidding_coll).Find(&q).Sort("_id").Iter()
|
|
it := sess.DB("qfw").C(s_bidding_coll).Find(&q).Sort("_id").Iter()
|
|
for tmp := make(map[string]interface{}); it.Next(&tmp);total++{
|
|
for tmp := make(map[string]interface{}); it.Next(&tmp);total++{
|
|
@@ -236,81 +279,101 @@ func exportUsefulPurMysql() {
|
|
p_list = qu.ObjArrToMapArr(yl_purchasinglist)
|
|
p_list = qu.ObjArrToMapArr(yl_purchasinglist)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+ //临时-匹配是不是含有-有效迈瑞-产品
|
|
if len(p_list)>0 {
|
|
if len(p_list)>0 {
|
|
- isok++
|
|
|
|
- s_winner := qu.ObjToString(tmp["s_winner"])
|
|
|
|
- new_data["yl_purchasinglist"] = p_list
|
|
|
|
- tmpid := BsonTOStringId(tmp["_id"])
|
|
|
|
- new_data["info_id"] = tmpid
|
|
|
|
- new_data["subtype"] = qu.ObjToString(tmp["subtype"])
|
|
|
|
- new_data["toptype"] = qu.ObjToString(tmp["toptype"])
|
|
|
|
- new_data["projectname"] =qu.ObjToString(tmp["projectname"])
|
|
|
|
- new_data["publishtime"] = qu.IntAll(tmp["publishtime"])
|
|
|
|
- new_data["buyer"] =qu.ObjToString(tmp["buyer"])
|
|
|
|
- new_data["buyerclass"] =qu.ObjToString(tmp["buyerclass"])
|
|
|
|
- if tmp["budget"]!=nil {
|
|
|
|
- new_data["budget"] =tmp["budget"]
|
|
|
|
- }
|
|
|
|
- if tmp["bidamount"]!=nil {
|
|
|
|
- new_data["bidamount"] =tmp["bidamount"]
|
|
|
|
- }
|
|
|
|
- new_data["s_winner"] =s_winner
|
|
|
|
- new_data["agency"] =qu.ObjToString(tmp["agency"])
|
|
|
|
- new_data["area"] =qu.ObjToString(tmp["area"])
|
|
|
|
- new_data["city"] =qu.ObjToString(tmp["city"])
|
|
|
|
- new_data["district"] =qu.ObjToString(tmp["district"])
|
|
|
|
- new_data["jyhref"] = fmt.Sprintf(Url, qu.CommonEncodeArticle("content", tmpid))
|
|
|
|
-
|
|
|
|
- if tmp["subscopeclass"]!=nil {
|
|
|
|
- new_data["subscopeclass"] = tmp["subscopeclass"]
|
|
|
|
|
|
+ new_p_list := matchUsefulMrBidProduct(p_list)
|
|
|
|
+ if len(new_p_list)>0 {
|
|
|
|
+ isok++
|
|
|
|
+ s_winner := qu.ObjToString(tmp["s_winner"])
|
|
|
|
+ new_data["yl_purchasinglist"] = p_list
|
|
|
|
+ tmpid := BsonTOStringId(tmp["_id"])
|
|
|
|
+ new_data["info_id"] = tmpid
|
|
|
|
+ new_data["_id"] = tmp["_id"]
|
|
|
|
+ new_data["subtype"] = qu.ObjToString(tmp["subtype"])
|
|
|
|
+ new_data["toptype"] = qu.ObjToString(tmp["toptype"])
|
|
|
|
+ new_data["projectname"] =qu.ObjToString(tmp["projectname"])
|
|
|
|
+ new_data["publishtime"] = qu.IntAll(tmp["publishtime"])
|
|
|
|
+ new_data["buyer"] =qu.ObjToString(tmp["buyer"])
|
|
|
|
+ new_data["buyerclass"] =qu.ObjToString(tmp["buyerclass"])
|
|
|
|
+ if tmp["budget"]!=nil {
|
|
|
|
+ new_data["budget"] =tmp["budget"]
|
|
|
|
+ }
|
|
|
|
+ if tmp["bidamount"]!=nil {
|
|
|
|
+ new_data["bidamount"] =tmp["bidamount"]
|
|
|
|
+ }
|
|
|
|
+ new_data["s_winner"] =s_winner
|
|
|
|
+ new_data["agency"] =qu.ObjToString(tmp["agency"])
|
|
|
|
+ new_data["area"] =qu.ObjToString(tmp["area"])
|
|
|
|
+ new_data["city"] =qu.ObjToString(tmp["city"])
|
|
|
|
+ new_data["district"] =qu.ObjToString(tmp["district"])
|
|
|
|
+ new_data["jyhref"] = fmt.Sprintf(Url, qu.CommonEncodeArticle("content", tmpid))
|
|
|
|
+
|
|
|
|
+ if tmp["subscopeclass"]!=nil {
|
|
|
|
+ new_data["subscopeclass"] = tmp["subscopeclass"]
|
|
|
|
+ }
|
|
|
|
+ save_mgo.Save(o_bidding_coll,new_data)
|
|
|
|
+ save_mgo.Save("zktest_mysql_bidding_repeat",tmp) //业务判重需要-
|
|
}
|
|
}
|
|
- save_mgo.Save(o_bidding_coll,new_data)
|
|
|
|
-
|
|
|
|
}
|
|
}
|
|
tmp = make(map[string]interface{})
|
|
tmp = make(map[string]interface{})
|
|
}
|
|
}
|
|
|
|
|
|
log.Debug("is bidding over ",total,isok)
|
|
log.Debug("is bidding over ",total,isok)
|
|
}
|
|
}
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-//调试- 指定数据
|
|
|
|
-func testMaiRuiData() {
|
|
|
|
- query := "SELECT product_name FROM f_product WHERE company_name LIKE CONCAT('%',?,'%')"
|
|
|
|
- proinfo := MysqlTool.SelectBySql(query, "迈瑞")
|
|
|
|
- for _,v := range *proinfo{
|
|
|
|
|
|
+func matchUsefulMrBidProduct(p_list []map[string]interface{})(new_p_list []map[string]interface{}){
|
|
|
|
+ for _,v := range p_list {
|
|
product_name := qu.ObjToString(v["product_name"])
|
|
product_name := qu.ObjToString(v["product_name"])
|
|
- if proNameDict[product_name]==""{
|
|
|
|
- proNameDict[product_name] = product_name
|
|
|
|
|
|
+ if proNameDict[product_name] != "" {
|
|
|
|
+ new_p_list =append(new_p_list,v)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- log.Debug("涉及",len(proNameDict),"产品信息")
|
|
|
|
-
|
|
|
|
|
|
+ return new_p_list
|
|
|
|
+}
|
|
|
|
+//根据目标数据,去掉重复 - 重新导出数据
|
|
|
|
+func exportNewPurBidData() {
|
|
sess := save_mgo.GetMgoConn()
|
|
sess := save_mgo.GetMgoConn()
|
|
defer save_mgo.DestoryMongoConn(sess)
|
|
defer save_mgo.DestoryMongoConn(sess)
|
|
q,total:=map[string]interface{}{},0
|
|
q,total:=map[string]interface{}{},0
|
|
- it := sess.DB(save_mgo.DbName).C("112233").Find(&q).Iter()
|
|
|
|
|
|
+ isok:=0
|
|
|
|
+ it := sess.DB(save_mgo.DbName).C("zktest_mysql_bidding_repeat").Find(&q).Sort("_id").Select(map[string]interface{}{
|
|
|
|
+ "repeat":1,
|
|
|
|
+ }).Iter()
|
|
for tmp := make(map[string]interface{}); it.Next(&tmp);total++{
|
|
for tmp := make(map[string]interface{}); it.Next(&tmp);total++{
|
|
if total%1000==0 {
|
|
if total%1000==0 {
|
|
- log.Debug("curent index ",total)
|
|
|
|
|
|
+ log.Debug("curent index ",total,tmp["_id"],"~",isok)
|
|
|
|
+ }
|
|
|
|
+ tmpid := BsonTOStringId(tmp["_id"])
|
|
|
|
+ repeat := tmp["repeat"].(bool)
|
|
|
|
+ if repeat {
|
|
|
|
+ isok++
|
|
|
|
+ save_mgo.UpdateById(o_bidding_coll,tmpid, map[string]interface{}{
|
|
|
|
+ "$set": map[string]interface{}{
|
|
|
|
+ "repeat":1,
|
|
|
|
+ },
|
|
|
|
+ })
|
|
}
|
|
}
|
|
- info_id := qu.ObjToString(tmp["info_id"])
|
|
|
|
- data := save_mgo.FindOne(o_bidding_coll, map[string]interface{}{
|
|
|
|
- "info_id":info_id,
|
|
|
|
- })
|
|
|
|
- dealWithBidData(data,info_id)
|
|
|
|
- dealWithPurData(data,info_id)
|
|
|
|
tmp = make(map[string]interface{})
|
|
tmp = make(map[string]interface{})
|
|
}
|
|
}
|
|
|
|
+ log.Debug("is over ",total,isok)
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+//导出指定-迈瑞相关数据-已弃用
|
|
func exportMaiRuiInfoId(){
|
|
func exportMaiRuiInfoId(){
|
|
query := "SELECT product_name FROM f_product WHERE company_name LIKE CONCAT('%',?,'%')"
|
|
query := "SELECT product_name FROM f_product WHERE company_name LIKE CONCAT('%',?,'%')"
|
|
proinfo := MysqlTool.SelectBySql(query, "迈瑞")
|
|
proinfo := MysqlTool.SelectBySql(query, "迈瑞")
|
|
@@ -343,4 +406,6 @@ func exportMaiRuiInfoId(){
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
-}
|
|
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+
|