From f85585b1a6260678fe5912dc0048944b309d949e Mon Sep 17 00:00:00 2001 From: panlei <2799247126@qq.com> Date: 星期四, 04 七月 2019 13:58:22 +0800 Subject: [PATCH] 联动任务的非第一条规则去掉连接符 --- ruleserver/ruleToformula.go | 136 +++++++++++++++++++++++++++------------------ 1 files changed, 81 insertions(+), 55 deletions(-) diff --git a/ruleserver/ruleToformula.go b/ruleserver/ruleToformula.go index 6e0469e..6bc1fde 100644 --- a/ruleserver/ruleToformula.go +++ b/ruleserver/ruleToformula.go @@ -113,7 +113,7 @@ IsStatic bool // 鏄惁闈欐 ImageWidth int // 鎽勫儚鏈烘媿鎽勭殑鍥惧儚瀹� 鍍忕礌 ImageHeight int // 鎽勫儚鏈烘媿鎽勭殑鍥惧儚楂� 鍍忕礌 - AreaMapList []AreaMap // 鏈瑂dk鎻愬彇鐨勬暟鎹寜鐓у尯鍩熷垝鍒嗗悗鐨勬暟鎹泦鍚� + AreaMapList []AreaMap // 鏈瑂dk鎻愬彇鐨勬暟鎹寜鐓у尯鍩熷垝鍒嗗悗鐨勬暟鎹泦鍚� } // 浠庣畻娉曟ā鍧楀効鎷挎潵鐨勫涓�甯у浘鍍忓悇涓畻娉曟彁鍙栫殑鏁版嵁闆嗗悎 @@ -217,7 +217,7 @@ if len(temp) > 0 { if ruleList[i].SetType == "linkTask" { // groupId涓惈鏈塴ink鍒欎负鑱斿姩浠诲姟 - //LinkTask(args, ruleList[i], taskId) + LinkTask(args, ruleList[i], taskId) } else { // 鐙珛浠诲姟鐨勫鐞� RunRule(args, ruleList[i], taskId) @@ -234,7 +234,7 @@ fmt.Println("姣斿瑙勫垯鏈夎", err.(string)) } }() - log.Println("+++++++++++瑙勫垯寮�濮嬭繍琛�+++++++++++++++++褰撳墠瑙勫垯--锛�",(*groupRule).GroupText) + log.Println("+++++++++++瑙勫垯寮�濮嬭繍琛�+++++++++++++++++褰撳墠瑙勫垯--锛�", (*groupRule).GroupText) resultSplice := []*LittleRuleResult{} // 鍏堣繃瀹屾潯浠惰鍒� for j := 0; j < len(groupRule.Rules); j++ { @@ -248,25 +248,7 @@ } } } - // 杩囧畬鏉′欢鏁版嵁鍚庢妸绗﹀悎鏉′欢鐨勪汉鑴告暟鎹杩涚粨鏋滄爣绛鹃噷 - faces := []Arg{} - for _, sdkData := range args.Sdkdata { - for _, areaMap := range sdkData.AreaMapList { - for j := 0; j < len(groupRule.Rules); j++ { - faces = append(faces,putFaceToResult(groupRule.Rules[j], &areaMap)...) - } - } - } - // 閰嶄簡浜鸿劯鐨勭畻娉曟墠鎶婁汉鑴哥殑鏁版嵁鐢╁嚭鏉ユ墦鏍囩 - flag := false - for j := 0; j < len(groupRule.Rules); j++ { - if groupRule.Rules[j].SdkId == "812b674b-2375-4589-919a-5c1c3278a97e" || groupRule.Rules[j].SdkId == "812b674b-2375-4589-919a-5c1c3278a971" { - flag = true - } - } - if flag { - args.RuleResult["face"] = faces - } + // 鍐嶈繃鍏朵粬鏁版嵁 杩欐鐩存帴寰楀埌缁撴灉锛堢湡鎴栧亣锛� 杩囩洰鏍囨暟閲� for j := 0; j < len(groupRule.Rules); j++ { for _, sdkData := range args.Sdkdata { @@ -306,13 +288,28 @@ for _, va := range resultSplice { completeFormula = completeFormula + va.Result } + if strings.HasPrefix(completeFormula,"&&") || strings.HasPrefix(completeFormula,"||") || strings.HasPrefix(completeFormula,">=") || strings.HasPrefix(completeFormula,"<=") || strings.HasPrefix(completeFormula,"==") || strings.HasPrefix(completeFormula,"!=") ||strings.HasPrefix(completeFormula,">") || strings.HasPrefix(completeFormula,"<") { + // 浠ヨ繖浜涘紑澶寸殑鍩烘湰鏄仈鍔ㄤ换鍔� + if strings.HasPrefix(completeFormula,"&&") || strings.HasPrefix(completeFormula,"||") || strings.HasPrefix(completeFormula,">=") || strings.HasPrefix(completeFormula,"<=") || strings.HasPrefix(completeFormula,"==") || strings.HasPrefix(completeFormula,"!=") { + completeFormula = completeFormula[2:len(completeFormula)-1] + } + if strings.HasPrefix(completeFormula,">") || strings.HasPrefix(completeFormula,"<") { + completeFormula = completeFormula[1:len(completeFormula)-1] + } + expression, _ := govaluate.NewEvaluableExpression(completeFormula) + if strings.HasPrefix(completeFormula, "&&") || strings.HasPrefix(completeFormula, "||") { + panic("瑙勫垯鏈夎锛屽緱鍒扮殑鏁板鍏紡涓嶅彲瑙f瀽") + } + result, _ := expression.Evaluate(nil) // 寰楀埌鏁板鍏紡鐨勭粨鏋� + return result.(bool) + } if completeFormula != "" { log.Println("缁撴灉鍏紡-----------锛�", completeFormula) expression, _ := govaluate.NewEvaluableExpression(completeFormula) - if strings.HasPrefix(completeFormula,"&&") || strings.HasPrefix(completeFormula,"||"){ + if strings.HasPrefix(completeFormula, "&&") || strings.HasPrefix(completeFormula, "||") { panic("瑙勫垯鏈夎锛屽緱鍒扮殑鏁板鍏紡涓嶅彲瑙f瀽") } - result,_ := expression.Evaluate(nil) // 寰楀埌鏁板鍏紡鐨勭粨鏋� + result, _ := expression.Evaluate(nil) // 寰楀埌鏁板鍏紡鐨勭粨鏋� if !result.(bool) { // 缁欒繖甯ф暟鎹墦涓婅鍒欑粍鏍囩 //args.RuleResult = append(args.RuleResult, Result{TaskId: taskId, RuleGroupId: groupRule.GroupId}) @@ -321,8 +318,28 @@ timeEle.N = timeEle.InitN // 閲嶇疆瀹氭椂鍣� } } + log.Println("--------------------璧拌繖閲屼簡鍚�---------------") return false } else { + // 鏈�鍚庢垚鍔熸姤璀︽墠鎶婄鍚堟潯浠剁殑浜鸿劯鏁版嵁濉炶繘缁撴灉鏍囩閲� + faces := []Arg{} + for _, sdkData := range args.Sdkdata { + for _, areaMap := range sdkData.AreaMapList { + for j := 0; j < len(groupRule.Rules); j++ { + faces = append(faces, putFaceToResult(groupRule.Rules[j], &areaMap)...) + } + } + } + // 閰嶄簡浜鸿劯鐨勭畻娉曟墠鎶婁汉鑴哥殑鏁版嵁鐢╁嚭鏉ユ墦鏍囩 + flag11 := false + for j := 0; j < len(groupRule.Rules); j++ { + if groupRule.Rules[j].SdkId == "812b674b-2375-4589-919a-5c1c3278a97e" || groupRule.Rules[j].SdkId == "812b674b-2375-4589-919a-5c1c3278a971" { + flag11 = true + } + } + if flag11 { + args.RuleResult["face"] = faces + } // 鍘荤湅姹犲瓙閲屾槸鍚︽湁涓庢湰甯ф暟鎹湁鍏崇殑瀹氭椂鍣紝濡傛灉鏈夛紝鐪嬫鏃舵槸鍚﹁蛋鍒�0锛屾病鏈夋瀹氭椂鍣ㄦ垨鏈夊畾鏃跺櫒璧板埌0鐨勮瘽杩斿洖鎴愬姛鎶ヨ var flag bool = true for k, timeEle := range TimeEleList { @@ -339,17 +356,17 @@ sdkName := "" for j := 0; j < len(groupRule.Rules); j++ { for _, sdkData := range args.Sdkdata { - if groupRule.Rules[j].SdkId == sdkData.SdkId && sdkData.IsYolo && !strings.Contains(sdkName,sdkData.SdkName) { // 鍙褰晊olo绗﹀悎瑙勫垯鐨剆dk 鍚屾椂瑕侀伩鍏嶉噸澶嶆嫾鎺� + if groupRule.Rules[j].SdkId == sdkData.SdkId && sdkData.IsYolo && !strings.Contains(sdkName, sdkData.SdkName) { // 鍙褰晊olo绗﹀悎瑙勫垯鐨剆dk 鍚屾椂瑕侀伩鍏嶉噸澶嶆嫾鎺� sdkName = sdkData.SdkName + " " } } } if sdkName != "" { args.RuleResult["yolo"] = append(args.RuleResult["yolo"].([]Result), Result{taskId, sdkName, groupRule.GroupId, groupRule.AlarmLevel, groupRule.GroupText}) - log.Println("-------------------yolo缁撴灉鏍囩",args.RuleResult["yolo"].([]Result)) + log.Println("-------------------yolo缁撴灉鏍囩", args.RuleResult["yolo"].([]Result)) } if args.RuleResult["face"] != nil { - log.Println("-------------------face缁撴灉鏍囩",args.RuleResult["face"].([]Arg)) + log.Println("-------------------face缁撴灉鏍囩", args.RuleResult["face"].([]Arg)) } return true } else { @@ -363,7 +380,7 @@ func putFaceToResult(rule *protomsg.Rule, am *AreaMap) []Arg { faces := []Arg{} - if rule.SdkId == am.sdkId && rule.SdkId == "812b674b-2375-4589-919a-5c1c3278a97e" || rule.SdkId == "812b674b-2375-4589-919a-5c1c3278a971"{ + if rule.SdkId == am.sdkId && rule.SdkId == "812b674b-2375-4589-919a-5c1c3278a97e" || rule.SdkId == "812b674b-2375-4589-919a-5c1c3278a971" { if len(am.filterData) > 0 { for _, data := range am.filterData { faces = append(faces, data) @@ -392,7 +409,7 @@ // } for _, obj := range arg.Photo { - log.Println("------------------鐪嬬湅sdkData:",arg.SdkName,"鐨凱hoto鏁版嵁----------------", obj, "----椤轰究鐪嬬湅鍗犳瘮-----锛�", PgsInterPercent(areaPoints, obj.Rects, widthScale, heigthScale)) + 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++ @@ -448,7 +465,7 @@ // 鑱斿姩浠诲姟鐨勫鐞� func LinkTask(args *SdkDatas, groupRule *protomsg.GroupRule, taskId string) { // new涓�涓畾鏃跺櫒锛屽鏋滀互姝roupId涓烘爣蹇楃殑瀹氭椂鍣ㄤ笉瀛樺湪鐨勮瘽 - log.Println("------------------------------------------褰撳墠鏄仈鍔ㄤ换鍔★紝瑙勫垯鏄細",groupRule.GroupText) + log.Println("------------------------------------------褰撳墠鏄仈鍔ㄤ换鍔★紝瑙勫垯鏄細", groupRule.GroupText) var flag bool = true var timeEle = TimeElement{N: 3, InitN: 3, GroupId: groupRule.GroupId} for k, timeEle1 := range TimeEleList { @@ -484,11 +501,13 @@ for _, va := range timeEle.RuleResults { if va.CameraId == args.CameraId { va.Result = strconv.FormatBool(isOk) + log.Println("杩欎釜鎽勫儚鏈�--",args.CameraId,"--琚祴浜堜簡result",va.Result) } } // 鍒ゆ柇缁撴灉鏁扮粍鏄惁瀹屾弧(鍗宠璧嬪�煎畬姣�)鍙緱鍑烘姤璀︾粨鏋� var isPerfect = true for _, va := range timeEle.RuleResults { + log.Println("---------------------鐬呯瀰褰撳墠鏁扮粍________________锛�",*va) if va.Result == "" && va.RuleWithPre != "||" { isPerfect = false } @@ -501,7 +520,7 @@ for _, va := range timeEle.RuleResults { completeFormula = completeFormula + va.RuleWithPre + "" + va.Result } - log.Println("---------------------------鑱斿姩浠诲姟鐨勫叕寮�",completeFormula) + log.Println("---------------------------鑱斿姩浠诲姟鐨勫叕寮�", completeFormula) if completeFormula != "" { expression, _ := govaluate.NewEvaluableExpression(completeFormula) result, _ := expression.Evaluate(nil) // 寰楀埌鏁板鍏紡鐨勭粨鏋� @@ -510,17 +529,17 @@ sdkName := "" for j := 0; j < len(groupRule.Rules); j++ { for _, sdkData := range args.Sdkdata { - if groupRule.Rules[j].SdkId == sdkData.SdkId && sdkData.IsYolo && !strings.Contains(sdkName,sdkData.SdkName) { // 鍙褰晊olo绗﹀悎瑙勫垯鐨剆dk 鍚屾椂瑕侀伩鍏嶉噸澶嶆嫾鎺� + if groupRule.Rules[j].SdkId == sdkData.SdkId && sdkData.IsYolo && !strings.Contains(sdkName, sdkData.SdkName) { // 鍙褰晊olo绗﹀悎瑙勫垯鐨剆dk 鍚屾椂瑕侀伩鍏嶉噸澶嶆嫾鎺� sdkName = sdkData.SdkName + " " } } } if sdkName != "" { args.RuleResult["yolo"] = append(args.RuleResult["yolo"].([]Result), Result{taskId, sdkName, groupRule.GroupId, groupRule.AlarmLevel, groupRule.GroupText}) - log.Println("-------------------yolo缁撴灉鏍囩",args.RuleResult["yolo"].([]Result)) + log.Println("-------------------yolo缁撴灉鏍囩", args.RuleResult["yolo"].([]Result)) } if args.RuleResult["face"] != nil { - log.Println("-------------------face缁撴灉鏍囩",args.RuleResult["face"].([]Arg)) + log.Println("-------------------face缁撴灉鏍囩", args.RuleResult["face"].([]Arg)) } os.Exit(0) } @@ -598,13 +617,13 @@ var formula string if rule.SdkArgAlias == "score" { formula = strconv.FormatFloat(arg.Score, 'f', -1, 64) + " " + rule.Operator + " " + rule.SdkArgValue // 寰楀埌瀛楃涓插叕寮� - log.Println("褰撳墠鐩镐技搴﹀皬鍏紡锛�",formula) + log.Println("褰撳墠鐩镐技搴﹀皬鍏紡锛�", formula) } else if rule.SdkArgAlias == "proportion" { formula = strconv.FormatFloat(arg.Proportion, 'f', -1, 64) + " " + rule.Operator + " " + rule.SdkArgValue // 寰楀埌瀛楃涓插叕寮� - log.Println("褰撳墠鍗犳瘮灏忓叕寮忥細",formula) + log.Println("褰撳墠鍗犳瘮灏忓叕寮忥細", formula) } else { formula = strconv.FormatFloat(arg.Size, 'f', -1, 64) + " " + rule.Operator + " " + rule.SdkArgValue // 寰楀埌瀛楃涓插叕寮� - log.Println("褰撳墠灏哄灏忓叕寮忥細",formula) + log.Println("褰撳墠灏哄灏忓叕寮忥細", formula) } expression, _ := govaluate.NewEvaluableExpression(formula) // 寰楀埌鏁板鍏紡 result, _ := expression.Evaluate(nil) // 寰楀埌鏁板鍏紡鐨勭粨鏋� @@ -633,7 +652,7 @@ // 澶勭悊鐨勯兘鏄痽olo鏁版嵁 if rule.SdkId == am.sdkId && rule.PolygonId == am.areaId { // 棣栧厛杩欐潯瑙勫垯寰楁槸杩欎釜绠楁硶鐨勮鍒欙紝鍏舵瑙勫垯鎵�瀵瑰簲鐨勫尯鍩焛d瑕佽窡鍖哄煙鏁版嵁鐨刬d瀵圭殑涓� if rule.SdkArgAlias == "score" || rule.SdkArgAlias == "proportion" || rule.SdkArgAlias == "size" { // 鍒ゆ柇鐨勬槸鐩镐技鍊硷紝鍗犳瘮锛屽昂瀵哥瓑杩囨护鏉′欢锛屽鏋滃啀鏈夛紝杩樺彲浠ュ啀鍔� - log.Println("----------褰撳墠鏉′欢瑙勫垯锛�---------",rule) + log.Println("----------褰撳墠鏉′欢瑙勫垯锛�---------", rule) var args []Arg if rule.RuleWithPre == "&&" { args = am.filterData @@ -646,13 +665,13 @@ var formula string if rule.SdkArgAlias == "score" { formula = strconv.FormatFloat(arg.Score, 'f', -1, 64) + " " + rule.Operator + " " + rule.SdkArgValue // 寰楀埌瀛楃涓插叕寮� - log.Println("褰撳墠鐩镐技搴﹀皬鍏紡锛�",formula) + log.Println("褰撳墠鐩镐技搴﹀皬鍏紡锛�", formula) } else if rule.SdkArgAlias == "proportion" { formula = strconv.FormatFloat(arg.Proportion, 'f', -1, 64) + " " + rule.Operator + " " + rule.SdkArgValue // 寰楀埌瀛楃涓插叕寮� - log.Println("褰撳墠鍗犳瘮灏忓叕寮忥細",formula) + log.Println("褰撳墠鍗犳瘮灏忓叕寮忥細", formula) } else { formula = strconv.FormatFloat(arg.Size, 'f', -1, 64) + " " + rule.Operator + " " + rule.SdkArgValue // 寰楀埌瀛楃涓插叕寮� - log.Println("褰撳墠灏哄灏忓叕寮忥細",formula) + log.Println("褰撳墠灏哄灏忓叕寮忥細", formula) } expression, _ := govaluate.NewEvaluableExpression(formula) // 寰楀埌鏁板鍏紡 result, _ := expression.Evaluate(nil) // 寰楀埌鏁板鍏紡鐨勭粨鏋� @@ -753,20 +772,21 @@ return LittleRuleResult{} } func timeRuleResult(rule *protomsg.Rule, am *AreaMap) LittleRuleResult { - if rule.PolygonId == am.areaId && rule.SdkId == am.sdkId{ // 棣栧厛瑙勫垯鎵�瀵瑰簲鐨勫尯鍩焛d瑕佽窡鍖哄煙鏁版嵁鐨刬d瀵圭殑涓� + if rule.PolygonId == am.areaId && rule.SdkId == am.sdkId { // 棣栧厛瑙勫垯鎵�瀵瑰簲鐨勫尯鍩焛d瑕佽窡鍖哄煙鏁版嵁鐨刬d瀵圭殑涓� if rule.SdkArgAlias == "time_rule" { // 鍒ゆ柇鏄惁绗﹀悎鏃堕棿瑙勫垯 - log.Println("----------褰撳墠鏃堕棿瑙勫垯锛�---------",rule) + log.Println("----------褰撳墠鏃堕棿瑙勫垯锛�---------", rule) // 鏍规嵁鏀惧�煎瓧娈甸噷瀛樼殑鏃堕棿瑙勫垯鐨刬d鍘诲彟涓�涓〃閲屾煡闇�瑕佹瘮瀵圭殑鏃堕棿娈碉紙姣斿褰撳墠鏃堕棿鏄懆涓夛紝搴旀牴鎹尯鍩焛d鏌ュ嚭鍏跺懆涓夌殑鍑犱釜甯冮槻鏃堕棿娈碉紝鏁扮粍锛� //fmt.Println("鏃堕棿瑙勫垯鐨勬祴璇�") now := time.Now() index := getIndexOfWeek(now.Weekday().String()) timeList := GetTimeById(rule.SdkArgValue, index) - log.Println("褰撳ぉ鐨勬椂闂存闆嗗悎锛�----------",timeList) + log.Println("褰撳ぉ鐨勬椂闂存闆嗗悎锛�----------", timeList) //fmt.Println("浠庢暟鎹簱涓煡鍑虹殑鏃堕棿瑙勫垯锛�", timeList) // 鍒ゆ柇鍥剧墖鏁版嵁鐨勬椂闂存槸鍚︾鍚堝綋鍓嶈鍒� 鍦ㄤ竴涓嵆涓簍rue锛屽叏涓嶅湪涓篺alse - flag := "false" - for _, timeSlot := range timeList { - if rule.Operator == "satisfy" || rule.Operator == "=="{ // 婊¤冻鎵�閫夌殑鏃堕棿瑙勫垯 + + if rule.Operator == "satisfy" || rule.Operator == "==" { // 婊¤冻鎵�閫夌殑鏃堕棿瑙勫垯 + flag := "false" + for _, timeSlot := range timeList { formula := "'" + timeSlot.Start + "'" + "<" + "'" + am.time + "'" expression, _ := govaluate.NewEvaluableExpression(formula) // 寰楀埌鏁板鍏紡 result, _ := expression.Evaluate(nil) // 寰楀埌鏁板鍏紡鐨勭粨鏋� @@ -780,23 +800,29 @@ break } } - if rule.Operator == "unsatisfy" || rule.Operator == "!="{ // 涓嶆弧瓒虫墍閫夌殑鏃堕棿瑙勫垯 - formula := "'"+timeSlot.Start + "'" + " < " + "'" + am.time + "'" - log.Println("-----------------鏃堕棿瑙勫垯涓嶆弧瓒崇殑鍏紡start锛�",formula) + return LittleRuleResult{am.sdkName, rule.RuleWithPre + "" + flag, rule.Sort} + } + + if rule.Operator == "unsatisfy" || rule.Operator == "!=" { // 涓嶆弧瓒虫墍閫夌殑鏃堕棿瑙勫垯 + flag := "true" + for _, timeSlot := range timeList { + formula := "'" + timeSlot.Start + "'" + " < " + "'" + am.time + "'" + log.Println("-----------------鏃堕棿瑙勫垯涓嶆弧瓒崇殑鍏紡start锛�", formula) expression, _ := govaluate.NewEvaluableExpression(formula) // 寰楀埌鏁板鍏紡 result, _ := expression.Evaluate(nil) // 寰楀埌鏁板鍏紡鐨勭粨鏋� - formula1 := "'"+timeSlot.End +"'"+ " > " +"'" + am.time+ "'" - log.Println("-----------------鏃堕棿瑙勫垯涓嶆弧瓒崇殑鍏紡end锛�",formula1) + formula1 := "'" + timeSlot.End + "'" + " > " + "'" + am.time + "'" + log.Println("-----------------鏃堕棿瑙勫垯涓嶆弧瓒崇殑鍏紡end锛�", formula1) expression1, _ := govaluate.NewEvaluableExpression(formula1) // 寰楀埌鏁板鍏紡 result1, _ := expression1.Evaluate(nil) // 寰楀埌鏁板鍏紡鐨勭粨鏋� if result.(bool) && result1.(bool) { - flag = "true" + flag = "false" break } } + return LittleRuleResult{am.sdkName, rule.RuleWithPre + "" + flag, rule.Sort} } - return LittleRuleResult{am.sdkName, rule.RuleWithPre + "" + flag, rule.Sort} + } } return LittleRuleResult{} @@ -832,7 +858,7 @@ // cameraTimeRule = rule // } //} - _,cameraTimeRule := cache.GetTimeRuleById(id) + _, cameraTimeRule := cache.GetTimeRuleById(id) var timeRangeList []day json.Unmarshal([]byte(cameraTimeRule.TimeRule), &timeRangeList) for _, timerange := range timeRangeList { -- Gitblit v1.8.0