From 8be4f2aac9f180061e30600b1c55661571b10249 Mon Sep 17 00:00:00 2001
From: panlei <2799247126@qq.com>
Date: 星期二, 02 七月 2019 17:30:45 +0800
Subject: [PATCH] 加个过人脸规则就退出的测试

---
 ruleserver/ruleToformula.go |  137 +++++++++++++++++++++++++++------------------
 1 files changed, 82 insertions(+), 55 deletions(-)

diff --git a/ruleserver/ruleToformula.go b/ruleserver/ruleToformula.go
index 8c0b3c7..47dc72e 100644
--- a/ruleserver/ruleToformula.go
+++ b/ruleserver/ruleToformula.go
@@ -4,12 +4,13 @@
 	"encoding/json"
 	"fmt"
 	"log"
+	"os"
+	"ruleprocess/cache"
 	"sort"
 	"strconv"
 	"strings"
 	"time"
 
-	"basic.com/dbapi.git"
 	"basic.com/pubsub/protomsg.git"
 	"github.com/knetic/govaluate"
 )
@@ -64,7 +65,7 @@
 	Location   Rect    // 璁颁笅姣忎釜鐩爣鐨勪綅缃弬鏁帮紝鏈�鍚庣粰缁撴灉瑁呴厤浜鸿劯鏁版嵁鐨勬椂鍊欑敤鐨勫埌
 	SdkName    string
 	ThftRes    protomsg.ThftResult
-	Liker      []LikePerson
+	Liker      []*protomsg.Baseinfo
 }
 
 type LikePerson struct {
@@ -98,7 +99,7 @@
 	IsYolo  bool    // 鏄惁鏄痽olo鏁版嵁
 	SdkName string
 	ThftRes protomsg.ThftResult
-	Liker   []LikePerson // 濡傛灉鏄汉鑴哥殑璇濆挨鍏舵槸姣斿锛屽簲瀛樹笅浠栬窡搴曞簱鐨勪汉鍛樼殑鐩镐技鎯呭喌 yolo鐨勮瘽缁檔il灏辫
+	Liker   []*protomsg.Baseinfo // 濡傛灉鏄汉鑴哥殑璇濆挨鍏舵槸姣斿锛屽簲瀛樹笅浠栬窡搴曞簱鐨勪汉鍛樼殑鐩镐技鎯呭喌 yolo鐨勮瘽缁檔il灏辫
 }
 
 // 姣忎釜绠楁硶瀵逛簬褰撳墠甯х敾闈㈣嚜宸辨彁鍙栫殑鏁版嵁
@@ -112,13 +113,13 @@
 	IsStatic    bool       // 鏄惁闈欐
 	ImageWidth  int        // 鎽勫儚鏈烘媿鎽勭殑鍥惧儚瀹� 鍍忕礌
 	ImageHeight int        // 鎽勫儚鏈烘媿鎽勭殑鍥惧儚楂� 鍍忕礌
-	AreaMapList []AreaMap  // 鏈瑂dk鎻愬彇鐨勬暟鎹寜鐓у尯鍩熷垝鍒嗗悗鐨勬暟鎹泦鍚�
+	AreaMapList []AreaMap // 鏈瑂dk鎻愬彇鐨勬暟鎹寜鐓у尯鍩熷垝鍒嗗悗鐨勬暟鎹泦鍚�
 }
 
 // 浠庣畻娉曟ā鍧楀効鎷挎潵鐨勫涓�甯у浘鍍忓悇涓畻娉曟彁鍙栫殑鏁版嵁闆嗗悎
 type SdkDatas struct {
 	CameraId   string
-	Sdkdata    []SdkData
+	Sdkdata    []*SdkData
 	RuleResult map[string]interface{} // 杩囧畬瑙勫垯鍚庢墦鐨勬爣绛� face: []Arg  yolo: []Result
 }
 
