Browse Source

no message

Jianghan 4 years ago
parent
commit
e32652afc7

+ 6 - 7
fullproject/src_v1/config.json

@@ -1,5 +1,5 @@
 {
-    "loadStart": 1,
+    "loadStart": 0,
 	"validdays":150,
     "statusdays": 15,
 	"mongodbServers": "192.168.3.207:27092",
@@ -8,16 +8,15 @@
 	"hints":"publishtime_1",
     "extractColl": "jh_info",
     "projectColl": "jh_project",
-    "updateColl": "jh_info",
-    "backupFlag": false,
+    "backupFlag": true,
     "siteColl": "site",
     "thread": 1,
     "jkmail": {
         "to": "wangjianghan@topnet.net.cn",
-        "api": "http://10.171.112.160:19281/_send/_mail"
+        "api": "http://172.17.145.179:19281/_send/_mail"
     },
     "es": {
-        "addr": "http://127.0.0.1:9800",
+        "addr": "http://192.168.3.128:9800",
         "index": "projectset",
         "itype": "projectset",
         "pool": 10
@@ -30,8 +29,8 @@
             "memo": "创建项目索引new"
         },
         {
-            "addr": "127.0.0.1",
-            "port": 14833,
+            "addr": "192.168.3.207",
+            "port": 1483,
             "memo": "修改项目创建new"
         }
     ],

+ 0 - 2
fullproject/src_v1/init.go

