Răsfoiți Sursa

Merge branch 'dev2.0' of 192.168.3.17:qmx/jy into dev2.0

hebing
liuxiaolu 8 ani în urmă
părinte
comite
39513ea416
49 a modificat fișierele cu 3090 adăugiri și 749 ștergeri
  1. 2 1
      src/config.json
  2. 97 0
      src/jfw/front/entsearch.go
  3. 0 46
      src/jfw/front/entserach.go
  4. 73 96
      src/jfw/front/search.go
  5. 119 27
      src/jfw/front/supsearch.go
  6. 56 38
      src/jfw/front/swordfish.go
  7. 1 1
      src/jfw/jylabutil/entsearch.go
  8. 1 1
      src/jfw/modules/behaviorcollect/README.md
  9. 603 0
      src/jfw/modules/entsesearch/.idea/workspace.xml
  10. 7 7
      src/jfw/modules/followent/src/followent/followent.go
  11. 0 0
      src/jfw/modules/push/src/config.json
  12. 47 30
      src/jfw/modules/push/src/qfw/push/dopush/dopush.go
  13. 3 1
      src/jfw/modules/push/src/qfw/push/dopush/dopushes.go
  14. 115 0
      src/jfw/modules/push/src/qfw/push/dopush/excel.go
  15. 16 0
      src/jfw/modules/pushent/src/config.json
  16. 11 0
      src/jfw/modules/pushent/src/config/config.go
  17. 71 0
      src/jfw/modules/pushent/src/filterdata/filterdata.go
  18. 14 0
      src/jfw/modules/pushent/src/followpush/config.json
  19. 138 0
      src/jfw/modules/pushent/src/followpush/datastruct.go
  20. 44 0
      src/jfw/modules/pushent/src/followpush/followpush.go
  21. 18 0
      src/jfw/modules/pushent/src/followpush/followpush_test.go
  22. 233 0
      src/jfw/modules/pushent/src/followpush/push.go
  23. 46 0
      src/jfw/modules/pushent/src/main.go
  24. 27 0
      src/jfw/modules/pushent/src/main_test.go
  25. 33 0
      src/jfw/modules/pushent/src/rpcpush/findData.go
  26. 21 0
      src/jfw/modules/pushent/src/rpcpush/rpcpush.go
  27. 23 0
      src/jfw/modules/pushent/src/timetask/clearredis.go
  28. 18 0
      src/jfw/modules/pushent/src/tools/mongo.go
  29. 1 0
      src/jfw/modules/pushent/src/tools/tools.go
  30. 76 0
      src/jfw/modules/pushent/src/weixinrpc/weixinrpc.go
  31. 5 3
      src/jfw/modules/pushproject/src/followpush/push.go
  32. 3 1
      src/seo.json
  33. 11 8
      src/web/staticres/css/dev2/biddingSearch.css
  34. 64 0
      src/web/staticres/css/dev2/biddingSearch1.css
  35. 1 1
      src/web/staticres/css/dev2/reset_pc.css
  36. 71 45
      src/web/staticres/css/search/superSearch.css
  37. 0 0
      src/web/staticres/images/biddingSearch/labbkimg.png
  38. 0 0
      src/web/staticres/images/biddingSearch/layclose.png
  39. BIN
      src/web/staticres/images/search/history.png
  40. BIN
      src/web/staticres/images/search/history_clean.png
  41. BIN
      src/web/staticres/images/search/msgset.png
  42. 14 5
      src/web/staticres/js/biddingSearch.js
  43. 358 119
      src/web/staticres/js/superSearch.js
  44. 81 51
      src/web/staticres/wxswordfish/superSearch.js
  45. 202 55
      src/web/templates/pc/biddingsearch_enterprise.html
  46. 103 128
      src/web/templates/pc/supsearch.html
  47. 110 13
      src/web/templates/weixin/search/mainSearch.html
  48. 153 71
      src/web/templates/weixin/search/superSearch.html
  49. 0 1
      src/web/templates/weixin/wxsearchlist.html

+ 2 - 1
src/config.json

@@ -99,5 +99,6 @@
             "bodymsg": "剑鱼-招标信息打赏",
             "detailmsg": "招标推送信息[%s] 打赏%s元钱"
         }
-    }
+    },
+	"industry":"分类综合测试"
 }

+ 97 - 0
src/jfw/front/entsearch.go

@@ -0,0 +1,97 @@
+package front
+
+import (
+	"fmt"
+	"jfw/jylabutil"
+	"log"
+	//"math/rand"
+	"qfw/util"
+	//"qfw/util/redis"
+
+	"time"
+
+	"jfw/jyutil"
+	//"regexp"
+	"strconv"
+	//"strings"
+	//"sync"
+
+	"github.com/go-xweb/xweb"
+
+	//. "github.com/thinxer/go-word2vec"
+	//"gopkg.in/mgo.v2/bson"
+)
+
+type Entsearch struct {
+	*xweb.Action
+	bidsearchforent  xweb.Mapper `xweb:"/jylab/bidsearchforent"`
+	pcSearchZbqyAjax xweb.Mapper `xweb:"/jylab/pcSearchZbqyAjax"`
+}
+
+func init() {
+	xweb.AddAction(&Entsearch{})
+}
+
+func (e *Entsearch) Bidsearchforent() error {
+	defer util.Catch()
+	searchvalue := e.GetString("searchvalue")
+	area := e.GetString("area")
+	minprice, _ := strconv.Atoi(e.GetString("minprice"))
+	maxprice, _ := strconv.Atoi(e.GetString("maxprice"))
+
+	fmt.Println("searchvalue==", searchvalue)
+	fmt.Println("area==", area)
+	fmt.Println("lower==", minprice)
+	fmt.Println("upper==", maxprice)
+
+	if minprice == 0 {
+		e.T["minprice"] = ""
+	} else {
+		e.T["minprice"] = minprice
+	}
+	if maxprice == 0 {
+		e.T["maxprice"] = ""
+	} else {
+		e.T["maxprice"] = maxprice
+	}
+
+	e.T["searchvalue"] = searchvalue
+	e.T["area"] = area
+
+	log.Println("-------中标企业搜索:")
+
+	list := []map[string]interface{}{}
+	list = jylabutil.GetProjectByEntName("", "", 0, 0, 1, 10)
+	jyutil.BidListConvert("", &list)
+
+	for k, v := range list {
+		v["k"] = k + 1
+		t1 := time.Unix(util.Int64All(v["createtime"]), 0)
+		v["time1"] = util.TimeDiff(t1)
+		t2 := time.Unix(util.Int64All(v["zbtime"]), 0)
+		v["time2"] = util.TimeDiff(t2)
+
+		//fmt.Println(v["industry"])
+		//for i,z := range v{
+		//	fmt.Println(i)
+		//	fmt.Println(z)
+		//}
+	}
+	e.T["list"] = list
+	return e.Render("/pc/biddingsearch_enterprise.html", &e.T)
+}
+func (e *Entsearch) PcSearchZbqyAjax() error {
+	defer util.Catch()
+	searchvalue := e.GetString("searchvalue")
+	area := e.GetString("area")
+	minprice, _ := strconv.Atoi(e.GetString("minprice"))
+	maxprice, _ := strconv.Atoi(e.GetString("maxprice"))
+
+	fmt.Println("searchvalue==", searchvalue)
+	fmt.Println("area==", area)
+	fmt.Println("lower==", minprice)
+	fmt.Println("upper==", maxprice)
+
+	return nil
+
+}

+ 0 - 46
src/jfw/front/entserach.go

@@ -1,46 +0,0 @@
-package front
-
-import (
-	//"fmt"
-	"log"
-	//"qfw/util"
-	//"qfw/util/redis"
-	//"github.com/go-xweb/xweb"
-	//"time"
-	//"math/rand"
-	"jfw/jylabutil"
-
-	//"regexp"
-	//"strconv"
-	//"strings"
-	//"sync"
-
-	//. "github.com/thinxer/go-word2vec"
-	//"gopkg.in/mgo.v2/bson"
-	"github.com/go-xweb/xweb"
-)
-
-type Entsearch struct {
-	*xweb.Action
-	bidsearchforent xweb.Mapper `xweb:"/jylab/bidsearchforent"`
-}
-
-func init() {
-	xweb.AddAction(&Entsearch{})
-}
-
-func (m *Entsearch) Bidsearchforent() error {
-	log.Println("-------中标企业搜索:")
-
-	list := []map[string]interface{}{}
-	list = jylabutil.GetProjectByEntName("","",0,0,1,10)
-	m.T["list"] = list
-	//for k,v := range list{
-	//	fmt.Println(k)
-	//	for i,z := range v{
-	//		fmt.Println(i)
-	//		fmt.Println(z)
-	//	}
-	//}
-	return m.Render("/pc/biddingsearch_enterprise.html", &m.T)
-}

+ 73 - 96
src/jfw/front/search.go

