zhangzengfei
2024-10-19 9d4762cee4c0762dde9ee8712c3460c6f986f876
修复V2
2个文件已修改
196 ■■■■ 已修改文件
model/model.go 105 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service/server.go 91 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
model/model.go
@@ -19,12 +19,117 @@
    DataSource:   "smart-ai",
}
type BaseCompareInfo struct {
    BwType       string  `json:"bwType"`
    TableId      string  `json:"tableId"`
    TableName    string  `json:"tableName"`
    CompareScore float32 `json:"compareScore"`
    OriginScore  float32 `json:"originScore"`
    TargetId     string  `json:"targetId"`
    TargetPicUrl string  `json:"targetPicUrl"`
    MonitorLevel string  `json:"monitorLevel"`
    Content      string  `json:"content"`
    DbLabel      string  `json:"labels"`
}
type AlarmRule struct {
    RuleId     string `json:"ruleId"`
    RuleText   string `json:"ruleText"`
    AlarmLevel string `json:"alarmLevel"`
}
type Point struct {
    X int32 `json:"x"`
    Y int32 `json:"y"`
}
type Points struct {
    TopLeft     Point `json:"topLeft"`
    BottomRight Point `json:"bottomRight"`
}
type TargetInfo struct {
    TargetId       string  `json:"targetId"`
    TargetScore    float64 `json:"targetScore"`
    FrontFaceScore float64 `json:"frontFaceScore"`
    ImgQuality     float64 `json:"imgQuality"`
    FaceQuality    float64 `json:"faceQuality"`
    TargetType     string  `json:"targetType"`
    Feature        string  `json:"-"`
    PicSmUrl       string  `json:"picSmUrl"`
    TargetLocation Points  `json:"targetLocation"`
    Attribute      string  `json:"attribute"`
}
type PicWidHei struct {
    PicW int `json:"picW"`
    PicH int `json:"picH"`
}
type pushDataInfoV2 struct {
    CameraId     string   `json:"cameraId"`
    CameraFloor  string   `json:"cameraFloor"` //摄像机楼层
    Direction    string   `json:"direction"`   // 摄像机运行方向 up or down
    PicDate      string   `json:"picDate"`
    PicId        string   `json:"picId"`
    DataSource   string   `json:"dataSource"`
    PicMaxImages [][]byte `json:"picMaxImages"`
    PicSmImages  [][]byte `json:"picSmImages"`
}
type TaskResultInfoV2 struct {
    Id              string           `json:"id"`
    AnalyServerId   string           `json:"analyServerId"`
    AnalyServerName string           `json:"analyServerName"`
    AnalyServerIp   string           `json:"analyServerIp"`
    ClusterId       string           `json:"clusterId"`
    CameraId        string           `json:"cameraId"`
    CameraAddr      string           `json:"cameraAddr"` // 摄像机地址
    CameraName      string           `json:"cameraName"` // 摄像机名称
    CommunityId     string           `json:"communityId"`
    CommunityName   string           `json:"communityName"`
    CameraLocation  CameraLocation   `json:"cameraLocation"`
    DocumentNumber  string           `json:"documentNumber"` // 档案编号
    OrgId           string           `json:"orgId"`          //机构名称
    OrgName         string           `json:"orgName"`        //机构名称
    PicDate         string           `json:"picDate"`
    PicId           string           `json:"picId"`
    PicMaxUrl       string           `json:"picMaxUrl"`
    PicWH           PicWidHei        `json:"picWH"`
    TaskId          string           `json:"taskId"`
    TaskName        string           `json:"taskName"`
    SdkName         string           `json:"sdkName"`
    Content         string           `json:"content"`
    ShowLabels      string           `json:"showLabels"`
    OtherLabels     string           `json:"otherLabels"`
    VideoUrl        string           `json:"videoUrl"`
    IsAlarm         bool             `json:"isAlarm"`
    IsAckAlarm      bool             `json:"isAckAlarm"`
    IsDelete        bool             `json:"isDelete"`
    IsKeyPerson     bool             `json:"isKeyPerson"`
    KeyPersonType   []string         `json:"keyPersonType"`
    AlarmRules      []AlarmRule      `json:"alarmRules"`
    BaseInfo        *BaseCompareInfo `json:"baseInfo"`
    TargetInfo      TargetInfo       `json:"targetInfo"`
    DataSource      string           `json:"dataSource"` // 数据来源:摄像机, 数据栈
}
type CameraLocation struct {
    Building  string `json:"building"`
    Unit      string `json:"unit"`
    Pos       string `json:"pos"`
    Floor     string `json:"floor"`
    Direction string `json:"direction"`
}
func (cl *CameraLocation) Join() string {
    return cl.Building + cl.Unit + cl.Pos + cl.Floor
}
// es视频分析的数据结构
type ESInfoV2 struct {
    TaskResultInfoV2
    Version    string `json:"version"`
    UpdateTime string `json:"updateTime"`
    LikeDate   string `json:"likeDate"`
}
service/server.go
@@ -30,7 +30,7 @@
}
func GetTotal() (total int, err error) {
    url := "http://" + config.Options.EsUrl + "/ai_ocean/_search"
    url := "http://" + config.Options.EsUrl + "/ai_face_ocean/_search"
    queryDSL := `{
    "size": "1",
    "query": {
@@ -69,7 +69,7 @@
func GetData() (interface{}, error) {
    //fmt.Println(config.Options.EsUrl)
    //fmt.Println(config.Options.ServerUrl)
    url := "http://" + config.Options.EsUrl + "/ai_ocean/_search"
    url := "http://" + config.Options.EsUrl + "/ai_face_ocean/_search"
    queryDSL := `{
    "size": "1",
    "query": {
@@ -91,8 +91,7 @@
        }
    ]
}`
    //fmt.Println(url)
    //fmt.Println(queryDSL)
    buf, err := esutil.EsReq("POST", url, []byte(queryDSL))
    if err != nil {
        return nil, err
@@ -104,74 +103,52 @@
    if len(source) == 0 {
        return nil, nil
    }
    picMaxImages := make([][]byte, 0) // 存储图片数据的数组
    if source[0]["picMaxUrl"].([]interface{}) != nil {
        //picMaxUrls := source[0]["picMaxUrl"].([]interface{})
        if len(source[0]["picMaxUrl"].([]interface{})) > 0 {
            for _, picMaxUrl := range source[0]["picMaxUrl"].([]interface{}) {
                picMaxImageData, err := GetImageData("http://" + picMaxUrl.(string))
                if err != nil {
                    logger.Warn("获取大图数据失败:", err.Error())
                    continue
                }
                picMaxImages = append(picMaxImages, picMaxImageData)
            }
    b, _ := json.Marshal(source[0])
    var esInfoV2 model.ESInfoV2
    err = json.Unmarshal(b, &esInfoV2)
    if err != nil {
        return nil, err
    }
    picMaxImages := make([]byte, 0) // 存储图片数据的数组
    if esInfoV2.PicMaxUrl != "" {
        picMaxImages, err = GetImageData("http://" + esInfoV2.PicMaxUrl)
        if err != nil {
            logger.Warn("获取大图数据失败:", err.Error())
        }
    }
    if len(picMaxImages) == 0 {
        return nil, errors.New("获取大图失败, id:" + source[0]["id"].(string))
        return nil, errors.New("获取大图失败, id:" + esInfoV2.TargetInfo.PicSmUrl)
    }
    //fmt.Println("图片数据数组大小:", len(picMaxImages))
    picSmImages := make([][]byte, 0) // 存储图片数据的数组
    if source[0]["targetInfo"].(interface{}) != nil {
        for _, target := range source[0]["targetInfo"].([]interface{}) {
            info := target.(map[string]interface{})
            picSmUrl := info["picSmUrl"].(string)
            if picSmUrl == "" {
                continue
            }
            picSmImageData, err := GetImageData("http://" + picSmUrl)
            if err != nil {
                fmt.Println("获取小图数据失败:", err)
                continue
            }
            picSmImages = append(picSmImages, picSmImageData)
    picSmImages := make([]byte, 0) // 存储图片数据的数组
    if esInfoV2.TargetInfo.PicSmUrl != "" {
        picSmImages, err = GetImageData("http://" + esInfoV2.TargetInfo.PicSmUrl)
        if err != nil {
            fmt.Println("获取小图数据失败:", err)
        }
    }
    if len(picSmImages) == 0 {
        return nil, errors.New("获取小图数据失败, id:" + source[0]["id"].(string))
        return nil, errors.New("获取小图数据失败, id:" + esInfoV2.Id)
    }
    // 上报机构名称
    //source[0]["orgName"] = config.Options.OrgName
    cameraAddr := source[0]["cameraAddr"].(string)
    if len(cameraAddr) > 6 {
        if cameraAddr[len(cameraAddr)-3:] == "楼" {
            cameraAddr = cameraAddr[:len(cameraAddr)-3] + "F"
        }
        if cameraAddr[len(cameraAddr)-3:] == "层" {
            cameraAddr = cameraAddr[:len(cameraAddr)-3] + "F"
        }
    }
    if strings.HasSuffix(cameraAddr, "F") {
        model.PushDataInfoV2.CameraFloor = extractFloor(cameraAddr)
    } else {
        model.PushDataInfoV2.CameraFloor = ""
    }
    model.PushDataInfoV2.CameraId = source[0]["cameraId"].(string)
    model.PushDataInfoV2.PicDate = source[0]["picDate"].(string)
    model.PushDataInfoV2.PicId = source[0]["id"].(string)
    model.PushDataInfoV2.PicMaxImages = picMaxImages
    model.PushDataInfoV2.PicSmImages = picSmImages
    var pushData = model.PushDataInfoV2
    pushData.CameraId = esInfoV2.CameraId
    pushData.PicDate = esInfoV2.PicDate
    pushData.PicId = esInfoV2.PicId
    pushData.CameraFloor = esInfoV2.CameraLocation.Floor
    pushData.Direction = esInfoV2.CameraLocation.Direction
    pushData.PicMaxImages = append(pushData.PicMaxImages, picMaxImages)
    pushData.PicSmImages = append(pushData.PicSmImages, picSmImages)
    //fmt.Println(model.PushDataInfo.SourceData)
    return model.PushDataInfoV2, nil
    return pushData, nil
}
func extractFloor(s string) string {