wangshan 8 年之前
父節點
當前提交
6df469aa85
共有 36 個文件被更改,包括 1777 次插入882 次删除
  1. 8 0
      .idea/misc.xml
  2. 46 12
      src/jfw/front/entsearch.go
  3. 4 1
      src/jfw/front/search.go
  4. 4 4
      src/jfw/front/swordfish.go
  5. 1 1
      src/jfw/modules/behaviorcollect/README.md
  6. 4 0
      src/jfw/modules/entsesearch/.idea/misc.xml
  7. 0 603
      src/jfw/modules/entsesearch/.idea/workspace.xml
  8. 28 19
      src/jfw/modules/entsesearch/src/search/entsesearch.go
  9. 360 80
      src/jfw/modules/entsesearch/src/web/templates/weixin/entseSearch.html
  10. 0 0
      src/jfw/modules/push/src/config.json
  11. 47 30
      src/jfw/modules/push/src/qfw/push/dopush/dopush.go
  12. 3 1
      src/jfw/modules/push/src/qfw/push/dopush/dopushes.go
  13. 115 0
      src/jfw/modules/push/src/qfw/push/dopush/excel.go
  14. 16 0
      src/jfw/modules/pushent/src/config.json
  15. 11 0
      src/jfw/modules/pushent/src/config/config.go
  16. 71 0
      src/jfw/modules/pushent/src/filterdata/filterdata.go
  17. 14 0
      src/jfw/modules/pushent/src/followpush/config.json
  18. 138 0
      src/jfw/modules/pushent/src/followpush/datastruct.go
  19. 44 0
      src/jfw/modules/pushent/src/followpush/followpush.go
  20. 18 0
      src/jfw/modules/pushent/src/followpush/followpush_test.go
  21. 233 0
      src/jfw/modules/pushent/src/followpush/push.go
  22. 46 0
      src/jfw/modules/pushent/src/main.go
  23. 27 0
      src/jfw/modules/pushent/src/main_test.go
  24. 33 0
      src/jfw/modules/pushent/src/rpcpush/findData.go
  25. 21 0
      src/jfw/modules/pushent/src/rpcpush/rpcpush.go
  26. 23 0
      src/jfw/modules/pushent/src/timetask/clearredis.go
  27. 18 0
      src/jfw/modules/pushent/src/tools/mongo.go
  28. 1 0
      src/jfw/modules/pushent/src/tools/tools.go
  29. 76 0
      src/jfw/modules/pushent/src/weixinrpc/weixinrpc.go
  30. 5 3
      src/jfw/modules/pushproject/src/followpush/push.go
  31. 34 43
      src/web/staticres/css/search/superSearch.css
  32. 0 1
      src/web/staticres/js/biddingSearch.js
  33. 81 51
      src/web/staticres/wxswordfish/superSearch.js
  34. 1 1
      src/web/templates/common/pnc.html
  35. 199 15
      src/web/templates/pc/biddingsearch_enterprise.html
  36. 47 17
      src/web/templates/weixin/search/superSearch.html

+ 8 - 0
.idea/misc.xml

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+<<<<<<< HEAD
+  <component name="GOROOT" path="/usr/local/go" />
+=======
+  <component name="GOROOT" path="C:/go" />
+>>>>>>> b673ea6b82d098a5040ba1bd5d56ac194a55394d
+</project>

+ 46 - 12
src/jfw/front/entsearch.go

