Эх сурвалжийг харах

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

有福 8 жил өмнө
parent
commit
a4efb9fac7

+ 5 - 1
common/src/github.com/go-xweb/xweb/action.go

@@ -82,7 +82,11 @@ func (c *Action) Url() string {
 
 // Site returns base site url as scheme://domain type.
 func (c *Action) Site() string {
-	return c.Scheme() + "://" + c.Domain()
+	schecm, _ := c.App.GetConfig("schecm").(string)
+	if schecm == "" {
+		schecm = c.Scheme()
+	}
+	return schecm + "://" + c.Domain()
 }
 
 // Scheme returns request scheme as "http" or "https".

+ 10 - 1
common/src/qfw/util/common.go

@@ -279,7 +279,8 @@ func ObjToString(old interface{}) string {
 	if nil == old {
 		return ""
 	} else {
-		return old.(string)
+		r, _ := old.(string)
+		return r
 	}
 }
 
@@ -441,6 +442,14 @@ func BsonIdToSId(uid interface{}) string {
 	}
 }
 
+func StringTOBsonId(id string) (bid bson.ObjectId) {
+	defer Catch()
+	if id != "" {
+		bid = bson.ObjectIdHex(id)
+	}
+	return
+}
+
 func GetSubDay(t1 int64) int {
 	tt1 := time.Unix(t1, 0)
 	tt2 := time.Now()

+ 8 - 0
common/src/qfw/util/elastic/elasticutil_test.go

@@ -33,6 +33,14 @@ func Test_save(t *testing.T) {
 	//log.Println("保存结果", b, DelById("test", "test", bid.String()))
 }
 
+func Test_GoQ(t *testing.T) {
+	InitElastic("http://192.168.3.18:9800")
+	//"$中不支持range查询"
+	//res := GetPage("bidding", "bidding", `{"$or":[{"TERM_toptype":"拟建"},{"TERM_toptype":"结果"}],"extracttype":{"$gt":1},"TERM_area": "广东","$and":[{"TERM_area": "广东"}{"TERM_area": "广东"}]}`, `{"id":-1}`, `"title","toptype"`, 0, 50)
+	res := GetPage("bidding", "bidding", `{"$or":[{"TERM_toptype":"拟建"},{"TERM_toptype":"结果"}]}`, `{"publishtime":-1}`, `"title","toptype","publishtime"`, 0, 50)
+	log.Println(res)
+}
+
 func Test_get(t *testing.T) {
 	InitElastic("http://192.168.3.14:9800")
 	a := make(chan int, 1)

+ 2 - 2
common/src/qfw/util/encrypt_test.go

@@ -12,9 +12,9 @@ import (
 
 //加密解密测试
 func TestEncrypt(t *testing.T) {
-	se := &SimpleEncrypt{Key: "topnet"}
+	se := &SimpleEncrypt{Key: "topnet2015topnet2015"}
 	log.Println(GetSubDay(1453683600 + 8*3600))
-	log.Println(se.EncodeString("oJULtw0Cv3nuo4jUb8wpAaR-g2Fk,ff,ff,swordfishaction"))
+	log.Println(se.EncodeString("582bf5de9386b5d8f9805adf"))
 	log.Println(se.DecodeString("GyUlIhEDDjcfWCAyIl4xBkgsERYiLAwZLCg9VkkSEkMWCEkHAwACCgMdBwcRDREdGwE="))
 }
 

+ 11 - 0
common/src/qfw/util/fsw/fsw_test.go

@@ -12,3 +12,14 @@ func TestMatch(t *testing.T) {
 	ret2 := Repl("这是什么啊,怎么会有胡锦涛的名字,还有江泽民,我去,什么玩意")
 	log.Println(ret2)
 }
+
+func TestAdd(t *testing.T) {
+	tmp := NewFswScan()
+
+	tmp.AddWord("人民")
+	tmp.AddWord("共和国")
+	tmp.AddWords([]string{"解放军", "招标人"})
+	log.Println(tmp.FswDictionary)
+	f, ok := tmp.Filter("这个公司的招标人是XXX")
+	log.Println("识别结果", f, ok)
+}

+ 90 - 0
common/src/qfw/util/fsw/fswex.go

@@ -0,0 +1,90 @@
+package fsw
+
+//敏感词过滤,扩展,类似查字典
+type Fsw struct {
+	IsStart bool
+	IsEnd   bool
+	Char    string          //字符
+	Link    map[string]*Fsw //下级对象
+}
+
+//
+type FswScan struct {
+	FswDictionary map[string]*Fsw //
+}
+
+//
+func NewFswScan() *FswScan {
+	return &FswScan{
+		FswDictionary: make(map[string]*Fsw),
+	}
+}
+
+//追加
+func (fsw *FswScan) AddWord(word string) {
+	var cfsw *Fsw
+	rs := []rune(word)
+	for i, wv := range rs {
+		kc := string(wv)
+		if i == 0 { //初始化
+			if v, ok := fsw.FswDictionary[kc]; ok {
+				cfsw = v
+			} else {
+				cfsw = &Fsw{
+					Char:    kc,
+					IsStart: true,
+					Link:    make(map[string]*Fsw),
+				}
+				fsw.FswDictionary[kc] = cfsw
+			}
+			continue
+		}
+		//查询
+		if v, ok := (*cfsw).Link[kc]; ok {
+			cfsw = v
+		} else {
+			tmp := &Fsw{
+				Char:    kc,
+				IsStart: true,
+				Link:    make(map[string]*Fsw),
+			}
+			(*cfsw).Link[kc] = tmp
+			cfsw = tmp
+		}
+		//判断结束
+	}
+	(*cfsw).IsEnd = true
+}
+
+//
+func (fsw *FswScan) AddWords(words []string) {
+	for _, v := range words {
+		fsw.AddWord(v)
+	}
+}
+
+/*按字典查找
+匹配模式:最大匹配,最小匹配,
+目前是最小匹配
+*/
+func (fsw *FswScan) Filter(src string) (string, bool) {
+	rs := []rune(src)
+	for i := 0; i < len(rs); i++ {
+		char := string(rs[i])
+		if f, ok := fsw.FswDictionary[char]; ok { //某1个字匹配上了
+			for j := i + 1; j < len(rs); j++ {
+				char = string(rs[j])
+				if v, ok := f.Link[char]; ok {
+					f = v
+					if v.IsEnd { //找到了
+						return string(rs[i : j+1]), true
+					}
+				} else {
+					break
+				}
+			}
+		}
+
+	}
+	return "", false
+}

+ 15 - 0
common/src/qfw/util/simpleencrypt.go

@@ -2,6 +2,7 @@ package util
 
 import (
 	"encoding/base64"
+	"encoding/hex"
 )
 
 type SimpleEncrypt struct {
@@ -15,6 +16,13 @@ func (s *SimpleEncrypt) EncodeString(str string) string {
 	return base64.StdEncoding.EncodeToString(bs)
 }
 
+//
+func (s *SimpleEncrypt) Encode2Hex(str string) string {
+	bs := []byte(str)
+	s.doEncode(&bs)
+	return hex.EncodeToString(bs)
+}
+
 //解密String
 func (s *SimpleEncrypt) DecodeString(str string) string {
 	bs, _ := base64.StdEncoding.DecodeString(str)
@@ -22,6 +30,13 @@ func (s *SimpleEncrypt) DecodeString(str string) string {
 	return string(bs)
 }
 
+//
+func (s *SimpleEncrypt) Decode4Hex(str string) string {
+	bs, _ := hex.DecodeString(str)
+	s.doEncode(&bs)
+	return string(bs)
+}
+
 //加密
 func (s *SimpleEncrypt) Encode(data *[]byte) {
 	s.doEncode(data)

+ 3 - 0
core/src/qfw/manage/article.go

@@ -37,6 +37,8 @@ type Article struct {
 	myFeedbacks xweb.Mapper `xweb:"/member/feedback/myFeedbacks"`
 }
 
+var se = util.SE
+
 //添加文章
 func (a *Article) Addarticle() error {
 	if a.GetSession("loginName") == nil {
@@ -144,6 +146,7 @@ func (a *Article) Updatearticle() error {
 			redis.Del("other", "/front/webhelpcontent/"+_id+".html")
 			redis.Del("other", "/front/webindexcontent/"+_id+".html")
 			redis.Del("other", "/front/weixincontent/"+_id)
+			redis.Del("other", "jyblog"+se.EncodeString(_id))
 			redis.Del("other", "/")
 			redis.Del("other", "latestNews") //最新消息
 		} else {