package service
|
|
import (
|
"basic.com/pubsub/protomsg.git"
|
"basic.com/valib/bhomeclient.git"
|
"basic.com/valib/bhomedbapi.git"
|
"basic.com/valib/logger.git"
|
"encoding/json"
|
"errors"
|
"vamicro/stack-service/models"
|
"vamicro/stack-service/vo"
|
)
|
|
type FileAnalysisService struct {
|
Bk bhomeclient.Broker
|
}
|
|
const (
|
Sort_Up = 1
|
Sort_Down = 2
|
)
|
|
func (fas *FileAnalysisService) FindAllByPage(fileName string, fType int, page int, size int, stackId string) (result vo.PageResult) {
|
|
var model models.FileAnalysis
|
result.Total = model.Total(fileName, fType, stackId)
|
var fileList = make([]vo.FileIfRule, 0)
|
|
if result.Total > 0 {
|
arr, _ := model.FindAllByPage(fileName, fType, page, size, stackId)
|
if arr != nil {
|
var crApi bhomedbapi.CameraRuleApi
|
for _, f := range arr {
|
file := vo.FileIfRule{}
|
file.FileAnalysis = f
|
if crApi.ExistRunningTask(f.Id) {
|
file.HasRule = true
|
} else {
|
file.HasRule = false
|
}
|
fileList = append(fileList, file)
|
}
|
}
|
}
|
result.DataList = fileList
|
return result
|
}
|
|
func (fas *FileAnalysisService) GetAnalysisFiles() (fileList []models.FileAnalysis, err error) {
|
var model models.FileAnalysis
|
var crApi bhomedbapi.CameraRuleApi
|
arr, e := model.FindAnalysisFiles()
|
if e == nil && arr != nil {
|
for _, f := range arr {
|
if crApi.ExistRunningTask(f.Id) {
|
fileList = append(fileList, f)
|
}
|
}
|
return fileList, nil
|
}
|
return nil, e
|
}
|
|
func (fas *FileAnalysisService) Add(fa models.FileAnalysis) bool {
|
if fa.Add() {
|
dbMsg := protomsg.DbChangeMessage{
|
Table: protomsg.TableChanged_T_File,
|
Id: fa.Id,
|
Action: protomsg.DbAction_Insert,
|
}
|
pb, _ := json.Marshal(dbMsg)
|
fas.Bk.Publish(ProcName, pb)
|
return true
|
}
|
return false
|
}
|
|
func (fas *FileAnalysisService) Rename(id, name string) bool {
|
var fa models.FileAnalysis
|
if fa.Rename(id, name) {
|
dbMsg := protomsg.DbChangeMessage{
|
Table: protomsg.TableChanged_T_File,
|
Id: id,
|
Action: protomsg.DbAction_Update,
|
}
|
pb, _ := json.Marshal(dbMsg)
|
fas.Bk.Publish(ProcName, pb)
|
|
return true
|
}
|
return false
|
}
|
|
func (fas *FileAnalysisService) Move(id, stackId string) bool {
|
var fa models.FileAnalysis
|
if fa.Move(id, stackId) {
|
dbMsg := protomsg.DbChangeMessage{
|
Table: protomsg.TableChanged_T_File,
|
Id: id,
|
Action: protomsg.DbAction_Update,
|
}
|
pb, _ := json.Marshal(dbMsg)
|
fas.Bk.Publish(ProcName, pb)
|
|
return true
|
}
|
return false
|
}
|
|
func (fas *FileAnalysisService) UpdateProgress(ids []string, progress int) bool {
|
var file models.FileAnalysis
|
return file.UpdateProgress(ids, progress)
|
}
|
|
func (fas *FileAnalysisService) UpdateStatus(ids []string, status int) bool {
|
for _, id := range ids {
|
var tmpFile models.FileAnalysis
|
_, err := tmpFile.SelectById(id)
|
if err != nil {
|
logger.Error("fail to tmpFile.SelectById(id)", id)
|
continue
|
}
|
logger.Debug("updateStatus", id)
|
flag := false
|
if status == 0 && tmpFile.Status == bhomeclient.File_Status_Wait {
|
if tmpFile.UpdateStatus(id, bhomeclient.File_Status_Pause) {
|
flag = true
|
}
|
} else if status == 1 && tmpFile.Status != bhomeclient.File_Status_Doing {
|
if tmpFile.UpdateStatus(id, bhomeclient.File_Status_Wait) {
|
flag = true
|
}
|
}
|
if flag {
|
dbMsg := protomsg.DbChangeMessage{
|
Table: protomsg.TableChanged_T_File,
|
Id: id,
|
Action: protomsg.DbAction_Update,
|
}
|
pb, _ := json.Marshal(dbMsg)
|
fas.Bk.Publish(ProcName, pb)
|
}
|
}
|
return true
|
}
|
|
func (fas *FileAnalysisService) Delete(arg *vo.IdArrVo) bool {
|
var file models.FileAnalysis
|
logger.Debug("argIds", arg.Ids, "argIdsLength", len(arg.Ids))
|
for _, id := range arg.Ids {
|
//正在处理的文件不允许删除
|
//rows, err := file.SelectById(id)
|
//if err == nil && rows > 0 {
|
// //if file.Status == bhomeclient.File_Status_Doing {
|
// // continue
|
// //} else {
|
// //}
|
//}
|
file.UpdateStatus(id, -1)
|
}
|
return true
|
}
|
|
func (fas *FileAnalysisService) SortFile(sortArg *vo.SortVo) bool {
|
var err error
|
tx := models.GetDB().Begin()
|
defer func() {
|
if err != nil && tx != nil {
|
tx.Rollback()
|
}
|
}()
|
|
var file models.FileAnalysis
|
rows, _ := file.SelectById(sortArg.Id)
|
if rows > 0 {
|
if sortArg.Direct == Sort_Up {
|
if file.Sort > 1 {
|
preSort := file.Sort - 1
|
var preFile models.FileAnalysis
|
pr, _ := preFile.FindBySort(preSort)
|
if pr > 0 {
|
if preFile.Status == bhomeclient.File_Status_Doing {
|
err = errors.New("cannot be pre by doing file")
|
return false
|
}
|
err = tx.Exec("update file_analysis set sort=? where id=?", preSort, file.Id).Error
|
if err != nil {
|
return false
|
}
|
err = tx.Exec("update file_analysis set sort=? where id=?", file.Sort, preFile.Id).Error
|
if err != nil {
|
return false
|
}
|
}
|
}
|
} else if sortArg.Direct == Sort_Down {
|
if file.Status == bhomeclient.File_Status_Doing {
|
err = errors.New("doing file cannot be sort down")
|
return false
|
}
|
var maxTmp models.FileAnalysis
|
mr, _ := maxTmp.GetMaxSortFile(file.StackId)
|
if mr > 0 {
|
if maxTmp.Id != sortArg.Id {
|
nextSort := file.Sort + 1
|
var nextFile models.FileAnalysis
|
nr, _ := nextFile.FindBySort(nextSort)
|
if nr > 0 {
|
err = tx.Exec("update file_analysis set sort=? where id=?", nextSort, file.Id).Error
|
if err != nil {
|
return false
|
}
|
err = tx.Exec("update file_analysis set sort=? where id=?", file.Sort, nextFile.Id).Error
|
if err != nil {
|
return false
|
}
|
}
|
}
|
}
|
}
|
}
|
tx.Commit()
|
|
return true
|
}
|
|
func (fas *FileAnalysisService) FindByStackId(stackId string, typ int, name string, page int, size int) (result vo.PageResult) {
|
var faE models.FileAnalysis
|
result.Total = faE.Total(name, typ, stackId)
|
if result.Total > 0 {
|
arr, _ := faE.FindByStackId(stackId, typ, name, page, size)
|
result.DataList = arr
|
} else {
|
result.DataList = []models.FileAnalysis{}
|
}
|
|
return result
|
}
|