@@ -2,7 +2,8 @@ package front
 
 import (
 	"fmt"
-	"jfw/jylabutil"
+	_ "jfw/jylabutil"
+
 	"log"
 	//"math/rand"
 	"qfw/util"
@@ -36,13 +37,21 @@ 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"))
+	pricetype := e.GetString("pricetype")
+	minprice, _ := strconv.ParseFloat(e.GetString("minprice"), 64)
+	maxprice, _ := strconv.ParseFloat(e.GetString("maxprice"), 64)
+	if pricetype == "y" {
+		//搜索minprice和maxprice价格区间的数据
+	}
+	if pricetype == "n" || pricetype == "" {
+		//搜索所有价格
+	}
 
-	fmt.Println("searchvalue==", searchvalue)
-	fmt.Println("area==", area)
-	fmt.Println("lower==", minprice)
-	fmt.Println("upper==", maxprice)
+	fmt.Println("searchvalue1==", searchvalue)
+	fmt.Println("area1==", area)
+	fmt.Println("lower1==", minprice)
+	fmt.Println("upper1==", maxprice)
+	fmt.Println("pricetype1==", pricetype)
 
 	if minprice == 0 {
 		e.T["minprice"] = ""
@@ -57,12 +66,12 @@ func (e *Entsearch) Bidsearchforent() error {
 
 	e.T["searchvalue"] = searchvalue
 	e.T["area"] = area
-
+	e.T["pricetype"] = pricetype
 	log.Println("-------中标企业搜索:")
 
 	list := []map[string]interface{}{}
 	list = jylabutil.GetProjectByEntName("", "", 0, 0, 1, 10)
-	jyutil.BidListConvert("", &list)
+	//jyutil.BidListConvert("", &list)
 
 	for k, v := range list {
 		v["k"] = k + 1
@@ -84,14 +93,39 @@ 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"))
+	pricetype := e.GetString("pricetype")
+	minprice, _ := strconv.ParseFloat(e.GetString("minprice"), 64)
+	maxprice, _ := strconv.ParseFloat(e.GetString("maxprice"), 64)
 
+	if pricetype == "y" {
+		//搜索minprice和maxprice价格区间的数据
+	}
+	if pricetype == "n" {
+		//搜索所有价格
+	}
 	fmt.Println("searchvalue==", searchvalue)
 	fmt.Println("area==", area)
 	fmt.Println("lower==", minprice)
 	fmt.Println("upper==", maxprice)
+	fmt.Println("pricetype==", pricetype)
 
-	return nil
+	list := []map[string]interface{}{}
+	list = jylabutil.GetProjectByEntName(searchvalue, area, minprice, maxprice, 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)
 }

+ 4 - 1
src/jfw/front/search.go

@@ -63,7 +63,6 @@ func (m *Search) SuperSearch() error{
 				arrs = make([]string, 0)
 			}
 			var historyFlag = 0
-			fmt.Println("|||||||",searchvalue,"||||||")
 			for _, v := range arrs {
 				fmt.Print(v == strings.Trim(searchvalue, " "))
 				if v == strings.Trim(searchvalue, " ") {
@@ -111,6 +110,10 @@ func (m *Search) SuperSearch() error{
 		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)
 }

+ 4 - 4
src/jfw/front/swordfish.go

@@ -847,9 +847,9 @@ func (m *Front) WxsearchlistPaging() {
 		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))
+		//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 == "" {
@@ -889,7 +889,7 @@ func (m *Front) WxsearchlistPaging() {
 				}
 				m.T["msgset"] = keys
 			}
-		}
+
 	}
 
 	m.ServeJson(map[string]interface{}{

+ 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){

+ 4 - 0
src/jfw/modules/entsesearch/.idea/misc.xml

@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="GOROOT" path="C:/go" />
+</project>

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

@@ -1,603 +0,0 @@
-<?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>

+ 28 - 19
src/jfw/modules/entsesearch/src/search/entsesearch.go

@@ -11,6 +11,10 @@ import (
 	"qfw/util"
 )
 
+const (
+	wx_maxPageNum         = 20
+	wx_pageSize           = 1
+)
 type EntSeSearch struct {
 	*xweb.Action
 	toSearch  xweb.Mapper `xweb:"/jylab/entsesearch/search"`  //跳转到中标企业查询页面
@@ -24,7 +28,7 @@ func init() {
 }
 
 func (e *EntSeSearch) ToSearch() error{
-	e.T["pageSize"] = "10"
+	e.T["pageSize"] = wx_pageSize
 	return e.Render("/weixin/entseSearch.html", &e.T)
 }
 
@@ -46,27 +50,32 @@ func (e *EntSeSearch) ProList() {
 	//var money = e.GetString("money")
 	var money_from,_ = strconv.Atoi(e.GetString("money_from"))
 	var money_to,_ = strconv.Atoi(e.GetString("money_to"))
+	var pageNum,_ = strconv.Atoi(e.GetString("pageNum"))
 	fmt.Println(searchname,scope,money_from,money_to)
-	proMap := jylabutil.GetProjectByEntName(searchname,scope,money_from,money_to,1,10)
-	fmt.Println("proMap------------------",proMap)
-	for _,val := range proMap{
-		var jgtime = val["jgtime"]
-		if jgtime!=nil{
-			val["jgtime"] = time.Unix(int64(jgtime.(float64)),0).Format("20060102")
-		}else{
-			val["jgtime"] = ""
-		}
-		var bidamount = val["bidamount"]
-		if bidamount!=nil{
-			var bidamount_f = bidamount.(float64)/10000
-			val["bidamount"] = strings.Replace(fmt.Sprintf("%.2f", bidamount_f),".00","",-1)
-		}else{
-			val["bidamount"] = ""
+	proList := make([]map[string]interface{},0)
+	fmt.Println("proList------------------1",proList)
+	if pageNum<=wx_maxPageNum {
+		proList = jylabutil.GetProjectByEntName(searchname,scope,money_from,money_to,pageNum,wx_pageSize)
+		fmt.Println("proList------------------2",proList)
+		for _,val := range proList{
+			var jgtime = val["jgtime"]
+			if jgtime!=nil{
+				val["jgtime"] = time.Unix(int64(jgtime.(float64)),0).Format("20060102")
+			}else{
+				val["jgtime"] = ""
+			}
+			var bidamount = val["bidamount"]
+			if bidamount!=nil{
+				var bidamount_f = bidamount.(float64)/10000
+				val["bidamount"] = strings.Replace(fmt.Sprintf("%.2f", bidamount_f),".00","",-1)
+			}else{
+				val["bidamount"] = ""
+			}
+			val["sourceinfoid"] = util.EncodeArticleId2ByCheck(val["sourceinfoid"].(string))
 		}
-
-		val["sourceinfoid"] = util.EncodeArticleId2ByCheck(val["sourceinfoid"].(string))
 	}
 	e.ServeJson(map[string]interface{}{
-		"proList": proMap,
+		"proList": proList,
+		"hasNextPage": proList != nil && len(proList) == wx_pageSize && pageNum < wx_maxPageNum,
 	})
 }

+ 360 - 80
src/jfw/modules/entsesearch/src/web/templates/weixin/entseSearch.html

@@ -7,6 +7,7 @@
 <meta name="viewport" content="width=device-width,minimum-scale=1.0,maximum-scale=1.0,initial-scale=1.0" user-scalable="no" />
 <meta name="renderer" content="webkit"/>
 <link href="/jylab/entsesearch/wxswordfish/style.css?v={{Msg "seo" "version"}}" rel="stylesheet">
+<link href="/jylab/entsesearch/css/dropload.css?v={{Msg "seo" "version"}}" rel="stylesheet">
 {{include "/common/pnc.html"}}
 <link href="/jylab/entsesearch/css/wxlist.css?v={{Msg "seo" "version"}}" rel="stylesheet">
 <script type="text/javascript" src="https://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>
@@ -16,9 +17,129 @@
 <script src="/jylab/entsesearch/wxswordfish/search.js?v={{Msg "seo" "version"}}"></script>
 <script src="/jylab/entsesearch/wxswordfish/jquery.resize.js"></script>
 <script src="/jylab/entsesearch/js/dropload.js?v={{Msg "seo" "version"}}"></script>
-
 <script src="/jylab/entsesearch/js/rem.js"></script>
 <link rel="stylesheet" href="/jylab/entsesearch/css/reset.css" />
+
+<script>
+    var scrollTop = 0;
+    var listCache = "";
+    var pageNumCache = 1;
+    var noMoreCache = false;
+    var moneyFromCache = "";
+    var moneyToCache = "";
+    var scopeCache = "";
+    var pageSize = {{.T.pageSize}};
+    var pageNum = "1";
+    //是否有列表数据
+    var dataListFlag = true;
+    //查询参数
+    var reqParam = null;
+    $(function () {
+        reqParam = {
+            "searchname": $.trim($(".searchname").val()),
+            "money_from": "",
+            "money_to": "",
+            "scope": "",
+            "pageNum": pageNum
+        };
+        //返回时 在缓存取数据
+        var loadCacheData = false;
+        if (sessionStorage && sessionStorage.wxsearchScrollTop && sessionStorage.wxsearchListCache) {
+            loadCacheData = true;
+            pageNum = sessionStorage.wxsearchPageNumCache;
+            noMoreCache = sessionStorage.wxsearchNoMoreCache;
+            $("#list").css("visibility", "hidden");
+            appendListHtml(sessionStorage.wxsearchListCache, pageNum);
+            if (noMoreCache == "true") {
+                initDroploadNoMoreData();
+            }else{
+                initDropload();
+            }
+            sessionStorage.removeItem("wxsearchPageNumCache");
+            sessionStorage.removeItem("wxsearchListCache");
+
+            moneyFromCache = sessionStorage.wxsearchMoneyFromCache;
+            moneyToCache = sessionStorage.wxsearchMoneyToCache;
+            $("#money_from").val(moneyFromCache);
+            $("#money_to").val(moneyToCache);
+            if(moneyFromCache!="" || moneyToCache!=""){
+                $(".money-inp").addClass("money-inp-active");
+                $(".money .btn").removeClass("active_m");
+            }else{
+                $(".money .btn").addClass("active_m");
+                $(".money-inp").removeClass("money-inp-active");
+            }
+            sessionStorage.removeItem("wxsearchMoneyFromCache");
+            sessionStorage.removeItem("wxsearchMoneyToCache");
+
+            scopeCache = sessionStorage.wxsearchScopeCache;
+            if(scopeCache != ""){
+                $(".contentone").find("ul:first li:first .btn").removeClass("active");
+                scopeCache = scopeCache.split(",");
+                for(var i=0;i<scopeCache.length;i++){
+                    $(".contentone").find(".btn").each(function(){
+                        if($(this).text() == scopeCache[i]){
+                            $(this).addClass("active");
+                            if($(this).parent("li").find(".btn").length == $(this).parent("li").find(".btn.active").length){
+                                $(this).prevAll('div[id="dqbtn"]').addClass("active");
+                            };
+                            return false;
+                        }
+                    });
+                }
+            }
+            sessionStorage.removeItem("wxsearchScopeCache");
+
+            setTimeout(function () {
+                $(window).scrollTop(sessionStorage.wxsearchScrollTop);
+                sessionStorage.removeItem("wxsearchScrollTop");
+                $("#list").css("visibility", "visible");
+            }, 300);
+        } else {
+            $(window).scrollTop(0);
+        }
+    });
+
+    function initDropload(){
+        $(".dropload-down,.dropload-noData").remove();
+        //上拉分页
+        $('#wrapper').dropload({
+            scrollArea: window,
+            loadDownFn: function (me) {
+                beforeSubmit();
+                pageNum++;
+                reqParam["pageNum"] = pageNum;
+                $.ajax({
+                    type: 'post',
+                    url: '/jylab/entsesearch/proList',
+                    data: reqParam,
+                    dataType: 'json',
+                    success: function (data) {
+                        //没有数据
+                        if (data["proList"] == null || data["proList"].length == 0) {
+                            noMoreData(me);
+                            return;
+                        }
+                        var html = getHtml(data["proList"], reqParam["pageNum"]);
+                        // 每次数据插入,必须重置
+                        appendListHtml(html, pageNum);
+                        //没有下一页了
+                        if (!data.hasNextPage) {
+                            // 锁定
+                            me.lock();
+                            // 无数据
+                            me.noData();
+                        }
+                        me.resetload();
+                    },
+                    error: function (xhr, type) {
+                        noMoreData(me);
+                    }
+                });
+            }
+        });
+    }
+</script>
 <style>
 #searchDiv .searchform{
 	width:79%;
@@ -172,7 +293,7 @@
 }
 .bottom_btn .reset{
 	background-color:#eff9fa;
-	color:2cb7ca;
+	color:#2cb7ca;
 }
 .bottom_btn .sure{
 	background-color:#2cb7ca;
@@ -199,7 +320,8 @@
 }
 
 #jytables{
-	padding: .3rem;
+	//padding: .3rem;
+	padding-bottom: .3rem;
 	padding-top: .4rem;
 }
 #jytables table{
@@ -229,14 +351,18 @@
 	color: #2cb7ca;
 }
 
+.money-inp-active{
+	background-color: #2cb7ca;
+}
+
 .tip_m{
 	font-size: 14px;
-	padding: 0 .3rem;
+	/*padding: 0 .3rem;*/
 	margin-bottom:70px;
 	line-height: 20px;
 }
 #recList{
-	z-index: 1;
+	z-index: 1000;
 	position: absolute;
 	background: rgb(255, 255, 255);
 	width: 79%;
@@ -246,10 +372,27 @@
 	background-color: #24C0D7;
 	color: #FFFFFF;
 }
+
+#wrapper,.nullcontent{
+	//padding:0px 20px;
+	padding:0px 15px;
+	background-color:#fff;
+}
+.nullcontent{
+	padding-top: 10%;
+	position: absolute;
+	top: 125px;
+	left: 0px;
+	right: 0px;
+	border-top: 1px solid #f4f4f9;
+}
+#wrapper{
+	margin-bottom: 52px;
+}
 </style>
 </head>
 <body>
