---
panlei
2019-07-09 55527c5190bad92f40d4c77ef031470def27dfbb
ruleserver/ruleToformula.go
@@ -2,7 +2,6 @@
import (
   "encoding/json"
   "fmt"
   "ruleprocess/cache"
   "ruleprocess/logger"
   "sort"
@@ -11,6 +10,7 @@
   "time"
   bigCache "basic.com/pubsub/cache.git"
   "basic.com/pubsub/cache.git/esutil"
   "basic.com/pubsub/protomsg.git"
   "github.com/knetic/govaluate"
)
@@ -233,19 +233,23 @@
   }
}
func Compare(args *SdkDatas, groupRule *protomsg.GroupRule) {
   compareFlag := false
   compareFlag := 0
   tableIds := ""
   // 看看是否有只配人脸比对算法但没有配对比库的规则,如果有,则比对对象为全部底库
   for j := 0; j < len(groupRule.Rules); j++ {
      if groupRule.Rules[j].SdkId == "812b674b-2375-4589-919a-5c1c3278a972" { // 配了人脸比对
         if groupRule.Rules[j].SdkArgAlias == "compareBase" { // 配了比对的底库
            compareFlag = true
         if groupRule.Rules[j].SdkArgAlias == "compareBase" && groupRule.Rules[j].SdkArgValue != "" { // 配了比对底库的参数但没有配全部底库
            compareFlag = 2
            tableIds = groupRule.Rules[j].SdkArgValue + "," // 最后会多一个tableId,切出来的数组取len-1就可以
         }
         if groupRule.Rules[j].SdkArgAlias == "compareBase" && groupRule.Rules[j].SdkArgValue == "" { // 配的参数是比对全部底库
            compareFlag = 1
         }
      }
   }
   if compareFlag {
      logger.Info("配置了对比底库参数")
   } else {
   if compareFlag == 0 {
      logger.Info("没有配置对比底库参数")
      return
   }
   for j := 0; j < len(groupRule.Rules); j++ {
      // 只有是人脸对比并且配置的参数是对比底库才走(若配的对比阈值则不走)
@@ -256,17 +260,40 @@
                  // 拿区域中每个人脸特征值去对比,填充其liker
                  if groupRule.Rules[j].PolygonId == areaMap.areaId {
                     for _, arg := range areaMap.args {
                        bytes := bigCache.Getdbpersonmsg("", arg.Feature, true)
                        var m map[string]float32
                        err1 := json.Unmarshal(bytes, &m)
                        if err1 != nil {
                           logger.Error("getBaseInfo解压错误", err1)
                        if compareFlag == 1 {
                           bytes := bigCache.Getdbpersonmsg("", arg.Feature, true)
                           var m map[string]float32
                           err1 := json.Unmarshal(bytes, &m)
                           if err1 != nil {
                              logger.Error("getBaseInfo解压错误", err1)
                           }
                           for key, val := range m {
                              baseinfo,err1 := esutil.Dbpersoninfosbyid(key)
                              if err1 != nil {
                                 logger.Error("查询底库人员信息出错",err1)
                              }
                              baseinfo.CompareScore = val
                              arg.Liker = append(arg.Liker, &baseinfo)
                           }
                        }
                        for key, val := range m {
                           fmt.Println(key)
                           baseinfo := protomsg.Baseinfo{}
                           baseinfo.CompareScore = val
                           arg.Liker = append(arg.Liker, &baseinfo)
                        if compareFlag == 2 {
                           array := strings.Split(tableIds, ",")
                           for i := 0; i < len(array)-1; i++ {
                              bytes := bigCache.Getdbpersonmsg(array[i], arg.Feature, true)
                              var m map[string]float32
                              err1 := json.Unmarshal(bytes, &m)
                              if err1 != nil {
                                 logger.Error("getBaseInfo解压错误", err1)
                              }
                              for key, val := range m {
                                 baseinfo, err1 := esutil.Dbpersoninfosbyid(key)
                                 if err1 != nil {
                                    logger.Error("查询底库人员信息出错",err1)
                                 }
                                 baseinfo.CompareScore = val
                                 arg.Liker = append(arg.Liker, &baseinfo)
                              }
                           }
                        }
                        logger.Info("-------------------成功给liker赋值:", arg.Liker)
                     }
@@ -299,7 +326,7 @@
         sdkName := sdk.SdkName
         if ipcId == sdkData.IpcId {
            logger.Info("当前走的规则的算法是--:",sdkName,"---")
            logger.Info("当前走的规则的算法是--:", sdkName, "---")
            for _, areaMap := range sdkData.AreaMapList {
               ruleResult := filterRule(groupRule.Rules[j], &areaMap)
               if ruleResult.Result != "" {