Sfoglia il codice sorgente

海南~导出 seo项目词库

zhengkun 2 anni fa
parent
commit
95a14bccda
72 ha cambiato i file con 7955 aggiunte e 537 eliminazioni
  1. 32 42
      data_quality/src/main.go
  2. 75 0
      data_seo/src/initdata.go
  3. 49 0
      data_seo/src/main.go
  4. 5 0
      data_seo/src/mark
  5. 354 0
      data_seo/src/mgo.go
  6. 505 0
      data_seo/src/mysql.go
  7. 58 0
      data_seo/src/online.go
  8. 117 0
      data_seo/src/words_industry.go
  9. 72 0
      data_seo/src/words_purchasing.go
  10. 25 0
      data_seo/src/words_region.go
  11. 43 0
      data_seo/src/words_resource.go
  12. 162 0
      data_seo/src/words_save.go
  13. 70 0
      data_seo/src/words_subscribe.go
  14. 4 0
      data_seo/src/行业词/交通工程_其他.txt
  15. 16 0
      data_seo/src/行业词/交通工程_桥梁.txt
  16. 15 0
      data_seo/src/行业词/交通工程_轨道.txt
  17. 69 0
      data_seo/src/行业词/交通工程_道路.txt
  18. 99 0
      data_seo/src/行业词/信息技术_其他.txt
  19. 217 0
      data_seo/src/行业词/信息技术_系统集成及安全.txt
  20. 203 0
      data_seo/src/行业词/信息技术_软件开发.txt
  21. 34 0
      data_seo/src/行业词/信息技术_运维服务.txt
  22. 66 0
      data_seo/src/行业词/农林牧渔_生产物资.txt
  23. 26 0
      data_seo/src/行业词/农林牧渔_生产设备.txt
  24. 24 0
      data_seo/src/行业词/农林牧渔_相关服务.txt
  25. 36 0
      data_seo/src/行业词/医疗卫生_耗材.txt
  26. 1218 0
      data_seo/src/行业词/医疗卫生_药品.txt
  27. 159 0
      data_seo/src/行业词/医疗卫生_设备.txt
  28. 18 0
      data_seo/src/行业词/市政设施_线路管网.txt
  29. 17 0
      data_seo/src/行业词/市政设施_综合项目.txt
  30. 3 0
      data_seo/src/行业词/市政设施_绿化.txt
  31. 8 0
      data_seo/src/行业词/市政设施_道路.txt
  32. 36 0
      data_seo/src/行业词/建筑工程_勘察设计.txt
  33. 315 0
      data_seo/src/行业词/建筑工程_工程施工.txt
  34. 62 0
      data_seo/src/行业词/建筑工程_机电安装.txt
  35. 221 0
      data_seo/src/行业词/建筑工程_材料设备.txt
  36. 20 0
      data_seo/src/行业词/建筑工程_监理咨询.txt
  37. 23 0
      data_seo/src/行业词/弱电安防_智能系统.txt
  38. 10 0
      data_seo/src/行业词/弱电安防_综合布线.txt
  39. 13 0
      data_seo/src/行业词/服务采购_仓储物流.txt
  40. 80 0
      data_seo/src/行业词/服务采购_其他.txt
  41. 9 0
      data_seo/src/行业词/服务采购_安保.txt
  42. 61 0
      data_seo/src/行业词/服务采购_广告宣传印刷.txt
  43. 4 0
      data_seo/src/行业词/服务采购_法律咨询.txt
  44. 21 0
      data_seo/src/行业词/服务采购_物业.txt
  45. 26 0
      data_seo/src/行业词/机械设备_其他机械设备.txt
  46. 70 0
      data_seo/src/行业词/机械设备_工程机械.txt
  47. 27 0
      data_seo/src/行业词/机械设备_机床相关.txt
  48. 60 0
      data_seo/src/行业词/机械设备_机械零部件.txt
  49. 7 0
      data_seo/src/行业词/机械设备_矿山机械.txt
  50. 83 0
      data_seo/src/行业词/机械设备_车辆.txt
  51. 17 0
      data_seo/src/行业词/水利水电_其他工程.txt
  52. 77 0
      data_seo/src/行业词/水利水电_发电工程.txt
  53. 72 0
      data_seo/src/行业词/水利水电_水利工程.txt
  54. 9 0
      data_seo/src/行业词/水利水电_航运工程.txt
  55. 62 0
      data_seo/src/行业词/能源化工_仪器仪表.txt
  56. 42 0
      data_seo/src/行业词/能源化工_化工产品.txt
  57. 89 0
      data_seo/src/行业词/能源化工_原材料.txt
  58. 37 0
      data_seo/src/行业词/能源化工_设备物资.txt
  59. 134 0
      data_seo/src/行业词/行政办公_专业设备.txt
  60. 101 0
      data_seo/src/行业词/行政办公_办公家具.txt
  61. 202 0
      data_seo/src/行业词/行政办公_办公用品.txt
  62. 269 0
      data_seo/src/行业词/行政办公_生活用品.txt
  63. 114 0
      data_seo/src/行业词/行政办公_通用办公设备.txt
  64. 78 0
      get_hainan/src/initdata.go
  65. 196 0
      get_hainan/src/main.go
  66. 3 0
      get_hainan/src/mark
  67. 354 0
      get_hainan/src/mgo.go
  68. 52 0
      get_hainan/src/udp.go
  69. 149 194
      listen_data/src/main.go
  70. 805 124
      listen_data/src/zkmethod.go
  71. 124 153
      process_medical/src/medical_bidding.go
  72. 22 24
      process_medical/src/medical_vdata_area.go

+ 32 - 42
data_quality/src/main.go

@@ -11,23 +11,21 @@ import (
 	"time"
 )
 
-
 var (
-	sysconfig    			map[string]interface{} //配置文件
-	mgo,qy_mgo          	*MongodbSim            //mongodb操作对象
-	udpclient    			mu.UdpClient           //udp对象
-	udplock,dataLock 		sync.Mutex         	   //udp锁
-	coll_name,qy_coll_name	string				   //表名
-	isTest					bool				   //是否测试
-	Ext_Type,Ext_From		map[string]interface{}	//抽取来源,方式分
-	buyer_score,s_winner_score	map[string]interface{}
-	budget_score,bidamount_score	map[string]interface{}
-	projectname_score,projectcode_score		map[string]interface{}
-
+	sysconfig                            map[string]interface{} //配置文件
+	mgo, qy_mgo                          *MongodbSim            //mongodb操作对象
+	udpclient                            mu.UdpClient           //udp对象
+	udplock, dataLock                    sync.Mutex             //udp锁
+	coll_name, qy_coll_name              string                 //表名
+	isTest                               bool                   //是否测试
+	Ext_Type, Ext_From                   map[string]interface{} //抽取来源,方式分
+	buyer_score, s_winner_score          map[string]interface{}
+	budget_score, bidamount_score        map[string]interface{}
+	projectname_score, projectcode_score map[string]interface{}
 )
 
 //mgo-配置等