-<!-->顶部搜索<-->
+<!--顶部搜索-->
 <div id="searchDiv">
 	<form class="searchform" id="searchform" method="post" target="listf">
 	<div class="wxhead">
@@ -268,7 +411,7 @@
 	</div>
 	</form>
 </div>
-<!-->过滤搜索<-->
+<!--过滤搜索-->
 <div id="set_search" class="hidden">
 	<div class="select">
 		<ul>
@@ -368,42 +511,42 @@
 	</div>	
 </div>
 <!--数据列表-->
-<div id="searchList" style="margin-top:.2rem;border-top: 1px solid #E0E0E0;">
-	<section id="jytables">
+<div id="wrapper" style="margin-top:.2rem;border-top: 1px solid #E0E0E0;">
+	<div id="list">
+		<section id="jytables">
 		<table>
 			<thead>
 			<tr>
-				<td>序号</td>
-				<td>中标日期</td>
-				<td>项目名称</td>
-				<td>中标金额(万元)</td>
+				<td width="10%">序号</td>
+				<td width="20%">中标日期</td>
+				<td width="50%">项目名称</td>
+				<td width="20%">中标金额(万元)</td>
 			</tr>
 			</thead>
 			<tbody>
 			</tbody>
 		</table>
 	</section>
+	</div>
+	<!--tip-->
+	<div class="tip_m">提示:为了获得更佳的体验,推荐使用电脑浏览器访问剑鱼网站jianyu360.com查看数据表格。</div>
+</div>
+<!--no data-->
+<div class="nullcontent text-center  hidden">
+	<div style="font-size:16px;color:#1d1d1d;">没有找到和该企业匹配的中标项目信息</div>
 </div>
