package models
|
|
import (
|
"strings"
|
"time"
|
|
"basic.com/pubsub/protomsg.git"
|
"basic.com/valib/logger.git"
|
)
|
|
const (
|
RecordNotFound = "record not found"
|
)
|
|
type Sdk struct {
|
Id string `gorm:"column:id;primary_key" json:"id"`
|
IpcId string `gorm:"column:ipc_id" json:"ipc_id"` //真正的算法id(对于yolo来说,只创建一个ipc)
|
SdkType string `gorm:"column:sdk_type" json:"sdk_type"` //人脸检测:FaceDetect,人脸提取:FaceExtract,人脸比对:FaceCompare,行为:Yolo
|
SdkName string `gorm:"column:sdk_name" json:"sdk_name" example:"人脸检测"` //算法名称
|
Icon string `gorm:"column:icon" json:"icon"` //算法图标
|
Url string `gorm:"column:url" json:"url" example:"http://ip:port/govideo/sdk/1"` //算法下载地址
|
CreateTime string `gorm:"column:create_time" json:"create_time"`
|
CreateBy string `gorm:"column:create_by" json:"create_by"`
|
UpdateTime string `gorm:"column:update_time" json:"update_time"`
|
Enable bool `gorm:"column:enable;default:1" json:"enable"` //是否启用
|
DelFlag int `gorm:"column:del_flag;default:0" json:"del_flag"` //逻辑删除
|
IconBlob string `gorm:"column:iconBlob;type:text;" json:"iconBlob"` //图片
|
IconBlob2 string `gorm:"column:iconBlob2;type:text;" json:"iconBlob2"` //第二套图片
|
Version string `gorm:"column:version;type:varchar(50);default:'1.0.0';" json:"version"` //版本号
|
EnTrack bool `gorm:"column:enTrack;default:1" json:"enTrack"` //是否开启跟踪
|
ArgDef string `gorm:"column:argDef" json:"argDef"` //算法参数默认配置
|
RuleSo string `gorm:"column:rule_so" json:"rule_so"` //规则用的so名称
|
|
AuthState3rd int `gorm:"column:authState3rd;default:0" json:"authState3rd"` //第三方授权状态 0:未授权,1:已授权,2:已过期
|
MacCode3rd string `gorm:"column:macCode3rd" json:"macCode3rd"` //第三方生成的机器码
|
License3rd string `gorm:"column:license3rd" json:"license3rd"` //第三方授权码
|
Expire3rd string `gorm:"column:expire3rd" json:"expire3rd"` //过期时间
|
|
BaseVersion string `gorm:"column:baseVersion" json:"baseVersion"` //基础算法版本
|
Price float32 `json:"price"` //商城端价格
|
ActivateCode string `gorm:"column:activateCode" json:"activateCode"` // 激活码
|
}
|
|
const (
|
AuthState3rd_UnAuth = 0
|
AuthState3rd_Authed = 1
|
AuthState3rd_expired = 2
|
)
|
|
func (sdk Sdk) Copy2ProtoSdk() protomsg.Sdk {
|
return protomsg.Sdk{
|
Id: sdk.Id,
|
IpcId: sdk.IpcId,
|
SdkType: sdk.SdkType,
|
SdkName: sdk.SdkName,
|
Icon: sdk.Icon,
|
Url: sdk.Url,
|
CreateTime: sdk.CreateTime,
|
UpdateTime: sdk.UpdateTime,
|
CreateBy: sdk.CreateBy,
|
Enable: sdk.Enable,
|
DelFlag: int32(sdk.DelFlag),
|
IconBlob: sdk.IconBlob,
|
IconBlob2: sdk.IconBlob2,
|
Version: sdk.Version,
|
EnTrack: sdk.EnTrack,
|
ArgDef: sdk.ArgDef,
|
RuleSo: sdk.RuleSo,
|
}
|
}
|
|
func (Sdk) TableName() string {
|
return "sdks"
|
}
|
|
// 根据算法id查找算法信息
|
func (sdk *Sdk) SelectById(id string) (rows int64, err error) {
|
dbSelect := db.Table("sdks").Where("id=?", id).First(&sdk)
|
if dbSelect.Error != nil && dbSelect.Error.Error() != RecordNotFound {
|
return 0, dbSelect.Error
|
}
|
return dbSelect.RowsAffected, nil
|
}
|
|
func (sdk *Sdk) SelectBySdkType(sdkType string) (exist bool, model Sdk) {
|
dbSelect := db.Table("sdks").Where("sdk_type=?", sdkType).First(&model)
|
if dbSelect.Error != nil || dbSelect.RowsAffected == 0 {
|
return false, model
|
}
|
return dbSelect.RecordNotFound(), model
|
}
|
|
// 查找所有算法
|
func (sdk *Sdk) FindAll(name string) (rows []Sdk, err error) {
|
mutex.Lock()
|
defer mutex.Unlock()
|
|
t := time.Now()
|
defer func() {
|
logger.Debugf("FindAll costTime=%v, name=%v", time.Since(t), name)
|
}()
|
|
if name != "" {
|
if err := db.Table("sdks").Where("sdk_name like ?", name).Order("sdk_name asc").Find(&rows).Error; err != nil {
|
logger.Debug("err: ", err)
|
return nil, err
|
}
|
return rows, nil
|
} else {
|
if err := db.Table("sdks").Order("sdk_name asc").Find(&rows).Error; err != nil {
|
logger.Debug("err: ", err)
|
return nil, err
|
}
|
return rows, nil
|
}
|
}
|
|
func (sdk *Sdk) FindAllMap() map[string]Sdk {
|
m := make(map[string]Sdk)
|
rows, e := sdk.FindAll("")
|
if e == nil && rows != nil {
|
for _, r := range rows {
|
m[r.Id] = r
|
}
|
}
|
return m
|
}
|
|
// 根据任务id查找所有的算法
|
func (sdk *Sdk) FindByTaskId(taskId string) (sdks []Sdk, err error) {
|
if err := db.Raw("select * from sdks where id in (select sdkid from task_sdks where taskid=? order by sort asc)", taskId).Scan(&sdks).Error; err != nil {
|
return sdks, err
|
}
|
|
return sdks, nil
|
}
|
|
// 算法插入
|
func (sdk *Sdk) Insert() (err error) {
|
tx := db.Table("sdks").Begin()
|
if tx.Error != nil {
|
return tx.Error
|
}
|
|
if err := tx.Create(&sdk).Error; err != nil {
|
tx.Rollback()
|
return err
|
}
|
|
err = tx.Commit().Error
|
if err == nil {
|
return nil
|
}
|
return err
|
}
|
|
// 算法更新
|
func (sdk *Sdk) Update() (result bool, err error) {
|
|
dbSdk := Sdk{}
|
|
rows, err := dbSdk.SelectById(sdk.Id)
|
if err != nil {
|
return false, err
|
}
|
if rows == 0 {
|
return false, err //数据库这条记录不存在
|
}
|
if err := db.Table(sdk.TableName()).Where("id=?", sdk.Id).Update(&sdk).Error; err != nil {
|
return false, err
|
}
|
|
return true, nil
|
}
|
|
func (sdk *Sdk) UpdateCode(sdkId, code string) (err error) {
|
if err := db.Table(sdk.TableName()).Where("id=?", sdkId).Update("activateCode", code).Error; err != nil {
|
return err
|
}
|
return nil
|
}
|
|
func (sdk *Sdk) DeleteById(id string) (result bool) {
|
//删除算法需要关联删除所有与算法相关的任务信息
|
updateResult := db.Exec("delete from sdks where id=?", id)
|
if updateResult.Error != nil || updateResult.RowsAffected == 0 {
|
return false
|
}
|
|
return true
|
}
|
|
// 根据参数范围获取算法参数列表
|
func (sdk *Sdk) GetSdkArgs(sdkId string, scope string) []SdkArg {
|
var sdkArgEntity SdkArgEntity
|
argArr := make([]SdkArg, 0)
|
if sdkArgs, err := sdkArgEntity.FindBySdk(sdkId); err == nil {
|
for _, argEntity := range sdkArgs {
|
if strings.Contains(argEntity.Scope, scope) {
|
argArr = append(argArr, SdkArg{
|
Alias: argEntity.Alias,
|
Name: argEntity.Name,
|
Type: argEntity.Type,
|
Must: argEntity.Must,
|
Range: argEntity.Range,
|
DefaultValue: argEntity.DefaultValue,
|
DefaultOperator: argEntity.DefaultOperator,
|
Sort: argEntity.Sort,
|
Unit: argEntity.Unit,
|
ArgType: argEntity.ArgType,
|
})
|
}
|
}
|
}
|
return argArr
|
}
|
|
func (sdk *Sdk) Update3rdLicense(sdkId string, lce3rd string, state3rd int) bool {
|
updateResult := db.Exec("update "+sdk.TableName()+" set license3rd=?,authState3rd=? where id=?", lce3rd, state3rd, sdkId)
|
if updateResult.Error != nil || updateResult.RowsAffected == 0 {
|
return false
|
}
|
return true
|
}
|