ソースを参照

Merge branch 'develop' of 192.168.3.17:zhanghongbo/qfw into develop

wangshan 9 年 前
コミット
43bc8e2b0d

+ 5 - 3
common/src/qfw/util/encrypt_test.go

@@ -23,11 +23,13 @@ func Test_sim(t *testing.T) {
 	//s2 := "GyUlIhEDDjcfWCAyIl4xBkgsERYiLAwZLCg9VkkbLj4zMRYDPRs5ATVZOxccPAkzFxw7CCpEFj41QlRAQFdFXlRMQVZcHRIbBgsWBxYcFQwEBwoa"
 
 	//s3 := "RFYoal5bCFdXWQoQB0JuWwlXAQFZCUVfFj4JMFtT"
-	s4 := "oJULtwzXo6EFV1Ah-XeyRBimXGM8"
+	s4 := "oHwE_wGFScDzGRPAWNaT0ZE9vDn8"
 	se := SimpleEncrypt{Key: "topnet"}
-	log.Println("=====", se.EncodeString(s4+",uid,111,swordfishaction"))
+	log.Println("=====", se.EncodeString(s4+",uid,111,rssset"))
 	log.Println("=====", se.EncodeString(",1349385977,ASD"))
-	log.Println("---", se.DecodeString("GyUlIhEDSGheAzEpJl8kHB9oVEwmLRkDPTN/CB1AHQtcX1RFHkNGWgYLFgcWHFNTRVwbAQ=="))
+	//log.Println("---", se.DecodeString("GyUlIhEDSGheAzEpJl8kHB9oVEwmLRkDPTN/CB1AHQtcX1RFHkNGWgYLFgcWHFNTRVwbAQ=="))
+	log.Println("---", se.DecodeString("GycHKzoDMykjDSEOMz0gLzI6FTtANCBNAiseVkkBHQtcX1FCRlpCV1JDR0MHFhUBBwccBxYA"))
+
 	now := time.Now()
 	tom := time.Date(now.Year(), now.Month(), now.Day(), 18, 0, 0, 0, time.Local)
 	log.Println(now.Unix(), tom.Unix(), 1453686600-1453716000)

+ 27 - 5
common/src/qfw/util/mongodb/mongodbSim.go

@@ -2,12 +2,13 @@ package mongodb
 
 import (
 	"fmt"
-	mgo "gopkg.in/mgo.v2"
-	. "gopkg.in/mgo.v2/bson"
 	"log"
 	"qfw/util"
 	"strings"
 	"time"
+
+	mgo "gopkg.in/mgo.v2"
+	. "gopkg.in/mgo.v2/bson"
 )
 
 type MongodbSim struct {
@@ -159,10 +160,11 @@ func (m *MongodbSim) FindOneByField(c string, query interface{}, fields interfac
 }
 
 //查询单条对象
-func (m *MongodbSim) FindById(c string, query string, fields interface{}) *map[string]interface{} {
+func (m *MongodbSim) FindById(c string, query string, fields interface{}) (*map[string]interface{}, bool) {
 	defer util.Catch()
 	sess := m.GetMgoConn()
 	var res map[string]interface{}
+	b := false
 	if sess != nil {
 		defer m.DestoryMongoConn(sess)
 		res = make(map[string]interface{})
@@ -172,8 +174,9 @@ func (m *MongodbSim) FindById(c string, query string, fields interface{}) *map[s
 		if nil != err {
 			log.Println("FindByIdError", err)
 		}
+		b = true
 	}
-	return &res
+	return &res, b
 }
 
 //底层查询方法
@@ -196,8 +199,27 @@ func (m *MongodbSim) Find(c string, query interface{}, order interface{}, fields
 		}
 		if nil != err {
 			log.Println("FindError", err)
-		} 
+		}
 		b = true
 	}
 	return &res, b
 }
+
+//删除对象
+func (m *MongodbSim) Del(c string, query interface{}) bool {
+	defer util.Catch()
+	sess := m.GetMgoConn()
+	b := false
+	if sess != nil {
+		defer m.DestoryMongoConn(sess)
+		coll := sess.DB(m.DbName).C(c)
+		_, err := coll.RemoveAll(ObjToM(query))
+		if nil != err {
+			log.Println("DelError", err)
+			b = false
+		} else {
+			b = true
+		}
+	}
+	return b
+}

+ 5 - 5
push/src/qfw/push/dopush/dopush.go

@@ -117,14 +117,14 @@ func (p *Pjob) EachInfoForView(mopenid, words string) map[string]interface{} {
 	LDB := listdb.GetDb(p.Stype)
 	LDB.Lock.Lock()
 L1:
-	for e := LDB.DB.Back(); e != nil; e = e.Prev() {
-		tmp := e.Value.(*map[string]interface{})
+	for k := LDB.DB.Len() - 1; k > -1; k-- {
+		tmp := (*LDB.DB)[k]
 		title := util.ObjToString((*tmp)["title"])
 		if title != "" {
 			//返回匹配到的词组
 			res := p.Dfa.Analy(title)
 			if len(res) > 0 {
-				province := (*tmp)["area"].(string)
+				province := util.ObjToString((*tmp)["area"])
 				provinceVal := push.GetChoiceCode(province)
 				for _, v := range res {
 					//根据关键词返回用户指针
@@ -234,7 +234,7 @@ L1:
 			//返回匹配到的词组
 			res := dfas.Analy(title)
 			if len(res) > 0 {
-				province := (*tmp)["area"].(string)
+				province := util.ObjToString((*tmp)["area"])
 				provinceVal := push.GetChoiceCode(province)
 				if "A" != province {
 					(*tmp)["title"] = `[<span class='area'>` + province + `</span>]` + title
@@ -318,7 +318,7 @@ func Send(k *push.MemberInterest, v *list.List, now time.Time, TITLEA, ShortTitl
 			i++
 			if i == 1 {
 				firstTitle = re.ReplaceAllString(title, "$1")
-				lastInfoDate = k2["publishtime"].(int64)
+				lastInfoDate = util.Int64All(k2["publishtime"])
 			}
 			str += "<div class='tslist'><span class='xh'>" + fmt.Sprintf("%d", i) + ".</span><a class='bt' target='_blank' sid='" + util.BsonIdToSId(k2["_id"]) + "' href='" + k2["href"].(string) + "'>" + title + "</a></div>"
 			publishTimes[strconv.Itoa(i)] = k2["publishtime"]

+ 24 - 9
push/src/qfw/push/listdb/listdb.go

@@ -1,17 +1,31 @@
 package listdb
 
 import (
-	"container/list"
 	"log"
 	"qfw/util"
 	"qfw/util/mongodb"
+	"sort"
 	"sync"
 	"time"
 )
 
+type arr []*map[string]interface{}
+
+func (a *arr) Len() int {
+	return len(*a)
+}
+func (a *arr) Less(i, j int) bool {
+	return util.Int64All((*(*a)[i])["publishtime"]) < util.Int64All((*(*a)[j])["publishtime"])
+}
+func (a *arr) Swap(i, j int) {
+	tmp := (*a)[i]
+	(*a)[i] = (*a)[j]
+	(*a)[j] = tmp
+}
+
 type ListDB struct {
 	Lock      *sync.Mutex
-	DB        *list.List
+	DB        *arr
 	Stype     string
 	timestamp int64
 }
@@ -31,7 +45,7 @@ var Bid, Tender *ListDB
 func Inits() {
 	Bid = &ListDB{
 		Lock:      new(sync.Mutex),
-		DB:        list.New(),
+		DB:        &arr{},
 		Stype:     "bid",
 		timestamp: 0,
 	}
@@ -39,7 +53,7 @@ func Inits() {
 
 	Tender = &ListDB{
 		Lock:      new(sync.Mutex),
-		DB:        list.New(),
+		DB:        &arr{},
 		Stype:     "tender",
 		timestamp: 0,
 	}
@@ -71,24 +85,25 @@ func (l *ListDB) update() {
 		//此处不排序,谁查谁排序(不排序会造成发布时间乱序)
 		query := session.DB("qfw").C("bidding").Find(q).Select(fields).Sort("publishtime").Iter()
 		for tmp := new(map[string]interface{}); query.Next(tmp); {
-			province := (*tmp)["area"].(string)
-			if "A" != province {
+			province := util.ObjToString((*tmp)["area"])
+			if "A" != province || province == "" {
 				title := util.ObjToString((*tmp)["title"])
 				(*tmp)["title"] = `[<span class='area'>` + province + `</span>]` + title
 			}
-			l.DB.PushBack(tmp)
+			*l.DB = append(*l.DB, tmp)
 			last := util.Int64All((*tmp)["comeintime"])
 			if last > l.timestamp {
 				l.timestamp = last
 			}
-			if l.DB.Len() > 120000 {
-				l.DB.Remove(l.DB.Front())
+			if l.DB.Len() > 200000 {
+				*l.DB = (*l.DB)[l.DB.Len()-200000:]
 			}
 			tmp = new(map[string]interface{})
 		}
 	}, func(e interface{}) {
 		log.Println(e)
 	})
+	sort.Sort(l.DB)
 	l.Lock.Unlock()
 	time.AfterFunc(10*time.Minute, l.update)
 }

+ 94 - 0
push/src/qfw/push/listdb/listdb.go.back

@@ -0,0 +1,94 @@
+package listdb
+
+import (
+	"container/list"
+	"log"
+	"qfw/util"
+	"qfw/util/mongodb"
+	"sync"
+	"time"
+)
+
+type ListDB struct {
+	Lock      *sync.Mutex
+	DB        *list.List
+	Stype     string
+	timestamp int64
+}
+
+var fields map[string]interface{} = map[string]interface{}{
+	"type":        1,
+	"comeintime":  1,
+	"publishtime": 1,
+	"title":       1,
+	"area":        1,
+	"href":        1,
+	"areaval":     1,
+}
+
+var Bid, Tender *ListDB
+
+func Inits() {
+	Bid = &ListDB{
+		Lock:      new(sync.Mutex),
+		DB:        list.New(),
+		Stype:     "bid",
+		timestamp: 0,
+	}
+	go Bid.update()
+
+	Tender = &ListDB{
+		Lock:      new(sync.Mutex),
+		DB:        list.New(),
+		Stype:     "tender",
+		timestamp: 0,
+	}
+	go Tender.update()
+}
+
+func GetDb(stype string) *ListDB {
+	switch stype {
+	case "tender":
+		return Tender
+	case "bid":
+		return Bid
+	default:
+		return nil
+	}
+}
+
+func (l *ListDB) update() {
+	l.Lock.Lock()
+	util.Try(func() {
+		q := map[string]interface{}{
+			"type": l.Stype,
+			"comeintime": map[string]interface{}{
+				"$gt": l.timestamp,
+			},
+		}
+		session := mongodb.GetMgoConn()
+		defer mongodb.DestoryMongoConn(session)
+		//此处不排序,谁查谁排序(不排序会造成发布时间乱序)
+		query := session.DB("qfw").C("bidding").Find(q).Select(fields).Sort("publishtime").Iter()
+		for tmp := new(map[string]interface{}); query.Next(tmp); {
+			province := (*tmp)["area"].(string)
+			if "A" != province {
+				title := util.ObjToString((*tmp)["title"])
+				(*tmp)["title"] = `[<span class='area'>` + province + `</span>]` + title
+			}
+			l.DB.PushBack(tmp)
+			last := util.Int64All((*tmp)["comeintime"])
+			if last > l.timestamp {
+				l.timestamp = last
+			}
+			if l.DB.Len() > 120000 {
+				l.DB.Remove(l.DB.Front())
+			}
+			tmp = new(map[string]interface{})
+		}
+	}, func(e interface{}) {
+		log.Println(e)
+	})
+	l.Lock.Unlock()
+	time.AfterFunc(10*time.Minute, l.update)
+}