-<!--tip-->
-<div class="tip_m">提示:为了获得更佳的体验,推荐使用电脑浏览器访问剑鱼网站jianyu360.com查看数据表格。</div>
 </body>
 <script>
-	var pageSize = {{.T.pageSize}};
-	var pageNum = "1";
-	//查询参数
-    var reqParam = {
-        "searchname": $.trim($(".searchname").val()),
-        "money_from": $.trim($("#money_from").val()),
-        "money_to": $.trim($("#money_to").val()),
-        "scope": "",
-        "pageNum": pageNum
-    };
-	$(function () {
+    $(function () {
+        //
+		if($("#wrapper tbody tr").length==0){
+            $("#wrapper").addClass("hidden");
+            $(".tip_m").addClass("hidden");
+		}
         $(".qc").addClass("hidden");
         $(".tubiao").addClass("hidden");
         $(".jydqsure").css("background","#ccc");
-        $("#searchList").addClass("hidden");
-        $(".tip_m").addClass("hidden");
+        $(".jydqsure").removeClass("jydqsure_active");
 
         //选项卡
         $("#set_search .select ul li:eq(0)").css("color","#2cb7ca");
@@ -411,18 +554,32 @@
         $(".money").removeClass("hidden");
         $(".jydq-dialog").addClass("hidden");
 
-        //搜索框
+        //搜索框输入
         $("#searchname").on("input propertychange",function(){
             var snqc = $(".searchname").val();
             if(snqc.length > 0){
                 $(".qc").removeClass("hidden");
                 $(".tubiao").removeClass("hidden");
                 $(".jydqsure").css("background","#2cb7ca");
+                $(".jydqsure").addClass("jydqsure_active");
                 getRecList(snqc);
             }else{
                 $(".qc").addClass("hidden");
                 $(".tubiao").addClass("hidden");
                 $(".jydqsure").css("background","#ccc");
+                $(".jydqsure").removeClass("jydqsure_active");
+            }
+        });
+
+        //搜索框选中
+        $("#searchname").focus(function(){
+            var snqc = $(".searchname").val();
+            if(snqc.length > 0){
+                $(".qc").removeClass("hidden");
+                $(".tubiao").removeClass("hidden");
+            }else{
+                $(".qc").addClass("hidden");
+                $(".tubiao").addClass("hidden");
             }
         });
 
@@ -432,22 +589,25 @@
             $(".qc").addClass("hidden");
             $(".tubiao").addClass("hidden");
             $(".jydqsure").css("background","#ccc");
+            $(".jydqsure").removeClass("jydqsure_active");
             $(".wxhead").find("[name='searchname']").focus();
         });
-
-        $("body").click(function () {
-            $("#recList").hide();
+        $("body").on("touchstart",function (e) {
+            if(e.target.id != "recList" && e.target.className !="rec"){
+                $("#recList").hide();
+            }
         });
-
         //金额输入
         $(".money-input").on("input propertychange",function(){
             var money_from = $.trim($("#money_from").val());
             var money_to = $.trim($("#money_to").val());
             var val = $.trim($(this).val());
             if(val!="" ||  money_from!="" || money_to!=""){
+                $(".money-inp").addClass("money-inp-active");
                 $(".money .btn").removeClass("active_m");
 			}else{
                 $(".money .btn").addClass("active_m");
+                $(".money-inp").removeClass("money-inp-active");
 			}
         });
 
@@ -465,6 +625,7 @@
 
         $(".money .btn").click(function () {
             $(".money .btn").addClass("active_m");
+            $(".money-inp").removeClass("money-inp-active");
         });
 
         //重置
@@ -473,11 +634,14 @@
             $(".contentone").find(".btn").first().addClass("active");
 
             $(".money .btn").addClass("active_m");
+            $(".money-inp").removeClass("money-inp-active");
         });
 
         //搜索企业项目信息
         $(".jydqsure").click(function () {
-            formSubmit();
+            if($(this).attr("class").indexOf("jydqsure_active")>0){
+                formSubmit();
+			}
         });
 
         $(".tubiao").click(function(){
@@ -487,11 +651,26 @@
         //显示筛选过滤选择
         $(".shaixuan").click(function(){
             if($("#set_search").attr("class")=="hidden"){
+                if($.trim($("#searchname").val())!=""){
+                    $(".jydqsure").css("background","#2cb7ca");
+                    $(".jydqsure").addClass("jydqsure_active");
+                }
                 $("#set_search").removeClass("hidden");
-                $("#searchList").addClass("hidden");
+                $("#wrapper").addClass("hidden");
                 $(".tip_m").addClass("hidden");
+                $(".nullcontent").addClass("hidden");
             }else{
-                shaixuanHide();
+                $("#set_search").addClass("hidden");
+                //if($("#wrapper tbody tr").length==0){
+                if(!dataListFlag){
+                    $("#wrapper").addClass("hidden");
+                    $(".tip_m").addClass("hidden");
+                    $(".nullcontent").removeClass("hidden");
+                }else if($("#wrapper tbody tr").length>0){
+                    $("#wrapper").removeClass("hidden");
+                    $(".tip_m").removeClass("hidden");
+                    $(".nullcontent").addClass("hidden");
+				}
             }
         });
 
@@ -513,13 +692,17 @@
             $(".jydq-dialog").removeClass("hidden");
         })
 
-        $('#searchList').dropload({
-            scrollArea: window.top.isIOS ? window.top : window,
-            loadDownFn: function (me) {
-                alert(111);
+        document.onkeydown = function () {
+            if (window.event && window.event.keyCode == 13) {
+                window.event.returnValue = false;
+                if($.trim($(".searchname").val()) == ""){
+                    return;
+                }
+                $("#searchname").blur();
+                $("#recList").hide();
+                formSubmit();
             }
-        });
-
+        }
     });
 
     //企业推荐列表
@@ -544,9 +727,11 @@
             $(".rec").click(function(){
                 if($(this).text()!=""){
                     $("#searchname").val($(this).text());
+                    setSearchCursor();
                     $("#recList").hide();
                     $(".qc").addClass("hidden");
                     $(".tubiao").removeClass("hidden");
+                    //formSubmit();
                 }
             });
         });