@@ -1,13 +1,13 @@
 package front
 
 import (
-	"fmt"
-
 	"github.com/go-xweb/xweb"
 	"strings"
 	"qfw/util"
 	"qfw/util/redis"
 	"jfw/wx"
+	"gopkg.in/mgo.v2/bson"
+	"fmt"
 )
 
 type Search struct {
@@ -21,123 +21,100 @@ func init() {
 	xweb.AddAction(&Search{})
 }
 func (s *Search) MainSearch() error {
-	fmt.Println("------主页面搜索------")
-	s.T["name"] = "主页面搜索"
+	if userid := s.GetSession("userId"); userid != nil {
+		history := redis.GetStr("other", "s_"+userid.(string))
+		arrs := strings.Split(history, ",")
+		if history == "" {
+			arrs = make([]string, 0)
+		}
+		l := len(arrs) - 1
+		for i := 0; i < len(arrs)/2; i++ {
+			tmp := arrs[l-i]
+			arrs[l-i] = arrs[i]
+			arrs[i] = tmp
+		}
+		s.T["history"] = arrs
+		one, _ := mongodb.FindOneByField("user", bson.M{"_id": bson.ObjectIdHex(userid.(string))}, `{"o_jy":1}`)
+		if one != nil && len(*one) > 0 {
+			o_jy, _ := (*one)["o_jy"].(map[string]interface{})
+			a_key, _ := o_jy["a_key"].([]interface{})
+			var keys []interface{}
+			for _, v := range a_key {
+				keyMap, _ := v.(map[string]interface{})
+				key, _ := keyMap["key"].([]interface{})
+				keys = append(keys, key)
+			}
+			s.T["msgset"] = keys
+		}
+	}
 	return s.Render("/weixin/search/mainSearch.html", &s.T)
 }
 func (m *Search) SuperSearch() error{
 	defer util.Catch()
-	keywords := m.GetString("searchname")
-	searchvalue := m.GetString("searchvalue")
-	toptype := m.GetString("toptype")
-	subtype := m.GetString("subtype")
-	money :=m.GetString("money")
-	industry := m.GetString("industry")
-	scope := m.GetString("scope")
-	publishtime := m.GetString("publishtime")
-	fmt.Println("keywords:",keywords,"searchvalue:",searchvalue,"toptype:",toptype,"subtype",subtype,"scope",scope,"publishtime",publishtime)
-	fmt.Println("money---->>",money,"   industry----->>",industry)
-	selectType := m.GetString("selectType")
-	m.SetSession("shname", keywords)
-	m.SetSession("toptype", toptype)
-	m.SetSession("subtype", subtype)
-	m.SetSession("scope", scope)
-	m.SetSession("publishtime", publishtime)
+	searchvalue := strings.Trim(m.GetString("searchvalue"), " ")
 	var list *[]map[string]interface{}
 	if userid := m.GetSession("userId"); userid != nil {
-		if len(keywords) > 0 {
-			if selectType == "" { //默认设置为全文搜索
-				selectType = "all"
-			}
-			list = getWxsearchlistData(keywords, searchvalue, scope, publishtime, subtype,industry, 1, selectType)
-			fmt.Println("list",list)
-			r := redis.GetStr("other", "s_"+userid.(string))
-			arrs := strings.Split(r, ",")
-			if r == "" {
+		if len(searchvalue) > 0 {
+			searchname := strings.Replace(strings.Replace(searchvalue, " ", "+", -1), "++", "+", -1)
+			list = getWxsearchlistData(searchvalue, searchname, "", "", "","", 1, "all")
+			history := redis.GetStr("other", "s_"+userid.(string))
+			arrs := strings.Split(history, ",")
+			if history == "" {
 				arrs = make([]string, 0)
 			}
 			var historyFlag = 0
 			for _, v := range arrs {
-				if v == strings.Trim(keywords, " ") {
+				fmt.Print(v == strings.Trim(searchvalue, " "))
+				if v == strings.Trim(searchvalue, " ") {
 					historyFlag = 1
 					break
 				}
 			}
 			if historyFlag != 1 {
-				arrs = append(arrs, keywords)
+				arrs = append(arrs, searchvalue)
 				if len(arrs) > 5 {
 					arrs = arrs[1:6]
 				}
 				redis.Del("other", "s_"+userid.(string))
 				redis.Put("other", "s_"+userid.(string), strings.Join(arrs, ","), -1)
 			}
+			l := len(arrs) - 1
+			for i := 0; i < len(arrs)/2; i++ {
+				tmp := arrs[l-i]
+				arrs[l-i] = arrs[i]
+				arrs[i] = tmp
+			}
+			m.T["history"] = arrs
+			one, _ := mongodb.FindOneByField("user", bson.M{"_id": bson.ObjectIdHex(userid.(string))}, `{"o_jy":1}`)
+			if one != nil && len(*one) > 0 {
+				o_jy, _ := (*one)["o_jy"].(map[string]interface{})
+				a_key, _ := o_jy["a_key"].([]interface{})
+				var keys []interface{}
+				for _, v := range a_key {
+					keyMap, _ := v.(map[string]interface{})
+					key, _ := keyMap["key"].([]interface{})
+					keys = append(keys, key)
+				}
+				m.T["msgset"] = keys
+			}
 		}
-	}
-	m.T["list"] = list
-	m.T["pageSize"] = wx_pageSize
-	m.T["keywords"] = keywords
-	m.T["searchvalue"] = searchvalue
+		m.T["list"] = list
+		m.T["pageSize"] = wx_pageSize
+		m.T["searchvalue"] = searchvalue
 
-	//搜索列表增加分享
-	m.T["signature"] = wx.SignJSSDK(m.Site() + m.Url())
-	myopenid, _ := m.Session().Get("s_m_openid").(string)
-	m.T["openid"] = se.EncodeString(myopenid)
-	mynickname, _ := m.Session().Get("s_nickname").(string)
-	myavatar, _ := m.Session().Get("s_avatar").(string)
-	m.T["nickname"] = mynickname
-	m.T["avatar"] = myavatar
+		//搜索列表增加分享
+		m.T["signature"] = wx.SignJSSDK(m.Site() + m.Url())
+		myopenid, _ := m.Session().Get("s_m_openid").(string)
+		m.T["openid"] = se.EncodeString(myopenid)
+		mynickname, _ := m.Session().Get("s_nickname").(string)
+		myavatar, _ := m.Session().Get("s_avatar").(string)
+		m.T["nickname"] = mynickname
+		m.T["avatar"] = myavatar
+		//行业信息数据
+		industry, sortArray := getindustrys()
+		m.T["industry"]=industry
+		m.T["sortArray"]=sortArray
+	}
 	return  m.Render("/weixin/search/superSearch.html", &m.T)
 }
 
-/*
-func (m *Front) Wxsearch() error {
-	defer util.Catch()
-	shname := m.GetSession("shname")
-	toptype := m.GetSession("toptype")
-	subtype := m.GetSession("subtype")
-	scope := m.GetSession("scope")
-	publishtime := m.GetSession("publishtime")
-	industry := m.GetSession("industry")
-	if shname != "" && shname != nil {
-		m.T["shname"] = shname
-	}
-	m.T["toptype"] = toptype
-	m.T["subtype"] = subtype
-	m.T["scope"] = scope
-	m.T["publishtime"] = publishtime
-	m.T["industry"] = industry
-	m.T["signature"] = wx.SignJSSDK(m.Site() + m.Url())
-	mynickname, _ := m.Session().Get("s_nickname").(string)
-	myavatar, _ := m.Session().Get("s_avatar").(string)
-	m.T["nickname"] = mynickname
-	m.T["avatar"] = myavatar
-	myopenid, _ := m.Session().Get("s_m_openid").(string)
-	m.T["openid"] = se.EncodeString(myopenid)
-	if userId := m.GetSession("userId"); userId != nil {
-		one, _ := mongodb.FindOneByField("user", bson.M{"_id": bson.ObjectIdHex(userId.(string))}, `{"o_jy":1}`)
-		history := redis.GetStr("other", "s_"+userId.(string))
-		arrs := strings.Split(history, ",")
-		if history == "" {
-			arrs = make([]string, 0)
-		}
-		l := len(arrs) - 1
-		for i := 0; i < len(arrs)/2; i++ {
-			tmp := arrs[l-i]
-			arrs[l-i] = arrs[i]
-			arrs[i] = tmp
-		}
-		m.T["history"] = arrs
-		if one != nil && len(*one) > 0 {
-			o_jy, _ := (*one)["o_jy"].(map[string]interface{})
-			a_key, _ := o_jy["a_key"].([]interface{})
-			var keys []interface{}
-			for _, v := range a_key {
-				keyMap, _ := v.(map[string]interface{})
-				key, _ := keyMap["key"].([]interface{})
-				keys = append(keys, key)
-			}
-			m.T["msgset"] = keys
-		}
-	}
-	return m.Render("/weixin/wxsearch.html", &m.T)
-}*/

+ 119 - 27
src/jfw/front/supsearch.go

@@ -3,6 +3,7 @@ package front
 import (
 	"fmt"
 	"jfw/config"
+	"jfw/jyutil"
 	"log"
 	"math/rand"
 	"qfw/util"
@@ -52,42 +53,132 @@ func (p *Pcsearch) PcSearchIndex() error {
 	if len(shareid) == 0 {
 		shareid = fmt.Sprintf("%s%d", config.Seoconfig["jysslby"].(string)+fmt.Sprintf("%d", time.Now().UnixNano())[8:14], rand.Intn(9))
 	}
-	industryData, ok := mongodb.Find("rc_rule", `{"s_name":{$ne:null}}`, `{"i_order":1}`, `{"_id":1,"s_name":1}`, false, -1, -1)
-	if ok && industryData != nil && len(*industryData) > 0 {
-		industry := map[string][]string{}
-		sortArray := []string{}
-		for _, v := range *industryData {
-			fatFlag := 0
-			//childFlag := 0
-			industryname, _ := v["s_name"].(string)
-			if strings.Contains(industryname, "_") {
-				fat := strings.Split(industryname, "_")[0]
-				child := strings.Split(industryname, "_")[1]
-				if len(industry[fat]) == 0 {
-					sortArray = append(sortArray, fat)
-				}
-				for _, fv := range industry[fat] {
-					if fv == strings.Trim(child, " ") {
-						fatFlag = 1
-						break
-					}
+	keywords := p.GetString("keywords")       //关键词
+	searchvalue := p.GetString("searchvalue") //关键词
+	area := p.GetString("area")               //地区
+	publishtime := p.GetString("publishtime") //发布时间
+	toptype := p.GetString("toptype")         //信息类型
+	subtype := p.GetString("subtype")         //信息类型
+	minprice, _ := p.GetFloat("minprice")     //最低价格
+	maxprice, _ := p.GetFloat("maxprice")     //最高价格
+	log.Println(minprice, "---", maxprice)
+	industry := p.GetString("industry")     //选中的行业
+	selectType := p.GetString("selectType") //标题或全文
+	selectTypesess := p.GetSession("selectType")
+	if selectTypesess != nil && selectTypesess != "" {
+		selectType = selectTypesess.(string)
+	}
+	if selectType == "" {
+		selectType = "all"
+	}
+	var count int64
+	var list *[]map[string]interface{}
+	if len(searchvalue) > 0 {
+		count, list = getBidSearchData(searchvalue, area, publishtime, subtype, industry, 0, true, selectType)
+	} else if p.Method() == "POST" {
+		count, list = getLastNewsData(searchvalue, area, publishtime, subtype, industry, 0, true)
+		if list != nil {
+			for _, v := range *list {
+				v["_id"] = util.EncodeArticleId2ByCheck(v["_id"].(string))
+				stp, _ := v["subtype"].(string)
+				if stp == "" {
+					stp, _ = v["toptype"].(string)
 				}
-				if fatFlag != 1 {
-					industry[fat] = append(industry[fat], child)
+				area, _ := v["area"].(string)
+				v["stypeadd"], v["areaadd"] = classify(stp, area)
+				//正文匹配检索关键词
+				highlight, _ := v["highlight"].(map[string][]string)
+				detail := ""
+				for _, val := range highlight["detail"] {
+					detail += clearHtml.ReplaceAllString(val, "")
 				}
+				v["detail"] = detail
 			}
 		}
-		p.T["industry"] = industry
-		p.T["sortArray"] = sortArray
+		p.T["list"] = list
+		p.T["area"] = area
+		p.T["publishtime"] = publishtime
+		p.T["timeslot"] = p.GetString("timeslot")
+		p.T["toptype"] = toptype
+		p.T["subtype"] = subtype
+		p.T["count"] = count
+		p.T["keywords"] = keywords
+		p.T["searchvalue"] = searchvalue
+		p.T["selectType"] = selectType
+		p.T["login"] = p.Session().Get("user")
+		p.SetSession("paramkey", keywords)
+		if publishtime == "lately-7" {
+			p.SetSession("parampublishtime", "最近7天")
+		} else if publishtime == "lately-30" {
+			p.SetSession("parampublishtime", "最近30天")
+		} else if publishtime == "thisyear" {
+			p.SetSession("parampublishtime", "去年")
+		} else {
+			p.SetSession("parampublishtime", publishtime)
+		}
+		p.SetSession("paramarea", area)
+		if subtype != "" {
+			p.SetSession("paraminfotype", subtype)
+		} else {
+			p.SetSession("paraminfotype", toptype)
+		}
+	} else {
+		p.DisableHttpCache()
+		Newbids()
+		data := redis.Get("other", "index_list").([]interface{})
+		p.T["list"] = data[0]
 	}
-	p.DisableHttpCache()
-	Newbids()
-	data := redis.Get("other", "index_list").([]interface{})
+	industrylist, sortArray := getindustrys()
+	p.T["industrylist"] = industrylist
+	p.T["sortArray"] = sortArray
 	p.T["shareid"] = se.EncodeString(shareid)
-	p.T["list"] = data[0]
 	return p.Render("/pc/supsearch.html", &p.T)
 }
 
+//
+func getindustrys() (industry map[string][]string, sortArray []string) {
+	industry = map[string][]string{}
+	sortArray = []string{}
+	industryname := config.Sysconfig["industry"].(string)
+	classdata, ok1 := mongodb.FindOneByField("rc_task", `{"s_name":"`+industryname+`"}`, `{"s_class":1}`)
+	if ok1 && len(*classdata) > 0 {
+		classid := ""
+		if util.ObjToString((*classdata)["s_class"]) != "" {
+			classids := strings.Split(util.ObjToString((*classdata)["s_class"]), ",")
+			for k, v := range classids {
+				if k > 0 {
+					classid += `,`
+				}
+				classid += `"` + v + `"`
+			}
+		}
+		industryData, ok := mongodb.Find("rc_rule", `{"s_pid":{"$ne":""},"s_classid":{"$in":[`+classid+`]}}`, `{"i_order":1}`, `{"_id":1,"s_name":1}`, false, -1, -1)
+		if ok && industryData != nil && len(*industryData) > 0 {
+			for _, v := range *industryData {
+				fatFlag := 0
+				industryname, _ := v["s_name"].(string)
+				if strings.Contains(industryname, "_") {
+					fat := strings.Split(industryname, "_")[0]
+					child := strings.Split(industryname, "_")[1]
+					if len(industry[fat]) == 0 {
+						sortArray = append(sortArray, fat)
+					}
+					for _, fv := range industry[fat] {
+						if fv == strings.Trim(child, " ") {
+							fatFlag = 1
+							break
+						}
+					}
+					if fatFlag != 1 {
+						industry[fat] = append(industry[fat], child)
+					}
+				}
+			}
+		}
+	}
+	return industry, sortArray
+}
+
 //
 func Newbids() {
 	var list *[]map[string]interface{}
@@ -109,6 +200,7 @@ func Newbids() {
 		}
 		for i := 0; i < 10; i++ {
 			_, list = getLastNewsData("", "", "", "", "", intns[i], true)
+			jyutil.BidListConvert("", list)
 			for k, v := range *list {
 				v["k"] = (k + 1) + i*50
 				t := time.Unix(util.Int64All(v["publishtime"]), 0)

+ 56 - 38
src/jfw/front/swordfish.go

@@ -4,9 +4,6 @@ import (
 	"encoding/base64"
 	"encoding/json"
 	"fmt"
-	"github.com/go-xweb/xweb"
-	. "github.com/thinxer/go-word2vec"
-	"gopkg.in/mgo.v2/bson"
 	"html/template"
 	"jfw/config"
 	"jfw/jyutil"
@@ -22,6 +19,10 @@ import (
 	"strings"
 	"sync"
 	"time"
+
+	"github.com/go-xweb/xweb"
+	. "github.com/thinxer/go-word2vec"
+	"gopkg.in/mgo.v2/bson"
 )
 
 const (
@@ -444,8 +445,6 @@ func (m *Front) PcAjaxReq() {
 	selectType := m.GetString("selectType")
 	industry := m.GetString("industry")
 	m.SetSession("selectType", selectType)
-	fmt.Println(selectType)
-
 	var list *[]map[string]interface{}
 	var count int64
 	status, _ := m.GetInteger("status")
@@ -456,7 +455,7 @@ func (m *Front) PcAjaxReq() {
 			count, list = getLastNewsData(searchvalue, area, publishtime, subtype, industry, 0, true)
 		}
 	} else if reqType == "bidSearch" {
-		_, list = getBidSearchData(searchvalue, area, publishtime, subtype, industry, start, false, selectType)
+		count, list = getBidSearchData(searchvalue, area, publishtime, subtype, industry, start, true, selectType)
 	} else if reqType == "lastNews" {
 		_, list = getLastNewsData(searchvalue, area, publishtime, subtype, industry, start, false)
 	}
@@ -837,50 +836,68 @@ func (m *Front) WxsearchlistPaging() {
 	var list *[]map[string]interface{}
 	pageNum, _ := m.GetInteger("pageNum")
 	if userid != nil && pageNum <= wx_maxPageNum {
-		keywords := strings.Trim(m.GetString("searchname"), " ")
-		searchvalue := m.GetString("searchvalue")
+		//keywords := strings.Trim(m.GetString("searchvalue"), " ")
+		searchvalue := strings.Trim(m.GetString("searchvalue"), " ")
+		searchname := strings.Replace(strings.Replace(searchvalue, " ", "+", -1), "++", "+", -1)
 		subtype := m.GetString("subtype")
 		scope := m.GetString("scope")
 		publishtime := m.GetString("publishtime")
 		selectType := m.GetString("selectType")
 		industry := m.GetString("industry")
-		list = getWxsearchlistData(keywords, searchvalue, scope, publishtime, subtype, industry, pageNum, selectType)
-	}
-	//历史记录和订阅查询
-	if userId := m.GetSession("userId"); userId != nil {
-		one, _ := mongodb.FindOneByField("user", bson.M{"_id": bson.ObjectIdHex(userId.(string))}, `{"o_jy":1}`)
-		history := redis.GetStr("other", "s_"+userId.(string))
-		arrs := strings.Split(history, ",")
-		if history == "" {
-			arrs = make([]string, 0)
-		}
-		l := len(arrs) - 1
-		for i := 0; i < len(arrs)/2; i++ {
-			tmp := arrs[l-i]
-			arrs[l-i] = arrs[i]
-			arrs[i] = tmp
-		}
-		m.T["history"] = arrs
-		if one != nil && len(*one) > 0 {
-			o_jy, _ := (*one)["o_jy"].(map[string]interface{})
-			a_key, _ := o_jy["a_key"].([]interface{})
-			var keys []interface{}
-			for _, v := range a_key {
-				keyMap, _ := v.(map[string]interface{})
-				key, _ := keyMap["key"].([]interface{})
-				keys = append(keys, key)
+		list = getWxsearchlistData(searchvalue, searchname, scope, publishtime, subtype, industry, pageNum, selectType)
+
+		//历史记录和订阅查询
+		//if userId := m.GetSession("userId"); userId != nil {
+			one, _ := mongodb.FindOneByField("user", bson.M{"_id": bson.ObjectIdHex(userid.(string))}, `{"o_jy":1}`)
+			history := redis.GetStr("other", "s_"+userid.(string))
+			arrs := strings.Split(history, ",")
+
+			if history == "" {
+				arrs = make([]string, 0)
 			}
-			m.T["msgset"] = keys
-		}
-	}
+			var historyFlag= 0
+			for _, v := range arrs {
+				if v == strings.Trim(searchvalue, " ") {
+					historyFlag = 1
+					break
+				}
+			}
+			if historyFlag != 1 {
+				arrs = append(arrs, searchvalue)
+				if len(arrs) > 5 {
+					arrs = arrs[1:6]
+				}
+				redis.Del("other", "s_"+userid.(string))
+				redis.Put("other", "s_"+userid.(string), strings.Join(arrs, ","), -1)
+			}
+			l := len(arrs) - 1
+			for i := 0; i < len(arrs)/2; i++ {
+				tmp := arrs[l-i]
+				arrs[l-i] = arrs[i]
+				arrs[i] = tmp
+			}
+			m.T["history"] = arrs
 
+			if one != nil && len(*one) > 0 {
+				o_jy, _ := (*one)["o_jy"].(map[string]interface{})
+				a_key, _ := o_jy["a_key"].([]interface{})
+				var keys []interface{}
+				for _, v := range a_key {
+					keyMap, _ := v.(map[string]interface{})
+					key, _ := keyMap["key"].([]interface{})
+					keys = append(keys, key)
+				}
+				m.T["msgset"] = keys
+			}
+
+	}
 
 
 	m.ServeJson(map[string]interface{}{
 		"list":        list,
 		"hasNextPage": list != nil && len(*list) == wx_pageSize && pageNum < wx_maxPageNum,
-		"history":   m.T["history"],
-		"msgset": m.T["msgset"],
+		"history":     m.T["history"],
+		"msgset":      m.T["msgset"],
 	})
 }
 
@@ -902,6 +919,7 @@ func (m *Front) DelWxHistorySearch() {
 //微信端搜索
 func getWxsearchlistData(keywords, searchvalue, scope, publishtime, subtype, industry string, pageNum int, selectType string) (list *[]map[string]interface{}) {
 	query := getBidSearchQuery(scope, publishtime, subtype, industry) //scope是地区对应传进的areas, stype是类型对应scope
+	fmt.Print("keywords>>>",keywords,"searchvalue>>",searchvalue)
 	if len(keywords) > 0 {
 		if selectType == "all" { //全文搜索
 			list = elastic.GetByNgramOther(INDEX, TYPE, searchvalue, query, `"title","detail"`, bidSearch_sort, bidSearch_field_1, (pageNum-1)*wx_pageSize, wx_pageSize, true, false, 100)

+ 1 - 1
src/jfw/jylabutil/entsearch.go

@@ -44,7 +44,7 @@ func GetProjectByEntName(entname string, area string, lower, upper, pagenum, pag
 	list := *elastic.GetByNgram(
 		"projectset", "projectset",
 		entname, mastquery,
-		`"winner"`,
+		`"winner","biddingcontent"`,
 		`{"createtime":-1}`, ``, (pagenum-1)*pagesize, pagesize,
 	)
 	return list

+ 1 - 1
src/jfw/modules/behaviorcollect/README.md

@@ -1,5 +1,5 @@
 ajx调用,model,s_url属性必填
-var content='{"model":"accesslog","s_url":"/jylab/entsearch/","s_describe":"剑鱼实验室企业查询"}'
+var content='{"model":"accesslog","s_url":"/jylab/entsearch/","s_describe":"剑鱼实验室企业查询",...}'
 
 
 $.post('/accessinfo/byajax',{json:content},function(r){

+ 603 - 0
src/jfw/modules/entsesearch/.idea/workspace.xml

@@ -0,0 +1,603 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ChangeListManager">
+    <list default="true" id="8aeecff7-7661-418b-8b35-28dd61a91106" name="Default" comment="" />
+    <option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
+    <option name="TRACKING_ENABLED" value="true" />
+    <option name="SHOW_DIALOG" value="false" />
+    <option name="HIGHLIGHT_CONFLICTS" value="true" />
+    <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
+    <option name="LAST_RESOLUTION" value="IGNORE" />
+  </component>
+  <component name="ExecutionTargetManager" SELECTED_TARGET="default_target" />
+  <component name="FileEditorManager">
+    <leaf SIDE_TABS_SIZE_LIMIT_KEY="300">
+      <file leaf-file-name="main.go" pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/src/main.go">
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="200">
+              <caret line="21" column="13" lean-forward="false" selection-start-line="21" selection-start-column="13" selection-end-line="21" selection-end-column="13" />
+              <folding>
+                <element signature="e#14#173#0" expanded="true" />
+              </folding>
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="entinfo.go" pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/src/search/entinfo.go">
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="0">
+              <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
+              <folding />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="entsesearch.go" pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/src/search/entsesearch.go">
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="1220">
+              <caret line="70" column="0" lean-forward="false" selection-start-line="70" selection-start-column="0" selection-end-line="70" selection-end-column="0" />
+              <folding>
+                <element signature="e#16#129#0" expanded="true" />
+              </folding>
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="config.json" pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/src/config.json">
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="20">
+              <caret line="1" column="23" lean-forward="true" selection-start-line="1" selection-start-column="23" selection-end-line="1" selection-end-column="41" />
+              <folding />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="entseSearch.html" pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/src/web/templates/weixin/entseSearch.html">
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="20">
+              <caret line="263" column="50" lean-forward="false" selection-start-line="263" selection-start-column="50" selection-end-line="263" selection-end-column="50" />
+              <folding>
+                <element signature="n#style#0;n#div#0;n#div#0;n#form#0;n#div#0;n#body#0;n#html#0;n#!!top" expanded="true" />
+              </folding>
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="mongo.go" pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/../../tools/mongo.go">
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="114">
+              <caret line="12" column="34" lean-forward="true" selection-start-line="12" selection-start-column="34" selection-end-line="12" selection-end-column="34" />
+              <folding />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="config.go" pinned="false" current-in-tab="true">
+        <entry file="file://$PROJECT_DIR$/../../config/config.go">
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="80">
+              <caret line="6" column="4" lean-forward="false" selection-start-line="6" selection-start-column="4" selection-end-line="6" selection-end-column="4" />
+              <folding />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="entsearch.go" pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/../../jylabutil/entsearch.go">
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="302">
+              <caret line="84" column="0" lean-forward="false" selection-start-line="84" selection-start-column="0" selection-end-line="84" selection-end-column="0" />
+              <folding />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="tools.go" pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/../../tools/tools.go">
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="0">
+              <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
+              <folding />
+            </state>
+          </provider>
+        </entry>
+      </file>
+    </leaf>
+  </component>
+  <component name="FindInProjectRecents">
+    <findStrings>
+      <find>recList</find>
+    </findStrings>
+  </component>
+  <component name="JsBuildToolGruntFileManager" detection-done="true" sorting="DEFINITION_ORDER" />
+  <component name="JsBuildToolPackageJson" detection-done="true" sorting="DEFINITION_ORDER" />
+  <component name="JsGulpfileManager">
+    <detection-done>true</detection-done>
+    <sorting>DEFINITION_ORDER</sorting>
+  </component>
+  <component name="ProjectFrameBounds">
+    <option name="x" value="-8" />
+    <option name="y" value="-8" />
+    <option name="width" value="1382" />
+    <option name="height" value="744" />
+  </component>
+  <component name="ProjectView">
+    <navigator currentView="ProjectPane" proportions="" version="1">
+      <flattenPackages />
+      <showMembers />
+      <showModules />
+      <showLibraryContents />
+      <hideEmptyPackages />
+      <abbreviatePackageNames />
+      <autoscrollToSource />
+      <autoscrollFromSource />
+      <sortByType />
+      <manualOrder />
+      <foldersAlwaysOnTop value="true" />
+    </navigator>
+    <panes>
+      <pane id="Scope" />
+      <pane id="Scratches" />
+      <pane id="ProjectPane">
+        <subPane>
+          <PATH>
+            <PATH_ELEMENT>
+              <option name="myItemId" value="entsesearch" />
+              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
+            </PATH_ELEMENT>
+            <PATH_ELEMENT>
+              <option name="myItemId" value="entsesearch" />
+              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
+            </PATH_ELEMENT>
+          </PATH>
+          <PATH>
+            <PATH_ELEMENT>
+              <option name="myItemId" value="entsesearch" />
+              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
+            </PATH_ELEMENT>
+            <PATH_ELEMENT>
+              <option name="myItemId" value="entsesearch" />
+              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
+            </PATH_ELEMENT>
+            <PATH_ELEMENT>
+              <option name="myItemId" value="src" />
+              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
+            </PATH_ELEMENT>
+          </PATH>
+          <PATH>
+            <PATH_ELEMENT>
+              <option name="myItemId" value="entsesearch" />
+              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
+            </PATH_ELEMENT>
+            <PATH_ELEMENT>
+              <option name="myItemId" value="entsesearch" />
+              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
+            </PATH_ELEMENT>
+            <PATH_ELEMENT>
+              <option name="myItemId" value="src" />
+              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
+            </PATH_ELEMENT>
+            <PATH_ELEMENT>
+              <option name="myItemId" value="web" />
+              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
+            </PATH_ELEMENT>
+            <PATH_ELEMENT>
+              <option name="myItemId" value="templates" />
+              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
+            </PATH_ELEMENT>
+            <PATH_ELEMENT>
+              <option name="myItemId" value="weixin" />
+              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
+            </PATH_ELEMENT>
+          </PATH>
+          <PATH>
+            <PATH_ELEMENT>
+              <option name="myItemId" value="entsesearch" />
+              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
+            </PATH_ELEMENT>
+            <PATH_ELEMENT>
+              <option name="myItemId" value="entsesearch" />
+              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
+            </PATH_ELEMENT>
+            <PATH_ELEMENT>
+              <option name="myItemId" value="src" />
+              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
+            </PATH_ELEMENT>
+            <PATH_ELEMENT>
+              <option name="myItemId" value="web" />
+              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
+            </PATH_ELEMENT>
+            <PATH_ELEMENT>
+              <option name="myItemId" value="templates" />
+              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
+            </PATH_ELEMENT>
+          </PATH>
+          <PATH>
+            <PATH_ELEMENT>
+              <option name="myItemId" value="entsesearch" />
+              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
+            </PATH_ELEMENT>
+            <PATH_ELEMENT>
+              <option name="myItemId" value="entsesearch" />
+              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
+            </PATH_ELEMENT>
+            <PATH_ELEMENT>
+              <option name="myItemId" value="src" />
+              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
+            </PATH_ELEMENT>
+            <PATH_ELEMENT>
+              <option name="myItemId" value="web" />
+              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
+            </PATH_ELEMENT>
+          </PATH>
+          <PATH>
+            <PATH_ELEMENT>
+              <option name="myItemId" value="entsesearch" />
+              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
+            </PATH_ELEMENT>
+            <PATH_ELEMENT>
+              <option name="myItemId" value="entsesearch" />
+              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
+            </PATH_ELEMENT>
+            <PATH_ELEMENT>
+              <option name="myItemId" value="src" />
+              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
+            </PATH_ELEMENT>
+            <PATH_ELEMENT>
+              <option name="myItemId" value="search" />
+              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
+            </PATH_ELEMENT>
+          </PATH>
+        </subPane>
+      </pane>
+    </panes>
+  </component>
+  <component name="PropertiesComponent">
+    <property name="settings.editor.selected.configurable" value="com.goide.configuration.GoLibrariesConfigurableProvider" />
+    <property name="last_opened_file_path" value="$PROJECT_DIR$/src/main.go" />
+    <property name="configurable.Global.GOPATH.is.expanded" value="true" />
+    <property name="configurable.Project.GOPATH.is.expanded" value="true" />
+    <property name="configurable.Module.GOPATH.is.expanded" value="true" />
+  </component>
+  <component name="RunDashboard">
+    <option name="ruleStates">
+      <list>
+        <RuleState>
+          <option name="name" value="ConfigurationTypeDashboardGroupingRule" />
+        </RuleState>
+        <RuleState>
+          <option name="name" value="StatusDashboardGroupingRule" />
+        </RuleState>
+      </list>
+    </option>
+  </component>
+  <component name="RunManager" selected="Go Application.entseSearch">
+    <configuration default="true" type="GoApplicationRunConfiguration" factoryName="Go Application">
+      <module name="" />
+      <working_directory value="$PROJECT_DIR$" />
+      <go_parameters value="-i" />
+      <filePath value="$PROJECT_DIR$" />
+      <kind value="FILE" />
+      <method />
+    </configuration>
+    <configuration default="true" type="GoRunFileConfiguration" factoryName="Go Single File">
+      <module name="" />
+      <working_directory value="$PROJECT_DIR$" />
+      <filePath value="$PROJECT_DIR$" />
+      <method />
+    </configuration>
+    <configuration default="true" type="GoTestRunConfiguration" factoryName="Go Test">
+      <module name="" />
+      <working_directory value="$PROJECT_DIR$" />
+      <go_parameters value="-i" />
+      <framework value="gotest" />
+      <kind value="DIRECTORY" />
+      <method />
+    </configuration>
+    <configuration default="true" type="JavaScriptTestRunnerJest" factoryName="Jest">
+      <node-interpreter value="project" />
+      <working-dir value="" />
+      <envs />
+      <scope-kind value="ALL" />
+      <method />
+    </configuration>
+    <configuration default="true" type="JavaScriptTestRunnerProtractor" factoryName="Protractor">
+      <config-file value="" />
+      <node-interpreter value="project" />
+      <envs />
+      <method />
+    </configuration>
+    <configuration default="true" type="JavascriptDebugType" factoryName="JavaScript Debug">
+      <method />
+    </configuration>
+    <configuration default="true" type="js.build_tools.gulp" factoryName="Gulp.js">
+      <node-interpreter>project</node-interpreter>
+      <node-options />
+      <gulpfile />
+      <tasks />
+      <arguments />
+      <envs />
+      <method />
+    </configuration>
+    <configuration default="true" type="js.build_tools.npm" factoryName="npm">
+      <command value="run" />
+      <scripts />
+      <node-interpreter value="project" />
+      <envs />
+      <method />
+    </configuration>
+    <configuration default="false" name="entseSearch" type="GoApplicationRunConfiguration" factoryName="Go Application">
+      <output_file path="D:\jianyu\jy\src\jfw\modules\entsesearch\src" />
+      <module name="entsesearch" />
+      <working_directory value="$PROJECT_DIR$" />
+      <go_parameters value="-i" />
+      <filePath value="D:\jianyu\jy\src\jfw\modules\entsesearch\src\main.go" />
+      <kind value="FILE" />
+      <method />
+    </configuration>
+    <list size="1">
+      <item index="0" class="java.lang.String" itemvalue="Go Application.entseSearch" />
+    </list>
+  </component>
+  <component name="ShelveChangesManager" show_recycled="false">
+    <option name="remove_strategy" value="false" />
+  </component>
+  <component name="ToolWindowManager">
+    <frame x="-8" y="-8" width="1382" height="744" extended-state="6" />
+    <layout>
+      <window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.2489019" sideWeight="0.5" order="1" side_tool="false" content_ui="combo" />
+      <window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="9" side_tool="false" content_ui="tabs" />
+      <window_info id="Event Log" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="0" side_tool="true" content_ui="tabs" />
+      <window_info id="Database" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
+      <window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="false" weight="0.33" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
+      <window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4148265" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" />
+      <window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
+      <window_info id="Terminal" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
+      <window_info id="Favorites" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="0" side_tool="true" content_ui="tabs" />
+      <window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" />
+      <window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
+      <window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
+      <window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
+      <window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="8" side_tool="false" content_ui="tabs" />
+      <window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="3" side_tool="false" content_ui="combo" />
+      <window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
+      <window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
+    </layout>
+  </component>
+  <component name="TypeScriptGeneratedFilesManager">
+    <option name="processedProjectFiles" value="true" />
+  </component>
+  <component name="VcsContentAnnotationSettings">
+    <option name="myLimit" value="2678400000" />
+  </component>
+  <component name="XDebuggerManager">
+    <breakpoint-manager />
+    <watches-manager />
+  </component>
+  <component name="editorHistoryManager">
+    <entry file="file://$PROJECT_DIR$/src/main.go">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="200">
+          <caret line="21" column="13" lean-forward="false" selection-start-line="21" selection-start-column="13" selection-end-line="21" selection-end-column="13" />
+          <folding>
+            <element signature="e#14#173#0" expanded="true" />
+          </folding>
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/search/entinfo.go">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="0">
+          <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/search/entsesearch.go">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="1400">
+          <caret line="70" column="0" lean-forward="false" selection-start-line="70" selection-start-column="0" selection-end-line="70" selection-end-column="0" />
+          <folding>
+            <element signature="e#16#129#0" expanded="true" />
+          </folding>
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/config.json">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="60">
+          <caret line="3" column="25" lean-forward="true" selection-start-line="3" selection-start-column="25" selection-end-line="3" selection-end-column="25" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/web/templates/weixin/entseSearch.html">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="5260">
+          <caret line="263" column="50" lean-forward="true" selection-start-line="263" selection-start-column="50" selection-end-line="263" selection-end-column="50" />
+          <folding>
+            <element signature="n#style#0;n#div#0;n#div#0;n#form#0;n#div#0;n#body#0;n#html#0;n#!!top" expanded="true" />
+          </folding>
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/../../jylabutil/entsearch.go">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="1600">
+          <caret line="84" column="0" lean-forward="false" selection-start-line="84" selection-start-column="0" selection-end-line="84" selection-end-column="0" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/../../tools/tools.go">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="0">
+          <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/../../tools/mongo.go">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="160">
+          <caret line="12" column="0" lean-forward="false" selection-start-line="12" selection-start-column="0" selection-end-line="12" selection-end-column="0" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/main.go">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="200">
+          <caret line="21" column="13" lean-forward="false" selection-start-line="21" selection-start-column="13" selection-end-line="21" selection-end-column="13" />
+          <folding>
+            <element signature="e#14#173#0" expanded="true" />
+          </folding>
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/search/entinfo.go">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="0">
+          <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/search/entsesearch.go">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="1220">
+          <caret line="70" column="0" lean-forward="false" selection-start-line="70" selection-start-column="0" selection-end-line="70" selection-end-column="0" />
+          <folding>
+            <element signature="e#16#129#0" expanded="true" />
+          </folding>
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/config.json">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="60">
+          <caret line="3" column="25" lean-forward="true" selection-start-line="3" selection-start-column="25" selection-end-line="3" selection-end-column="25" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/../../tools/mongo.go">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="160">
+          <caret line="12" column="54" lean-forward="false" selection-start-line="12" selection-start-column="40" selection-end-line="12" selection-end-column="54" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/../../jylabutil/entsearch.go">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="1600">
+          <caret line="84" column="0" lean-forward="false" selection-start-line="84" selection-start-column="0" selection-end-line="84" selection-end-column="0" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/../../tools/tools.go">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="0">
+          <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/web/templates/weixin/entseSearch.html">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="5260">
+          <caret line="263" column="50" lean-forward="true" selection-start-line="263" selection-start-column="50" selection-end-line="263" selection-end-column="50" />
+          <folding>
+            <element signature="n#style#0;n#div#0;n#div#0;n#form#0;n#div#0;n#body#0;n#html#0;n#!!top" expanded="true" />
+          </folding>
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/main.go">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="200">
+          <caret line="21" column="13" lean-forward="false" selection-start-line="21" selection-start-column="13" selection-end-line="21" selection-end-column="13" />
+          <folding>
+            <element signature="e#14#173#0" expanded="true" />
+          </folding>
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/search/entinfo.go">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="0">
+          <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/search/entsesearch.go">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="1220">
+          <caret line="70" column="0" lean-forward="false" selection-start-line="70" selection-start-column="0" selection-end-line="70" selection-end-column="0" />
+          <folding>
+            <element signature="e#16#129#0" expanded="true" />
+          </folding>
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/../../tools/tools.go">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="0">
+          <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/../../jylabutil/entsearch.go">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="302">
+          <caret line="84" column="0" lean-forward="false" selection-start-line="84" selection-start-column="0" selection-end-line="84" selection-end-column="0" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/web/templates/weixin/entseSearch.html">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="20">
+          <caret line="263" column="50" lean-forward="false" selection-start-line="263" selection-start-column="50" selection-end-line="263" selection-end-column="50" />
+          <folding>
+            <element signature="n#style#0;n#div#0;n#div#0;n#form#0;n#div#0;n#body#0;n#html#0;n#!!top" expanded="true" />
+          </folding>
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/config.json">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="20">
+          <caret line="1" column="23" lean-forward="true" selection-start-line="1" selection-start-column="23" selection-end-line="1" selection-end-column="41" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/../../tools/mongo.go">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="114">
+          <caret line="12" column="34" lean-forward="true" selection-start-line="12" selection-start-column="34" selection-end-line="12" selection-end-column="34" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/../../config/config.go">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="80">
+          <caret line="6" column="4" lean-forward="false" selection-start-line="6" selection-start-column="4" selection-end-line="6" selection-end-column="4" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
+  </component>
+</project>

+ 7 - 7
src/jfw/modules/followent/src/followent/followent.go

@@ -19,13 +19,13 @@ var mongodb = tools.MQFW
 type FollowEnt struct {
 	*xweb.Action
 
-	entList  xweb.Mapper `xweb:"/jylab/followent/entList"`           //获取关注企业列表
-	addEnt   xweb.Mapper `xweb:"/jylab/followent/addEnt"`            //添加关注企业页面
-	newInfo  xweb.Mapper `xweb:"/jylab/followent/newInfo/(.*)/(.*)"` //企业最新信息
-	recList  xweb.Mapper `xweb:"/jylab/followent/recList"`           //获取推荐企业列表
-	saveEnt  xweb.Mapper `xweb:"/jylab/followent/saveEnt"`           //保存关注企业
-	qgFollow xweb.Mapper `xweb:"/jylab/followent/qgFollow"`          //取消关注
-	visited  xweb.Mapper `xweb:"/jylab/followent/notice/visited"`    //用是否已查看
+	entList  xweb.Mapper `xweb:"/jylab/followent/entList"`        //获取关注企业列表
+	addEnt   xweb.Mapper `xweb:"/jylab/followent/addEnt"`         //添加关注企业页面
+	newInfo  xweb.Mapper `xweb:"/jylab/followent/newInfo/(.*)"`   //企业最新信息
+	recList  xweb.Mapper `xweb:"/jylab/followent/recList"`        //获取推荐企业列表
+	saveEnt  xweb.Mapper `xweb:"/jylab/followent/saveEnt"`        //保存关注企业
+	qgFollow xweb.Mapper `xweb:"/jylab/followent/qgFollow"`       //取消关注
+	visited  xweb.Mapper `xweb:"/jylab/followent/notice/visited"` //用是否已查看
 }
 
 func init() {

Fișier diff suprimat deoarece este prea mare
+ 0 - 0
src/jfw/modules/push/src/config.json


+ 47 - 30
src/jfw/modules/push/src/qfw/push/dopush/dopush.go

@@ -4,6 +4,7 @@ import (
 	"container/list"
 	"fmt"
 	"log"
+	"os"
 	"qfw/push"
 	"qfw/util"
 	"qfw/util/mail"
@@ -12,7 +13,6 @@ import (
 	"regexp"
 	"strconv"
 	"strings"
-	"sync"
 	"time"
 )
 
@@ -22,10 +22,7 @@ var re *regexp.Regexp
 var MAXLen = 200
 var TitleLen, ContentLen, GroupLen int
 var WxTitle, WxContent, WxGroup string
-var Mailpos = 0
-var MailposLock = &sync.Mutex{}
-var MailMap = []*mail.MailAuth{}
-var MailFrom = "剑鱼招标订阅"
+var GmailMap *mail.GmailAuth
 var Domain = ""
 var (
 	mail_html    = ""
@@ -33,18 +30,6 @@ var (
 	mail_title   = ""
 )
 
-//获取邮箱配置
-func GetSMail() (auth *mail.MailAuth) {
-	defer util.Catch()
-	MailposLock.Lock()
-	defer MailposLock.Unlock()
-	Mailpos %= len(MailMap)
-	auth = MailMap[Mailpos]
-	Mailpos++
-	time.Sleep(80 * time.Millisecond)
-	return
-}
-
 //初始化推送信息
 func Inits() {
 	//推送标题
@@ -68,11 +53,12 @@ func Inits() {
 	//初始化服务邮箱
 	arrMap := util.ObjArrToMapArr(push.PushConfig["mails"].([]interface{}))
 	for i := 0; i < len(arrMap); i++ {
-		MailMap = append(MailMap,
-			&mail.MailAuth{util.ObjToString(arrMap[i]["addr"]),
-				util.IntAll(arrMap[i]["port"]),
-				util.ObjToString(arrMap[i]["user"]),
-				util.ObjToString(arrMap[i]["pwd"])})
+		GmailMap = &mail.GmailAuth{
+			SmtpHost: util.ObjToString(arrMap[i]["addr"]),
+			SmtpPort: util.IntAll(arrMap[i]["port"]),
+			User:     util.ObjToString(arrMap[i]["user"]),
+			Pwd:      util.ObjToString(arrMap[i]["pwd"]),
+		}
 	}
 	Domain = push.PushConfig["bidViewDomain"].(string)
 }
@@ -109,6 +95,8 @@ func DealSend(k *push.MemberInterest, v *list.List, now time.Time, MaxPushSize i
 	publishTitle := map[string]bool{}
 	FilterData.Start(k.Openid)
 	defer FilterData.End()
+	//邮件附件
+	var fmdatas = []map[string]interface{}{}
 	for ks := v.Front(); ks != nil; ks = ks.Next() {
 		k2 := *(ks.Value.(*map[string]interface{}))
 		title := strings.Replace(k2["title"].(string), "\n", "", -1)
@@ -140,6 +128,21 @@ func DealSend(k *push.MemberInterest, v *list.List, now time.Time, MaxPushSize i
 						types = "其他"
 					}
 				}
+				classIndustry := "industry"
+				industry := util.ObjToString(k2["industry"])
+				if industry != "" {
+					industry = strings.TrimLeft(industry, ",")
+					industry = strings.TrimRight(industry, ",")
+					inds := strings.Split(industry, ",")
+					if len(inds) > 0 {
+						inds_ins := strings.Split(inds[0], "_")
+						if len(inds_ins) > 1 {
+							industry = inds_ins[len(inds_ins)-1]
+						} else {
+							industry = inds_ins[0]
+						}
+					}
+				}
 				dates := util.LongToDate(k2["publishtime"], false)
 				//标题替换
 				otitle := util.ObjToString(k2["otitle"])
@@ -161,7 +164,7 @@ func DealSend(k *push.MemberInterest, v *list.List, now time.Time, MaxPushSize i
 						break
 					}
 				}
-				mailContent += fmt.Sprintf(mail_content, i, url, otitle, classArea, area, classType, types, dates)
+				mailContent += fmt.Sprintf(mail_content, i, url, otitle, classArea, area, classType, types, classIndustry, industry, dates)
 			}
 			//str += "<div class='tslist'><span class='xh'>" + fmt.Sprintf("%d", i) + ".</span><a class='bt' target='_blank' sid='" + _sid + "' href='" + util.ObjToString(k2["href"]) + "'>" + title + "</a></div>"
 			str += "<div class='tslist'><span class='xh'>" + fmt.Sprintf("%d", i) + ".</span><a class='bt' target='_blank' eid='" + _sid + "' href='" + util.ObjToString(k2["href"]) + "'>" + title + "</a></div>"
@@ -174,6 +177,18 @@ func DealSend(k *push.MemberInterest, v *list.List, now time.Time, MaxPushSize i
 			if k2["highlight"] != nil {
 				o_pushinfo[strconv.Itoa(i)]["highlight"] = k2["highlight"]
 			}
+			//附件数据
+			fmdata := map[string]interface{}{
+				"publishtime": k2["publishtime"],
+				"subtype":     k2["subtype"],
+				"buyer":       k2["buyer"],
+				"projectname": k2["projectname"],
+				"budget":      k2["budget"],
+				"bidopentime": k2["bidopentime"],
+				"winner":      k2["winner"],
+				"bidamount":   k2["bidamount"],
+			}
+			fmdatas = append(fmdatas, fmdata)
 			if i >= MaxPushSize {
 				//限制最大信息条数
 				break
@@ -252,22 +267,24 @@ func DealSend(k *push.MemberInterest, v *list.List, now time.Time, MaxPushSize i
 		log.Println("-----", k.Openid)
 		wid = SendWeixin(k, str, now, Tip1+WXTitle+LastTip, o_pushinfo, ratemode, infoTypeName)
 	}
-
 	//3、发送邮件
 	if bmail {
 		html := fmt.Sprintf(mail_html, strings.Replace(strings.Join(k.Interest, ";"), "+", " ", -1), mailContent)
-		go SendEmail(k.Email, html, fmt.Sprintf(mail_title, infoTypeName))
+		subject := fmt.Sprintf(mail_title, infoTypeName)
+		go SendFmail(k.Email, subject, html, fmdatas)
 		if wid == "" { //保存信息
 			SaveSendInfo(k, now, html, o_pushinfo, ratemode)
 		}
 	}
 }
 
-//推送邮件
-func SendEmail(email, str, title string) {
-	auth := GetSMail()
-	if auth != nil {
-		mail.SendMail(auth, &mail.Message{title, MailFrom, []string{email}, str})
+//推送邮件(含附件)
+func SendFmail(email, subject, html string, fmdatas []map[string]interface{}) {
+	//生成附件
+	fname := GetBidInfoXlsx(fmdatas)
+	b := mail.GSendMail(email, "", "", subject, html, fname, GmailMap)
+	if b {
+		os.Remove(fname)
 	}
 }
 

+ 3 - 1
src/jfw/modules/push/src/qfw/push/dopush/dopushes.go

@@ -16,7 +16,8 @@ import (
 )
 
 const (
-	ShowField  = `"_id","title","publishtime","toptype","subtype","type","area","href","areaval","infoformat"`
+	ShowField = `"_id","title","publishtime","toptype","subtype","type","area","href","areaval","infoformat",` +
+		`"projectname","buyer","winner","agency","budget","bidamount","bidopentime","industry"`
 	FindField  = `"title"`
 	SortQuery  = `{"publishtime":"desc"}`
 	DB         = "bidding"
@@ -137,6 +138,7 @@ func PushInfoByEs(MaxPushSize int, Config *map[string]interface{}, i_ratemode in
 	} else {
 		q["o_jy.i_ratemode"] = i_ratemode
 	}
+	q["s_m_openid"] = "oHwE_wI94DGaSDks9ky5Yj8qqSx8"
 	query := session.DB("qfw").C("user").Find(&q).Select(&map[string]interface{}{
 		"_id":        1,
 		"o_jy":       1,

+ 115 - 0
src/jfw/modules/push/src/qfw/push/dopush/excel.go

@@ -0,0 +1,115 @@
+package dopush
+
+import (
+	"fmt"
+	"math/rand"
+	qu "qfw/util"
+	"time"
+
+	"github.com/xuri/excelize"
+)
+
+var fMailTitle = map[string]map[string]interface{}{
+	"A1": {"title": "发布时间", "width": 3},
+	"B1": {"title": "公告类型", "width": 3},
+	"C1": {"title": "招标单位", "width": 5},
+	"D1": {"title": "项目名称", "width": 5},
+	"E1": {"title": "预算(万元)", "width": 3},
+	"F1": {"title": "开标时间", "width": 4},
+	"G1": {"title": "中标单位", "width": 5},
+	"H1": {"title": "中标金额(万元)", "width": 3},
+}
+var kv = map[string]string{
+	"publishtime": "A",
+	"subtype":     "B",
+	"buyer":       "C",
+	"projectname": "D",
+	"budget":      "E",
+	"bidopentime": "F",
+	"winner":      "G",
+	"bidamount":   "H",
+}
+var font = `"font":{"color":"#FFFFFF"}`
+var fill = `"fill":{"type":"gradient","color":["#4F81BD","#4F81BD"],"shading":6}`
+var border = `"border":[{"type":"left","color":"000000","style":1},{"type":"top","color":"000000","style":1},{"type":"bottom","color":"000000","style":1},{"type":"right","color":"000000","style":1}]`
+var alignment = `"alignment":{"horizontal":"center","vertical":"center","wrap_text":true}`
+var alignmentleft = `"alignment":{"horizontal":"left","vertical":"center","wrap_text":true}`
+var alignmentright = `"alignment":{"horizontal":"right","vertical":"center","wrap_text":true}`
+var sheet = "Sheet1"
+var sheetName = "剑鱼推送"
+
+func GetBidInfoXlsx(data []map[string]interface{}) string {
+	xlsx := excelize.NewFile()
+	xlsx.NewSheet(2, "Sheet2")
+	var style, styleleft, styleright int
+	style, _ = xlsx.NewStyle(`{` + font + `,` + fill + `,` + alignment + `,` + border + `}`)
+	for k, v := range fMailTitle {
+		title := v["title"].(string)
+		width := float64(v["width"].(int) * 5)
+		xlsx.SetCellStr(sheet, k, title)
+		xlsx.SetColWidth(sheet, k[0:1], k[0:1], width)
+		xlsx.SetRowHeight(sheet, 0, 25)
+		xlsx.SetCellStyle(sheet, k, k, style)
+	}
+	//信息
+	style, _ = xlsx.NewStyle(`{` + alignment + `,` + border + `}`)
+	styleleft, _ = xlsx.NewStyle(`{` + alignmentleft + `,` + border + `}`)
+	styleright, _ = xlsx.NewStyle(`{` + alignmentright + `,` + border + `}`)
+	for k, v := range data {
+		pt := v["publishtime"]
+		publishtime := qu.FormatDateWithObj(&pt, qu.Date_Short_Layout)
+		key := kv["publishtime"] + fmt.Sprint(k+2)
+		xlsx.SetCellValue(sheet, key, publishtime)
+		xlsx.SetCellStyle(sheet, key, key, style)
+
+		key = kv["subtype"] + fmt.Sprint(k+2)
+		xlsx.SetCellValue(sheet, key, v["subtype"])
+		xlsx.SetCellStyle(sheet, key, key, style)
+
+		key = kv["buyer"] + fmt.Sprint(k+2)
+		xlsx.SetCellValue(sheet, key, v["buyer"])
+		xlsx.SetCellStyle(sheet, key, key, styleleft)
+
+		key = kv["projectname"] + fmt.Sprint(k+2)
+		xlsx.SetCellValue(sheet, key, v["projectname"])
+		xlsx.SetCellStyle(sheet, key, key, styleleft)
+
+		key = kv["budget"] + fmt.Sprint(k+2)
+		budget := qu.Float64All(v["budget"]) / float64(10000)
+		if budget != 0 {
+			xlsx.SetCellValue(sheet, key, budget)
+		} else {
+			xlsx.SetCellValue(sheet, key, "")
+		}
+		xlsx.SetCellStyle(sheet, key, key, styleright)
+
+		bpt := v["bidopentime"]
+		bidopentime := qu.FormatDateWithObj(&bpt, "2006-01-02 15:04")
+		key = kv["bidopentime"] + fmt.Sprint(k+2)
+		xlsx.SetCellValue(sheet, key, bidopentime)
+		xlsx.SetCellStyle(sheet, key, key, style)
+
+		key = kv["winner"] + fmt.Sprint(k+2)
+		xlsx.SetCellValue(sheet, key, v["winner"])
+		xlsx.SetCellStyle(sheet, key, key, styleleft)
+
+		key = kv["bidamount"] + fmt.Sprint(k+2)
+		bidamount := qu.Float64All(v["bidamount"]) / float64(10000)
+		if bidamount != 0 {
+			xlsx.SetCellValue(sheet, key, bidamount)
+		} else {
+			xlsx.SetCellValue(sheet, key, "")
+		}
+		xlsx.SetCellStyle(sheet, key, key, styleright)
+	}
+	xlsx.SetSheetName(sheet, sheetName)
+	xlsx.DeleteSheet("Sheet2")
+	fname := time.Now().Format("20060102150405")
+	fname = "./xlsx/" + fname + fmt.Sprint(rand.Intn(10000)) + ".xlsx"
+	err := xlsx.SaveAs(fname)
+	if err != nil {
+		return ""
+	} else {
+		return fname
+	}
+}

+ 16 - 0
src/jfw/modules/pushent/src/config.json

@@ -0,0 +1,16 @@
+{
+    "durationMinutes": "3",
+    "elasticPoolSize": 30,
+    "elasticsearch": "http://192.168.3.18:9800",
+    "lastid": "58579a5a012a9abbe627de52",
+    "mongodbName": "qfw",
+    "mongodbPoolSize": "20",
+    "mongodbServers": "192.168.3.18:27080",
+    "redisServers": "sso=192.168.3.14:1379,other=192.168.3.14:1379,push=192.168.3.14:3379", 
+    "rpcPort": "8759",
+    "viewDomain": "192.168.3.78",
+    "weixinRpcServer": "123.56.103.12:8202",
+    "wxcontent": "剑鱼推送",
+    "wxgroup": "关注企业",
+    "wxtitle": "您关注的企业《%s》有新的公告信息!"
+}

+ 11 - 0
src/jfw/modules/pushent/src/config/config.go

@@ -0,0 +1,11 @@
+package config
+
+import (
+	"qfw/util"
+)
+
+var Sysconfig map[string]interface{}
+
+func init() {
+	util.ReadConfig(&Sysconfig)
+}

+ 71 - 0
src/jfw/modules/pushent/src/filterdata/filterdata.go

@@ -0,0 +1,71 @@
+package filterdata
+
+import (
+	"encoding/json"
+	"log"
+	"qfw/util/redis"
+)
+
+var FilterData *filterDataEntity
+
+type filterDataEntity struct {
+	Array  []string
+	OpenId string
+}
+
+func init() {
+	FilterData = &filterDataEntity{
+		Array: []string{},
+	}
+}
+
+//获取数据
+func (fde *filterDataEntity) Start(openid string) {
+	if openid == "" {
+		return
+	}
+	fde.OpenId = openid
+	data := redis.Get("push", "push_ent_"+openid)
+	if data == nil {
+		return
+	}
+	b, err := json.Marshal(data)
+	if err != nil {
+		log.Println("从redis中取出的数据转成byte数组出错!")
+		return
+	}
+	var array []string
+	if json.Unmarshal(b, &array) != nil {
+		log.Println("byte数组转成string数组出错!")
+		return
+	}
+	fde.Array = array
+}
+
+//判断数据是否存在
+func (fde *filterDataEntity) IsExists(_id string) bool {
+	if _id == "" {
+		return false
+	}
+	for _, v := range fde.Array {
+		if _id == v {
+			return true
+		}
+	}
+	//log.Println(fde.Array)
+	fde.Array = append(fde.Array, _id)
+	return false
+}
+
+//添加数据
+func (fde *filterDataEntity) End(flag int) {
+	if fde.OpenId != "" && flag == 0 {
+		if len(fde.Array) > 0 {
+			redis.Put("push", "push_ent_"+fde.OpenId, fde.Array, -1)
+		} else {
+			redis.Del("push", "push_ent_"+fde.OpenId)
+		}
+	}
+	fde.Array = []string{}
+	fde.OpenId = ""
+}

+ 14 - 0
src/jfw/modules/pushent/src/followpush/config.json

@@ -0,0 +1,14 @@
+{
+    "durationMinutes": "1",
+    "lastid": "168418e062684db687cb0624",
+    "mongodbName": "qfw",
+    "mongodbPoolSize": "20",
+    "mongodbServers": "192.168.3.18:27080",
+    "redisServers": "sso=192.168.3.14:1379,other=192.168.3.14:1379,push=192.168.3.14:3379",
+    "rpcPort": "8759",
+    "viewDomain": "192.168.3.78",
+    "weixinRpcServer": "127.0.0.1:80",
+    "wxcontent": "剑鱼推送",
+    "wxgroup": "关注项目",
+    "wxtitle": "您关注的项目《%s》有新的公告信息!"
+}

+ 138 - 0
src/jfw/modules/pushent/src/followpush/datastruct.go

@@ -0,0 +1,138 @@
+package followpush
+
+import (
+	"qfw/util"
+	"tools"
+)
+
+//构建推送时需要排序的map
+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 DFA struct {
+	Link map[string]interface{}
+}
+
+func (d *DFA) AddWord(keys ...string) {
+	if d.Link == nil {
+		d.Link = make(map[string]interface{})
+	}
+	for _, key := range keys {
+		nowMap := &d.Link
+		for i := 0; i < len(key); i++ {
+			kc := key[i : i+1]
+			if v, ok := (*nowMap)[kc]; ok {
+				nowMap, _ = v.(*map[string]interface{})
+			} else {
+				newMap := map[string]interface{}{}
+				newMap["YN"] = false
+				(*nowMap)[kc] = &newMap
+				nowMap = &newMap
+			}
+			if i == len(key)-1 {
+				(*nowMap)["YN"] = true
+				(*nowMap)["K"] = key
+			}
+		}
+	}
+}
+
+//适合一次查找
+func (d *DFA) CheckSensitiveWord(src string) string {
+	pos := 0
+	nowMap := &d.Link
+	res := ""
+	for i := 0; i < len(src); i++ {
+		word := src[i : i+1]
+		nowMap, _ = (*nowMap)[word].(*map[string]interface{})
+		if nowMap != nil { // 存在,则判断是否为最后一个
+			if pos == 0 {
+				pos = i
+			}
+			if (*nowMap)["YN"].(bool) { // 如果为最后一个匹配规则,结束循环,返回匹配标识数
+				res = util.ObjToString((*nowMap)["K"])
+				pos = 0
+				break
+			}
+		} else {
+			nowMap = &d.Link
+			if pos > 0 {
+				i = pos
+				pos = 0
+			}
+		}
+	}
+	return res
+}
+
+var titleSensitiveDFA DFA
+
+//2.用户关注标题敏感词构建
+func CreateTSM() {
+	titleSensitiveDFA = DFA{}
+	keys := []string{}
+	for k, _ := range Setting {
+		keys = append(keys, k)
+	}
+	titleSensitiveDFA.AddWord(keys...)
+}
+
+//1.用户关注普通map构建
+func UpdateUserSetting() bool {
+	//绝对相等才可以
+	//包括项目名称、项目编号
+	res := false
+	defer util.Catch()
+	//【项目编号|项目名称】*【openid】【title|项目名称】
+	////【项目编号|项目名称】[]*tmp
+	//pcode = &Setting{map[string]*map[string]string{}}
+	Setting = map[string]*[]*map[string]interface{}{}
+	sess := tools.MQFW.GetMgoConn()
+	defer tools.MQFW.DestoryMongoConn(sess)
+	cur := sess.DB(tools.MQFW.DbName).C(FOLLOW_COLLECTION).Find(&map[string]interface{}{
+		"s_openid": map[string]interface{}{
+			"$exists": true,
+		},
+		"i_ispush": map[string]interface{}{
+			"$ne": 0,
+		},
+	}).Select(map[string]interface{}{
+		"s_projectcode": 1,
+		"s_projectname": 1,
+		"s_title":       1,
+		"s_openid":      1,
+		"_id":           1,
+	}).Iter()
+	j := 0
+	for tmp := make(map[string]interface{}); cur.Next(tmp); j++ {
+		defer util.Catch()
+		mtmp := tmp
+		for _, v := range []string{"s_projectcode", "s_projectname"} {
+			pc := util.ObjToString(mtmp[v])
+			if len(pc) > 3 {
+				map1 := Setting[pc]
+				if map1 == nil {
+					map1 = &([]*map[string]interface{}{})
+					Setting[pc] = map1
+				}
+				*map1 = append(*map1, &mtmp)
+			}
+		}
+		tmp = make(map[string]interface{})
+	}
+	res = true
+	//构建敏感词
+	CreateTSM()
+	return res
+}

+ 44 - 0
src/jfw/modules/pushent/src/followpush/followpush.go

@@ -0,0 +1,44 @@
+package followpush
+
+import (
+	. "config"
+	"log"
+	"qfw/util"
+	"sync"
+)
+
+const (
+	FOLLOW_COLLECTION = "jylab_followent"
+	FOLLOW_PUSH_LOG   = "jylab_followent_pushlog"
+)
+
+//每次推前构建用户关注内存结构 项目名称和项目代码对应 用户组
+var Setting map[string]*[]*map[string]interface{}
+var WxTitle, WxContent, WxGroup, ViewDomain string
+var Lock = sync.Mutex{}
+
+//加密串
+var se util.SimpleEncrypt
+
+//推送不能大于200个字
+var LastLen int
+
+func init() {
+	se = util.SimpleEncrypt{Key: "topnet"}
+	WxTitle = util.ObjToString(Sysconfig["wxtitle"])
+	WxContent = util.ObjToString(Sysconfig["wxcontent"])
+	WxGroup = util.ObjToString(Sysconfig["wxgroup"])
+	ViewDomain = util.ObjToString(Sysconfig["viewDomain"])
+	LastLen = 200 - len([]rune(WxContent)) - len([]rune(WxGroup))
+}
+
+//开始查询最新的数据,推给用户
+var muser map[*map[string]interface{}]*[]*map[string]interface{}
+
+func Job() {
+	Lock.Lock()
+	defer Lock.Unlock()
+	lastid := util.ObjToString(Sysconfig["lastid"])
+	log.Println("start push followent info..", lastid)
+	pushByEs(lastid)
+}

+ 18 - 0
src/jfw/modules/pushent/src/followpush/followpush_test.go

@@ -0,0 +1,18 @@
+package followpush
+
+import (
+	"log"
+	"testing"
+	"time"
+)
+
+func Test_updateSetting(t *testing.T) {
+	UpdateUserSetting()
+	for k, v := range Setting {
+		for _, vv := range *v {
+			log.Println(k, (*vv)["s_openid"])
+		}
+	}
+	Job()
+	time.Sleep(100 * time.Second)
+}

+ 233 - 0
src/jfw/modules/pushent/src/followpush/push.go

@@ -0,0 +1,233 @@
+package followpush
+
+import (
+	. "config"
+	"filterdata"
+	"fmt"
+	"log"
+	"qfw/util"
+	"qfw/util/elastic"
+	qrpc "qfw/util/rpc"
+	"sort"
+	"strconv"
+	"strings"
+	"sync"
+	"time"
+	"tools"
+	"weixinrpc"
+
+	"gopkg.in/mgo.v2/bson"
+)
+
+var (
+	MaxId   = `{"query":{"filtered":{"filter":{"bool":{"must":{"range":{"id":{"gt":"%s"}}}}}}},"_source":["_id","comeintime"],"sort":{"id":"desc"},"from":0,"size":1}`
+	Query   = `{ "query": { "bool": { "must": [%s], "should": [%s], "minimum_should_match": 1 } }, "_source": [ "_id","title","publishtime","area","type","toptype","subtype","projectname","projectcode","href","infoformat" ], "sort": [ { "publishtime": "desc" } ], "from": 0, "size": 50 }`
+	IDRange = `{"range":{"id":{"gt":"%s","lte":"%s"}}}`
+	TERM    = `{"term":{"%s":"%s"}}`
+	DB      = "bidding"
+)
+
+//开始推送
+func pushByEs(_id string) bool {
+	defer util.Catch()
+	resId := elastic.Get(DB, DB, fmt.Sprintf(MaxId, _id))
+	lastid := ""
+	log.Println("push-lastid", _id, resId)
+	if resId != nil && *resId != nil && len(*resId) == 1 {
+		lastid = util.ObjToString((*resId)[0]["_id"])
+	} else {
+		log.Println("未查找到数据...", fmt.Sprintf(MaxId, _id))
+		return false
+	}
+	idrange := fmt.Sprintf(IDRange, _id, lastid)
+	sess := tools.MQFW.GetMgoConn()
+	defer tools.MQFW.DestoryMongoConn(sess)
+	cur := sess.DB(tools.MQFW.DbName).C(FOLLOW_COLLECTION).Find(&map[string]interface{}{
+		"s_openid": map[string]interface{}{
+			"$exists": true,
+		},
+		"i_ispush": map[string]interface{}{
+			"$ne": 0,
+		},
+	}).Select(map[string]interface{}{
+		"s_entname": 1,
+		"s_userid":  1,
+		"s_openid":  1,
+		"_id":       1,
+	}).Iter()
+	j := 0
+	for tmp := make(map[string]interface{}); cur.Next(tmp); j++ {
+		util.Try(func() {
+			entname := util.ObjToString(tmp["s_entname"])
+			openid := util.ObjToString(tmp["s_openid"])
+			go FindData(tmp["_id"], util.ObjToString(tmp["s_title"]), entname, openid, idrange, true, true)
+		}, func(e interface{}) {
+			log.Println(e)
+		})
+		tmp = make(map[string]interface{})
+	}
+	log.Println("push-over,user-count:", j)
+	Sysconfig["lastid"] = lastid
+	return true
+}
+
+var findpool = make(chan bool, 10)
+var Pushlock = sync.Mutex{}
+
+//不保存不推送-只保存不推送-保存推送
+func FindData(fid interface{}, title, sname, openid, idrange string, bsave, bpush bool) *Arr {
+	findpool <- true
+	defer func() {
+		<-findpool
+	}()
+	q1 := []string{}
+	if sname != "" {
+		q1 = append(q1, fmt.Sprintf(TERM, "winner", elastic.ReplaceYH(sname)))
+		//q1 = append(q1, fmt.Sprintf(TERM, "subtype", "中标"))
+	}
+	var pushArray = &Arr{}
+	if len(q1) > 0 {
+		res := elastic.Get(DB, DB, fmt.Sprintf(Query, idrange, strings.Join(q1, ",")))
+		if res != nil && *res != nil && len(*res) > 0 {
+			//顺序处理,后序会有性能瓶颈,filterdata
+			util.Try(func() {
+				if !bsave {
+					for _, info := range *res {
+						tmp := map[string]interface{}{}
+						sid := util.BsonIdToSId(info["_id"])
+						if title != sid { //title在此处传的是关注信息id
+							tmp["s_id"] = sid
+							tmp["s_eid"] = util.EncodeArticleId2ByCheck(sid)
+							tmp["s_title"] = info["title"]
+							tmp["l_publishtime"] = info["publishtime"]
+							tmp["s_province"] = info["area"]
+							tmp["s_type"] = util.ObjToString(info["type"])
+							tmp["s_toptype"] = util.ObjToString(info["toptype"])
+							tmp["s_subtype"] = util.ObjToString(info["subtype"])
+							tmp["s_entname"] = util.ObjToString(info["winner"])
+							tmp["s_url"] = util.ObjToString(info["href"])
+							*pushArray = append(*pushArray, &tmp)
+						}
+					}
+				} else {
+					Pushlock.Lock()
+					defer Pushlock.Unlock()
+					filterdata.FilterData.Start(openid)
+					defer filterdata.FilterData.End(0)
+					//1.组织信息、
+					//a_relationinfo s_id s_title s_projectname  s_projectcode  l_publishtime s_url
+					var ids []string
+					for _, info := range *res {
+						tmp := map[string]interface{}{}
+						sid := util.BsonIdToSId(info["_id"])
+						tmp["s_id"] = sid
+						tmp["s_eid"] = util.EncodeArticleId2ByCheck(sid)
+						tmp["s_title"] = info["title"]
+						tmp["l_publishtime"] = info["publishtime"]
+						tmp["s_province"] = info["area"]
+						tmp["s_type"] = util.ObjToString(info["type"])
+						tmp["s_toptype"] = util.ObjToString(info["toptype"])
+						tmp["s_subtype"] = util.ObjToString(info["subtype"])
+						tmp["s_entname"] = util.ObjToString(info["winner"])
+						tmp["s_url"] = util.ObjToString(info["href"])
+						if filterdata.FilterData.IsExists(sid) {
+							continue
+						}
+						ids = append(ids, sid)
+						*pushArray = append(*pushArray, &tmp)
+					}
+					go func() {
+						//2.推送、
+						if pushArray.Len() > 0 {
+							sort.Sort(pushArray)
+							//更新用户关注的a_relationinfo、保存到推送记录表、推送给用户
+							//log.Println(fid, ids)
+							if fid != nil && tools.MQFW.Update(FOLLOW_COLLECTION, &bson.M{
+								"_id": fid,
+							}, &bson.M{
+								"$set": bson.M{
+									"l_lastpushtime": (*((*pushArray)[0]))["l_publishtime"],
+									"a_lastpushids":  ids,
+								},
+								/*
+									"$pushAll": bson.M{
+										"a_relationinfo": pushArray,
+									},
+								*/
+							}, false, false) && bpush {
+								//进入推送逻辑
+								tit := sname
+								if tit == "" {
+									tit = title
+								}
+								if tit != "" {
+									//go func() {
+									followid := util.BsonIdToSId(fid)
+									infoid := tools.MQFW.Save(FOLLOW_PUSH_LOG, &bson.M{
+										"s_openid":       openid,
+										"a_relationinfo": pushArray,
+										"l_date":         time.Now().Unix(),
+										"s_title":        title,
+										"s_entname":      sname,
+										"s_followid":     followid,
+									})
+									if infoid != "" {
+										lastTime := util.Int64All((*(*pushArray)[0])["l_publishtime"])
+										pushtt := fmt.Sprintf(WxTitle, tit)
+										Tip1 := ""
+										minute := time.Now().Unix() - lastTime
+										if minute > -1 && minute < 61 {
+											Tip1 = fmt.Sprintf("%d秒前发布的:\n", minute)
+										} else {
+											minute = minute / 60
+											if minute < 121 {
+												if minute < 1 {
+													minute = 1
+												}
+												Tip1 = fmt.Sprintf("%d分钟前发布的:\n", minute)
+											}
+										}
+										LastTip := ""
+										pushnum := len(*pushArray)
+										if pushnum > 1 {
+											LastTip = fmt.Sprintf("...(共%d条)", pushnum)
+										}
+										LastLen = LastLen - len([]rune(pushtt)) - len([]rune(Tip1))
+										Remark := ""
+										bshow := false
+										for n := 1; n < pushnum+1; n++ {
+											Remark += fmt.Sprintf("%d %s\n", n, (*(*pushArray)[n-1])["s_title"])
+											if len([]rune(Remark)) > LastLen {
+												if n == pushnum {
+													bshow = true
+												}
+												break
+											}
+										}
+										if bshow {
+											LastTip = ""
+										}
+										go log.Println("push", openid, pushnum, tit)
+										weixinrpc.SendWinXin(&qrpc.NotifyMsg{
+											Openid:  openid,
+											Title:   fmt.Sprintf(WxTitle, tit),
+											Remark:  Tip1 + Remark + LastTip,
+											Detail:  WxContent,
+											Service: WxGroup,
+											Url:     ViewDomain + "/front/sess/" + se.EncodeString(openid+",uid,"+strconv.Itoa(int(time.Now().Unix()))+",wxpushfollowlist") + "__" + infoid + "__" + followid,
+										})
+									}
+									//}()
+								}
+								//推送结束
+							}
+						}
+					}()
+				}
+			}, func(e interface{}) {
+				log.Println("给用户推送关注信息时出错:", e)
+			})
+		}
+	}
+	return pushArray
+}

+ 46 - 0
src/jfw/modules/pushent/src/main.go

@@ -0,0 +1,46 @@
+package main
+
+import (
+	"config"
+	"followpush"
+	"log"
+	"net"
+	"net/http"
+	_ "net/http/pprof"
+	"net/rpc"
+	"qfw/util"
+	"qfw/util/elastic"
+	"qfw/util/redis"
+	"rpcpush"
+	"time"
+	"timetask"
+)
+
+func init() {
+	redis.InitRedisBySize(config.Sysconfig["redisServers"].(string), 200, 30, 300)
+	elastic.InitElasticSize(config.Sysconfig["elasticsearch"].(string), util.IntAllDef(config.Sysconfig["elasticPoolSize"], 30))
+}
+
+func main() {
+	time.Sleep(2 * time.Second)
+	log.Println(config.Sysconfig["rpcPort"], config.Sysconfig)
+	go runJob()
+	go timetask.ClearRedis()
+	crpc := new(rpcpush.FollowPushRpc)
+	rpc.Register(crpc)
+	rpc.HandleHTTP()
+	port, _ := config.Sysconfig["rpcPort"].(string)
+	l, _ := net.Listen("tcp", ":"+port)
+	go http.Serve(l, nil)
+	log.Println("启动关注推送系统", port)
+	b := make(chan bool)
+	<-b
+}
+
+func runJob() {
+	util.Try(func() {
+		followpush.Job()
+		util.WriteSysConfig(config.Sysconfig)
+	}, func(e interface{}) {})
+	time.AfterFunc(time.Duration(util.IntAll(config.Sysconfig["durationMinutes"]))*time.Minute, runJob)
+}

+ 27 - 0
src/jfw/modules/pushent/src/main_test.go

@@ -0,0 +1,27 @@
+package main
+
+import (
+	"log"
+	"strings"
+	"testing"
+
+	"gopkg.in/mgo.v2/bson"
+)
+
+func Test_main(t *testing.T) {
+	tmp := make(map[string]interface{})
+	tmp["ss"] = "ssss"
+	ss := tmp
+	m1 := map[string]*map[string]interface{}{}
+	m1["aa"] = &ss
+	tmp = make(map[string]interface{})
+	log.Println(m1["aa"])
+
+	log.Println(bson.ObjectIdHex("100000ee36b82b12a0000001").Hex())
+
+}
+
+func Test_1(t *testing.T) {
+	log.Println(strings.Contains("aassdf", "0"))
+
+}

+ 33 - 0
src/jfw/modules/pushent/src/rpcpush/findData.go

@@ -0,0 +1,33 @@
+package rpcpush
+
+import (
+	"filterdata"
+	"followpush"
+	"log"
+
+	"gopkg.in/mgo.v2/bson"
+)
+
+func RpcFindFollow(entname, followid, thisid, openid string, flag int) *followpush.Arr {
+	bsave := false
+	var ff interface{}
+	if len(followid) > 5 {
+		bsave = true
+		ff = bson.ObjectIdHex(followid)
+	}
+	if thisid != "" && bsave {
+		log.Println(thisid, "--add follow")
+		go func() {
+			followpush.Pushlock.Lock()
+			defer followpush.Pushlock.Unlock()
+			filterdata.FilterData.Start(openid)
+			defer filterdata.FilterData.End(0)
+			filterdata.FilterData.IsExists(thisid)
+		}()
+	}
+	res := followpush.FindData(ff, thisid, entname, openid, "", bsave, false)
+	if flag == 1 {
+		return res
+	}
+	return nil
+}

+ 21 - 0
src/jfw/modules/pushent/src/rpcpush/rpcpush.go

@@ -0,0 +1,21 @@
+package rpcpush
+
+import (
+	"encoding/json"
+	"qfw/util"
+	qrpc "qfw/util/rpc"
+)
+
+type FollowPushRpc struct {
+}
+
+//RPC调用结果预览
+func (p *FollowPushRpc) FollowPushEnt(data *qrpc.FollowPushEnt, Reply *[]byte) error {
+	util.Try(func() {
+		res := RpcFindFollow(data.Entname, data.FollowId, data.InfoId, data.OpenId, data.Flag)
+		if res != nil {
+			*Reply, _ = json.Marshal([]*map[string]interface{}(*res))
+		}
+	}, func(e interface{}) {})
+	return nil
+}

+ 23 - 0
src/jfw/modules/pushent/src/timetask/clearredis.go

@@ -0,0 +1,23 @@
+package timetask
+
+import (
+	"log"
+	"qfw/util/redis"
+	"time"
+)
+
+//每天凌晨清redis
+func ClearRedis() {
+	for {
+		time.Sleep(30 * time.Second)
+		now := time.Now()
+		//每天凌晨
+		next := time.Date(now.Year(), now.Month(), now.Day()+1, 0, 0, 0, 0, now.Location())
+		timer := time.NewTimer(next.Sub(now)) //自动删除
+		select {
+		case <-timer.C:
+			log.Println("每天凌晨清redis数据。")
+			redis.DelByCodePattern("push", "push_*")
+		}
+	}
+}

+ 18 - 0
src/jfw/modules/pushent/src/tools/mongo.go

@@ -0,0 +1,18 @@
+package tools
+
+import (
+	. "config"
+	"qfw/util"
+	"qfw/util/mongodb"
+)
+
+var MQFW mongodb.MongodbSim
+
+func init() {
+	MQFW = mongodb.MongodbSim{
+		MongodbAddr: Sysconfig["mongodbServers"].(string),
+		Size:        util.IntAll(Sysconfig["mongodbPoolSize"]),
+		DbName:      Sysconfig["mongodbName"].(string),
+	}
+	MQFW.InitPool()
+}

+ 1 - 0
src/jfw/modules/pushent/src/tools/tools.go

@@ -0,0 +1 @@
+package tools

+ 76 - 0
src/jfw/modules/pushent/src/weixinrpc/weixinrpc.go

@@ -0,0 +1,76 @@
+package weixinrpc
+
+import (
+	"config"
+	"log"
+	"net/rpc"
+	"qfw/util"
+	qrpc "qfw/util/rpc"
+	"strings"
+	"time"
+	"tools"
+)
+
+var wxpool chan bool = make(chan bool, 30)
+
+//微信远程调用,实现模板发送消息
+func SendWinXin(p *qrpc.NotifyMsg) {
+	wxpool <- true
+	defer func() {
+		<-wxpool
+	}()
+	util.Try(func() {
+		client, err := rpc.DialHTTP("tcp", config.Sysconfig["weixinRpcServer"].(string))
+		defer client.Close()
+		if err != nil {
+			log.Println(err.Error())
+			return
+		}
+		var repl qrpc.RpcResult
+		err = client.Call("WeiXinRpc.SendPushMsg", p, &repl)
+		if err != nil {
+			log.Println(err.Error())
+		}
+		res := string(repl)
+		if strings.Contains(res, "[46004]") || strings.Contains(res, "[65302]") || strings.Contains(res, "[43004]") || strings.Contains(res, "[40003]") {
+			updateIsPush(p.Openid, 0)
+		}
+	}, func(e interface{}) {})
+	time.Sleep(10 * time.Millisecond)
+}
+
+//微信远程调用,实现模板发送消息
+func FollowPush(p *qrpc.NotifyMsg) {
+	wxpool <- true
+	defer func() {
+		<-wxpool
+	}()
+	util.Try(func() {
+		client, err := rpc.DialHTTP("tcp", config.Sysconfig["weixinRpcServer"].(string))
+		defer client.Close()
+		if err != nil {
+			log.Println(err.Error())
+			return
+		}
+		var repl qrpc.RpcResult
+		err = client.Call("WeiXinRpc.SendPushMsg", p, &repl)
+		if err != nil {
+			log.Println(err.Error())
+		}
+	}, func(e interface{}) {})
+	time.Sleep(10 * time.Millisecond)
+}
+
+//修改是否推送的状态
+func updateIsPush(openid string, status int) {
+	tools.MQFW.Update("user", map[string]interface{}{"s_m_openid": openid}, map[string]interface{}{
+		"$set": map[string]interface{}{
+			"i_ispush": status,
+		},
+	}, false, false)
+	tools.MQFW.Update("jylab_followent", map[string]interface{}{"s_openid": openid}, map[string]interface{}{
+		"$set": map[string]interface{}{
+			"i_ispush": status,
+		},
+	}, false, true)
+}

+ 5 - 3
src/jfw/modules/pushproject/src/followpush/push.go

@@ -155,9 +155,11 @@ func FindData(fid interface{}, title, sname, scode, openid, idrange string, bsav
 									"l_lastpushtime": (*((*pushArray)[0]))["l_publishtime"],
 									"a_lastpushids":  ids,
 								},
-								"$pushAll": bson.M{
-									"a_relationinfo": pushArray,
-								},
+								/*
+									"$pushAll": bson.M{
+										"a_relationinfo": pushArray,
+									},
+								*/
 							}, false, false) && bpush {
 								//进入推送逻辑
 								tit := sname

+ 3 - 1
src/seo.json

@@ -297,6 +297,8 @@
 	"source":{
 		"baiduSEM":"百度SEM",
 		"360SEM":"360SEM",
-		"QQqun":"QQ群广告"
+		"QQqun":"QQ群广告",
+		"BDwangmeng":"百度网盟",
+		"PCwailian":"PC端外链"
 	}
 }

+ 11 - 8
src/web/staticres/css/dev2/biddingSearch.css

@@ -66,7 +66,7 @@
   font-size: 16px;
 }
 
-#searchInner .searchHeader .searchHeader-container .searchInput form input[type='submit'] {
+#searchInner .searchHeader .searchHeader-container .searchInput form input[type='button'] {
   float: left;
   width: 106px;
   height: 42px;
@@ -649,7 +649,7 @@ width:1160px;
 }
 #searchInner .searchControl .seaTender-inner .tabContainer .lucene li .luce-left {
   float: left;
-  width: 860px;
+  width: 854px;
 }
 
 #searchInner .searchControl .seaTender-inner .tabContainer .lucene li .luce-left em {
@@ -661,7 +661,7 @@ width:1160px;
 #searchInner .searchControl .seaTender-inner .tabContainer .lucene li .luce-left .left-title {
   float: left;
   line-height: 30px;
-    width: 818px
+    width: 810px
 }
 
 #searchInner .searchControl .seaTender-inner .tabContainer .lucene li .luce-left .left-title a {
@@ -675,17 +675,20 @@ width:1160px;
 
 #searchInner .searchControl .seaTender-inner .tabContainer .lucene li .luce-left .left-content {
   float: left;
-  line-height: 24px;
+  line-height: 25px;
   padding-left: 23px;
+	padding-top:15px;
 }
 
 #searchInner .searchControl .seaTender-inner .tabContainer .lucene li .luce-left .left-content a {
-  font-size: 16px;
+  color: #848487;
+  font-size: 15px;
+  cursor: text;
 }
 
 #searchInner .searchControl .seaTender-inner .tabContainer .lucene li .luce-left .left-content a:hover {
-  text-decoration: underline;
-  color: #fe7379;
+/*  text-decoration: underline;
+  color: #fe7379;*/
 }
 
 #searchInner .searchControl .seaTender-inner .tabContainer .lucene li .luce-right {
@@ -804,7 +807,7 @@ width:1160px;
 #searchInner .pagination span {
   float: left;
   width: 36px;
-  height: 31px;
+  height: 30px;
   line-height: 31px;
   text-align: center;
   color: #ffffff;

+ 64 - 0
src/web/staticres/css/dev2/biddingSearch1.css

@@ -12,4 +12,68 @@
 }
 .active{
 	background-color: #2cb7ca;
+}
+.hasNoData{
+	border-bottom: 1px solid #e0e0e0;
+    height: 400px;
+	text-align: center;
+	padding-top: 30px;
+	margin-bottom:60px;
+}
+#searchInner{
+	line-height:1;
+}
+.lucene-table tbody>tr>td:nth-child(1) div{
+	width:35px;
+}
+.lucene-table tbody>tr>td:nth-child(2) div{
+	width:88px;
+}
+.lucene-table tbody>tr>td:nth-child(3) div{
+	width:71px;
+}
+.lucene-table tbody>tr>td:nth-child(4) div{
+	width:168px;
+}
+.lucene-table tbody>tr>td:nth-child(5) div{
+	width:308px;
+}
+.lucene-table tbody>tr>td:nth-child(6) div{
+	width:60px;
+}
+.lucene-table tbody>tr>td:nth-child(7) div{
+	width:88px;
+}
+.lucene-table tbody>tr>td:nth-child(8) div{
+	width:161px;
+}
+.lucene-table tbody>tr>td:nth-child(9) div{
+	width:63px;
+}
+.com-highlight{
+	color: #2cb7ca;
+}
+.bidbut{
+	background-color: #2cb7ca;
+    color: #fff;
+    font-size: 14px;
+    padding: 4px 22px 5px 23px;
+	cursor: pointer;
+}
+#labmodalcont{
+	width: 500px;
+/*    height: 409px;*/
+    margin: auto;
+	text-align:center;
+	box-shadow: none !important;
+    background-color: rgba(255,255,255,0) !important;
+    border: 0px !important;
+}
+#labmodalbody{
+/*	width:100% !important;
+	height:100% !important;*/
+}
+#labmodalbody img{
+	width: 423px;
+    height: 409px;
 }

+ 1 - 1
src/web/staticres/css/dev2/reset_pc.css

@@ -21,7 +21,7 @@ vertical-align: baseline;
 outline: 0; 
 } 
 body { 
-line-height: 1; 
+/*line-height: 1; */
 /*color: black; 
 background: white; */
 font-family: "Microsoft YaHei",sans-serif;

+ 71 - 45
src/web/staticres/css/search/superSearch.css

@@ -145,8 +145,8 @@
 }
 .dialog-content{
 	padding: 0 10px 10px 10px;
-	border-bottom: 1px solid #CCCCCC;
 	overflow-y: auto;
+	width: 100%;
 }
 /*关键字*/
 .keyword-dialog .dialog-content{
@@ -783,7 +783,7 @@
 	color:#2cb7ca;
 	background-image: url(/images/search/sys-jt-bottom2.png);
 }
-.wxsearch .jydq-dialog .btn,.wxsearch .jytype-dialog .btn {
+.wxsearch .jydq-dialog .btn,.wxsearch .jytype-dialog .btn{
 	padding: 5px 10px;
 	background-color: #F4F4F9;
 	color: #1d1d1d;
@@ -795,7 +795,19 @@
 	border-radius: 3px;
 	height: 34px;
 }
-.wxsearch .jydq-dialog li,.wxsearch .jytype-dialog li  {
+.wxsearch .industry-dialog .btn{
+	padding: 5px 10px;
+	background-color: #F4F4F9;
+	color: #1d1d1d;
+	font-size: 14px;
+	margin-right: 10px;
+	margin-bottom: 12px;
+	float: left;
+	border-radius: 3px;
+	height: 34px;
+	min-width: 21%;
+}
+.wxsearch .jydq-dialog li,.wxsearch .jytype-dialog li, .wxsearch .industry-dialog li {
 	border-bottom: 1px solid #d9d6d6;
 	padding: 18px 0px 16px;
 	float: left;
@@ -834,6 +846,7 @@
 	background-color:#f0f9fa;
 	color:#2cb7ca;
 }
+
 .wxsearch .jydq-dialog .btn.active {
 	background-color: #24C0D7;
 	color: #FFFFFF;
@@ -842,6 +855,10 @@
 	background-color: #24C0D7;
 	color: #FFFFFF;
 }
+.wxsearch .industry-dialog .btn.active {
+	background-color: #24C0D7;
+	color: #FFFFFF;
+}
 .wxsearch .jydq-dialog #dqbtn.active {
 	background-color: #24C0D7;
 	color: #FFFFFF;
@@ -850,6 +867,10 @@
 	background-color: #24C0D7;
 	color: #FFFFFF;
 }
+.wxsearch .industry-dialog #dqbtn.active {
+	background-color: #24C0D7;
+	color: #FFFFFF;
+}
 .dialog-content #subdqbtn.active {
 	background-color: #24C0D7;
 	color: #FFFFFF;
@@ -1098,7 +1119,7 @@
 	letter-spacing: 2px;
 	text-align:center;
 }
-.jyabout .searchname{
+.jyabout .searchvalue{
 	background-color: #FFFFFF ;
 	border: 1px solid #E6E6E6;
 	height: 45px;
@@ -1413,44 +1434,7 @@
 	color: #1d1d1d;
 	position: absolute;
 	z-index: 999;
-}
-.industry-dialog .hyHead {
-	width: 34%;
-	background-color: #FFFFFF;
-}
-.industry-dialog .hyHead li{
-	padding-left: 2rem;
-	height: 3rem;
-	line-height: 3rem;
-	border: 1px solid #e0e0e0;
-	margin-top: -1px;
-	float:none;
-}
-.industry-dialog .hyHead li.on{
-	background-color: #f4f4f9;
-	border-right: none;
-}
-.hyBody{
-	width: 66%;
-	background-color: #f4f4f9;
-
-}
-.hyBody .iner-list{
-	display: none;
-}
-.hyBody .iner-list ul li{
-	height: 3rem;
-	line-height: 3rem;
-	padding-left: 3rem;
-	border: 1px solid #e0e0e0;
-	margin-top: -1px;
-	border-left:none ;
-	float:none;
-}
-.hyBody .iner-list ul li.active{
-	background: #f4f4f9 url(../../images/search/icon-right-bg.png) 1.5rem center no-repeat;
-	background-size: 1rem 1rem;
-	color: #2cb7ca;
+	margin-bottom: 30px;
 }
 .jypt-dialog .btn,.money-dialog .btn{
 	padding: 5px 0px;
@@ -1466,13 +1450,13 @@
 }
 .money-dialog .active{
 	background-color: #24C0D7;
-	color: #fff;
+	color: #fff !important;
 }
 <!--           原页面样式                  -->
 body{
 	font-size:16px !important;
 }
-.searchname{
+.searchvalue{
 	background-color: #EEEEEE !important;
 	width:85% !important;
 	font-size:16px;
@@ -1631,11 +1615,18 @@ body{
 	color: #2cb7ca;
 }
 #table{
-	overflow-x: scroll;
 	width: 100%;
 	padding-left: 20px;
 	padding-top: 20px;
 }
+#table>.data{
+	overflow-x: scroll;
+}
+#table>.TableTip{
+	padding-top: 10px;
+	padding-right: 10px;
+	color: #686868;
+}
 #table table{
 	width: 525px;
 }
@@ -1708,4 +1699,39 @@ body{
 .dy_close img{
 	width: 12px;
 	margin: 4px;
+}
+.inputDiv{
+	width: 85%;
+	z-index: 9999;
+	position: absolute;
+	background-color: #fff;
+	border-top: 1px solid #e0e0e0;
+}
+.inputDiv .history li,.inputDiv .myMsgset li,.inpTitle{
+	width: 100%;
+	height: 38px;
+	border-left: 1px solid #e0e0e0;
+	border-right: 1px solid #e0e0e0;
+	border-bottom: 1px solid #e0e0e0;
+	line-height: 38px;
+	padding-left: 10px;
+	overflow: hidden;
+}
+.inputDiv .history li,.inputDiv .myMsgset li{
+	color:#888;
+	font-size: 14px;
+}
+.inputDiv img{
+	width: 20px;
+}
+.inpTitle{
+	color:#888;
+	font-size: 16px;
+}
+.inpTitle span{
+	padding-left: 10px;
+}
+#del_history{
+	float: right;
+	margin: 9px;
 }

+ 0 - 0
src/web/staticres/images/biddingSearch/开启实验室弹窗@2x.png → src/web/staticres/images/biddingSearch/labbkimg.png


+ 0 - 0
src/web/staticres/images/biddingSearch/弹窗-close@2x.png → src/web/staticres/images/biddingSearch/layclose.png


BIN
src/web/staticres/images/search/history.png


BIN
src/web/staticres/images/search/history_clean.png


BIN
src/web/staticres/images/search/msgset.png


+ 14 - 5
src/web/staticres/js/biddingSearch.js

@@ -61,7 +61,7 @@ $(function() {
 	function searchAndEnterpriseTab() {
 		var $tabBtn = $(".searchHeader-container .control-tabBtn a");
 		$tabBtn.on("click", function() {
-			$(this).addClass("on").siblings().removeClass("on")
+			//$(this).addClass("on").siblings().removeClass("on")
 		})
 	}
 
@@ -121,6 +121,8 @@ $(function() {
 			} else {
 				$prevNode.removeClass("active").addClass("secondActice");
 			}
+			beforeSubmit();
+
 		});
 		$parentNode.on('click', function() {
 			$(this).toggleClass("active").removeClass("secondActice");
@@ -130,6 +132,7 @@ $(function() {
 			} else {
 				$nextALLChildren.addClass('active');
 			}
+			beforeSubmit();
 
 		});
 		/*如果点击没有内容给全部添加类名*/
@@ -139,11 +142,14 @@ $(function() {
 			} else {
 				$induAll.addClass("active");
 			}
+			beforeSubmit();
+
 		})
 		/*全部点击*/
 		$induAll.on("click", function() {
 			$(this).addClass("active");
-			$content.children().not($(this)).removeClass("active secondActice")
+			$content.children().not($(this)).removeClass("active secondActice");
+			beforeSubmit();
 		})
 	};
 	/*时间发布*/
@@ -154,6 +160,7 @@ $(function() {
 		$childrenLi.on("click", function() {
 			$(this).addClass("active").siblings().removeClass("active");
 			$(".timerInput").removeClass("active");
+			beforeSubmit();
 		})
 	}
 
@@ -180,9 +187,11 @@ $(function() {
 			$tabDIv = $(".tabContainer");
 
 		$tab.on("click", function() {
-			$(this).find("a").addClass("active").parent().siblings().find("a").removeClass("active");
-			$tabDIv.eq($(this).index()).show().siblings().not(".tabTitle").hide()
-
+			console.log(submitflag+"----)))))")
+			if(submitflag){
+				$(this).find("a").addClass("active").parent().siblings().find("a").removeClass("active");
+				$tabDIv.eq($(this).index()).show().siblings().not(".tabTitle").hide()
+			}
 		})
 	}
 

+ 358 - 119
src/web/staticres/js/superSearch.js

@@ -1,6 +1,9 @@
 var pageSize = 50;
 var nbflag = false;//是否显示的是最新招标数据
-var currentPage = 1;
+var currentPage = 1;//当前页
+var submitflag = true;
+var searchvalue = "";//关键词
+var searchtype = "all"//全文或标题
 
 $(function() {
 	$("#minprice").click(function(){
@@ -22,6 +25,7 @@ $(function() {
 	$(".Price-content").find("span:first-child").click(function(){
 		$(this).addClass("active");
 		$(".pricefat").removeClass("active");
+		beforeSubmit();
 	})
 	$(".timer").find("ul li:first-child").click(function(){
 		$(this).addClass("active");
@@ -42,6 +46,7 @@ $(function() {
 		$(".pricefat").addClass("active");
 		$(".Price-content").find("span:first-child").removeClass("active");
 		$(".pricefat").removeClass("customtime-active");
+		beforeSubmit()
 	})
 	//
 	$("#timebut").click(function(){
@@ -50,6 +55,7 @@ $(function() {
 		$(".timerInput").removeClass("customtime-active");
 		$(".timer").find("ul li:first-child").removeClass("active");
 		$(".release-time .timer li").removeClass("active");
+		beforeSubmit()
 	})
 	//
 	$(".nbprev").click(function(){
@@ -62,53 +68,128 @@ $(function() {
 	})
 	//筛选关闭和打开
 	//根据cookie值设置筛选是否显示
-	var rsw = $.cookie("orshow");
-	if(typeof(rsw)=="undefined"){
+	var rsw = localStorage.getItem("hideorshow");
+	if(rsw==null){
 		setTimeout(function(){
 			$(".searchTender").stop(false,true).slideDown(1000);
-			$.cookie("orshow","T",{expires:360,path:"/" });
+			localStorage.setItem("hideorshow", "D");
 		},500);
+	}else{
+		if(rsw=="U"){
+			$("#screenBtn").addClass("down");
+			$(".searchTender").hide();
+		}else{
+			$("#screenBtn").removeClass("down");
+			$(".searchTender").show();
+		}
 	}
-	/////////////////
-//	$(".right-tabBtn button:nth-child(1)").click(function(){
-//		tol="L"
-//		getNewBiddings(1)
-//	})
-//	$(".right-tabBtn button:nth-child(2)").click(function(){
-//		tol="T"
-//		getNewBiddings(1)
-//	})
+	//记录用户刷选按钮状态
+	$("#screenBtn").click(function(){
+		if($(this).attr("class").indexOf("down")>0){
+			localStorage.setItem("hideorshow", "U");
+		}else{
+			localStorage.setItem("hideorshow", "D");
+		}
+	})
+	//
+	$("#zbSeatchT input[type='button']").click(function(){
+		currentPage=1;
+		beforeSubmit(1)
+	})
+	//全文检索和标题检索切换
+	$("#newsclass li:nth-child(1)").click(function(){
+		$("#zbSeatchT [name='selectType']").val("all");
+		currentPage=1;
+		if(submitflag){
+			searchtype = "all";
+			searchOnsubmit();
+			submitflag=false;
+		}
+		
+	})
+	$("#newsclass li:nth-child(2)").click(function(){
+		$("#zbSeatchT [name='selectType']").val("title");
+		currentPage=1;
+		if(submitflag){
+			searchtype = "title";
+			searchOnsubmit();
+			submitflag=false;
+		}
+	})
+	//点击超级搜索按钮
+	$(".superSearch").click(function(){
+		$("#labModal").modal("show");
+	})
 })
 //
 function next(){
-	var page = parseInt($(".pagination-inner").find("span").text())+parseInt(1)
-	if(!nbflag&&page<11){
-		if(page==10){
-			$(".nbnext").addClass("disabled");
-		}else if(page==2){
-			$(".nbprev").removeClass("disabled");
-		}
-		getNewBiddings(page)
+	if($(".nbnext").hasClass("disabled")){
+		return false;
+	}
+	currentPage = parseInt($(".pagination-inner").find("span").text())+parseInt(1)
+	if(currentPage==10){
+		$(".nbnext").addClass("disabled");
+	}else if(currentPage==2){
+		$(".nbprev").removeClass("disabled");
+	}
+	if(!nbflag&&currentPage<11){
+		getNewBiddings()
+	}else{
+		searchOnsubmit();
 	}
 }
 function prev(){
-	var page = parseInt($(".pagination-inner").find("span").text())-parseInt(1)
-	if(!nbflag&&page>0){
-		if(page==1){
-			$(".nbprev").addClass("disabled");
-		}else if(page==9){
-			$(".nbnext").removeClass("disabled");
-		}
-		getNewBiddings(page)
+	if($(".nbprev").hasClass("disabled")){
+		return false;
+	}
+	currentPage = parseInt($(".pagination-inner").find("span").text())-parseInt(1)
+	if(currentPage==1){
+		$(".nbprev").addClass("disabled");
+	}else if(currentPage==9){
+		$(".nbnext").removeClass("disabled");
+	}
+	if(!nbflag&&currentPage>0){
+		getNewBiddings()
+	}else{
+		searchOnsubmit();
 	}
 }
 ////最新招标信息
-function getNewBiddings(page){
-	currentPage = page;
-	$.post("/jylab/supsearch/getNewBids",{pageNumber: page},function(data){
-		if(data&&data.list.length>0){
-			$(".pagination-inner").find("span").text(page)
-			appendDatas(data.list,false);
+function getNewBiddings(){
+	$("#newsclass").hide();
+	$("#newsnow").show();
+	if(currentPage==1){
+		$(".nbprev").addClass("disabled");
+	}
+	var param = {
+				pageNumber: currentPage,
+				reqType: "lastNews",
+				searchvalue: $("#zbSeatchT [name='searchvalue']").val(),
+				area: $("#zbSeatchT [name='area']").val(),
+				subtype: $("#zbSeatchT [name='subtype']").val(),
+				publishtime: $("#zbSeatchT [name='publishtime']").val(),
+				selectType : $("#zbSeatchT [name='selectType']").val(),
+				minprice : $("#zbSeatchT [name='minprice']").val(),
+				maxprice : $("#zbSeatchT [name='maxprice']").val(),
+				industry : $("#zbSeatchT [name='industry']").val(),
+			};
+	$.post("/front/pcAjaxReq",param,function(r){
+		if(r&&r.list!=null&&r.list.length>0){
+			$(".tabContainer").show();
+			$(".pagination").show();
+			$(".hasNoData").hide();
+			//$(".pagination-inner").find("span").text(currentPage);
+			if(r.list.length<pageSize||currentPage==10){
+				$(".nbnext").addClass("disabled");
+			}else{
+				$(".nbnext").removeClass("disabled");
+			}
+			appendDatas(r.list,false);
+		}else{
+			submitflag=true;
+			$(".tabContainer").hide();
+			$(".pagination").hide();
+			$(".hasNoData").show();
 		}
 	})
 }
@@ -117,7 +198,8 @@ function getNewBiddings(page){
 function appendDatas(datas,flag){
 	var listHtml = '';
 	var tableHtml = '';
-	var searchvalue = '';
+	var searchvalueArray = searchvalue.split("+");
+	$(".pagination-inner").find("span").text(currentPage);
 	for(var i=0;i<datas.length;i++){
 		var index = (currentPage - 1) * pageSize + i + 1;
 		var title = datas[i].title;
@@ -149,96 +231,124 @@ function appendDatas(datas,flag){
 				type = "";
 			}
 		}
-		if(!flag){
-				$("#allnews").hide();
-				$(".tabContainer-2").show();
-			}
-			listHtml += '<li>'
-						+'<div class="liLuceneList">'
-						+'<div class="luce-left"><em>'+index+'.</em>'
-						+'<div class="left-title">'
-						+'<a href="'+aHref+'"> '+title+'</a>'
-						+'</div>'
-			if(flag){
-				listHtml += '<div class="left-content">'
-						+'<a href="'+aHref+'">'+detail+'...</a>'
-						+'</div>'
-			}
-			listHtml += '</div><div class="luce-right">'
-			if($.trim(datas[i].area) != "" && datas[i].area != "A"){
-				listHtml += '<a href="/list/area/'+datas[i].areaadd+'.html">'+datas[i].area+'</a>';
-			}else{
-				listHtml += '<a href="#" style="display:none;"></a>';
+		if(flag&&searchtype == "all"){
+			$("#allnews").show();
+			$(".tabContainer-2").hide();
+		}else{
+			$("#allnews").hide();
+			$(".tabContainer-2").show();
+		}
+		listHtml += '<li>'
+					+'<div class="liLuceneList">'
+					+'<div class="luce-left"><em>'+index+'.</em>'
+					+'<div class="left-title">'
+					+'<a href="'+aHref+'"> '+title+'</a>'
+					+'</div>'
+		if(flag&&searchtype == "all"){
+			listHtml += '<div class="left-content">'
+					+'<a href="javascript:volid(0);">'+detail+'...</a>'
+					+'</div>'
+		}
+		listHtml += '</div><div class="luce-right">'
+		if($.trim(datas[i].area) != "" && datas[i].area != "A"){
+			listHtml += '<a href="/list/area/'+datas[i].areaadd+'.html">'+datas[i].area+'</a>';
+		}else{
+			listHtml += '<a href="#" style="display:none;"></a>';
+		}
+		if(typeof(type) != "undefined" && type != null && type != ""){
+			listHtml += '<a href="/list/stype/'+datas[i].stypeadd+'.html">'+type+'</a>';
+		}else{
+			listHtml += '<a href="#" style="display:none;"></a>';
+		}
+		//
+		if(typeof(datas[i].industry) != "undefined" && datas[i].industry != null && datas[i].industry != ""){
+			listHtml += '<a href="javascript:volid(0);">'+datas[i].industry+'</a>';
+		}else{
+			listHtml += '<a href="#" style="display:none;"></a>';
+		}
+		
+		//
+		if(typeof(datas[i].publishtime) != "undefined" && datas[i].publishtime != null && datas[i].publishtime != ""){
+			var diff = timeDiff(new Date(Number(datas[i].publishtime+"000")));
+			if(diff != null){
+				listHtml += '<span class="com-time">'+diff+'</span>';
 			}
-			if(typeof(type) != "undefined" && type != null && type != ""){
-				listHtml += '<a href="/list/stype/'+datas[i].stypeadd+'.html">'+type+'</a>';
-			}else{
-				listHtml += '<a href="#" style="display:none;"></a>';
+		}
+		listHtml += '</div></li>';
+		tableHtml +='<tr>'
+				+'<td><div>'+index+'</div></td>'
+		if(typeof(datas[i].publishtime) != "undefined" && datas[i].publishtime != null && datas[i].publishtime != ""){
+			var diff = formatDate(Number(datas[i].publishtime),"s");
+			if(diff != null){
+				tableHtml += '<td><div>'+diff+'</div></td>';
 			}
-			//
-			listHtml += '<a href="/list/stype/'+datas[i].stypeadd+'.html">建筑工程</a>';
-			//
-			if(typeof(datas[i].publishtime) != "undefined" && datas[i].publishtime != null && datas[i].publishtime != ""){
-				var diff = timeDiff(new Date(Number(datas[i].publishtime+"000")));
-				if(diff != null){
-					listHtml += '<span class="com-time">'+diff+'</span>';
+		}else{
+			tableHtml += '<td><div></div></td>';
+		}
+		if(typeof(type) != "undefined" && type != null && type != ""){
+			tableHtml += '<td><div>'+type+'公告</div></td>';
+		}else{
+			tableHtml += '<td><div></div></td>';
+		}
+		if(typeof(datas[i].agency) != "undefined" && datas[i].agency != null && datas[i].agency != ""){
+			tableHtml += '<td class="tt-l"><div>'+datas[i].agency+'</div></td>';
+		}else{
+			tableHtml += '<td class="tt-l"><div></div></td>';
+		}
+		if(typeof(datas[i].projectname) != "undefined" && datas[i].projectname != null && datas[i].projectname != ""){
+			tableHtml += '<td class="tt-l"><div>'+datas[i].projectname+'</div></td>';
+		}else{
+			tableHtml += '<td class="tt-l"><div></div></td>';
+		}
+		if(typeof(datas[i].budget) != "undefined" && datas[i].budget != null && datas[i].budget != ""){
+			var budget =parseInt(datas[i].budget)/10000
+			if(budget.toString().length>6){
+				if(budget.toString().indexOf(".")==5){
+					budget=budget.toString().substr(0,7)
+				}else{
+					budget=budget.toString().substr(0,6)
 				}
 			}
-			listHtml += '</div></li>';
-			tableHtml +='<tr>'
-					+'<td>'+index+'</td>'
-			if(typeof(datas[i].publishtime) != "undefined" && datas[i].publishtime != null && datas[i].publishtime != ""){
-				var diff = formatDate(Number(datas[i].publishtime),"s");
-				if(diff != null){
-					tableHtml += '<td>'+diff+'</td>';
+			tableHtml += '<td class="tt-r"><div>'+budget+'</div></td>';
+		}else{
+			tableHtml += '<td class="tt-r"><div></div></td>';
+		}
+		if(typeof(datas[i].bidopentime) != "undefined" && datas[i].bidopentime != null && datas[i].bidopentime != ""){
+			var diff = formatDate(Number(datas[i].publishtime),"l");
+			tableHtml += '<td><div>'+diff+'</div></td>';
+		}else{
+			tableHtml += '<td><div></div></td>';
+		}
+		if(typeof(datas[i].winner) != "undefined" && datas[i].winner != null && datas[i].winner != ""){
+			tableHtml += '<td class="tt-l"><div>'+datas[i].winner+'</div></td>';
+		}else{
+			tableHtml += '<td class="tt-l"><div></div></td>';
+		}
+		if(typeof(datas[i].bidamount) != "undefined" && datas[i].bidamount != null && datas[i].bidamount != ""){
+			var bidamount = parseInt(datas[i].bidamount)/10000
+			if(bidamount.toString().length>6){
+				if(bidamount.toString().indexOf(".")==5){
+					bidamount=bidamount.toString().substr(0,7)
+				}else{
+					bidamount=bidamount.toString().substr(0,6)
 				}
-			}else{
-				tableHtml += '<td></td>';
-			}
-			if(typeof(type) != "undefined" && type != null && type != ""){
-				tableHtml += '<td>'+type+'公告</td>';
-			}else{
-				tableHtml += '<td></td>';
-			}
-			if(typeof(datas[i].agency) != "undefined" && datas[i].agency != null && datas[i].agency != ""){
-				tableHtml += '<td class="tt-l">'+datas[i].agency+'</td>';
-			}else{
-				tableHtml += '<td class="tt-l"></td>';
-			}
-			if(typeof(datas[i].projectname) != "undefined" && datas[i].projectname != null && datas[i].projectname != ""){
-				tableHtml += '<td class="tt-l">'+datas[i].projectname+'</td>';
-			}else{
-				tableHtml += '<td class="tt-l"></td>';
 			}
-			if(typeof(datas[i].budget) != "undefined" && datas[i].budget != null && datas[i].budget != ""){
-				var budget =parseInt(datas[i].budget)/10000
-				
-				tableHtml += '<td class="tt-r">'+budget+'</td>';
-			}else{
-				tableHtml += '<td class="tt-r"></td>';
-			}
-			if(typeof(datas[i].bidopentime) != "undefined" && datas[i].bidopentime != null && datas[i].bidopentime != ""){
-				var diff = formatDate(Number(datas[i].publishtime),"l");
-				tableHtml += '<td>'+diff+'</td>';
-			}else{
-				tableHtml += '<td></td>';
-			}
-			if(typeof(datas[i].winner) != "undefined" && datas[i].winner != null && datas[i].winner != ""){
-				tableHtml += '<td class="tt-l">'+datas[i].winner+'</td>';
-			}else{
-				tableHtml += '<td class="tt-l"></td>';
-			}
-			if(typeof(datas[i].bidamount) != "undefined" && datas[i].bidamount != null && datas[i].bidamount != ""){
-				var bidamount = parseInt(datas[i].bidamount)/10000
-				tableHtml += '<td class="tt-r">'+bidamount+'</td>';
-			}else{
-				tableHtml += '<td class="tt-r"></td>';
-			}
-				tableHtml+='</tr>'
+			tableHtml += '<td class="tt-r"><div>'+bidamount+'</div></td>';
+		}else{
+			tableHtml += '<td class="tt-r"><div></div></td>';
+		}
+			tableHtml+='</tr>'
+	}
+	if(!flag||searchtype=="title"){
+		$(".tabContainer-2 .lucene ul").html(listHtml);
+		$(".tabContainer-2 .lucene-table table tbody").html(tableHtml);
+	}else{
+		if(searchtype=="all"){
+			$(".tabContainer .lucene ul").html(listHtml);
+			$(".tabContainer .lucene-table table tbody").html(tableHtml);
+		}
 	}
-	$(".tabContainer-2 .lucene ul").html(listHtml);
-	$(".tabContainer-2 .lucene-table table tbody").html(tableHtml);
-	
+	submitflag=true;
 	backTopAdjust();
 }
 //
@@ -302,4 +412,133 @@ function getInputTime(){
 		endtime = "";
 	}
 	return [starttime,endtime]
+}
+///
+function beforeSubmit(n){
+	$(".tabContainer-2 .lucene ul").html("");
+	$(".tabContainer-2 .lucene-table table tbody").html("");
+	$(".tabContainer .lucene ul").html("");
+	$(".tabContainer .lucene-table table tbody").html("");
+	setTimeout(function(){
+		currentPage=1;
+		//时间
+		if(currentPage==1){
+			$(".nbprev").addClass("disabled");
+		}
+		var publishtime = null;
+		var timeslot = getInputTime().join("_");
+		if($(".timerInput").hasClass("active")){
+			if(timeslot != "_"){
+				$("#zbSeatchT [name='publishtime']").val(timeslot);
+			}else{
+				$("#zbSeatchT [name='publishtime']").val("");
+			}
+		}else{
+			publishtime = $(".timer .active").attr("data-value");
+			if(typeof(publishtime) != "undefined"){
+				$("#zbSeatchT [name='publishtime']").val(publishtime);
+			}else{
+				$("#zbSeatchT [name='publishtime']").val("");
+			}
+		}
+		if(timeslot != "_"){
+			$("#zbSeatchT [name='timeslot']").val(timeslot);	
+		}else{
+			$("#zbSeatchT [name='timeslot']").val("");
+		}
+		//地区
+		var selectAreas = "";
+		$(".region-content .active:not(.parent-node)").each(function(){
+			var thisText = $(this).text();
+			if(thisText != "全国"){
+				if(selectAreas != ""){
+					selectAreas += ",";
+				}
+				selectAreas += thisText;
+			}
+		});
+		$("#zbSeatchT [name='area']").val(selectAreas);
+		//类型
+		var selectSubTypes = "";
+		$(".info-content .active:not(.parent-node)").each(function(){
+			if($(this).attr("id") == "whole"||$(this).attr("id") == "infoBtn"){
+				return true;
+			}
+			var thisText = $(this).attr("data-value");
+			if(selectSubTypes != ""){
+				selectSubTypes += ",";
+			}
+			selectSubTypes += thisText;
+		});
+		$("#zbSeatchT [name='subtype']").val(selectSubTypes);
+		//行业
+		var selectIndustrys = "";
+		$(".industry-content .active:not(.parent-node)").each(function(){
+			if($(this).attr("id") == "induAll"){
+				return true;
+			}
+			var thisText = $(this).attr("data-value");
+			if(selectIndustrys != ""){
+				selectIndustrys += ",";
+			}
+			selectIndustrys += thisText;
+		});
+		$("#zbSeatchT [name='industry']").val(selectIndustrys);
+		//价格
+		var selectMinPrices = $(".PriceInput [name='minprice']").val();
+		var selectMaxPrices =  $(".PriceInput [name='maxprice']").val();
+		$("#zbSeatchT [name='minprice']").val(selectMinPrices);
+		$("#zbSeatchT [name='maxprice']").val(selectMaxPrices);
+		//搜索关键词
+		var searchname = $("#zbSeatchT input[name='keywords']").val();
+		$("#zbSeatchT input[name='searchvalue']").val($.trim(searchname))
+		if(n!="F"){
+			if(submitflag){	
+				if($.trim(searchname)==""){
+					getNewBiddings();
+					nbflag = false;
+				}else{
+					searchvalue = $.trim(searchname);
+					searchOnsubmit();
+					nbflag = true;
+				}
+				submitflag=false;
+			}	
+			setTimeout(function(){
+				submitflag=true
+			},200);
+		}
+		return true
+	},200)
+}
+
+//搜索关键词信息
+function searchOnsubmit(){
+	$("#newsclass").show();
+	$("#newsnow").hide();
+	var param = {
+				pageNumber: currentPage,
+				reqType: "bidSearch",
+				searchvalue: $("#zbSeatchT [name='searchvalue']").val(),
+				area: $("#zbSeatchT [name='area']").val(),
+				subtype: $("#zbSeatchT [name='subtype']").val(),
+				publishtime: $("#zbSeatchT [name='publishtime']").val(),
+				selectType : $("#zbSeatchT [name='selectType']").val(),
+				minprice : $("#zbSeatchT [name='minprice']").val(),
+				maxprice : $("#zbSeatchT [name='maxprice']").val(),
+				industry : $("#zbSeatchT [name='industry']").val(),
+			};
+	$.post("/front/pcAjaxReq",param,function(r){
+		if(r.list == null || r.list.length == 0){
+			$(".tabContainer").hide();
+			$(".pagination").hide();
+			$(".hasNoData").show();
+			submitflag=true;
+		}else{
+			$(".tabContainer").show();
+			$(".pagination").show();
+			$(".hasNoData").hide();
+			appendDatas(r.list,true)
+		}
+	});
 }

+ 81 - 51
src/web/staticres/wxswordfish/superSearch.js

@@ -19,23 +19,7 @@ $(function(){
 		window.top.lifirst = false;
 		$(".pointlist").addClass("hidden");
 	});
-
-    //行业点击事件
-	var $leftTab = $(".industry-dialog .hyHead li"),
-		$inerLists = $(".industry-dialog .hyBody .iner-list");
-	$leftTab.on('click',function(){
-		$(this).addClass('on').siblings().removeClass("on");
-		$inerLists.eq($(this).index()).show().siblings().hide();
-		//如果点击全部 则清空以下选项
-        if($(this).index()==0){
-        	$(".hyBody li").removeClass("active");
-		}
-	})
-	$inerLists.on('click','li',function(){
-        $(".hyBody li").removeClass("active");//行业只能选一个
-		$(this).addClass('active').siblings().removeClass("active")
-	})
-
+	
 	//金额点击事件
 	$(".money-dialog .btn").click(function(){
 		$(this).addClass("active");
@@ -132,42 +116,88 @@ $(function(){
 	});
 	
 	var dialogObjtwo = $(".contenttwo");
-	dialogObjtwo.find(".btn").click(function(){
-		if($(this).parent().index() == 0){
-			dialogObjtwo.find('div[id="dqbtn"]').removeClass("active");
-			dialogObjtwo.find(".btn").removeClass("active");
-		}else{
-			dialogObjtwo.find("ul:first li:first .btn").removeClass("active");
-		};
-		$(this).toggleClass("active");
-		if ($(this).attr("class")!="active"){
-			$(this).prevAll('div[id="dqbtn"]').removeClass("active");
-		};
-		if($(this).parent("li").find(".btn").length == $(this).parent("li").find(".btn.active").length){
-			$(this).prevAll('div[id="dqbtn"]').addClass("active");
-			dialogObjtwo.find("ul:first li:first .btn").removeClass("active");
-		};
-		if(dialogObjtwo.find(".btn.active").length == 0){
-			dialogObjtwo.find("ul:first li:first .btn").addClass("active");
-		};
-	});
-	
-	dialogObjtwo.find('div[id="dqbtn"]').click(function(){
-		$(this).toggleClass("active");
-		if ($(this).attr("class") != "active"){
-			$(this).nextAll(".btn").removeClass("active");
-		}else{
-			$(this).nextAll(".btn").addClass("active");
-			dialogObjtwo.find("ul:first li:first .btn").removeClass("active");
-		};
-		if(dialogObjtwo.find(".btn.active").length == 0){
-			dialogObjtwo.find("ul:first li:first .btn").addClass("active");
-		};
-	});
+    dialogObjtwo.find(".btn").click(function(){
+        if($(this).parent().index() == 0){
+            dialogObjtwo.find('div[id="dqbtn"]').removeClass("active");
+            dialogObjtwo.find(".btn").removeClass("active");
+        }else{
+            dialogObjtwo.find("ul:first li:first .btn").removeClass("active");
+        };
+        $(this).toggleClass("active");
+        if ($(this).attr("class")!="active"){
+            $(this).prevAll('div[id="dqbtn"]').removeClass("active");
+        };
+        if($(this).parent("li").find(".btn").length == $(this).parent("li").find(".btn.active").length){
+            $(this).prevAll('div[id="dqbtn"]').addClass("active");
+            dialogObjtwo.find("ul:first li:first .btn").removeClass("active");
+        };
+        if(dialogObjtwo.find(".btn.active").length == 0){
+            dialogObjtwo.find("ul:first li:first .btn").addClass("active");
+        };
+    });
+
+    dialogObjtwo.find('div[id="dqbtn"]').click(function(){
+        $(this).toggleClass("active");
+        if ($(this).attr("class") != "active"){
+            $(this).nextAll(".btn").removeClass("active");
+        }else{
+            $(this).nextAll(".btn").addClass("active");
+            dialogObjtwo.find("ul:first li:first .btn").removeClass("active");
+        };
+        if(dialogObjtwo.find(".btn.active").length == 0){
+            dialogObjtwo.find("ul:first li:first .btn").addClass("active");
+        };
+    });
+    //铺设行业信息
+    var industryHtml="";
+    if(sortArray&&industryData){
+        for(var i in sortArray){
+            industryHtml+="<li><div id=\"dqbtn\" style=\"width:81px;\">"+sortArray[i]+"</div>";
+            var childnode=industryData[sortArray[i]];
+            for(var j in childnode){
+                industryHtml+="<button class=\"btn\" data-value="+sortArray[i]+"_"+childnode[j]+">"+childnode[j]+"</button>";
+            }
+            industryHtml+="</li>";
+        }
+        $(".industry-dialog .contentthree ul").append(industryHtml);
+	}
 
 
+    //行业点击事件
+    var dialogObjthree = $(".contentthree");
+    dialogObjthree.find(".btn").click(function(){
+        if($(this).parent().index() == 0){
+            dialogObjthree.find('div[id="dqbtn"]').removeClass("active");
+            dialogObjthree.find(".btn").removeClass("active");
+        }else{
+            dialogObjthree.find("ul:first li:first .btn").removeClass("active");
+        };
+        $(this).toggleClass("active");
+        if ($(this).attr("class")!="active"){
+            $(this).prevAll('div[id="dqbtn"]').removeClass("active");
+        };
+        if($(this).parent("li").find(".btn").length == $(this).parent("li").find(".btn.active").length){
+            $(this).prevAll('div[id="dqbtn"]').addClass("active");
+            dialogObjthree.find("ul:first li:first .btn").removeClass("active");
+        };
+        if(dialogObjthree.find(".btn.active").length == 0){
+            dialogObjthree.find("ul:first li:first .btn").addClass("active");
+        };
+    });
 
-	$(".jysstj").find(".jydqreset").click(function(){
+    dialogObjthree.find('div[id="dqbtn"]').click(function(){
+        $(this).toggleClass("active");
+        if ($(this).attr("class") != "active"){
+            $(this).nextAll(".btn").removeClass("active");
+        }else{
+            $(this).nextAll(".btn").addClass("active");
+            dialogObjthree.find("ul:first li:first .btn").removeClass("active");
+        };
+        if(dialogObjthree.find(".btn.active").length == 0){
+            dialogObjthree.find("ul:first li:first .btn").addClass("active");
+        };
+    });
+/*	$(".jysstj").find(".jydqreset").click(function(){
 		//$(".point").addClass("hidden");
 		$(".searchname [name='searchvalue']").val("");
 		$(".searchname [name='area']").val("");
@@ -185,7 +215,7 @@ $(function(){
 		$(".jypt-timeinputs").removeClass("jypt-timeinputs-active");
 		$(".jypt-pt>button").removeClass("jypt-active");
 		$(".jypt-pt>button:first").addClass("jypt-active");
-	});
+	});*/
 	function processVal(value){
 		$("[name='searchvalue']").val(value.replace(/^\s+|\s+$/g,"").replace(/\s+/g,"+"));
 	}

+ 202 - 55
src/web/templates/pc/biddingsearch_enterprise.html

@@ -1,13 +1,103 @@
-<!doctype html>
-<html lang="zh-cn">
 
+<html lang="zh-cn">
 	<head>
-		<meta charset="UTF-8" />
-		<link rel="stylesheet" type="text/css" href="/css/dev2/reset_pc.css" />
-		<link rel="stylesheet" type="text/css" href="/css/dev2/biddingSearch.css" />
-		<title>招标搜索</title>
+		<title>{{Msg "seo" "qfw.swordfishsl.title"}}</title>
+		<meta http-equiv="X-UA-Compatible" content="IE=edge,Chrome=1" />
+		<meta name="Keywords" content="{{Msg "seo" "qfw.swordfishsl.key"}}"/>
+		<meta name="Description" content="{{Msg "seo" "qfw.swordfishsl.description"}}"/>
+		<meta name="renderer" content="webkit">
+		<meta content="telephone=no" name="format-detection"/>
 		{{include "/common/pnc.html"}}
 		<link href="/css/pc.css?v={{Msg "seo" "version"}}" rel="stylesheet">
+		<link href="/css/dev2/reset_pc.css?v={{Msg "seo" "version"}}" rel="stylesheet">
+		<link href="/css/dev2/biddingSearch.css?v={{Msg "seo" "version"}}" rel="stylesheet">
+		<link href="/css/dev2/biddingSearch1.css?v={{Msg "seo" "version"}}" rel="stylesheet">
+		<script src="/js/jquery.cookie.js"></script>
+		<script src="/js/jquery-3.2.1.min.js?v={{Msg "seo" "version"}}"></script>
+		<script src="/js/biddingSearch.js?v={{Msg "seo" "version"}}"></script>
+		<script language="javascript" type="text/javascript" src="/My97DatePicker/WdatePicker.js"></script>
+		
+		<style type="text/css">
+			a{
+				text-decoration: none !important;
+			}
+
+			/*j-wx-code Start*/
+			.j-wx-code{
+				width: 335px;
+				height: 355px;
+				background-color: #fff;
+				-webkit-border-radius: 6px;
+				   -moz-border-radius: 6px;
+				        border-radius: 6px;
+				position: relative;
+				/*margin: 100px auto;*/
+			}
+			.j-wx-code>.code-close{
+				width: 40px;
+				height: 40px;
+				position: absolute;
+				right: -20px;
+				top: -20px;
+				cursor: pointer;
+				-webkit-transition: all 1s;
+				-o-transition: all 1s;
+				-moz-transition: all 1s;
+				transition: all 1s;
+			}
+			.j-wx-code>.code-close:hover{
+				-webkit-transform: scale(1.2);
+				   -moz-transform: scale(1.2);
+				    -ms-transform: scale(1.2);
+				     -o-transform: scale(1.2);
+				        transform: scale(1.2);
+			}
+			.j-wx-code>.code-title{
+				height: 82px;
+				background:url(/images/j-wx-code-title.png) center center no-repeat;
+				-webkit-animation: moveYun 15s infinite linear both;
+				   -moz-animation: moveYun 15s infinite linear both;
+				     -o-animation: moveYun 15s infinite linear both;
+				        animation: moveYun 15s infinite linear both;
+			}
+			.j-wx-code>.code-wxm{
+				text-align: center;
+				margin-bottom: -6px;
+				margin-top: -16px;
+				
+			}
+			.j-wx-code>.code-wxm>img{
+				width: 200px;
+				height: 200px;
+				margin-top: -5px;
+			}
+			.j-wx-code>.code-text{
+				font: 16px "microsoft yahei";
+				text-align: center;
+				color: #252627;
+			}
+			.j-wx-code>.code-bottom{
+				width: 470px;
+				height: 211px;
+				position: absolute;
+				bottom: -113px;
+				left: -73px;
+				background: url(/images/j-wx-code-bottom.png) 0 0 no-repeat;
+			}
+			.j-wx-code>.code-bottom>img{
+				position: absolute;
+				left: 280px;
+				top: 88px;
+				-webkit-animation: codeWxMove 10s linear both;
+				   -moz-animation: codeWxMove 10s linear both;
+				     -o-animation: codeWxMove 10s linear both;
+				        animation: codeWxMove 10s linear both;
+				-webkit-animation-fill-mode:forwards;
+				   -moz-animation-fill-mode:forwards;
+				     -o-animation-fill-mode:forwards;
+				        animation-fill-mode:forwards;
+			}
+		</style>
 	</head>
 
 	<body>
@@ -18,16 +108,16 @@
 				<div class="w searchHeader-container">
 					<!--整体页面切换tab-->
 					<div class="control-tabBtn">
-						<a href="#" class="on">超级搜索</a>
-						<a href="#">中标企业搜索</a>
+						<a href="#">超级搜索</a>
+						<a href="#" class="on">中标企业搜索</a>
 					</div>
 					<!--搜索-->
 					<div class="searchInput clearfix">
-						<form action="" method="" class="clearfix">
-							<input  autocomplete="off" type="search" name="" id="search" value="" placeholder="高速公路" />
+						<form action="/jylab/bidsearchforent" method="post" id="zbSeatchT" class="clearfix" onsubmit="return true">
+							<input class="searchname" autocomplete="off" type="search" name="keywords" id="searchinput" value="" placeholder="高速公路" />
 
-							<input type="submit" value="搜索" />
-							<div class="searchSlideText">
+							<input type="button" class="searchBtn" value="搜索" />
+							<!--<div class="searchSlideText">
 								<ul>
 									<li>大连<i>万达集团</i>股份有限公司北京投资管理分公司</li>
 									<li>滁州市<i>万达集团</i>公司</li>
@@ -42,7 +132,12 @@
 									<li>大连<i>万达集团</i>股份有限公司天津共享服务分公司</li>
 									<li>大连<i>万达集团</i>股份有限公司北京投资管理分公司</li>
 								</ul>
-							</div>
+							</div>-->
+							<input type="hidden" name="searchvalue" value="{{.T.searchvalue}}">
+							<input type="hidden" name="area" value="{{.T.area}}">
+							<input type="hidden" name="minprice" value="{{.T.minprice}}">
+							<input type="hidden" name="maxprice" value="{{.T.maxprice}}">
+							<input type="hidden" name="pricetype" value="{{.T.pricetype}}">
 						</form>
 						<!--筛选-->
 						<div id="screenBtn" class="screen up">
@@ -72,12 +167,14 @@
 						</div>
 						<div class="Price-content clearfix">
 							<span class="active">全部</span>
-							<div class="PriceInput">
-								<input type="text" name="" id="" value="" placeholder="最低价              万元" />
-								<span></span>
-								<input type="text" name="" id="" value="" placeholder="最高价              万元" />
+							<div class="pricefat">
+								<div class="PriceInput">
+									<input type="text" name="minprice" id="minprice" value="{{.T.minprice}}" placeholder="最低价              万元" />
+									<span></span>
+									<input type="text" name="maxprice" id="maxprice" value="{{.T.maxprice}}" placeholder="最高价              万元" />
+								</div>
+								<button class="pricebut" style="display:none;">确定</button>
 							</div>
-							<button>确定</button>
 						</div>
 					</div>
 					<!--项目地区-->
@@ -86,7 +183,7 @@
 							项目地区:
 						</div>
 						<div class="region-content">
-							<span id="regionBtn" class=" active">全国</span>
+							<span id="regionBtn" class="active">全国</span>
 							<i class="diver"></i>
 							<font class="parent-node">华北地区</font>
 							<font>北京</font>
@@ -141,7 +238,7 @@
 					<div class="tabTitle clearfix">
 						<ul>
 							<li>
-								<a class="active" href="javascript:;">全文搜索</a>
+								<a class="active" href="javascript:;">最新招标信息</a>
 							</li>
 						</ul>
 						<div class="right-tabBtn">
@@ -159,14 +256,14 @@
 									<div class="liLuceneList">
 										<div class="luce-left">
 											<div class="left-title">
-												<a href="#"> <em>{{$k}}</em>{{$v.projectname}}</a>
+												<a href="#"> <em>{{$v.k}}</em>{{$v.projectname}}</a>
 											</div>
 										</div>
 										<div class="luce-right">
 											<a href="#">{{$v.area}}</a>
 											<a href="#">{{$v.bidtype}}</a>
-											<a href="#">建筑工程</a>
-											<span>{{$v.zbtime}}</span>
+											<a href="#">{{$v.industry}}</a>
+											<span>{{$v.time1}}</span>
 										</div>
 									</div>
 								</li>
@@ -185,30 +282,14 @@
 									</tr>
 								</thead>
 								<tbody>
+								{{range $k,$v:= .T.list}}
 									<tr>
-										<td>1</td>
-										<td>2017-6-15 </td>
-										<td class="tt-l">高速压坏地方公路建设项目</td>
-										<td class="tt-r">1000</td>
-									</tr>
-									<tr>
-										<td>1</td>
-										<td>2017-6-15 </td>
-										<td class="tt-l">高速压坏地方公路建设项目</td>
-										<td class="tt-r">1000</td>
-									</tr>
-									<tr>
-										<td>1</td>
-										<td>2017-6-15 </td>
-										<td class="tt-l">高速压坏地方公路建设项目</td>
-										<td class="tt-r">1000</td>
-									</tr>
-									<tr>
-										<td>1</td>
-										<td>2017-6-15 </td>
-										<td class="tt-l">高速压坏地方公路建设项目</td>
-										<td class="tt-r">1000</td>
+										<td>{{$v.k}}</td>
+										<td>{{$v.time2}} </td>
+										<td class="tt-l">{{$v.projectname}}</td>
+										<td class="tt-r">{{$v.bidamount}}</td>
 									</tr>
+								{{end}}
 								</tbody>
 							</table>
 						</div>
@@ -225,22 +306,88 @@
 				</div>
 			</div>
 			<!--招标搜索页面 END-->
-
-
-
 		</section>
-		<script type="text/javascript" src="/js/jquery-3.2.1.min.js"></script>
-		<script type="text/javascript" src="/js/biddingSearch.js"></script>
+
 	{{include "/common/pcbottom.html"}}
 	{{include "/common/baiducc.html"}}
 	<script>
 		var mainList = {{.T.list}};
-		$(function () {
-//		    for(var i=0;i<mainList.length;i++){
-//		        alert(mainList[i]["projectname"])
-//			}
-
+		
+		
+		$(function(){
+			haslogin({{.T.logid}});
+			
+			//价格
+			$("#minprice").click(function(){
+				$(".pricebut").show();
+				$(".pricefat").addClass("customtime-active");
+			})
+			$("#maxprice").click(function(){
+				$(".pricebut").show();
+				$(".pricefat").addClass("customtime-active");
+			})
+			$(".Price-content").find("span:first-child").click(function(){
+				$(this).addClass("active");
+				$(".pricefat").removeClass("active");
+			})
+			$(".pricebut").click(function(){
+				var minp = $("#minprice").val();
+				var maxp = $("#maxprice").val();
+				if (minp==""||maxp==""){
+					return false;
+				}
+				if (minp>maxp){
+					$("#minprice").val(maxp);
+					$("#maxprice").val(minp);
+				}
+				$(this).hide();
+				$(".pricefat").addClass("active");
+				$(".Price-content").find("span:first-child").removeClass("active");
+				$(".pricefat").removeClass("customtime-active");
+				beforeSubmit();
+			})		
         });
+		function beforeSubmit(){			
+			//地区
+			var selectAreas = "";
+			$(".region-content .active:not(.parent-node)").each(function(){
+				var thisText = $(this).text();
+				if(thisText != "全国"){
+					if(selectAreas != ""){
+						selectAreas += ",";
+					}
+					selectAreas += thisText;
+				}
+			});
+			$("#zbSeatchT [name='area']").val(selectAreas);
+			
+			//价格
+			var selectMinPrices = $(".PriceInput [name='minprice']").val();
+			var selectMaxPrices =  $(".PriceInput [name='maxprice']").val();
+			$("#zbSeatchT [name='minprice']").val(selectMinPrices);
+			$("#zbSeatchT [name='maxprice']").val(selectMaxPrices);
+			//搜索关键词
+			var searchname = $("#zbSeatchT input[name='keywords']").val();
+			console.log("----"+searchname)
+			$("#zbSeatchT input[name='searchvalue']").val($.trim(searchname))
+			searchOnsubmit();
+			return true
+		}
+//
+		function searchOnsubmit(){
+			var param = {
+						searchvalue: $("#zbSeatchT [name='searchvalue']").val(),
+						area: $("#zbSeatchT [name='area']").val(),
+						minprice: $("#zbSeatchT [name='minprice']").val(),
+						maxprice: $("#zbSeatchT [name='maxprice']").val(),
+					};
+			$.post("/jylab/pcSearchZbqyAjax",param,function(r){
+				
+			});
+		}
+
+
+
 	</script>
 	</body>
 

+ 103 - 128
src/web/templates/pc/supsearch.html

@@ -99,24 +99,60 @@ a{
 #keyImg{
 	width:198px;
 }
+#layerImg{
+	position:absolute;
+	width: 150px !important;
+    height: 150px !important;
+    left: 198px;
+    top: 148px;
+}
+.layheader{
+	position: absolute;
+    color: #fff;
+    left: 138px;
+    top: 40px;
+    line-height: 32px;
+    font-family: 微软雅黑;
+    font-weight: bold;
+}
+.layheader div:nth-child(1){
+	font-size:20px;
+}
+.layheader div:nth-child(2){
+	font-size:16px;
+	margin-top:10px;
+}
+.modal-footer{
+	text-align: center;
+    position: absolute;
+    bottom: 65px;
+    left: 110px;
+    font-size: 14px;
+    line-height: 22px;
+    color: #686868;
+}
+.modal-dialog{
+	width:500px;
+}
 </style>
 <script>
 $(function(){
-	var industry = {{.T.industry}}
+	var industrylist = {{.T.industrylist}}
 	var sortArray = {{.T.sortArray}}
 	var industryhtml = '<span id="induAll" class="active">全部</span>';
 	if (sortArray!=null&&sortArray.length>0){
 		for(var i in sortArray){
 			var fat = sortArray[i]
-			var childlist = industry[fat]
+			var childlist = industrylist[fat]
 			industryhtml+='<i class="diver"></i>'
 					+'<font class="parent-node ">'+fat+'</font>'
 			for (var j in childlist){
-				industryhtml+='<font>'+childlist[j]+'</font>'
+				industryhtml+='<font data-value="'+fat+'_'+childlist[j]+'">'+childlist[j]+'</font>'
 			}
 		}
 		$(".industry-content").html(industryhtml)
 	}
+	
 })
 </script>
 <script src="/js/biddingSearch.js?v={{Msg "seo" "version"}}"></script>
@@ -124,21 +160,39 @@ $(function(){
 </head>
 <body>
 {{include "/common/pchead.html"}}
+<div class="modal fade" id="labModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
+    <div class="modal-dialog">
+        <div class="modal-content" id="labmodalcont">
+            <div class="modal-body" id="labmodalbody">
+				<div class="layheader">
+					<div>超级搜索</div>
+					<div>按行业、金额搜索、结果可按表格显示</div>
+				</div>
+				<img src="/images/biddingSearch/labbkimg.png"/>
+				<img id="layerImg" src="/front/share/{{.T.shareid}}"/>
+			</div>
+            <div class="modal-footer">
+                此功能尚处在实验阶段,请扫码进入<br>剑鱼实验室,打开相应开关后,即可体验!
+            </div>
+        </div><!-- /.modal-content -->
+    </div><!-- /.modal -->
+</div>
 <section id="searchInner">
 	<!--搜索头部 START-->
 	<div class="searchHeader">
 		<div class="w searchHeader-container">
 			<!--整体页面切换tab-->
 			<div class="control-tabBtn">
-				<a href="#" class="on">超级搜索</a>
+				<a href="#" class="on" style="display:none;">超级搜索</a>
+				<span class="bidbut">招标搜索</span>
 				<a href="#">中标企业搜索</a>
 			</div>
 			<!--搜索-->
 			<div class="searchInput clearfix">
-				<form action="" method="" class="clearfix">
-					<input class="searchname" autocomplete="off" type="search" name="" id="searchinput" value="" name="keywords" placeholder="高速公路" />
+				<form action="/jylab/supsearch/index.html" method="post"  id="zbSeatchT" class="clearfix" onsubmit="return beforeSubmit('F')">
+					<input class="searchname" autocomplete="off" type="search" id="searchinput" value="" name="keywords" placeholder="高速公路" />
 
-					<input type="submit" value="搜索" />
+					<input type="button" value="搜索" />
 <!--					<div class="searchSlideText">
 						<ul>
 							<li>大连<i>万达集团</i>股份有限公司北京投资管理分公司</li>
@@ -155,6 +209,15 @@ $(function(){
 							<li>大连<i>万达集团</i>股份有限公司北京投资管理分公司</li>
 						</ul>
 					</div>-->
+					<input type="hidden" name="searchvalue" value="{{.T.searchvalue}}">
+					<input type="hidden" name="publishtime" value="{{.T.publishtime}}">
+					<input type="hidden" name="timeslot" value="{{.T.timeslot}}">
+					<input type="hidden" name="area" value="{{.T.area}}">
+					<input type="hidden" name="subtype" value="{{.T.subtype}}">
+					<input type="hidden" name="minprice" value="{{.T.minprice}}">
+					<input type="hidden" name="maxprice" value="{{.T.maxprice}}">
+					<input type="hidden" name="industry" value="{{.T.selectIndustry}}">
+					<input type="hidden" name="selectType" value="all">
 				</form>
 				<!--筛选-->
 				<div id="screenBtn" class="screen up">
@@ -208,7 +271,7 @@ $(function(){
 					价格区间:
 				</div>
 				<div class="Price-content clearfix">
-					<span class="active">全部</span>
+					<span id="priceAll" class="active">全部</span>
 					<div class="pricefat">
 						<div class="PriceInput">
 							<input type="text" name="minprice" id="minprice" value="" placeholder="最低价              万元" />
@@ -226,10 +289,10 @@ $(function(){
 				</div>
 				<div class="fl timer">
 					<ul>
-						<li class="active">全部</li>
-						<li>最近七天</li>
-						<li>最近30天</li>
-						<li>去年</li>
+						<li id="timerAll" class="active" data-value="">全部</li>
+						<li data-value="lately-7">最近七天</li>
+						<li data-value="lately-30">最近30天</li>
+						<li data-value="thisyear">去年</li>
 					</ul>
 				</div>
 				<div class="timerInput fl">
@@ -302,30 +365,32 @@ $(function(){
 					<span id="infoBtn" class=" active">全部</span>
 					<i class="diver"></i>
 					<font class="parent-node infoFist">拟建项目</font>
-					<a><img class="q-mark" id="q-mark"  src="/images/biddingSearch/info-icon1.png" alt="" /></a>
+					<font data-value="拟建" class="hidden">拟建</font>
+					<a id="whole"><img class="q-mark" id="q-mark"  src="/images/biddingSearch/info-icon1.png" alt="" /></a>
 					<i class="diver"></i>
 					<font class="parent-node">招标预告</font>
+					<font data-value="预告" class="hidden">预告</font>
 					<i class="diver"></i>
 					<font class="parent-node">招标公告</font>
-					<font>招标</font>
-					<font>邀标</font>
-					<font>询价</font>
-					<font>竞谈</font>
-					<font>单一</font>
-					<font>竞价</font>
-					<font>变更</font>
-					<font>其他</font>
+					<font data-value="招标">招标</font>
+					<font data-value="邀标">邀标</font>
+					<font data-value="询价">询价</font>
+					<font data-value="竞谈">竞谈</font>
+					<font data-value="单一">单一</font>
+					<font data-value="竞价">竞价</font>
+					<font data-value="变更">变更</font>
+					<font data-value="其他">其他</font>
 					<i class="diver"></i>
 					<font class="parent-node">招标结果</font>
-					<font>中标</font>
-					<font>成交</font>
-					<font>废标</font>
-					<font>流标</font>
+					<font data-value="中标">中标</font>
+					<font data-value="成交">成交</font>
+					<font data-value="废标">废标</font>
+					<font data-value="流标">流标</font>
 					<i class="diver"></i>
 					<font class="parent-node">招标信用信息</font>
-					<font>合同</font>
-					<font>验收</font>
-					<font>违规</font>
+					<font data-value="合同">合同</font>
+					<font data-value="验收">验收</font>
+					<font data-value="违规">违规</font>
 				</div>
 				<span class="remind" style="display:none;">
 					<span class="remindone"></span>
@@ -378,58 +443,11 @@ $(function(){
 								<td width="65">预算<br>(万元)</td>
 								<td width="100">开标时间</td>
 								<td width="180">中标单位</td>
-								<td>中标金额(万元)</td>
+								<td>中标金额<br>(万元)</td>
 							</tr>
 						</thead>
 						<tbody>
-							<tr>
-								<td>1-1</td>
-								<td>2017-6-15</td>
-								<td>中标公告</td>
-								<td class="tt-l"><i>高速</i>公路管理处管理处</td>
-								<td class="tt-l"><i>高速</i>压坏地方<i>公路</i>建设项目</td>
-								<td class="tt-r">1000</td>
-								<td>2017-7-15 9:30</td>
-								<td class="tt-l">河南同济路桥工程技术 有限公司
-								</td>
-								<td class="tt-r">1200</td>
-							</tr>
-							<tr>
-								<td>2</td>
-								<td>2017-6-15</td>
-								<td>中标公告</td>
-								<td class="tt-l"><i>高速</i>公路管理处管理处</td>
-								<td class="tt-l"><i>高速</i>压坏地方<i>公路</i>建设项目</td>
-								<td class="tt-r">1000</td>
-								<td>2017-7-15 9:30</td>
-								<td class="tt-l">河南同济路桥工程技术 有限公司
-								</td>
-								<td class="tt-r">1200</td>
-							</tr>
-							<tr>
-								<td>3</td>
-								<td>2017-6-15</td>
-								<td>中标公告</td>
-								<td class="tt-l"><i>高速</i>公路管理处管理处</td>
-								<td class="tt-l"><i>高速</i>压坏地方<i>公路</i>建设项目</td>
-								<td class="tt-r">1000</td>
-								<td>2017-7-15 9:30</td>
-								<td class="tt-l">河南同济路桥工程技术 有限公司
-								</td>
-								<td class="tt-r">1200</td>
-							</tr>
-							<tr>
-								<td>4</td>
-								<td>2017-6-15</td>
-								<td>中标公告</td>
-								<td class="tt-l"><i>高速</i>公路管理处管理处</td>
-								<td class="tt-l"><i>高速</i>压坏地方<i>公路</i>建设项目</td>
-								<td class="tt-r">1000</td>
-								<td>2017-7-15 9:30</td>
-								<td class="tt-l">河南同济路桥工程技术 有限公司
-								</td>
-								<td class="tt-r">1200</td>
-							</tr>
+							
 						</tbody>
 					</table>
 				</div>
@@ -437,13 +455,13 @@ $(function(){
 			<!--tab切换内容-->
 			<div class="tabContainer tabContainer-2" style="display: none;">
 				<!--全文搜索 列表-->
-				<div class="lucene" style="display: none;">
+				<div class="lucene">
 					<ul>
 						
 					</ul>
 				</div>
 				<!--全文搜索 表格-->
-				<div class="lucene-table">
+				<div class="lucene-table" style="display: none;">
 					<table>
 						<thead>
 							<tr>
@@ -455,62 +473,18 @@ $(function(){
 								<td width="65">预算<br>(万元)</td>
 								<td width="100">开标时间</td>
 								<td width="180">中标单位</td>
-								<td>中标金额(万元)</td>
+								<td>中标金额<br>(万元)</td>
 							</tr>
 						</thead>
 						<tbody>
-							<tr>
-								<td>2-1</td>
-								<td>2017-6-15</td>
-								<td>中标公告</td>
-								<td class="tt-l"><i>高速</i>公路管理处管理处</td>
-								<td class="tt-l"><i>高速</i>压坏地方<i>公路</i>建设项目</td>
-								<td class="tt-r">1000</td>
-								<td>2017-7-15 9:30</td>
-								<td class="tt-l">河南同济路桥工程技术 有限公司
-								</td>
-								<td class="tt-r">1200</td>
-							</tr>
-							<tr>
-								<td>2</td>
-								<td>2017-6-15</td>
-								<td>中标公告</td>
-								<td class="tt-l"><i>高速</i>公路管理处管理处</td>
-								<td class="tt-l"><i>高速</i>压坏地方<i>公路</i>建设项目</td>
-								<td class="tt-r">1000</td>
-								<td>2017-7-15 9:30</td>
-								<td class="tt-l">河南同济路桥工程技术 有限公司
-								</td>
-								<td class="tt-r">1200</td>
-							</tr>
-							<tr>
-								<td>3</td>
-								<td>2017-6-15</td>
-								<td>中标公告</td>
-								<td class="tt-l"><i>高速</i>公路管理处管理处</td>
-								<td class="tt-l"><i>高速</i>压坏地方<i>公路</i>建设项目</td>
-								<td class="tt-r">1000</td>
-								<td>2017-7-15 9:30</td>
-								<td class="tt-l">河南同济路桥工程技术 有限公司
-								</td>
-								<td class="tt-r">1200</td>
-							</tr>
-							<tr>
-								<td>4</td>
-								<td>2017-6-15</td>
-								<td>中标公告</td>
-								<td class="tt-l"><i>高速</i>公路管理处管理处</td>
-								<td class="tt-l"><i>高速</i>压坏地方<i>公路</i>建设项目</td>
-								<td class="tt-r">1000</td>
-								<td>2017-7-15 9:30</td>
-								<td class="tt-l">河南同济路桥工程技术 有限公司
-								</td>
-								<td class="tt-r">1200</td>
-							</tr>
+							
 						</tbody>
 					</table>
 				</div>
 			</div>
+			<div class="hasNoData" style="display: none;">
+				<img src="/images/pc_12.png" id="hasNoData">
+			</div>
 		</div>
 		<!--分页-->
 		<div class="pagination clearfix w">
@@ -529,6 +503,7 @@ $(function(){
 <script type="text/javascript">
 $(function(){
 	haslogin({{.T.logid}});
+	console.log(loginflag+"-------")
 	//
 	$(".q-mark").click(function(){
 		$(".remind").fadeIn();

+ 110 - 13
src/web/templates/weixin/search/mainSearch.html

@@ -19,7 +19,7 @@
             color: #000;
             background-color:#f5f4fa;
         }
-        .searchname{
+        .searchvalue{
             background-color:#FFFFFF;
             border:1px solid #E6E6E6;
             height:45px;
@@ -110,28 +110,87 @@
             width: 100%;
             height: 20px;
         }
+        .inputDiv{
+            width: 85%;
+            z-index: 9999;
+            position: absolute;
+            background-color: #fff;
+            border-top: 1px solid #e0e0e0;
+        }
+        .inputDiv ul{
+           margin: 0px;
+            padding: 0px;
+        }
+        .inputDiv .history li,.inputDiv .myMsgset li,.inpTitle{
+            width: 100%;
+            height: 38px;
+            border-left: 1px solid #e0e0e0;
+            border-right: 1px solid #e0e0e0;
+            border-bottom: 1px solid #e0e0e0;
+            line-height: 38px;
+            padding-left: 10px;
+            overflow: hidden;
+        }
+        .inputDiv .history li,.inputDiv .myMsgset li{
+            color:#888;
+            font-size: 14px;
+        }
+        .inputDiv img{
+            width: 20px;
+        }
+        .inpTitle{
+            color:#888;
+            font-size: 16px;
+        }
+        .inpTitle span{
+            padding-left: 10px;
+        }
+        #del_history{
+            float: right;
+            margin: 9px;
+        }
     </style>
     <script>
+        var myHistory={{.T.history}};
+        var msgset={{.T.msgset}};
+        //initShare({{.T.signature}},{{.T.openid}},2,"jy_extend",{{.T.nickname}},{{.T.avatar}});
         $(function(){
-            $(".searchname").on("input propertychange",function(){
+            $(".searchvalue").on("input propertychange",function(){
                 canSearch()
             });
             canSearch();
-            $(".searchform .clearInpt").click(function(){$("input[name=searchname]").val("");canSearch();});
+            $(".searchform .clearInpt").click(function(){$("input[name=searchvalue]").val("");canSearch();});
             $(".searchform .query").click(function(){
-                toSearch();
+                $("#searchform").submit();
+            })
+            //历史搜索和我的订阅
+            $("input[name=searchvalue]").focus(function(){$(".inputDiv").removeClass("hidden")});
+            $("input[name=searchvalue]").blur(function(){ setTimeout(function(){$(".inputDiv").addClass("hidden")},0);});
+            loadTipMsg(myHistory,msgset);
+            $(".inputDiv").css("width",($(window).width()-30)*0.92);    //调整宽度
+            //删除历史搜索
+            $("#del_history").click(function(){
+                if($(".inputDiv .history").find("li").length >0){
+                    $.ajax({
+                        type:"post",
+                        url:"/swordfish/delWxHistorySearch",
+                        success:function(rt){
+                            $(".inputDiv .history").find("li").remove();
+                        }
+                    });
+                }
             })
-        })
+        });
         document.onkeydown = function(e){
             if(!e){
                 e = window.event;
             }
             if((e.keyCode || e.which) == 13){
-                toSearch();
+                $("#searchform").submit();
             }
-        }
+        };
         function canSearch(){  //是否显示搜索按钮
-            var len=$(".searchname").val().length;
+            var len=$(".searchvalue").val().length;
             if(len>0){
                 $(".clearInpt").removeClass("hidden");
                 $(".query").removeClass("hidden");
@@ -140,9 +199,34 @@
                 $(".query").addClass("hidden");
             }
         }
-        function toSearch() {
-            $("input[name$='keleyi']").val($(".searchname").val());
-            $("#searchform").submit();
+        function loadTipMsg(myhistory,msgset){
+            //历史信息
+            if(myhistory!=null){
+                historyHtml ="";
+                for(var i=0;i<myhistory.length;i++){
+                    historyHtml+="<li>"+myhistory[i]+"</li>"
+                }
+                $(".inputDiv .history").html(historyHtml);
+            }
+
+            //订阅信息
+            if(msgset!=null){
+                msgsetHtml="";
+                for(var n=0;n<msgset.length;n++){
+                    var  mymsgset="";
+                    for(var m=0;m<msgset[n].length;m++){
+                        mymsgset+=msgset[n][m]+" "
+                    }
+                    msgsetHtml+="<li>"+mymsgset+"</li>";
+                }
+                $(".inputDiv .myMsgset").html(msgsetHtml);
+            }
+
+            //点击提示框内容 进行搜索
+            $(".inputDiv li").click(function () {
+                $("input[name=searchvalue]").val($(this).text());
+                $("#searchform").submit();
+            })
         }
     </script>
 </head>
@@ -151,8 +235,21 @@
 <div id="searchDiv">
     <form class="searchform" id="searchform" method="post" action="/jylab/superSearch">
         <div class="wxhead">
-            <input class="form-control searchname" id="searchname" name="searchname" maxlength ="50" value="{{if .T.shname}}{{.T.shname}}{{end}}" placeholder="示例:税务局 软件"/>
-            <input name="searchvalue" class="hidden">
+            <input class="form-control searchvalue" id="searchvalue" name="searchvalue" maxlength ="50" value="{{if .T.shname}}{{.T.shname}}{{end}}" placeholder="示例:税务局 软件"/>
+            <div class="inputDiv hidden">
+                <div class="inpTitle"><img src="/images/search/history.png"><span>历史搜索</span><img id="del_history" src="/images/search/history_clean.png"></div>
+                <div>
+                    <ul class="history">
+                    </ul>
+                </div>
+                <div style="clear: both"></div>
+                <div class="inpTitle"><img src="/images/search/msgset.png"><span>我的订阅的关键词</span></div>
+                <div>
+                    <ul class="myMsgset">
+                    </ul>
+                </div>
+
+            </div>
             <span class="query hidden"><img src="/images/wx/jywxjs.png"/></span>
             <span class="clearInpt hidden"><img src="/images/wx/jyqingchu.png"></span>
             <span class="help"><img src="/images/help-w.png"/></span>

+ 153 - 71
src/web/templates/weixin/search/superSearch.html

@@ -21,14 +21,17 @@
         var s_words = {{.T.searchvalue}};
         var firstPage = {{.T.list}};
         var pageSize = {{.T.pageSize}};
+        var myHistory={{.T.history}};
+        var msgset={{.T.msgset}};
+        var industryData={{.T.industry}}
+        var sortArray={{.T.sortArray}}
         window.top.noMoreCache = "false";
         var scrollDownObj=null;   //翻页对象
 		var dyDiv=true;     //显示订阅剑鱼信息
         initShare({{.T.signature}},{{.T.openid}},2,"jy_extend",{{.T.nickname}},{{.T.avatar}});
         //提交参数
         var reqParam = {
-            "searchname": $("#searchform [name='searchname']").val(),
-            "searchvalue": $("#searchform [name='searchvalue']").val(),
+            "searchvalue": "",
             "subtype": "",
             "scope": "",
             "publishtime": "",
@@ -39,6 +42,9 @@
         };
         var loadCacheData = true;
         $(function(){
+            //loadTipMsg加载历史记录和我的订阅
+            loadTipMsg(myHistory,msgset);
+
             //筛选菜单展示or隐藏
             $(".wxhead").find(".screen").click(function(){
                 $(".wxsearch").toggleClass("hidden");
@@ -60,21 +66,29 @@
                     scrollArea : window.top.isIOS?window.top:window,
                     loadDownFn : function(me){
                         scrollDownObj=me;
-                        if(loadCacheData&&firstPage){
-                            if(firstPage.length>0){
-                                appendListHtml(getHtml(firstPage,1));
-                                firstPage = null;
-                                loadCacheData=false;
-                                setTimeout(function(){
-                                    me.resetload();
-                                },1000);
-                            }else{
-                                $(".nullcontent").removeClass("hidden");
-                            }
-                            return;
+                        if(loadCacheData){    //第一次加载跳转传递的信息
+                            loadCacheData=false;
+							if(firstPage){    //firstPage不为null
+                                if(firstPage.length>0){  //如果判断是否为空
+                                    appendListHtml(getHtml(firstPage,1));
+                                    setTimeout(function(){
+                                        me.resetload();
+                                    },1000);
+                                    if(firstPage.length<pageSize){
+										me.noData();
+										me.lock();
+									}
+                                    firstPage = null;
+                                    return
+                                }
+							}
+                            me.noData();
+                            me.lock();
+                            hasNoData();
+							return
                         }
+                        //---------------------------非第一次  下拉翻页请求
                         beforeSubmit();
-                       // pageNum++;
                         reqParam["pageNum"] ++;        //翻页请求
                         $.ajax({
                             type: 'post',
@@ -110,12 +124,14 @@
             /**********************分页请求end****************************/
 
             canSearch();
-
-            $("input[name=searchname]").on("input",function(){canSearch();})//监听输入框是否为空
+            $("input[name=searchvalue]").on("input",function(){canSearch();});//监听输入框是否为空
+            //是否显示提示搜索框
+			$("input[name=searchvalue]").focus(function(){$(".inputDiv").removeClass("hidden")});
+            $("input[name=searchvalue]").blur(function(){ setTimeout(function(){$(".inputDiv").addClass("hidden")},0);});
+			$(".inputDiv").css("width",($(window).width()-24)*0.85);    //调整宽度
 
             //清除输入框功能
-            $(".searchform .clearInpt").click(function(){$("input[name=searchname]").val("");canSearch();});
-
+            $(".searchform .clearInpt").click(function(){$("input[name=searchvalue]").val("");canSearch();});
             //提交查询
             $(".searchform .query").click(function(){beforeSubmit();toquery();})
             $(".jyshxbottom .jydqsure").click(function(){
@@ -125,21 +141,16 @@
                 }else{
                     return
                 }
-            })
+            });
 			//清除筛选
-			$(".jyshxbottom .jydqreset").click(function(){
-				$(".hyBody li").removeClass("active");//清除行业
-				$(".money-dialog ul li:eq(0) .btn").trigger("click");//清除金额
-				$(".jypt-dialog .jypt-pt .btn:eq(0)").trigger("click");//清除时间
-                $(".jydq-dialog .btn:eq(0)").trigger("click");  //清除地区
-				$(".jytype-dialog .btn:eq(0)").trigger("click"); //清除类别
-			})
+			$(".jyshxbottom .jydqreset").click(function(){resetSx()	});
 			//关闭搜索后订阅================================================================
 			$(".dy_close").on("click",function(){
                 $(".resbm").addClass("hidden");
                 dyDiv=false;
-			})
-			if(dyDiv&&$("#list").text()!=""){   //首次进来是否显示订阅
+			});
+
+			if(dyDiv&&firstPage&&firstPage.length>0){   //首次进来是否显示订阅
                 $(".resbm").removeClass("hidden");
 			}
 			//订阅
@@ -148,7 +159,7 @@
                 $.ajax({
                     type: "post",
                     url: "/member/swordfish/ajaxReq",
-                    data: {keys:$("[name='searchname']").val(),reqType: "subscribe"},
+                    data: {keys:$("[name='searchvalue']").val(),reqType: "subscribe"},
                     dataType: "json",
                     async: false,
                     success: function(r){
@@ -166,10 +177,29 @@
 				}
             });
 			//订阅结束==========================================================================
-
+            //删除历史搜索
+            $("#del_history").click(function(){
+                if($(".inputDiv .history").find("li").length >0){
+                    $.ajax({
+                        type:"post",
+                        url:"/swordfish/delWxHistorySearch",
+                        success:function(rt){
+							$(".inputDiv .history").find("li").remove();
+                        }
+                    });
+                }
+            })
         });
+        //js 方法
+		function resetSx(){         //清除筛选
+            $(".dialog-content.contentthree ul li:eq(0) button").trigger("click");//清除行业
+            $(".money-dialog ul li:eq(0) .btn").trigger("click");//清除金额
+            $(".jypt-dialog .jypt-pt .btn:eq(0)").trigger("click");//清除时间
+            $(".jydq-dialog .btn:eq(0)").trigger("click");  //清除地区
+            $(".jytype-dialog .btn:eq(0)").trigger("click"); //清除类别
+		}
         function canSearch(){  //判断是否显示搜索按钮
-            var len=$(".searchname").val().length;
+            var len=$(".searchvalue").val().length;
             if(len>0){
                 $(".clearInpt").removeClass("hidden");
                 $(".query").removeClass("hidden");
@@ -181,9 +211,8 @@
             }
         }
         function beforeSubmit(){   //提交前,更新筛选内容至提交对象
-            s_words=$("#searchform [name='searchname']").val();
-            reqParam.searchname= $("#searchform [name='searchname']").val();
-            reqParam.searchvalue=$("#searchform [name='searchname']").val();
+            s_words=$("#searchform [name='searchvalue']").val();
+            reqParam.searchvalue=$("#searchform [name='searchvalue']").val();
             //信息范围
             this.setScope = function(){
                 var scope = [];
@@ -197,9 +226,22 @@
                     }
                 });
                 return scope.join(",");
-            }
+            };
             reqParam.scope=this.setScope;
 
+            //行业类型
+			var industrySelect="";
+            $(".contentthree .btn.active").each(function(){
+                var thisText = $(this).text();
+                if(thisText == "全部"){
+                    return;
+                }else{
+                    industrySelect+=($(this).attr("data-value"))+",";
+                }
+            });
+            console.log(industrySelect.substring(0,industrySelect.length-1));
+            reqParam.industry=industrySelect.substring(0,industrySelect.length-1);
+
             //信息类型
             var selectToptypes = "";
             $(".contenttwo #dqbtn.active").each(function(){
@@ -223,11 +265,6 @@
             });
             reqParam.subtype=selectSubTypes;
 
-            //行业
-            var industry=$(".hyBody  .active").attr("data-value");
-            reqParam.industry=industry;
-
-
             //金额
             var moneyRange=$(".money-dialog .active").attr("data-value");
             if(moneyRange!="all"){
@@ -271,17 +308,15 @@
         }
 
         function toquery(){    //提交表单,获取数据
-			if(reqParam.searchname=="") return
-			reqParam.pageNum=1
+			if(reqParam.searchvalue=="") return;
+			reqParam.pageNum=1;
             $.post("/swordfish/searchlist/paging",reqParam,function(data){
-                var history=data.history;
-				var msgset=data.msgset;
-
-
+                //历史记录和我的订阅
+                loadTipMsg(data["history"],data["msgset"]);
 				//铺查询信息
                 if(data["list"] == null || data["list"].length == 0){
                     noMoreData(scrollDownObj);
-                    $("#list").text("")
+                    $("#list").text("");
                     hasNoData();
 					show();
                     return
@@ -431,7 +466,6 @@
 			}
         }
         function appendListHtml(html){  //下拉时展示信息
-
             // 插入数据到页面,放到最后面
             var ListHtmlObj = $(html.ListHtml);
             ListHtmlObj.on("click", function(event){
@@ -503,31 +537,60 @@
             me.noData();
             me.resetload();
         }
-        function initDroploadNoMoreData(){
-            setTimeout(function(){
-                $('#wrapper').dropload({
-                    scrollArea : window.top.isIOS?window.top:window,
-                    loadDownFn : function(me){
-                        noMoreData(me);
+       	function loadTipMsg(myhistory,msgset){
+		//历史信息
+			if(myhistory!=null){
+                historyHtml ="";
+                for(var i=0;i<myhistory.length;i++){
+                    historyHtml+="<li>"+myhistory[i]+"</li>"
+                }
+                $(".inputDiv .history").html(historyHtml);
+			}
+
+		//订阅信息
+			if(msgset!=null){
+                msgsetHtml="";
+                for(var n=0;n<msgset.length;n++){
+                    var  mymsgset="";
+                    for(var m=0;m<msgset[n].length;m++){
+                        mymsgset+=msgset[n][m]+" "
                     }
-                });
-            },0);
-        }
+                    msgsetHtml+="<li>"+mymsgset+"</li>";
+                }
+                $(".inputDiv .myMsgset").html(msgsetHtml);
+			}
+
+		//点击提示框内容 进行搜索
+            $(".inputDiv li").click(function () {
+                $("input[name=searchvalue]").val($(this).text());
+                canSearch();
+                resetSx();                //重置筛选
+                beforeSubmit();				//填充数据
+                toquery();				 //查询
+            })
+		}
 	</script>
 </head>
 <body>
 <div style="background-color:#fff;" id="mainDiv">
 	<div class="wxhead">
 		<form class="searchform" id="searchform" method="post" action="/jylab/superSearch" >
-			<input class="form-control searchname slistbkc" name="searchname" maxlength ="50" value="{{if .T.keywords}}{{.T.keywords}}{{end}}" placeholder="示例:税务局 软件"/>
-			<!--<input type="hidden" name="searchvalue" value="{{.T.searchvalue}}">
-			<input type="hidden" name="toptype" value="{{.T.toptype}}">
-			<input type="hidden" name="subtype" value="{{.T.subtype}}">
-			<input type="hidden" name="scope" value="{{.T.scope}}">
-			<input type="hidden" name="publishtime" value="{{.T.publishtime}}">
-			<input type="hidden" name="industry" value="">
-			<input type="hidden" name="money" value="">
-			<input type="hidden" name="selectType" value="all">-->
+			<input class="form-control searchvalue slistbkc" name="searchvalue" maxlength ="50" value="{{if .T.searchvalue}}{{.T.searchvalue}}{{end}}" placeholder="示例:税务局 软件"/>
+			<div class="inputDiv hidden">
+				<div class="inpTitle"><img src="/images/search/history.png"><span>历史搜索</span><img id="del_history" src="/images/search/history_clean.png"></div>
+					<div>
+						<ul class="history">
+						</ul>
+					</div>
+					<div style="clear: both"></div>
+				<div class="inpTitle"><img src="/images/search/msgset.png"><span>我的订阅的关键词</span></div>
+					<div>
+						<ul class="myMsgset">
+						</ul>
+					</div>
+
+				</div>
+
 			<span class="query hidden"><img src="/images/wx/jywxjs.png"></span>
 			<span class="clearInpt hidden"><img src="/images/wx/jyqingchu.png"></span>
 			<span class="screen text-center" >筛选</span>
@@ -536,7 +599,7 @@
 	<div>
 		<div class="selLable" id="selLable" >
 			<div class="com-title"><!--height:30px; margin-top:20px;-->
-				<span onclick="allSearch()" id="search_all">全文搜索</span><span id="search_title" class="on" onclick="titleSearch()">标题搜索</span>
+				<span onclick="allSearch()" id="search_all" class="on" >全文搜索</span><span id="search_title" onclick="titleSearch()">标题搜索</span>
 			</div>
 			<div class="line-vertical">
 			</div>
@@ -555,7 +618,14 @@
 					<div class="shaixtwo">信息类型</div>
 				</div>
 				<div class="industry-dialog">
-					<ul class="hyHead">
+					<div class="dialog-content contentthree">
+						<ul>
+							<li>
+								<button class="btn active">全部</button>
+							</li>
+						</ul>
+					</div>
+					<!--<ul class="hyHead">
 						<li class="on">全部</li>
 						<li>建筑工程</li>
 						<li>水利水电</li>
@@ -677,7 +747,7 @@
 								<li  data-value="服务采购_其他服务">其他服务</li>
 							</ul>
 						</div>
-					</div>
+					</div>-->
 				</div>
 				<!-->金额<-->
 				<div class="money-dialog hidden">
@@ -825,7 +895,7 @@
 		</div>
 		<div id="wrapper">
 			<div id="list" ></div>
-			<div id="table" class="hidden">
+			<!--<div id="table" class="hidden">
 				<table class="content">
 					<tr>
 						<td>序号</td>
@@ -835,6 +905,18 @@
 						<td>项目名称</td>
 					</tr>
 				</table>
+			</div>-->
+			<div id="table" class="hidden">
+				<div class="data"><table class="content">
+					<tr>
+						<td>序号</td>
+						<td>发布时间</td>
+						<td>公告类型</td>
+						<td>招标单位</td>
+						<td>项目名称</td>
+					</tr>
+				</table></div>
+				<div class="TableTip">提示:为了获得更佳的体验,推荐使用电脑浏览器访问剑鱼网站jianyu360.com查看数据表格。</div>
 			</div>
 			<div class="resbm hidden">
 				<div class="rests">如果您对以上结果满意可</div>

+ 0 - 1
src/web/templates/weixin/wxsearchlist.html

@@ -408,7 +408,6 @@ function getHtml(list,pageNum){
 				}
 				detail = keyWordHighlight(detail,wordsArray.join("|"),'<font class="keyword">$1</font>');
 			}
-			console.log(title)
 		}
 		if(detail != ""){
 			detail = "<div class='detail'"+thisStyle+">"+detail+"...</div>";

Unele fișiere nu au fost afișate deoarece prea multe fișiere au fost modificate în acest diff