jianghan7 1 vuosi sitten
vanhempi
commit
b8d99db168

+ 1 - 0
README.md

@@ -36,6 +36,7 @@
   + 采购单位、代理机构唯一标识  
 + projectset数据
   + 基础信息
+  + 企业通讯录与标讯关联标数据处理
 
 ## monitor 数据异常监控
 + bidding_file数据累计异常监控(累计数据量>10000条)  

+ 1 - 1
data_project/common.toml

@@ -1,7 +1,7 @@
 [serve]
 udp = ":1782"
 thread = 1
-loadStart = 0
+loadStart = 1
 validdays = 150
 statusdays = 15
 backupFlag = true

+ 2 - 2
data_project/init.go

@@ -280,7 +280,7 @@ type Info struct {
 	City                string                   `json:"city"`
 	District            string                   `json:"district"`
 	Infoformat          int                      `json:"infoformat"`
-	ReviewExperts       []string                 `json:"review_experts"`
+	ReviewExperts       string                   `json:"review_experts"`
 	Purchasing          string                   `json:"purchasing"`
 	WinnerOrder         []map[string]interface{} `json:"winnerorder"`
 	ProjectScale        string                   `json:"project_scale"`
@@ -369,7 +369,7 @@ type Project struct {
 	Buyertel           string                 `json:"buyertel"`                //采购联系人电话
 	Bidstatus          string                 `json:"bidstatus"`               //
 	Bidtype            string                 `json:"bidtype"`                 //
-	ReviewExperts      []string               `json:"review_experts"`          // 项目评审专家
+	ReviewExperts      string                 `json:"review_experts"`          // 项目评审专家
 	Purchasing         string                 `json:"purchasing"`              // 标的物
 	Package            map[string]interface{} `json:"package,omitempty"`       //分包的对比对象
 	Buyerclass         string                 `json:"buyerclass"`              //采购单位分类

+ 6 - 5
data_project/load_data.go

@@ -2,6 +2,7 @@ package main
 
 import (
 	"encoding/json"
+	"fmt"
 	"go.uber.org/zap"
 	util "jygit.jydev.jianyu360.cn/data_processing/common_utils"
 	"jygit.jydev.jianyu360.cn/data_processing/common_utils/log"
@@ -11,7 +12,7 @@ import (
 	"time"
 )
 
-//  初始加载数据,默认加载最近6个月的数据
+// 初始加载数据,默认加载最近6个月的数据
 func (p *ProjectTask) loadData(starttime int64) {
 	log.Info("load project start..", zap.Int64("starttime", starttime))
 	p.findLock.Lock()
@@ -87,9 +88,9 @@ func (p *ProjectTask) loadData(starttime int64) {
 	ch := make(chan bool, 3)
 	wg := &sync.WaitGroup{}
 	for tmp := make(map[string]interface{}); it.Next(tmp); count++ {
-		//if count%20000 == 0 {
-		//	log.Println(fmt.Sprintf("iter --- %d", count))
-		//}
+		if count%20000 == 0 {
+			log.Info(fmt.Sprintf("iter --- %d", count))
+		}
 		ch <- true
 		wg.Add(1)
 		go func(tmp map[string]interface{}) {
@@ -193,7 +194,7 @@ func saveFiled(p *ProjectTask, res map[string]interface{}, tmp *ProjectCache) {
 	//tmp.InfoFiled = tmpMap
 }
 
-//  加载spidercode数据,isflow字段
+// 加载spidercode数据,isflow字段
 func (p *ProjectTask) loadSpiderCode() {
 	log.Info("load spider code start..")
 	p.findLock.Lock()

+ 6 - 7
data_project/main.go

@@ -79,15 +79,15 @@ func DealSign() {
 	}
 }
 
-func mainT() {
+func main() {
 
 	P_QL.loadSpiderCode()
 	P_QL.loadSite()
 	if config.Conf.Serve.LoadStart > 0 {
 		P_QL.loadData(config.Conf.Serve.LoadStart)
 	}
-	//go checkMapJob()
-	//go P_QL.nsqMethod()
+	go checkMapJob()
+	go P_QL.nsqMethod()
 
 	for {
 		mapinfo, ok := <-UdpChan
@@ -167,9 +167,9 @@ func mainT() {
 	}
 }
 
-func main() {
-	sid = "626cccaa631ff1ac3d29289e"
-	eid = "640aa55d8aea8786d1cd0247"
+func mainT() {
+	sid = "64f5d956513e65bb3f0e4d4f"
+	eid = "64f5d956513e65bb3f0e4d50"
 	//flag.StringVar(&sid, "sid", "", "开始id")
 	//flag.StringVar(&eid, "eid", "", "结束id")
 	//flag.Parse()
@@ -190,7 +190,6 @@ func main() {
 	if config.Conf.Serve.LoadStart > 0 {
 		P_QL.loadData(config.Conf.Serve.LoadStart)
 	}
-	P_QL.loadSite()
 	P_QL.currentType = mapinfo["stype"].(string)
 	P_QL.pici = time.Now().Unix()
 	P_QL.taskQl(mapinfo)

+ 4 - 5
data_project/project.go

@@ -2,6 +2,8 @@ package main
 
 import (
 	"encoding/json"
+	"go.mongodb.org/mongo-driver/bson"
+	"go.mongodb.org/mongo-driver/bson/primitive"
 	util "jygit.jydev.jianyu360.cn/data_processing/common_utils"
 	"jygit.jydev.jianyu360.cn/data_processing/common_utils/log"
 	"jygit.jydev.jianyu360.cn/data_processing/common_utils/mongodb"
@@ -10,9 +12,6 @@ import (
 	"sort"
 	"strings"
 	"time"
-
-	"go.mongodb.org/mongo-driver/bson"
-	"go.mongodb.org/mongo-driver/bson/primitive"
 )
 
 /**
@@ -516,7 +515,7 @@ func (p *ProjectTask) NewProject(tmp map[string]interface{}, thisinfo *Info) (st
 		set["multipackage"] = 0
 	}
 	//项目评审专家
-	if len(thisinfo.ReviewExperts) > 0 {
+	if thisinfo.ReviewExperts != "" {
 		set["review_experts"] = thisinfo.ReviewExperts
 	}
 	//标的物
@@ -922,7 +921,7 @@ func (p *ProjectTask) UpdateProject(tmp map[string]interface{}, thisinfo *Info,
 	}
 
 	//项目评审专家
-	if len(thisinfo.ReviewExperts) > 0 {
+	if thisinfo.ReviewExperts != "" {
 		set["review_experts"] = thisinfo.ReviewExperts
 		project.ReviewExperts = thisinfo.ReviewExperts
 	}

+ 17 - 15
data_project/task.go

@@ -340,12 +340,13 @@ func (p *ProjectTask) taskUpdateInfo(udpInfo map[string]interface{}) {
 		log.Info("does not exist modifyinfo ---," + infoid)
 		return
 	}
-	client := Es.GetEsConn()
-	defer Es.DestoryEsConn(client)
-	esquery := `{"query": {"bool": {"must": [{"match": {"ids": "` + infoid + `"}}]}}}`
-	data := Es.Get(config.Conf.DB.Es.Index, esquery)
+	//client := Es.GetEsConn()
+	//defer Es.DestoryEsConn(client)
+	//esquery := `{"query": {"bool": {"must": [{"match": {"ids": "` + infoid + `"}}]}}}`
+	//data := Es.Get(config.Conf.DB.Es.Index, esquery)
+	data, _ := MgoP.FindOne(config.Conf.DB.MongoP.Coll, bson.M{"ids": infoid})
 	if len(*data) > 0 {
-		pid := util.ObjToString(((*data)[0])["_id"])
+		pid := util.ObjToString((*data)["_id"])
 		p.updateJudge(*infoMap, pid)
 	} else {
 		log.Info("not find project---," + infoid)
@@ -411,12 +412,13 @@ func (p *ProjectTask) delInfoPro(udpInfo map[string]interface{}) {
 	if infoid == "" {
 		return
 	}
-	client := Es.GetEsConn()
-	defer Es.DestoryEsConn(client)
-	esquery := `{"query": {"bool": {"must": [{"term": {"ids": "` + infoid + `"}}]}}}`
-	data := Es.Get(config.Conf.DB.Es.Index, esquery)
+	//client := Es.GetEsConn()
+	//defer Es.DestoryEsConn(client)
+	//esquery := `{"query": {"bool": {"must": [{"term": {"ids": "` + infoid + `"}}]}}}`
+	//data := Es.Get(config.Conf.DB.Es.Index, esquery)
+	data, _ := MgoP.FindOne(config.Conf.DB.MongoP.Coll, bson.M{"ids": infoid})
 	if len(*data) > 0 {
-		pid := util.ObjToString(((*data)[0])["_id"])
+		pid := util.ObjToString((*data)["_id"])
 		p.delJudge(infoid, pid)
 	} else {
 		log.Info("not find project---," + infoid)
@@ -494,7 +496,7 @@ func (p *ProjectTask) enter(db, coll string, q map[string]interface{}) {
 		c, _ := sess.DB(db).C(coll).Find(q).Count()
 		log.Info(fmt.Sprintf("共查询: %d条", c))
 	}
-	ms := sess.DB(db).C(coll).Find(q).Select(fields).Sort("publishtime")
+	ms := sess.DB(db).C(coll).Find(q).Select(fields)
 	query := ms.Iter()
 	var lastid interface{}
 L:
@@ -675,7 +677,7 @@ func ParseInfo(tmp map[string]interface{}) (info *Info) {
 		thisinfo.Buyer = ""
 	}
 	//清理评审专家名单
-	if len(thisinfo.ReviewExperts) > 0 {
+	if thisinfo.ReviewExperts != "" {
 		thisinfo.ReviewExperts = ClearRp(thisinfo.ReviewExperts)
 	}
 	//winners整理、清理
@@ -893,9 +895,9 @@ func deleteSlice(arr []string, v, stype string) []string {
 }
 
 // 校验评审专家
-func ClearRp(tmp []string) []string {
+func ClearRp(tmp string) string {
 	arrTmp := []string{}
-	for _, v := range tmp {
+	for _, v := range strings.Split(tmp, ",") {
 		// 汉字过滤(全汉字,2-4个字)
 		if ok, _ := regexp.MatchString("^[\\p{Han}]{2,4}$", v); !ok {
 			continue
@@ -906,7 +908,7 @@ func ClearRp(tmp []string) []string {
 		}
 		arrTmp = append(arrTmp, v)
 	}
-	return arrTmp
+	return strings.Join(arrTmp, ",")
 }
 
 func QyFilter(name, stype string) string {

+ 6 - 0
data_tidb/common.toml

@@ -22,6 +22,12 @@ dbname = "qfw_data"
 size = 5
 user = "root"
 password = "root"
+[db.es]
+addr = "127.0.0.1"
+index = "bidding"
+size = 10
+user = "es_all"
+password = "TopJkO2E_d1x"
 
 [mail]
 send = false

+ 9 - 0
data_tidb/config/conf.go

@@ -51,6 +51,7 @@ type log struct {
 }
 
 type db struct {
+	Es     es
 	MongoB mgo
 	MongoP mgo
 	Mysql  mysql
@@ -72,6 +73,14 @@ type mysql struct {
 	Password string
 }
 
+type es struct {
+	Addr     string
+	Index    string
+	Size     int
+	User     string
+	Password string
+}
+
 type duration struct {
 	time.Duration
 }

+ 2 - 1
data_tidb/go.mod

@@ -4,9 +4,10 @@ go 1.16
 
 require (
 	github.com/BurntSushi/toml v1.2.0
+	github.com/olivere/elastic/v7 v7.0.32
 	github.com/shopspring/decimal v1.3.1
 	github.com/spf13/cobra v1.5.0
 	go.mongodb.org/mongo-driver v1.10.3
 	go.uber.org/zap v1.23.0
-	jygit.jydev.jianyu360.cn/data_processing/common_utils v0.0.0-20230620072956-7ec055be2061
+	jygit.jydev.jianyu360.cn/data_processing/common_utils v0.0.0-20230627091444-ee2add33ba67
 )

+ 6 - 2
data_tidb/go.sum

@@ -22,6 +22,7 @@ github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymF
 github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
 github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
 github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
+github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw=
 github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g=
 github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
 github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
@@ -58,6 +59,7 @@ github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NH
 github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
 github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo=
 github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U=
+github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY=
 github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y=
 github.com/klauspost/compress v1.13.6 h1:P76CopJELS0TiO2mebmnzgWaajssP/EszplttgQxcgc=
 github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk=
@@ -66,10 +68,12 @@ github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORN
 github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
 github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
 github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
+github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0=
 github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
 github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe h1:iruDEfMl2E6fbMZ9s0scYfZQ84/6SPL6zC8ACM2oIL0=
 github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc=
 github.com/nsqio/go-nsq v1.1.0/go.mod h1:vKq36oyeVXgsS5Q8YEO7WghqidAVXQlcFxzQbQTuDEY=
+github.com/olivere/elastic/v7 v7.0.32 h1:R7CXvbu8Eq+WlsLgxmKVKPox0oOwAE/2T9Si5BnvK6E=
 github.com/olivere/elastic/v7 v7.0.32/go.mod h1:c7PVmLe3Fxq77PIfY/bZmxY/TAamBhCzZ8xDOE09a9k=
 github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc=
 github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
@@ -214,5 +218,5 @@ gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
 gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
 honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
 honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
-jygit.jydev.jianyu360.cn/data_processing/common_utils v0.0.0-20230620072956-7ec055be2061 h1:xfmoVsDEqVv1XzAVxgGEDi+W9ojHBJc6OmTbg3b1tP0=
-jygit.jydev.jianyu360.cn/data_processing/common_utils v0.0.0-20230620072956-7ec055be2061/go.mod h1:1Rp0ioZBhikjXHYYXmnzL6RNfvTDM/2XvRB+vuPLurI=
+jygit.jydev.jianyu360.cn/data_processing/common_utils v0.0.0-20230627091444-ee2add33ba67 h1:5rabE3IQRjI/NXfgJyquRTMdzSy7SfufFhmREixLZXg=
+jygit.jydev.jianyu360.cn/data_processing/common_utils v0.0.0-20230627091444-ee2add33ba67/go.mod h1:1Rp0ioZBhikjXHYYXmnzL6RNfvTDM/2XvRB+vuPLurI=

+ 12 - 0
data_tidb/init.go

@@ -5,6 +5,7 @@ import (
 	"fmt"
 	"go.uber.org/zap"
 	util "jygit.jydev.jianyu360.cn/data_processing/common_utils"
+	"jygit.jydev.jianyu360.cn/data_processing/common_utils/elastic"
 	"jygit.jydev.jianyu360.cn/data_processing/common_utils/log"
 	"jygit.jydev.jianyu360.cn/data_processing/common_utils/mongodb"
 	"jygit.jydev.jianyu360.cn/data_processing/common_utils/mysqldb"
@@ -14,6 +15,7 @@ import (
 var (
 	MongoB, MongoP *mongodb.MongodbSim
 	MysqlTool      *mysqldb.Mysql
+	Es             *elastic.Elastic
 
 	FCriteria map[string]interface{}
 
@@ -120,6 +122,16 @@ func InitMgo() {
 	MongoP.InitPool()
 }
 
+func InitEs() {
+	Es = &elastic.Elastic{
+		S_esurl:  config.Conf.DB.Es.Addr,
+		I_size:   config.Conf.DB.Es.Size,
+		Username: config.Conf.DB.Es.User,
+		Password: config.Conf.DB.Es.Password,
+	}
+	Es.InitElasticSize()
+}
+
 func InitMysql() {
 	dbcfg := config.Conf.DB.Mysql
 	MysqlTool = &mysqldb.Mysql{

+ 13 - 13
data_tidb/main.go

@@ -29,6 +29,7 @@ func init() {
 	InitField()
 
 	redis.InitRedis1("qyxy_id=127.0.0.1:8379", 1)
+	redis.InitRedis1("project_ids=127.0.0.1:8379", 0)
 	//redis.InitRedis1("qyxy_id=192.168.3.166:4379", 1)
 	log.Info("init success")
 }
@@ -48,7 +49,7 @@ func main() {
 
 	rootCmd := &cobra.Command{Use: "my cmd"}
 	rootCmd.AddCommand(bidding())
-	rootCmd.AddCommand(project())
+	rootCmd.AddCommand(relation())
 	rootCmd.AddCommand(projectAdd())
 	if err := rootCmd.Execute(); err != nil {
 		fmt.Println("rootCmd.Execute failed", err.Error())
@@ -317,25 +318,24 @@ func bidding() *cobra.Command {
 	return cmdClient
 }
 
-// @Description 项目数据
+// @Description 企业联系人关系表
 // @Author J 2022/9/20 17:52
-func project() *cobra.Command {
+func relation() *cobra.Command {
 	cmdClient := &cobra.Command{
-		Use:   "project",
-		Short: "Start processing project data",
+		Use:   "relation",
+		Short: "Start processing relation data",
 		Run: func(cmd *cobra.Command, args []string) {
-			//go SaveProFunc()
-			//go SaveProTagFunc()
-			//go SaveProbFunc()
+
+			InitEs()
+
 			go SaveRelationFunc()
-			taskP()
+			taskR()
 		},
 	}
-	//cmdClient.Flags().StringVarP(&cfg, "conf", "c", "", "server config [toml]")
 	return cmdClient
 }
 
-// @Description 项目数据
+// @Description 项目数据(目前仅关系表数据)
 // @Author J 2022/9/20 17:52
 func projectAdd() *cobra.Command {
 	var pici int64
@@ -788,7 +788,7 @@ func SaveRelationFunc() {
 					defer func() {
 						<-saveRelationSp
 					}()
-					MysqlTool.InsertBulk("dws_f_bpmc_relation", RelationField, arru...)
+					MysqlTool.InsertBulk("dws_f_bpmc_relation_new", RelationField, arru...)
 				}(arru)
 				arru = make([]map[string]interface{}, saveSize)
 				indexu = 0
@@ -800,7 +800,7 @@ func SaveRelationFunc() {
 					defer func() {
 						<-saveRelationSp
 					}()
-					MysqlTool.InsertBulk("dws_f_bpmc_relation", RelationField, arru...)
+					MysqlTool.InsertBulk("dws_f_bpmc_relation_new", RelationField, arru...)
 				}(arru[:indexu])
 				arru = make([]map[string]interface{}, saveSize)
 				indexu = 0

+ 133 - 100
data_tidb/project.go

@@ -1,8 +1,11 @@
 package main
 
 import (
+	"context"
 	"data_tidb/config"
+	"encoding/json"
 	"fmt"
+	es "github.com/olivere/elastic/v7"
 	"go.mongodb.org/mongo-driver/bson"
 	"go.uber.org/zap"
 	util "jygit.jydev.jianyu360.cn/data_processing/common_utils"
@@ -14,38 +17,63 @@ import (
 	"time"
 )
 
-func taskP() {
-	sess := MongoP.GetMgoConn()
-	defer MongoP.DestoryMongoConn(sess)
+func taskR() {
+	client := Es.GetEsConn()
+	defer Es.DestoryEsConn(client)
 
-	ch := make(chan bool, 20)
 	wg := &sync.WaitGroup{}
 
-	//q := map[string]interface{}{"_id": mongodb.StringTOBsonId("64e5a63855d5406905c574e6")}
-	query := sess.DB(config.Conf.DB.MongoP.Dbname).C("projectset_20230407").Find(nil).Sort("-_id").Skip(100000).Iter()
-	count := 0
-	for tmp := make(map[string]interface{}); query.Next(tmp); count++ {
-		if count%20000 == 0 {
-			log.Info(fmt.Sprintf("current --- %d", count))
+	query := es.NewBoolQuery()
+	//Must(es.NewTermsQuery("id", "64e7685255d5406905c94a64"))
+	//Must(es.NewRangeQuery("comeintime").Gte(1688140800).Lte(1690444635)).
+	//Must(es.NewExistsQuery("yuceendtime"))
+
+	util.Debug(Es.Count("bidding", query))
+	countDocs := 0
+	res, err := client.Scroll().Index("bidding").Query(query).Scroll("5m").Size(2000).Do(context.Background()) //查询一条获取游标
+	if err == nil {
+		taskInfoA(res, wg, &countDocs)
+		scrollId := res.ScrollId
+		for {
+			searchResult, err := client.Scroll("1m").Index("bidding").ScrollId(scrollId).Size(2000).Do(context.TODO()) //查询
+			if err != nil {
+				util.Debug("Es Search Data Error:", err.Error())
+				break
+			}
+			taskInfoA(searchResult, wg, &countDocs)
+			scrollId = searchResult.ScrollId
 		}
-		ch <- true
+		wg.Wait()
+		util.Debug("over---", countDocs)
+		_, _ = client.ClearScroll().ScrollId(scrollId).Do(context.Background()) //清理游标
+	} else {
+		util.Debug(err)
+	}
+}
+
+func taskInfoA(searchResult *es.SearchResult, wg *sync.WaitGroup, countDocs *int) {
+	ch := make(chan bool, 1)
+	for _, hit := range searchResult.Hits.Hits {
+		//开始处理数据
 		wg.Add(1)
-		go func(tmp map[string]interface{}) {
+		ch <- true
+		go func(tmpHit *es.SearchHit) {
 			defer func() {
 				<-ch
 				wg.Done()
 			}()
-			//taskPro(tmp)
-			//taskBusiness(tmp)
-			//taskProTag(tmp)
 
-			taskRelation(tmp)
+			tmp := make(map[string]interface{})
+			if json.Unmarshal(tmpHit.Source, &tmp) == nil {
+				taskRelation(tmp)
+			}
+		}(hit)
+		*countDocs += 1
 
-		}(tmp)
-		tmp = make(map[string]interface{})
+		if *countDocs%10000 == 0 {
+			util.Debug("Current:", *countDocs)
+		}
 	}
-	wg.Wait()
-	log.Info(fmt.Sprintf("over --- %d", count))
 }
 
 func taskPAdd(pici int64) {
@@ -56,7 +84,7 @@ func taskPAdd(pici int64) {
 	wg := &sync.WaitGroup{}
 
 	q := bson.M{"pici": bson.M{"$gt": pici}}
-	query := sess.DB(config.Conf.DB.MongoP.Dbname).C("projectset_20230407").Find(q).Iter()
+	query := sess.DB(config.Conf.DB.MongoB.Dbname).C("bidding_back").Find(q).Iter()
 	count := 0
 	for tmp := make(map[string]interface{}); query.Next(tmp); count++ {
 		if count%20000 == 0 {
@@ -277,89 +305,94 @@ func taskProTag(tmp map[string]interface{}) {
 // @Description 关系表
 // @Author J 2022/9/30 13:56
 func taskRelation(tmp map[string]interface{}) {
-	pid := mongodb.BsonIdToSId(tmp["_id"])
-	if tmp["ids"] == nil {
-		log.Info("taskRelation ids err", zap.Any("id", pid))
-		return
+	id := util.ObjToString(tmp["id"])
+	pid := ""
+	if str := redis.GetStr("project_ids", id); str == "" {
+		info, _ := MongoP.FindOneByField("projectset_20230407", bson.M{"ids": id}, bson.M{"ids": 1})
+		if len(*info) > 0 {
+			pid = mongodb.BsonIdToSId((*info)["_id"])
+			for _, s := range util.ObjArrToStringArr((*info)["ids"].([]interface{})) {
+				redis.PutCKV("project_ids", s, mongodb.BsonIdToSId((*info)["_id"]))
+			}
+		} else {
+			//log.Info("taskRelation pid err", zap.Any("id", id))
+			//return
+		}
+	} else {
+		pid = str
 	}
-	ids := util.ObjArrToStringArr(tmp["ids"].([]interface{}))
-	lid := ids[len(ids)-1]
+	if b := util.ObjToString(tmp["buyer"]); b != "" {
+		saveM := make(map[string]interface{})
 
-	//if b := util.ObjToString(tmp["buyer"]); b != "" {
-	//	saveM := make(map[string]interface{})
-	//
-	//	saveM["projectid"] = pid
-	//	saveM["infoid"] = lid
-	//	saveM["identity_type"] = 1
-	//	saveM["createtime"] = time.Now().Format(util.Date_Full_Layout)
-	//	if code := redis.GetStr("qyxy_id", b); code != "" {
-	//		saveM["name_id"] = code
-	//		if util.ObjToString(tmp["buyertel"]) != "" {
-	//			q := make(map[string]interface{})
-	//			q["name_id"] = code
-	//			q["identity_type"] = 1
-	//			q["contact_tel"] = util.ObjToString(tmp["buyertel"])
-	//			if util.ObjToString(tmp["buyerperson"]) != "" {
-	//				q["contact_name"] = util.ObjToString(tmp["buyerperson"])
-	//			}
-	//			cinfo := MysqlTool.FindOne("dws_f_ent_contact", q, "", "")
-	//			if cinfo != nil && len(*cinfo) > 0 {
-	//				saveM["contact_id"] = (*cinfo)["id"]
-	//				saveRelationPool <- saveM
-	//			}
-	//		}
-	//	}
-	//}
+		saveM["projectid"] = pid
+		saveM["infoid"] = id
+		saveM["identity_type"] = 1
+		saveM["createtime"] = time.Now().Format(util.Date_Full_Layout)
+		if code := redis.GetStr("qyxy_id", b); code != "" {
+			saveM["name_id"] = code
+			if util.ObjToString(tmp["buyertel"]) != "" {
+				q := make(map[string]interface{})
+				q["name_id"] = code
+				q["identity_type"] = 1
+				q["contact_tel"] = util.ObjToString(tmp["buyertel"])
+				if util.ObjToString(tmp["buyerperson"]) != "" {
+					q["contact_name"] = util.ObjToString(tmp["buyerperson"])
+				}
+				cinfo := MysqlTool.FindOne("dws_f_ent_contact", q, "", "")
+				if cinfo != nil && len(*cinfo) > 0 {
+					saveM["contact_id"] = (*cinfo)["id"]
+					saveRelationPool <- saveM
+				}
+			}
+		}
+	}
 
-	//if a := util.ObjToString(tmp["agency"]); a != "" {
-	//	saveM := make(map[string]interface{})
-	//	saveM["projectid"] = pid
-	//	saveM["infoid"] = lid
-	//	saveM["identity_type"] = 4
-	//	saveM["createtime"] = time.Now().Format(util.Date_Full_Layout)
-	//	if code := redis.GetStr("qyxy_id", a); code != "" {
-	//		saveM["name_id"] = code
-	//		if util.ObjToString(tmp["agencytel"]) != "" {
-	//			q := make(map[string]interface{})
-	//			q["name_id"] = code
-	//			q["identity_type"] = 4 // 100
-	//			q["contact_tel"] = util.ObjToString(tmp["agencytel"])
-	//			if util.ObjToString(tmp["agencyperson"]) != "" {
-	//				q["contact_name"] = util.ObjToString(tmp["agencyperson"])
-	//			}
-	//			cinfo := MysqlTool.FindOne("dws_f_ent_contact", q, "", "")
-	//			if cinfo != nil && len(*cinfo) > 0 {
-	//				saveM["contact_id"] = (*cinfo)["id"]
-	//				saveRelationPool <- saveM
-	//			}
-	//		}
-	//	}
-	//}
+	if a := util.ObjToString(tmp["agency"]); a != "" {
+		saveM := make(map[string]interface{})
+		saveM["projectid"] = pid
+		saveM["infoid"] = id
+		saveM["identity_type"] = 4
+		saveM["createtime"] = time.Now().Format(util.Date_Full_Layout)
+		if code := redis.GetStr("qyxy_id", a); code != "" {
+			saveM["name_id"] = code
+			if util.ObjToString(tmp["agencytel"]) != "" {
+				q := make(map[string]interface{})
+				q["name_id"] = code
+				q["identity_type"] = 4 // 100
+				q["contact_tel"] = util.ObjToString(tmp["agencytel"])
+				if util.ObjToString(tmp["agencyperson"]) != "" {
+					q["contact_name"] = util.ObjToString(tmp["agencyperson"])
+				}
+				cinfo := MysqlTool.FindOne("dws_f_ent_contact", q, "", "")
+				if cinfo != nil && len(*cinfo) > 0 {
+					saveM["contact_id"] = (*cinfo)["id"]
+					saveRelationPool <- saveM
+				}
+			}
+		}
+	}
 
-	for _, item := range tmp["list"].([]interface{}) {
-		item1 := item.(map[string]interface{})
-		sw := util.ObjToString(item1["s_winner"])
-		if !strings.Contains(sw, ",") {
-			if code := redis.GetStr("qyxy_id", sw); code != "" {
-				saveM := make(map[string]interface{})
-				saveM["projectid"] = pid
-				saveM["infoid"] = lid
-				saveM["identity_type"] = 2
-				saveM["createtime"] = time.Now().Format(util.Date_Full_Layout)
-				saveM["name_id"] = code
-				if util.ObjToString(item1["winnertel"]) != "" {
-					q := make(map[string]interface{})
-					q["name_id"] = code
-					q["identity_type"] = 2 // 010
-					q["contact_tel"] = util.ObjToString(item1["winnertel"])
-					if util.ObjToString(item1["winnerperson"]) != "" {
-						q["contact_name"] = util.ObjToString(item1["winnerperson"])
-					}
-					cinfo := MysqlTool.FindOne("dws_f_ent_contact", q, "", "")
-					if cinfo != nil && len(*cinfo) > 0 {
-						saveM["contact_id"] = (*cinfo)["id"]
-						saveRelationPool <- saveM
-					}
+	sw := util.ObjToString(tmp["s_winner"])
+	if !strings.Contains(sw, ",") {
+		if code := redis.GetStr("qyxy_id", sw); code != "" {
+			saveM := make(map[string]interface{})
+			saveM["projectid"] = pid
+			saveM["infoid"] = id
+			saveM["identity_type"] = 2
+			saveM["createtime"] = time.Now().Format(util.Date_Full_Layout)
+			saveM["name_id"] = code
+			if util.ObjToString(tmp["winnertel"]) != "" {
+				q := make(map[string]interface{})
+				q["name_id"] = code
+				q["identity_type"] = 2 // 010
+				q["contact_tel"] = util.ObjToString(tmp["winnertel"])
+				if util.ObjToString(tmp["winnerperson"]) != "" {
+					q["contact_name"] = util.ObjToString(tmp["winnerperson"])
+				}
+				cinfo := MysqlTool.FindOne("dws_f_ent_contact", q, "", "")
+				if cinfo != nil && len(*cinfo) > 0 {
+					saveM["contact_id"] = (*cinfo)["id"]
+					saveRelationPool <- saveM
 				}
 			}
 		}

+ 1 - 1
field_py/go.mod

@@ -4,7 +4,7 @@ go 1.16
 
 require (
 	github.com/BurntSushi/toml v1.2.0
-	go.mongodb.org/mongo-driver v1.11.7 // indirect
+	go.mongodb.org/mongo-driver v1.11.7
 	go.uber.org/zap v1.22.0
 	google.golang.org/grpc v1.56.0
 	google.golang.org/protobuf v1.30.0

+ 5 - 5
field_py/task.go

@@ -32,7 +32,6 @@ func getIntention(mapinfo map[string]interface{}) {
 	defer util.Catch()
 	gtid, _ := mapinfo["gtid"].(string)
 	lteid, _ := mapinfo["lteid"].(string)
-
 	sess := MgoB.GetMgoConn()
 	defer MgoB.DestoryMongoConn(sess)
 	ch := make(chan bool, config.Conf.Serve.Thread)
@@ -76,6 +75,7 @@ func getIntention(mapinfo map[string]interface{}) {
 					update["review_experts"] = strings.Join(util.ObjArrToStringArr(r[id].([]interface{})), ",")
 				}
 			}
+
 			if result1 != nil && len(result1) > 0 {
 				clock.Lock()
 				if result1["purchasinglist"] != nil && len(result1["purchasinglist"].([]interface{})) > 0 {
@@ -260,11 +260,11 @@ func rpcGetFieldP(reqStr, id string) (map[string]interface{}, error) {
 	cancel()
 	if err != nil {
 		//_, _ = ipClient.Release(context.Background(), &service.ApplyRepData{Ip: ip, Port: int32(port)})
-		return nil, err
+		return nil, errors.Join(err, errors.New(fmt.Sprintf("%s:%d", ip, port)))
 	}
 	result := map[string]interface{}{}
 	if json.Unmarshal([]byte(resp.Goods), &result) != nil {
-		//_, _ = ipClient.Release(context.Background(), &service.ApplyRepData{Ip: ip, Port: int32(port)})
+		_, _ = ipClient.Release(context.Background(), &service.ApplyRepData{Ip: ip, Port: int32(port)})
 		return nil, errors.New("Json Unmarshal Error")
 	}
 	// 服务中心释放服务
@@ -417,7 +417,7 @@ func SaveErrorInfo() {
 					defer func() {
 						<-SP
 					}()
-					MgoB.SaveBulk("bidding_warn_1", savearr...)
+					MgoB.SaveBulk("bidding_py_err", savearr...)
 				}(savearr)
 				savearr = make([]map[string]interface{}, 200)
 				indexh = 0
@@ -429,7 +429,7 @@ func SaveErrorInfo() {
 					defer func() {
 						<-SP
 					}()
-					MgoB.SaveBulk("bidding_warn_1", savearr...)
+					MgoB.SaveBulk("bidding_py_err", savearr...)
 				}(savearr[:indexh])
 				savearr = make([]map[string]interface{}, 200)
 				indexh = 0

+ 2 - 1
field_sync/common.toml

@@ -9,7 +9,8 @@ fields = ["buyerzipcode", "winnertel", "winnerperson", "contractcode", "winnerad
     "funds", "review_experts", "bidmethod", "bidendtime", "bidopenaddress", "docamount", "bidway", "agencyrate", "agencyfee", "getdocmethod", "purchasing_tag",
     "package", "history_updatetime", "total_investment", "owner", "projecttype", "project_person", "project_phone", "approvedept", "construction_area",
     "floor_area", "bidstarttime", "docendtime", "docstarttime", "signendtime", "signstarttime", "issue_quota", "bidopen_shape", "quote_mode", "is_acquire_tender",
-    "is_payment_deposit", "is_joint_bidding", "est_purchase_time", "est_purchase_amount", "s_project_startdate", "s_project_completedate"
+    "is_payment_deposit", "is_joint_bidding", "est_purchase_time", "est_purchase_amount", "s_project_startdate", "s_project_completedate", "enterprise_qualification",
+    "personnel_qualification", "performance_qualification", "enterprise_credit", "is_exist_pakage"
 ]
 
 [udp]

BIN
field_sync/field_sync_1787_1


+ 2 - 2
field_sync/main.go

@@ -45,7 +45,7 @@ func init() {
 	InitFileInfo()
 	InitLog()
 	InitMgo()
-	inits()
+	//inits()
 	redis.InitRedis1(config.Conf.DB.Redis.Addr, config.Conf.DB.Redis.DbIndex)
 
 	log.Info("init success")
@@ -53,7 +53,7 @@ func init() {
 
 func main() {
 	go checkMapJob()
-	go nsqMethod()
+	//go nsqMethod()
 
 	go UpdateBidding()
 	go UpdateExtract()

+ 5 - 13
field_sync/task.go

@@ -30,8 +30,7 @@ func biddingTask(data []byte, mapInfo map[string]interface{}) {
 
 	stype := util.ObjToString(mapInfo["stype"])
 	if stype == "bidding" {
-		uq := bson.M{"gtid": bson.M{"$gte": util.ObjToString(mapInfo["gtid"])},
-			"lteid": bson.M{"$lte": util.ObjToString(mapInfo["lteid"])}}
+		uq := bson.M{"gtid": util.ObjToString(mapInfo["gtid"]), "lteid": util.ObjToString(mapInfo["lteid"])}
 		MgoB.Update("bidding_processing_ids", uq, bson.M{"$set": bson.M{"dataprocess": 7, "updatetime": time.Now().Unix()}}, false, true)
 	}
 	//领域标签处理的数据 id段
@@ -282,9 +281,6 @@ func doIndex(infos []map[string]interface{}, eMap map[string]map[string]interfac
 			for _, k := range config.Conf.Serve.FieldS {
 				v1 := compare[k] //extract
 				v2 := tmp[k]     //bidding
-				if k == "project_startdate" || k == "project_completedate" {
-					util.Debug(v1, v2)
-				}
 				if v2 == nil && v1 != nil {
 					update[k] = v1
 				} else if v2 != nil && v1 != nil {
@@ -297,13 +293,11 @@ func doIndex(infos []map[string]interface{}, eMap map[string]map[string]interfac
 					} else if k == "city" || k == "district" {
 						update[k] = ""
 					} else {
-						if k == "project_startdate" || k == "project_completedate" {
-							util.Debug(v1, v2)
-						}
 						del[k] = 1
 					}
 				}
 			}
+			// 附件重采,数据同步时不更新判重标识
 			if util.IntAll(compare["repeat"]) == 1 {
 				update["extracttype"] = -1
 				update["dataprocess"] = 7
@@ -334,9 +328,9 @@ func doIndex(infos []map[string]interface{}, eMap map[string]map[string]interfac
 		//------------------对比结束
 
 		//处理key descript
-		if bkey == "" {
-			DealInfo(&tmp, &update)
-		}
+		//if bkey == "" {
+		//	DealInfo(&tmp, &update)
+		//}
 		// entidlist
 		extractMap := make(map[string]interface{})
 		if update["s_winner"] != "" {
@@ -379,8 +373,6 @@ func doIndex(infos []map[string]interface{}, eMap map[string]map[string]interfac
 			}
 		}
 		if len(update) > 0 {
-			util.Debug(update)
-			util.Debug(del)
 			if len(del) > 0 {
 				bidUpdate = append(bidUpdate, []map[string]interface{}{{
 					"_id": tmp["_id"],

+ 1 - 1
monitor/common.toml

@@ -1,6 +1,6 @@
 [serve]
 fileWarn = 10000
-pyWarn = 50000
+pyWarn = 1000
 
 [db]
 [db.mongoB]

+ 1 - 1
monitor/go.mod

@@ -8,5 +8,5 @@ require (
 	github.com/spf13/cobra v1.6.1
 	go.mongodb.org/mongo-driver v1.11.0
 	go.uber.org/zap v1.23.0
-	jygit.jydev.jianyu360.cn/data_processing/common_utils v0.0.0-20230627091444-ee2add33ba67 // indirect
+	jygit.jydev.jianyu360.cn/data_processing/common_utils v0.0.0-20230627091444-ee2add33ba67
 )

+ 1 - 27
monitor/go.sum

@@ -3,12 +3,8 @@ github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03
 github.com/BurntSushi/toml v1.2.0/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ=
 github.com/BurntSushi/toml v1.2.1 h1:9F2/+DoOYIOksmaJFPw1tGFy1eDnIJXg+UHjuD8lTak=
 github.com/BurntSushi/toml v1.2.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ=
-github.com/PuerkitoBio/goquery v1.8.0 h1:PJTF7AmFCFKk1N6V6jmKfrNH9tV5pNE6lZMkG0gta/U=
 github.com/PuerkitoBio/goquery v1.8.0/go.mod h1:ypIiRMtY7COPGk+I/YbZLbxsxn9g5ejnI2HSMtkjZvI=
-github.com/andybalholm/cascadia v1.3.1 h1:nhxRkql1kdYCc8Snf7D5/D3spOX+dBgjA6u8x004T2c=
 github.com/andybalholm/cascadia v1.3.1/go.mod h1:R4bJ1UQfqADjvDa4P6HZHLh/3OxWWEqc0Sk8XGwHqvA=
-github.com/antlabs/strsim v0.0.3 h1:J9AHxnybJZHKBoxeup1VZNWt3ST8QD+ieDJsm/nEpRo=
-github.com/antlabs/strsim v0.0.3/go.mod h1:bIcymn+2jtt01korFun0bs8PsYZeQa82aHoYMi7cm30=
 github.com/aws/aws-sdk-go v1.43.21/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo=
 github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8=
 github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA=
@@ -19,20 +15,14 @@ github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46t
 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
 github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/dchest/captcha v1.0.0 h1:vw+bm/qMFvTgcjQlYVTuQBJkarm5R0YSsDKhm1HZI2o=
 github.com/dchest/captcha v1.0.0/go.mod h1:7zoElIawLp7GUMLcj54K9kbw+jEyvz2K0FDdRRYhvWo=
-github.com/donnie4w/go-logger v0.0.0-20170827050443-4740c51383f4 h1:T9PR91sjTtrA1HmZB4G+M7OLCelch0f6rIEY7Mm1T4U=
-github.com/donnie4w/go-logger v0.0.0-20170827050443-4740c51383f4/go.mod h1:L7S4x0R7vv3xoOhGuyAJyCO2MYzWOpccM4Isn8jIUgY=
 github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
 github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
 github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
 github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
 github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g=
-github.com/go-ego/gse v0.70.2 h1:y2UMOHJMtI+0b2GjxTtQfKON5DMmlyX1hOQHTo8UVVs=
-github.com/go-ego/gse v0.70.2/go.mod h1:kesekpZfcFQ/kwd9b27VZHUOH5dQUjaaQUZ4OGt4Hj4=
 github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
 github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
-github.com/go-sql-driver/mysql v1.6.0 h1:BCTh4TKNUYmOmMUcQ3IipzF5prigylS7XXjEkfCHuOE=
 github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
 github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
 github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
@@ -49,16 +39,15 @@ github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QD
 github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
 github.com/golang/snappy v0.0.1 h1:Qgr9rKW7uDUkrbSmQeiDsGa8SjGyCOGtuasMWwvp2P4=
 github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
-github.com/gomodule/redigo v1.8.9 h1:Sl3u+2BI/kk+VEatbj0scLdrFhjPmbxOc1myhDP41ws=
 github.com/gomodule/redigo v1.8.9/go.mod h1:7ArFNvsTjH8GMMzB4uy1snslv2BwmginuMs06a1uzZE=
 github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
 github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
 github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
 github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
 github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.2 h1:X2ev0eStA3AbceY54o37/0PQ/UWqKEiiO2dKL5OPaFM=
 github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
 github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.7 h1:81/ik6ipDQS2aGcBfIN5dHDB36BwrStyeAQquSYCV4o=
 github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE=
 github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
 github.com/inconshreveable/mousetrap v1.0.1 h1:U3uMjPSQEBMNp1lFxmllqCPM6P5u/Xq7Pgzkat/bFNc=
@@ -76,7 +65,6 @@ github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
 github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
 github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe h1:iruDEfMl2E6fbMZ9s0scYfZQ84/6SPL6zC8ACM2oIL0=
 github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc=
-github.com/nsqio/go-nsq v1.1.0 h1:PQg+xxiUjA7V+TLdXw7nVrJ5Jbl3sN86EhGCQj4+FYE=
 github.com/nsqio/go-nsq v1.1.0/go.mod h1:vKq36oyeVXgsS5Q8YEO7WghqidAVXQlcFxzQbQTuDEY=
 github.com/olivere/elastic/v7 v7.0.32/go.mod h1:c7PVmLe3Fxq77PIfY/bZmxY/TAamBhCzZ8xDOE09a9k=
 github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc=
@@ -106,9 +94,6 @@ github.com/stretchr/testify v1.8.0 h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PK
 github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
 github.com/tidwall/pretty v1.0.0 h1:HsD+QiTn7sK6flMKIvNmpqz1qrpP3Ps6jOKIKMooyg4=
 github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk=
-github.com/vcaesar/cedar v0.20.1 h1:cDOmYWdprO7ZW8cngJrDi8Zivnscj9dA/y8Y+2SB1P0=
-github.com/vcaesar/cedar v0.20.1/go.mod h1:iMDweyuW76RvSrCkQeZeQk4iCbshiPzcCvcGCtpM7iI=
-github.com/vcaesar/tt v0.20.0/go.mod h1:GHPxQYhn+7OgKakRusH7KJ0M5MhywoeLb8Fcffs/Gtg=
 github.com/xdg-go/pbkdf2 v1.0.0 h1:Su7DPu48wXMwC3bs7MCNG+z4FhcyEuz5dlvchbq0B0c=
 github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI=
 github.com/xdg-go/scram v1.1.1 h1:VOMT+81stJgXW3CpHyqHN3AXDYIMsx56mEFrB37Mb/E=
@@ -153,9 +138,7 @@ golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLL
 golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
 golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
 golang.org/x/net v0.0.0-20210916014120-12bc252f5db8/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
-golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2 h1:CIJ76btIcR3eFI5EgSo6k1qKw9KJexJuRLI9G7Hp5wE=
 golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
-golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd h1:O7DYs+zxREGLKzKoMQrtrEacpb0ZVXA5rIwylE2Xchk=
 golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
 golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
 golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -213,12 +196,9 @@ google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpAD
 google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
 gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
-gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22 h1:VpOs+IwYnYBaFnrNAeB8UUWtL3vEUnzSCL1nVjPhqrw=
 gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22/go.mod h1:yeKp02qBN3iKW1OzL3MGk2IdtZzaj7SFntXj72NppTA=
 gopkg.in/natefinch/lumberjack.v2 v2.0.0 h1:1Lc07Kr7qY4U2YPouBjpCLxpiyxIVoxqXgkXLknAOE8=
 gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k=
-gopkg.in/olivere/elastic.v2 v2.0.61 h1:7cpl3MW8ysa4GYFBXklpo5mspe4NK0rpZTdyZ+QcD4U=
-gopkg.in/olivere/elastic.v2 v2.0.61/go.mod h1:CTVyl1gckiFw1aLZYxC00g3f9jnHmhoOKcWF7W3c6n4=
 gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
 gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
 gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
@@ -227,11 +207,5 @@ gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
 gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
 honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
 honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
-jygit.jydev.jianyu360.cn/data_processing/common_utils v0.0.0-20220927054143-d9e97522625d h1:Nh2rC3LBqh0alvam2vr4is/vbUaPkl0rbZxVETx3nmk=
-jygit.jydev.jianyu360.cn/data_processing/common_utils v0.0.0-20220927054143-d9e97522625d/go.mod h1:9PlRUNzirlF/LL1W7fA7koCudxJe3uO5nshDWlCnGo8=
-jygit.jydev.jianyu360.cn/data_processing/common_utils v0.0.0-20221205033056-885644941005 h1:AEEi+8ao9pTVqPIh6uVvjxBby/i43fFj7DwVo+feDAE=
-jygit.jydev.jianyu360.cn/data_processing/common_utils v0.0.0-20221205033056-885644941005/go.mod h1:9PlRUNzirlF/LL1W7fA7koCudxJe3uO5nshDWlCnGo8=
 jygit.jydev.jianyu360.cn/data_processing/common_utils v0.0.0-20230627091444-ee2add33ba67 h1:5rabE3IQRjI/NXfgJyquRTMdzSy7SfufFhmREixLZXg=
 jygit.jydev.jianyu360.cn/data_processing/common_utils v0.0.0-20230627091444-ee2add33ba67/go.mod h1:1Rp0ioZBhikjXHYYXmnzL6RNfvTDM/2XvRB+vuPLurI=
-jygit.jydev.jianyu360.cn/data_processing/field_info_tag v1.1.1 h1:ouJx+s77O8N69RALYyBkOPNyVeJ8WZL+2Ot/eZSEHTw=
-jygit.jydev.jianyu360.cn/data_processing/field_info_tag v1.1.1/go.mod h1:i9NKOqhWmcDl0Cl5qHBBBx46Da0Qzys7L0J+3my/Hbw=

+ 3 - 8
monitor/main.go

@@ -9,7 +9,6 @@ import (
 	"go.mongodb.org/mongo-driver/bson"
 	"go.uber.org/zap"
 	"io"
-	util "jygit.jydev.jianyu360.cn/data_processing/common_utils"
 	"jygit.jydev.jianyu360.cn/data_processing/common_utils/log"
 	"monitor/config"
 	"net/http"
@@ -20,8 +19,8 @@ var (
 	WebUrl  = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=45962efc-ca87-4996-9ffa-08bf6608ab7a"
 	WebUrl1 = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=1594c58d-c279-4fdc-8d44-c201160e3731"
 
-	WarningStr  = "数据采集bidding_file表数据,已累计%d条数据处理"
-	WarningStr1 = "标的物等字段识别提醒,bidding表数据已积累%d条未处理"
+	WarningStr  = "数据采集bidding_file表数据,已累计%d条数据处理"
+	WarningStr1 = "标的物等字段识别提醒,bidding_normal表数据已积累%d条待处理"
 	WarningStr2 = "项目合并表数据,超过一个1小时(查询时间点: %d)未有合并新数据"
 )
 
@@ -75,11 +74,7 @@ func taskFile() {
 }
 
 func taskPy() {
-	info, _ := MgoB.Find("bidding_processing_ids", bson.M{"dataprocess": 1}, nil, bson.M{"count": 1, "dataprocess": 1}, false, -1, -1)
-	count := 0
-	for _, m := range *info {
-		count += util.IntAll(m["count"])
-	}
+	count := MgoB.Count("bidding_nomal", bson.M{"bid_completetime": bson.M{"$exists": false}})
 	if count > config.Conf.Serve.PyWarn {
 		SendMsg(fmt.Sprintf(WarningStr1, count))
 	} else {

+ 3 - 3
processing_ids/go.mod

@@ -3,8 +3,8 @@ module processing_ids
 go 1.16
 
 require (
-	jygit.jydev.jianyu360.cn/data_processing/common_utils v0.0.0-20230620072956-7ec055be2061
 	github.com/robfig/cron v1.2.0
-	go.mongodb.org/mongo-driver v1.11.0 // indirect
-	go.uber.org/zap v1.23.0
+	go.mongodb.org/mongo-driver v1.11.0
+	go.uber.org/zap v1.23.0 // indirect
+	jygit.jydev.jianyu360.cn/data_processing/common_utils v0.0.0-20230620072956-7ec055be2061
 )

+ 92 - 6
processing_ids/go.sum

@@ -1,25 +1,59 @@
-jygit.jydev.jianyu360.cn/data_processing/common_utils v0.0.0-20220927054143-d9e97522625d h1:Nh2rC3LBqh0alvam2vr4is/vbUaPkl0rbZxVETx3nmk=
-jygit.jydev.jianyu360.cn/data_processing/common_utils v0.0.0-20220927054143-d9e97522625d/go.mod h1:9PlRUNzirlF/LL1W7fA7koCudxJe3uO5nshDWlCnGo8=
+cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
+github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
 github.com/BurntSushi/toml v1.2.0 h1:Rt8g24XnyGTyglgET/PRUNlrUeu9F5L+7FilkXfZgs0=
 github.com/BurntSushi/toml v1.2.0/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ=
 github.com/PuerkitoBio/goquery v1.8.0 h1:PJTF7AmFCFKk1N6V6jmKfrNH9tV5pNE6lZMkG0gta/U=
 github.com/PuerkitoBio/goquery v1.8.0/go.mod h1:ypIiRMtY7COPGk+I/YbZLbxsxn9g5ejnI2HSMtkjZvI=
 github.com/andybalholm/cascadia v1.3.1 h1:nhxRkql1kdYCc8Snf7D5/D3spOX+dBgjA6u8x004T2c=
 github.com/andybalholm/cascadia v1.3.1/go.mod h1:R4bJ1UQfqADjvDa4P6HZHLh/3OxWWEqc0Sk8XGwHqvA=
+github.com/aws/aws-sdk-go v1.43.21/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo=
 github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8=
 github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA=
+github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
+github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
+github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
 github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/dchest/captcha v1.0.0 h1:vw+bm/qMFvTgcjQlYVTuQBJkarm5R0YSsDKhm1HZI2o=
 github.com/dchest/captcha v1.0.0/go.mod h1:7zoElIawLp7GUMLcj54K9kbw+jEyvz2K0FDdRRYhvWo=
+github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
+github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
+github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
+github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
 github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g=
+github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
+github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
 github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
+github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
+github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
+github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
+github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
+github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
+github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
+github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
+github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
+github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
+github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
+github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
+github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
+github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
 github.com/golang/snappy v0.0.1 h1:Qgr9rKW7uDUkrbSmQeiDsGa8SjGyCOGtuasMWwvp2P4=
 github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
 github.com/gomodule/redigo v1.8.9/go.mod h1:7ArFNvsTjH8GMMzB4uy1snslv2BwmginuMs06a1uzZE=
-github.com/google/go-cmp v0.5.2 h1:X2ev0eStA3AbceY54o37/0PQ/UWqKEiiO2dKL5OPaFM=
+github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
+github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
+github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
+github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
 github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.7 h1:81/ik6ipDQS2aGcBfIN5dHDB36BwrStyeAQquSYCV4o=
+github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE=
+github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo=
+github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U=
+github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y=
 github.com/klauspost/compress v1.13.6 h1:P76CopJELS0TiO2mebmnzgWaajssP/EszplttgQxcgc=
 github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk=
 github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
@@ -27,16 +61,23 @@ github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORN
 github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
 github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
 github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
+github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
 github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe h1:iruDEfMl2E6fbMZ9s0scYfZQ84/6SPL6zC8ACM2oIL0=
 github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc=
 github.com/nsqio/go-nsq v1.1.0/go.mod h1:vKq36oyeVXgsS5Q8YEO7WghqidAVXQlcFxzQbQTuDEY=
+github.com/olivere/elastic/v7 v7.0.32/go.mod h1:c7PVmLe3Fxq77PIfY/bZmxY/TAamBhCzZ8xDOE09a9k=
+github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc=
 github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
 github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
 github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
 github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
 github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
 github.com/robfig/cron v1.2.0 h1:ZjScXvvxeQ63Dbyxy76Fj3AT3Ut0aKsyd2/tl3DTMuQ=
 github.com/robfig/cron v1.2.0/go.mod h1:JGuDeoQd7Z6yL4zQhZ3OPEVHB7fL6Ka6skscFHfmt2k=
+github.com/smartystreets/assertions v1.1.1/go.mod h1:tcbTF8ujkAEcZ8TElKY+i30BzYlVhC/LOxJk7iOWnoo=
+github.com/smartystreets/go-aws-auth v0.0.0-20180515143844-0c1422d1fdb9/go.mod h1:SnhjPscd9TpLiy1LpzGSKh3bXCfxxXuqd9xmQJy3slM=
+github.com/smartystreets/gunit v1.4.2/go.mod h1:ZjM1ozSIMJlAz/ay4SG8PeKF00ckUp+zMHZXV9/bvak=
 github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
 github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
 github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
@@ -56,10 +97,12 @@ github.com/xdg-go/stringprep v1.0.3/go.mod h1:W3f5j4i+9rC0kuIEJL0ky1VpHXQU3ocBgk
 github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d h1:splanxYIlg+5LfHAM6xpdFEAYOk8iySO56hMFq6uLyA=
 github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d/go.mod h1:rHwXgn7JulP+udvsHwJoVG1YGAP6VLg4y9I5dyZdqmA=
 github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
-go.mongodb.org/mongo-driver v1.10.1 h1:NujsPveKwHaWuKUer/ceo9DzEe7HIj1SlJ6uvXZG0S4=
 go.mongodb.org/mongo-driver v1.10.1/go.mod h1:z4XpeoU6w+9Vht+jAFyLgVrD+jGSQQe0+CBWFHNiHt8=
 go.mongodb.org/mongo-driver v1.11.0 h1:FZKhBSTydeuffHj9CBjXlR8vQLee1cQyTWYPA6/tqiE=
 go.mongodb.org/mongo-driver v1.11.0/go.mod h1:s7p5vEtfbeR1gYi6pnj3c3/urpbLv2T5Sfd6Rp2HBB8=
+go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E=
+go.opentelemetry.io/otel v1.5.0/go.mod h1:Jm/m+rNp/z0eqJc74H7LPwQ3G87qkU/AnnAydAjSAHk=
+go.opentelemetry.io/otel/trace v1.5.0/go.mod h1:sq55kfhjXYr1zVSyexg0w1mpa03AYXR5eyTkB9NPPdE=
 go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw=
 go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
 go.uber.org/goleak v1.1.11 h1:wy28qYRKZgnJTxGxvye5/wgWr1EKjmUDGYox5mGlRlI=
@@ -71,35 +114,55 @@ go.uber.org/zap v1.23.0 h1:OjGQ5KQDEUawVHxNwQgPpiypGHOxo2mNZsOqTak4fFY=
 go.uber.org/zap v1.23.0/go.mod h1:D+nX8jyLsMHMYrln8A0rJjFt/T/9/bGgIhAqxv5URuY=
 golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
 golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
+golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d h1:sK3txAijHtOK88l68nt020reeT1ZdKLIYetKl95FzVY=
 golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
+golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
+golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
+golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
+golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
 golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
 golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
+golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
 golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
 golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
 golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
 golang.org/x/net v0.0.0-20210916014120-12bc252f5db8/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
-golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2 h1:CIJ76btIcR3eFI5EgSo6k1qKw9KJexJuRLI9G7Hp5wE=
 golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
+golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd h1:O7DYs+zxREGLKzKoMQrtrEacpb0ZVXA5rIwylE2Xchk=
+golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
+golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
+golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20210220032951-036812b2e83c h1:5KslGYwFpkhGh+Q16bwMP3cOontH8FOep7tGV86Y7SQ=
 golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
+golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
 golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
 golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
 golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk=
 golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
 golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
 golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
+golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
 golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
 golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
@@ -107,6 +170,25 @@ golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8T
 golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=
 golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
+google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
+google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
+google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
+google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
+google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
+google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
+google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=
+google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
+google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
+google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
+google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
+google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
+google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
+google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
+google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
+google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
+google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
+google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
 gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
 gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
@@ -114,9 +196,13 @@ gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22 h1:VpOs+IwYnYBaFnrNAeB8UUWtL3
 gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22/go.mod h1:yeKp02qBN3iKW1OzL3MGk2IdtZzaj7SFntXj72NppTA=
 gopkg.in/natefinch/lumberjack.v2 v2.0.0 h1:1Lc07Kr7qY4U2YPouBjpCLxpiyxIVoxqXgkXLknAOE8=
 gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k=
-gopkg.in/olivere/elastic.v2 v2.0.61/go.mod h1:CTVyl1gckiFw1aLZYxC00g3f9jnHmhoOKcWF7W3c6n4=
+gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
 gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
 gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
 gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
 gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
 gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+jygit.jydev.jianyu360.cn/data_processing/common_utils v0.0.0-20230620072956-7ec055be2061 h1:xfmoVsDEqVv1XzAVxgGEDi+W9ojHBJc6OmTbg3b1tP0=
+jygit.jydev.jianyu360.cn/data_processing/common_utils v0.0.0-20230620072956-7ec055be2061/go.mod h1:1Rp0ioZBhikjXHYYXmnzL6RNfvTDM/2XvRB+vuPLurI=

+ 92 - 29
processing_ids/main.go

@@ -5,9 +5,7 @@ import (
 	"fmt"
 	"github.com/robfig/cron"
 	"go.mongodb.org/mongo-driver/bson"
-	"go.mongodb.org/mongo-driver/bson/primitive"
-	"go.uber.org/zap"
-	"io/ioutil"
+	"io"
 	util "jygit.jydev.jianyu360.cn/data_processing/common_utils"
 	"jygit.jydev.jianyu360.cn/data_processing/common_utils/log"
 	"jygit.jydev.jianyu360.cn/data_processing/common_utils/mongodb"
@@ -19,19 +17,24 @@ var (
 	MgoBid          *mongodb.MongodbSim
 	lastId, startId string
 
-	mail_to  = "zhangjinkun@topnet.net.cn,wangjianghan@topnet.net.cn,maxiaoshan@topnet.net.cn,zhengkun@topnet.net.cn"
+	mail_to  = "wangjianghan@topnet.net.cn,zhangjinkun@topnet.net.cn,maxiaoshan@topnet.net.cn,zhengkun@topnet.net.cn"
 	mail_api = "http://172.17.145.179:19281/_send/_mail"
+
+	skip        = 0
+	MgoBulkSize = 200
 )
 
 func init() {
 	MgoBid = &mongodb.MongodbSim{
-		MongodbAddr: "172.17.4.187:27082,172.17.145.163:27083",
+		MongodbAddr: "172.17.189.140:27080,172.17.189.141:27081",
 		DbName:      "qfw",
 		Size:        5,
 		UserName:    "SJZY_RWESBid_Other",
 		Password:    "SJZY@O17t8herB3B",
 	}
 	MgoBid.InitPool()
+
+	log.InitLog()
 }
 
 func main() {
@@ -46,7 +49,8 @@ func main() {
 
 func TimeTask() {
 	crn := cron.New()
-	cronstr := "0 */5 * * * ?" // 每5min执行一次
+	//cronstr := "0 */1 * * * ?" // 每2min执行一次
+	cronstr := "*/20 * * * * ?" // 每20s执行一次
 	ct := 0
 	_ = crn.AddFunc(cronstr, func() {
 		ct += 1
@@ -60,28 +64,30 @@ func TimeTask() {
 }
 
 func taskinfo() {
-	currentTime := time.Now()
-	m, _ := time.ParseDuration("-5m") // 5分钟之前
-	rtime := currentTime.Add(m)
-	eid := primitive.NewObjectIDFromTimestamp(rtime)
-	qfid := bson.M{"_id": bson.M{"$lte": eid}}
-	info, _ := MgoBid.Find("bidding", qfid, `{"_id": -1}`, `{"_id": 1}`, true, -1, -1)
-	if info != nil {
+	//currentTime := time.Now()
+	//m, _ := time.ParseDuration("5m") // 5分钟之前
+	//rtime := currentTime.Add(m)
+	//eid := primitive.NewObjectIDFromTimestamp(rtime)
+	//qfid := bson.M{"_id": bson.M{"$lte": eid}}
+	info, _ := MgoBid.Find("bidding", nil, `{"_id": -1}`, `{"_id": 1}`, true, -1, -1)
+	if len(*info) > 0 && lastId != mongodb.BsonIdToSId((*info)[0]["_id"]) {
 		lastId = mongodb.BsonIdToSId((*info)[0]["_id"])
 	} else {
-		sendMail("bidding表id查询失败")
+		if skip >= 30 {
+			sendMail(fmt.Sprintf("bidding表id段数据查询失败,%s", lastId))
+			skip = 0
+		} else {
+			skip++
+		}
+		log.Debug(fmt.Sprintf("skip: %d, lastid: %s", skip, lastId))
 		return
 	}
+	skip = 0
 	info1, _ := MgoBid.Find("bidding_processing_ids", `{"dataprocess": 0}`, `{"_id": -1}`, nil, false, -1, 2)
 	if len(*info1) > 1 {
 		startId = util.ObjToString((*info1)[0]["gtid"])
 		q := bson.M{"_id": bson.M{"$gt": mongodb.StringTOBsonId(startId), "$lte": mongodb.StringTOBsonId(lastId)}}
 		count := MgoBid.Count("bidding", q)
-		ids := fmt.Sprintf("%s-%s", startId, lastId)
-		if count <= 0 {
-			sendMail(fmt.Sprintf("bidding表id段数据查询失败,%s", ids))
-			return
-		}
 		if count > 10000 {
 			startId = util.ObjToString((*info1)[0]["lteid"])
 			q = bson.M{"_id": bson.M{"$gt": mongodb.StringTOBsonId(startId), "$lte": mongodb.StringTOBsonId(lastId)}}
@@ -95,7 +101,7 @@ func taskinfo() {
 			save["dataprocess"] = 0
 			save["createtime"] = now
 			save["updatetime"] = now
-			MgoBid.Save("bidding_processing_ids", save)
+			saveFuc(save, util.Int64All((*info1)[0]["last_autoid"]))
 			startId = lastId
 		} else {
 			update := make(map[string]interface{})
@@ -103,17 +109,13 @@ func taskinfo() {
 			startId = util.ObjToString((*info1)[0]["gtid"])
 			update["count"] = count
 			update["updatetime"] = time.Now().Unix()
-			MgoBid.UpdateById("bidding_processing_ids", (*info1)[0]["_id"], map[string]interface{}{"$set": update})
+			updateFuc((*info1)[0]["_id"], update, util.Int64All((*info1)[0]["last_autoid"]), util.ObjToString((*info1)[0]["lteid"]))
 			startId = lastId
 		}
 	} else {
 		q := bson.M{"_id": bson.M{"$gt": mongodb.StringTOBsonId(startId), "$lte": mongodb.StringTOBsonId(lastId)}}
 		count := MgoBid.Count("bidding", q)
-		ids := fmt.Sprintf("%s-%s", startId, lastId)
-		if count <= 0 {
-			sendMail(fmt.Sprintf("bidding表id段数据查询失败,%s", ids))
-			return
-		}
+		info2, _ := MgoBid.Find("bidding_processing_ids", nil, `{"_id": -1}`, nil, true, -1, 1)
 		save := make(map[string]interface{})
 		save["gtid"] = startId
 		save["lteid"] = lastId
@@ -122,16 +124,77 @@ func taskinfo() {
 		save["dataprocess"] = 0
 		save["createtime"] = now
 		save["updatetime"] = now
-		MgoBid.Save("bidding_processing_ids", save)
+		saveFuc(save, util.Int64All((*info2)[0]["last_autoid"]))
 		startId = lastId
 	}
 }
 
+func saveFuc(save map[string]interface{}, autoid int64) {
+	conn := MgoBid.GetMgoConn()
+	defer MgoBid.DestoryMongoConn(conn)
+	gtid := util.ObjToString(save["gtid"])
+	lteid := util.ObjToString(save["lteid"])
+	q := bson.M{"_id": bson.M{"$gt": mongodb.StringTOBsonId(gtid), "$lte": mongodb.StringTOBsonId(lteid)}}
+	result := conn.DB(MgoBid.DbName).C("bidding").Find(q).Select(bson.M{"_id": 1}).Iter()
+	var bidUpdate [][]map[string]interface{}
+	for tmp := make(map[string]interface{}); result.Next(tmp); {
+		autoid++
+		bidUpdate = append(bidUpdate, []map[string]interface{}{{
+			"_id": tmp["_id"],
+		},
+			{"$set": bson.M{"autoid": autoid}},
+		})
+
+		if len(bidUpdate) >= MgoBulkSize {
+			tmps := bidUpdate
+			MgoBid.UpdateBulk("bidding", tmps...)
+			bidUpdate = [][]map[string]interface{}{}
+		}
+	}
+	if len(bidUpdate) > 0 {
+		tmps := bidUpdate
+		MgoBid.UpdateBulk("bidding", tmps...)
+		bidUpdate = [][]map[string]interface{}{}
+	}
+	save["last_autoid"] = autoid
+	MgoBid.Save("bidding_processing_ids", save)
+}
+
+func updateFuc(id interface{}, update map[string]interface{}, autoid int64, gtid string) {
+	conn := MgoBid.GetMgoConn()
+	defer MgoBid.DestoryMongoConn(conn)
+	lteid := util.ObjToString(update["lteid"])
+	q := bson.M{"_id": bson.M{"$gt": mongodb.StringTOBsonId(gtid), "$lte": mongodb.StringTOBsonId(lteid)}}
+	result := conn.DB(MgoBid.DbName).C("bidding").Find(q).Select(bson.M{"_id": 1}).Iter()
+	var bidUpdate [][]map[string]interface{}
+	for tmp := make(map[string]interface{}); result.Next(tmp); {
+		autoid++
+		bidUpdate = append(bidUpdate, []map[string]interface{}{{
+			"_id": tmp["_id"],
+		},
+			{"$set": bson.M{"autoid": autoid}},
+		})
+
+		if len(bidUpdate) >= MgoBulkSize {
+			tmps := bidUpdate
+			MgoBid.UpdateBulk("bidding", tmps...)
+			bidUpdate = [][]map[string]interface{}{}
+		}
+	}
+	if len(bidUpdate) > 0 {
+		tmps := bidUpdate
+		MgoBid.UpdateBulk("bidding", tmps...)
+		bidUpdate = [][]map[string]interface{}{}
+	}
+	update["last_autoid"] = autoid
+	MgoBid.UpdateById("bidding_processing_ids", id, map[string]interface{}{"$set": update})
+}
+
 func sendMail(content string) {
 	res, err := http.Get(fmt.Sprintf("%s?to=%s&title=%s&body=%s", mail_api, mail_to, "processing_ids-send-fail", content))
 	if err == nil {
 		defer res.Body.Close()
-		read, err := ioutil.ReadAll(res.Body)
-		log.Info("send mail ...", zap.String("r:", string(read)), zap.Any("err:", err))
+		read, _ := io.ReadAll(res.Body)
+		util.Debug("send mail ..." + string(read))
 	}
 }