@@ -554,16 +739,59 @@
 
     //确定
     function formSubmit(){
+		beforeSubmit();
+        pageNum = "1";
+        //default
+        scrollTop = 0;
+        listCache = "";
+        pageNumCache = 1;
+        noMoreCache = false;
+
+        reqParam["pageNum"]=pageNum;
+        $.post("/jylab/entsesearch/proList",reqParam,function(r){
+            if(r){
+                var proList = r.proList;
+                if(typeof (proList)!="undefined" && proList.length>0){
+                    $("#wrapper tbody tr").remove();
+                    var html = "";
+                    for(var i=0;i<proList.length;i++){
+                        var bidamount = parseNToEmpty(proList[i].bidamount);
+                        var projectname = parseNToEmpty(proList[i].projectname);
+                        var jgtime = parseNToEmpty(proList[i].jgtime);
+                        var sourceinfoid = parseNToEmpty(proList[i].sourceinfoid);
+                        var projectcode = parseNToEmpty(proList[i].projectcode);
+                        //var obj =$("<tr onclick=\"toDetail('"+sourceinfoid+"','"+projectcode+"','"+projectname+"')\"><td>"+(i+1)+"</td><td>"+jgtime+"</td><td>"+projectname+"</td><td>"+bidamount+"</td></tr>");
+                        //$("#wrapper tbody").append(obj);
+                        html +="<tr onclick=\"toDetail('"+sourceinfoid+"','"+projectcode+"','"+projectname+"')\"><td>"+(i+1)+"</td><td>"+jgtime+"</td><td>"+projectname+"</td><td>"+bidamount+"</td></tr>";
+                    }
+                    appendListHtml(html,1);
+                    shaixuanHide();
+                    initDropload();
+                }else{
+                    dataListFlag = false;
+                    hasNoData();
+				}
+            }
+        });
+    }
+
+    function beforeSubmit() {
         var searchname = $.trim($(".searchname").val().replace(/^\s+|\s+$/g,"").replace(/\s+/g,"+"));
-        var dataObj = {};
 
         var money = "";
+        var money_from  = "";
+        var money_to = "";
         //金额
         if($(".money .btn.active_m").first().length>0){
             money = $(".money .btn.active_m").first().text();
         }
-        var money_from = $.trim($("#money_from").val());
-        var money_to = $.trim($("#money_to").val());
+        if(money!=""){
+            money_from = "";
+            money_to = "";
+        }else{
+            money_from = $.trim($("#money_from").val());
+            money_to = $.trim($("#money_to").val());
+        }
 
         //项目地区
         this.setScope = function(){
@@ -580,41 +808,12 @@
             return scope.join(",");
         };
         reqParam["scope"] = this.setScope();
-        dataObj["searchname"] = searchname;
-        dataObj["scope"] = this.setScope();
-        dataObj["money"] = money;
-        dataObj["money_from"] = money_from;
-        dataObj["money_to"] = money_to;
-        dataObj["pagenum"] = "1";
-        dataObj["pagesize"] = "10";
-
-//			  $("#searchform [name='scope']").val(this.setScope());
-//            $("#searchform [name='money']").val(money);
-//            $("#searchform [name='money_from']").val(money_from);
-//            $("#searchform [name='money_to']").val(money_to);
-//            $(".searchform").submit();
-
-        $.post("/jylab/entsesearch/proList",dataObj,function(r){
-            if(r){
-                if(typeof (r.proList)!="undefined"){
-                    var proList = r.proList;
-                    //$("#searchList tbody tr").remove();
-                    for(var i=0;i<proList.length;i++){
-                        var bidamount = proList[i].bidamount;
-                        var projectname = proList[i].projectname;
-                        var zbtime = proList[i].jgtime;
-                        var sourceinfoid = proList[i].sourceinfoid;
-                        var projectcode = proList[i].projectcode;
-                        var obj =$("<tr onclick=\"toDetail('"+sourceinfoid+"','"+projectcode+"','"+projectname+"')\"><td>"+(i+1)+"</td><td>"+zbtime+"</td><td>"+projectname+"</td><td>"+bidamount+"</td></tr>");
-                        $("#searchList tbody").append(obj);
-                    }
-                }
-                shaixuanHide();
-            }
-        });
+        reqParam["searchname"] = searchname;
+        reqParam["money_from"] = money_from;
+        reqParam["money_to"] = money_to;
     }
 