@@ -139,7 +140,7 @@
 	RuleText    string // 鏂囧瓧鐗堣鍒欑粍
 }
 type LittleRuleResult struct {
-	SdkName string //璁板綍涓嬫缁撴灉鏄摢涓猻dk鐨勭粨鏋�
+	SdkName string // 璁板綍涓嬫缁撴灉鏄摢涓猻dk鐨勭粨鏋�
 	Result  string // 宸插寘鍚簡鍓嶇疆杩炴帴绗�
 	Sort    int32
 }
@@ -158,28 +159,30 @@
 }
 
 // 鏍规嵁鎽勫儚鏈篿d鎷垮埌鎽勫儚鏈烘墍鏈夊尯鍩�
-func GetPolygons(cameraId string) []*protomsg.CameraPolygon {
-	var api dbapi.CameraApi
-	data := api.FindAllPolygons()
-	//fmt.Println("鏌ュ埌鐨勬墍鏈夊尯鍩燂細", data)
-	// 鏍规嵁id浠巑ap涓嬁鍒板尯鍩�
-	var cameraPolygons []*protomsg.CameraPolygon
-	for _, item := range data {
-		if item.CameraId == cameraId {
-			// 闇�瑕佹牴鎹瘮渚嬫妸鍓嶅彴鐢荤殑鍖哄煙鐨勫潗鏍囪浆鍖栦负鐩稿簲鎽勫儚鏈烘媿鎽勭殑鍥惧儚鐨勫ぇ灏�   x鍧愭爣鍒嗗埆*image.width/椤甸潰鍖哄煙瀹�  y鍧愭爣鍒嗗埆*image.height/椤甸潰鍖哄煙楂�
-			// 鍓嶅彴瀹介珮鍥哄畾
-			cameraPolygons = append(cameraPolygons, &item)
-		}
-	}
+func GetPolygons(cameraId string) []protomsg.CameraPolygon {
+	//var api dbapi.CameraApi
+	//data := api.FindAllPolygons()
+	////fmt.Println("鏌ュ埌鐨勬墍鏈夊尯鍩燂細", data)
+	//// 鏍规嵁id浠巑ap涓嬁鍒板尯鍩�
+	var cameraPolygons []protomsg.CameraPolygon
+	//for _, item := range data {
+	//	if item.CameraId == cameraId && item.Type != "line" {
+	//		// 闇�瑕佹牴鎹瘮渚嬫妸鍓嶅彴鐢荤殑鍖哄煙鐨勫潗鏍囪浆鍖栦负鐩稿簲鎽勫儚鏈烘媿鎽勭殑鍥惧儚鐨勫ぇ灏�   x鍧愭爣鍒嗗埆*image.width/椤甸潰鍖哄煙瀹�  y鍧愭爣鍒嗗埆*image.height/椤甸潰鍖哄煙楂�
+	//		// 鍓嶅彴瀹介珮鍥哄畾
+	//		//log.Println("------------绗﹀悎鏉′欢鐨勫尯鍩燂細",item)
+	//		cameraPolygons = append(cameraPolygons, item)
+	//	}
+	//}
+	cameraPolygons = cache.GetPolygonsByCameraId(cameraId)
+
 	//log.Println("鏍规嵁鎽勫儚鏈篿d鏌ュ埌鐨勫尯鍩�", cameraPolygons, "--鍖哄煙鏁伴噺涓猴細", len(cameraPolygons))
 	return cameraPolygons
 }
 
 // 鎶妔dk浠庢暟鎹抚涓婃彁鍙栫殑鎸夌収鍖哄煙鍒嗙被褰掔疆
-func SdkDataFormat(cameraId string, arg *SdkData, cameraPolygons []*protomsg.CameraPolygon) {
-	// cameraPolygons := GetPolygons(arg.CameraId)
-	// list := AreaMapList{}
+func SdkDataFormat(cameraId string, arg *SdkData, cameraPolygons []protomsg.CameraPolygon) {
 	for _, polygon := range cameraPolygons {
+		//log.Println("++++++鍦ㄨ繖鍎跨湅涓�涓嬪尯鍩熷晩:", polygon.Polygon)
 		areaMap := AreaMap{cameraId: cameraId, areaId: polygon.Id, areaJson: polygon.Polygon, triggerLine: polygon.TriggerLine, directionLine: polygon.DirectionLine}
 		// 涓烘瘡涓憚鍍忔満鍖哄煙濉厖鏁版嵁
 		areaMap.CountAreaObjs(arg)
@@ -194,7 +197,7 @@
 		cameraPolygons := GetPolygons(args.CameraId)
 		// 鎶婃墍鏈夌殑sdk鎻愬彇鐨勬暟鎹兘鎸夋墍灞炴憚鍍忔満鐨勫尯鍩熷綊缃�
 		for _, arg := range args.Sdkdata {
-			SdkDataFormat(args.CameraId, &arg, cameraPolygons)
+			SdkDataFormat(args.CameraId, arg, cameraPolygons)
 		}
 		// 璺戞湰鎽勫儚鏈虹殑鎵�鏈夎鍒欑粍 涓�缁勪竴缁勮窇
 		taskRuleList := GetRuleGroup(args.CameraId) // 鏈憚鍍忔満涓嬫墍鏈変换鍔$粍
@@ -207,6 +210,7 @@
 			for _, taskRule := range taskRuleList {
 				ruleList := taskRule.GroupRules // 鑾峰彇鐨勬槸task涓嬮潰鐨勪换鍔$粍
 				taskId := taskRule.TaskId
+				//log.Println("------------鏈粍浠诲姟涓嬬殑瑙勫垯缁勭殑鏁伴噺锛�",len(ruleList))
 				for i := 0; i < len(ruleList); i++ {
 					temp := ruleList[i].Rules // temp涓轰竴缁勫畬鏁磋鍒� 鍦ㄦ闇�瑕佸垽鏂鍒欐槸鍚︽槸鑱斿姩瑙勫垯
 					if len(temp) > 0 {
@@ -215,7 +219,6 @@
 							linkTask(args, ruleList[i], taskId)
 						} else {
 							// 鐙珛浠诲姟鐨勫鐞�
-							log.Println("----------------------------------------64鎽勫儚鏈哄叆鍏�")
 							RunRule(args, ruleList[i], taskId)
 						}
 					}
@@ -225,6 +228,13 @@
 	}
 }
 func RunRule(args *SdkDatas, groupRule *protomsg.GroupRule, taskId string) bool {
+	defer func() {
+		if err := recover(); err != nil {
+			fmt.Println("姣斿瑙勫垯鏈夎", err.(string))
+		}
+
+	}()
+	log.Println("+++++++++++瑙勫垯寮�濮嬭繍琛�+++++++++++++++++褰撳墠瑙勫垯--锛�",*groupRule)
 	resultSplice := []*LittleRuleResult{}
 	// 鍏堣繃瀹屾潯浠惰鍒�
 	for j := 0; j < len(groupRule.Rules); j++ {
@@ -288,9 +298,13 @@
 		completeFormula = completeFormula + va.Result
 	}
 	if completeFormula != "" {
+		log.Println("鐪嬬湅鍏紡-----------锛�", completeFormula)
 		expression, _ := govaluate.NewEvaluableExpression(completeFormula)
-		result, _ := expression.Evaluate(nil) // 寰楀埌鏁板鍏紡鐨勭粨鏋�
-		if result.(bool) {
+		if strings.HasPrefix(completeFormula,"&&") || strings.HasPrefix(completeFormula,"||"){
+			panic("瑙勫垯鏈夎锛屽緱鍒扮殑鏁板鍏紡涓嶅彲瑙f瀽")
+		}
+		result,_ := expression.Evaluate(nil) // 寰楀埌鏁板鍏紡鐨勭粨鏋�
+		if !result.(bool) {
 			// 缁欒繖甯ф暟鎹墦涓婅鍒欑粍鏍囩
 			//args.RuleResult = append(args.RuleResult, Result{TaskId: taskId, RuleGroupId: groupRule.GroupId})
 			for k, timeEle := range TimeEleList {
@@ -305,23 +319,28 @@
 			for k, timeEle := range TimeEleList {
 				if strings.Contains(k, taskId) {
 					if timeEle.N != 0 { // 璺熻繖涓换鍔℃湁鍏崇殑瀹氭椂鍣ㄨ鍏ㄩ儴绛変簬0
+						log.Println("鈥斺�斺�斺�斺�斺�斺�斺�斺�斺�斺��-------------涓嶅啢锛屼綘鏄瀹氭椂鍣ㄦ墦璐ョ殑锛�")
 						flag = false
 					}
 				}
 			}
 			if flag {
-				fmt.Println("鏈抚鏁版嵁绗﹀悎瑙勫垯")
+				fmt.Println("----------------------------缁堜簬璧板畬涓囬噷闀垮緛")
 				// 濡傛灉鎴愬姛浜嗘垜搴旇鎵惧埌瑙勫垯涓秹鍙婂埌鐨剆dk锛岃褰曚笅浠栦滑鐨剆dkname
 				sdkName := ""
 				for j := 0; j < len(groupRule.Rules); j++ {
 					for _, sdkData := range args.Sdkdata {
-						if groupRule.Rules[j].SdkId == sdkData.SdkId && sdkData.IsYolo{ // 鍙褰晊olo绗﹀悎瑙勫垯鐨剆dk
+						if groupRule.Rules[j].SdkId == sdkData.SdkId && sdkData.IsYolo && !strings.Contains(sdkName,sdkData.SdkName) { // 鍙褰晊olo绗﹀悎瑙勫垯鐨剆dk 鍚屾椂瑕侀伩鍏嶉噸澶嶆嫾鎺�
 							sdkName = sdkName + "," + sdkData.SdkName
 						}
 					}
 				}
-				// 杩囧畬瑙勫垯鍚庢墦涓爣绛撅紝鍛婅瘔璋冪敤鑰呮湰甯ф暟鎹拡瀵瑰摢涓换鍔″摢缁勮鍒欐姤璀︿簡     鍚庡姞锛氬彲鑳借繕涓嶅锛岃繕闇�瑕佸尯鍒嗚Е鍙戞姤璀︾殑瀵硅薄锛屽悗闈㈠線es鏁版嵁搴撴彃鏁版嵁鏃惰鐢�
 				args.RuleResult["yolo"] = append(args.RuleResult["yolo"].([]Result), Result{taskId, sdkName, groupRule.GroupId, groupRule.AlarmLevel, groupRule.GroupText})
+				log.Println("-------------------yolo缁撴灉鏍囩",args.RuleResult["yolo"].([]Result))
+				if args.RuleResult["faces"] != nil {
+					log.Println("-------------------face缁撴灉鏍囩",args.RuleResult["faces"].([]Arg))
+					os.Exit(1)
+				}
 				return true
 			} else {
 				return false
@@ -360,6 +379,7 @@
 
 	// }
 	for _, obj := range arg.Photo {
+		log.Println("------------------鐪嬬湅sdkData:",arg.SdkName,"鐨凱hoto鏁版嵁----------------", obj, "----椤轰究鐪嬬湅鍗犳瘮-----锛�", PgsInterPercent(areaPoints, obj.Rects, widthScale, heigthScale))
 		if threshold <= obj.Score && size <= float64(obj.Rects.Width*obj.Rects.Height) && intersectionper <= PgsInterPercent(areaPoints, obj.Rects, widthScale, heigthScale) {
 			// 杩欐瑕佸榻愯〃杈惧紡閲屾墍闇�瑕佺殑鎵�鏈夊弬鏁�
 			a.targetNum++
@@ -374,6 +394,7 @@
 	a.time = time.Unix(time.Now().Unix(), 0).String()[11:16]
 	a.keepRight = arg.KeepRight
 	a.isStatic = arg.IsStatic
+	log.Println("--------------------鐪嬬湅鍖哄煙鏁版嵁锛�",*a)
 }
 
 // 灏嗗瓧绗︿覆鏍煎紡鐨勫潗鏍囧簭鍒楀寲涓篜oint鏍煎紡
@@ -398,16 +419,17 @@
 func GetRuleGroup(cameraId string) []*protomsg.TaskGroupArgs {
 	// 鏌ヨ鏁版嵁搴�
 	// 绗竴姝ユ煡鍑鸿窡杩欎釜鎽勫儚鏈虹浉鍏崇殑group_id(澶ц鍒�)
-	var api dbapi.CameraTaskArgsApi
-	all := api.FindAll()
-	//fmt.Println("鎵�鏈夎鍒�:", all)
-	var taskArgs []*protomsg.TaskGroupArgs
-	for _, camArg := range all {
-		if camArg.CameraId == cameraId {
-			taskArgs = camArg.TaskArgs
-		}
-	}
-	return taskArgs
+	//var api dbapi.CameraTaskArgsApi
+	//
+	////fmt.Println("鎵�鏈夎鍒�:", all)
+	//var taskArgs []*protomsg.TaskGroupArgs
+	//for _, camArg := range all {
+	//	if camArg.CameraId == cameraId {
+	//		taskArgs = camArg.TaskArgs
+	//	}
+	//}
+	all := cache.GetCameraTaskRulesByCameraId(cameraId)
+	return all
 }
 
 // 鑱斿姩浠诲姟鐨勫鐞�
@@ -472,7 +494,7 @@
 					sdkName := ""
 					for j := 0; j < len(groupRule.Rules); j++ {
 						for _, sdkData := range args.Sdkdata {
-							if groupRule.Rules[j].SdkId == sdkData.SdkId && sdkData.IsYolo{ // 鍙褰晊olo绗﹀悎瑙勫垯鐨剆dk
+							if groupRule.Rules[j].SdkId == sdkData.SdkId && sdkData.IsYolo { // 鍙褰晊olo绗﹀悎瑙勫垯鐨剆dk
 								sdkName = sdkName + "," + sdkData.SdkName
 							}
 						}
@@ -500,7 +522,6 @@
 func filterRule(rule *protomsg.Rule, am *AreaMap) LittleRuleResult {
 	if rule.SdkId == "FaceDetect" || rule.SdkId == "FaceCompare" {
 		// 澶勭悊鐨勬槸浜鸿劯绠楁硶 濡傛灉杩欐潯瑙勫垯閰嶇疆鐨勬槸浜鸿劯绠楁硶锛岃繃婊ゅ畬鏉′欢涔嬪悗鐩存帴寰楀嚭缁撴灉锛屽洜涓鸿偗瀹氭病鏈夋暟閲忔潯浠讹紝鑷繁鎷兼帴
-		log.Println("------------------------------------------杩樿兘杩涜繖鍎夸簡涓嶆垚锛燂紵锛�")
 		if rule.SdkId == am.sdkId && rule.PolygonId == am.areaId { // 绠楁硶鍜屽尯鍩熼兘寰楀鐨勪笂
 
 			if rule.SdkId == "FaceCompare" {
@@ -514,7 +535,7 @@
 				for _, obj := range am.filterData {
 					for index := 0; index < len(obj.Liker); {
 						// 灏嗚揪涓嶅埌闃堝�肩殑鐩镐技鑰呬粠鐩镐技鑰呮暟缁勪腑鍒犻櫎
-						if obj.Liker[index].Score < argValue {
+						if float64(obj.Liker[index].CompareScore) < argValue {
 							// Go 璇█涓垏鐗囧垹闄ゅ厓绱犵殑鏈川鏄細浠ヨ鍒犻櫎鍏冪礌涓哄垎鐣岀偣锛屽皢鍓嶅悗涓や釜閮ㄥ垎鐨勫唴瀛橀噸鏂拌繛鎺ヨ捣鏉ャ�備笉鐢ㄦ��鐤戯紝鏁扮粍鍒犻櫎鍏冪礌灏辫繖涔堝潙鐖�
 							obj.Liker = append(obj.Liker[:index], obj.Liker[index+1:]...)
 						} else {
@@ -582,9 +603,9 @@
 		}
 	} else {
 		// 澶勭悊鐨勯兘鏄痽olo鏁版嵁
-		log.Println("瑙勫垯涓殑sdkId涓猴細",rule.SdkId,"--鍖哄煙鏁版嵁闆嗗悎涓殑sdkId涓猴細",am.sdkId,"--瑙勫垯涓殑鍖哄煙Id涓猴細",rule.PolygonId,"--鍖哄煙鏁版嵁闆嗗悎涓殑鍖哄煙Id涓猴細",am.areaId,)
 		if rule.SdkId == am.sdkId && rule.PolygonId == am.areaId { // 棣栧厛杩欐潯瑙勫垯寰楁槸杩欎釜绠楁硶鐨勮鍒欙紝鍏舵瑙勫垯鎵�瀵瑰簲鐨勫尯鍩焛d瑕佽窡鍖哄煙鏁版嵁鐨刬d瀵圭殑涓�
 			if rule.SdkArgAlias == "score" || rule.SdkArgAlias == "proportion" || rule.SdkArgAlias == "size" { // 鍒ゆ柇鐨勬槸鐩镐技鍊硷紝鍗犳瘮锛屽昂瀵哥瓑杩囨护鏉′欢锛屽鏋滃啀鏈夛紝杩樺彲浠ュ啀鍔�
+				log.Println("----------褰撳墠鏉′欢瑙勫垯锛�---------",rule)
 				var args []Arg
 				if rule.RuleWithPre == "&&" {
 					args = am.filterData
@@ -597,10 +618,13 @@
 					var formula string
 					if rule.SdkArgAlias == "score" {
 						formula = strconv.FormatFloat(arg.Score, 'f', -1, 64) + " " + rule.Operator + " " + rule.SdkArgValue // 寰楀埌瀛楃涓插叕寮�
+						log.Println("褰撳墠鐩镐技搴﹀皬鍏紡锛�",formula)
 					} else if rule.SdkArgAlias == "proportion" {
 						formula = strconv.FormatFloat(arg.Proportion, 'f', -1, 64) + " " + rule.Operator + " " + rule.SdkArgValue // 寰楀埌瀛楃涓插叕寮�
+						log.Println("褰撳墠鍗犳瘮灏忓叕寮忥細",formula)
 					} else {
 						formula = strconv.FormatFloat(arg.Size, 'f', -1, 64) + " " + rule.Operator + " " + rule.SdkArgValue // 寰楀埌瀛楃涓插叕寮�
+						log.Println("褰撳墠灏哄灏忓叕寮忥細",formula)
 					}
 					expression, _ := govaluate.NewEvaluableExpression(formula) // 寰楀埌鏁板鍏紡
 					result, _ := expression.Evaluate(nil)                      // 寰楀埌鏁板鍏紡鐨勭粨鏋�
@@ -701,18 +725,20 @@
 	return LittleRuleResult{}
 }
 func timeRuleResult(rule *protomsg.Rule, am *AreaMap) LittleRuleResult {
-	if rule.PolygonId == am.areaId { // 棣栧厛瑙勫垯鎵�瀵瑰簲鐨勫尯鍩焛d瑕佽窡鍖哄煙鏁版嵁鐨刬d瀵圭殑涓�
-		if rule.SdkArgAlias == "time" { // 鍒ゆ柇鏄惁绗﹀悎鏃堕棿瑙勫垯
+	if rule.PolygonId == am.areaId && rule.SdkId == am.sdkId{ // 棣栧厛瑙勫垯鎵�瀵瑰簲鐨勫尯鍩焛d瑕佽窡鍖哄煙鏁版嵁鐨刬d瀵圭殑涓�
+		if rule.SdkArgAlias == "time_rule" { // 鍒ゆ柇鏄惁绗﹀悎鏃堕棿瑙勫垯
+			log.Println("----------褰撳墠鏃堕棿瑙勫垯锛�---------",rule)
 			// 鏍规嵁鏀惧�煎瓧娈甸噷瀛樼殑鏃堕棿瑙勫垯鐨刬d鍘诲彟涓�涓〃閲屾煡闇�瑕佹瘮瀵圭殑鏃堕棿娈碉紙姣斿褰撳墠鏃堕棿鏄懆涓夛紝搴旀牴鎹尯鍩焛d鏌ュ嚭鍏跺懆涓夌殑鍑犱釜甯冮槻鏃堕棿娈碉紝鏁扮粍锛�
 			//fmt.Println("鏃堕棿瑙勫垯鐨勬祴璇�")
 			now := time.Now()
 			index := getIndexOfWeek(now.Weekday().String())
 			timeList := GetTimeById(rule.SdkArgValue, index)
+			log.Println("褰撳ぉ鐨勬椂闂存闆嗗悎锛�----------",timeList)
 			//fmt.Println("浠庢暟鎹簱涓煡鍑虹殑鏃堕棿瑙勫垯锛�", timeList)
 			// 鍒ゆ柇鍥剧墖鏁版嵁鐨勬椂闂存槸鍚︾鍚堝綋鍓嶈鍒� 鍦ㄤ竴涓嵆涓簍rue锛屽叏涓嶅湪涓篺alse
 			flag := "false"
 			for _, timeSlot := range timeList {
-				if rule.Operator == "satisfy" { // 婊¤冻鎵�閫夌殑鏃堕棿瑙勫垯
+				if rule.Operator == "satisfy" || rule.Operator == "=="{ // 婊¤冻鎵�閫夌殑鏃堕棿瑙勫垯
 					formula := "'" + timeSlot.Start + "'" + "<" + "'" + am.time + "'"
 					expression, _ := govaluate.NewEvaluableExpression(formula) // 寰楀埌鏁板鍏紡
 					result, _ := expression.Evaluate(nil)                      // 寰楀埌鏁板鍏紡鐨勭粨鏋�
@@ -726,7 +752,7 @@
 						break
 					}
 				}
-				if rule.Operator == "unsatisfy" { // 涓嶆弧瓒虫墍閫夌殑鏃堕棿瑙勫垯
+				if rule.Operator == "unsatisfy" || rule.Operator == "!="{ // 涓嶆弧瓒虫墍閫夌殑鏃堕棿瑙勫垯
 					formula := timeSlot.Start + "<" + am.time
 					expression, _ := govaluate.NewEvaluableExpression(formula) // 寰楀埌鏁板鍏紡
 					result, _ := expression.Evaluate(nil)                      // 寰楀埌鏁板鍏紡鐨勭粨鏋�
@@ -768,14 +794,15 @@
 
 // 鍙栧嚭鏌愪釜鏃堕棿瑙勫垯鐨勭鍑犲ぉ鐨勮鍒欐闆嗗悎
 func GetTimeById(id string, index int) []TimeRange {
-	var cameraTimeRule protomsg.CameraTimerule
-	var api dbapi.CameraApi
-	_, rules := api.FindAllTimeRules()
-	for _, rule := range rules {
-		if rule.Id == id {
-			cameraTimeRule = rule
-		}
-	}
+	//var cameraTimeRule protomsg.CameraTimerule
+	//var api dbapi.CameraApi
+	//_, rules := api.FindAllTimeRules()
+	//for _, rule := range rules {
+	//	if rule.Id == id {
+	//		cameraTimeRule = rule
+	//	}
+	//}
+	_,cameraTimeRule := cache.GetTimeRuleById(id)
 	var timeRangeList []day
 	json.Unmarshal([]byte(cameraTimeRule.TimeRule), &timeRangeList)
 	for _, timerange := range timeRangeList {

--
Gitblit v1.8.0