Преглед на файлове

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

wangshan преди 9 години
родител
ревизия
2c93902810

+ 55 - 6
core/src/qfw/search/searchService.go

@@ -21,8 +21,23 @@ import (
 	"strings"
 )
 
+type EntInfo struct {
+	_id           string
+	EntName       string //企业名称
+	RegNo         string //注册号
+	LeRep         string // 法定代表人
+	OpLocDistrict string //区域代码
+	EstDate       string //注册时间
+	OpStateName   string //状态名称
+}
+
 //企业社区首页
 func (search *Search) EntCommunity() error {
+	ismobile := strings.Index(search.Header("User-Agent"), "Mobile")
+	if ismobile > -1 {
+		search.Render("/member/incmobile/index.html")
+		return nil
+	}
 	//新认证企业
 	var newIndentEnts []interface{}
 	if ret := redis.Get("enterprise", "newIndentEnts"); ret != nil {
@@ -122,7 +137,7 @@ func (n *Search) GetEnterpriseList(reqType, param /*参数*/ string) error {
 	//必须是登录之后的已认证用户才可以进入企业社区
 	//if ui, _ := (n.GetSession("userInfo")).(*map[string]interface{}); reqType == "m_" || (n.GetSession("userType") != nil && IntAll(n.GetSession("userType")) > 0) && ((n.GetSession("identWay") != nil && IntAll(n.GetSession("identWay")) == 1) || ((*ui)["s_pid"] != nil && (*ui)["s_pid"].(string) != "")) {
 	//n.T["uri"] = n.Uri()
-
+	ismobile := strings.Index(n.Header("User-Agent"), "Mobile")
 	if len(param) == 0 {
 		//请求是表单提交,走的查询
 		//拼装查询对象
@@ -140,7 +155,7 @@ func (n *Search) GetEnterpriseList(reqType, param /*参数*/ string) error {
 		}
 		//查询生成列表数据
 		data, pagination := searhWebContentent(querymap, n, reqType)
-
+		log.Println(len(*data))
 		//查询送积分
 		queryStr := querymap["query"]
 		if len(queryStr) > 0 {
@@ -155,7 +170,25 @@ func (n *Search) GetEnterpriseList(reqType, param /*参数*/ string) error {
 				}
 			}
 		}
-		n.Render("/search/enterpriseList.html", &xweb.T{"querymap": querymap, "data": data, "pagination": pagination})
+		if ismobile > -1 {
+			entinfos := make([]map[string]string, 0)
+			for _, v := range *data {
+				tmp := map[string]string{
+					"_id":           fmt.Sprint(v["_id"]),
+					"EntName":       fmt.Sprint(v["EntName"]),
+					"RegNo":         fmt.Sprint(v["RegNo"]),
+					"LeRep":         fmt.Sprint(v["LeRep"]),
+					"OpLocDistrict": fmt.Sprint(v["OpLocDistrict"]),
+					"EstDate":       fmt.Sprint(v["EstDate"]),
+					"OpStateName":   fmt.Sprint(v["OpStateName"]),
+				}
+				entinfos = append(entinfos, tmp)
+			}
+			d, _ := json.Marshal(entinfos)
+			n.Render("/member/incmobile/list.html", &xweb.T{"data": string(d)})
+		} else {
+			n.Render("/search/enterpriseList.html", &xweb.T{"querymap": querymap, "data": data, "pagination": pagination})
+		}
 	} else {
 		//反转生成map
 		paramstr := param[1:]
@@ -163,9 +196,26 @@ func (n *Search) GetEnterpriseList(reqType, param /*参数*/ string) error {
 		querymap := map[string]string{}
 
 		json.Unmarshal(bs, &querymap)
-		log.Println(querymap)
 		data, pagination := searhWebContentent(querymap, n, reqType)
-		n.Render("/search/enterpriseList.html", &xweb.T{"querymap": querymap, "data": data, "pagination": pagination})
+		if ismobile > -1 {
+			entinfos := make([]map[string]string, 0)
+			for _, v := range *data {
+				tmp := map[string]string{
+					"_id":           fmt.Sprint(v["_id"]),
+					"EntName":       fmt.Sprint(v["EntName"]),
+					"RegNo":         fmt.Sprint(v["RegNo"]),
+					"LeRep":         fmt.Sprint(v["LeRep"]),
+					"OpLocDistrict": fmt.Sprint(v["OpLocDistrict"]),
+					"EstDate":       fmt.Sprint(v["EstDate"]),
+					"OpStateName":   fmt.Sprint(v["OpStateName"]),
+				}
+				entinfos = append(entinfos, tmp)
+			}
+			d, _ := json.Marshal(entinfos)
+			n.Render("/member/incmobile/list.html", &xweb.T{"data": string(d)})
+		} else {
+			n.Render("/search/enterpriseList.html", &xweb.T{"querymap": querymap, "data": data, "pagination": pagination})
+		}
 	}
 	return nil
 	//} else {
@@ -481,7 +531,6 @@ func searhWebContentent(querymap map[string]string, n *Search, reqType string) (
 	if client == nil {
 		return nil, nil
 	}
-	log.Println(query)
 	searchResult, err := client.Search().Index("enterprise").Type("enterprise").Source(query).Do()
 	if err != nil {
 		return nil, nil

+ 37 - 0
core/src/web/staticres/css/mobile/incmobile.css

@@ -3,6 +3,9 @@ body{
 	font-size:14px;
 	font-family: tahoma, arial, 'Hiragino Sans GB', 'Microsoft YaHei', 宋体, sans-serif;
 }
+input{
+	outline:none
+} 
 ul{
 	list-style:none;
 	padding-left:0px;
@@ -12,6 +15,7 @@ ul{
 	padding:5px 0 0 0 ;
 	background-color:rgb(247,248,250) !important;
 	border-bottom:1px solid #E7E7E7 !important;
+	text-align:center;
 }
 .m-searchbar div.containers{
 	margin:0px auto;
@@ -23,6 +27,27 @@ ul{
 	width: 71%;
 	border: 1px solid #DDDFDB !important;
 	border-radius: 15px;
+	padding-left: 15px;
+}
+.m-searchbar .immediately{
+	position: absolute;
+	display:none;
+    	z-index: 9999;
+	top: 35px !important;
+	border: 1px solid #B5B6BB;
+	border-top: 0px;
+	padding:3px;
+	margin-left: 57px;
+	background: #FFF;
+}
+.m-searchbar .immediately div{
+	height:30px;
+	line-height:30px ;
+}
+.m-searchbar .immediately div:hover{
+	cursor:pointer;
+	background-color:#16A086;
+	color:#FFF;
 }
 .m-searchbar .searchbtn{
 	display: inline-block;
@@ -245,6 +270,18 @@ hr.list{
 .index-navtable div:hover{
 	background:#F6F8FA !important;
 }
+.ent-status-g,.ent-status-r{
+	background-size: 100% 100%;
+	padding: 2px 10px 2px 5px;
+	color:#FFF;
+	font-weight:normal;
+}
+.ent-status-g{
+	background-image: url("/images/status-g.png");
+}
+.ent-status-r{
+	background-image: url("/images/status-r.png");
+}
 /*各详细页面*/
 .comnav ,.secnav{
 	height:50px;

+ 26 - 1
core/src/web/staticres/js/entcommunity.js

@@ -11,6 +11,24 @@ mCommunity.prototype={
 		return this;
 	},
 	initIndex:function(){
+		changeSearchBorder();
+		$(window).resize(function(){
+			changeSearchBorder();
+		});
+		$("#query").keyup(function(){
+			imFind(this);
+			if($("#immediately").children().length>0){
+				$("#immediately").show();
+			}
+		});
+		$("#query").focus(function(){
+			if($("#immediately").children().length>0){
+				$("#immediately").show();
+			}
+		});
+		$("#query").blur(function(){
+			$("#immediately").hide();
+		});
 		//高级搜索
 		$(".searchlink").click(function(){
 			n=$(".nav-bar");
@@ -103,4 +121,11 @@ mCommunity.prototype={
 	}
 }
 
-mCommunity.prototype.init.prototype = mCommunity.prototype;
+mCommunity.prototype.init.prototype = mCommunity.prototype;
+
+function changeSearchBorder(){
+		var width=$("#query").css("width");
+		width=width.substr(0,width.indexOf("p"))-30+"px";
+		$("#immediately").css("width",width);
+		$("#immediately").css("margin-left",$("#query").offset().left+15);
+	}

+ 10 - 5
core/src/web/templates/member/incmobile/index.html

@@ -2,7 +2,6 @@
 <html>
 	<head>
 		<title> 企业社区-列表</title>
-		{{include "/common/inc.html"}}
 		<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
 		<meta http-equiv="X-UA-Compatible" content="IE=edge,Chrome=1" />
 		<meta name="viewport" content="width=device-width,minimum-scale=1.0,maximum-scale=1.0,initial-scale=1.0" user-scalable="yes" />
@@ -46,7 +45,7 @@
 			.input-before{
 				z-index: 30;
 				position: absolute;
-				top: 15px;
+				top: 14px;
 				left: 9px;
 				color: #A0A0A0;
 				font-size:11px;
@@ -72,6 +71,10 @@
 			.footer .container .inc p{
 				font-size:10px;
 			}
+			#query{
+				height:40px;
+				padding-left:25px;
+			}
 		</style>
 <script>
 var signature = {{.T.signature}};
@@ -126,10 +129,10 @@ if(typeof(signature) != "undefined" && signature != null && signature.length ==
 				查企业,查企业失信信息,查企业变更,查你所想,无所不能...
 			</div>
 			<div style="clear:both;" class="col-sm-8">
-              <form>
+              <form method="post"  action="/search/enterprise/ent.html">
 						<div class="input-group col-xs-12">
 							<i class="glyphicon glyphicon-search input-before"></i>
-                 		<input type="text" id="query" class="form-control" placeholder="   找企业" style="height:40px;">
+                 		<input type="text" id="query" class="form-control" name="words" placeholder="找企业"  >
 							<span class="input-group-addon"><span class="glyphicon glyphicon-camera"></span></span>
              		</div>
 					</form>
@@ -146,7 +149,8 @@ if(typeof(signature) != "undefined" && signature != null && signature.length ==
 						</div>
 	      </div>
 		</footer>
-
+<script src="/js/jquery.js"></script>
+<script src="/js/qfw.js"></script>
 <script>
 $(".input-group-addon").click(function(){
 alert();
@@ -184,5 +188,6 @@ function getmpname(serverId){
     }); 
 }
 </script>
+
 </body>
 </html>

+ 29 - 23
core/src/web/templates/member/incmobile/list.html

@@ -12,9 +12,13 @@
 	<div class="col-xs-12">
 	<div class="m-searchbar">
 		<div class="containers">
-			<input type="text" class="searchtext"/>
+			<form id="searchForm" method="post">
+			<input type="text" id="query" class="searchtext"/>
 			<a class="searchbtn"><b class="glyphicon glyphicon-search"></b></a>
 			<a href="javascript:" class="searchlink">高级搜索</a>
+				<div id="immediately" class="immediately">
+				</div>
+			</form>
 		</div>
 	</div>
 	<div class="nav-bar hides">
@@ -50,30 +54,10 @@
 	</div>
 	<div class="bottom" >
 		<ul class="inclist">
-			<li class="col-xs-12">
-				<table align=center>
-					<caption >
-						<div class="left">纽科伦(新乡)起重机有大师法师打发斯蒂芬限公司洛阳分公司</div>
-						<div class="note taupe">
-							续存
-						</div>
-					</caption>
-					<tr>
-						<td class="left">注册号:<span>420621NB000007X</span></td>
-						<td>法定代表人:<span>李琳</span></td>
-					</tr>
-					<tr>
-						<td class="left">成立时间:<span>2015-05-26</span></td>
-						<td>所在地:<span>湖北 襄阳市</span></td>
-					</tr>
-					<tr>
-						<td colspan=2> <hr class="list"/></td>
-					</tr>
-				</table>
-			</li>
+			
 		</ul>
 	</div>
-	<a class="loadmore btn btn-link">加载更多</a>
+	<center><a class="loadmore btn btn-link">加载更多</a></center>
 	</div>
 	<script src="/js/jquery.js"></script>
 	<script src="/js/qfw.js"></script>
@@ -85,6 +69,28 @@
 		$(function(){
 			mCommunity().initIndex();
 		});
+		var data={{.T.data}}
+		var strVar = "";
+		strVar += "<li class=\"col-xs-12\"><table align=\"center\"><caption><div class=\"left\">$EntName<\/div><b class=\"$status\">$OpStateName<\/b><\/caption><tr><td class=\"left\">注册号:<span>$RegNo<\/span><\/td><td>法定代表人:<span>$LeRep<\/span><\/td><\/tr><tr><td class=\"left\">成立时间:<span>$EstDate<\/span><\/td><td>所在地:<span>$OpLocDistrict<\/span><\/td><\/tr><tr><td colspan=\"2\"><hr class=\"list\"><\/td><\/tr><\/table><\/li>";
+		if(data.length>10){
+			data=eval(data);
+			var li="";
+			for (var i=0;i<5;i++){
+				var tmp=strVar.replace("$EntName",data[i].EntName)
+										 .replace("$RegNo",data[i].RegNo)
+										 .replace("$LeRep",data[i].LeRep)
+										 .replace("$OpLocDistrict",data[i].OpLocDistrict)
+										 .replace("$EstDate",data[i].EstDate)
+										 .replace("$OpStateName",data[i].OpStateName.substr(0,2));
+				if (data[i].OpStateName!="存续"&&data[i].OpStateName.indexOf("在营")==-1){
+					 tmp=tmp.replace("$status","ent-status-r");
+				}else{
+					tmp=tmp.replace("$status","ent-status-g");
+				}
+				li=li+tmp;
+			}
+			$(".inclist").append($(li));
+		}
 	</script>
  </body>
 </html>

+ 32 - 0
weixin/src/limit.json

@@ -0,0 +1,32 @@
+{
+    "rpcserver": "127.0.0.1:83",
+    "autoUnlimit": false,
+    "ocrlimit": {
+        "limitrules": [
+            [
+                60,
+                50
+            ],
+            [
+                300,
+                200
+            ]
+        ],
+        "limitmsg": "名片识别进入限制状态,原因:%d秒内识别次数为%d超过%d次。",
+        "unlimitduration": 1800,
+        "notifyIds": [
+            "oJULtwzXo6EFV1Ah-XeyRBimXGM8"
+        ],
+        "unlimitrules": [
+            [
+                1800,
+                200
+            ],
+            [
+                300,
+                100
+            ]
+        ],
+        "unlimitmsg": "解除名片识别限制,%s。"
+    }
+}

+ 2 - 1
weixin/src/qfw/weixin/msgtxtchandler.go

@@ -42,7 +42,8 @@ func MsgTxtHandler(w ResponseWriter, r *Request) {
 		}
 	} else if r.Content == "微信管理" && mids[openid] {
 		UserSession[r.FromUserName] = NewUserSession("wxadmin")
-		w.ReplyText("您已进入微信管理,请输入指令操作:\n1.查看抽奖模式(指令:f0)\n2.切换抽奖模式(指令:c*,*为数字。如c0(自动模式),c1(手动模式1),c2(手动模式2),c3(手动模式3))\n3.统计抽奖结果(tjr*,tjr120(最近两分钟),tjr120-1200(最近两分钟至最近20分钟之间的))\n4.统计新用户数(tju*)\n5.服务器情况监测(ser0)\n6服务管理(man*,man1重启主程序(man11关闭),man3重启积分(man33关闭),man4重启微信认证(man44关闭))。\n输入q或Q离开。")
+		w.ReplyText(`您已进入微信管理,请输入指令操作:\n1.查看抽奖模式(指令:f0)\n2.切换抽奖模式(指令:c*,*为数字。如c0(自动模式),c1(手动模式1),c2(手动模式2),c3(手动模式3))\n3.统计抽奖结果(tjr*,tjr120(最近两分钟),tjr120-1200(最近两分钟至最近20分钟之间的))\n4.统计新用户数(tju*)\n5.服务器情况监测(ser0)\n6服务管理(man*,man1重启主程序(man11关闭),man3重启积分(man33关闭),man4重启微信认证(man44关闭))。\n输入q或Q离开。` +
+			`\n7.名片识别(指令:mp*,mp1查看识别状态,mp2关闭识别,mp3开启识别,mp60(数字大于10小于7200)查询最近60秒的识别次数)`)
 		return
 	} else if cj_reg.MatchString(r.Content) { //进入抽奖环节
 		if time.Now().Unix() > 1455552000 { //活动过期 ,过期后,这段代码要删除

+ 212 - 0
weixin/src/qfw/weixin/util/limitocr.go

@@ -0,0 +1,212 @@
+package util
+
+import (
+	"container/list"
+	"fmt"
+	"log"
+	"net/rpc"
+	qutil "qfw/util"
+	qrpc "qfw/util/rpc"
+	"strconv"
+	"sync"
+	"time"
+)
+
+//限制与解除数组
+var limitrule, unlimitrule [][]int
+
+//解除限制的时间间隔
+var unlimitduration int
+
+//提示语
+var limitmsg, unlimitmsg string
+
+//锁
+var limitLock = new(sync.Mutex)
+
+//限制状态
+var LimitStatus = false
+
+//流量池
+var tList = list.New()
+
+//全局抽奖次数
+var orctimes int64
+
+//通知openid
+var notifyIds []string
+
+var rpcserver string = "120.25.216.197:83"
+
+//对池的管理
+func listFun() {
+	tList.Remove(tList.Front())
+	tList.PushBack(orctimes)
+	time.AfterFunc(1*time.Second, listFun)
+}
+
+//取值
+func CheckLimit() bool {
+	orctimes++
+	return LimitStatus
+}
+
+func GetValFromList(n int) (val int, flag bool) {
+	qutil.Try(func() {
+		B := tList.Back()
+		Bn := B.Value.(int64)
+		ti := 1
+		n = n - 1
+		A := B.Prev()
+		flag = true
+		for ti < n {
+			if A != nil {
+				ti++
+				A = A.Prev()
+			} else {
+				flag = false
+				break
+			}
+		}
+		val = int(Bn - A.Value.(int64))
+	}, func(e interface{}) {
+		log.Println("ERROR", e)
+	})
+	return
+}
+
+//限制的监测
+func limitFun() {
+	limitLock.Lock()
+	//非限制状态
+	if !LimitStatus {
+		for _, v := range limitrule {
+			//取的秒的区间
+			if val, flag := GetValFromList(v[0]); flag && val >= v[1] {
+				//限制状态
+				LimitStatus = true
+				//发送模板消息
+				str := fmt.Sprintf(limitmsg, v[0], val, v[1])
+				go func() {
+					log.Println("发送识别限制通知", str)
+					qutil.Try(func() {
+						for _, id := range notifyIds {
+							SendManagerNotifyMsg(&qrpc.NotifyMsg{
+								Openid: id,
+								Title:  "识别进入限制状态通知",
+								Detail: "系统",
+								Result: str,
+								Remark: time.Now().Format(qutil.Date_Full_Layout),
+							})
+						}
+					}, func(e interface{}) {})
+				}()
+				break
+			}
+		}
+	}
+	limitLock.Unlock()
+	time.AfterFunc(5*time.Second, limitFun)
+}
+
+//解除限制的监测
+func unlimitFun() {
+	limitLock.Lock()
+	//非限制状态
+	if LimitStatus {
+		allb := true
+		str := ""
+		for _, v := range unlimitrule {
+			//取的秒的区间
+			val, flag := GetValFromList(v[0])
+			if !flag || val >= v[1] {
+				allb = false
+				break
+			} else {
+				str += " [间隔:" + strconv.Itoa(v[0]) + "秒," + "实际次数:" + strconv.Itoa(val) + ",限制:" + strconv.Itoa(v[1]) + "]"
+			}
+		}
+		if allb {
+			LimitStatus = false
+			//发送解除通知
+			go func() {
+				log.Println("发送解除识别限制通知", str)
+				qutil.Try(func() {
+					for _, id := range notifyIds {
+						SendManagerNotifyMsg(&qrpc.NotifyMsg{
+							Openid: id,
+							Title:  "解除识别限制通知",
+							Detail: "系统",
+							Result: fmt.Sprintf(unlimitmsg, str),
+							Remark: time.Now().Format(qutil.Date_Full_Layout),
+						})
+					}
+				}, func(e interface{}) {})
+			}()
+		}
+
+	}
+	limitLock.Unlock()
+	time.AfterFunc(time.Duration(unlimitduration)*time.Second, unlimitFun)
+}
+
+var limitConfig map[string]interface{}
+
+//初始化内容
+func init() {
+	qutil.ReadConfig("./limit.json", &limitConfig)
+	rpcserver = qutil.ObjToString(limitConfig["rpcserver"])
+	Limit := limitConfig["ocrlimit"].(map[string]interface{})
+	tmpLimtRules := Limit["limitrules"].([]interface{})
+	limitrule = make([][]int, len(tmpLimtRules))
+	for i, k := range tmpLimtRules {
+		minR := k.([]interface{})
+		tmpInts := make([]int, len(minR))
+		limitrule[i] = tmpInts
+		for j, v := range minR {
+			tmpInts[j] = int(v.(float64))
+		}
+	}
+	tmpUnLimtRules := Limit["unlimitrules"].([]interface{})
+	unlimitrule = make([][]int, len(tmpUnLimtRules))
+	for i, k := range tmpUnLimtRules {
+		minR := k.([]interface{})
+		tmpInts := make([]int, len(minR))
+		unlimitrule[i] = tmpInts
+		for j, v := range minR {
+			tmpInts[j] = int(v.(float64))
+		}
+	}
+	unlimitduration = int(Limit["unlimitduration"].(float64))
+	limitmsg = Limit["limitmsg"].(string)
+	unlimitmsg = Limit["unlimitmsg"].(string)
+
+	notifyIds = qutil.ObjArrToStringArr(Limit["notifyIds"].([]interface{}))
+
+	for tList.Len() < 7200 {
+		tList.PushBack(int64(0))
+	}
+	go listFun()
+	go limitFun()
+	autoUnlimit := limitConfig["autoUnlimit"].(bool)
+	if autoUnlimit {
+		go unlimitFun()
+	}
+}
+
+func SendManagerNotifyMsg(p *qrpc.NotifyMsg) {
+	qutil.Try(func() {
+		client, err := rpc.DialHTTP("tcp", rpcserver)
+		defer client.Close()
+		if err != nil {
+			log.Println(err.Error())
+			return
+		}
+		var repl qrpc.RpcResult
+		err = client.Call("WeiXinRpc.SendManagerNotifyMsg", p, &repl)
+		if err != nil {
+			log.Println(err.Error())
+		}
+	}, func(e interface{}) {})
+
+}

+ 23 - 1
weixin/src/qfw/weixin/wxadmin.go

@@ -2,16 +2,18 @@ package weixin
 
 import (
 	"fmt"
-	. "gopkg.in/mgo.v2/bson"
 	"io/ioutil"
 	"log"
 	"os/exec"
 	"qfw/util"
 	"qfw/util/mongodb"
 	"qfw/util/redis"
+	wutil "qfw/weixin/util"
 	"strconv"
 	"strings"
 	"time"
+
+	. "gopkg.in/mgo.v2/bson"
 )
 
 func processWxAdmin(openid, content string, w ResponseWriter, r *Request) {
@@ -32,6 +34,26 @@ func processWxAdmin(openid, content string, w ResponseWriter, r *Request) {
 							resStr = "模式已切换:" + getMode()
 						}
 					}
+				case "mp":
+					//名片识别的处理
+					if var1 <= 10 {
+						switch var1 {
+						case 1:
+							//查看识别状态
+							resStr = fmt.Sprintf("识别状态:%s", util.If(wutil.LimitStatus, "关闭", "开启"))
+						case 2:
+							//关闭识别
+							wutil.LimitStatus = true
+							resStr = "关闭识别完成"
+						case 3:
+							//开启识别
+							wutil.LimitStatus = false
+							resStr = "开启识别完成"
+						}
+					} else {
+						num, _ := wutil.GetValFromList(int(var1))
+						resStr = fmt.Sprintf("最近%s秒,识别次数:%d", var1, num)
+					}
 				case "tjr":
 					//数据库抽奖查看
 					var1, var2 = getTimes(qleng, unit, var1, var2)