-    //
+    //项目历程
     function toDetail(id,projectcode,projectname) {
         if(id!="" && typeof (id)!="undefined" && projectcode!="" && typeof(projectcode)!="undefined" && projectname!="" && typeof(projectname)!="undefined"){
             window.location.href="/follow/photo/"+id+"__"+projectname+"__"+projectcode;
@@ -623,10 +822,91 @@
 
     //筛选隐藏
 	function shaixuanHide() {
+        $(".nullcontent").addClass("hidden");
         $("#set_search").addClass("hidden");
-        $("#searchList").removeClass("hidden");
+        $("#wrapper").removeClass("hidden");
         $(".tip_m").removeClass("hidden");
     }
-	
+
+    //null || undefined to empty
+    function parseNToEmpty(str) {
+        if(str==null || typeof (str)=="undefined"){
+            str = "";
+		}
+		return str;
+    }
+
+    //搜索框光标位置
+    function setSearchCursor() {
+        $("#searchname").focus();
+        try{
+            setCursorPos(document.getElementById("searchname"),$("#searchname").val().length);
+        }catch(e){}
+    }
+
+    function noMoreData(me){
+        noMoreCache = "true";
+        // 锁定
+        me.lock();
+        // 无数据
+        me.noData();
+        me.resetload();
+    }
+    function getHtml(list,pageNum){
+        var html = '';
+        for(var i=0;i<list.length;i++){
+            var index = (pageNum-1)*pageSize+i+1;
+            var bidamount = parseNToEmpty(list[i].bidamount);
+            var projectname = parseNToEmpty(list[i].projectname);
+            var jgtime = parseNToEmpty(list[i].jgtime);
+            var sourceinfoid = parseNToEmpty(list[i].sourceinfoid);
+            var projectcode = parseNToEmpty(list[i].projectcode);
+            html +="<tr onclick=\"toDetail('"+sourceinfoid+"','"+projectcode+"','"+projectname+"')\"><td>"+(index)+"</td><td>"+jgtime+"</td><td>"+projectname+"</td><td>"+bidamount+"</td></tr>";
+        }
+        return html;
+    }
+    function hasNoData(){
+        $(".nullcontent").removeClass("hidden");
+        $("#wrapper tbody tr").remove();
+        //window.top.$(".resbm").addClass("hidden");
+        $("#set_search").addClass("hidden");
+        $("#wrapper").addClass("hidden");
+        $(".tip_m").addClass("hidden");
+    }
+    function appendListHtml(html,pageNum){
+        //缓存数据
+        if(sessionStorage){
+            listCache += html;
+            pageNumCache = pageNum;
+        }
+        // 插入数据到页面,放到最后面
+        var htmlObj = $(html);
+        htmlObj.on("click", function(event){
+            putToSessionStorage();
+        });
+        $('#wrapper tbody').append(htmlObj);
+    }
+    function initDroploadNoMoreData(){
+        setTimeout(function(){
+            $('#wrapper').dropload({
+                scrollArea : window,
+                loadDownFn : function(me){
+                    noMoreData(me);
+                }
+            });
+        },0);
+    }
+    //put to sessionstorage
+	function  putToSessionStorage() {
+        if(sessionStorage){
+            sessionStorage.wxsearchScrollTop = scrollTop;
+            sessionStorage.wxsearchListCache = listCache;
+            sessionStorage.wxsearchPageNumCache = pageNumCache;
+            sessionStorage.wxsearchNoMoreCache = noMoreCache;
+            sessionStorage.wxsearchMoneyFromCache = reqParam["money_from"];
+            sessionStorage.wxsearchMoneyToCache = reqParam["money_to"];
+            sessionStorage.wxsearchScopeCache = reqParam["scope"];
+        }
+    }
 </script>
 </html>

File diff suppressed because it is too large
+ 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

+ 34 - 43
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;
@@ -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,7 +1450,7 @@
 }
 .money-dialog .active{
 	background-color: #24C0D7;
-	color: #fff;
+	color: #fff !important;
 }
 <!--           原页面样式                  -->
 body{
@@ -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;
 }

+ 0 - 1
src/web/staticres/js/biddingSearch.js

@@ -145,7 +145,6 @@ $(function() {
 			} else {
 				$induAll.addClass("active");
 			}
-			//beforeSubmit();
 		})
 		/*全部点击*/
 		$induAll.on("click", function() {

+ 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,"+"));
 	}

+ 1 - 1
src/web/templates/common/pnc.html

@@ -11,7 +11,7 @@
 <link href="/css/animate.css" rel="stylesheet">
 <link rel="stylesheet" href="/css/unicorn.main.css" />
 <link rel="stylesheet" href="/css/unicorn.grey.css" />
