panlei
2019-08-19 788358c03d90f6371fa7a7d238850e2cb114a95f
对于或规则的一些改进
1个文件已修改
59 ■■■■■ 已修改文件
ruleserver/ruleToformula.go 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruleserver/ruleToformula.go
@@ -545,24 +545,46 @@
        if rule.PolygonId == am.areaId { // 算法和区域都得对的上
            if rule.SdkId == "812b674b-2375-4589-919a-5c1c3278a972" && rule.SdkArgAlias != "time_rule"{
                //logger.Debug("当前小规则是:",rule)
                flag := "false"
                // 把没有相似者的人脸从filterData中删除
                for index := 0; index < len(am.filterData); {
                    // 将达不到阈值的相似者从相似者数组中删除
                    logger.Info("看看相似者人数:",len(am.filterData[index].Liker))
                    if len(am.filterData[index].Liker) == 0 {
                        // Go 语言中切片删除元素的本质是:以被删除元素为分界点,将前后两个部分的内存重新连接起来。不用怀疑,数组删除元素就这么坑爹
                        am.filterData = append(am.filterData[:index], am.filterData[index+1:]...)
                    } else {
                        index++
                if rule.RuleWithPre == "||" {
                    // 如果是或,从原始数据过滤并直接添加倒过滤数据后面
                    flag := "false"
                    // 把没有相似者的人脸从filterData中删除
                    for index := 0; index < len(am.args); {
                        // 将达不到阈值的相似者从相似者数组中删除
                        logger.Info("看看相似者人数:",len(am.args[index].Liker))
                        if len(am.args[index].Liker) == 0 {
                            // Go 语言中切片删除元素的本质是:以被删除元素为分界点,将前后两个部分的内存重新连接起来。不用怀疑,数组删除元素就这么坑爹
                            am.args = append(am.args[:index], am.args[index+1:]...)
                        } else {
                            index++
                        }
                    }
                    if len(am.args) > 0 {
                        flag = "true"
                    }
                    logger.Info("---------人脸比对符合条件的数量为:",len(am.args))
                    am.filterData = append(am.filterData,am.args...)
                    return LittleRuleResult{am.sdkName, rule.RuleWithPre + "" + flag, rule.Sort}
                } else {
                    //logger.Debug("当前小规则是:",rule)
                    flag := "false"
                    // 把没有相似者的人脸从filterData中删除
                    for index := 0; index < len(am.filterData); {
                        // 将达不到阈值的相似者从相似者数组中删除
                        logger.Info("看看相似者人数:",len(am.filterData[index].Liker))
                        if len(am.filterData[index].Liker) == 0 {
                            // Go 语言中切片删除元素的本质是:以被删除元素为分界点,将前后两个部分的内存重新连接起来。不用怀疑,数组删除元素就这么坑爹
                            am.filterData = append(am.filterData[:index], am.filterData[index+1:]...)
                        } else {
                            index++
                        }
                    }
                    if len(am.filterData) > 0 {
                        flag = "true"
                    }
                    logger.Info("---------人脸比对符合条件的数量为:",len(am.filterData))
                    return LittleRuleResult{am.sdkName, rule.RuleWithPre + "" + flag, rule.Sort}
                }
                if len(am.filterData) > 0 {
                    flag = "true"
                }
                logger.Info("---------人脸比对符合条件的数量为:",len(am.filterData))
                return LittleRuleResult{am.sdkName, rule.RuleWithPre + "" + flag, rule.Sort}
            }
            if rule.SdkId == "812b674b-2375-4589-919a-5c1c3278a97e" { // 人脸检测
                //logger.Debug("当前小规则是:",rule)
@@ -573,13 +595,14 @@
                        var args []*Arg
                        if rule.RuleWithPre == "&&" {
                            args = am.filterData
                            // 先清空过滤后的数据,再往里塞本次过滤后的数据
                            am.filterData = am.filterData[0:0]
                            //logger.Info("过滤后的args的长度为:",len(args))
                        } else {
                            args = am.args
                            //不清空之前的过滤数据,继续塞
                            //logger.Info("没过滤的args的长度为:",len(args))
                        }
                        // 先清空过滤后的数据,再往里塞本次过滤后的数据
                        am.filterData = am.filterData[0:0]
                        //logger.Info("-----------------------人脸过滤的args里的数量:", len(args))
                        for _, arg := range args {
                            var formula string