@@ -21,7 +21,6 @@ var (
 	Sysconfig                                      map[string]interface{} //读取配置文件
 	MongoTool                                      *MongodbSim            //mongodb连接
 	ExtractColl, ProjectColl, BackupColl, SiteColl string                 //抽取表、项目表、项目快照表、站点表
-	UpdateColl                                     string                 // 金额修改数据表
 	Thread                                         int                    //配置项线程数
 	//NextNode                 []interface{}
 	BlackList    								   []interface{}
@@ -66,7 +65,6 @@ func init() {
 
 	ExtractColl = Sysconfig["extractColl"].(string)
 	ProjectColl = Sysconfig["projectColl"].(string)
-	UpdateColl = Sysconfig["updateColl"].(string)
 	BackupColl = Sysconfig["projectColl"].(string) + "_back"
 	SiteColl = Sysconfig["siteColl"].(string)
 	Thread = util.IntAll(Sysconfig["thread"])

+ 1 - 1
fullproject/src_v1/load_data.go

@@ -18,7 +18,7 @@ func (p *ProjectTask) loadData(starttime int64) {
 	sess := MongoTool.GetMgoConn()
 	defer MongoTool.DestoryMongoConn(sess)
 	q := map[string]interface{}{
-		"lasttime": map[string]interface{}{"$gt": starttime},
+		"lasttime": map[string]interface{}{"$gte": starttime},
 	}
 	it := sess.DB(MongoTool.DbName).C(p.coll).Find(&q).Iter()
 	n := 0

+ 5 - 27
fullproject/src_v1/main.go

@@ -36,7 +36,6 @@ func init() {
 			Port: util.IntAll(m["port"]),
 		})
 	}
-
 	es := Sysconfig["es"].(map[string]interface{})
 	Es = &elastic.Elastic{
 		S_esurl: util.ObjToString(es["addr"]),
@@ -121,28 +120,6 @@ func mainT() {
 	time.Sleep(99999 * time.Hour)
 }
 
-func mainS() {
-	id := "5987e5e85d11e1c745d36c4c"
-	mapinfo := map[string]interface{}{}
-	mapinfo["id"] = id
-	mapinfo["stype"] = "updateMoney"
-	mapinfo["budget"] = "12345"
-	mapinfo["ip"] = "127.0.0.1"
-	mapinfo["port"] = Sysconfig["udpport"]
-	if Sysconfig["loadStart"] != nil {
-		loadStart := util.Int64All(Sysconfig["loadStart"])
-		if loadStart > -1 {
-			P_QL.loadData(loadStart)
-		}
-	}
-	P_QL.loadSite()
-	P_QL.currentType = mapinfo["stype"].(string)
-	P_QL.pici = time.Now().Unix()
-	P_QL.taskUpdateMoney(mapinfo)
-	P_QL.Brun = true
-	time.Sleep(20 * time.Second)
-}
-
 //udp调用信号
 func processUdpMsg(act byte, data []byte, ra *net.UDPAddr) {
 	switch act {
@@ -189,24 +166,25 @@ func processUdpMsg(act byte, data []byte, ra *net.UDPAddr) {
 					P_QL.pici = time.Now().Unix()
 					P_QL.taskUpdateInfo(mapInfo)
 				}()
-			case "updateMoney": //修改金额
+			case "updatePro": //修改项目外围字段(只修改外围字段值)
 				go func() {
 					defer func() {
 						<-SingleThread
 					}()
 					P_QL.currentType = tasktype
 					P_QL.pici = time.Now().Unix()
-					P_QL.taskUpdateMoney(mapInfo)
+					P_QL.taskUpdatePro(mapInfo)
 				}()
-			case "updateMoneyMgo": //修改金额
+			case "deleteInfo":	// 删除招标公告
 				go func() {
 					defer func() {
 						<-SingleThread
 					}()
 					P_QL.currentType = tasktype
 					P_QL.pici = time.Now().Unix()
-					P_QL.taskQuery()
+					P_QL.delInfoPro(mapInfo)
 				}()
+
 			case "history": //历史数据合并,暂时不写
 				go func() {
 					defer func() {

+ 40 - 19
fullproject/src_v1/project.go

@@ -426,24 +426,6 @@ var FIELDS = []string{
 	"package",
 }
 
-var bidtype = map[string]string{
-	"招标": "招标",
-	"邀标": "邀标",
-	"询价": "询价",
-	"单一": "单一",
-	"竞价": "竞价",
-	"竞谈": "竞谈",
-}
-
-var bidstatus = map[string]string{
-	"预告": "预告",
-	"中标": "中标",
-	"成交": "成交",
-	"废标": "废标",
-	"流标": "流标",
-	"合同": "合同",
-}
-
 //招标时间zbtime、中标时间jgtime、项目状态bidstatus、招标类型bidtype、最后发布时间lasttime、首次发布时间firsttime
 
 func (p *ProjectTask) NewProject(tmp map[string]interface{}, thisinfo *Info) (string, *ProjectInfo) {
@@ -830,7 +812,6 @@ func (p *ProjectTask) UpdateProject(tmp map[string]interface{}, thisinfo *Info,
 			set["district"] = thisinfo.District
 		}
 	}
-	set["district"] = thisinfo.District
 	//6--项目名称
 	if (thisinfo.ProjectName != "" && pInfo.ProjectName == "") || (len([]rune(pInfo.ProjectName)) < 6 && thisinfo.LenPN > 6) {
 		pInfo.ProjectName = thisinfo.ProjectName
@@ -1346,3 +1327,43 @@ func IsCreatePro(info *Info) (bol bool) {
 	}
 	return bol
 }
+
+var bidtype = map[string]string{
+	"招标": "招标",
+	"邀标": "邀标",
+	"询价": "询价",
+	"单一": "单一",
+	"竞价": "竞价",
+	"竞谈": "竞谈",
+}
+
+var bidstatus = map[string]string{
+	"预告": "预告",
+	"中标": "中标",
+	"成交": "成交",
+	"废标": "废标",
+	"流标": "流标",
+	"合同": "合同",
+}
+
+func GetBidTypeAndBidStatus(info *Info) (string, string) {
+	typeStr := bidtype[info.TopType]
+	statusStr := bidstatus[info.SubType]
+	if info.Infoformat == 2 || info.SubType == "拟建" {
+		statusStr = "拟建"
+		typeStr = ""
+	} else {
+		if bidtype[typeStr] == "" {
+			typeStr = "招标"
+		}
+		if typeStr == "招标" {
+			statusStr = typeStr
+		} else {
+			if statusStr == "" {
+				statusStr = "其它"
+			}
+		}
+	}
+	return typeStr, statusStr
+
+}

+ 152 - 232
fullproject/src_v1/task.go

@@ -6,6 +6,7 @@ import (
 	"gopkg.in/mgo.v2/bson"
 	"log"
 	mu "mfw/util"
+	"mgoutil/mongodb"
 	"qfw/util"
 	"regexp"
 	"strings"
@@ -13,6 +14,7 @@ import (
 	"time"
 	"unicode/utf8"
 
+	"github.com/goinggo/mapstructure"
 	"github.com/robfig/cron"
 	"go.mongodb.org/mongo-driver/bson/primitive"
 )
@@ -29,12 +31,26 @@ var BackRegexp = map[string][]*regexp.Regexp{}
 var BackRepRegexp = map[string][]RegexpInfo{}
 var BlackRegexp = map[string][]*regexp.Regexp{}
 
+var (
+	//从标题获取项目编号
+	titleGetPc  = regexp.MustCompile("^([-0-9a-zA-Z第号采招政询电审竞#]{8,}[-0-9a-zA-Z#]+)")
+	titleGetPc1 = regexp.MustCompile("[\\[【((](.{0,6}(编号|编码|项号|包号|代码|标段?号)[::为])?([-0-9a-zA-Z第号采招政询电审竞#]{5,}([\\[\\]()()][-0-9a-zA-Z第号采招审竞#]+[\\[\\]()()][-0-9a-zA-Z第号采招审竞#]+)?)[\\]】))]")
+	titleGetPc2 = regexp.MustCompile("([-0-9a-zA-Z第号采政招询电审竞#]{8,}[-0-9a-zA-Z#]+)(.{0,5}公告)?$")
+	//项目编号过滤
+	pcReplace = regexp.MustCompile("([\\[【((〖〔《{﹝{](重|第?[二三四再]次.{0,4})[\\]】))〗〕》}﹞}])$|[\\[\\]【】()()〖〗〔〕《》{}﹝﹞-;{}–  ]+|(号|重|第?[二三四五再]次(招标)?)$|[ __]+|((采购)?项目|采购(项目)?)$")
+	//项目编号只是数字或只是字母4个以下
+	StrOrNum = regexp.MustCompile("^[0-9_-]{1,4}$|^[a-zA-Z_-]{1,4}$")
+	//纯数字或纯字母
+	StrOrNum2 = regexp.MustCompile("^[0-9_-]+$|^[a-zA-Z_-]+$")
+	//含分包词,招标未识别分包  合并到一个项目
+	KeyPackage = regexp.MustCompile("[0-9a-zA-Z一二三四五六七八九十ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩ]+.{0,2}(包|段)|(包|段)[0-9a-zA-Z一二三四五六七八九十ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩ]+.{0,2}")
+)
+
 type RegexpInfo struct {
 	regs   *regexp.Regexp
 	repstr string
 }
 
-
 //项目合并对象
 type ProjectTask struct {
 	InitMinTime int64 //最小时间,小于0的处理一次
@@ -146,6 +162,7 @@ func (p *ProjectTask) updateAllQueue() {
 					defer func() {
 						<-sp
 					}()
+					util.Debug("1111111111111111")
 					MongoTool.UpSertBulk(p.coll, arru...)
 				}(arru[:indexu])
 				arru = make([][]map[string]interface{}, p.saveSize)
@@ -324,174 +341,51 @@ func (p *ProjectTask) taskUpdateInfo(udpInfo map[string]interface{}) {
 	defer util.Catch()
 	infoid := udpInfo["infoid"].(string)
 	infoMap := MongoTool.FindById(ExtractColl, infoid)
+	if infoMap["modifyinfo"] == nil {
+		util.Debug("does not exist modifyinfo ---,", infoid)
+		return
+	}
 	client := Es.GetEsConn()
 	defer Es.DestoryEsConn(client)
-	esquery := `{"query": {"bool": {"must": [{"term": {"list.infoid": "`+infoid+`"}}]}}}`
+	esquery := `{"query": {"bool": {"must": [{"match": {"ids": "`+infoid+`"}}]}}}`
 	data := Es.Get(Index, Itype, esquery)
 	if len(*data) > 0 {
-		info := ParseInfo(infoMap)
-		p.updateJudge(infoMap, info, util.ObjToString((*data)[0]["_id"]))
+		pid := util.ObjToString(((*data)[0])["_id"])
+		p.updateJudge(infoMap, pid)
 	}else {
-		util.Debug("Not find project---", infoid)
+		util.Debug("not find project---,", infoid)
 	}
 }
 
-func (p *ProjectTask) taskQuery() {
+func (p *ProjectTask) taskUpdatePro(udpInfo map[string]interface{}) {
 	defer util.Catch()
-	count := 0
-	sess := MongoTool.GetMgoConn()
-	defer MongoTool.DestoryMongoConn(sess)
-	fields := map[string]interface{} {"budget": 1, "bidamount": 1, "package": 1}
-	ms := sess.DB(MongoTool.DbName).C(UpdateColl).Find(map[string]interface{}{}).Select(fields)
-	query := ms.Iter()
-L:
-	for {
-		tmp := make(map[string]interface{})
-		if query.Next(&tmp) {
-			lastid := tmp["_id"]
-			tmp["id"] = tmp["_id"].(primitive.ObjectID).Hex();
-			if count%1000 == 0 {
-				log.Println("current modify", count, lastid)
-			}
-			p.taskUpdateMoney(tmp)
-			count++
-		} else {
-			break L
-		}
+	util.Debug(udpInfo)
+	pid := util.ObjToString(udpInfo["pid"])
+	updateMap := util.ObjToMap(udpInfo["updateField"])
+	if pid == "" || len(*updateMap) == 0 {
+		util.Debug("参数有误")
+		return
 	}
-}
-
-//修改公告信息的预算/中标金额
-func (p *ProjectTask) taskUpdateMoney(udpInfo map[string]interface{}) {
-	defer util.Catch()
-	id := udpInfo["id"].(string)
-	budget := util.Float64All(udpInfo["budget"])
-	bidamount := util.Float64All(udpInfo["bidamount"])
-
-	client := Es.GetEsConn()
-	defer Es.DestoryEsConn(client)
-	esquery := `{"query": {"bool": {"must": [{"term": {"list.infoid": "`+id+`"}}]}}}`
-	data := Es.Get(Index, Itype, esquery)
-	if len(*data) > 0 {
-		pid := util.ObjToString((*data)[0]["_id"])
-		pro := MongoTool.FindById(ProjectColl, pid)
-		if len(pro) == 0 {
-			util.Debug("未找到项目, pid=", pid)
-			return
-		}
-		var info *map[string]interface{}
-		for _, v := range []interface{}(pro["list"].(primitive.A)){
-			v1 := v.(map[string]interface{})
-			if util.ObjToString(v1["infoid"]) == id {
-				info = util.ObjToMap(v)
-				infoField := util.ObjToMap(pro["infofield"])
-				if udpInfo["budget"] != nil{
-					util.Debug("update-------", (*info)["infoid"])
-					//if pro["budget"] == (*info)["budget"] {
-					//	pro["budget"] = budget
-					//}
-					//多包中的金额
-					if util.IntAll(pro["multipackage"]) == 1 {
-						if packages, ok := pro["package"].(map[string]interface{}); ok {
-						M :
-							for k, v := range packages{
-								v1 := []interface{}(v.(primitive.A))
-								for _, v2 := range v1{
-									v3 := v2.(map[string]interface{})
-									if util.ObjToString(v3["infoid"]) == id {
-										if v3["budget"] != nil {
-											pkg := udpInfo["package"].(map[string]interface{})
-											tmp := pkg[k].(map[string]interface{})
-											v3["budget"] = tmp["budget"]
-										}
-									}else {
-										break M
-									}
-								}
-							}
-						}
-					}
-					(*info)["budget"] = budget
-					(*util.ObjToMap((*infoField)[id]))["budget"] = budget
-					if pro["sortprice"] == (*info)["budget"] {
-						pro["sortprice"] = budget
-					}
-				}else {
-					delete(*info, "budget")
-				}
-				if udpInfo["bidamount"] != nil{
-					//if pro["bidamount"] == (*info)["bidamount"] {
-					//	pro["bidamount"] = bidamount
-					//}
-					v1["bidamount"] = bidamount
-					if util.IntAll(pro["multipackage"]) == 1 {
-						if packages, ok := pro["package"].(map[string]interface{}); ok {
-							for k, v := range packages{
-								v1 := []interface{}(v.(primitive.A))
-								for _, v2 := range v1{
-									v3 := v2.(map[string]interface{})
-									if util.ObjToString(v3["infoid"]) == id {
-										if v3["bidamount"] != nil {
-											pkg := udpInfo["package"].(map[string]interface{})
-											tmp := pkg[k].(map[string]interface{})
-											v3["bidamount"] = tmp["bidamount"]
-										}
-									}
-								}
-							}
-						}
-					}
-					(*info)["bidamount"] = bidamount
-					(*util.ObjToMap((*infoField)[id]))["bidamount"] = bidamount
-					if pro["sortprice"] == (*info)["bidamount"] {
-						pro["sortprice"] = bidamount
-					}
-				}else {
-					delete(*info, "bidamount")
-				}
-				break
-			}
-		}
-		var project *ProjectInfo
-		var pInfo *Info
-		bys, _ := json.Marshal(pro)
-		_ = json.Unmarshal(bys, &project)
-		bys1, _ := json.Marshal(info)
-		_ = json.Unmarshal(bys1, &pInfo)
-		if len(project.Ids) > 1 {
-			CountAmount(project, pInfo, *info)
-			if project.Budget > 0 {
-				pro["budget"] = project.Budget
-			}
-			if project.Bidamount > 0 {
-				pro["bidamount"] = project.Bidamount
-			}
-		}else {
-			pro["budget"] = budget
-			pro["bidamount"] = bidamount
-			if budget > bidamount {
-				pro["sortprice"] = budget
+	proMap := MongoTool.FindById(ProjectColl, pid)
+	if len(proMap) > 1 {
+		proMap["reason"] = "直接修改项目字段信息"
+		backupPro(proMap)
+		delete(proMap, "reason")
+		updataMap := make(map[string]interface{})
+		modifyInfo := make(map[string]interface{})
+		for k, v := range *updateMap{
+			if strings.Contains(k, "time") {
+				updataMap[k] = util.Int64All(v)
 			}else {
-				pro["sortprice"] = bidamount
+				updataMap[k] = v
 			}
+			modifyInfo[k] = true
 		}
-		set := map[string]interface{}{
-			"$set": pro,
-		}
-		MongoTool.UpdateById(ProjectColl, pid, set)
-
-		loadStart := util.Int64All(Sysconfig["loadStart"])
-		if loadStart > -1 && project.LastTime >loadStart {
-			util.Debug("内存中存在该项目信息", project.Id)
-			p.AllIdsMapLock.Lock()
-			p.AllIdsMap[pid].P = project
-			p.AllIdsMapLock.Unlock()
-		}
-
-		bol := Es.DelById(Index, Itype, pid)
+		updataMap["modifyinfo"] = modifyInfo
+		util.Debug(updataMap)
+		bol := MongoTool.UpdateById(ProjectColl, pid, map[string]interface{}{"$set": updataMap})
 		if bol {
-			util.Debug("删除es索引, pid------", pid)
-			//调udp生索引
+			//es索引
 			by, _ := json.Marshal(map[string]interface{}{
 				"query": map[string]interface{}{
 					"_id": bson.M{
@@ -503,24 +397,40 @@ func (p *ProjectTask) taskUpdateMoney(udpInfo map[string]interface{}) {
 			util.Debug(string(by))
 			_ = udpclient.WriteUdp(by, mu.OP_TYPE_DATA, toaddr[1])
 		}
+		// 内存
+		var pro ProjectInfo
+		err := mapstructure.Decode(proMap, &pro)
+		if err != nil {
+			util.Debug(err)
+		}
+		p.AllIdsMapLock.Lock()
+		if v, ok := p.AllIdsMap[pid]; ok {
+			v.P = &pro
+		}
+		p.AllIdsMapLock.Unlock()
+	}else {
+		util.Debug("Not find project---", pid)
 	}
 }
 
-func FindMoney(key string, project map[string]interface{}) float64 {
-	money := -0.1
-	for i, v := range []interface{}(project["list"].(primitive.A)){
-		v1 := v.(map[string]interface{})
-		if i == 0 {
-			if v1[key] != nil {
-				money = util.Float64All(v1[key])
-			}
-		}else {
-			if v1[key] != nil && util.Float64All(v1[key]) > money {
-				money = util.Float64All(v1[key])
-			}
-		}
+func (p *ProjectTask) delInfoPro(udpInfo map[string]interface{}) {
+	defer util.Catch()
+	util.Debug(udpInfo)
+	infoid := util.ObjToString(udpInfo["infoid"])
+	if infoid == "" {
+		util.Debug("参数有误")
+		return
+	}
+	client := Es.GetEsConn()
+	defer Es.DestoryEsConn(client)
+	esquery := `{"query": {"bool": {"must": [{"match": {"ids": "`+infoid+`"}}]}}}`
+	data := Es.Get(Index, Itype, esquery)
+	if len(*data) > 0 {
+		pid := util.ObjToString(((*data)[0])["_id"])
+		p.delJudge(infoid, pid)
+	}else {
+		util.Debug("not find project---,", infoid)
 	}
-	return money
 }
 
 func StringTOBsonId(id string) primitive.ObjectID {
@@ -633,21 +543,6 @@ L:
 
 }
 
-var (
-	//从标题获取项目编号
-	titleGetPc  = regexp.MustCompile("^([-0-9a-zA-Z第号采招政询电审竞#]{8,}[-0-9a-zA-Z#]+)")
-	titleGetPc1 = regexp.MustCompile("[\\[【((](.{0,6}(编号|编码|项号|包号|代码|标段?号)[::为])?([-0-9a-zA-Z第号采招政询电审竞#]{5,}([\\[\\]()()][-0-9a-zA-Z第号采招审竞#]+[\\[\\]()()][-0-9a-zA-Z第号采招审竞#]+)?)[\\]】))]")
-	titleGetPc2 = regexp.MustCompile("([-0-9a-zA-Z第号采政招询电审竞#]{8,}[-0-9a-zA-Z#]+)(.{0,5}公告)?$")
-	//项目编号过滤
-	pcReplace = regexp.MustCompile("([\\[【((〖〔《{﹝{](重|第?[二三四再]次.{0,4})[\\]】))〗〕》}﹞}])$|[\\[\\]【】()()〖〗〔〕《》{}﹝﹞-;{}–  ]+|(号|重|第?[二三四五再]次(招标)?)$|[ __]+|((采购)?项目|采购(项目)?)$")
-	//项目编号只是数字或只是字母4个以下
-	StrOrNum = regexp.MustCompile("^[0-9_-]{1,4}$|^[a-zA-Z_-]{1,4}$")
-	//纯数字或纯字母
-	StrOrNum2 = regexp.MustCompile("^[0-9_-]+$|^[a-zA-Z_-]+$")
-	//含分包词,招标未识别分包  合并到一个项目
-	KeyPackage = regexp.MustCompile("[0-9a-zA-Z一二三四五六七八九十ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩ]+.{0,2}(包|段)|(包|段)[0-9a-zA-Z一二三四五六七八九十ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩ]+.{0,2}")
-)
-
 func (p *ProjectTask) CommonMerge(tmp map[string]interface{}, info *Info) {
 	if info != nil && !((info.pnbval == 1 && info.Buyer != "") || info.pnbval == 0) {
 		if jsonData, ok := tmp["jsondata"].(map[string]interface{}); ok {
@@ -812,13 +707,30 @@ func ParseInfo(tmp map[string]interface{}) (info *Info) {
 	return thisinfo
 }
 
-func (p *ProjectTask) updateJudge(infoMap map[string]interface{}, info *Info, pInfoId string) {
-	var index = -1		//0:第一个,1:中间,2:最后一个
-	tmpPro := MongoTool.FindById(ProjectColl, pInfoId)
+func (p *ProjectTask) updateJudge(infoMap map[string]interface{}, pid string) {
+	tmpPro := MongoTool.FindById(ProjectColl, pid)
+
+	modifyProMap := make(map[string]interface{}) // 修改项目的字段
+	for k := range tmpPro{
+		if modifyMap, ok := infoMap["modifyinfo"].(map[string]interface{}); ok {
+			if modifyMap[k] != nil {
+				modifyProMap[k] = infoMap[k]
+			}
+		}
+	}
+	if len(modifyProMap) == 0 {
+		util.Debug("修改招标公告信息不需要修改项目信息字段", infoMap["_id"])
+		return
+	}
+	p.AllIdsMapLock.Lock()
+	_, ok := p.AllIdsMap[pid]
+	p.AllIdsMapLock.Unlock()
 	ids := []interface{}(tmpPro["ids"].(primitive.A))
-	infoList := []interface{}(tmpPro["list"].(primitive.A))
+	index, position := -1, 0		// index 0:第一个,1:中间,2:最后一个   position list中位置
+
 	for i, v := range ids {
-		if util.ObjToString(v) == util.ObjToString(infoMap["_id"]) {
+		if util.ObjToString(v) == mongodb.BsonIdToSId(infoMap["_id"]) {
+			position = i
 			if i == 0 {
 				index = 0
 			}else if i == len(ids) - 1 {
@@ -828,30 +740,47 @@ func (p *ProjectTask) updateJudge(infoMap map[string]interface{}, info *Info, pI
 			}
 		}
 	}
-	proListMap := infoList[index].(map[string]interface{})
-	modifyMap, f := modifyEle(proListMap, infoMap)
-	//projecthref字段
-	jsonData := infoMap["jsondata"].(map[string]interface{})
-	if jsonData != nil && jsonData["projecthref"] != nil {
-		proHref := jsonData["projecthref"].(string)
-		infoMap["projecthref"] = proHref
-		p.mapHrefLock.Lock()
-		pid := p.mapHref[proHref]
-		p.mapHrefLock.Unlock()
-		if pid == pInfoId {
-			p.modifyUpdate(pInfoId, index, info, infoMap, tmpPro, modifyMap)
-			return
+	if ok {
+		// 周期内
+		//projecthref字段
+		if infoMap["jsondata"] != nil {
+			jsonData := infoMap["jsondata"].(map[string]interface{})
+			if proHref, ok := jsonData["projecthref"].(string); ok {
+				p.mapHrefLock.Lock()
+				tempId := p.mapHref[proHref]
+				p.mapHrefLock.Unlock()
+				if pid == tempId {
+					p.modifyUpdate(pid, index, position, tmpPro, modifyProMap)
+				}else {
+					util.Debug("projecthref data id err---pid=" + pid, "---"+tempId)
+				}
+			}else {
+				f := modifyEle(modifyProMap)
+				if f {
+					//合并、修改
+					util.Debug("合并修改更新", "----------------------------")
+					p.mergeAndModify(pid, index, position, infoMap, tmpPro, modifyProMap)
+				} else {
+					//修改
+					util.Debug("修改更新", "----------------------------")
+					p.modifyUpdate(pid, index, position, tmpPro, modifyProMap)
+				}
+			}
+		}else {
+			f := modifyEle(modifyProMap)
+			if f {
+				//合并、修改
+				util.Debug("合并修改更新", "----------------------------")
+				p.mergeAndModify(pid, index, position, infoMap, tmpPro, modifyProMap)
+			} else {
+				//修改
+				util.Debug("修改更新", "----------------------------")
+				p.modifyUpdate(pid, index, position, tmpPro, modifyProMap)
+			}
 		}
-	}
-
-	if f {
-		//合并、修改
-		log.Println("合并修改更新", "----------------------------")
-		p.mergeAndModify(pInfoId, index, info, infoMap, tmpPro, modifyMap)
-	} else {
-		//修改
-		log.Println("修改更新", "----------------------------")
-		p.modifyUpdate(pInfoId, index, info, infoMap, tmpPro, modifyMap)
+	}else {
+		// 周期外
+		p.modifyUpdate(pid, index, position, tmpPro, infoMap)
 	}
 }
 
@@ -860,35 +789,26 @@ var Elements = []string{
 	"projectcode",
 	"buyer",
 	"agency",
-	"budget",
-	"bidamount",
 	"area",
 	"city",
 	"publishtime",
+	"toptype",
+	"subtype",
 }
 
 /**
-判断修改的字段是否是影响合并流程的要素字段
+	修改的字段
+	修改的字段是否是影响合并流程的要素字段
 */
-func modifyEle(tmpPro map[string]interface{}, tmp map[string]interface{}) (map[string]interface{}, bool) {
-	modifyMap := map[string]interface{}{}
-	for k := range tmpPro {
-		for k1 := range tmp {
-			if k == k1 && tmpPro[k] != tmp[k1] {
-				modifyMap[k] = tmp[k1]
-				break
-			}
-		}
-	}
-	for k := range modifyMap {
-		for _, str := range Elements {
-			if k == str {
-				return modifyMap, true
-			}
+func modifyEle(tmp map[string]interface{}) bool {
+	merge := false
+	for _, str := range Elements {
+		if tmp[str] != nil {
+			merge = true
+			break
 		}
 	}
-	delete(modifyMap, "_id")
-	return modifyMap, false
+	return merge
 }
 
 //补全位置信息

File diff suppressed because it is too large
+ 813 - 215
fullproject/src_v1/update.go


+ 37 - 12
fullproject/udp/src/main.go

@@ -7,22 +7,24 @@ import (
 	mu "mfw/util"
 	"net"
 	"os"
-	"time"
 )
 
-var ip, sid, eid, stype string
+var ip, sid, eid, stype, infoid, pid, udpataField string
 var p int
 
 func main() {
 
 	flag.StringVar(&sid, "sid", "", "开始id")
 	flag.StringVar(&eid, "eid", "", "结束id")
+	flag.StringVar(&infoid, "infoid", "", "修改的公告id")
+	flag.StringVar(&pid, "pid", "", "修改的项目id")
+	flag.StringVar(&udpataField, "field", "", "修改的字段信息")
 	flag.StringVar(&ip, "ip", "127.0.0.1", "ip")
 	flag.IntVar(&p, "p", 1482, "端口")
 	flag.StringVar(&stype, "stype", "", "stype")
 	flag.Parse()
 
-	if ip != "" && p > 0 && sid != "" && eid != "" {
+	if stype != ""{
 		addr := &net.UDPAddr{
 			IP:   net.ParseIP(ip),
 			Port: p,
@@ -35,16 +37,39 @@ func main() {
 				os.Exit(0)
 			}
 		})
-		m1 := map[string]interface{}{
-			"gtid":  sid,
-			"lteid": eid,
-			"stype": stype,
+		if stype == "updatePro" {
+			udpatamap := make(map[string]interface{})
+			err := json.Unmarshal([]byte(udpataField), &udpatamap)
+			if err == nil {
+				m1 := map[string]interface{}{
+					"pid":  pid,
+					"updateField": udpatamap,
+					"stype": stype,
+				}
+				by, _ := json.Marshal(m1)
+				log.Println(string(by))
+				udp.WriteUdp(by, mu.OP_TYPE_DATA, addr)
+			}else {
+				log.Println(err)
+			}
+		}else if stype == "deleteInfo" || stype == "updateInfo" {
+			m1 := map[string]interface{}{
+				"infoid":  infoid,
+				"stype": stype,
+			}
+			by, _ := json.Marshal(m1)
+			log.Println(string(by))
+			udp.WriteUdp(by, mu.OP_TYPE_DATA, addr)
+		}else if sid != "" && eid != "" {
+			m1 := map[string]interface{}{
+				"gtid":  sid,
+				"lteid": eid,
+				"stype": stype,
+			}
+			by, _ := json.Marshal(m1)
+			log.Println(string(by))
+			udp.WriteUdp(by, mu.OP_TYPE_DATA, addr)
 		}
-
-		by, _ := json.Marshal(m1)
-		log.Println(string(by))
-		udp.WriteUdp(by, mu.OP_TYPE_DATA, addr)
-		time.Sleep(30 * time.Second)
 	} else {
 		flag.PrintDefaults()
 		log.Println("参数错误.")

+ 1 - 1
qyxy_change/qy_baidu/task.go

@@ -18,7 +18,7 @@ func TimeTask() {
 	c := cron.New()
 	cronstrBd := "0 0 */" + fmt.Sprint(BdTaskTime) + " * * ?" 		//每TaskTime小时执行一次
 	//cronstr := "0 0 " + fmt.Sprint(TaskTime) + " * * ?"			//每天TaskTime跑一次
-	cronstrPa := "0 0 15 ? * " + fmt.Sprint(PaTaskTime) 			//凭安增量数据每周跑一次
+	cronstrPa := "0 0 15 ? * " + fmt.Sprint(PaTaskTime) 			//凭安增量数据每周跑一次
 	_ = c.AddFunc(cronstrBd, func() { GetBdData() })
 	_ = c.AddFunc(cronstrPa, func() { GetPaData() })
 	c.Start()

+ 10 - 10
udpcreateindex/src/config.json

@@ -28,18 +28,18 @@
         "type": "buyer"
     },
     "biddingback": {
-        "db": "qfw",
+        "db": "qfw_data",
         "collect": "bidding",
-        "index": "bidding",
+        "index": "bidding_v1",
         "type": "bidding"
     },
     "bidding": {
-        "db": "mxs",
-        "collect": "test",
-        "index": "bidding_v5",
+        "db": "qfw_data",
+        "collect": "bidding",
+        "index": "bidding_v1",
         "type": "bidding",
-        "extractdb": "mxs",
-        "extractcollect": "extract",
+        "extractdb": "qfw_data",
+        "extractcollect": "bidding_1",
         "indexfields":[ 
         "buyerzipcode","winnertel","winnerperson","contractcode","winneraddr","agencyaddr","buyeraddr","signaturedate","projectperiod","projectaddr","agencytel","agencyperson","buyerperson","agency","projectscope","projectcode","bidopentime","supervisorrate","buyertel","bidamount","winner","buyer","budget","projectname","bidstatus","buyerclass","topscopeclass","s_topscopeclass","s_subscopeclass","area","city","district","s_winner","_id","title","detail","site","comeintime","href","infoformat","publishtime","s_sha","spidercode","subtype","toptype","projectinfo","purchasing","purchasinglist","filetext","channel","winnerorder"
         ],
@@ -47,8 +47,8 @@
         "fields": "buyerzipcode,winnertel,winnerperson,contractcode,winneraddr,agencyaddr,buyeraddr,signaturedate,projectperiod,projectaddr,agencytel,agencyperson,buyerperson,agency,projectscope,projectcode,bidopentime,supervisorrate,buyertel,bidamount,winner,buyer,budget,projectname,buyerclass,topscopeclass,s_topscopeclass,area,city,district,s_winner,toptype,subtype,subscopeclass,s_subscopeclass,dataging,winnerorder",
         "projectinfo":"approvecode,approvecontent,approvestatus,approvetime,approvedept,approvenumber,projecttype,approvecity", 
      	"projectinfomap":{"approvecode":"string","approvecontent":"string","approvestatus":"string","approvetime":"string","approvedept":"string","approvenumber":"string","projecttype":"string","approvecity":"string"},
-        "purchasinglist": "itemname,model,unitname,number",
-        "purchasinglistmap":{"itemname":"string","model":"string","unitname":"string","number":"float64"},
+        "purchasinglist": "itemname,brandname,model,unitname,number",
+        "purchasinglistmap":{"itemname":"string","brandname":"string","model":"string","unitname":"string","number":"float64"},
         "winnerorder": "sort,sortstr,entname",
         "winnerordermap": {"sort":"int","sortstr":"string","entname":"string"},
         "multiIndex": ""
@@ -100,7 +100,7 @@
 		}
     },
     "elastic": {
-        "addr": "http://192.168.3.128:9800",
+        "addr": "http://192.168.3.11:9800",
         "index": "bidding",
         "itype": "bidding",
         "pool": 12

+ 2 - 2
udpcreateindex/src/main.go

@@ -46,7 +46,7 @@ var (
 
 func init() {
 	util.ReadConfig(&Sysconfig)
-	inits()
+	//inits()
 	go checkMapJob()
 	detailLength = util.IntAllDef(Sysconfig["detaillength"], 50000)
 	fileLength = util.IntAllDef(Sysconfig["filelength"], 50000)
@@ -182,7 +182,7 @@ func init() {
 }
 
 func main() {
-	go task_index()
+	//go task_index()
 	updport := Sysconfig["udpport"].(string)
 	udpclient = mu.UdpClient{Local: updport, BufSize: 1024}
 	udpclient.Listen(processUdpMsg)

+ 7 - 9
udps/main.go

@@ -10,8 +10,6 @@ import (
 	qutil "qfw/util"
 	"qfw/util/mongodb"
 	"time"
-
-	"gopkg.in/mgo.v2/bson"
 )
 
 var startDate, endDate string
@@ -32,13 +30,13 @@ func main() {
 	flag.StringVar(&q, "q", "", "q查询语句\"{'':''}\",有q就不要gtid,lteid")
 	flag.StringVar(&param, "param", "", "param,生信息发布或其他索引时用双引号套单引号\"{'mgoaddr':'','d':'','c':'','index':'','type':''}\"")
 	flag.Parse()
-	if startDate != "" || endDate != "" {
-		start, _ := time.ParseInLocation(qutil.Date_Short_Layout, startDate, time.Local)
-		end, _ := time.ParseInLocation(qutil.Date_Short_Layout, endDate, time.Local)
-		id1 = qutil.BsonIdToSId(bson.NewObjectIdWithTime(start))
-		id2 = qutil.BsonIdToSId(bson.NewObjectIdWithTime(end))
-		log.Println(id1, id2)
-	}
+	//if startDate != "" || endDate != "" {
+	//	start, _ := time.ParseInLocation(qutil.Date_Short_Layout, startDate, time.Local)
+	//	end, _ := time.ParseInLocation(qutil.Date_Short_Layout, endDate, time.Local)
+	//	id1 = qutil.BsonIdToSId(bson.NewObjectIdWithTime(start))
+	//	id2 = qutil.BsonIdToSId(bson.NewObjectIdWithTime(end))
+	//	log.Println(id1, id2)
+	//}
 	if ip != "" && p > 0 && ((id1 != "" && id2 != "") || (q != "" || tmptime > 0)) {
 		toadd := &net.UDPAddr{
 			IP:   net.ParseIP(ip),

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