-<script src="/js/jquery.js"></script>
+<script src="/js/jquery-3.2.1.min.js?v={{Msg "seo" "version"}}"></script>
 <script src="/js/jquery.cookie.js"></script>
 <script src="/js/bootstrap.min.js"></script>
 <script src="/js/jy.js?v={{Msg "seo" "version"}}"></script>

+ 199 - 15
src/web/templates/pc/biddingsearch_enterprise.html

@@ -13,8 +13,8 @@
 		<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 type="text/javascript" src="/js/entsearchscript.js"></script>
 		<script language="javascript" type="text/javascript" src="/My97DatePicker/WdatePicker.js"></script>
 		
 		<style type="text/css">
@@ -97,11 +97,66 @@
 				     -o-animation-fill-mode:forwards;
 				        animation-fill-mode:forwards;
 			}
+			#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>
 	</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">
@@ -114,7 +169,7 @@
 					<!--搜索-->
 					<div class="searchInput clearfix">
 						<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 class="searchname" autocomplete="off" type="search" name="keywords" id="searchinput" value="{{.T.searchvalue}}" placeholder="高速公路" />
 
 							<input type="button" class="searchBtn" value="搜索" />
 							<!--<div class="searchSlideText">
@@ -150,6 +205,18 @@
 						<!--二维码-->
 						<div class="search-right-wx">
 							<img src="/images/biddingSearch/sea-right-wx.png" />
+							<div class="search-right-wx-inner">
+								<div class="wx-inner-title">
+									扫码关注剑鱼招标订阅
+								</div>
+								<div class="wx-inner-ewm">
+									<img  id="keyImg" src="/front/share/{{.T.shareid}}"/>
+								</div>
+								<div class="wx-inner-bottom">
+									微信扫一扫<br>随时随地掌握招标信息
+		<!--						微信扫一扫,及时获取及时获取<i>"1"</i>相关招标信息-->
+								</div>
+							</div>
 						</div>
 					</div>
 				</div>
@@ -159,7 +226,7 @@
 			<!--招标搜索页面 START-->
 			<div class="searchControl">
 				<!--头部功能-->
-				<div class="searchTender w">
+				<div class="searchTender w" style="display:none;">
 					<!--价格区间-->
 					<div class="Price clearfix">
 						<div class="leftTitle">
@@ -242,8 +309,8 @@
 							</li>
 						</ul>
 						<div class="right-tabBtn">
-							<button class="active">列表</button>
-							<button>表格</button>
+							<button id="listBtn" class="active">列表</button>
+							<button id="tableBtn">表格</button>
 						</div>
 					</div>
 					<!--tab切换内容-->
@@ -262,7 +329,7 @@
 										<div class="luce-right">
 											<a href="#">{{$v.area}}</a>
 											<a href="#">{{$v.bidtype}}</a>
-											<a href="#">{{$v.industry}}</a>
+											<!--<a href="#">{{$v.industry}}</a>-->
 											<span>{{$v.time1}}</span>
 										</div>
 									</div>
@@ -299,9 +366,9 @@
 				<!--分页-->
 				<div class="pagination clearfix w">
 					<div class="pagination-inner fr">
-						<a href="#"><i><</i>上一页</a>
+						<a class="nbprev disabled" href="#"><i><</i>上一页</a>
 						<span>1</span>
-						<a href="#">下一页<i>></i></a>
+						<a class="nbnext" href="#">下一页<i>></i></a>
 					</div>
 				</div>
 			</div>
@@ -312,11 +379,80 @@
 	{{include "/common/baiducc.html"}}
 	<script>
 		var mainList = {{.T.list}};
+		var submitflag = true;
+		var pricetype = "";
+		var areas = {{.T.area}};
+		var searchvalue = {{.T.searchvalue}};
+		
+		//地区回显样式设置
+		if(areas != ""){
+			$("#regionBtn").removeClass("active");
+			areas = areas.split(",");
+			for(var i=0;i<areas.length;i++){
+				$(".region-content>font:not('.parent-node')").each(function(){
+					if($(this).text() == areas[i]){
+						$(this).addClass("active");
+						return false;
+					}
+				});
+			}
+		}
+		$(".region-content .parent-node").each(function(){
+			var fontLen = $(this).nextUntil(".parent-node").filter("font").length;
+			var activeLen = $(this).nextUntil(".parent-node").filter(".active").length;
+			if(fontLen == activeLen){
+				$(this).addClass("active");
+			}
+			if(activeLen >0 && activeLen < fontLen){
+				$(this).addClass("secondActice");
+			}
+		});
+		
+		//搜索关键词回显页面样式设置
+		if(searchvalue != "" && searchvalue != null){
+			$(".seaTender-inner").css({'border':'0px'});
+			$(".lucene-table").css({'padding':'0px','border-bottom':'0px','display':'block'});		
+			$(".tabTitle").addClass("hidden");
+			$(".lucene").attr("style","display:none");
+		}
 		
