| | |
| | | } |
| | | am.TargetNum = len(am.FilterData) // 把符合条件的目标数量更新到targetNum字段 |
| | | if am.TargetNum > 0 { |
| | | return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "true", rule.Sort} |
| | | return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "true", rule.Sort,am.FilterData} |
| | | } else { |
| | | return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "false", rule.Sort} |
| | | return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "false", rule.Sort,am.FilterData} |
| | | } |
| | | |
| | | } else if rule.SdkArgAlias == "" { |
| | | if am.TargetNum > 0 { |
| | | return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "true", rule.Sort} |
| | | return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "true", rule.Sort,am.FilterData} |
| | | } else { |
| | | return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "false", rule.Sort} |
| | | return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "false", rule.Sort,am.FilterData} |
| | | } |
| | | } |
| | | return structure.LittleRuleResult{} |
| | |
| | | //logger.Info("当前小规则是:---------", rule) |
| | | //logger.Info("得出结果阶段", "比较的规则是:", rule) |
| | | if rule.Operator == "" { |
| | | return structure.LittleRuleResult{am.SdkName, strconv.Itoa(am.TargetNum) + "" + rule.RuleWithPre, rule.Sort} // 如果后面不跟操作符就直接返回数量 比如要跟下一个区域比较数量的就直接返回本区域的数量 |
| | | return structure.LittleRuleResult{am.SdkName, strconv.Itoa(am.TargetNum) + "" + rule.RuleWithPre, rule.Sort,am.FilterData} // 如果后面不跟操作符就直接返回数量 比如要跟下一个区域比较数量的就直接返回本区域的数量 |
| | | } |
| | | //args := am.targetNum targetNum 已成所有目标的总数量,这里只算yolo的 |
| | | var num int = len(am.FilterData) |
| | |
| | | //logger.Info("车辆数量公式",formula) |
| | | expression, _ := govaluate.NewEvaluableExpression(formula) // 得到数学公式 |
| | | result, _ := expression.Evaluate(nil) // 得到数学公式的结果 |
| | | return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + " " + strconv.FormatBool(result.(bool)), rule.Sort} |
| | | return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + " " + strconv.FormatBool(result.(bool)), rule.Sort,am.FilterData} |
| | | // 加上关于算法的判断条件,不能只有关于规则的,有的算法本身就是一个规则,如个体静止,靠右行,所以,拿到当前子规则的sdkid来判断是否是那些特殊的规则 |
| | | } |
| | |
| | | flag = "true" |
| | | } |
| | | //logger.Info("---------人脸比对符合条件的数量为:",len(am.FilterData)) |
| | | return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + flag, rule.Sort} |
| | | return structure.LittleRuleResult{SdkName:am.SdkName, Result:rule.RuleWithPre + "" + flag, Sort:rule.Sort} |
| | | } |
| | | } |
| | | if rule.SdkId == "812b674b-2375-4589-919a-5c1c3278a97e" { // 人脸检测 |
| | |
| | | am.TargetNum = len(am.FilterData) // 把符合条件的目标数量更新到targetNum字段 |
| | | if am.TargetNum > 0 { |
| | | logger.Info("!!!!!!!!!人脸检测成功") |
| | | return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "true", rule.Sort} |
| | | return structure.LittleRuleResult{SdkName:am.SdkName, Result:rule.RuleWithPre + "" + "true", Sort:rule.Sort,Target:am.FilterData} |
| | | } else { |
| | | return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "false", rule.Sort} |
| | | return structure.LittleRuleResult{SdkName:am.SdkName, Result:rule.RuleWithPre + "" + "false", Sort:rule.Sort} |
| | | } |
| | | } |
| | | } else if rule.SdkArgAlias == "" { // 什么参数都不配的情况 |
| | | if am.TargetNum > 0 { |
| | | return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "true", rule.Sort} |
| | | return structure.LittleRuleResult{SdkName:am.SdkName, Result:rule.RuleWithPre + "" + "true", Sort:rule.Sort,Target:am.FilterData} |
| | | } else { |
| | | return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "false", rule.Sort} |
| | | return structure.LittleRuleResult{SdkName:am.SdkName, Result:rule.RuleWithPre + "" + "false", Sort:rule.Sort} |
| | | } |
| | | } |
| | | } |
| | |
| | | flag = "true" |
| | | } |
| | | //logger.Info("---------人脸比对符合条件的数量为:",len(am.FilterData)) |
| | | return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + flag, rule.Sort} |
| | | return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + flag, rule.Sort,am.FilterData} |
| | | } |
| | | } |
| | | if rule.SdkId == "812b674b-2375-4589-919a-5c1c3278a97e" { // 人脸检测 |
| | |
| | | //logger.Info("过完条件后的目标数量为:",am.TargetNum) |
| | | if am.TargetNum > 0 { |
| | | //logger.Info("!!!!!!!!!人脸检测成功") |
| | | return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "true", rule.Sort} |
| | | return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "true", rule.Sort,am.FilterData} |
| | | } else { |
| | | return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "false", rule.Sort} |
| | | return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "false", rule.Sort,am.FilterData} |
| | | } |
| | | } |
| | | } else if rule.SdkArgAlias == "" { // 什么参数都不配的情况 |
| | | if am.TargetNum > 0 { |
| | | return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "true", rule.Sort} |
| | | return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "true", rule.Sort,am.FilterData} |
| | | } else { |
| | | return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "false", rule.Sort} |
| | | return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "false", rule.Sort,am.FilterData} |
| | | } |
| | | } |
| | | } |
| | |
| | | } |
| | | am.TargetNum = len(am.FilterData) // 把符合条件的目标数量更新到targetNum字段 |
| | | if am.TargetNum > 0 { |
| | | return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "true", rule.Sort} |
| | | return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "true", rule.Sort,am.FilterData} |
| | | } else { |
| | | return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "false", rule.Sort} |
| | | return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "false", rule.Sort,am.FilterData} |
| | | } |
| | | |
| | | } else if rule.SdkArgAlias == "" { |
| | | if am.TargetNum > 0 { |
| | | return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "true", rule.Sort} |
| | | return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "true", rule.Sort,am.FilterData} |
| | | } else { |
| | | return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "false", rule.Sort} |
| | | return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "false", rule.Sort,am.FilterData} |
| | | } |
| | | } |
| | | return structure.LittleRuleResult{} |
| | |
| | | for _, areaMap := range sdkData.AreaMapList { |
| | | ruleResult := CallSo(sdk.Id, groupRule.Rules[j], areaMap,lable,args,message) |
| | | logger.Info("前置连接符:",groupRule.Rules[j]) |
| | | if groupRule.Rules[j].RuleWithPre == "⊇" { |
| | | if groupRule.Rules[j].RuleWithPre == "⊇" && len(ruleResult.Target) > 0 { |
| | | assembleDta(args,groupRule.Rules[j-1],groupRule.Rules[j]) |
| | | // 把当前小规则结果置空 |
| | | ruleResult = structure.LittleRuleResult{} |
| | |
| | | break |
| | | } |
| | | } |
| | | return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + flag, rule.Sort} |
| | | return structure.LittleRuleResult{SdkName:am.SdkName, Result:rule.RuleWithPre + "" + flag, Sort:rule.Sort} |
| | | } |
| | | |
| | | if rule.Operator == "unsatisfy" || rule.Operator == "!=" { // 不满足所选的时间规则 |
| | |
| | | break |
| | | } |
| | | } |
| | | return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + flag, rule.Sort} |
| | | return structure.LittleRuleResult{SdkName:am.SdkName, Result:rule.RuleWithPre + "" + flag, Sort:rule.Sort} |
| | | } |
| | | |
| | | } |
| | |
| | | for _, sdkData := range args.Sdkdata { |
| | | for _, areaMap := range sdkData.AreaMapList { |
| | | logger.Info("sdkId和区域id碰撞:",areaMap.SdkId,rule2.SdkId,"---",areaMap.AreaId,rule2.PolygonId) |
| | | if areaMap.SdkId == rule2.SdkId && areaMap.AreaId == rule2.PolygonId { |
| | | if areaMap.AreaId == rule2.PolygonId { |
| | | area = *areaMap |
| | | goto second |
| | | } |
| | |
| | | } |
| | | am.TargetNum = len(am.FilterData) // 把符合条件的目标数量更新到targetNum字段 |
| | | if am.TargetNum > 0 { |
| | | return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "true", rule.Sort} |
| | | return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "true", rule.Sort,am.FilterData} |
| | | } else { |
| | | return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "false", rule.Sort} |
| | | return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "false", rule.Sort,am.FilterData} |
| | | } |
| | | |
| | | } else if rule.SdkArgAlias == "" { |
| | | if am.TargetNum > 0 { |
| | | return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "true", rule.Sort} |
| | | return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "true", rule.Sort,am.FilterData} |
| | | } else { |
| | | return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "false", rule.Sort} |
| | | return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "false", rule.Sort,am.FilterData} |
| | | } |
| | | } |
| | | return structure.LittleRuleResult{} |
| | |
| | | // return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "false", rule.Sort} |
| | | //} |
| | | // 无论有没有相似者都要返回true |
| | | return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "true", rule.Sort} |
| | | return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "true", rule.Sort,nil} |
| | | } |
| | | |
| | | func Push(){ |
| | |
| | | for { |
| | | select { |
| | | case data := <- sender: |
| | | logger.Debug("推送数据:",len(data)) |
| | | trackMap := make(map[string]interface{}) |
| | | _ = json.Unmarshal(data, &trackMap) |
| | | logger.Info("推送数据:",trackMap) |
| | | if err = sock.Send(data); err != nil { |
| | | logger.Error("推送socket发送数据失败: %s", err.Error()) |
| | | } |
| | |
| | | } |
| | | am.TargetNum = len(am.FilterData) // 把符合条件的目标数量更新到targetNum字段 |
| | | if am.TargetNum > 0 { |
| | | return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "true", rule.Sort} |
| | | return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "true", rule.Sort,am.FilterData} |
| | | } else { |
| | | return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "false", rule.Sort} |
| | | return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "false", rule.Sort,am.FilterData} |
| | | } |
| | | |
| | | } else if rule.SdkArgAlias == "" { |
| | | if am.TargetNum > 0 { |
| | | return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "true", rule.Sort} |
| | | return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "true", rule.Sort,am.FilterData} |
| | | } else { |
| | | return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "false", rule.Sort} |
| | | return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "false", rule.Sort,am.FilterData} |
| | | } |
| | | } |
| | | return structure.LittleRuleResult{} |
| | |
| | | //logger.Info("当前小规则是:---------", rule) |
| | | //logger.Info("得出结果阶段", "比较的规则是:", rule) |
| | | if rule.Operator == "" { |
| | | return structure.LittleRuleResult{am.SdkName, strconv.Itoa(am.TargetNum) + "" + rule.RuleWithPre, rule.Sort} // 如果后面不跟操作符就直接返回数量 比如要跟下一个区域比较数量的就直接返回本区域的数量 |
| | | return structure.LittleRuleResult{am.SdkName, strconv.Itoa(am.TargetNum) + "" + rule.RuleWithPre, rule.Sort,am.FilterData} // 如果后面不跟操作符就直接返回数量 比如要跟下一个区域比较数量的就直接返回本区域的数量 |
| | | } |
| | | //args := am.targetNum targetNum 已成所有目标的总数量,这里只算yolo的 |
| | | var num int = 0 |
| | |
| | | formula := strconv.Itoa(num) + " " + rule.Operator + " " + rule.SdkArgValue |
| | | expression, _ := govaluate.NewEvaluableExpression(formula) // 得到数学公式 |
| | | result, _ := expression.Evaluate(nil) // 得到数学公式的结果 |
| | | return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + " " + strconv.FormatBool(result.(bool)), rule.Sort} |
| | | return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + " " + strconv.FormatBool(result.(bool)), rule.Sort,am.FilterData} |
| | | // 加上关于算法的判断条件,不能只有关于规则的,有的算法本身就是一个规则,如个体静止,靠右行,所以,拿到当前子规则的sdkid来判断是否是那些特殊的规则 |
| | | } |
| | |
| | | type LittleRuleResult struct { |
| | | SdkName string // 记录下此结果是哪个sdk的结果 |
| | | Result string // 已包含了前置连接符 |
| | | Sort int32 |
| | | Sort int32 // 规则序号 |
| | | Target []*Arg |
| | | } |
| | | |
| | | type TimeRange struct { |