-func initMgo()  {
+func initMgo() {
 	isTest = sysconfig["isTest"].(bool)
 	mconf := sysconfig["mongodb"].(map[string]interface{})
 	log.Println(mconf)
@@ -42,15 +40,16 @@ func initMgo()  {
 		MongodbAddr: qy_mconf["qy_addrName"].(string),
 		DbName:      qy_mconf["qy_dbName"].(string),
 		Size:        qu.IntAllDef(qy_mconf["pool"], 10),
-		UserName: qy_mconf["qy_username"].(string),
-		Password: qy_mconf["qy_password"].(string),
+		UserName:    qy_mconf["qy_username"].(string),
+		Password:    qy_mconf["qy_password"].(string),
 	}
 	qy_mgo.InitPool()
 	coll_name = mconf["collName"].(string)
 	qy_coll_name = qy_mconf["qy_collName"].(string)
 }
+
 //初始化打分
-func initScore()  {
+func initScore() {
 	Ext_Type = sysconfig["ext_type"].(map[string]interface{})
 	Ext_From = sysconfig["ext_from"].(map[string]interface{})
 
@@ -64,9 +63,10 @@ func initScore()  {
 	projectcode_score = sysconfig["projectcode_score"].(map[string]interface{})
 
 }
+
 //初始化
 func init() {
-	qu.ReadConfig(&sysconfig)//加载配置文件
+	qu.ReadConfig(&sysconfig) //加载配置文件
 	initMgo()
 	initScore()
 }
@@ -78,6 +78,7 @@ func mainT() {
 	log.Println("Udp服务监听", updport)
 	time.Sleep(99999 * time.Hour)
 }
+
 //调试流程
 func main() {
 
@@ -97,7 +98,6 @@ func main() {
 //打分流程-方法
 func startFieldScoreTask(mapInfo map[string]interface{}) {
 	log.Println("开始字段规则链...评分流程")
-	return
 	defer qu.Catch()
 	q := map[string]interface{}{
 		"_id": map[string]interface{}{
@@ -105,45 +105,43 @@ func startFieldScoreTask(mapInfo map[string]interface{}) {
 			"$lte": StringTOBsonId(mapInfo["lteid"].(string)),
 		},
 	}
-	log.Println("查询条件:",q)
+	log.Println("查询条件:", q)
 	sess := mgo.GetMgoConn()
 	defer mgo.DestoryMongoConn(sess)
 	it := sess.DB(mgo.DbName).C(coll_name).Find(&q).Iter()
-	updateFieldScore,total := [][]map[string]interface{}{},0
+	updateFieldScore, total := [][]map[string]interface{}{}, 0
 	for tmp := make(map[string]interface{}); it.Next(&tmp); total++ {
 		if total%1000 == 0 {
 			log.Println("当前数量:", total)
 		}
 
 		//验证初始分字段
-		source:= *qu.ObjToMap(tmp["field_source"])
+		source := *qu.ObjToMap(tmp["field_source"])
 		f_s := dealWithFieldSourceScore(source)
 
 		//更新集合
-		update_dict := make(map[string]interface{},0)
+		update_dict := make(map[string]interface{}, 0)
 		subtype := qu.ObjToString(tmp["subtype"])
 
-
-		buyer_s := buyerFieldScore(tmp,f_s["buyer"])
+		buyer_s := buyerFieldScore(tmp, f_s["buyer"])
 		update_dict["buyer"] = buyer_s
 
-		budget_s := budgetFieldScore(tmp,f_s["budget"])
+		budget_s := budgetFieldScore(tmp, f_s["budget"])
 		update_dict["budget"] = budget_s
 
-		projectname_s := projectnameFieldScore(tmp,f_s["projectname"])
+		projectname_s := projectnameFieldScore(tmp, f_s["projectname"])
 		update_dict["projectname"] = projectname_s
 
-		projectcode_s := projectcodeFieldScore(tmp,f_s["projectcode"])
+		projectcode_s := projectcodeFieldScore(tmp, f_s["projectcode"])
 		update_dict["projectcode"] = projectcode_s
 
-		if subtype=="中标"||subtype=="成交"||subtype=="合同" {
-			s_winner_s := winnerFieldScore(tmp,f_s["s_winner"])
+		if subtype == "中标" || subtype == "成交" || subtype == "合同" {
+			s_winner_s := winnerFieldScore(tmp, f_s["s_winner"])
 			update_dict["s_winner"] = s_winner_s
-			bidamount_s := bidamountFieldScore(tmp,f_s["bidamount"])
+			bidamount_s := bidamountFieldScore(tmp, f_s["bidamount"])
 			update_dict["bidamount"] = bidamount_s
 		}
 
-
 		updateFieldScore = append(updateFieldScore, []map[string]interface{}{
 			map[string]interface{}{
 				"_id": tmp["_id"],
@@ -161,22 +159,14 @@ func startFieldScoreTask(mapInfo map[string]interface{}) {
 		tmp = make(map[string]interface{})
 	}
 
-	if len(updateFieldScore) >0 {
+	if len(updateFieldScore) > 0 {
 		mgo.UpSertBulk(coll_name, updateFieldScore...)
 	}
 
-	log.Println("field score is over - 总计数量",total)
+	log.Println("field score is over - 总计数量", total)
 
 }
 
-
-
-
-
-
-
-
-
 //udp监听
 func processUdpMsg(act byte, data []byte, ra *net.UDPAddr) {
 	switch act {
@@ -202,4 +192,4 @@ func processUdpMsg(act byte, data []byte, ra *net.UDPAddr) {
 		str := string(data)
 		log.Println("节点回应:", str)
 	}
-}
+}

+ 75 - 0
data_seo/src/initdata.go

@@ -0,0 +1,75 @@
+package main
+
+import log "github.com/donnie4w/go-logger/logger"
+
+func initClass() {
+	initMgo()
+	initMysql()
+}
+
+//初始化mgo
+func initMgo() {
+	if IsLocal {
+		Source_Mgo = &MongodbSim{
+			MongodbAddr: "192.168.3.207:27092",
+			DbName:      "zktest_extract_data",
+			Size:        10,
+			UserName:    "",
+			Password:    "",
+		}
+		Source_Mgo.InitPool()
+
+		Bid_Mgo = &MongodbSim{
+			MongodbAddr: "192.168.3.207:27092",
+			DbName:      "zktest_extract_data",
+			Size:        10,
+			UserName:    "",
+			Password:    "",
+		}
+		Bid_Mgo.InitPool()
+	} else {
+		Source_Mgo = &MongodbSim{
+			MongodbAddr: "172.17.4.87:27080",
+			DbName:      "zk_sqldata",
+			Size:        10,
+			UserName:    "",
+			Password:    "",
+		}
+		Source_Mgo.InitPool()
+
+		Bid_Mgo = &MongodbSim{
+			MongodbAddr: "172.17.145.163:27083,172.17.4.187:27082",
+			DbName:      "qfw",
+			Size:        10,
+			UserName:    "zhengkun",
+			Password:    "zk@123123",
+		}
+		Bid_Mgo.InitPool()
+	}
+}
+
+func initMysql() {
+	username, password := "root", "=PDT49#80Z!RVv52_z"
+	address := "192.168.3.217:4000"
+	if !IsLocal {
+		username = "zhengkun"
+		password = "Zk#20220824"
+		address = "172.17.4.242:4000"
+	}
+	MysqlDevTool = &Mysql{
+		Address:  address,
+		UserName: username,
+		PassWord: password,
+		DBName:   "seo_words",
+	}
+	MysqlDevTool.Init()
+
+}
+
+func InsertMysqlDevData(name string, data map[string]interface{}, mark interface{}) int64 {
+	inb := MysqlDevTool.Insert(name, data)
+	if inb == -1 {
+		log.Debug("插入数据异常...", name, "~", mark)
+	}
+	return inb
+}

+ 49 - 0
data_seo/src/main.go

@@ -0,0 +1,49 @@
+package main
+
+import (
+	log "github.com/donnie4w/go-logger/logger"
+	"regexp"
+	"sync"
+)
+
+var (
+	Source_Mgo   *MongodbSim
+	Bid_Mgo      *MongodbSim
+	MysqlDevTool *Mysql
+	IsLocal      bool
+	TimeLayout                  = "2006-01-02 15:04:05"
+	Url                         = "https://www.jianyu360.com/article/content/%s.html"
+	LetterReg    *regexp.Regexp = regexp.MustCompile("[A-Za-z]")
+	numLock      sync.Mutex
+)
+
+func init() {
+	//IsLocal = true
+	initClass()
+}
+
+func main() {
+	log.Debug("初始化 main ~~~")
+
+	//保存
+	SaveOnlineTidbRegionInfo()
+	SaveOnlineTidbIndustryInfo()
+
+	//SaveOnlineTidbResourceInfo()
+
+	lock := make(chan bool)
+	<-lock
+}
+
+func test() {
+	//exportIndustryWords()
+	//calculateSubscribeWords()
+	//calculatePurchasingWords()
+
+	//SaveMysqlIndustryInfo("zktest_mysql_industry_info", "seo_industry")
+	//SaveMysqlSubscribeInfo("zktest_mysql_subscribe_info", "seo_subscribe")
+	//SaveMysqlPurchasingInfo("zktest_mysql_purchasing_info", "seo_purchasing")
+	//descriptivePurInfo()
+
+	//ResourceIntegrationInfo()
+}

+ 5 - 0
data_seo/src/mark

@@ -0,0 +1,5 @@
+标的物词汇
+
+2022年1月1号~~~2022年11月1号
+61cf29000000000000000000
+635ff1000000000000000000

+ 354 - 0
data_seo/src/mgo.go

@@ -0,0 +1,354 @@
+package main
+
+import (
+	"context"
+	"log"
+	qu "qfw/util"
+	"time"
+
+	"go.mongodb.org/mongo-driver/bson"
+	"go.mongodb.org/mongo-driver/bson/primitive"
+	"go.mongodb.org/mongo-driver/mongo"
+	"go.mongodb.org/mongo-driver/mongo/options"
+)
+
+type MgoSess struct {
+	Db     string
+	Coll   string
+	Query  interface{}
+	Sorts  []string
+	fields interface{}
+	limit  int64
+	skip   int64
+	M      *MongodbSim
+}
+
+type MgoIter struct {
+	Cursor *mongo.Cursor
+}
+
+func (mt *MgoIter) Next(result interface{}) bool {
+	if mt.Cursor != nil {
+		if mt.Cursor.Next(nil) {
+			err := mt.Cursor.Decode(result)
+			if err != nil {
+				log.Println("mgo cur err", err.Error())
+				mt.Cursor.Close(nil)
+				return false
+			}
+			return true
+		} else {
+			mt.Cursor.Close(nil)
+			return false
+		}
+	} else {
+		return false
+	}
+
+}
+
+func (ms *MgoSess) DB(name string) *MgoSess {
+	ms.Db = name
+	return ms
+}
+
+func (ms *MgoSess) C(name string) *MgoSess {
+	ms.Coll = name
+	return ms
+}
+
+func (ms *MgoSess) Find(q interface{}) *MgoSess {
+	ms.Query = q
+	return ms
+}
+
+func (ms *MgoSess) Select(fields interface{}) *MgoSess {
+	ms.fields = fields
+	return ms
+}
+
+func (ms *MgoSess) Limit(limit int64) *MgoSess {
+	ms.limit = limit
+	return ms
+}
+func (ms *MgoSess) Skip(skip int64) *MgoSess {
+	ms.skip = skip
+	return ms
+}
+
+func (ms *MgoSess) Sort(sorts ...string) *MgoSess {
+	ms.Sorts = sorts
+	return ms
+}
+
+func (ms *MgoSess) Iter() *MgoIter {
+	it := &MgoIter{}
+	find := options.Find()
+	if ms.skip > 0 {
+		find.SetSkip(ms.skip)
+	}
+	if ms.limit > 0 {
+		find.SetLimit(ms.limit)
+	}
+	find.SetBatchSize(100)
+	if len(ms.Sorts) > 0 {
+		sort := bson.M{}
+		for _, k := range ms.Sorts {
+			switch k[:1] {
+			case "-":
+				sort[k[1:]] = -1
+			case "+":
+				sort[k[1:]] = 1
+			default:
+				sort[k] = 1
+			}
+		}
+		find.SetSort(sort)
+	}
+	if ms.fields != nil {
+		find.SetProjection(ms.fields)
+	}
+	cur, err := ms.M.C.Database(ms.Db).Collection(ms.Coll).Find(ms.M.Ctx, ms.Query, find)
+	if err != nil {
+		log.Println("mgo find err", err.Error())
+	} else {
+		it.Cursor = cur
+	}
+	return it
+}
+
+type MongodbSim struct {
+	MongodbAddr string
+	Size        int
+	//	MinSize     int
+	DbName   string
+	C        *mongo.Client
+	Ctx      context.Context
+	ShortCtx context.Context
+	pool     chan bool
+	UserName string
+	Password string
+}
+
+func (m *MongodbSim) GetMgoConn() *MgoSess {
+	//m.Open()
+	ms := &MgoSess{}
+	ms.M = m
+	return ms
+}
+
+func (m *MongodbSim) DestoryMongoConn(ms *MgoSess) {
+	//m.Close()
+	ms.M = nil
+	ms = nil
+}
+
+func (m *MongodbSim) InitPool() {
+	opts := options.Client()
+	opts.SetConnectTimeout(3 * time.Second)
+	opts.ApplyURI("mongodb://" + m.MongodbAddr)
+	opts.SetMaxPoolSize(uint64(m.Size))
+	m.pool = make(chan bool, m.Size)
+
+	if m.UserName != "" && m.Password != "" {
+		cre := options.Credential{
+			Username: m.UserName,
+			Password: m.Password,
+		}
+		opts.SetAuth(cre)
+	}
+
+	opts.SetMaxConnIdleTime(2 * time.Hour)
+	m.Ctx, _ = context.WithTimeout(context.Background(), 99999*time.Hour)
+	m.ShortCtx, _ = context.WithTimeout(context.Background(), 1*time.Minute)
+	client, err := mongo.Connect(m.ShortCtx, opts)
+	if err != nil {
+		log.Println("mgo init error:", err.Error())
+	} else {
+		m.C = client
+		log.Println("init success")
+	}
+}
+
+func (m *MongodbSim) Open() {
+	m.pool <- true
+}
+func (m *MongodbSim) Close() {
+	<-m.pool
+}
+
+//批量插入
+func (m *MongodbSim) UpSertBulk(c string, doc ...[]map[string]interface{}) (map[int64]interface{}, bool) {
+	m.Open()
+	defer m.Close()
+	coll := m.C.Database(m.DbName).Collection(c)
+	var writes []mongo.WriteModel
+	for _, d := range doc {
+		write := mongo.NewUpdateOneModel()
+		write.SetFilter(d[0])
+		write.SetUpdate(d[1])
+		write.SetUpsert(true)
+		writes = append(writes, write)
+	}
+	r, e := coll.BulkWrite(m.Ctx, writes)
+	if e != nil {
+		log.Println("mgo upsert error:", e.Error())
+		return nil, false
+	}
+	//	else {
+	//		if r.UpsertedCount != int64(len(doc)) {
+	//			log.Println("mgo upsert uncomplete:uc/dc", r.UpsertedCount, len(doc))
+	//		}
+	//		return true
+	//	}
+	return r.UpsertedIDs, true
+}
+
+//批量插入
+func (m *MongodbSim) SaveBulk(c string, doc ...map[string]interface{}) bool {
+	m.Open()
+	defer m.Close()
+	coll := m.C.Database(m.DbName).Collection(c)
+	var writes []mongo.WriteModel
+	for _, d := range doc {
+		write := mongo.NewInsertOneModel()
+		write.SetDocument(d)
+		writes = append(writes, write)
+	}
+	_, e := coll.BulkWrite(m.Ctx, writes)
+	if e != nil {
+		log.Println("mgo savebulk error:", e.Error())
+		return false
+	}
+	return true
+}
+
+//保存
+func (m *MongodbSim) Save(c string, doc map[string]interface{}) interface{} {
+	m.Open()
+	defer m.Close()
+	coll := m.C.Database(m.DbName).Collection(c)
+	r, err := coll.InsertOne(m.Ctx, doc)
+	if err != nil {
+		return nil
+	}
+	return r.InsertedID
+}
+
+//更新by Id
+func (m *MongodbSim) UpdateById(c, id string, doc map[string]interface{}) bool {
+	m.Open()
+	defer m.Close()
+	coll := m.C.Database(m.DbName).Collection(c)
+	_, err := coll.UpdateOne(m.Ctx, map[string]interface{}{"_id": StringTOBsonId(id)}, doc)
+	if err != nil {
+		return false
+	}
+	return true
+}
+
+//删除by id
+func (m *MongodbSim) DeleteById(c, id string) int64 {
+	m.Open()
+	defer m.Close()
+	coll := m.C.Database(m.DbName).Collection(c)
+	r, err := coll.DeleteOne(m.Ctx, map[string]interface{}{"_id": StringTOBsonId(id)})
+	if err != nil {
+		return 0
+	}
+	return r.DeletedCount
+}
+
+//通过条件删除
+func (m *MongodbSim) Delete(c string, query map[string]interface{}) int64 {
+	m.Open()
+	defer m.Close()
+	coll := m.C.Database(m.DbName).Collection(c)
+	r, err := coll.DeleteMany(m.Ctx, query)
+	if err != nil {
+		return 0
+	}
+	return r.DeletedCount
+}
+
+//findbyid
+func (m *MongodbSim) FindById(c, id string) map[string]interface{} {
+	m.Open()
+	defer m.Close()
+	coll := m.C.Database(m.DbName).Collection(c)
+	r := coll.FindOne(m.Ctx, map[string]interface{}{"_id": StringTOBsonId(id)})
+	v := map[string]interface{}{}
+	r.Decode(&v)
+	return v
+}
+
+//findone
+func (m *MongodbSim) FindOne(c string, query map[string]interface{}) map[string]interface{} {
+	m.Open()
+	defer m.Close()
+	coll := m.C.Database(m.DbName).Collection(c)
+	r := coll.FindOne(m.Ctx, query)
+	v := map[string]interface{}{}
+	r.Decode(&v)
+	return v
+}
+
+//find
+func (m *MongodbSim) Find(c string, query map[string]interface{}, sort, fields interface{}) ([]map[string]interface{}, error) {
+	m.Open()
+	defer m.Close()
+	coll := m.C.Database(m.DbName).Collection(c)
+	op := options.Find()
+	r, err := coll.Find(m.Ctx, query, op.SetSort(sort), op.SetProjection(fields))
+	if err != nil {
+		log.Fatal(err)
+		return nil, err
+	}
+
+	var results []map[string]interface{}
+	if err = r.All(m.Ctx, &results); err != nil {
+		log.Fatal(err)
+		return nil, err
+	}
+	return results, nil
+}
+
+//创建_id
+func NewObjectId() primitive.ObjectID {
+	return primitive.NewObjectID()
+}
+
+func StringTOBsonId(id string) primitive.ObjectID {
+	objectId, _ := primitive.ObjectIDFromHex(id)
+	return objectId
+}
+
+func BsonTOStringId(id interface{}) string {
+	return id.(primitive.ObjectID).Hex()
+}
+
+//return
+func IsMarkInterfaceMap(t interface{}) []map[string]interface{} {
+	p_list := []map[string]interface{}{}
+	if yl_list_1, ok_1 := t.(primitive.A); ok_1 {
+		p_list = qu.ObjArrToMapArr(yl_list_1)
+	} else {
+		if yl_list_2, ok_2 := t.([]interface{}); ok_2 {
+			p_list = qu.ObjArrToMapArr(yl_list_2)
+		}
+	}
+	return p_list
+}
+
+//return
+func IsMarkInterfaceArr(t interface{}) []string {
+	sub_list := []string{}
+	if list_1, ok_1 := t.(primitive.A); ok_1 {
+		sub_list = qu.ObjArrToStringArr(list_1)
+	} else {
+		if list_2, ok_2 := t.([]interface{}); ok_2 {
+			sub_list = qu.ObjArrToStringArr(list_2)
+		}
+	}
+	return sub_list
+}

+ 505 - 0
data_seo/src/mysql.go

@@ -0,0 +1,505 @@
+package main
+
+import (
+	"bytes"
+	"database/sql"
+	"fmt"
+	"log"
+	"reflect"
+	"strings"
+	"time"
+
+	_ "github.com/go-sql-driver/mysql"
+)
+
+type Mysql struct {
+	Address      string  //数据库地址:端口
+	UserName     string  //用户名
+	PassWord     string  //密码
+	DBName       string  //数据库名
+	DB           *sql.DB //数据库连接池对象
+	MaxOpenConns int     //用于设置最大打开的连接数,默认值为0表示不限制。
+	MaxIdleConns int     //用于设置闲置的连接数。
+}
+
+func (m *Mysql) Init() {
+	if m.MaxOpenConns <= 0 {
+		m.MaxOpenConns = 20
+	}
+	if m.MaxIdleConns <= 0 {
+		m.MaxIdleConns = 20
+	}
+	var err error //utf8mb4
+	m.DB, err = sql.Open("mysql", fmt.Sprintf("%s:%s@tcp(%s)/%s?charset=utf8mb4", m.UserName, m.PassWord, m.Address, m.DBName))
+	if err != nil {
+		log.Println(err)
+		return
+	}
+	m.DB.SetMaxOpenConns(m.MaxOpenConns)
+	m.DB.SetMaxIdleConns(m.MaxIdleConns)
+	m.DB.SetConnMaxLifetime(time.Minute * 3)
+	err = m.DB.Ping()
+	if err != nil {
+		log.Println(err)
+	}
+}
+
+//新增
+func (m *Mysql) Insert(tableName string, data map[string]interface{}) int64 {
+	return m.InsertByTx(nil, tableName, data)
+}
+
+//带有事务的新增
+func (m *Mysql) InsertByTx(tx *sql.Tx, tableName string, data map[string]interface{}) int64 {
+	fields := []string{}
+	values := []interface{}{}
+	placeholders := []string{}
+	if tableName == "dataexport_order" {
+		if _, ok := data["user_nickname"]; ok {
+			data["user_nickname"] = ""
+		}
+	}
+	for k, v := range data {
+		fields = append(fields, k)
+		values = append(values, v)
+		placeholders = append(placeholders, "?")
+	}
+	q := fmt.Sprintf("INSERT INTO %s (%s) VALUES (%s)", tableName, strings.Join(fields, ","), strings.Join(placeholders, ","))
+	//log.Println("mysql", q, values)
+	return m.InsertBySqlByTx(tx, q, values...)
+}
+
+//sql语句新增
+func (m *Mysql) InsertBySql(q string, args ...interface{}) int64 {
+	return m.InsertBySqlByTx(nil, q, args...)
+}
+
+//带有事务的sql语句新增
+func (m *Mysql) InsertBySqlByTx(tx *sql.Tx, q string, args ...interface{}) int64 {
+	result, _ := m.ExecBySqlByTx(tx, q, args...)
+	if result == nil {
+		return -1
+	}
+	id, err := result.LastInsertId()
+	if err != nil {
+		log.Println(err)
+		return -1
+	}
+	return id
+}
+
+//批量新增
+func (m *Mysql) InsertIgnoreBatch(tableName string, fields []string, values []interface{}) (int64, int64) {
+	return m.InsertIgnoreBatchByTx(nil, tableName, fields, values)
+}
+
+//带事务的批量新增
+func (m *Mysql) InsertIgnoreBatchByTx(tx *sql.Tx, tableName string, fields []string, values []interface{}) (int64, int64) {
+	return m.insertOrReplaceBatchByTx(tx, "INSERT", "IGNORE", tableName, fields, values)
+}
+
+//批量新增
+func (m *Mysql) InsertBatch(tableName string, fields []string, values []interface{}) (int64, int64) {
+	return m.InsertBatchByTx(nil, tableName, fields, values)
+}
+
+//带事务的批量新增
+func (m *Mysql) InsertBatchByTx(tx *sql.Tx, tableName string, fields []string, values []interface{}) (int64, int64) {
+	return m.insertOrReplaceBatchByTx(tx, "INSERT", "", tableName, fields, values)
+}
+
+//批量更新
+func (m *Mysql) ReplaceBatch(tableName string, fields []string, values []interface{}) (int64, int64) {
+	return m.ReplaceBatchByTx(nil, tableName, fields, values)
+}
+
+//带事务的批量更新
+func (m *Mysql) ReplaceBatchByTx(tx *sql.Tx, tableName string, fields []string, values []interface{}) (int64, int64) {
+	return m.insertOrReplaceBatchByTx(tx, "REPLACE", "", tableName, fields, values)
+}
+
+func (m *Mysql) insertOrReplaceBatchByTx(tx *sql.Tx, tp string, afterInsert, tableName string, fields []string, values []interface{}) (int64, int64) {
+	placeholders := []string{}
+	for range fields {
+		placeholders = append(placeholders, "?")
+	}
+	placeholder := strings.Join(placeholders, ",")
+	array := []string{}
+	for i := 0; i < len(values)/len(fields); i++ {
+		array = append(array, fmt.Sprintf("(%s)", placeholder))
+	}
+	q := fmt.Sprintf("%s %s INTO %s (%s) VALUES %s", tp, afterInsert, tableName, strings.Join(fields, ","), strings.Join(array, ","))
+	result, _ := m.ExecBySqlByTx(tx, q, values...)
+	if result == nil {
+		return -1, -1
+	}
+	v1, e1 := result.RowsAffected()
+	if e1 != nil {
+		log.Println(e1)
+		return -1, -1
+	}
+	v2, e2 := result.LastInsertId()
+	if e2 != nil {
+		log.Println(e2)
+		return -1, -1
+	}
+	return v1, v2
+}
+
+//sql语句执行
+func (m *Mysql) ExecBySql(q string, args ...interface{}) (sql.Result, error) {
+	return m.ExecBySqlByTx(nil, q, args...)
+}
+
+//sql语句执行,带有事务
+func (m *Mysql) ExecBySqlByTx(tx *sql.Tx, q string, args ...interface{}) (sql.Result, error) {
+	var stmtIns *sql.Stmt
+	var err error
+	if tx == nil {
+		stmtIns, err = m.DB.Prepare(q)
+	} else {
+		stmtIns, err = tx.Prepare(q)
+	}
+	if err != nil {
+		log.Println(err)
+		return nil, err
+	}
+	defer stmtIns.Close()
+	result, err := stmtIns.Exec(args...)
+	if err != nil {
+		//log.Println(args, err)
+		log.Println(err)
+		return nil, err
+	}
+	return result, nil
+}
+
+/*不等于 map[string]string{"ne":"1"}
+ *不等于多个 map[string]string{"notin":[]interface{}{1,2}}
+ *字段为空 map[string]string{"name":"$isNull"}
+ *字段不为空 map[string]string{"name":"$isNotNull"}
+ */
+func (m *Mysql) Find(tableName string, query map[string]interface{}, fields, order string, start, pageSize int) *[]map[string]interface{} {
+	fs := []string{}
+	vs := []interface{}{}
+	for k, v := range query {
+		rt := reflect.TypeOf(v)
+		rv := reflect.ValueOf(v)
+		if rt.Kind() == reflect.Map {
+			for _, rv_k := range rv.MapKeys() {
+				if rv_k.String() == "ne" {
+					fs = append(fs, fmt.Sprintf("%s!=?", k))
+					vs = append(vs, rv.MapIndex(rv_k).Interface())
+				}
+				if rv_k.String() == "notin" {
+					if len(rv.MapIndex(rv_k).Interface().([]interface{})) > 0 {
+						for _, v := range rv.MapIndex(rv_k).Interface().([]interface{}) {
+							fs = append(fs, fmt.Sprintf("%s!=?", k))
+							vs = append(vs, v)
+						}
+					}
+				}
+				if rv_k.String() == "in" {
+					if len(rv.MapIndex(rv_k).Interface().([]interface{})) > 0 {
+						_fs := fmt.Sprintf("%s in (?", k)
+						for k, v := range rv.MapIndex(rv_k).Interface().([]interface{}) {
+							if k > 0 {
+								_fs += ",?"
+							}
+							vs = append(vs, v)
+						}
+						_fs += ")"
+						fs = append(fs, _fs)
+					}
+				}
+			}
+		} else {
+			if v == "$isNull" {
+				fs = append(fs, fmt.Sprintf("%s is null", k))
+			} else if v == "$isNotNull" {
+				fs = append(fs, fmt.Sprintf("%s is not null", k))
+			} else {
+				fs = append(fs, fmt.Sprintf("%s=?", k))
+				vs = append(vs, v)
+			}
+		}
+	}
+	var buffer bytes.Buffer
+	buffer.WriteString("select ")
+	if fields == "" {
+		buffer.WriteString("*")
+	} else {
+		buffer.WriteString(fields)
+	}
+	buffer.WriteString(" from ")
+	buffer.WriteString(tableName)
+	if len(fs) > 0 {
+		buffer.WriteString(" where ")
+		buffer.WriteString(strings.Join(fs, " and "))
+	}
+	if order != "" {
+		buffer.WriteString(" order by ")
+		buffer.WriteString(order)
+	}
+	if start > -1 && pageSize > 0 {
+		buffer.WriteString(" limit ")
+		buffer.WriteString(fmt.Sprint(start))
+		buffer.WriteString(",")
+		buffer.WriteString(fmt.Sprint(pageSize))
+	}
+	q := buffer.String()
+	//log.Println(q, vs)
+	return m.SelectBySql(q, vs...)
+}
+
+//sql语句查询
+func (m *Mysql) SelectBySql(q string, args ...interface{}) *[]map[string]interface{} {
+	return m.SelectBySqlByTx(nil, q, args...)
+}
+func (m *Mysql) SelectBySqlByTx(tx *sql.Tx, q string, args ...interface{}) *[]map[string]interface{} {
+	return m.Select(0, nil, tx, q, args...)
+}
+func (m *Mysql) Select(bath int, f func(l *[]map[string]interface{}), tx *sql.Tx, q string, args ...interface{}) *[]map[string]interface{} {
+	var stmtOut *sql.Stmt
+	var err error
+	if tx == nil {
+		stmtOut, err = m.DB.Prepare(q)
+	} else {
+		stmtOut, err = tx.Prepare(q)
+	}
+	if err != nil {
+		log.Println(err)
+		return nil
+	}
+	defer stmtOut.Close()
+	rows, err := stmtOut.Query(args...)
+	if err != nil {
+		log.Println(err)
+		return nil
+	}
+	if rows != nil {
+		defer rows.Close()
+	}
+	columns, err := rows.Columns()
+	if err != nil {
+		log.Println(err)
+		return nil
+	}
+	list := []map[string]interface{}{}
+	for rows.Next() {
+		scanArgs := make([]interface{}, len(columns))
+		values := make([]interface{}, len(columns))
+		ret := make(map[string]interface{})
+		for k, _ := range values {
+			scanArgs[k] = &values[k]
+		}
+		err = rows.Scan(scanArgs...)
+		if err != nil {
+			log.Println(err)
+			break
+		}
+		for i, col := range values {
+			if v, ok := col.([]uint8); ok {
+				ret[columns[i]] = string(v)
+			} else {
+				ret[columns[i]] = col
+			}
+		}
+		list = append(list, ret)
+		if bath > 0 && len(list) == bath {
+			f(&list)
+			list = []map[string]interface{}{}
+		}
+	}
+	if bath > 0 && len(list) > 0 {
+		f(&list)
+		list = []map[string]interface{}{}
+	}
+	return &list
+}
+func (m *Mysql) SelectByBath(bath int, f func(l *[]map[string]interface{}), q string, args ...interface{}) {
+	m.SelectByBathByTx(bath, f, nil, q, args...)
+}
+func (m *Mysql) SelectByBathByTx(bath int, f func(l *[]map[string]interface{}), tx *sql.Tx, q string, args ...interface{}) {
+	m.Select(bath, f, tx, q, args...)
+}
+func (m *Mysql) FindOne(tableName string, query map[string]interface{}, fields, order string) *map[string]interface{} {
+	list := m.Find(tableName, query, fields, order, 0, 1)
+	if list != nil && len(*list) == 1 {
+		temp := (*list)[0]
+		return &temp
+	}
+	return nil
+}
+
+//修改
+func (m *Mysql) Update(tableName string, query, update map[string]interface{}) bool {
+	return m.UpdateByTx(nil, tableName, query, update)
+}
+
+//带事务的修改
+func (m *Mysql) UpdateByTx(tx *sql.Tx, tableName string, query, update map[string]interface{}) bool {
+	q_fs := []string{}
+	u_fs := []string{}
+	values := []interface{}{}
+	for k, v := range update {
+		q_fs = append(q_fs, fmt.Sprintf("%s=?", k))
+		values = append(values, v)
+	}
+	for k, v := range query {
+		u_fs = append(u_fs, fmt.Sprintf("%s=?", k))
+		values = append(values, v)
+	}
+	q := fmt.Sprintf("update %s set %s where %s", tableName, strings.Join(q_fs, ","), strings.Join(u_fs, " and "))
+	//log.Println(q, values)
+	return m.UpdateOrDeleteBySqlByTx(tx, q, values...) >= 0
+}
+
+//删除
+func (m *Mysql) Delete(tableName string, query map[string]interface{}) bool {
+	return m.DeleteByTx(nil, tableName, query)
+}
+func (m *Mysql) DeleteByTx(tx *sql.Tx, tableName string, query map[string]interface{}) bool {
+	fields := []string{}
+	values := []interface{}{}
+	for k, v := range query {
+		fields = append(fields, fmt.Sprintf("%s=?", k))
+		values = append(values, v)
+	}
+	q := fmt.Sprintf("delete from %s where %s", tableName, strings.Join(fields, " and "))
+	log.Println(q, values)
+	return m.UpdateOrDeleteBySqlByTx(tx, q, values...) > 0
+}
+
+//修改或删除
+func (m *Mysql) UpdateOrDeleteBySql(q string, args ...interface{}) int64 {
+	return m.UpdateOrDeleteBySqlByTx(nil, q, args...)
+}
+
+//带事务的修改或删除
+func (m *Mysql) UpdateOrDeleteBySqlByTx(tx *sql.Tx, q string, args ...interface{}) int64 {
+	result, err := m.ExecBySqlByTx(tx, q, args...)
+	if err != nil {
+		log.Println(err)
+		return -1
+	}
+	count, err := result.RowsAffected()
+	if err != nil {
+		log.Println(err)
+		return -1
+	}
+	return count
+}
+
+//总数
+func (m *Mysql) Count(tableName string, query map[string]interface{}) int64 {
+	fields := []string{}
+	values := []interface{}{}
+	for k, v := range query {
+		rt := reflect.TypeOf(v)
+		rv := reflect.ValueOf(v)
+		if rt.Kind() == reflect.Map {
+			for _, rv_k := range rv.MapKeys() {
+				if rv_k.String() == "ne" {
+					fields = append(fields, fmt.Sprintf("%s!=?", k))
+					values = append(values, rv.MapIndex(rv_k).Interface())
+				}
+				if rv_k.String() == "notin" {
+					if len(rv.MapIndex(rv_k).Interface().([]interface{})) > 0 {
+						for _, v := range rv.MapIndex(rv_k).Interface().([]interface{}) {
+							fields = append(fields, fmt.Sprintf("%s!=?", k))
+							values = append(values, v)
+						}
+					}
+				}
+				if rv_k.String() == "in" {
+					if len(rv.MapIndex(rv_k).Interface().([]interface{})) > 0 {
+						_fs := fmt.Sprintf("%s in (?", k)
+						for k, v := range rv.MapIndex(rv_k).Interface().([]interface{}) {
+							if k > 0 {
+								_fs += ",?"
+							}
+							values = append(values, v)
+						}
+						_fs += ")"
+						fields = append(fields, _fs)
+					}
+				}
+			}
+		} else if v == "$isNull" {
+			fields = append(fields, fmt.Sprintf("%s is null", k))
+		} else if v == "$isNotNull" {
+			fields = append(fields, fmt.Sprintf("%s is not null", k))
+		} else {
+			fields = append(fields, fmt.Sprintf("%s=?", k))
+			values = append(values, v)
+		}
+	}
+	q := fmt.Sprintf("select count(1) as count from %s", tableName)
+	if len(query) > 0 {
+		q += fmt.Sprintf(" where %s", strings.Join(fields, " and "))
+	}
+	log.Println(q, values)
+	return m.CountBySql(q, values...)
+}
+func (m *Mysql) CountBySql(q string, args ...interface{}) int64 {
+	stmtIns, err := m.DB.Prepare(q)
+	if err != nil {
+		log.Println(err)
+		return -1
+	}
+	defer stmtIns.Close()
+
+	rows, err := stmtIns.Query(args...)
+	if err != nil {
+		log.Println(err)
+		return -1
+	}
+	if rows != nil {
+		defer rows.Close()
+	}
+	var count int64 = -1
+	if rows.Next() {
+		err = rows.Scan(&count)
+		if err != nil {
+			log.Println(err)
+		}
+	}
+	return count
+}
+
+//执行事务
+func (m *Mysql) ExecTx(msg string, f func(tx *sql.Tx) bool) bool {
+	tx, err := m.DB.Begin()
+	if err != nil {
+		log.Println(msg, "获取事务错误", err)
+	} else {
+		if f(tx) {
+			if err := tx.Commit(); err != nil {
+				log.Println(msg, "提交事务错误", err)
+			} else {
+				return true
+			}
+		} else {
+			if err := tx.Rollback(); err != nil {
+				log.Println(msg, "事务回滚错误", err)
+			}
+		}
+	}
+	return false
+}
+
+/*************方法命名不规范,上面有替代方法*************/
+func (m *Mysql) Query(query string, args ...interface{}) *[]map[string]interface{} {
+	return m.SelectBySql(query, args...)
+}
+
+func (m *Mysql) QueryCount(query string, args ...interface{}) (count int) {
+	count = -1
+	if !strings.Contains(strings.ToLower(query), "count(*)") {
+		fmt.Println("QueryCount need query like < select count(*) from ..... >")
+		return
+	}
+	count = int(m.CountBySql(query, args...))
+	return
+}

+ 58 - 0
data_seo/src/online.go

@@ -0,0 +1,58 @@
+package main
+
+import (
+	log "github.com/donnie4w/go-logger/logger"
+	qu "qfw/util"
+)
+
+//地域
+func SaveOnlineTidbRegionInfo() {
+	infos, _ := Source_Mgo.Find("zktest_mysql_area", map[string]interface{}{}, map[string]interface{}{
+		"_id": 1,
+	}, nil)
+	log.Debug(len(infos))
+	for _, v := range infos {
+		info := map[string]interface{}{}
+		info["name"] = qu.ObjToString(v["name"])
+		info["code"] = qu.ObjToString(v["code"])
+		info["pcode"] = qu.ObjToString(v["pcode"])
+		info["level"] = qu.IntAll(v["level"])
+		InsertMysqlDevData("seo_area", info, info)
+	}
+	log.Debug("is over ~")
+}
+
+//行业
+func SaveOnlineTidbIndustryInfo() {
+	infos, _ := Source_Mgo.Find("zktest_mysql_industry_info", map[string]interface{}{}, map[string]interface{}{
+		"_id": 1,
+	}, nil)
+	log.Debug(len(infos))
+	for _, v := range infos {
+		info := map[string]interface{}{}
+		info["name"] = qu.ObjToString(v["name"])
+		info["letter"] = qu.ObjToString(v["letter"])
+		info["class_1"] = qu.ObjToString(v["class_1"])
+		info["class_2"] = qu.ObjToString(v["class_2"])
+		InsertMysqlDevData("seo_industry", info, info)
+	}
+	log.Debug("is over ~")
+}
+
+//资源词
+func SaveOnlineTidbResourceInfo() {
+	sess := Source_Mgo.GetMgoConn()
+	defer Source_Mgo.DestoryMongoConn(sess)
+	q := map[string]interface{}{}
+	it := sess.DB(Source_Mgo.DbName).C("zktest_mysql_resource_info").Find(&q).Sort("_id").Iter()
+	total := 0
+	for tmp := make(map[string]interface{}); it.Next(&tmp); total++ {
+		if total%10000 == 0 {
+			log.Debug("cur index ", total)
+		}
+		delete(tmp, "_id")
+		InsertMysqlDevData("seo_resource", tmp, tmp)
+		tmp = make(map[string]interface{})
+	}
+	log.Debug("is over ~", total)
+}

+ 117 - 0
data_seo/src/words_industry.go

@@ -0,0 +1,117 @@
+package main
+
+import (
+	"bufio"
+	log "github.com/donnie4w/go-logger/logger"
+	"github.com/pinyin-master"
+	"io"
+	"os"
+	"regexp"
+	"strings"
+)
+
+var industryArr = []string{
+	"服务采购_安保",
+	"服务采购_仓储物流",
+	"服务采购_法律咨询",
+	"服务采购_广告宣传印刷",
+	"服务采购_其他",
+	"服务采购_物业",
+	"机械设备_车辆",
+	"机械设备_工程机械",
+	"机械设备_机床相关",
+	"机械设备_机械零部件",
+	"机械设备_矿山机械",
+	"机械设备_其他机械设备",
+	"建筑工程_材料设备",
+	"建筑工程_工程施工",
+	"建筑工程_机电安装",
+	"建筑工程_监理咨询",
+	"建筑工程_勘察设计",
+	"交通工程_道路",
+	"交通工程_轨道",
+	"交通工程_其他",
+	"交通工程_桥梁",
+	"能源化工_化工产品",
+	"能源化工_设备物资",
+	"能源化工_仪器仪表",
+	"能源化工_原材料",
+	"农林牧渔_生产设备",
+	"农林牧渔_生产物资",
+	"农林牧渔_相关服务",
+	"弱电安防_智能系统",
+	"弱电安防_综合布线",
+	"市政设施_道路",
+	"市政设施_绿化",
+	"市政设施_线路管网",
+	"市政设施_综合项目",
+	"水利水电_发电工程",
+	"水利水电_航运工程",
+	"水利水电_其他工程",
+	"水利水电_水利工程",
+	"信息技术_其他",
+	"信息技术_软件开发",
+	"信息技术_系统集成及安全",
+	"信息技术_运维服务",
+	"行政办公_办公家具",
+	"行政办公_办公用品",
+	"行政办公_生活用品",
+	"行政办公_通用办公设备",
+	"行政办公_专业设备",
+	"医疗卫生_耗材",
+	"医疗卫生_设备",
+	"医疗卫生_药品",
+}
+
+var IsValid *regexp.Regexp = regexp.MustCompile("^([\u4e00-\u9fa5A-Za-z]+)$")
+
+//导出行业词
+func exportIndustryWords() {
+
+	for _, v := range industryArr {
+		name := "行业词/" + v + ".txt"
+		f, _ := os.Open(name)
+		defer f.Close()
+		rd := bufio.NewReader(f)
+
+		arr := strings.Split(v, "_")
+		class_1 := arr[0]
+		class_2 := arr[1]
+		total := 0
+		for {
+			total++
+			line, err := rd.ReadString('\n') //以'\n'为结束符读入一行
+			if err != nil || io.EOF == err {
+				break
+			}
+			line = strings.ReplaceAll(line, "", "")
+			line = strings.ReplaceAll(line, "\r", "")
+			line = strings.ReplaceAll(line, "\n", "")
+			if len(line) > 0 {
+				first_word := string([]rune(line)[0:1])
+				str, _ := pinyin.New(first_word).Split("").Mode(pinyin.InitialsInCapitals).Convert()
+				letter := ""
+				if len(str) > 0 {
+					l := str[:1]
+					if LetterReg.MatchString(l) {
+						letter = strings.ToUpper(l)
+					}
+				}
+				if letter == "" || !IsValid.MatchString(line) {
+					log.Debug(line)
+				} else {
+					info := map[string]interface{}{}
+					info["class_1"] = class_1
+					info["class_2"] = class_2
+					info["name"] = line
+					info["letter"] = letter
+					Source_Mgo.Save("zktest_mysql_industry_info", info)
+				}
+			}
+
+		}
+		//log.Debug(v, "~", total)
+	}
+
+	log.Debug("is over ~~~")
+}

+ 72 - 0
data_seo/src/words_purchasing.go

@@ -0,0 +1,72 @@
+package main
+
+import (
+	log "github.com/donnie4w/go-logger/logger"
+	qu "qfw/util"
+	"strings"
+	"unicode/utf8"
+)
+
+//导出标的物词 2022年之后的标的物词
+func exportPurchasingWords() {
+	sess := Bid_Mgo.GetMgoConn()
+	defer Bid_Mgo.DestoryMongoConn(sess)
+	q := map[string]interface{}{
+		"_id": map[string]interface{}{
+			"$gte": StringTOBsonId("61cf29000000000000000000"),
+			"$lt":  StringTOBsonId("635ff1000000000000000000"),
+		},
+	}
+	it := sess.DB(Bid_Mgo.DbName).C("bidding").Find(&q).Sort("_id").Select(map[string]interface{}{
+		"extracttype":    1,
+		"purchasinglist": 1,
+	}).Iter()
+	total, isok := 0, 0
+	for tmp := make(map[string]interface{}); it.Next(&tmp); total++ {
+		if total%10000 == 0 {
+			log.Debug("cur index ", total, "~", isok, "~", tmp["_id"])
+		}
+		if qu.IntAll(tmp["extracttype"]) != 1 {
+			continue
+		}
+		p_list := IsMarkInterfaceMap(tmp["purchasinglist"])
+		listArr := []string{}
+		for _, v := range p_list {
+			itemname := qu.ObjToString(v["itemname"])
+			if utf8.RuneCountInString(itemname) > 0 && utf8.RuneCountInString(itemname) < 30 {
+				listArr = append(listArr, itemname)
+			}
+		}
+		if len(listArr) > 0 {
+			isok++
+			Bid_Mgo.Save("zktest_purchasing_word", map[string]interface{}{
+				"p_list": strings.Join(listArr, ","),
+			})
+		}
+		tmp = make(map[string]interface{})
+	}
+	log.Debug("is over ~", total, "~", isok)
+}
+
+//计算标的物词汇
+func calculatePurchasingWords() {
+	sess := Bid_Mgo.GetMgoConn()
+	defer Bid_Mgo.DestoryMongoConn(sess)
+	q := map[string]interface{}{}
+	it := sess.DB(Bid_Mgo.DbName).C("zktest_purchasing_word").Find(&q).Sort("_id").Iter()
+	total := 0
+	for tmp := make(map[string]interface{}); it.Next(&tmp); total++ {
+		if total%10000 == 0 {
+			log.Debug("cur index ", total, "~", len(words_data))
+		}
+		keys := qu.ObjToString(tmp["p_list"])
+		if keys != "" {
+			key_list := strings.Split(keys, ",")
+			if len(key_list) > 0 {
+				createWordsInfo(key_list)
+			}
+		}
+		tmp = make(map[string]interface{})
+	}
+	log.Debug("is over ~", total, len(words_data))
+}

+ 25 - 0
data_seo/src/words_region.go

@@ -0,0 +1,25 @@
+package main
+
+import (
+	log "github.com/donnie4w/go-logger/logger"
+	qu "qfw/util"
+)
+
+func SaveRegionCode() {
+	datas, _ := Source_Mgo.Find("zktest_mysql_area", map[string]interface{}{}, map[string]interface{}{
+		"_id": 1,
+	}, nil)
+	for _, v := range datas {
+		info := map[string]interface{}{}
+		name := qu.ObjToString(v["name"])
+		code := qu.ObjToString(v["code"])
+		pcode := qu.ObjToString(v["pcode"])
+		level := qu.IntAll(v["level"])
+		info["name"] = name
+		info["code"] = code
+		info["pcode"] = pcode
+		info["level"] = level
+		InsertMysqlDevData("seo_area_copy", info, "")
+	}
+	log.Debug("is over ~")
+}

+ 43 - 0
data_seo/src/words_resource.go

@@ -0,0 +1,43 @@
+package main
+
+import (
+	"github.com/go-xweb/log"
+	qu "qfw/util"
+	"regexp"
+	"unicode/utf8"
+)
+
+var effective *regexp.Regexp = regexp.MustCompile("^(([A-Za-z]+)?[\u4e00-\u9fa5]+)$")
+
+func resourceCleanWordsInfo() {
+	datas := *MysqlDevTool.Find("seo_resource", nil, "", "id", -1, -1)
+	log.Println("最终清洗阶段~", len(datas))
+	isok := 0
+	/*
+		1、保留全汉字的标的物
+		2、保留标的物开头为英文字母的词,比如dsp信号发生器、abs管材、B超
+		3、长度均在2-6
+	*/
+
+	for k, v := range datas {
+		if k%1000 == 0 {
+			log.Println("cur index ", k, "~", isok)
+		}
+		name := qu.ObjToString(v["name"])
+		letter := qu.ObjToString(v["letter"])
+		l := utf8.RuneCountInString(name)
+		if l < 2 || l > 6 || letter == "" {
+			continue
+		}
+		//是否全中文
+		if !effective.MatchString(name) {
+			continue
+		}
+		isok++
+		info := v
+		delete(info, "id")
+		InsertMysqlDevData("seo_resource_copy", info, qu.ObjToString(v["id"]))
+		Source_Mgo.Save("seo_resource_words", info)
+	}
+	log.Println("is over ", len(datas), "~", isok)
+}

+ 162 - 0
data_seo/src/words_save.go

@@ -0,0 +1,162 @@
+package main
+
+import (
+	log "github.com/donnie4w/go-logger/logger"
+	qu "qfw/util"
+	"sync"
+	"unicode/utf8"
+)
+
+//保存订阅词
+func SaveMysqlSubscribeInfo(mgoName string, sqlName string) {
+	sess := Source_Mgo.GetMgoConn()
+	defer Source_Mgo.DestoryMongoConn(sess)
+	q := map[string]interface{}{}
+	it := sess.DB(Source_Mgo.DbName).C(mgoName).Find(&q).Sort("_id").Iter()
+	total := 0
+	for tmp := make(map[string]interface{}); it.Next(&tmp); total++ {
+		if total%10000 == 0 {
+			log.Debug("cur index ", total)
+		}
+		info := map[string]interface{}{}
+		info["name"] = qu.ObjToString(tmp["name"])
+		info["letter"] = qu.ObjToString(tmp["letter"])
+		InsertMysqlDevData(sqlName, info, qu.ObjToString(tmp["name"]))
+
+		tmp = make(map[string]interface{})
+	}
+	log.Debug("is over ~", total)
+}
+
+//保存行业词
+func SaveMysqlIndustryInfo(mgoName string, sqlName string) {
+	sess := Source_Mgo.GetMgoConn()
+	defer Source_Mgo.DestoryMongoConn(sess)
+	q := map[string]interface{}{}
+	it := sess.DB(Source_Mgo.DbName).C(mgoName).Find(&q).Sort("_id").Iter()
+	total := 0
+	for tmp := make(map[string]interface{}); it.Next(&tmp); total++ {
+		if total%1000 == 0 {
+			log.Debug("cur index ", total)
+		}
+		info := map[string]interface{}{}
+		info["name"] = qu.ObjToString(tmp["name"])
+		info["letter"] = qu.ObjToString(tmp["letter"])
+		info["class_1"] = qu.ObjToString(tmp["class_1"])
+		info["class_2"] = qu.ObjToString(tmp["class_2"])
+		InsertMysqlDevData(sqlName, info, qu.ObjToString(tmp["name"]))
+		tmp = make(map[string]interface{})
+	}
+	log.Debug("is over ~", total)
+}
+
+func SaveMysqlPurchasingInfo(mgoName string, sqlName string) {
+	sess := Source_Mgo.GetMgoConn()
+	defer Source_Mgo.DestoryMongoConn(sess)
+	q := map[string]interface{}{}
+	it := sess.DB(Source_Mgo.DbName).C(mgoName).Find(&q).Sort("_id").Iter()
+	total := 0
+	pool := make(chan bool, 6)
+	wg := &sync.WaitGroup{}
+	for tmp := make(map[string]interface{}); it.Next(&tmp); total++ {
+		if total%10000 == 0 {
+			log.Debug("cur index ", total)
+		}
+		pool <- true
+		wg.Add(1)
+		go func(tmp map[string]interface{}) {
+			defer func() {
+				<-pool
+				wg.Done()
+			}()
+			name := qu.ObjToString(tmp["name"])
+			l := utf8.RuneCountInString(name)
+			if l > 1 && l <= 6 {
+				info := map[string]interface{}{}
+				info["name"] = qu.ObjToString(tmp["name"])
+				info["letter"] = qu.ObjToString(tmp["letter"])
+				InsertMysqlDevData(sqlName, info, qu.ObjToString(tmp["name"]))
+			}
+		}(tmp)
+		tmp = make(map[string]interface{})
+	}
+	wg.Wait()
+	log.Debug("is over ~", total)
+}
+
+//整合资源~标的物、订阅词
+func ResourceIntegrationInfo() {
+	unique_info := map[string]string{}
+	pur_datas := *MysqlDevTool.Find("seo_purchasing", nil,
+		"", "id", -1, -1)
+	for _, v := range pur_datas {
+		name := qu.ObjToString(v["name"])
+		unique_info[name] = name
+	}
+	sub_datas := *MysqlDevTool.Find("seo_subscribe", nil,
+		"", "id", -1, -1)
+	log.Debug("整合前~词库~", len(pur_datas), "~", len(sub_datas))
+
+	isok := 0
+	for k, v := range sub_datas {
+		if k%5000 == 0 {
+			log.Debug("cur index ", k, "~", isok)
+		}
+		name := qu.ObjToString(v["name"])
+		letter := qu.ObjToString(v["letter"])
+		if unique_info[name] == "" {
+			isok++
+			unique_info[name] = name
+			new_info := map[string]interface{}{}
+			new_info["name"] = name
+			new_info["letter"] = letter
+			InsertMysqlDevData("seo_purchasing", new_info, name)
+		}
+	}
+	log.Debug("补充后~词库~", len(unique_info), "~", isok)
+}
+
+func descriptivePurInfo() {
+	sess := Source_Mgo.GetMgoConn()
+	defer Source_Mgo.DestoryMongoConn(sess)
+	q := map[string]interface{}{}
+	it := sess.DB(Source_Mgo.DbName).C("zktest_mysql_purchasing_info").Find(&q).Sort("_id").Iter()
+	total := 0
+	isok1, isok2, isok3, isok4 := 0, 0, 0, 0
+	pool := make(chan bool, 6)
+	wg := &sync.WaitGroup{}
+	for tmp := make(map[string]interface{}); it.Next(&tmp); total++ {
+		if total%10000 == 0 {
+			log.Debug("cur index ", total, "~", isok1, "~", isok2, "~", isok3, "~", isok4)
+		}
+		pool <- true
+		wg.Add(1)
+		go func(tmp map[string]interface{}) {
+			defer func() {
+				<-pool
+				wg.Done()
+			}()
+			name := qu.ObjToString(tmp["name"])
+			length := utf8.RuneCountInString(name)
+			if length > 1 && length <= 10 {
+				numLock.Lock()
+				if length <= 4 {
+					isok1++
+				}
+				if length <= 6 {
+					isok2++
+				}
+				if length <= 8 {
+					isok3++
+				}
+				if length <= 10 {
+					isok4++
+				}
+				numLock.Unlock()
+			}
+		}(tmp)
+		tmp = make(map[string]interface{})
+	}
+	wg.Wait()
+	log.Debug("is over ~", total, "~", isok1, "~", isok2, "~", isok3, "~", isok4)
+}

+ 70 - 0
data_seo/src/words_subscribe.go

@@ -0,0 +1,70 @@
+package main
+
+import (
+	log "github.com/donnie4w/go-logger/logger"
+	"github.com/pinyin-master"
+	"go.mongodb.org/mongo-driver/bson/primitive"
+	qu "qfw/util"
+	"strings"
+)
+
+var (
+	words_data = map[string]string{}
+)
+
+//计算订阅词
+func calculateSubscribeWords() {
+	sess := Source_Mgo.GetMgoConn()
+	defer Source_Mgo.DestoryMongoConn(sess)
+	q := map[string]interface{}{}
+	it := sess.DB(Source_Mgo.DbName).C("zktest_subscribe_word").Find(&q).Sort("_id").Iter()
+	total := 0
+	for tmp := make(map[string]interface{}); it.Next(&tmp); total++ {
+		if total%10000 == 0 {
+			log.Debug("cur index ", total, "~", len(words_data))
+		}
+		keys := qu.ObjToString(tmp["key_list"])
+		if keys != "" {
+			key_list := strings.Split(keys, ",")
+			if len(key_list) > 0 {
+				createWordsInfo(key_list)
+			}
+		}
+		tmp = make(map[string]interface{})
+	}
+	log.Debug("is over ~", total, len(words_data))
+}
+
+func createWordsInfo(key_list []string) {
+	for _, v := range key_list {
+		if v != "" && words_data[v] == "" {
+			words_data[v] = v
+			info := map[string]interface{}{}
+			first_word := string([]rune(v)[0:1])
+			str, _ := pinyin.New(first_word).Split("").Mode(pinyin.InitialsInCapitals).Convert()
+			letter := ""
+			if len(str) > 0 {
+				l := str[:1]
+				if LetterReg.MatchString(l) {
+					letter = strings.ToUpper(l)
+				}
+			}
+			info["letter"] = letter
+			info["name"] = v
+			Source_Mgo.Save("zktest_mysql_purchasing_info", info)
+		}
+	}
+}
+
+//return
+func interfaceToStingArr(t interface{}) []string {
+	sub_list := []string{}
+	if list_1, ok_1 := t.(primitive.A); ok_1 {
+		sub_list = qu.ObjArrToStringArr(list_1)
+	} else {
+		if list_2, ok_2 := t.([]interface{}); ok_2 {
+			sub_list = qu.ObjArrToStringArr(list_2)
+		}
+	}
+	return sub_list
+}

+ 4 - 0
data_seo/src/行业词/交通工程_其他.txt

@@ -0,0 +1,4 @@
+交通设施
+环卫设备
+战前广场
+直升机飞行平台

+ 16 - 0
data_seo/src/行业词/交通工程_桥梁.txt

@@ -0,0 +1,16 @@
+桥涵
+桥梁
+危桥
+涵桥
+拱桥
+横泾桥
+涵洞)(提升工程
+建设工程
+加宽硬化
+改造
+建设项目
+改扩建
+应急抢修工程
+重建工程
+新建工程
+桥梁工程

+ 15 - 0
data_seo/src/行业词/交通工程_轨道.txt

@@ -0,0 +1,15 @@
+动车
+轨道
+高铁
+道岔
+道轨
+铁道
+动车组
+铁路
+提升工程
+建设工程
+加宽硬化
+改造
+建设项目
+改扩建
+应急抢修工程

+ 69 - 0
data_seo/src/行业词/交通工程_道路.txt

@@ -0,0 +1,69 @@
+道路
+路面硬化
+公路
+辅道
+一路
+大道
+延伸段
+主干道
+主干道
+应急车道
+辅道
+环线
+公路改建项目
+道路建设工程
+道路工程
+道路项目
+干道工程
+交通设施工程
+公路大修工程
+干道
+道路
+大道
+延伸段
+连接路
+道路设施
+路灯
+信号灯
+道路积水改善工程
+道路砂化工程
+道路整治项目
+道路整治工程
+道路改造工程
+道路损毁修复改造
+道路建设
+道路修缮
+路面拼宽工程
+路面大中修工程
+路面升级改造工程
+路面加宽工程
+路面修复工程
+路基扩宽工程
+观山路改造
+街道整治项目
+危桥改造工程
+公路重建项目
+公路路基
+公路改造项目
+公路建设工程
+公路提档升级工程
+农村道路扩面延伸工程
+农村路扩面延伸工程
+农村公路扩面延伸工程
+道路路面改造
+道路提升工程
+公路大修
+路面损毁修复工程
+路基
+路面工程
+道路
+提升工程
+建设工程
+加宽硬化
+改造
+建设项目
+改扩建
+应急抢修工程
+道路建设项目
+收费站项目
+路面恢复工程

+ 99 - 0
data_seo/src/行业词/信息技术_其他.txt

@@ -0,0 +1,99 @@
+便携式计算机
+计算机
+档案数字化
+监理服务
+台式电脑
+笔记本
+平板电脑
+杀毒软件
+图形终端软件
+防病毒软件
+office
+数据库软件
+操作系统
+云主机
+打印机
+复印机
+扫描仪
+数码相机
+U盘
+移动硬盘
+投影仪
+投影机
+对讲手机
+执法记录仪
+硬件设备采购
+计算机设备
+办公自动化设备
+网络设备
+台式计算机
+信息化设备
+无线数字对讲机
+无线WIFI
+热点设备
+wifi
+一卡通
+计算机设备
+语音呼叫系统
+移动执法终端
+终端
+多媒体系统
+一体机
+电脑
+彩屏
+流量采购
+财务软件
+跳线
+无线电
+VMware
+数据库
+阅卷系统
+自助查询机
+自助设备
+自助受理机
+多媒体
+电子走势图
+传输服务
+技术服务
+带宽租用
+宽带采购
+网络租赁
+网络通讯服务
+系统询价
+设备询价
+软件教育版
+测试项目
+移动警务终端
+列头柜监控主机
+教学资源库
+远程视频自助终端
+病案数字化
+台式计算机
+计算机工作站
+台式机
+硬盘
+手机终端
+激光打印机
+手机取号仪
+机器人
+工控机
+台式主机
+TFT-LCD
+图形工作站
+液晶显示器
+显示器
+摄像头
+交换机
+台式整机
+广播电视传输服务
+增值电信服务
+主机
+IC卡
+磁卡
+射频卡
+数码线材
+广播服务
+3C数码配件
+键盘
+数据加工处理服务
+主板

+ 217 - 0
data_seo/src/行业词/信息技术_系统集成及安全.txt

@@ -0,0 +1,217 @@
+VPN
+UPS
+AP
+DWDM
+PON
+精密空调
+存储
+核心交换机
+以太网交换机
+路由器
+通信装置
+光端机
+小型机
+服务器
+互联网控制网关
+上网行为管理系统
+上网认证管理系统
+防火墙
+系统集成
+光纤收发器
+KVM
+磁盘阵列
+光纤转换器
+分光器
+光缆
+电子警察
+无线wifi
+FTTH
+负载均衡
+硬件集成服务
+网络安全
+通信设备
+监控设备
+监控
+网络建设
+布线
+等保测评
+安全等级保护
+信息安全防护
+联网
+视频会议
+会议系统
+综合执法指挥平台
+天眼系统
+天眼工程
+核心交换
+安全设备
+网络工程
+综合网络
+专网
+接入网
+数据平台
+数据中心空调
+室分系统
+执勤信息化系统
+指挥系统
+视频会议系统
+监控系统
+智能安监
+安装
+集成
+拼接
+等级测评
+安全服务
+云平台
+机房
+安防系统
+显示系统
+视频系统
+网络
+云桌面
+互联网
+通信平台
+数据中心
+LED
+LCD
+液晶
+应急电源
+UPS
+机房设备
+网络设备
+电子卷宗系统设备
+LED屏工程
+入侵监测
+安全防御
+容灾备份
+灾备
+LED
+大数据
+网络安全
+视频侦查系统
+集成项目
+智慧校园
+智慧城市
+移动法庭
+智能充电设备
+森林防火监控
+校园无线覆盖项目
+智慧检务
+电子卷宗随案生成
+智慧党建平台
+智能咨询云系统
+中央空调系统
+集中热水供应系统
+巡更系统
+数侦云捕系统
+情报作战指挥平台
+公安局审讯系统
+智能运动场馆系统
+票务系统
+舆情监测系统
+智慧园区
+数字小镇
+违停抓拍系统
+管理支付系统
+录音录像系统
+移动护理系统
+智慧巡检系统
+电子商务平台
+框架数据更新
+WiFi上网)",
+智慧办公平台
+智慧教育系统
+影像导航系统
+指挥调度及通信系统
+AOIADC系统
+翼校通
+智慧环保
+数字化城管系统
+监狱信息化
+智慧监狱
+信息化教学平台
+网关
+筋骨超声评价系统
+多功能数字化X射线摄影系统
+政务云资源扩容
+信息网扩容
+云平台扩容设备
+数据资源平台
+大数据智慧综合应用平台
+综合服务管理平台
+多维可视化平台
+应用软件扩容
+电子政务云平台
+视频共享平台
+IP合成平台
+公共交通反恐应用平台
+教学管理平台
+数字化平台
+联通沃智享平台
+网络平台
+电子证照一体化服务管理平台
+云流量清洗平台
+安置信息管理平台
+云平台
+软件平台
+电子政务短信平台
+移动办公办案平台
+数据管理平台
+智慧司法网络平台
+内外网交互平台
+数字化审委会系统
+数字化城管信息采集
+数字化校园平台
+数据上传接口
+数据质量管控平台
+数据处理服务
+数据保全系统
+数据融合平台
+数据迁移项目
+大数据智能平台
+数据分析
+大数据融合交换统一接入管控平台
+数据安全防护
+大数据服务外包
+数据采集系统
+数据对接开发
+数据服务平台
+数据提升服务
+服务平台
+管理系统
+网络平台
+电子政务
+无线网络
+数据大脑)",
+居家养老
+平板
+平台
+设备
+智慧黑板
+书写屏
+一体屏
+触控大屏
+网络课堂
+态势感知
+安全感知
+权益系统
+消费者权益保护信息管理系统
+大数据一体化运营平台
+微信分担保业务
+智慧厂区
+DICT
+动态位置用户人口监测
+大数据监测分析平台
+大数据
+智慧教育
+智慧课堂
+智能交通
+智慧交通
+智慧道路
+数据治理
+门禁考勤器材及系统
+基础电信服务
+理赔资源成本管控平台
+一张图
+信息化改造
+停车场控制机

+ 203 - 0
data_seo/src/行业词/信息技术_软件开发.txt

@@ -0,0 +1,203 @@
+智能
+系统
+软件开发
+程序开发
+系统建设
+平台建设
+网站建设
+平台开发
+系统开发
+管理系统
+接口开发
+监管警示系统
+电子营业执照
+信息系统
+监管平台
+商事制度改革信息化
+企业信用信息系统
+信息共享服务平台
+食品安全溯源系统
+e点通
+法人库
+短信认证平台
+系统软件
+双告知平台
+协同监管系统
+市场监管平台
+大数据平台
+信息管理基础平台
+排队管理系统
+网站
+一库两平台
+抽查系统
+改革综合管理平台
+工商系统建设
+指挥中心系统
+经济运行监测系统
+企业监管子系统
+信息系统
+信息化平台
+信息平台
+信息化管理
+电商平台项目
+信息采集系统项目
+业务软件
+等级保护
+安全等级测评
+咨询
+监理
+规划
+中间件
+网络租赁
+弱电智能化
+小企业名录库
+小微企业名录
+企业信息基础库
+商事登记
+智慧监管
+企业名称预核
+数据共享
+查询服务
+企业库
+法人库
+系统
+软件
+接口
+平台
+监测系统
+信息平台
+会商系统
+数字档案库
+网络
+安防
+安全
+天眼
+视频
+咨询
+监理
+规划
+业务系统
+信息系统
+应用系统
+平台软件
+电子台账监
+软件
+信息化)(升级
+改造
+电子化
+信息化
+版本升级
+三证合一
+数据分析
+食品安全
+登记制度改革
+信用信息
+企业简易注销
+信用信息公示
+双随机抽查
+企业信息查询
+移动执法
+移动监管
+综合管理
+市场监管
+质量监测分析
+协同监管
+视频连接矩阵融合处理
+监管信息化
+综合监管
+追溯
+信息平台
+信息发布
+资源共享
+网络办公
+执法记录
+广告监管
+排队叫号
+集中监管
+网络广告监测
+监察
+综合系统
+全程电子化
+办公自动化
+企业公示
+客服
+指挥调度
+执法
+取证
+数据采集
+综合业务
+综合管理
+信息交换
+微信
+智慧教育
+行业应用
+网上登记
+双告知
+智能监管
+小微企业
+小微名录
+调解
+负面清单
+数据交换
+联合惩戒
+数据归集
+移动工商系统
+数据采集
+企业简易注销
+一照通
+查询
+绩效评价
+信用公示
+法人信息资源库
+智慧旅游
+风险交易事件管理)(平台
+软件
+系统
+等级保护
+咨询
+监理
+规划
+信息平台开发
+智慧校园
+智慧城市
+VR全景系统项目
+CA认证系统
+CA电子认证系统
+违法抓拍系统
+车牌识别系统
+身份识别系统
+视频终端项目
+观众服务系统
+自动阻车系统
+联勤指挥系统
+病案综合分析平台
+电视互动平台系统
+电子病历共享系统
+温湿度采集系统
+智能车牌识别系统
+智能审务监督系统
+智能交通系统
+智能交通指挥系统
+无线投影系统
+数字审讯系统
+按病种分值付费结算系统项目
+录像回放系统
+在线选课管理及资源库系统
+医学影像云归档
+刑侦掌纹自动识别系统
+信息取证分析系统
+人像采集系统
+人像识别系统
+云影像平台
+班班通
+警务通
+教学软件
+应用软件
+管理软件
+正版软件
+软件
+软件产品
+软件采购
+信息网络
+编程调试
+政企信息化

+ 34 - 0
data_seo/src/行业词/信息技术_运维服务.txt

@@ -0,0 +1,34 @@
+运维
+维保
+维护
+调整
+搬迁
+更换
+保修
+续保
+系统代维
+代维服务
+运营支撑
+服务采购
+系统优化服务
+网站代维
+运营支撑服务项目
+政务云运营服务
+微信运维
+IT设备维保
+服务器租赁
+系统代维
+数字城管运营服务
+云服务资源租赁
+云服务续费
+网格运营服务
+网络优化
+软件开发
+模型设计
+运维
+运营服务
+网格运营服务
+车企联合运营服务
+天翼高清内容运营
+自媒体运营
+微信电视运营

+ 66 - 0
data_seo/src/行业词/农林牧渔_生产物资.txt

@@ -0,0 +1,66 @@
+种子
+蔬菜大棚
+肥料
+复合肥
+有机肥
+草种
+牧草
+种苗
+玉米种
+仲丁灵乳油
+山羊
+黄牛
+诱虫板
+钼肥
+苗木
+玫瑰花种植
+麻尾镇丹参种植
+造林
+肉牛养殖
+畜禽养殖
+种猪繁育
+淡水鱼苗
+退牧还草工程
+玉露香梨种植
+中草药种植
+冷水鱼养殖
+蛋鸡养殖
+森林抚育
+蜜蜂养殖
+瓜蒌种植
+森林植被恢复
+核桃
+连翘
+林木
+鸭苗
+草花
+树木
+蓝莓)(种植
+采购
+噻苯隆可溶液剂
+吡虫啉可溶液剂
+小麦
+防护林
+花生
+花卉
+油菜籽
+柳苗
+仲丁灵
+蚕药
+种苗
+母牛
+钩藤
+葛根纤插苗
+豇豆
+马铃薯
+亚麻籽
+茶苗
+草种
+种苗
+籽种
+桂花树
+红薯苗
+1%苦参碱可溶液剂
+花卉
+鸭蛋
+鸡蛋

+ 26 - 0
data_seo/src/行业词/农林牧渔_生产设备.txt

@@ -0,0 +1,26 @@
+割草机
+菇棚
+收割机
+园林机械
+机采棉设备
+农机
+冷库设备
+仪器设备
+杀青炉
+杀青机
+联苯菊酯水乳剂
+实蝇诱捕器
+新型飞蛾诱捕器
+大棚
+育秧盘
+制茶生产设备
+农机
+蚕机具
+修剪机
+卷烟厂
+杂料物资
+压梗机
+切梗丝机
+吸丝带
+卷烟机
+烟叶成套设备

+ 24 - 0
data_seo/src/行业词/农林牧渔_相关服务.txt

@@ -0,0 +1,24 @@
+花土检测
+花卉组培
+农林牧副渔服务
+育苗
+耕地提质改造
+小囊虫防治
+林木种苗补助
+山地造林工程
+苗木移栽工程
+蔬菜种植
+农田建设
+农业技术推广
+小麦一喷三防
+诱捕天牛服务
+良种补贴
+
+茶产业扶贫
+农业开发
+畜牧业发展
+烟叶生产技术
+渔业增殖放流
+农业服务
+造林服务
+农产品初加工服务

+ 36 - 0
data_seo/src/行业词/医疗卫生_耗材.txt

@@ -0,0 +1,36 @@
+注射器
+试剂
+检测试剂
+试剂盒
+尿素
+石膏
+支架
+棉花
+甲醇
+三通
+二氧化碳
+甲醛
+酒精
+专用试剂
+垫片
+试管
+电极
+乙醇
+型管
+血袋
+手套
+搅拌器
+导管
+分析天平
+氧化锌
+丙酮
+石蜡
+支吊架
+轮椅
+医用耗材
+医用手腕带
+输液袋
+一次性口罩
+洗手液
+医用口罩
+医用防护服

+ 1218 - 0
data_seo/src/行业词/医疗卫生_药品.txt

@@ -0,0 +1,1218 @@
+药品
+疫苗
+药品
+中药
+疫苗
+胰岛素
+葡萄糖
+非那雄胺片
+槐角丸
+复方利血平氨苯蝶啶片
+人参再造丸
+瑞格列奈片
+吲达帕胺缓释片
+格列吡嗪控释片
+清热解毒口服液
+谷维素片
+清肺消炎丸
+胰激肽原酶肠溶片
+连花清瘟颗粒
+杞菊地黄丸
+防风通圣丸
+琥珀酸美托洛尔缓释片
+优甲乐
+左甲状腺素钠片
+拜唐苹
+蒙诺
+阿卡波糖片
+福辛普利钠片
+美百乐镇
+普伐他汀钠片
+木丹颗粒
+珍珠明目滴眼液
+水杨酸软膏
+同仁牛黄清心丸
+糖适平
+格列喹酮片
+噻托溴铵粉雾剂
+复方头孢克洛片
+蒙脱石散
+金果饮
+河车大造丸
+倍他乐克
+酒石酸美托洛尔片
+奥美拉唑肠溶片
+当归苦参丸
+替米沙坦片
+稳心颗粒
+麝香保心丸
+谷维素片
+头孢克洛干混悬剂
+丙戊酸钠缓释片
+板蓝根颗粒
+愈风宁心滴丸
+苁蓉益肾颗粒
+格列美脲片
+硝苯地平控释片
+苯磺酸氨氯地平片
+络活喜
+百蕊颗粒
+四磨汤口服液
+吡诺克辛滴眼液
+卡林优
+天王补心片
+蓝芩口服液
+普济痔疮栓
+六味地黄丸
+养血清脑颗粒
+同仁大活络丸
+牛黄清火丸
+迈之灵片
+强力定眩片
+坎地沙坦酯片
+迪之雅
+阿司匹林肠溶片
+双环醇片
+百赛诺
+厄贝沙坦
+氢氯噻嗪
+安脑丸
+小蜜丸
+沙美特罗替卡松粉吸入剂
+舒利迭
+硝苯地平缓释片
+伲福达
+吡诺克辛钠滴眼液
+口炎清颗粒
+牛黄清心丸
+地榆槐角丸
+大蜜丸
+复方小活络丸
+水蜜丸
+芪参益气滴丸
+清脑复神液
+多巴丝肼片
+美多芭
+头孢呋辛酯分散片
+库欣
+乳酸菌素分散片
+感冒清热颗粒
+小金片
+甲钴胺分散片
+硫酸沙丁胺醇片
+注射用盐酸川芎嗪
+复方黄连素片
+盐酸氨溴索口服溶液
+胶囊
+注射液
+衣片
+片剂
+薄膜衣
+分散片
+注射剂
+缓释片
+头孢
+冻干
+颗粒剂
+粉针剂
+口服液
+糖衣片
+乳膏
+阿莫西林
+软胶囊
+硝苯
+维生素
+氯沙坦
+肠溶片
+立酮片
+滴眼剂
+二甲双胍
+马来酸氯苯那敏
+地塞米松磷酸
+盐酸贝那普利片
+丹参片
+红霉素
+维生素B6
+利巴韦林
+双黄连
+沙美特罗
+酚麻美敏片
+氨麻美敏片
+吲达帕胺片
+克拉霉素
+板蓝根
+葛根素
+奥拉西坦
+血栓通
+脉血康胶囊
+枇杷露
+泮托拉唑钠
+克林霉素
+血脂康
+胰激肽原酶肠溶片
+哌拉西林
+定眩片
+奥硝唑氯化钠
+阿昔洛韦
+阿米卡星
+甘露醇
+格列齐特
+甲氧氯普胺
+胃康
+血脉康
+地塞米松
+吡拉西坦
+奥硝唑
+叶酸片
+天麻
+维生素B1
+琥珀酸镁托洛尔缓释片
+福辛普利
+蜜丸
+软膏
+头孢呋辛酯片
+凝胶剂
+铝碳酸镁片
+铝碳酸镁咀嚼片
+阿仑膦酸钠片
+唑来膦酸浓溶液
+伊班膦酸钠注射液
+利塞膦酸钠片
+格列美脲片
+膏药剂
+贴膏剂
+地衣芽孢杆菌活菌胶囊
+蜡样芽孢杆菌
+苯溴马隆片
+苯溴马隆胶囊
+糠酸莫米松鼻喷雾剂
+糠酸莫米松乳膏
+盐酸利多卡因胶浆
+盐酸利多卡因注射液
+注射用奥扎格雷钠
+奥扎格雷钠氯化钠注射液
+呋塞米片
+呋塞米注射液
+眼膏剂
+甲磺酸阿帕替尼片
+甲磺酸多沙唑嗪缓释片
+注射用甲磺酸酚妥拉明
+甲磺酸酚妥拉明注射液
+甲磺酸溴隐亭片
+注射用甲磺酸加贝酯
+穿王消炎胶囊
+蒲地蓝消炎胶囊
+消炎利胆片
+止痛消炎软膏
+猴耳环消炎颗粒
+肠溶胶囊
+溶液剂
+富马酸福莫特罗粉吸入剂
+异丙托溴铵雾化吸入剂
+沙美特罗替卡松粉吸入剂
+混悬剂
+苯醇醚凝胶
+天麻钩藤颗粒
+小儿氨酚黄那敏颗粒
+氨酚羟考酮片
+复方氨酚愈敏口服溶液
+氨酚待因片
+复方氨酚烷胺片
+氨酚曲马多片
+氨酚双氢可待因片
+氨酚伪麻美芬片
+稳心颗粒
+伏格列波糖片
+金芪降糖片
+参芪降糖片
+嗪片
+奥美拉唑
+阿奇霉素
+胶丸
+罗红霉素
+糖浆剂
+开塞露
+普利片
+阿托伐
+气雾剂
+喷雾剂
+阿司匹林
+救心丸
+血塞通
+布洛芬
+双氯芬酸
+丹参
+水蜜丸
+软膏剂
+盐酸二甲双胍片
+盐酸氟桂利嗪
+托洛尔片
+青霉素
+阿卡波糖
+氢氯吡格雷片
+马来酸依那普利片
+麝香保心丸
+甘草
+瑞格列奈
+钙片
+甲钴胺
+单硝酸异
+苯磺酸氨氯
+乳膏剂
+肾上腺素
+桂利嗪
+浓缩丸
+盐酸克林霉素
+黄体酮胶囊
+薄膜衣片
+总黄酮醇苷
+天麻素
+枸橼酸莫沙必利片
+双氯芬酸二乙胺乳胶剂
+胞磷胆碱钠片
+云南白药膏
+蒙脱石散
+治咳川贝枇杷滴丸
+滴丸剂
+连芩珍珠滴丸
+曲咪新乳膏
+硝酸咪康唑
+硫酸新霉素
+醋酸曲安奈德
+黄体酮注射液
+黄体酮软胶囊
+罗红霉素软胶囊
+盐酸柔红霉素
+地红霉素肠溶片
+盐酸胺碘酮注射液
+盐酸胺碘酮片
+桉柠蒎肠溶软胶囊
+桉柠蒎
+盐酸地尔硫卓缓释胶囊
+盐酸地尔硫卓缓释片
+盐酸地尔硫卓片
+肺功能测定仪
+柏子养心丸
+通脉养心丸
+多导生理仪
+鼻渊通窍颗粒
+苁蓉通便口服液
+卤米松乳膏
+寒喘祖帕颗粒
+宝咳宁颗粒
+芪蓉润肠口服液
+通宣理肺口服液
+牛黄蛇胆川贝液
+诺氟沙星滴眼液
+雪山金罗汉止痛涂膜剂
+强力枇杷露
+普济痔疮栓
+化滞柔肝颗粒
+补中益气合剂
+阿昔洛韦乳膏
+消痛贴膏
+润肺膏
+复方氨酚美沙糖浆
+贞芪扶正颗粒
+酒石酸溴莫尼定滴眼液
+滴通鼻炎水
+安神健脑液
+复方阿胶浆
+环吡酮胺乳膏
+桔贝合剂
+养阴清肺口服液
+重楼解毒酊
+肠内营养粉剂
+清咽滴丸
+珍珠通络丸
+白脉软膏
+莫匹罗星软膏
+复方鲜竹沥液
+芪冬颐心口服液
+消肿止痛酊
+川贝枇杷膏
+祖卡木颗粒
+冠心丹参滴丸
+柴黄清热颗粒
+蜜炼川贝枇杷膏
+点舌丸
+六君子丸
+云南白药气雾剂
+二妙丸
+开胸顺气丸
+知柏地黄丸
+乐脉颗粒
+银杏叶滴丸
+参苓白术颗粒
+小金丸
+肺力咳合剂
+补中益气颗粒
+根痛平颗粒
+鱼鳔补肾丸
+吲哚美辛栓
+益母草膏
+肠内营养混悬液
+复方曲安奈德乳膏
+乙酰半胱氨酸颗粒
+生血宝合剂
+吸入用布地奈德混悬液
+止咳橘红颗粒
+酪酸梭菌活菌散
+理气活血滴丸
+香砂和胃丸
+杏苏止咳糖浆
+生脉饮
+辣椒碱乳膏
+解毒生肌膏
+复方丙酸氯倍他索软膏
+马应龙麝香痔疮膏
+排石颗粒
+氧氟沙星滴眼液
+化风丹
+脑安滴丸
+小儿肺热清颗粒
+小儿伪麻美芬滴剂
+枫蓼肠胃康颗粒
+疤痕止痒软化乳膏
+红花清肝十三味丸
+熊胆滴眼液
+小儿肺热咳喘口服液
+养胃颗粒
+益心舒颗粒
+复方鱼腥草糖浆
+宣肺止嗽合剂
+丁酸氢化可的松乳膏
+噻托溴铵粉吸入剂
+热淋清颗粒
+龙胆泻肝丸
+健儿清解液
+链霉蛋白酶颗粒
+速效救心丸
+九华痔疮栓
+裸花紫珠颗粒
+川贝枇杷糖浆
+脑血康滴丸
+复方铝酸铋颗粒
+肠泰合剂
+止咳橘红口服液
+四妙丸
+津力达颗粒
+荜铃胃痛颗粒
+蛇胆陈皮口服液
+金莲花颗粒
+加味保和丸
+心通颗粒
+舒肝颗粒
+银黄颗粒
+橘红痰咳液
+门冬氨酸鸟氨酸
+荆花胃康胶丸
+西帕依固龈液
+健胃消炎颗粒
+伊血安颗粒
+止痒消炎水
+产复康颗粒
+尿毒清颗粒
+康妇消炎栓
+胃苏颗粒
+小儿肺咳颗粒
+复方黄柏液涂剂
+复方木尼孜其颗粒
+维生素D滴剂
+健肝乐颗粒
+噻托溴铵吸入粉雾剂
+整蛋白型肠内营养剂
+双氯芬酸钠栓
+双黄连口服液
+布地奈德福莫特罗粉吸入剂
+止咳平喘糖浆
+含黄芩苷
+阿莫西林克拉维酸钾
+含三七总皂苷
+糠酸莫米松乳膏
+奥硝唑阴道栓
+茵栀黄颗粒
+氯雷他定糖浆
+阿莫西林颗粒
+克霉唑栓
+阿莫西林克拉维酸钾干混悬剂
+克霉唑乳膏
+妇炎康颗粒
+龙珠软膏
+复方角菜酸酯栓剂
+山葛开胃口服液
+参芪十一味颗粒
+颈舒颗粒
+结合雌激素乳膏
+山梨醇
+阿莫西林钠氟氯西林钠
+复方福尔可定糖浆
+复方利多卡因乳膏
+肠内营养乳剂
+复方樟脑乳膏
+头孢替唑
+丙酸氯倍他索乳膏
+以左氧氟沙星计
+聚异丁烯型
+更昔洛韦滴眼液
+如皋市丁堰镇
+银丹心泰滴丸
+元胡止痛滴丸
+骨松宝颗粒
+莫家清宁丸
+葛根汤颗粒
+银杏酮酯滴丸
+舒心口服液
+水蜜丸
+以头孢泊肟酯计
+牛黄上清丸
+清开灵颗粒
+含山梨醇
+复方南星止痛膏
+清喉利咽颗粒
+气滞胃痛颗粒
+强力枇杷膏
+小蜜丸
+以呱西替柳计
+党参方
+含猴耳环干浸膏
+青鹏软膏
+布洛芬混悬液
+健脾生血颗粒
+鼻渊舒口服液
+氟米龙滴眼液
+癣湿药水
+皮肤病血毒丸
+养阴清肺颗粒
+九味双解口服液
+心灵丸
+甜梦口服液
+宫炎康颗粒
+卡波姆滴眼液
+急支糖浆
+穿心莲内酯滴丸
+氧氟沙星滴耳液
+醋酸戈舍瑞林缓释植入剂
+小儿感冒颗粒
+枯草杆菌二联活菌颗粒
+杞菊地黄口服液
+湿润烧伤膏
+尿感宁颗粒
+复方双花口服液
+血塞通颗粒
+百蕊颗粒
+安神补脑液
+香砂平胃颗粒
+多磺酸粘多糖乳膏
+健胃消食口服液
+麝香海马追风膏
+小儿豉翘清热颗粒
+血府逐瘀口服液
+痔疮栓
+冰黄肤乐软膏
+加味逍遥丸
+防参止痒颗粒
+颈复康颗粒
+通宣理肺丸
+保妇康栓
+二母宁嗽颗粒
+当归补血口服液
+化痔栓
+复方多粘菌素B软膏
+丙戊酸钠糖浆
+麝珠明目滴眼液
+感冒清热颗粒
+小儿感冒退热糖浆
+治伤软膏
+枣仁安神液
+穿心莲滴丸
+补肾益脑丸
+醋酸钙颗粒
+左氧氟沙星滴眼液
+小儿解表口服液
+小儿肠胃康颗粒
+硫糖铝口服混悬液
+补中益气丸
+柴银口服液
+拉坦前列素滴眼液
+铝镁加混悬液
+热炎宁颗粒
+杏苏止咳口服液
+养血饮口服液
+氨碘肽滴眼液
+卤米松三氯生乳膏
+如意珍宝丸
+他克莫司软膏
+右归丸
+云南白药膏
+氢醌乳膏
+喷昔洛韦乳膏
+苏子降气丸
+西黄丸
+清宣止咳颗粒
+维A酸乳膏
+脑立清丸
+华佗再造丸
+小儿消积止咳口服液
+通窍鼻炎颗粒
+氯碘羟喹乳膏
+洛索洛芬钠贴剂
+黄芪颗粒
+清肺消炎丸
+止嗽化痰颗粒
+养血清脑颗粒
+外用应急软膏
+咳露口服液
+夏枯草颗粒
+小儿感冒宁糖浆
+五维赖氨酸颗粒
+葆宫止血颗粒
+短肽型肠内营养剂
+小柴胡颗粒
+丹红化瘀口服液
+金莲清热颗粒
+橘红痰咳煎膏
+乳核内消液
+颈痛颗粒
+活血风湿膏
+牛黄蛇胆川贝滴丸
+颈通颗粒
+喉咽清颗粒
+布林佐胺噻吗洛尔滴眼液
+肛泰栓
+消积洁白丸
+归脾液
+斑蝥素乳膏
+咪喹莫特乳膏
+大柴胡颗粒
+女珍颗粒
+云南白药酊
+扎冲十三味丸
+重组人表皮生长因子滴眼液
+独一味滴丸
+坤宁口服液
+复方角菜酸酯栓
+七叶神安滴丸
+牛黄清胃丸
+人参健脾丸
+曲伏前列素滴眼液
+肝爽颗粒
+滋阴润肠口服液
+咽立爽口含滴丸
+珍宝丸
+六味安消散
+麝香痔疮栓
+清肺抑火丸
+保和丸
+聚维酮碘含漱液
+通窍耳聋丸
+固本咳喘颗粒
+夫西地酸乳膏
+连翘败毒丸
+口腔溃疡散
+醋酸泼尼松龙滴眼液
+儿童咳液
+养阴清肺膏
+普拉洛芬滴眼液
+黄氏响声丸
+复方卡力孜然酊
+小儿清热利肺口服液
+复方芩兰口服液
+酪酸梭菌二联活菌散
+布林佐胺滴眼液
+马来酸氨氯地平滴丸
+美沙拉秦灌肠液
+樟脑软膏
+复方杜仲健骨颗粒
+鱼腥草滴眼液
+珍珠明目滴眼液
+补心气口服液
+复方罗布麻颗粒
+骨质宁搽剂
+橘红痰咳颗粒
+骨疏康颗粒
+醒脾养儿颗粒
+祛痰止咳颗粒
+小儿热速清颗粒
+双氯芬酸钠滴眼液
+连花清瘟颗粒
+前列安栓
+芎菊上清丸
+吡嘧司特钾滴眼液
+三九胃泰颗粒
+清心明目上清丸
+卡泊三醇软膏
+氧氟沙星眼膏
+活力苏口服液
+双歧杆菌三联活菌散
+逍遥颗粒
+银黄滴丸
+银杏叶提取物滴剂
+槐杞黄颗粒
+口服水解蛋白
+风湿液
+贝美前列素滴眼液
+逍遥丸
+夏枯草口服液
+脉络宁颗粒
+通宣理肺颗粒
+愈风宁心滴丸
+小儿葫芦散
+丹膝颗粒
+小儿柴桂退热颗粒
+阿昔洛韦滴眼液
+蛇胆陈皮液
+匹多莫德颗粒
+安坤颗粒
+美沙拉秦栓
+骨友灵搽剂
+复方氢溴酸右美沙芬糖浆
+胰胆舒颗粒
+马来酸茚达特罗吸入粉雾剂
+小儿七星茶口服液
+生白口服液
+积雪苷霜软膏
+枸橼酸钾颗粒
+安神补心六味丸
+黄栀花口服液
+双黄连颗粒
+达立通颗粒
+他卡西醇软膏
+麻仁润肠丸
+七参连湿疹膏
+肾衰宁颗粒
+八珍鹿胎颗粒
+复方氯己定含漱液
+西甲硅油乳剂
+色甘酸钠滴眼液
+金复康口服液
+儿泻康贴膜
+复方沙棘籽油栓
+二十五味珍珠丸
+杏贝止咳颗粒
+加味左金丸
+夏枯草膏
+速效牙痛宁酊
+冠心安口服液
+保宁半夏颗粒
+罗浮山风湿膏药
+七叶洋地黄双苷滴眼液
+牛黄降压丸
+柏子养心丸
+附桂骨痛颗粒
+麝香通心滴丸
+丙酸氟替卡松乳膏
+头孢克洛干混悬剂
+清热解毒口服液
+银盏心脉滴丸
+山蜡梅叶颗粒
+利巴韦林气雾剂
+苦参软膏
+参芪降糖颗粒
+消栓颗粒
+稳心颗粒
+舒脑欣滴丸
+九味羌活颗粒
+保和颗粒
+复方金钱草颗粒
+回生口服液
+甲硝维参阴道栓
+小儿化痰止咳颗粒
+小儿咳喘灵颗粒
+牛磺酸颗粒
+甘草锌颗粒
+小儿腹泻宁
+安儿宁颗粒
+血府逐瘀丸
+茵栀黄口服液
+肾舒颗粒
+联苯苄唑乳膏
+槐耳颗粒
+蓝芩口服液
+吡美莫司乳膏
+蛇胆川贝液
+地奈德乳膏
+布地奈德气雾剂
+聚甲酚磺醛栓
+脑血疏口服液
+肤痒颗粒
+越鞠保和丸
+替硝唑栓
+丙酸氟替卡松吸入气雾剂
+麝香保心丸
+头孢克肟颗粒
+补血生乳颗粒
+辛伐他汀滴丸
+复方氟米松软膏
+舒肝丸
+氟芬那酸丁酯软膏
+异氟烷
+口服补液盐Ⅲ
+小儿泻速停颗粒
+头孢丙烯颗粒
+美沙拉秦缓释颗粒
+正柴胡饮颗粒
+头孢孟多酯
+六神丸
+头孢唑肟
+脑安颗粒
+小儿氨酚烷胺颗粒
+婴儿健脾散
+牛黄痔清栓
+苯扎氯铵贴
+金叶败毒颗粒
+新生化颗粒
+藿香正气水
+治咳川贝枇杷露
+风寒感冒颗粒
+布洛芬混悬滴剂
+布拉氏酵母菌散
+金振口服液
+乳癖散结颗粒
+金刚藤颗粒
+小儿宝泰康颗粒
+美罗培南
+酪酸梭菌二联活菌散剂
+酪酸梭菌
+新雪丸
+米诺地尔酊
+金匮肾气丸
+美洛西林舒巴坦
+丁苯羟酸乳膏
+产妇安合剂
+格列美脲滴丸
+二十味沉香丸
+复方醋酸地塞米松乳膏
+一清颗粒
+风湿二十五味丸
+速效心痛滴丸
+香砂养胃颗粒
+小儿热咳口服液
+碘酊
+消癌平滴丸
+西吡氯铵含漱液
+鹿胎膏
+蒙脱石散
+久强脑立清
+噻托溴铵粉雾剂
+神曲消食口服液
+复方羊角颗粒
+儿童清肺口服液
+雌三醇乳膏
+瘀血痹颗粒
+拉坦噻吗滴眼液
+清咽润喉丸
+柳氮磺吡啶栓
+儿滞灵冲剂
+丁香罗勒油乳膏
+五酯滴丸
+仁青芒觉
+复方益母草膏
+养心生脉颗粒
+京万红软膏
+正天丸
+吉祥安坤丸
+孕康颗粒
+外用溃疡散
+急支颗粒
+宝儿康糖浆
+小儿麻甘颗粒
+氟轻松维B乳膏
+小儿布洛芬栓
+黄龙止咳颗粒
+头孢克肟干混悬剂
+蒙脱石混悬液
+苯磺酸氨氯地平滴丸
+复方木芙蓉涂鼻软膏
+川芎清脑颗粒
+金玄痔科熏洗散
+口服酪酸梭菌活菌散剂
+头孢他啶
+生血宝颗粒
+地诺前列酮栓
+消旋卡多曲颗粒
+按无水富马酸福莫特罗计
+糊丸
+氟康唑滴眼液
+八正颗粒
+琥珀消石颗粒
+环吡酮胺阴道栓
+头孢地嗪
+脑心舒口服液
+爱维心口服液
+小儿白贝止咳糖浆
+金刚藤糖浆
+接骨七厘丸
+口炎清颗粒
+九味镇心颗粒
+克霉唑阴道膨胀栓
+小儿金翘颗粒
+参歧肠泰合剂
+防风通圣颗粒
+大山楂丸
+翁沥通颗粒
+清金糖浆
+流感丸
+栀子金花丸
+口服补液盐散
+甲硝唑栓
+复方鱼腥草颗粒
+枣仁安神颗粒
+枳术颗粒
+参仙升脉口服液
+小儿热速清口服液
+多潘立酮混悬液
+小儿康颗粒
+头孢泊肟酯干混悬剂
+三黄丸
+木香顺气丸
+防风通圣丸
+联苯双酯滴丸
+呋麻滴鼻液
+心通口服液
+牛黄解毒丸
+花红颗粒
+明目上清丸
+喉咽清口服液
+布拉氏酵母菌散剂
+糖脉康颗粒
+小儿咽扁颗粒
+荆防合剂
+清开灵口服液
+双丹颗粒
+坤宝丸
+沉香舒气丸
+柴胡滴丸
+石佛营西里
+前列舒乐颗粒
+艾附暖宫丸
+左炔诺孕酮
+猴头菌提取物
+角斜镇
+每揿含利巴韦林
+治咳川贝枇杷滴丸
+羟糖甘滴眼液
+酮康唑乳膏
+地氯雷他定干混悬剂
+鼻通滴鼻剂
+七味姜黄搽剂
+复方斯亚旦生发酊
+芩翘口服液
+地衣芽孢杆菌活菌颗粒
+七参连软膏
+枸橼酸氢钾钠颗粒
+小儿五维赖氨酸糖浆
+百咳宁颗粒
+丹皮酚软膏
+眠安宁颗粒
+都梁滴丸
+三星镇
+六味地黄颗粒
+小儿消食颗粒
+清音丸
+玉泉颗粒
+回春散
+肾康宁颗粒
+芪明颗粒
+以维胺酯计
+活心丸
+兔抗人胸腺细胞免疫球蛋白
+富马酸依美斯汀滴眼液
+天王补心丸
+浓替硝唑含漱液
+吲哚美辛呋喃唑酮栓
+贝美素噻吗洛尔滴眼液
+壮腰健肾丸
+布地奈德粉吸入剂
+四物颗粒
+脑脉利颗粒
+欧龙马滴剂
+银杏叶酊
+灯盏细辛颗粒
+羌月乳膏
+醋酸曲安奈德益康唑乳膏
+头孢克洛颗粒
+养阴清肺丸
+榄香烯口服乳
+桂林西瓜霜
+麦神开胃口服液
+异丙托溴铵气雾剂
+鲜竹沥
+肛泰软膏
+小儿感冒宁合剂
+益母草颗粒
+双唑泰阴道膨胀栓
+清热解毒颗粒
+头孢丙烯干混悬剂
+健骨生丸
+美芬那敏铵糖浆
+妥洛特罗贴剂
+芪参益气滴丸
+人参归脾丸
+假单胞菌
+脑得生颗粒
+橘半止咳颗粒
+小儿咳嗽糖浆
+妇炎平栓
+复方胃蛋白酶散
+小儿感冒宁颗粒
+加味烂积丸
+醋酸氟轻松乳膏
+龙首颗粒
+蜈黛软膏
+赖氨葡锌颗粒
+固肾安胎丸
+老鹳草软膏
+妇康栓
+双唑泰软膏
+克罗米通乳膏
+他克莫司滴眼液
+止喘灵口服液
+复方营养混悬剂
+葛根芩连丸
+红花逍遥颗粒
+消风止痒颗粒
+丹莪妇康煎膏
+活胃散
+清脑复神液
+益心巴迪然吉布亚颗粒
+卡泊三醇搽剂
+藿胆丸
+耳聋左慈丸
+正骨水
+感冒疏风颗粒
+吡诺克辛钠滴眼液
+藿香正气口服液
+冰珍清目滴眼液
+复方头孢克洛干混悬剂
+定坤丹
+小儿双金清热口服液
+麝香舒活搽剂
+健脾益肾颗粒
+双清合剂
+生血丸
+附子理中丸
+泛昔洛韦颗粒
+大黄通便颗粒
+小儿柴桂退热口服液
+以地氯雷他定计
+金酸萍糖浆
+儿脾醒颗粒
+麝香祛痛搽剂
+抗感颗粒
+无极膏
+风油精
+氟比洛芬巴布膏
+四磨汤口服液
+滴眼用利福平
+麝香追风膏
+肺宁颗粒
+布洛芬颗粒
+健儿消食口服液
+晕可平颗粒
+橘红颗粒
+川贝雪梨膏
+涩肠止泻散
+大活络丸
+利巴韦林颗粒
+板蓝根颗粒
+养血安神糖浆
+小儿止咳糖浆
+麻仁丸
+咳喘宁口服液
+阿莫西林干混悬剂
+蛇胆川贝液每支装
+川贝清肺糖浆
+蛤蚧定喘丸
+八珍颗粒
+香芍颗粒
+匹多莫德口服液
+通天口服液
+阿莫西林克拉维酸钾颗粒
+锡类散
+蒲地蓝消炎口服液
+复方清带灌注液
+内消瘰疬丸
+静注人免疫球蛋白
+孟鲁司特钠颗粒
+王氏保赤丸
+消痛贴膏
+维生素D滴剂IU
+参芪健胃颗粒
+破伤风抗毒素IU
+蛇胆川贝枇杷膏
+藿胆滴丸
+红核妇洁洗液
+萘敏维滴眼液
+克痒舒洗液
+活血止痛膏
+通络祛痛膏
+利拉萘酯乳膏
+哈西奈德乳膏
+治伤风颗粒每袋装
+洁尔阴洗液
+川芎茶调颗粒
+代温灸膏
+乳宁颗粒
+狂犬病人免疫球蛋白IU
+罗浮山风湿膏药每张净重
+小儿肺咳颗粒每袋装
+乳酸左氧氟沙星滴眼液
+异丙托溴铵气雾剂异丙托溴铵
+消银颗粒
+祖师麻膏药
+金归洗液
+托吡卡胺滴眼液
+布洛芬糖浆
+氢溴酸右美沙芬颗粒
+儿咳糖浆
+少腹逐瘀颗粒
+头孢拉定颗粒
+破伤风人免疫球蛋白IU
+复方土槿皮酊
+藿香正气合剂
+复方酮康唑乳膏
+镇痛活络酊
+花藤子颗粒每袋装
+晕可平糖浆
+维C银翘颗粒
+眼氨肽滴眼液
+双金连合剂
+日舒安洗液
+麝香痔疮栓克
+感冒灵颗粒
+加替沙星滴眼液
+头孢呋辛酯干混悬剂
+泰滴丸丸
+麝香壮骨膏
+皮肤康洗液
+珠黄散
+头孢氨苄颗粒
+丹参滴丸
+木丹颗粒
+复方角菜酸酯乳膏
+绞股蓝总苷颗粒
+小儿化食口服液
+镇咳宁口服液
+双唑泰栓复方
+右旋糖酐铁口服液
+人血白蛋白
+马来酸噻吗洛尔滴眼液
+米诺地尔搽剂
+磺胺嘧啶银乳膏
+沙美特罗替卡松粉吸入剂
+利培酮口服液
+C型臂
+胃镜
+吸入用丙酸倍氯米松混悬液
+如意金黄散
+双唑泰阴道膨胀栓复方
+散结乳癖膏
+理气活血滴丸每丸重
+头孢拉定干混悬剂
+苄达赖氨酸滴眼液
+利巴韦林滴眼液
+除湿止痒洗液
+鸦胆子油口服乳液
+小建中颗粒
+妇康宝颗粒
+复方铝酸铋颗粒复方
+元七骨痛酊
+地氯雷他定糖浆
+乳块消颗粒
+聚甲酚磺醛阴道栓
+头孢羟氨苄颗粒
+威灵骨刺膏
+热炎宁合剂
+平衡盐冲洗液
+鼻渊糖浆
+抗痨颗粒
+神农镇痛膏
+氯雷他定颗粒
+吸入用七氟烷
+复方熊胆滴眼液
+拉克替醇散
+枸橼酸钠抗凝剂
+百草妇炎清栓
+川黄口服液
+孕康口服液
+泌淋颗粒
+奥卡西平口服混悬液
+脑震宁颗粒
+聚普瑞锌颗粒
+消旋山莨菪碱滴眼液
+吲哚美辛巴布膏
+氟尿嘧啶植入剂
+血康口服液
+富马酸酮替芬滴眼液
+链霉蛋白酶颗粒单位
+七味通痹口服液
+消渴康颗粒
+安神补脑颗粒
+常熟市新区医
+复方丹参颗粒
+小儿智力糖浆
+妇科养血颗粒
+恒古骨伤愈合剂
+小儿四维葡钙颗粒
+银马解毒颗粒
+益肾蠲痹丸
+鲑鱼降钙素鼻喷剂IU
+复方吲哚美辛达克罗宁贴膏
+伊曲康唑口服液
+妇洁舒洗液
+复方蛇脂软膏
+肤舒止痒膏
+乙氧苯柳胺软膏
+门冬氨酸鸟氨酸颗粒剂
+胆木浸膏糖浆
+右旋布洛芬栓
+治糜康栓
+洁身洗液
+复方祖司麻止痛膏
+鲜竹沥口服液
+脉络宁口服液
+宫血停颗粒
+灯盏花素滴丸
+酮康唑栓
+断血流颗粒
+坤宁颗粒
+清开灵滴丸丸
+小儿复方四维亚铁散
+沙棘糖浆
+近视乐眼药水
+山白消食合剂
+八正合剂
+乐孕宁颗粒
+消炎止痛膏
+阿娜尔妇洁液
+黄苦洗液
+去感热口服液
+九味熄风颗粒
+复方太子参颗粒
+阿法骨化醇滴剂
+仙桃草膏
+乙型肝炎人免疫球蛋白
+酚麻美敏混悬液
+小儿感冒舒颗粒
+芩暴红止咳合剂
+紫雪散
+右旋布洛芬口服混悬液
+半夏糖浆
+硫软膏
+复方克霉唑乳膏
+卢立康唑乳膏
+采购R项目
+利多卡因气雾剂
+泊沙康唑口服混悬液
+溴芬酸钠滴眼液
+肿节风滴丸
+利巴韦林喷剂
+鬼臼毒素酊
+中药饮片
+医药卫生类
+原料药
+医用耦合剂
+中药饮片
+维生素B
+甲硝唑维B片

+ 159 - 0
data_seo/src/行业词/医疗卫生_设备.txt

@@ -0,0 +1,159 @@
+ICU
+DR
+电解质分析仪
+医疗设备采购
+视听觉刺激器
+免疫分析仪
+细胞仪
+PCR
+手术麻醉系统
+旋磨介入治疗仪
+X射线摄影透视系统
+医疗器械
+设备招标
+蛋白印迹系统
+解剖镜
+显微镜
+超声手术系统
+分娩仪
+器材
+显微镜
+血浆速冻机
+实验台
+病床
+智能发药系统
+天平
+空压机
+呼吸机
+离心机
+喷雾器
+心电图机
+内窥镜
+呼吸器
+PACS系统
+操作台
+血压计
+凝血计时器
+振荡器
+治疗台
+冷光源
+电解质分析仪
+肺功能仪
+核酸提取仪
+适配器
+轴流风机
+转换器
+医疗设备
+超声手术系统
+ICU
+B超
+蛋白印迹系统
+五分类血球仪
+染色体收获仪
+肺功能测试系统
+耳声发射分析系统
+医用设备
+血沉仪
+牙周洁治器
+残疾儿童辅助器具
+视频气管插管镜
+过敏原检测仪
+总胆红素测定仪
+足底压力测试仪
+手术麻醉系统
+CT
+PCR扩增仪
+GE影像设备
+C型臂
+阴道镜
+西门子影像设备
+血透机
+血滤机
+自动心肺按压系统
+自动凝血仪
+经颅磁刺激仪
+经颅多普勒血流仪
+紫外线光疗仪
+移动式C臂机
+种植专用牙椅
+神经肌肉电刺激仪
+磁刺激器
+眼科设备
+白细胞计数仪
+疾病筛查仪器
+电子鼻咽喉镜系统
+电子软镜
+电子视频喉镜项目
+电子胃镜
+电子胃镜系统
+电动吸痰器
+牙科综合治疗机
+智能电刺激仪
+无影灯
+数字乳腺X线机
+幽门螺杆菌(HP)测试仪项目
+幽门螺旋杆菌测试仪
+小肠电子内镜系统
+宫腔电切镜
+宫腔检查镜
+妇科检查床
+多普勒检查仪
+多功能产床
+听力筛查仪
+双目视力筛查仪
+医疗配套设施
+医用诊断X线机
+医用空气加压氧舱
+助听器
+动态血压记录仪
+分娩镇痛仪
+内镜系统
+全自动血培养仪
+儿童牙椅
+体外起搏器
+人工心肺机
+主动脉球囊反搏泵
+下肢智能反馈训练系统
+全自动酶标洗板机
+骨科三维X线机
+心肺复苏模拟人
+糖尿病无创早期筛查仪
+支气管导航系统
+医院超声探头
+彩色多普勒超声诊断仪
+超声肿瘤治疗系统
+彩色多普勒超声诊断系统
+筋骨超声评价系统
+彩色超声诊断仪
+超声高频外科集成系统
+机器人手术系统
+蛋白电泳系统
+凝胶成像系统
+凝胶成像仪
+眼科激光系统
+病案数字化
+多功能数字化X射线摄影系统
+腹腔镜
+麻醉机治疗仪
+诊断仪
+透析机
+胃镜
+监护仪
+乳酸分析仪
+数字减影血管造影系统
+电子输尿管镜
+激光扫描检眼镜
+内镜
+彩超
+胃肠镜
+耳鼻喉内窥镜
+口腔内窥镜
+牙科内窥镜
+神经镜
+尿道膀胱镜
+电切镜
+腹腔镜
+关节镜
+鼻窦镜
+喉镜
+额温枪

+ 18 - 0
data_seo/src/行业词/市政设施_线路管网.txt

@@ -0,0 +1,18 @@
+管线
+污水管网
+地下管网
+排水管材
+管网改造
+综合管线
+集中供热
+换热站
+管线改造
+污水管道
+雨水管道
+排水管道
+管网
+井圈
+井盖
+清淤项目
+市政供热工程
+排污工程

+ 17 - 0
data_seo/src/行业词/市政设施_综合项目.txt

@@ -0,0 +1,17 @@
+卫生
+公厕
+生活垃圾
+市政维修工程
+景观工程
+公厕
+垃圾箱
+果皮箱
+市政工程
+环卫工具箱
+环卫道班房
+道路保洁
+环卫设备采购
+市政维修工程
+生活垃圾
+公共自行车
+交通安全设施

+ 3 - 0
data_seo/src/行业词/市政设施_绿化.txt

@@ -0,0 +1,3 @@
+绿化
+户外草坪
+围栏

+ 8 - 0
data_seo/src/行业词/市政设施_道路.txt

@@ -0,0 +1,8 @@
+路灯
+路牌
+路标
+市政道路
+人行道
+道路亮化工程
+道路
+交通护栏

+ 36 - 0
data_seo/src/行业词/建筑工程_勘察设计.txt

@@ -0,0 +1,36 @@
+设计
+勘察
+规划编制
+规划评估
+划界
+测绘
+规划修编
+方案招标
+规划
+设计
+设计招标
+勘察设计
+测量
+测绘
+总体规划
+勘察招标
+城市规划
+施工图设计
+区域规划
+勘测
+地质勘察
+勘查
+勘测设计
+建筑设计
+施工图纸设计
+施工勘察
+工程地质勘察
+初步勘察
+工程勘察报告
+施工图设计阶段
+结构设计
+沉降观测
+工程可行性研究
+立面图
+可行性研究报告
+工程勘探服务

+ 315 - 0
data_seo/src/行业词/建筑工程_工程施工.txt

@@ -0,0 +1,315 @@
+加固项目
+施工
+承包
+装修
+公共租赁住房建设
+项目施工
+石方砌筑工程
+土建
+周转房建设
+街区改造
+配套设施修缮
+节能改造
+景观改造
+改造工程
+装饰工程
+护坡工程
+绿化
+土方工程
+改扩建工程
+厂房建设
+城防林建设
+修缮工程
+房屋零星维修
+修缮改造
+办公楼维修
+活动室建设
+室外工程
+整修
+防水工程
+排水沟项目
+环境综合治理
+场平工程
+危房改造
+优化工程
+亮化工程
+照明工程
+维修项目
+消火栓工程
+配套工程
+整治工程
+养殖基地扩建
+排水工程
+污水处理系统改造
+农田建设
+综合楼工程
+金属结构工程
+拆除工程
+卫生间
+上下水管
+暖气维修
+修缮
+真石漆工程
+消防工程
+设施维修
+棚户区改造
+排水工程
+污水处理系统
+幕墙工程
+办公楼
+综合楼
+幸福院
+公租房
+公共租赁住房
+业务用房
+市场
+公厕
+封顶网架
+活动室
+厂房
+看台
+活动中心
+活动室
+小学
+温室大棚
+赛道
+大门
+营房
+文化中心
+防护林
+小区配套
+教学楼
+运动场
+食堂
+展厅
+幼儿园
+业务办理用房
+电视发射塔
+宿舍新建工程
+建设项目
+改造项目
+扩建项目
+新建项目
+建设工程
+升级改造
+新建空气自动站
+项目施工
+施工图
+搬迁安置
+废弃地复垦
+建设项目
+工程施工
+工程项目
+施工招标
+绿化
+桩基
+桥梁
+工程建设
+亮化工程
+污水处理
+建筑工程
+景观
+园林
+硬化
+改建工程
+施工项目
+施工总承包
+装饰工程
+基坑
+人防
+施工图
+钢结构
+工程桩
+消防设施
+土建工程
+消防系统
+桩基础
+抗震加固
+景观改造
+城中村改造
+排水工程
+环境工程
+给水工程
+配套项目
+街区改造
+灯光系统
+土石方工程
+综合开发
+附属工程
+室内装修
+装饰装修
+防护工程
+内装修工程
+土地整理
+室外工程
+室内装饰
+大楼工程
+场地平整
+承包工程
+岩土工程
+防水工程
+土方工程
+土木工程
+岩土工程
+施工标段
+给排水工程
+场地硬化
+污水工程
+翻修工程
+建筑装修
+基坑开挖
+采暖安装工程
+采暖改造工程
+水暖改造工程
+土建零星维修项目
+土建零星项目
+零星维修工程
+餐厅工程
+建筑修缮
+修缮工程
+修缮改造项目
+办公楼维修
+危房改造项目
+维修工程
+改造项目
+扩建项目
+新建项目
+维修项目
+维修服务
+维修改造
+改建项目
+改造工程
+整体搬迁项目
+地质灾害搬迁工程
+安装工程
+迁建工程
+整修工程
+建设工程
+项目施工
+房建工程
+房屋建筑工程
+建筑装饰装修
+地面工程
+游泳池改造
+游泳池项目
+宾馆重建
+录播室改造
+游园建设
+档案室改造
+会议室改造项目
+实验室改装建造项目
+养殖大棚工程
+滑坡治理工程
+敬老院工程
+雨棚更换工程
+敬老院工程
+反恐训练场
+客房改造工程
+自动气象站建设
+实验室改造
+充电桩项目
+体育场升级改造
+博物馆改扩建项目
+候车厅建设
+雨水收集池工程
+堤坝工程
+暖棚项目
+操场工程
+地面整修项目
+旱厕改造
+教学楼项目
+智慧音乐教室项目
+栈道工程
+蔬菜大棚项目
+垦造水田项目
+办公用房集中改造
+室内粉刷
+幼儿园建设
+河岸修复工程
+人民法庭迁建工程
+下箱滑道改造项目
+车间建设工程
+扩建教学楼
+新建浴室项目
+雨棚工程
+敬老院建设工程
+连廊雨篷工程
+明渠改暗渠建设工程
+淋浴间改造
+商业街提升改造项目
+充电桩项目
+自行车棚改造
+楼道粉刷项目
+办公用房改造工程
+池塘改造工程
+伙房操作间改造
+公墓建设工程
+阶梯教室改造项目
+烈士纪念馆重建工程
+客运站建设工程
+篮球场改造
+猪场扩建项目
+洗漱间新建
+公交候车亭项目
+供热站改造工程
+供暖建设工程
+田径场
+语音室
+办公用房
+危破房
+大楼室内
+营房
+加油站
+看守所监舍
+厨房
+敬老院
+食堂
+办公用房
+会商室
+商场屋面
+活动中心
+温室
+农村改厕
+科室
+综合训练场
+水冲厕所)(修缮
+扩建
+改造
+改建
+建设
+新建
+机房装饰工程
+种植基地建设
+安置房
+操场
+手术室
+微机室
+硬化
+扩建
+建设
+整修
+改造
+翻修
+维修
+修缮
+篮球场
+危房改造建设项目
+暖通工程
+混凝土路面
+管道系统
+地基处理
+居住建筑
+赛道建设项目
+工程竣工
+园林管理
+综合管廊
+土方工程
+施工现场
+房屋修缮
+建筑物、构筑物修缮
+工程总承包服务
+施工和维修用房施工
+教育用房施工
+工地平整和清理
+地面层铺装
+土方回填工程

+ 62 - 0
data_seo/src/行业词/建筑工程_机电安装.txt

@@ -0,0 +1,62 @@
+变压器
+空调系统
+制冷设备
+灯光音响
+供热设备
+配电设备
+供电
+配电
+线路
+电缆
+直流系统配件
+电网工程
+电力外网
+供电工程
+电力工程
+电改
+基础设施维修
+开关柜
+高压柜
+低压柜
+电梯
+配电
+电力工程
+电缆
+设备安装
+中央空调安装
+空调配套工程
+无线配套铁塔
+空调系统
+通风系统
+集中供热
+工程材料
+建筑材料
+玻璃
+地膜
+泵站
+泵房
+灭火系统
+供配电
+空调机组
+新风
+火灾自动报警系统
+充电桩
+报警系统
+给水系统
+特种设备安装
+照明工程
+吊装
+排烟系统
+排水系统
+管道安装
+电气安装
+循环水系统
+送风系统
+新风机组
+供电工程
+线路迁改工程
+农网改造工程
+建筑给排水
+排水设施
+照明系统
+继电保护

+ 221 - 0
data_seo/src/行业词/建筑工程_材料设备.txt

@@ -0,0 +1,221 @@
+牌匾制作
+电梯
+发电机
+减水剂
+货梯
+附属设施采购
+标识
+标牌
+电缆采购
+蔬菜大棚采购
+塑胶地板
+门窗
+钢架大棚
+排水管材
+油漆
+地坪漆
+钢丝绳
+隔断
+乳胶漆
+磷渣粉
+保温材料
+钢管
+大便冲洗阀
+蹲便器
+沥青
+重油
+洁具
+假顶网
+高频焊管
+拉线
+螺丝
+铁滑轮
+笆片
+塘材
+同轴电缆
+管材
+白棕绳
+麻绳
+劳保用品
+雨水收集
+雨水处理
+太阳能集热系统
+水泥
+管材
+水泵
+柴油
+沥青
+地板
+开关
+安全生产设备
+风机
+热管
+白棕绳
+货梯
+原材料
+钢材
+水表
+大门
+单元门
+塑料
+标牌
+不锈钢
+排水管
+钢筋
+消火栓
+开关柜
+笆片
+热水锅炉
+排风
+门禁
+接地
+电能表
+沙石
+瓷砖
+石灰
+截止阀
+消防设备
+碎石
+设备材料
+给水管
+套管
+热泵
+基桩
+污水管道
+钢板
+板材
+防火门
+无缝钢管
+型材
+石材
+应急照明
+基坑支护
+燃气表
+涂料
+塘材
+铝合金
+胶粘剂
+玻璃钢
+线材
+挖掘机
+塑钢
+除尘器
+木材
+通风设备
+实木
+防水卷材
+地下管线
+钢绞线
+油漆
+标识牌
+商品混凝土
+卷帘
+防盗门
+隔离开关
+玻璃幕
+雨水管
+网架
+灯箱
+防水涂料
+配水管
+消毒设备
+硅酸盐
+地砖
+挡土墙
+硅酸盐水泥
+配水管网
+立柱
+防火卷帘
+防水材料
+装饰材料
+钢筋混凝土
+钢质门
+电缆
+材料设备
+循环水泵
+给水泵
+施工设备
+沙子
+弯管
+建筑涂料
+室内消火栓
+照明设施
+不锈钢管
+下水管
+上下水管
+烟囱
+吊顶
+污水泵
+钢丝绳
+线槽
+门套
+钢梁
+钢构
+开关设备
+焊接钢管
+埋件
+大理石
+室外消火栓
+预埋件
+伸缩门
+预应力混凝土
+内墙涂料
+混凝土管
+沥青材料
+热水管
+外墙涂料
+暖通设备采购
+钢筋砼
+沥青混凝土
+建材
+离心泵
+变频柜
+自动监测站
+砌块
+砂浆
+耐磨护板
+PPR热熔管
+钢筋网片
+高压橡胶管
+金属波纹管
+螺纹钢
+花纹钢板
+角钢
+花篮螺丝
+丝杆
+装配式梯笼
+排水板
+聚乙烯管
+无缝钢管
+螺旋焊管
+止水铜片
+铝包木门窗
+混凝土
+钢材
+圆钢
+焊条
+防尘网
+不锈钢
+槽钢
+钢筋混凝土管
+五金材料
+室外管线
+配套器材
+循环泵
+紫铜皮
+检测设备
+灭火器
+供水管道
+地下管网
+螺纹
+刚构
+管涵
+预应力混凝土
+锅炉设备
+板石
+石灰石
+防腐管道
+铝合金窗
+PVC板
+亚克力
+运动场地用木地板、运动场地用塑胶和地胶

+ 20 - 0
data_seo/src/行业词/建筑工程_监理咨询.txt

@@ -0,0 +1,20 @@
+监理
+咨询服务
+评估
+监理招标
+工程监理
+项目管理
+造价
+工程管理
+环评
+可行性研究
+施工监控
+环境影响评价
+环境检测
+基坑监测
+监工
+施工管理
+竣工验收
+工程试验
+交工验收
+工程咨询管理服务

+ 23 - 0
data_seo/src/行业词/弱电安防_智能系统.txt

@@ -0,0 +1,23 @@
+巡更
+广播系统
+精密空调
+智能化工程
+存储
+显示屏
+安防
+报警
+精密空调
+备份
+屏蔽
+门禁系统
+安防系统
+叫号系统
+安全防范系统
+数字音响系统
+闭路电视
+弱电系统
+对讲系统
+监控设备
+监控主机
+硬盘录像机
+弱电智能化

+ 10 - 0
data_seo/src/行业词/弱电安防_综合布线.txt

@@ -0,0 +1,10 @@
+布线
+弱电接入
+综合布线
+插座
+传输线
+布点
+弱电布线
+弱电改造项目
+供电箱变增容改造工程
+水电设施项目

+ 13 - 0
data_seo/src/行业词/服务采购_仓储物流.txt

@@ -0,0 +1,13 @@
+物流
+仓储管理服务
+运输工作
+运输项目
+配送
+汽车运输
+垃圾清运
+摆渡车
+运输服务
+运输采购
+渣土清运
+装卸搬运服务
+煤气配送

+ 80 - 0
data_seo/src/行业词/服务采购_其他.txt

@@ -0,0 +1,80 @@
+抽检
+调查
+检测
+租赁
+抽查
+检验
+餐饮
+食堂
+招待所
+拍卖
+招标代理
+广告代理
+顾问服务
+清洁服务
+保险服务
+收单业务
+咨询服务
+鉴定评估
+团体意外伤害
+体检招标
+租生产用车
+后勤社会化服务
+劳务服务
+车辆保险
+包车服务
+殡葬服务
+车险
+公务用车保险
+价格评估
+国土调查
+专项调查
+评审服务
+市场调研
+环境调查
+续租
+中介服务
+资产评估
+房屋出租
+保险采购
+评估服务
+中介单位采购
+资产)(评估
+绿植租摆
+意外伤害综合保险
+家庭关爱保险
+意外保险
+健康扶贫保险
+保险项目
+调研
+调查评价
+理赔服务
+商标注册代理
+车辆租运
+班车服务
+校车服务
+外租用车
+安全责任险
+中介服务
+检测机构
+地名普查项目
+咨询顾问服务
+会务服务
+车辆租用
+房屋续租
+委托第三方运营管理
+清洗服务
+保养服务
+维护服务
+空调消毒
+空调清洗
+劳务派遣服务
+综合零售服务
+摄影服务
+餐厅预订
+文化艺术服务
+零售服务
+健康检查服务
+不动产评估
+矿产品、建材和化工产品批发服务
+档案整理服务

+ 9 - 0
data_seo/src/行业词/服务采购_安保.txt

@@ -0,0 +1,9 @@
+保卫
+安保服务
+保安服务
+监控维保
+维保服务
+保安管理
+保安外包
+安全保卫采购
+安保项目

+ 61 - 0
data_seo/src/行业词/服务采购_广告宣传印刷.txt

@@ -0,0 +1,61 @@
+广告
+印刷
+登报宣传
+业务宣传
+宣传项目
+宣传工作
+宣传片采购
+出版物
+宣传牌
+宣传广告
+旅游宣传
+旅游局
+宣传片
+印制
+宣传策划
+广告制作
+广告牌
+活动策划
+车身广告项目
+品牌形象宣传
+扫黑除恶宣传画
+MV制作
+广告项目
+传展板
+宣传册
+宣传单定制
+纪录片制作
+视频拍摄
+策划推广服务
+宣传服务
+抖音宣传
+知识宣传
+宣传推广
+媒体宣传
+专题片拍摄
+宣传推进活动
+拍摄服务
+展览服务
+MV拍摄
+电影拍摄
+专题片拍摄
+品牌推广
+专题拍摄
+宣传画
+文印业务
+推广代理
+出版项目
+印刷品
+印刷业务
+宣传形象片
+户外媒体
+品牌策划
+其他广告服务
+其它印刷制品
+宣传推广服务
+宣传单
+海报
+说明书
+印刷
+宣传单
+广告投放

+ 4 - 0
data_seo/src/行业词/服务采购_法律咨询.txt

@@ -0,0 +1,4 @@
+法务
+法律
+知识产权
+法律诉讼服务

+ 21 - 0
data_seo/src/行业词/服务采购_物业.txt

@@ -0,0 +1,21 @@
+物业
+保洁
+环卫清扫
+卫生保洁托管
+道路清扫保洁
+物业外包服务
+清扫服务
+后勤服务
+环保验收
+物业管理有限公司
+物业管理事务指导中心
+物业服务有限公司
+广告
+村内清洁
+道路清洁
+环卫清洁
+地面清扫
+后勤社会化服务
+后勤综合管理服务
+劳务服务
+垃圾清理

+ 26 - 0
data_seo/src/行业词/机械设备_其他机械设备.txt

@@ -0,0 +1,26 @@
+其他机械设备
+打孔专机
+电动机
+香蕉筛
+烤房烘烤设备
+园林机械
+育秧盘
+空压系统
+缝纫设备
+蒸汽锅炉
+邦定机
+机采棉设备
+机械停车位
+注液枪
+变频器
+制冷机组
+杀青炉
+杀青机
+粉碎机
+汽机液压扳手
+充电式电钻
+洗地机
+林业机械
+农业机械
+炉体设备
+服装生产设备

+ 70 - 0
data_seo/src/行业词/机械设备_工程机械.txt

@@ -0,0 +1,70 @@
+渣土车
+车载钻机
+清淤机
+清管撬
+试压撬
+附着式爬升脚手架
+转底炉压球机
+自动络筒机
+高空作业平台升降机
+高速贴片机
+捅风眼机
+残极加料机
+曲轴数控镗床
+大尺寸卧式沉积碳设备
+泥浆泵备件
+多功能角磨机
+电控箱
+精涂机
+化涂机
+初涂机
+硫化机
+一体化钻孔机
+燃机抓斗式卸船机备件
+高空作业车
+除气机
+直柄麻花钻
+滤油车
+卸船机电梯
+减速机
+吹灰器
+风机
+汽轮机
+切割机
+破碎机
+挖掘机
+空压机
+计量泵
+排污泵
+增压泵
+真空泵
+液体泵
+电机
+水泵
+柴油发电机组
+离心机
+压缩机
+陶瓷过滤机
+冷水机
+潜水泵
+风力发电机组
+压缩空气系统
+燃煤发电机组
+消防泵
+提升机
+柴油机
+污水泵
+内燃机
+推土机
+装订机
+铲斗
+鼓风机
+空气压缩机
+压路机
+皮带输送机
+蒸发器
+滤油机
+通风机
+风机盘管
+手拉葫芦
+破碎锤

+ 27 - 0
data_seo/src/行业词/机械设备_机床相关.txt

@@ -0,0 +1,27 @@
+机床
+数控模板机
+自动裁床
+包装机
+打包机
+抛丸清理机
+激光切割机
+纤维纱线机
+缝盘机
+埋夹机
+倒毛机
+注塑生产线
+喂丝机
+生产线
+数控成型磨齿机
+数控双面缓进磨床
+数控喷丸成形机
+V形传动带
+称重计量给煤机胶带
+葫芦素回柱绞车
+燃机输送带
+皮带机
+平衡机
+数控机床
+车床
+数控加工
+机械切削工具

+ 60 - 0
data_seo/src/行业词/机械设备_机械零部件.txt

@@ -0,0 +1,60 @@
+螺丝
+大修配件
+配件采购
+零配件采购
+紧固件
+手拉葫芦
+轴承
+皮带扣
+穿条
+水封槽
+防松螺母
+巴彦高勒卸扣
+角尺
+螺旋千斤顶
+螺杆
+螺帽
+自密封圈
+轴套叶轮
+联轴器膜片
+呼吸阀
+量油孔
+轨弓滚轮
+油泵联轴器
+冷却水套
+金属软管及接头
+球阀
+磨煤机减速箱
+叶轮
+气缸
+螺栓
+蝶阀
+叶片
+电磁阀
+联轴器
+软管
+输送带
+轮胎
+标准件
+补偿器
+过滤器
+钻头
+钢管
+锚索
+锚具
+发动机
+镐型截齿
+锯齿环
+三用阀
+继电器
+减压阀
+控制阀
+传送带
+冷凝器
+传动轴
+气动阀
+离心泵
+主阀垫
+密封圈
+汽车配件
+链条

+ 7 - 0
data_seo/src/行业词/机械设备_矿山机械.txt

@@ -0,0 +1,7 @@
+碎石机
+输送机
+雕刻机
+矿用锚索
+采煤机滚筒
+起重机
+起重设备

+ 83 - 0
data_seo/src/行业词/机械设备_车辆.txt

@@ -0,0 +1,83 @@
+高喷车
+轿车
+洒水车
+消防车
+自卸车
+救护车
+运输工具
+吸污车
+客车
+流动舞台车
+三轮车
+执法车
+运输车
+叉车
+急救车
+洗扫车
+垃圾车
+摩托车
+环卫作业车
+执法执勤用车
+多功能抑尘车
+扫路车
+移动警务车
+泥浆泵
+洗地车
+清洁卫生车辆
+油沙豆收获机
+药材收获机
+警用制式车辆
+环卫专用车辆
+越野车
+警务车辆
+道路清扫车
+囚车
+大巴车
+牵引车
+拖车
+电动叉车
+电动巡逻车
+液压升降车
+公交车
+执法用车
+公车
+井下作业机
+应急指挥车
+清扫车
+乘用车
+自行车
+作业车
+商务车
+电瓶车
+巡逻车
+无人机
+飞机
+装载机
+生产经营用车
+房车
+生产线设备
+基建设备
+皮卡车
+执法车辆
+特种车辆
+广播车
+殡仪车
+扫地车
+仓储设备
+起重运输设备
+火化机
+生产用车
+压铸流水线成套设备
+面包车
+专用车辆
+执勤专用车
+防暴处突车
+业务用车
+货车
+摩托艇
+流动治超专用车
+水车
+环卫车辆
+车辆
+平板手推车
+工具车

+ 17 - 0
data_seo/src/行业词/水利水电_其他工程.txt

@@ -0,0 +1,17 @@
+污水处理工程
+污水处理厂
+污水处理设备
+安全监理
+防汛
+抢险
+水处理设备
+高标准基本农田
+配水管网
+给水管网
+废水处理设备
+饮水工程
+农村饮水安全项目
+节水改造项目
+节水建设项目
+供水管道
+供水工程

+ 77 - 0
data_seo/src/行业词/水利水电_发电工程.txt

@@ -0,0 +1,77 @@
+发电
+变电站
+小水电
+电力
+热电
+电站
+配电
+低压
+变电站
+发电机
+热电厂
+发电机组
+发电厂
+水电站
+电线
+直流
+泵站
+输电
+交流
+供电所
+热泵
+电气化
+输电线
+变压器采购
+农网改造升级
+配电网
+中国电力
+电力电缆
+配电变压器
+配电系统
+低压电缆
+主变压器
+风力发电机
+电气工程
+电力线路
+电力线
+变电所
+低压开关柜
+电力设备
+低压开关
+电源线
+冷水机组
+电气安装
+控制电缆
+高压开关
+核电站
+电力系统
+开关设备
+售电
+电缆保护管
+电缆敷设
+电源柜
+真空断路器
+电控系统
+电缆接头
+继电保护装置
+发电车
+直流电源
+火力发电
+城市配电网
+冷却系统
+高压电力电缆
+整流器
+电缆挂钩
+配电线路
+异步发电机
+光伏供电系统
+变压器
+分布式光伏发电项目
+变压器增容工程
+点火变压器
+光伏发电项目
+配网工程 
+线缆
+液压阀
+热继电器
+水电接入工程

+ 72 - 0
data_seo/src/行业词/水利水电_水利工程.txt

@@ -0,0 +1,72 @@
+大坝
+蝶阀
+水系连通工程
+水土保持
+滴灌
+阀门
+供水管道
+供水
+河道治理
+机井工程
+给水工程
+排洪沟
+输水管线
+水利工程
+水处理
+膜下滴灌
+水务
+滴灌改造
+农田水利
+农田建设项目
+水系
+水泵
+河口
+水土保持
+流域
+防汛
+给水工程
+给水系统
+江河
+水厂连通工程
+水泵站
+潜水泵
+疏水
+下水管
+洪水
+蓄水
+涵洞水土保持方案
+调水
+水源保护区
+泥石流
+循环水泵
+给水泵
+污水泵
+水泵房
+洪沟
+截污工程
+排水系统
+加压泵
+水情自动测报系统
+输水管线
+坝体
+循环水系统
+水土保持工程
+泄水道
+雨水井
+引水渠
+排水泵
+河道管理
+抗旱应急工程
+打井配套工程
+农田机井
+环境地质调查
+水利工程维修
+河道治理工程
+水塘改造工程
+河道轮疏工程
+中小河流治理
+自来水表
+卧式离心泵
+水循环系统
+水利建设项目
+城镇水域治理服务

+ 9 - 0
data_seo/src/行业词/水利水电_航运工程.txt

@@ -0,0 +1,9 @@
+航道
+多用途船
+船闸液压启闭机 
+软密封闸阀
+船闸液压启闭机
+翻板坝 
+抽水清淤工程
+河道综合整治
+河道护岸工程

+ 62 - 0
data_seo/src/行业词/能源化工_仪器仪表.txt

@@ -0,0 +1,62 @@
+核磁共振波谱仪
+快检仪器
+全自动微生物分析系统
+光度仪
+色谱仪
+电工元器件
+光度计
+仪器设备
+热量表
+红外分光测油仪
+达高特测厚仪
+折光率仪
+电导率测试仪
+红外热像仪
+水分测定仪
+电导率仪
+自动测氟仪
+氢气纯度仪
+脱硫设备
+氮氧化物分析仪
+氮氧化物转化器
+氮氧化物在线分析仪
+监测仪
+液压注浆泵
+变送器
+流量计
+测定仪
+电解质分析仪
+微粒检测仪
+雷达液位计
+烟气分析仪
+脂肪测定仪
+色谱分析仪
+水处理装置
+菌落计数器
+液位计
+红外分光光度计
+近红外分光光度计
+旋光仪
+脉动真空灭菌器
+自动电位滴定仪
+滴定仪
+计量仪器
+离子色谱仪
+计量器
+高效液相色谱仪
+生化分析仪
+红外测温仪
+气相色谱仪
+分光光度计
+流量计
+计量设备
+定氮仪
+气相色谱质谱联用仪
+超声波流量计
+荧光分光光度计
+荧光光度计
+荧光检测器
+原子吸收分光光度计
+万用表
+酶标仪
+光学仪器

+ 42 - 0
data_seo/src/行业词/能源化工_化工产品.txt

@@ -0,0 +1,42 @@
+化工
+化肥
+病虫害防治
+SOD酶
+农药
+聚乙烯液体管
+镀锌铁丝
+高分子托辊
+法兰盘脚垫
+蝗虫微孢虫悬浮剂
+灭火剂
+肥料
+碳酸钙
+氢氧化钠
+热收缩膜
+热缩膜
+仲丁灵乳油
+减水剂
+碳酰肼
+氟利昂
+食品安全检测试剂
+硅橡胶
+乙烯塑料
+仲丁灵乳油
+液体燃料
+工程塑料
+蓄电池
+硅钢
+硅胶
+腐殖酸
+丁胺
+热收缩膜
+诊断试剂
+太阳能电池
+氧化铝
+绝缘油
+焊接钢
+酚醛
+胶管
+气溶胶
+玻璃钢
+速凝剂

+ 89 - 0
data_seo/src/行业词/能源化工_原材料.txt

@@ -0,0 +1,89 @@
+煤炭
+燃煤
+试剂
+燃料
+聚氨酯
+快凝剂
+聚乙烯
+电解液
+电泳涂装线
+粉煤灰
+高频焊管
+锚固剂
+工业用盐
+石油
+液碱
+化工原料
+天然气
+燃烧煤
+炼钢耐火材料
+苯磺酸
+亚硫酸氢钠
+硝酸
+氯乙酰氯
+机油
+柴油
+催化剂
+制冷剂
+清洗剂
+分散剂
+脱硫剂
+褐煤
+石墨
+聚氯乙烯
+氯化聚氯乙烯
+苯甲酸
+正己烷
+环烷
+硫酸钠
+环氧乙烷
+硅酸铝
+苯二甲酸
+氧化锌
+脂肪酸甲酯
+过氧化氢
+氯乙烯
+异辛烷
+煤气
+乙醇
+碳酸二甲酯
+烯酸
+丙烯酸
+辛烷
+甲酯
+乙二醇
+臭氧
+氯甲烷
+氧化钠
+氢氧化钠
+氨基酸
+聚丙烯
+酰胺
+亚胺
+聚酰
+酰亚胺
+乙酸
+甘油
+甲烷
+乙烯
+硝酸
+聚酰亚胺
+碳酸
+烯酰
+丙烯酰胺
+胺类
+甲醇
+甲基
+甲醛
+聚氨酯
+硅酸
+氧化氮
+硫酸
+化氯
+七氟丙烷
+溴甲烷
+可燃气体
+稳定性二氧化氯溶液
+丙烷
+氯酸
+玻璃纤维

+ 37 - 0
data_seo/src/行业词/能源化工_设备物资.txt

@@ -0,0 +1,37 @@
+焚烧炉
+风电
+色谱仪
+煤层注水封孔器
+锅炉改造
+塑料网假顶
+洗瓶机
+悬浮式单体
+电镀
+蒸汽锅炉
+液压支架软管
+清扫器
+锅炉机房系统
+有机薄膜真空沉积系统
+拉力试验机
+换热站设备
+硫化机
+簧式浮球液位控制器
+焚烧炉
+管道设施
+防火玻璃
+多级泵
+水分离器
+电加热炉
+冷凝器
+石墨炉
+空气预热器
+计数器
+滤网
+柴油发电机
+换热器
+省煤器
+火焰监测系统
+锅炉联锁保护系统
+DCS设备
+防化设备
+空气自动站

+ 134 - 0
data_seo/src/行业词/行政办公_专业设备.txt

@@ -0,0 +1,134 @@
+手印速显仪
+电影设备
+专用设备
+检测仪器采购
+无线管控设备
+放映系统
+快检仪器
+数码摄录设备
+数码相机
+数控设备
+DNA快速检测仪
+防弹头盔
+防弹战术背心
+教学设备
+教育设备
+实验室设备
+科研设备
+游泳装备
+侦察技术装备
+指纹排查系统
+色谱仪
+指挥中心设备
+实训室
+体育场地
+专用设备
+通用设备
+教学设备
+实验装置
+体育设备
+电子护具
+电气设备
+电影设备
+运动耗材
+放映系统
+检测设备
+教具
+饮水平台采购
+执法配套装备采购
+执法设备
+无人机航摄系统
+摄录设备
+佳能EOS
+数控设备
+电器设备
+电器采购
+游泳装备
+教学仪器设备
+实验设备
+案件管理设备
+检测仪器
+办案专用箱包
+教育设施设备
+实验室设备
+体育场地设备
+指纹排查系统
+安检设备
+警卫装备
+数字对讲机
+考点设备
+考场设备
+指挥中心设备
+宣传馆设备
+电教设备
+厨房设备
+科研设备
+执法影音取证设备
+印刷设备
+教育设备
+文化馆设备
+舞台设备
+舞台灯光设备
+声纹检验鉴定设备
+考场监管设备
+调频发射机
+光谱仪
+防弹头盔
+侦察技术装备
+特警装备
+单警装备
+警用执法仪
+艺术用品购置
+自助发证机
+自动取票机
+磁铁黑板
+电子屏
+电台设备更新
+残钞销毁设备
+工作台
+光刻机
+人脸识别考勤机
+数字集群对讲机
+黑白复合机
+自助拍照终端
+出入境办证设备
+对讲终端
+矿用隔爆型摄像仪
+AIS船载终端
+辐射防护服
+保洁手推车
+护目镜
+防静电服
+下水服
+火化用柴油
+灭火系统设备
+长跑测试仪
+预约系统自助签到机
+智慧诉服终端采购
+人脸速通闸
+自助售卖机
+复合机
+红外探测器
+录音笔
+救援队专业装备
+手机屏蔽仪
+屏蔽柜
+防火设施
+防火物资
+执勤设施
+枪弹柜
+校园卡
+教学仪器
+档案馆设备
+手机数据取证分析仪
+灭火器
+办公电子设备
+警务通
+城管通
+消防箱
+展架
+视频节目制作和播控设备
+警械设备
+救生圈
+反光背心
+灭火箱

+ 101 - 0
data_seo/src/行业词/行政办公_办公家具.txt

@@ -0,0 +1,101 @@
+办公桌
+家具
+组合床
+营具
+隔断
+床头柜
+洁具
+钢琴
+展柜
+宿舍柜子
+床头柜
+衣帽柜
+档案柜
+橱柜
+垃圾桶
+卫生洁具
+暖气片
+办公家具
+家具用具
+床类
+钢木床类
+钢塑床类
+轻金属床类
+木制床类
+塑料床类
+组合床
+竹制床类
+藤床类
+塑料床类
+写字台
+书桌
+前台桌
+钢木台
+钢台
+桌类
+钢塑台
+桌类
+轻金属台
+竹椅
+竹凳
+藤椅
+候诊椅
+藤凳
+沙发
+文件柜
+保险柜
+保险箱
+密集架
+书架
+货架
+屏风
+餐具
+茶几
+床椅
+单人床
+架子床
+水池
+便器
+水嘴
+便器冲洗阀
+阀门
+淋浴器
+淋浴房
+办公家俱
+家具
+桌椅
+洁具
+学生床
+宿舍设施
+宿舍用具
+铁皮柜
+课桌凳
+课桌
+看台椅
+高背转椅
+课桌凳
+小转椅
+吸顶灯询价单
+制作纱窗
+手机柜
+储物柜
+椅子
+会议桌
+椅凳
+办公椅
+书柜
+办公桌
+座椅
+家具
+更衣柜
+垃圾分类桶
+竹扫帚
+办公设施
+实木床
+会议椅
+铝合金窗
+茶水柜
+餐桌
+其它凳
+其它桌
+防盗门

+ 202 - 0
data_seo/src/行业词/行政办公_办公用品.txt

@@ -0,0 +1,202 @@
+复印纸
+服装
+制服
+窗帘
+工作服
+工作靴
+办公用品
+劳保用品
+军训服
+毕业生用品
+教材
+校服
+垃圾桶
+指示牌
+宣传栏
+托盘
+打印纸
+POS纸
+图书
+办公耗材
+低值易耗品
+图书
+词典
+百科全书
+年鉴
+儿童图画书及涂色书
+地图册
+图表集
+盲文图书
+碟靶
+靶纸
+盲文书籍
+盲文词典
+期刊
+盲文百科全书
+盲文地图册
+电子图书
+电子词典
+电子百科全书
+电子年鉴及系列丛书
+电子地图册
+期刊
+视听资料
+机读资料
+照片档案
+底图
+电子档案
+缩微胶片档案
+实物档案
+警用特战服
+警用装备
+执勤装备
+冬训服
+制服
+服装
+民族服饰
+羽绒服
+护士鞋
+生活设施采购
+办公用品
+制服采购
+印刷品采购
+印制项目
+指示牌
+宣传栏
+密集架
+档案装具
+工作靴
+密集柜
+工作服
+校服
+警服
+印刷品采购
+宣传品采购
+营具采购
+隔断采购
+用品采购
+营养包采购
+灯具采购
+塑料托盘采购
+ApplePencil手写笔
+鼓粉盒
+订书机
+硒鼓
+彩色粉笔
+墨盒
+墨水
+封面纸
+台式机
+印刷公文用纸
+办公用纸
+纸质文具
+光盘购置
+登记册
+教学用手册
+登记本
+作业本
+速印纸
+资料存放袋
+标签纸
+印台
+印泥
+印油
+办公消耗用品
+办公文具
+文房用品
+宣纸
+印刷品
+充电宝
+硒鼓
+碳粉
+鼓粉盒
+文件盒
+档案盒
+资料盒
+校具设备
+教科书
+活动礼品
+遮雨棚
+车棚
+探照灯
+应急灯
+五金工具
+厨具采购
+食堂物品
+奖品
+宣传品
+宣传用品
+工服)^(加工服务
+中性笔
+奖状
+证书
+法律类书籍
+旗帜
+奖牌
+记事本
+单据
+收据
+凭证
+胶装本
+文件袋
+其它展示用品
+票夹
+长尾夹
+粉盒
+课业本
+教学用本
+哲学类书籍
+其它装订用品
+文件夹
+其它财会用品
+手提金库
+印章箱
+水彩笔
+替芯
+铅芯
+礼品袋
+礼品盒
+塑料袋
+文具套装
+礼盒
+书报架
+展示架
+会议用品
+胶水
+会展证
+证件卡
+卡套
+不干胶标签
+名片
+贺卡
+明信片
+儿童读物
+教辅
+条幅
+锁芯
+粉笔
+婚庆印章
+账本
+账册
+商务公文包
+整理箱
+文件座
+文件架
+文件框
+签到本
+卷尺
+布告栏
+风琴包
+事务包
+资料册
+铅笔
+分页纸
+索引纸
+油墨
+报告夹
+胶带
+胶纸
+胶条
+美工刀
+垃圾筒
+安全帽

+ 269 - 0
data_seo/src/行业词/行政办公_生活用品.txt

@@ -0,0 +1,269 @@
+大米
+食用油
+蔬菜
+牛奶
+营养包
+食品
+后勤物资
+面粉
+猪油
+猪肉
+仔猪
+厨房设备
+厨具
+灶具
+厨房杂件
+玩偶车
+儿童自行车
+儿童三轮车
+电动童车
+木偶
+泥偶
+蜡人
+面人
+绢人
+纸人
+布人
+绒玩偶
+陶瓷玩偶
+塑料玩偶
+橡胶或乳胶玩偶
+填充的玩具动物
+非填充的玩具动物等
+厨卫用具
+吸油烟机
+煤气罐
+液化气罐
+食用油
+热水器
+煤炉
+牛奶
+大米
+猪肉
+食品
+食堂物资
+取暖设备
+仔猪
+后勤物资
+食堂生鲜
+面粉
+米面
+食堂干货
+救灾帐蓬
+窗帘
+救灾物资
+生活物资
+防尘口罩
+生活用纸
+汽车座垫
+棉篷布
+校服
+吸尘器
+去湿机
+厨房用具
+保鲜膜
+扫把
+雨衣
+雨鞋
+灯具
+电筒
+节能灯
+开水器
+日光灯
+厨房厨具设备
+滤袋
+长款棉大衣
+手提式缝纫机
+饮用奶
+照明灯泡
+肥皂
+吊扇
+购物袋
+连卷袋
+编织袋
+衬衫
+西裤 
+蛋糕
+鞋套
+乳酸饮料
+棉被
+床上用品
+玩具
+警用皮鞋
+书籍
+矿泉水
+纯净水
+电风扇
+绿茶
+垃圾袋
+运动服饰
+抽纸
+米类
+文学类书籍
+菜籽油
+纸杯
+风扇
+换气扇配件
+干电池
+伞
+生活家电
+保温杯
+休闲零食
+电热水壶
+灭鼠
+杀虫剂
+软包抽取式面纸
+粽子
+毛巾
+面巾
+方巾
+胶棉拖把
+家居消毒液
+文化衫
+平板拖把
+厨房电器
+儿童图画书
+红茶
+水桶
+方便面
+粉丝
+米线
+胶棒
+平板电视
+洗手液
+卷筒纸
+簸箕
+定制菜谱
+桌牌
+台牌
+运动鞋
+姜
+蚊香
+蚊香液
+徽章
+纪念章
+篮球
+茶杯
+面食
+大家电
+书籍
+杂志
+报纸
+其他调味品
+茶类饮料
+凉席
+竹席
+藤席
+草席
+牛皮席
+贺卡
+卡片
+其它红茶
+碗
+碟
+筷
+电热水壶
+保健养生壶配件
+花生油
+调和油
+四件套
+大蒜
+历史类书籍
+相框
+画框
+帐篷
+天幕
+帐篷配件
+胶水
+化纤被
+新鲜水果
+跳绳
+身体防护用品
+消毒柜
+洗碗机
+思想类书籍
+生肉
+肉制品
+剪刀
+床品套件
+四件套
+多件套
+烧水壶
+大家电配件
+酸奶
+其他乳制品
+驱虫用品
+其它粮食
+家居饰品
+干货
+土特产
+卫浴龙头
+排球
+平板卫生纸
+迷彩服
+军迷服
+作训服
+其它茶叶
+卫生纸
+户外休闲衣裤
+别针
+回形针
+大头针
+救生圈
+篮球服
+电工胶带
+整理箱
+室内除臭
+芳香用品
+家用梯
+脚凳
+五花肉
+灯笼
+普通舞台装
+鸭蛋
+包装袋
+垃圾筒
+烟灰皿
+生活家电配件
+薯
+豆
+相关植物加工品
+卷尺
+洁厕剂
+抹布
+玉米油
+机械门锁
+骨灰盒
+灭蚊灯
+居家服
+羽毛球
+成人用纸尿护理用品
+电压力锅
+乒乓球拍
+炊事设备
+小麦副产品
+鸡蛋
+山茶油
+消毒液
+水拖
+厨房用品
+普通洗手液
+信封
+生活家电配件
+茶叶产品及副产品
+白酒
+脸盆
+一次性餐盒
+床单
+床罩
+额温枪
+杂粮组合
+美工刀
+杯子套装
+情侣对杯
+垃圾筒
+编织布
+编织袋
+口罩
+花露水
+手电筒

+ 114 - 0
data_seo/src/行业词/行政办公_通用办公设备.txt

@@ -0,0 +1,114 @@
+打印机
+打卡机
+空调
+办公设备
+装订机
+通用设备
+生活设施
+饮水平台
+密集架
+电器设备
+洗衣机
+后勤服务设备
+电视机
+清洗
+消毒
+传真机
+话机
+复印机
+录像设备
+多功能一体机
+摄像机
+照相机
+扫描仪
+电子白板
+LED显示屏
+采访机
+无线话筒
+无线胸麦
+触控一体机
+刻录机
+速印机
+装订机
+配页机
+折页机
+切纸机
+油印机
+碎纸机
+光盘粉碎机
+硬盘粉碎机
+芯片粉碎机
+条码打印机
+条码扫描器
+计算器
+点钞机
+验钞机
+打字机
+条码扫码器
+扫码枪
+水净化设备
+投影仪
+教育设备购置
+洗衣房设备
+扫码枪
+对讲机
+指纹系统
+停车系统
+DV机
+音响设备
+话筒
+视频投影设备
+相机
+监控显示设备
+清雪设备
+有线麦克风
+文印设备
+摄影灯
+拉杆音箱
+投影设备
+扩音设备
+广播设备
+办公电器
+体育用品购置
+专业音箱
+洗车机防雨棚
+摄影机设备
+电子寄物柜
+小米AI音箱mini版
+华为手机
+音响扩声
+无线鼠标
+台式主机
+饮水机
+冰箱
+灯具
+电视机
+黑白数码印刷机
+饮水设备
+净化器
+白炽灯
+电水壶
+电插排
+多功能强光电筒
+电壁挂炉
+生活电器
+电料
+小家电
+电话
+台式整机
+拉杆广场音箱
+户外音响
+订书钉
+意见箱
+抽奖箱
+信件箱
+数码线材
+3C数码配件
+键盘
+扩音器
+读卡器
+主板
+组合音响
+餐厅设备
+食堂厨具设备
+烹饪设备

+ 78 - 0
get_hainan/src/initdata.go

@@ -0,0 +1,78 @@
+package main
+
+//初始化mgo
+func initMgo() {
+	if IsLocal {
+		SourceMgo = &MongodbSim{
+			MongodbAddr: "127.0.0.1:27017",
+			DbName:      "qfw",
+			Size:        10,
+			UserName:    "",
+			Password:    "",
+		}
+		SourceMgo.InitPool()
+
+		ExtMgo = &MongodbSim{
+			MongodbAddr: "127.0.0.1:27017",
+			DbName:      "qfw",
+			Size:        10,
+			UserName:    "",
+			Password:    "",
+		}
+		ExtMgo.InitPool()
+
+		QyxyMgo = &MongodbSim{
+			MongodbAddr: "127.0.0.1:27017",
+			DbName:      "qfw",
+			Size:        10,
+			UserName:    "",
+			Password:    "",
+		}
+		QyxyMgo.InitPool()
+
+		SpiMgo = &MongodbSim{
+			MongodbAddr: "127.0.0.1:27017",
+			DbName:      "qfw",
+			Size:        10,
+			UserName:    "",
+			Password:    "",
+		}
+		SpiMgo.InitPool()
+	} else {
+		SourceMgo = &MongodbSim{
+			MongodbAddr: "172.17.145.163:27083,172.17.4.187:27082",
+			DbName:      "qfw",
+			Size:        10,
+			UserName:    "zhengkun",
+			Password:    "zk@123123",
+		}
+		SourceMgo.InitPool()
+
+		ExtMgo = &MongodbSim{
+			MongodbAddr: "172.17.4.85:27080",
+			DbName:      "qfw",
+			Size:        10,
+			UserName:    "",
+			Password:    "",
+		}
+		ExtMgo.InitPool()
+
+		QyxyMgo = &MongodbSim{
+			MongodbAddr: "172.17.145.163:27083,172.17.4.187:27082",
+			DbName:      "mixdata",
+			Size:        10,
+			UserName:    "zhengkun",
+			Password:    "zk@123123",
+		}
+		QyxyMgo.InitPool()
+
+		SpiMgo = &MongodbSim{
+			MongodbAddr: "172.17.4.86:27080",
+			DbName:      "jyqyfw",
+			Size:        10,
+			UserName:    "",
+			Password:    "",
+		}
+		SpiMgo.InitPool()
+	}
+}

+ 196 - 0
get_hainan/src/main.go

@@ -0,0 +1,196 @@
+package main
+
+import (
+	"fmt"
+	log "github.com/donnie4w/go-logger/logger"
+	qu "qfw/util"
+	"strings"
+	"sync"
+	"time"
+)
+
+var (
+	SourceMgo, ExtMgo *MongodbSim
+	QyxyMgo, SpiMgo   *MongodbSim
+	IsLocal           bool
+	TimeLayout        = "2006-01-02 15:04:05"
+	numLock           sync.Mutex
+	Url               = "https://www.jianyu360.com/article/content/%s.html"
+)
+
+func init() {
+	//IsLocal = true
+	initMgo()
+	InitUdpMsg()
+}
+
+func main() {
+
+	lock := make(chan bool)
+	<-lock
+}
+
+//处理海南数据
+func dealWithHaiNaiData(gteid string, ltid string) {
+	log.Debug("开始海南数据~", gteid, "~", ltid)
+	sess := SourceMgo.GetMgoConn()
+	defer SourceMgo.DestoryMongoConn(sess)
+	q := map[string]interface{}{
+		"_id": map[string]interface{}{
+			"$gte": StringTOBsonId(gteid),
+			"$lt":  StringTOBsonId(ltid),
+		},
+	}
+	log.Debug("查询语句 ~ ", q)
+	it := sess.DB(SourceMgo.DbName).C("bidding").Find(&q).Sort("_id").Iter()
+	pool := make(chan bool, 2)
+	wg := &sync.WaitGroup{}
+	total, isok := 0, 0
+	for tmp := make(map[string]interface{}); it.Next(&tmp); total++ {
+		if total%10000 == 0 {
+			log.Debug("cur index ", total, "~", isok)
+		}
+		pool <- true
+		wg.Add(1)
+		go func(tmp map[string]interface{}) {
+			defer func() {
+				<-pool
+				wg.Done()
+			}()
+			publishtime := qu.Int64All(tmp["publishtime"])
+			if publishtime < 1546272000 {
+				return
+			}
+			if qu.IntAll(tmp["extracttype"]) != 1 {
+				return
+			}
+			subtype := qu.ObjToString(tmp["subtype"])
+			if subtype == "中标" || subtype == "成交" || subtype == "合同" {
+				b := getHaiNanInfo(tmp)
+				if b {
+					numLock.Lock()
+					isok++
+					numLock.Unlock()
+				}
+			}
+		}(tmp)
+		tmp = make(map[string]interface{})
+	}
+	wg.Wait()
+	log.Debug("is over ~ ", total, "~", isok)
+}
+
+func getHaiNanInfo(tmp map[string]interface{}) bool {
+	isExists := false
+	//省份
+	area := qu.ObjToString(tmp["area"])
+	if area == "海南" {
+		isExists = true
+	} else {
+		s_winner := qu.ObjToString(tmp["s_winner"])
+		if s_winner != "" {
+			arr := strings.Split(s_winner, ",")
+			for _, v := range arr {
+				if v != "" {
+					data := QyxyMgo.FindOne("qyxy_std", map[string]interface{}{
+						"company_name": v,
+					})
+					if data != nil {
+						if qu.ObjToString(data["company_area"]) == "海南" {
+							isExists = true
+							break
+						}
+					}
+				}
+			}
+		}
+	}
+
+	if isExists {
+		info := map[string]interface{}{}
+		tmpid := BsonTOStringId(tmp["_id"])
+		info["id"] = tmpid
+		if tmp["area"] != nil {
+			info["area"] = tmp["area"]
+		}
+		if tmp["city"] != nil {
+			info["city"] = tmp["city"]
+		}
+		if tmp["district"] != nil {
+			info["district"] = tmp["district"]
+		}
+		info["title"] = qu.ObjToString(tmp["title"])
+		info["subtype"] = qu.ObjToString(tmp["subtype"])
+		info["detail"] = qu.ObjToString(tmp["detail"])
+		info["publishtime"] = qu.Int64All(tmp["publishtime"])
+		info["href"] = qu.ObjToString(tmp["href"])
+		jyhref := fmt.Sprintf(Url, qu.CommonEncodeArticle("content", tmpid))
+		info["jybxhref"] = jyhref
+		info["projectname"] = qu.ObjToString(tmp["projectname"])
+
+		if tmp["projectcode"] != nil {
+			info["projectcode"] = tmp["projectcode"]
+		}
+		if tmp["projectscope"] != nil {
+			info["projectscope"] = tmp["projectscope"]
+		}
+		if tmp["budget"] != nil {
+			info["budget"] = tmp["budget"]
+		}
+		if tmp["bidamount"] != nil {
+			info["bidamount"] = tmp["bidamount"]
+		}
+		if tmp["bidopentime"] != nil {
+			info["bidopentime"] = tmp["bidopentime"]
+		}
+		if tmp["buyer"] != nil {
+			info["buyer"] = tmp["buyer"]
+		}
+		if tmp["buyerperson"] != nil {
+			info["buyerperson"] = tmp["buyerperson"]
+		}
+		if tmp["buyertel"] != nil {
+			info["buyertel"] = tmp["buyertel"]
+		}
+		if tmp["agency"] != nil {
+			info["agency"] = tmp["agency"]
+		}
+		if tmp["s_winner"] != nil {
+			info["s_winner"] = tmp["s_winner"]
+		}
+		if tmp["winnerperson"] != nil {
+			info["winnerperson"] = tmp["winnerperson"]
+		}
+		if tmp["winnertel"] != nil {
+			info["winnertel"] = tmp["winnertel"]
+		}
+
+		info["appid"] = "jyGQ5XQQECBwVeSkVPBAZT"
+		info["createtime"] = time.Now().Unix()
+
+		//项目信息id
+		pro_data := ExtMgo.FindOne("projectset_20220721", map[string]interface{}{
+			"ids": tmpid,
+		})
+		if pro_data != nil {
+			if pro_data["_id"] != nil {
+				info["projectId"] = BsonTOStringId(pro_data["_id"])
+			}
+		}
+
+		ext_data := ExtMgo.FindById("result_20220218", tmpid)
+		if ext_data == nil {
+			ext_data = ExtMgo.FindById("result_20220219", tmpid)
+		}
+		if ext_data != nil {
+			if ext_data["winnerorder"] != nil {
+				info["winnerorder"] = ext_data["winnerorder"]
+			}
+		}
+
+		//保存服务
+		SpiMgo.Save("usermail", info)
+	}
+
+	return isExists
+}

+ 3 - 0
get_hainan/src/mark

@@ -0,0 +1,3 @@
+历史结束段~
+635959800000000000000000
+635a9d0f911e1eb345c451b8

+ 354 - 0
get_hainan/src/mgo.go

@@ -0,0 +1,354 @@
+package main
+
+import (
+	"context"
+	"log"
+	qu "qfw/util"
+	"time"
+
+	"go.mongodb.org/mongo-driver/bson"
+	"go.mongodb.org/mongo-driver/bson/primitive"
+	"go.mongodb.org/mongo-driver/mongo"
+	"go.mongodb.org/mongo-driver/mongo/options"
+)
+
+type MgoSess struct {
+	Db     string
+	Coll   string
+	Query  interface{}
+	Sorts  []string
+	fields interface{}
+	limit  int64
+	skip   int64
+	M      *MongodbSim
+}
+
+type MgoIter struct {
+	Cursor *mongo.Cursor
+}
+
+func (mt *MgoIter) Next(result interface{}) bool {
+	if mt.Cursor != nil {
+		if mt.Cursor.Next(nil) {
+			err := mt.Cursor.Decode(result)
+			if err != nil {
+				log.Println("mgo cur err", err.Error())
+				mt.Cursor.Close(nil)
+				return false
+			}
+			return true
+		} else {
+			mt.Cursor.Close(nil)
+			return false
+		}
+	} else {
+		return false
+	}
+
+}
+
+func (ms *MgoSess) DB(name string) *MgoSess {
+	ms.Db = name
+	return ms
+}
+
+func (ms *MgoSess) C(name string) *MgoSess {
+	ms.Coll = name
+	return ms
+}
+
+func (ms *MgoSess) Find(q interface{}) *MgoSess {
+	ms.Query = q
+	return ms
+}
+
+func (ms *MgoSess) Select(fields interface{}) *MgoSess {
+	ms.fields = fields
+	return ms
+}
+
+func (ms *MgoSess) Limit(limit int64) *MgoSess {
+	ms.limit = limit
+	return ms
+}
+func (ms *MgoSess) Skip(skip int64) *MgoSess {
+	ms.skip = skip
+	return ms
+}
+
+func (ms *MgoSess) Sort(sorts ...string) *MgoSess {
+	ms.Sorts = sorts
+	return ms
+}
+
+func (ms *MgoSess) Iter() *MgoIter {
+	it := &MgoIter{}
+	find := options.Find()
+	if ms.skip > 0 {
+		find.SetSkip(ms.skip)
+	}
+	if ms.limit > 0 {
+		find.SetLimit(ms.limit)
+	}
+	find.SetBatchSize(100)
+	if len(ms.Sorts) > 0 {
+		sort := bson.M{}
+		for _, k := range ms.Sorts {
+			switch k[:1] {
+			case "-":
+				sort[k[1:]] = -1
+			case "+":
+				sort[k[1:]] = 1
+			default:
+				sort[k] = 1
+			}
+		}
+		find.SetSort(sort)
+	}
+	if ms.fields != nil {
+		find.SetProjection(ms.fields)
+	}
+	cur, err := ms.M.C.Database(ms.Db).Collection(ms.Coll).Find(ms.M.Ctx, ms.Query, find)
+	if err != nil {
+		log.Println("mgo find err", err.Error())
+	} else {
+		it.Cursor = cur
+	}
+	return it
+}
+
+type MongodbSim struct {
+	MongodbAddr string
+	Size        int
+	//	MinSize     int
+	DbName   string
+	C        *mongo.Client
+	Ctx      context.Context
+	ShortCtx context.Context
+	pool     chan bool
+	UserName string
+	Password string
+}
+
+func (m *MongodbSim) GetMgoConn() *MgoSess {
+	//m.Open()
+	ms := &MgoSess{}
+	ms.M = m
+	return ms
+}
+
+func (m *MongodbSim) DestoryMongoConn(ms *MgoSess) {
+	//m.Close()
+	ms.M = nil
+	ms = nil
+}
+
+func (m *MongodbSim) InitPool() {
+	opts := options.Client()
+	opts.SetConnectTimeout(3 * time.Second)
+	opts.ApplyURI("mongodb://" + m.MongodbAddr)
+	opts.SetMaxPoolSize(uint64(m.Size))
+	m.pool = make(chan bool, m.Size)
+
+	if m.UserName != "" && m.Password != "" {
+		cre := options.Credential{
+			Username: m.UserName,
+			Password: m.Password,
+		}
+		opts.SetAuth(cre)
+	}
+
+	opts.SetMaxConnIdleTime(2 * time.Hour)
+	m.Ctx, _ = context.WithTimeout(context.Background(), 99999*time.Hour)
+	m.ShortCtx, _ = context.WithTimeout(context.Background(), 1*time.Minute)
+	client, err := mongo.Connect(m.ShortCtx, opts)
+	if err != nil {
+		log.Println("mgo init error:", err.Error())
+	} else {
+		m.C = client
+		log.Println("init success")
+	}
+}
+
+func (m *MongodbSim) Open() {
+	m.pool <- true
+}
+func (m *MongodbSim) Close() {
+	<-m.pool
+}
+
+//批量插入
+func (m *MongodbSim) UpSertBulk(c string, doc ...[]map[string]interface{}) (map[int64]interface{}, bool) {
+	m.Open()
+	defer m.Close()
+	coll := m.C.Database(m.DbName).Collection(c)
+	var writes []mongo.WriteModel
+	for _, d := range doc {
+		write := mongo.NewUpdateOneModel()
+		write.SetFilter(d[0])
+		write.SetUpdate(d[1])
+		write.SetUpsert(true)
+		writes = append(writes, write)
+	}
+	r, e := coll.BulkWrite(m.Ctx, writes)
+	if e != nil {
+		log.Println("mgo upsert error:", e.Error())
+		return nil, false
+	}
+	//	else {
+	//		if r.UpsertedCount != int64(len(doc)) {
+	//			log.Println("mgo upsert uncomplete:uc/dc", r.UpsertedCount, len(doc))
+	//		}
+	//		return true
+	//	}
+	return r.UpsertedIDs, true
+}
+
+//批量插入
+func (m *MongodbSim) SaveBulk(c string, doc ...map[string]interface{}) bool {
+	m.Open()
+	defer m.Close()
+	coll := m.C.Database(m.DbName).Collection(c)
+	var writes []mongo.WriteModel
+	for _, d := range doc {
+		write := mongo.NewInsertOneModel()
+		write.SetDocument(d)
+		writes = append(writes, write)
+	}
+	_, e := coll.BulkWrite(m.Ctx, writes)
+	if e != nil {
+		log.Println("mgo savebulk error:", e.Error())
+		return false
+	}
+	return true
+}
+
+//保存
+func (m *MongodbSim) Save(c string, doc map[string]interface{}) interface{} {
+	m.Open()
+	defer m.Close()
+	coll := m.C.Database(m.DbName).Collection(c)
+	r, err := coll.InsertOne(m.Ctx, doc)
+	if err != nil {
+		return nil
+	}
+	return r.InsertedID
+}
+
+//更新by Id
+func (m *MongodbSim) UpdateById(c, id string, doc map[string]interface{}) bool {
+	m.Open()
+	defer m.Close()
+	coll := m.C.Database(m.DbName).Collection(c)
+	_, err := coll.UpdateOne(m.Ctx, map[string]interface{}{"_id": StringTOBsonId(id)}, doc)
+	if err != nil {
+		return false
+	}
+	return true
+}
+
+//删除by id
+func (m *MongodbSim) DeleteById(c, id string) int64 {
+	m.Open()
+	defer m.Close()
+	coll := m.C.Database(m.DbName).Collection(c)
+	r, err := coll.DeleteOne(m.Ctx, map[string]interface{}{"_id": StringTOBsonId(id)})
+	if err != nil {
+		return 0
+	}
+	return r.DeletedCount
+}
+
+//通过条件删除
+func (m *MongodbSim) Delete(c string, query map[string]interface{}) int64 {
+	m.Open()
+	defer m.Close()
+	coll := m.C.Database(m.DbName).Collection(c)
+	r, err := coll.DeleteMany(m.Ctx, query)
+	if err != nil {
+		return 0
+	}
+	return r.DeletedCount
+}
+
+//findbyid
+func (m *MongodbSim) FindById(c, id string) map[string]interface{} {
+	m.Open()
+	defer m.Close()
+	coll := m.C.Database(m.DbName).Collection(c)
+	r := coll.FindOne(m.Ctx, map[string]interface{}{"_id": StringTOBsonId(id)})
+	v := map[string]interface{}{}
+	r.Decode(&v)
+	return v
+}
+
+//findone
+func (m *MongodbSim) FindOne(c string, query map[string]interface{}) map[string]interface{} {
+	m.Open()
+	defer m.Close()
+	coll := m.C.Database(m.DbName).Collection(c)
+	r := coll.FindOne(m.Ctx, query)
+	v := map[string]interface{}{}
+	r.Decode(&v)
+	return v
+}
+
+//find
+func (m *MongodbSim) Find(c string, query map[string]interface{}, sort, fields interface{}) ([]map[string]interface{}, error) {
+	m.Open()
+	defer m.Close()
+	coll := m.C.Database(m.DbName).Collection(c)
+	op := options.Find()
+	r, err := coll.Find(m.Ctx, query, op.SetSort(sort), op.SetProjection(fields))
+	if err != nil {
+		log.Fatal(err)
+		return nil, err
+	}
+
+	var results []map[string]interface{}
+	if err = r.All(m.Ctx, &results); err != nil {
+		log.Fatal(err)
+		return nil, err
+	}
+	return results, nil
+}
+
+//创建_id
+func NewObjectId() primitive.ObjectID {
+	return primitive.NewObjectID()
+}
+
+func StringTOBsonId(id string) primitive.ObjectID {
+	objectId, _ := primitive.ObjectIDFromHex(id)
+	return objectId
+}
+
+func BsonTOStringId(id interface{}) string {
+	return id.(primitive.ObjectID).Hex()
+}
+
+//return
+func IsMarkInterfaceMap(t interface{}) []map[string]interface{} {
+	p_list := []map[string]interface{}{}
+	if yl_list_1, ok_1 := t.(primitive.A); ok_1 {
+		p_list = qu.ObjArrToMapArr(yl_list_1)
+	} else {
+		if yl_list_2, ok_2 := t.([]interface{}); ok_2 {
+			p_list = qu.ObjArrToMapArr(yl_list_2)
+		}
+	}
+	return p_list
+}
+
+//return
+func IsMarkInterfaceArr(t interface{}) []string {
+	sub_list := []string{}
+	if list_1, ok_1 := t.(primitive.A); ok_1 {
+		sub_list = qu.ObjArrToStringArr(list_1)
+	} else {
+		if list_2, ok_2 := t.([]interface{}); ok_2 {
+			sub_list = qu.ObjArrToStringArr(list_2)
+		}
+	}
+	return sub_list
+}

+ 52 - 0
get_hainan/src/udp.go

@@ -0,0 +1,52 @@
+package main
+
+import (
+	"encoding/json"
+	log "github.com/donnie4w/go-logger/logger"
+	mu "mfw/util"
+	"net"
+	qu "qfw/util"
+	"sync"
+)
+
+var (
+	udpclient mu.UdpClient
+	udpLock   sync.Mutex
+)
+
+func InitUdpMsg() {
+	port := ":1970"
+	udpclient = mu.UdpClient{Local: port, BufSize: 1024}
+	udpclient.Listen(processUdpMsg)
+	log.Debug("监听~", port)
+}
+
+func processUdpMsg(act byte, data []byte, ra *net.UDPAddr) {
+	switch act {
+	case mu.OP_TYPE_DATA:
+		var mapInfo map[string]interface{}
+		err := json.Unmarshal(data, &mapInfo)
+		if err != nil {
+			udpclient.WriteUdp([]byte("err:"+err.Error()), mu.OP_NOOP, ra)
+		} else if mapInfo != nil {
+			sid, eid := qu.ObjToString(mapInfo["gtid"]), qu.ObjToString(mapInfo["lteid"])
+			if sid == "" || eid == "" {
+				log.Debug("异常~", sid, "~", eid)
+			} else {
+				key := sid + "-" + eid + "-" + qu.ObjToString(mapInfo["stype"])
+				udpclient.WriteUdp([]byte(key), mu.OP_NOOP, ra)
+				udpLock.Lock()
+				dealWithHaiNaiData(sid, eid)
+				udpLock.Unlock()
+
+			}
+		}
+	case mu.OP_NOOP: //下个节点回应
+		ok := string(data)
+		if ok != "" {
+			log.Debug("接收~", ok)
+		}
+	}
+}
+
+

+ 149 - 194
listen_data/src/main.go

@@ -14,13 +14,14 @@ import (
 )
 
 var (
-	sysconfig    							map[string]interface{} //配置文件
-	save_mgo,site_mgo,python_mgo        	*MongodbSim            //mongodb操作对象
-	save_c_name,site_c_name,python_c_name,xlsx_name,site_unique_name	string
-	prepareData								[]map[string]interface{}
-	startRun,startSend						string
+	sysconfig                                                            map[string]interface{} //配置文件
+	save_mgo, site_mgo, python_mgo                                       *MongodbSim            //mongodb操作对象
+	save_c_name, site_c_name, python_c_name, xlsx_name, site_unique_name string
+	prepareData                                                          []map[string]interface{}
+	startRun, startSend                                                  string
 )
-func initMgo()  {
+
+func initMgo() {
 	saveconf := sysconfig["save_mgodb"].(map[string]interface{})
 	save_c_name = qu.ObjToString(saveconf["coll"])
 	save_mgo = &MongodbSim{
@@ -47,46 +48,45 @@ func initMgo()  {
 		Size:        qu.IntAllDef(pconf["pool"], 5),
 		//Password:	 "zk@123123",
 		//UserName:	 "zhengkun",
-		Password:	 "datazy@read",
-		UserName:	 "dataZY",
+		Password: "datazy@read",
+		UserName: "dataZY",
 	}
 	python_mgo.InitPool()
 	site_unique_name = qu.ObjToString(sysconfig["site_unique_name"])
 	xlsx_name = qu.ObjToString(sysconfig["xlsx_name"])
-	log.Println(site_unique_name,xlsx_name)
+	log.Println(site_unique_name, xlsx_name)
 
 }
 
 func init() {
-	qu.ReadConfig(&sysconfig)
 	return
+	qu.ReadConfig(&sysconfig)
 	//加载配置文件
-	flag.StringVar(&startRun, "sr", "", "是否启动") //增量
+	flag.StringVar(&startRun, "sr", "", "是否启动")  //增量
 	flag.StringVar(&startSend, "ss", "", "是否发送") //增量
 	flag.Parse()
 	initMgo()
 }
 
+func main() {
 
-func main()  {
-
-	//python_mgo = &MongodbSim{
+	//save_mgo = &MongodbSim{
 	//	MongodbAddr: "172.17.145.163:27083,172.17.4.187:27082",
 	//	DbName:      "qfw",
 	//	Size:        10,
-	//	UserName: "zhengkun",
-	//	Password: "zk@123123",
+	//	UserName:    "zhengkun",
+	//	Password:    "zk@123123",
 	//}
-	//python_mgo.InitPool()
+	//save_mgo.InitPool()
 
-	//save_mgo = &MongodbSim{
-	//	MongodbAddr: "172.17.4.85:27080",
-	//	DbName:      "qfw",
+	//python_mgo = &MongodbSim{
+	//	MongodbAddr: "172.17.145.163:27083,172.17.4.187:27082",
+	//	DbName:      "mixdata",
 	//	Size:        10,
-	//	UserName: "",
-	//	Password: "",
+	//	UserName:    "zhengkun",
+	//	Password:    "zk@123123",
 	//}
-	//save_mgo.InitPool()
+	//python_mgo.InitPool()
 
 	//save_mgo = &MongodbSim{
 	//	MongodbAddr: "172.17.4.87:27080",
@@ -97,54 +97,42 @@ func main()  {
 	//}
 	//save_mgo.InitPool()
 
-	//save_mgo = &MongodbSim{
-	//	MongodbAddr: "172.17.4.85:27080",
-	//	DbName:      "qfw",
-	//	Size:        10,
-	//	UserName: "",
-	//	Password: "",
-	//}
-	//save_mgo.InitPool()
-
-
-	//save_mgo = &MongodbSim{
-	//	MongodbAddr: "192.168.3.207:27092",
-	//	DbName:      "zhaolongyue",
-	//	Size:        10,
-	//	UserName: "",
-	//	Password: "",
-	//}
-	//save_mgo.InitPool()
+	save_mgo = &MongodbSim{
+		MongodbAddr: "172.17.4.85:27080",
+		DbName:      "qfw",
+		Size:        10,
+		UserName:    "",
+		Password:    "",
+	}
+	save_mgo.InitPool()
 
 	//save_mgo = &MongodbSim{
-	//	MongodbAddr: "172.17.145.163:27083,172.17.4.187:27082",
-	//	DbName:      "qfw",
+	//	MongodbAddr: "127.0.0.1:27017",
+	//	DbName:      "zhengkun",
 	//	Size:        10,
-	//	UserName: "zhengkun",
-	//	Password: "zk@123123",
+	//	UserName:    "",
+	//	Password:    "",
 	//}
 	//save_mgo.InitPool()
 
-	//save_mgo = &MongodbSim{
-	//	MongodbAddr: "192.168.3.166:27082",
-	//	DbName:      "zhaoxiuzhen",
+	//python_mgo = &MongodbSim{
+	//	MongodbAddr: "127.0.0.1:27017",
+	//	DbName:      "zhengkun",
 	//	Size:        10,
-	//	UserName: "",
-	//	Password: "",
+	//	UserName:    "",
+	//	Password:    "",
 	//}
-	//save_mgo.InitPool()
+	//python_mgo.InitPool()
 
-	save_mgo = &MongodbSim{
-		MongodbAddr: "127.0.0.1:27017",
-		DbName:      "zhengkun",
-		Size:        10,
-		UserName: "",
-		Password: "",
-	}
-	save_mgo.InitPool()
+	//decodeJyUrl("ABCY1wAdSkOJDY7AlFzcwckMDAvQCdjcWNhKT8nKi5FY35zczNUCWw")
+	//decodeJyUrl("ABCY1xJcz0%2FUTk7AlV4c1w%2FIycCQTB0R3diPx4sPz0eeFNzdl5UCnM")
 
-	decodeJyUrl("ABCY1wEdTweAj06RHdxZ3IkCCQCIDFjcWhwKw5QKi9FWlVzfDtUCbM")
+	//拉取一批数据~拟建类型~每种站点5条 200个站点即可
+	//exportNiJianUnSiteData()
+	//exportNiJianData()
+	//tongjiNiJianData()
 
+	//exportNullRegionData()
 
 	return
 
@@ -155,134 +143,132 @@ func main()  {
 		repairEqClassData()			//同分类-补充-0123
 	*/
 
-
-
-
 	c := cron.New()
 	c.AddFunc("0 50 8 ? * *", func() { dealWithSiteData() })
 	c.Start()
 
-	if startRun !="" {
+	if startRun != "" {
 		log.Println("立即执行一次...")
 		dealWithSiteData()
-	}else {
+	} else {
 		log.Println("正常监听...")
 	}
 
-	time.Sleep(99999*time.Hour)
+	time.Sleep(99999 * time.Hour)
 }
 
-func dealWithSiteData()  {
+func dealWithSiteData() {
 
 	cur_time := time.Now().Unix()
 	today := GetOneWeekDay(TimeStampToString(cur_time))
-	if today==7||today==6 {
+	if today == 7 || today == 6 {
 		log.Println("今个周末...休息休息")
 		return
 	}
 
-	prepareXlsxSiteData()//准备数据
+	prepareXlsxSiteData() //准备数据
 
-	if prepareData==nil || len(prepareData)==0{
+	if prepareData == nil || len(prepareData) == 0 {
 		log.Println("异常表site_unique_new...未加载数据...")
 		return
 	}
 
-	now:=time.Now()
-	durdays:=7 //周期7天 假设今天5月15日   周六 now.Day()
-	start:= time.Date(now.Year(), now.Month(), now.Day()-durdays, 0, 0, 0, 0, time.Local).Unix()
+	now := time.Now()
+	durdays := 7 //周期7天 假设今天5月15日   周六 now.Day()
+	start := time.Date(now.Year(), now.Month(), now.Day()-durdays, 0, 0, 0, 0, time.Local).Unix()
 	end := time.Date(now.Year(), now.Month(), now.Day(), 0, 0, 0, 0, time.Local).Unix()
 
-	log.Println(start,end)
+	log.Println(start, end)
 	q := map[string]interface{}{
 		"comeintime": map[string]interface{}{
-			"$gte":  start,
-			"$lt": end,
+			"$gte": start,
+			"$lt":  end,
 		},
 	}
 	//构建时间模型模型数据
-	sitedata ,pythondata:= make(map[string]map[string]int,0),make(map[string]map[string]map[string]interface{},0)
+	sitedata, pythondata := make(map[string]map[string]int, 0), make(map[string]map[string]map[string]interface{}, 0)
 	siteTimeArr := []string{}
-	for i:=0;i<durdays ; i++ {
-		t := int64(i*86400)+start
-		time_key :=TimeStampToString(t)
+	for i := 0; i < durdays; i++ {
+		t := int64(i*86400) + start
+		time_key := TimeStampToString(t)
 		time_day := GetOneWeekDay(time_key)
-		if time_day==7||time_day==6 {}else {
+		if time_day == 7 || time_day == 6 {
+		} else {
 			sitedata[time_key] = map[string]int{}
 			pythondata[time_key] = map[string]map[string]interface{}{}
-			siteTimeArr = append(siteTimeArr,time_key)
+			siteTimeArr = append(siteTimeArr, time_key)
 		}
 	}
 	sess_site := site_mgo.GetMgoConn()
 	defer site_mgo.DestoryMongoConn(sess_site)
-	log.Println("data_bak 查询条件:",q)
+	log.Println("data_bak 查询条件:", q)
 	it_site := sess_site.DB(site_mgo.DbName).C(site_c_name).Find(&q).Sort("comeintime").Select(map[string]interface{}{
-		"comeintime":        1,
-		"site":1,
+		"comeintime": 1,
+		"site":       1,
 	}).Iter()
-	total:= 0
+	total := 0
 	for tmp := make(map[string]interface{}); it_site.Next(&tmp); total++ {
-		site:=qu.ObjToString(tmp["site"])
-		comeintime:=qu.Int64All(tmp["comeintime"])
-		time_key :=TimeStampToString(comeintime)
+		site := qu.ObjToString(tmp["site"])
+		comeintime := qu.Int64All(tmp["comeintime"])
+		time_key := TimeStampToString(comeintime)
 		time_day := GetOneWeekDay(time_key)
-		if time_day==6 ||time_day==7 {}else {
+		if time_day == 6 || time_day == 7 {
+		} else {
 			timedata := sitedata[time_key]
-			if qu.Int64All(timedata[site])==0 {
-				timedata[site] =1
-			}else {
-				num :=timedata[site]
-				timedata[site] = num+1
+			if qu.Int64All(timedata[site]) == 0 {
+				timedata[site] = 1
+			} else {
+				num := timedata[site]
+				timedata[site] = num + 1
 			}
 		}
 		tmp = make(map[string]interface{})
 	}
 
-	log.Println("is site over :",total)
-
-
+	log.Println("is site over :", total)
 
 	sess_python := python_mgo.GetMgoConn()
 	defer python_mgo.DestoryMongoConn(sess_python)
-	log.Println("bidding 查询条件:",q)
+	log.Println("bidding 查询条件:", q)
 	it_python := sess_python.DB(python_mgo.DbName).C(python_c_name).Find(&q).Sort("comeintime").Select(map[string]interface{}{
-		"comeintime":        1,
-		"site":1,
-		"spidercode":1,
+		"comeintime": 1,
+		"site":       1,
+		"spidercode": 1,
 	}).Iter()
-	total= 0
+	total = 0
 	for tmp := make(map[string]interface{}); it_python.Next(&tmp); total++ {
 		//if total%100000 == 0 {
 		//	log.Println("current:", total)
 		//}
-		site:=qu.ObjToString(tmp["site"])
-		spidercode:=qu.ObjToString(tmp["spidercode"])
-		comeintime:=qu.Int64All(tmp["comeintime"])
+		site := qu.ObjToString(tmp["site"])
+		spidercode := qu.ObjToString(tmp["spidercode"])
+		comeintime := qu.Int64All(tmp["comeintime"])
 
-		time_key :=TimeStampToString(comeintime)
+		time_key := TimeStampToString(comeintime)
 		time_day := GetOneWeekDay(time_key)
-		if time_day==6 ||time_day==7 {}else {
+		if time_day == 6 || time_day == 7 {
+		} else {
 			timedata := pythondata[time_key]
-			if timedata[site]==nil {
+			if timedata[site] == nil {
 				timedata[site] = map[string]interface{}{
-					spidercode:1,
+					spidercode: 1,
 				}
-			}else {
-				dict :=timedata[site]
+			} else {
+				dict := timedata[site]
 				num := qu.IntAll(dict[spidercode])
-				timedata[site][spidercode] = num+1
+				timedata[site][spidercode] = num + 1
 			}
 		}
 
 		tmp = make(map[string]interface{})
 	}
 
-	log.Println("is python over :",total)
+	log.Println("is python over :", total)
 
 	os.Remove(xlsx_name)
-	f :=xlsx.NewFile()
+	f := xlsx.NewFile()
 
-	for _,tmp:=range prepareData {
+	for _, tmp := range prepareData {
 		type_name := qu.ObjToString(tmp["type"])
 		data, _ := tmp["data"].(primitive.A)
 		dataArr := qu.ObjArrToMapArr(data)
@@ -309,25 +295,24 @@ func dealWithSiteData()  {
 			row.AddCell().SetString(qu.ObjToString(dict["person"]))
 			total_num := 0
 			if type_name == "python" || type_name == "chrome插件" {
-				for _,timekey:=range siteTimeArr{
+				for _, timekey := range siteTimeArr {
 					site_key := qu.ObjToString(dict["site"])
 					spider_key := qu.ObjToString(dict["spidercode"])
 					num := qu.IntAll(pythondata[timekey][site_key][spider_key])
-					total_num = total_num+num
-					row.AddCell().SetString(fmt.Sprintf("%d",num))
+					total_num = total_num + num
+					row.AddCell().SetString(fmt.Sprintf("%d", num))
 				}
-				row.AddCell().SetString(fmt.Sprintf("%d",total_num))
-			}else {
-				for _,timekey:=range siteTimeArr{
+				row.AddCell().SetString(fmt.Sprintf("%d", total_num))
+			} else {
+				for _, timekey := range siteTimeArr {
 					key := qu.ObjToString(dict["site"])
 					num := qu.IntAll(sitedata[timekey][key])
-					total_num = total_num+num
-					row.AddCell().SetString(fmt.Sprintf("%d",num))
+					total_num = total_num + num
+					row.AddCell().SetString(fmt.Sprintf("%d", num))
 				}
-				row.AddCell().SetString(fmt.Sprintf("%d",total_num))
+				row.AddCell().SetString(fmt.Sprintf("%d", total_num))
 			}
 
-
 		}
 
 	}
@@ -337,70 +322,41 @@ func dealWithSiteData()  {
 	if err != nil {
 		log.Println("保存xlsx失败:", err)
 		return
-	}else {
+	} else {
 		log.Println("保存xlsx成功:", err)
 	}
 
 	//是否存日志- 待定
-	time.Sleep(5*time.Second)
+	time.Sleep(5 * time.Second)
 
 	//发送邮件
-	if startRun!="" && startSend==""  {
+	if startRun != "" && startSend == "" {
 		log.Println("调试过程...不发邮件")
-	}else {
-		sendErrMailSmtp("主要站点最近五个工作日相关统计","附件")
+	} else {
+		sendErrMailSmtp("主要站点最近五个工作日相关统计", "附件")
 	}
 	log.Println("结束......")
 }
 
 //准备模板站点数据
-func prepareXlsxSiteData()  {
+func prepareXlsxSiteData() {
 
-	prepareData = make([]map[string]interface{},0)
+	prepareData = make([]map[string]interface{}, 0)
 	sess := save_mgo.GetMgoConn()
 	defer save_mgo.DestoryMongoConn(sess)
-	q:=map[string]interface{}{}
+	q := map[string]interface{}{}
 	it := sess.DB(save_mgo.DbName).C(site_unique_name).Find(&q).Iter()
-	for tmp := make(map[string]interface{}); it.Next(&tmp);{
+	for tmp := make(map[string]interface{}); it.Next(&tmp); {
 		dict := tmp
-		delete(dict,"_id")
-		prepareData = append(prepareData,dict)
+		delete(dict, "_id")
+		prepareData = append(prepareData, dict)
 		tmp = make(map[string]interface{})
 	}
 	log.Println("准备完毕... ...")
 }
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
 //准备站点模型数据
-func prepareTableData()  {
+func prepareTableData() {
 
 	log.Println("准备数据...")
 
@@ -409,64 +365,63 @@ func prepareTableData()  {
 		log.Fatal(err)
 	}
 
-	sheetArr := []string{"Sheet1","Sheet2","Sheet3","Sheet4"}
-	sheetNumArr := []int{38,36,87,16}
-	dataArr := make([][]map[string]interface{},0)
-	for index,sheet:=range sheetArr{
+	sheetArr := []string{"Sheet1", "Sheet2", "Sheet3", "Sheet4"}
+	sheetNumArr := []int{38, 36, 87, 16}
+	dataArr := make([][]map[string]interface{}, 0)
+	for index, sheet := range sheetArr {
 		log.Println("*************")
 		log.Println("*************")
 		rows := f.GetRows(sheet)
-		arr:=make([]map[string]interface{},0)
-		max :=sheetNumArr[index]
+		arr := make([]map[string]interface{}, 0)
+		max := sheetNumArr[index]
 		for k, row := range rows {
-			if k>0 && k<max {
+			if k > 0 && k < max {
 				dict := map[string]interface{}{}
 				for k1, value := range row {
-					if index==3 {
-						if k1==0 {
+					if index == 3 {
+						if k1 == 0 {
 							dict["area"] = qu.ObjToString(value)
-						}else if k1==1 {
+						} else if k1 == 1 {
 							dict["site"] = qu.ObjToString(value)
-						}else if k1==2 {
+						} else if k1 == 2 {
 							dict["spidercode"] = qu.ObjToString(value)
-						}else if k1==3 {
+						} else if k1 == 3 {
 							dict["person"] = qu.ObjToString(value)
-						}else {
+						} else {
 							break
 						}
-					}else {
-						if k1==0 {
+					} else {
+						if k1 == 0 {
 							dict["area"] = qu.ObjToString(value)
-						}else if k1==1 {
+						} else if k1 == 1 {
 							dict["site"] = qu.ObjToString(value)
-						}else if k1==2 {
+						} else if k1 == 2 {
 							dict["person"] = qu.ObjToString(value)
-						}else {
+						} else {
 
 							break
 						}
 					}
 				}
-				arr = append(arr,dict)
+				arr = append(arr, dict)
 			}
-			if k>max {
+			if k > max {
 				break
 			}
 		}
 
-		dataArr = append(dataArr,arr)
+		dataArr = append(dataArr, arr)
 	}
 
-	typeArr :=[]string{"政府采购","公共资源","其他站点","python"}
-	for index,arr := range dataArr {
+	typeArr := []string{"政府采购", "公共资源", "其他站点", "python"}
+	for index, arr := range dataArr {
 		type_name := typeArr[index]
 		save_mgo.Save(save_c_name, map[string]interface{}{
-			"type":type_name,
-			"data":arr,
+			"type": type_name,
+			"data": arr,
 		})
 	}
 
 	log.Println("is save over")
 
-
-}
+}

File diff suppressed because it is too large
+ 805 - 124
listen_data/src/zkmethod.go


+ 124 - 153
process_medical/src/medical_bidding.go

@@ -17,49 +17,44 @@ func saveBiddingPurMysql() {
 	log.Debug("分析数据-保存两个mysql表...")
 	sess := save_mgo.GetMgoConn()
 	defer save_mgo.DestoryMongoConn(sess)
-	q,total,isok:=map[string]interface{}{},0,0
+	q, total, isok := map[string]interface{}{}, 0, 0
 	it := sess.DB(save_mgo.DbName).C(o_bidding_coll).Find(&q).Iter()
-	for tmp := make(map[string]interface{}); it.Next(&tmp);total++{
-		if total%1000==0 {
-			log.Debug("curent index ",total,isok)
+	for tmp := make(map[string]interface{}); it.Next(&tmp); total++ {
+		if total%1000 == 0 {
+			log.Debug("curent index ", total, isok)
 		}
 		tmpid := BsonTOStringId(tmp["_id"])
-		repeat:= qu.IntAll(tmp["repeat"])
-		subtype:= qu.ObjToString(tmp["subtype"])
-		if repeat!=1 {
-			if subtype=="单一"||subtype=="中标"||subtype=="成交"||subtype=="合同" {
+		repeat := qu.IntAll(tmp["repeat"])
+		subtype := qu.ObjToString(tmp["subtype"])
+		if repeat != 1 {
+			if subtype == "单一" || subtype == "中标" || subtype == "成交" || subtype == "合同" {
 				isok++
-				dealWithBidData(tmp,tmpid)
-				dealWithPurData(tmp,tmpid)
+				dealWithBidData(tmp, tmpid)
+				dealWithPurData(tmp, tmpid)
 			}
 		}
 		tmp = make(map[string]interface{})
 	}
-	log.Debug("is over ",total,isok)
+	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["info_id"] = tmp["info_id"]
 	data["projectname"] = tmp["projectname"]
 	publishtime := qu.Int64All(tmp["publishtime"])
-	new_publishtime := ""//转日期
-	if publishtime>0 {
+	new_publishtime := "" //转日期
+	if publishtime > 0 {
 		new_publishtime = time.Unix(publishtime, 0).Format(timeLayout)
 		data["publishtime"] = new_publishtime
 	}
 	data["buyer_name"] = qu.ObjToString(tmp["buyer"])
 	data["buyer_depart"] = ""
-	if tmp["budget"]!=nil && qu.Float64All(tmp["budget"]) < 1000000000.0 {
+	if tmp["budget"] != nil && qu.Float64All(tmp["budget"]) < 1000000000.0 {
 		data["budget"] = qu.Float64All(tmp["budget"])
 	}
-	if tmp["bidamount"]!=nil && qu.Float64All(tmp["bidamount"]) < 1000000000.0 {
+	if tmp["bidamount"] != nil && qu.Float64All(tmp["bidamount"]) < 1000000000.0 {
 		data["bidamount"] = qu.Float64All(tmp["bidamount"])
 	}
 	data["agency_name"] = qu.ObjToString(tmp["agency"])
@@ -69,33 +64,32 @@ func dealWithBidData(tmp map[string]interface{},tmpid string){
 	data["updatetime"] = updatetime
 
 	// info_type buyer_classcode area_code industry_code
-	info_type_key :=qu.ObjToString(tmp["toptype"])+"_"+qu.ObjToString(tmp["subtype"])
+	info_type_key := qu.ObjToString(tmp["toptype"]) + "_" + qu.ObjToString(tmp["subtype"])
 	data["info_type"] = bidclass_dict[info_type_key]
 
 	buyerclass := qu.ObjToString(tmp["buyerclass"])
-	data["buyer_classcode"] =buyerclass_dict[buyerclass]
-
-	area_key := qu.ObjToString(tmp["area"])+"_"+qu.ObjToString(tmp["city"])+"_"+qu.ObjToString(tmp["district"])
-	data["area_code"] =area_dict[area_key]
+	data["buyer_classcode"] = buyerclass_dict[buyerclass]
 
+	area_key := qu.ObjToString(tmp["area"]) + "_" + qu.ObjToString(tmp["city"]) + "_" + qu.ObjToString(tmp["district"])
+	data["area_code"] = area_dict[area_key]
 
 	subscopeclass := []string{}
 	if res, ok := tmp["subscopeclass"].(primitive.A); ok {
 		subscopeclass = qu.ObjArrToStringArr(res)
-	}else {
+	} else {
 		if res, ok := tmp["subscopeclass"].([]interface{}); ok {
 			subscopeclass = qu.ObjArrToStringArr(res)
 		}
 	}
 
-	industry_code,industry_code_other:="",""
-	for _,v := range subscopeclass{
-		if strings.Contains(v,"医疗卫生") {
+	industry_code, industry_code_other := "", ""
+	for _, v := range subscopeclass {
+		if strings.Contains(v, "医疗卫生") {
 			industry_code = industry_dict[v]
-		}else {
-			if industry_code_other!="" {
-				industry_code_other = industry_code_other+","+industry_dict[v]
-			}else {
+		} else {
+			if industry_code_other != "" {
+				industry_code_other = industry_code_other + "," + industry_dict[v]
+			} else {
 				industry_code_other = industry_dict[v]
 			}
 		}
@@ -103,14 +97,15 @@ func dealWithBidData(tmp map[string]interface{},tmpid string){
 	data["industry_code"] = industry_code
 	data["industry_code_other"] = industry_code_other
 
-	insertMysqlData("f_bidding",data,tmpid)
+	insertMysqlData("f_bidding", data, tmpid)
 }
+
 //构建-标的物信息-关联企业信息
-func dealWithPurData(tmp map[string]interface{},tmpid string){
+func dealWithPurData(tmp map[string]interface{}, tmpid string) {
 	p_list := []map[string]interface{}{}
 	if yl_purchasinglist, ok := tmp["yl_purchasinglist"].(primitive.A); ok {
 		p_list = qu.ObjArrToMapArr(yl_purchasinglist)
-	}else {
+	} else {
 		if yl_purchasinglist, ok := tmp["yl_purchasinglist"].([]interface{}); ok {
 			p_list = qu.ObjArrToMapArr(yl_purchasinglist)
 		}
@@ -118,7 +113,7 @@ func dealWithPurData(tmp map[string]interface{},tmpid string){
 
 	info_id := qu.ObjToString(tmp["info_id"])
 	s_winner := qu.ObjToString(tmp["s_winner"])
-	for _,v:=range p_list{
+	for _, v := range p_list {
 		data := map[string]interface{}{}
 		product_name := qu.ObjToString(v["product_name"])
 		brandname := qu.ObjToString(v["brandname"])
@@ -129,46 +124,45 @@ func dealWithPurData(tmp map[string]interface{},tmpid string){
 		data["product_specs"] = ""
 
 		product_model := qu.ObjToString(v["model"])
-		if utf8.RuneCountInString(product_model)>100 {
+		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"])
 		}
-		if v["number"]!=nil {
+		if v["number"] != nil {
 			data["product_num"] = qu.Float64All(v["number"])
 		}
-		if v["totalprice"]!=nil {
+		if v["totalprice"] != nil {
 			data["product_totalprice"] = qu.Float64All(v["totalprice"])
 		}
 
-		if v["unitname"]!=nil {
+		if v["unitname"] != nil {
 			data["product_unit"] = qu.ObjToString(v["unitname"])
 		}
 
 		//涉及-bid_company_name bid_company_id bid_company_ysname -关联f_company
-		if s_winner != ""  {
-			if strings.Contains(s_winner,",") {
+		if s_winner != "" {
+			if strings.Contains(s_winner, ",") {
 				data["bid_company_id"] = ""
 				data["bid_company_name"] = ""
 				data["bid_company_ysname"] = s_winner
-			}else {//查询f_company...
-				query:= map[string]interface{}{"company_name":s_winner}
-				find_data := MysqlTool.FindOne("f_company", query,"company_id","")
-				if find_data==nil {
+			} else { //查询f_company...
+				query := map[string]interface{}{"company_name": s_winner}
+				find_data := MysqlTool.FindOne("f_company", query, "company_id", "")
+				if find_data == nil {
 					data["bid_company_id"] = ""
 					data["bid_company_name"] = s_winner
 					data["bid_company_ysname"] = ""
-				}else {
+				} else {
 					data["bid_company_id"] = qu.ObjToString((*find_data)["company_id"])
 					data["bid_company_name"] = s_winner
 					data["bid_company_ysname"] = ""
 				}
 			}
-		}else {
+		} else {
 			data["bid_company_id"] = ""
 			data["bid_company_name"] = ""
 			data["bid_company_ysname"] = ""
@@ -176,24 +170,24 @@ func dealWithPurData(tmp map[string]interface{},tmpid string){
 
 		//涉及-make_company_id make_company_name make_company_ysname -关联f_product
 		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")
+		proinfo := MysqlTool.SelectBySql(query, product_name, "1", "3")
 		if len(*proinfo) == 1 { //查询到多条-同产品信息
-			info :=(*proinfo)[0]
+			info := (*proinfo)[0]
 			data["make_company_id"] = qu.ObjToString(info["company_id"])
 			data["make_company_name"] = qu.ObjToString(info["company_name"])
 			data["make_company_ysname"] = ""
-		}else if len(*proinfo) > 1 {//如果有多个企业-生产信息
-			isUse,c_name,c_id := matchedManufacturer(brandname,*proinfo)
+		} else if len(*proinfo) > 1 { //如果有多个企业-生产信息
+			isUse, c_name, c_id := matchedManufacturer(brandname, *proinfo)
 			if isUse {
 				data["make_company_id"] = c_id
 				data["make_company_name"] = c_name
 				data["make_company_ysname"] = ""
-			}else {
+			} else {
 				data["make_company_id"] = ""
 				data["make_company_name"] = ""
 				data["make_company_ysname"] = c_name
 			}
-		}else {
+		} else {
 			data["make_company_id"] = ""
 			data["make_company_name"] = ""
 			data["make_company_ysname"] = ""
@@ -204,90 +198,85 @@ func dealWithPurData(tmp map[string]interface{},tmpid string){
 		product_class_2 := qu.ObjToString(v["product_class_2"])
 		product_class_3 := qu.ObjToString(v["product_class_3"])
 
-		key_4 := "四级_"+product_name
-		if proclass_name_dict[key_4]!="" {
+		key_4 := "四级_" + product_name
+		if proclass_name_dict[key_4] != "" {
 			data["product_code"] = proclass_name_dict[key_4]
-		}else {
-			pro_key := fmt.Sprintf("%s_%s_%s",product_class_1,product_class_2,product_class_3)
+		} else {
+			pro_key := fmt.Sprintf("%s_%s_%s", product_class_1, product_class_2, product_class_3)
 			data["product_code"] = proclass_name_dict[pro_key]
 		}
-		insertMysqlData("f_bidproduct",data,tmpid)
+		insertMysqlData("f_bidproduct", data, tmpid)
 	}
 }
 
-
-
 //根据品牌字段匹配-有效生产企业-过多10条
-func matchedManufacturer(brandName string,infoArr []map[string]interface{}) (bool,string,string) {
-	c_name :=""
+func matchedManufacturer(brandName string, infoArr []map[string]interface{}) (bool, string, string) {
+	c_name := ""
 	namedict := map[string]string{}
-	for i:=0;i<len(infoArr);i++{
+	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 brandName != "" { //品牌匹配
 			if strings.
-				Contains(company_name,brandName) {
-				return true,company_name,company_id
+				Contains(company_name, brandName) {
+				return true, company_name, company_id
 			}
 		}
 		if len(namedict) < 10 {
-			if c_name=="" {
+			if c_name == "" {
 				c_name = company_name
 				namedict[company_name] = company_id
-			}else {
-				if namedict[company_name]=="" {
-					c_name += ","+company_name
+			} 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]
+	if len(namedict) == 1 {
+		return true, c_name, namedict[c_name]
 	}
-	return false,c_name,""
+	return false, c_name, ""
 }
 
-
-
-
 //准备工作-导出源数据很重要... 163
 func exportUsefulPurBidData() {
 	sess := qy_mgo.GetMgoConn()
 	defer qy_mgo.DestoryMongoConn(sess)
 	//构建标准产品数据
-	dataArr,_ := save_mgo.Find("zktest_mairui",nil,nil,nil)
-	for _,v := range dataArr {
+	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{}{
+	log.Debug("迈瑞产品...", len(proNameDict))
+	q, total := map[string]interface{}{
 		"publishtime": map[string]interface{}{
-		"$gte":1546272000,
+			"$gte": 1546272000,
 		},
-	},0
-	isok:=0
+	}, 0
+	isok := 0
 	it := sess.DB("qfw").C(s_bidding_coll).Find(&q).Sort("_id").Iter()
-	for tmp := make(map[string]interface{}); it.Next(&tmp);total++{
-		if total%10000==0 {
-			log.Debug("curent index ",total,tmp["_id"],"~",isok)
+	for tmp := make(map[string]interface{}); it.Next(&tmp); total++ {
+		if total%10000 == 0 {
+			log.Debug("curent index ", total, tmp["_id"], "~", isok)
 		}
 		p_list := []map[string]interface{}{}
 		new_data := map[string]interface{}{}
 		if yl_purchasinglist, ok := tmp["yl_purchasinglist"].(primitive.A); ok {
 			p_list = qu.ObjArrToMapArr(yl_purchasinglist)
-		}else {
+		} else {
 			if yl_purchasinglist, ok := tmp["yl_purchasinglist"].([]interface{}); ok {
 				p_list = qu.ObjArrToMapArr(yl_purchasinglist)
 			}
 		}
 		//临时-匹配是不是含有-有效迈瑞-产品
-		if len(p_list)>0 {
+		if len(p_list) > 0 {
 			new_p_list := matchUsefulMrBidProduct(p_list)
-			if len(new_p_list)>0 {
+			if len(new_p_list) > 0 {
 				isok++
 				s_winner := qu.ObjToString(tmp["s_winner"])
 				new_data["yl_purchasinglist"] = p_list
@@ -296,121 +285,103 @@ func exportUsefulPurBidData() {
 				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["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"]
+				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"]
+				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["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 {
+				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)
+				save_mgo.Save("zktest_mysql_bidding_repeat", tmp) //业务判重需要-
 			}
 		}
 		tmp = make(map[string]interface{})
 	}
-
-	log.Debug("is bidding over ",total,isok)
+	log.Debug("is bidding over ", total, isok)
 }
-func matchUsefulMrBidProduct(p_list []map[string]interface{})(new_p_list []map[string]interface{}){
-	for _,v := range p_list {
+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"])
 		if proNameDict[product_name] != "" {
-			new_p_list =append(new_p_list,v)
+			new_p_list = append(new_p_list, v)
 		}
 	}
 	return new_p_list
 }
+
 //根据目标数据,去掉重复 - 重新导出数据
-func exportNewPurBidData()  {
+func exportNewPurBidData() {
 	sess := save_mgo.GetMgoConn()
 	defer save_mgo.DestoryMongoConn(sess)
-	q,total:=map[string]interface{}{},0
-	isok:=0
+	q, total := map[string]interface{}{}, 0
+	isok := 0
 	it := sess.DB(save_mgo.DbName).C("zktest_mysql_bidding_repeat").Find(&q).Sort("_id").Select(map[string]interface{}{
-		"repeat":1,
+		"repeat": 1,
 	}).Iter()
-	for tmp := make(map[string]interface{}); it.Next(&tmp);total++{
-		if total%1000==0 {
-			log.Debug("curent index ",total,tmp["_id"],"~",isok)
+	for tmp := make(map[string]interface{}); it.Next(&tmp); total++ {
+		if total%1000 == 0 {
+			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{}{
+			save_mgo.UpdateById(o_bidding_coll, tmpid, map[string]interface{}{
 				"$set": map[string]interface{}{
-					"repeat":1,
+					"repeat": 1,
 				},
 			})
 		}
 		tmp = make(map[string]interface{})
 	}
-	log.Debug("is over ",total,isok)
+	log.Debug("is over ", total, isok)
 }
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
 //导出指定-迈瑞相关数据-已弃用
-func exportMaiRuiInfoId(){
+func exportMaiRuiInfoId() {
 	query := "SELECT product_name FROM f_product WHERE company_name LIKE CONCAT('%',?,'%')"
 	proinfo := MysqlTool.SelectBySql(query, "迈瑞")
 	log.Debug(len(*proinfo))
-	proNameArr :=[]string{}
+	proNameArr := []string{}
 	proNameDict := map[string]string{}
-	for _,v := range *proinfo{
+	for _, v := range *proinfo {
 		product_name := qu.ObjToString(v["product_name"])
-		if proNameDict[product_name]==""{
+		if proNameDict[product_name] == "" {
 			proNameDict[product_name] = product_name
-			proNameArr = append(proNameArr,product_name)
+			proNameArr = append(proNameArr, product_name)
 		}
 	}
 
 	//812个产品名称 - -
 	bid_infoDict := map[string]string{}
-	for k,v := range proNameArr {
-		if k%100==0 {
-			log.Debug("当前:",len(bid_infoDict))
+	for k, v := range proNameArr {
+		if k%100 == 0 {
+			log.Debug("当前:", len(bid_infoDict))
 		}
 		q := "SELECT info_id FROM f_bidproduct WHERE product_name=?"
 		infoArr := MysqlTool.SelectBySql(q, v)
-		for _,info := range *infoArr {
+		for _, info := range *infoArr {
 			info_id := qu.ObjToString(info["info_id"])
-			if bid_infoDict[info_id]==""{
+			if bid_infoDict[info_id] == "" {
 				bid_infoDict[info_id] = info_id
 				save_mgo.Save("a_mairui", map[string]interface{}{
-					"info_id":info_id,
+					"info_id": info_id,
 				})
 			}
 		}
 	}
 }
-
-

+ 22 - 24
process_medical/src/medical_vdata_area.go

@@ -9,20 +9,20 @@ import (
 func saveAreaMysql() {
 	sess := save_mgo.GetMgoConn()
 	defer save_mgo.DestoryMongoConn(sess)
-	q,total:=map[string]interface{}{},0
+	q, total := map[string]interface{}{}, 0
 	it := sess.DB(save_mgo.DbName).C(o_area_coll).Sort("_id").Find(&q).Iter()
-	for tmp := make(map[string]interface{}); it.Next(&tmp);total++{
-		if total%1000==0 {
-			log.Debug("curent index ",total)
+	for tmp := make(map[string]interface{}); it.Next(&tmp); total++ {
+		if total%1000 == 0 {
+			log.Debug("curent index ", total)
 		}
 		tmpid := BsonTOStringId(tmp["_id"])
-		delete(tmp,"_id")
+		delete(tmp, "_id")
 		code := qu.IntAll(tmp["code"])
 		tmp["code"] = code
-		insertMysqlData("v_area",tmp,tmpid)
+		insertMysqlData("v_area", tmp, tmpid)
 		tmp = make(map[string]interface{})
 	}
-	log.Debug("is over ",total)
+	log.Debug("is over ", total)
 }
 
 func exportAreaMysql() {
@@ -53,10 +53,10 @@ func exportAreaMysql() {
 					"level": "1",
 					"pcode": "",
 				}
-				save_mgo.Save(o_area_coll,data)
-				if codeMap[province_code] =="" {
+				save_mgo.Save(o_area_coll, data)
+				if codeMap[province_code] == "" {
 					codeMap[province_code] = province_code
-				}else {
+				} else {
 					log.Debug(data)
 				}
 			} else {
@@ -79,16 +79,14 @@ func exportAreaMysql() {
 					"pcode": province_code,
 				}
 				infoMap[city_code] = city_code
-				save_mgo.Save(o_area_coll,data)
+				save_mgo.Save(o_area_coll, data)
 
-				if codeMap[city_code] =="" {
+				if codeMap[city_code] == "" {
 					codeMap[city_code] = city_code
-				}else {
+				} else {
 					log.Debug(data)
 				}
 
-
-
 				if city == "重庆市" {
 					city_code = "500200"
 					data = map[string]interface{}{
@@ -98,11 +96,11 @@ func exportAreaMysql() {
 						"pcode": province_code,
 					}
 					infoMap[city_code] = city_code
-					save_mgo.Save(o_area_coll,data)
+					save_mgo.Save(o_area_coll, data)
 
-					if codeMap[city_code] =="" {
+					if codeMap[city_code] == "" {
 						codeMap[city_code] = city_code
-					}else {
+					} else {
 						log.Debug(data)
 					}
 				}
@@ -117,11 +115,11 @@ func exportAreaMysql() {
 					"pcode": province_code,
 				}
 				infoMap[district_code] = district_code
-				save_mgo.Save(o_area_coll,data)
+				save_mgo.Save(o_area_coll, data)
 
-				if codeMap[district_code] =="" {
+				if codeMap[district_code] == "" {
 					codeMap[district_code] = district_code
-				}else {
+				} else {
 					log.Debug(data)
 				}
 			} else {
@@ -132,10 +130,10 @@ func exportAreaMysql() {
 					"level": "3",
 					"pcode": city_code,
 				}
-				if codeMap[district_code] =="" {
-					save_mgo.Save(o_area_coll,data)
+				if codeMap[district_code] == "" {
+					save_mgo.Save(o_area_coll, data)
 					codeMap[district_code] = district_code
-				}else {
+				} else {
 					log.Debug(data)
 				}
 

Some files were not shown because too many files changed in this diff