+		//价格回显样式设置
+		if({{.T.pricetype}} == "y"){
+			$(".Price-content").find("span:first-child").removeClass("active");
+			$(".pricefat").addClass("active");
+		}
 		
 		$(function(){
 			haslogin({{.T.logid}});
 			
+			//筛选关闭和打开
+			//根据cookie值设置筛选是否显示
+			var rsw = localStorage.getItem("entstore");
+			console.log("00000"+rsw);
+			if(rsw == null){
+				setTimeout(function(){
+					$(".searchTender").stop(false,true).slideDown(1000);
+					localStorage.setItem("entstore", "D");
+				},500);
+			}else{
+				if(rsw=="U"){
+					$("#screenBtn").addClass("down");
+					$(".searchTender").hide();
+				}else{
+					$("#screenBtn").removeClass("down");
+					$(".searchTender").show();
+				}
+			}
+				
+			//记录用户刷选按钮状态
+			$("#screenBtn").click(function(){
+				if($(this).attr("class").indexOf("down")>0){
+					localStorage.setItem("entstore", "U");
+				}else{
+					localStorage.setItem("entstore", "D");
+				}
+			})
+					
 			//价格
 			$("#minprice").click(function(){
 				$(".pricebut").show();
@@ -326,10 +462,15 @@
 				$(".pricebut").show();
 				$(".pricefat").addClass("customtime-active");
 			})
+			//价格的全部按钮
 			$(".Price-content").find("span:first-child").click(function(){
 				$(this).addClass("active");
 				$(".pricefat").removeClass("active");
+				pricetype = "n"
+				$("#zbSeatchT input[name='pricetype']").val(pricetype);
+				beforeSubmit();
 			})
+			//价格的确定按钮
 			$(".pricebut").click(function(){
 				var minp = $("#minprice").val();
 				var maxp = $("#maxprice").val();
@@ -344,8 +485,28 @@
 				$(".pricefat").addClass("active");
 				$(".Price-content").find("span:first-child").removeClass("active");
 				$(".pricefat").removeClass("customtime-active");
+				pricetype = "y";
+				$("#zbSeatchT input[name='pricetype']").val(pricetype);
 				beforeSubmit();
-			})		
+			})	
+			
+			//搜索按钮
+			$(".searchBtn").click(function(){
+				var searchname = $("#zbSeatchT input[name='keywords']").val();
+				$("#zbSeatchT input[name='searchvalue']").val($.trim(searchname));
+				$("#zbSeatchT").submit();
+			})	
+			
+			//点击超级搜索按钮
+			$(".superSearch").click(function(){
+				$("#labModal").modal("show");
+			})
+			
+			//关闭登录二维码
+			$(".code-close").click(function(){
+				$("#bidLogin").modal("hide");
+			})
+			
         });
 		function beforeSubmit(){			
 			//地区
@@ -366,28 +527,51 @@
 			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();
+			console.log("关键词============"+searchname);
+			if(submitflag){	
+				if($.trim(searchname) != ""){
+					console.log("搜索关键词不为空");
+					getTableInfo();
+				}else{
+					console.log("搜索关键词为空"+"--------------------");
+					
+					$(".tabTitle").removeClass("hidden");
+					$(".lucene").attr("style","display:block");
+					$(".lucene-table").attr("style","display:none");
+					searchOnsubmit();
+				}
+				submitflag=false;
+			}	
+			setTimeout(function(){
+				submitflag=true
+			},200);
 			return true
 		}
-//
+	
+		function getTableInfo(){
+			$(".seaTender-inner").css({'border':'0px'});
+			$(".lucene-table").css({'padding':'0px','border-bottom':'0px','display':'block'});		
+			$(".tabTitle").addClass("hidden");
+			$(".lucene").attr("style","display:none");
+			searchOnsubmit();
+		}
+
 		function searchOnsubmit(){
 			var param = {
 						searchvalue: $("#zbSeatchT [name='searchvalue']").val(),
 						area: $("#zbSeatchT [name='area']").val(),
 						minprice: $("#zbSeatchT [name='minprice']").val(),
 						maxprice: $("#zbSeatchT [name='maxprice']").val(),
+						pricetype: $("#zbSeatchT [name='pricetype']").val()
 					};
 			$.post("/jylab/pcSearchZbqyAjax",param,function(r){
 				
 			});
 		}
-
-
-
 	</script>
 	</body>
 

+ 47 - 17
src/web/templates/weixin/search/superSearch.html

@@ -23,6 +23,8 @@
         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;     //显示订阅剑鱼信息
@@ -69,10 +71,14 @@
 							if(firstPage){    //firstPage不为null
                                 if(firstPage.length>0){  //如果判断是否为空
                                     appendListHtml(getHtml(firstPage,1));
-                                    firstPage = null;
                                     setTimeout(function(){
                                         me.resetload();
                                     },1000);
+                                    if(firstPage.length<pageSize){
+										me.noData();
+										me.lock();
+									}
+                                    firstPage = null;
                                     return
                                 }
 							}
@@ -135,14 +141,14 @@
                 }else{
                     return
                 }
-            })
+            });
 			//清除筛选
 			$(".jyshxbottom .jydqreset").click(function(){resetSx()	});
 			//关闭搜索后订阅================================================================
 			$(".dy_close").on("click",function(){
                 $(".resbm").addClass("hidden");
                 dyDiv=false;
-			})
+			});
 
 			if(dyDiv&&firstPage&&firstPage.length>0){   //首次进来是否显示订阅
                 $(".resbm").removeClass("hidden");
@@ -183,13 +189,10 @@
                     });
                 }
             })
-
-
-
         });
         //js 方法
 		function resetSx(){         //清除筛选
-            $(".hyBody li").removeClass("active");//清除行业
+            $(".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");  //清除地区
@@ -223,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(){
@@ -249,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"){
@@ -455,7 +466,6 @@
 			}
         }
         function appendListHtml(html){  //下拉时展示信息
-
             // 插入数据到页面,放到最后面
             var ListHtmlObj = $(html.ListHtml);
             ListHtmlObj.on("click", function(event){
@@ -553,6 +563,7 @@
 		//点击提示框内容 进行搜索
             $(".inputDiv li").click(function () {
                 $("input[name=searchvalue]").val($(this).text());
+                canSearch();
                 resetSx();                //重置筛选
                 beforeSubmit();				//填充数据
                 toquery();				 //查询
@@ -607,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>
@@ -729,7 +747,7 @@
 								<li  data-value="服务采购_其他服务">其他服务</li>
 							</ul>
 						</div>
-					</div>
+					</div>-->
 				</div>
 				<!-->金额<-->
 				<div class="money-dialog hidden">
@@ -877,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>
@@ -887,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>

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