From fd31206bcb8b084720291a53c986db771d8f5975 Mon Sep 17 00:00:00 2001
From: qixiaoning <jony.kee@outlook.com>
Date: 星期四, 18 九月 2025 13:58:16 +0800
Subject: [PATCH] 抓拍预警记录查询修改,备份还原接口问题修复,应用安装接口调试

---
 camera-service/controllers/camera.go     |   68 +++++++++
 system-service/sys/sysinfo.go            |   13 +
 version-control/main.go                  |    4 
 camera-common/models/Record.go           |  150 ++++++++++++++++++++
 version-control/controller/controller.go |   10 +
 version-control/service/backup.go        |   28 ++-
 system-service/controllers/voice.go      |    7 
 appcenter-service/service/SdkInstall.go  |   22 ++
 api-gateway/main.go                      |   51 +++++++
 system-service/main.go                   |    4 
 appcenter-service/main.go                |   40 +++--
 camera-service/main.go                   |    2 
 12 files changed, 346 insertions(+), 53 deletions(-)

diff --git a/api-gateway/main.go b/api-gateway/main.go
index 03b2a1a..6da26ea 100644
--- a/api-gateway/main.go
+++ b/api-gateway/main.go
@@ -2,6 +2,7 @@
 
 import (
 	"context"
+	"encoding/json"
 	"flag"
 
 	"basic.com/valib/logc.git"
@@ -21,11 +22,15 @@
 	"vamicro/api-gateway/traces"
 	"vamicro/config"
 	"vamicro/extend/util"
+
+	bh "basic.com/valib/c_bhomebus.git/api/bhsgo"
+	bhmsg "basic.com/valib/c_bhomebus.git/proto/source/bhome_msg"
 )
 
 var (
-	procName = service.ProcName
-	env      = flag.String("e", "pro", "")
+	procName         = service.ProcName
+	env              = flag.String("e", "pro", "")
+	VaSystemLogTopic = "VaSystemLogSaveTopic"
 )
 
 // func init() {
@@ -53,6 +58,17 @@
 
 	ctx, cancel := context.WithCancel(context.Background())
 
+	defer func() {
+		logInfo2 := logc.VaSystemLog{
+			HostName: "localhost",
+			ProcName: "smartai",
+			ProcID:   os.Getpid(),
+			Level:    logc.LevelInfo,
+			Info:     "smartai鍋滄",
+		}
+		LogDecoderInfo(ctx, logInfo2)
+	}()
+
 	q := make(chan os.Signal, 1)
 	signal.Notify(q, os.Interrupt, os.Kill, syscall.SIGTERM)
 	signal.Ignore(syscall.SIGPIPE)
@@ -65,6 +81,18 @@
 		})
 		auth.Oauth2Init()
 		util.AuthCheck(ctx) //鎺堟潈妫�鏌�
+
+		//璁板綍鏃ュ織
+		logInfo := logc.VaSystemLog{
+			HostName: "localhost",
+			ProcName: "smartai",
+			ProcID:   os.Getpid(),
+			Level:    logc.LevelInfo,
+			Info:     "smartai鍚姩",
+		}
+
+		LogDecoderInfo(ctx, logInfo)
+
 		go func() {
 			r := gin.Default()
 			r.Use(auth.AuthHandler())
@@ -84,3 +112,22 @@
 		logger.Debug("client is nil")
 	}
 }
+
+// 淇濆瓨绯荤粺鏃ュ織
+func LogDecoderInfo(ctx context.Context, logInfo logc.VaSystemLog) {
+
+	logger.Debug("start LogDecoderInfo")
+
+	go func() {
+
+		logData, _ := json.Marshal(logInfo)
+		pub := bhmsg.MsgPublish{
+			Topic: []byte(VaSystemLogTopic),
+			Data:  logData,
+		}
+		if !bh.Publish(&pub, 1000) {
+			logger.Error("LogDecoderInfo %s failed\n", VaSystemLogTopic)
+		}
+
+	}()
+}
diff --git a/appcenter-service/main.go b/appcenter-service/main.go
index 2cf2c2d..9c99824 100644
--- a/appcenter-service/main.go
+++ b/appcenter-service/main.go
@@ -1,10 +1,6 @@
 package main
 
 import (
-	"basic.com/valib/bhomeclient.git"
-	"basic.com/valib/bhomedbapi.git"
-	"basic.com/valib/logger.git"
-	"basic.com/valib/version.git"
 	"context"
 	"flag"
 	"net/http"
@@ -17,14 +13,19 @@
 	"vamicro/appcenter-service/service"
 	"vamicro/config"
 	versionControlS "vamicro/version-control/service"
+
+	"basic.com/valib/bhomeclient.git"
+	"basic.com/valib/bhomedbapi.git"
+	"basic.com/valib/logger.git"
+	vaversion "basic.com/valib/version.git"
 )
 
 var (
 	procName = service.ProcName
-	proc = &bhomeclient.ProcInfo{
+	proc     = &bhomeclient.ProcInfo{
 		Name: procName, //杩涚▼鍚嶇О
-		ID: procName, //杩涚▼id
-		Info: "", //杩涚▼鐨勬弿杩颁俊鎭紝鐢ㄤ簬鍖哄垎鍚屼竴杩涚▼鍚嶇О涓嬪涓繘绋�
+		ID:   procName, //杩涚▼id
+		Info: "",       //杩涚▼鐨勬弿杩颁俊鎭紝鐢ㄤ簬鍖哄垎鍚屼竴杩涚▼鍚嶇О涓嬪涓繘绋�
 	}
 	env = flag.String("e", "pro", "")
 )
@@ -35,29 +36,29 @@
 
 	config.Init(*env)
 	// 鏃ュ織鍒濆鍖�
-	var logFile = config.LogConf.Path + "vamicro-"+procName+".log"
+	var logFile = config.LogConf.Path + "vamicro-" + procName + ".log"
 	logger.InitLogger(logFile, config.LogConf.Level, config.LogConf.MaxSize, config.LogConf.MaxBackups, config.LogConf.MaxAge)
 	logger.Info("log init success !")
 }
 
-func main(){
+func main() {
 	models.Init()
 	defer models.CloseDB()
 
 	ctx, cancel := context.WithCancel(context.Background())
-	fm,pubTopics := initFuncMap()
-	var reg = &bhomeclient.RegisterInfo {
-		Proc: *proc,
-		Channel: nil,
+	fm, pubTopics := initFuncMap()
+	var reg = &bhomeclient.RegisterInfo{
+		Proc:     *proc,
+		Channel:  nil,
 		PubTopic: pubTopics,
-		SubTopic:  []string{versionControlS.SysUpdateConfigTopic},
+		SubTopic: []string{versionControlS.SysUpdateConfigTopic},
 	}
 
 	q := make(chan os.Signal, 1)
 	signal.Notify(q, os.Interrupt, os.Kill, syscall.SIGTERM)
 
 	ms, err := bhomeclient.NewMicroNode(ctx, q, config.Server.AnalyServerId, reg, logger.Debug)
-	if err !=nil {
+	if err != nil {
 		return
 	}
 
@@ -67,7 +68,7 @@
 	go ms.StartServer(fm)
 	go handleSubMsg(ctx, ms)
 	go service.SelfUpdateStart(ctx) //鑷姩鏇存柊
-	go service.NoticeTick(ctx)//鏇存柊鎻愰啋
+	go service.NoticeTick(ctx)      //鏇存柊鎻愰啋
 	// pprof 鐢ㄤ簬鍒嗘瀽鎬ц兘
 	go func() {
 		logger.Info(http.ListenAndServe("0.0.0.0:7073", nil))
@@ -80,7 +81,8 @@
 }
 
 const urlPrefix = "/data/api-v"
-func initFuncMap() (map[string]bhomeclient.MicroFunc,[]string) {
+
+func initFuncMap() (map[string]bhomeclient.MicroFunc, []string) {
 	funcMap := make(map[string]bhomeclient.MicroFunc)
 	sc := new(controllers.SdkController)
 	sa := new(controllers.SdkArgController)
@@ -113,7 +115,7 @@
 	funcMap[urlPrefix+"/app/upgrade/notice/delay"] = ac.DelayNotice
 
 	var pubTopics []string
-	for key,_ := range funcMap {
+	for key, _ := range funcMap {
 		pubTopics = append(pubTopics, key)
 	}
 	return funcMap, pubTopics
@@ -129,4 +131,4 @@
 			service.PersistentWrapper(string(msg.Topic), msg.Data)
 		}
 	}
-}
\ No newline at end of file
+}
diff --git a/appcenter-service/service/SdkInstall.go b/appcenter-service/service/SdkInstall.go
index a4262e3..1efe61c 100644
--- a/appcenter-service/service/SdkInstall.go
+++ b/appcenter-service/service/SdkInstall.go
@@ -1,10 +1,6 @@
 package service
 
 import (
-	"basic.com/valib/bhomeclient.git"
-	"basic.com/valib/bhomedbapi.git"
-	"basic.com/valib/licence.git"
-	"basic.com/valib/logger.git"
 	"encoding/json"
 	"errors"
 	"fmt"
@@ -19,6 +15,11 @@
 	"vamicro/appcenter-service/vo"
 	"vamicro/config"
 	"vamicro/extend/util"
+
+	"basic.com/valib/bhomeclient.git"
+	"basic.com/valib/bhomedbapi.git"
+	"basic.com/valib/licence.git"
+	"basic.com/valib/logger.git"
 )
 
 type SdkInstallService struct {
@@ -410,8 +411,16 @@
 
 				installFile := path.Join(unPackPath, "install.sh")
 				if util.Exists(installFile) {
+					logger.Debug("寮�濮嬫墽琛岃剼鏈�:" + installFile)
 					// 鍒囨崲鍒板綋鍓嶈繍琛岀洰褰�
-					os.Chdir(unPackPath)
+					err1 := os.Chmod(installFile, 0755)
+					if err1 != nil {
+						logger.Debug("淇敼鏉冮檺澶辫触:" + err1.Error())
+					}
+					err2 := os.Chdir(unPackPath)
+					if err2 != nil {
+						logger.Debug("淇敼鏉冮檺澶辫触:" + err2.Error())
+					}
 					b, err := ExecCmd(installFile)
 					if err != nil {
 						return false, err
@@ -642,7 +651,8 @@
 			var appDefArr []models.App
 			if err = json.Unmarshal(defB, &appDefArr); err == nil {
 				for _, ap := range appDefArr {
-					if SaveApp(ap) {
+					//淇濆瓨澶辫触鎶ラ敊
+					if !SaveApp(ap) {
 						insErr = errors.New("娉ㄥ唽搴旂敤澶辫触锛屽簲鐢╥d:" + ap.Id + "")
 						return insErr
 					} else {
diff --git a/camera-common/models/Record.go b/camera-common/models/Record.go
index 5ff2d9f..b950b7a 100644
--- a/camera-common/models/Record.go
+++ b/camera-common/models/Record.go
@@ -4,11 +4,14 @@
 	"context"
 	"fmt"
 	"math"
+	"os"
+	"path/filepath"
 	"sort"
 	"strconv"
 	"strings"
 	"time"
 
+	"basic.com/valib/logger.git"
 	"github.com/milvus-io/milvus-sdk-go/v2/entity"
 )
 
@@ -47,6 +50,7 @@
 	IsWarning          int64                     `json:"is_warning"`
 	ZhDescClass        string                    `json:"zh_desc_class"`
 	TaskName           string                    `json:"task_name"`
+	WarnTaskName       string                    `json:"warn_task_name"`
 	EventLevelName     string                    `json:"event_level_name"`
 	DetectNum          int64                     `json:"detect_num"`
 	Suggestion         string                    `json:"suggestion"`
@@ -127,8 +131,9 @@
 }
 
 type TaskOption struct {
-	TaskId   int64  `db:"task_id" json:"taskId"`
-	TaskName string `db:"task_name" json:"taskName"`
+	TaskId     int64  `db:"task_id" json:"taskId"`
+	TaskName   string `db:"task_name" json:"taskName"`
+	EventLevel int64  `db:"event_level" json:"eventLevel"`
 }
 
 type CheckOption struct {
@@ -187,6 +192,136 @@
 	Warning  int64    `json:"warning`
 	Page     int64    `json:"page"`
 	PageSize int64    `json:"pageSize"`
+}
+
+// 鏃堕棿娈�
+type TimeRange struct {
+	StartTime string `json:"startTime"`
+	EndTime   string `json:"endTime"`
+}
+
+// 鍒犻櫎鏃ュ織
+func DeleteRecord(collectionName string, filterExpr string) (int, error) {
+	dataOp := &DataOperator{client: dbClient}
+	deletedFiles, err := dataOp.DelRecord(collectionName, filterExpr)
+	return deletedFiles, err
+}
+
+// 娓呯悊鏃ュ織
+func (do *DataOperator) DelRecord(collectionName string, filterExpr string) (int, error) {
+	ctx := context.Background()
+	queryResult, err := do.client.client.Query(
+		ctx,
+		collectionName,
+		[]string{}, // 鎵�鏈夊垎鍖�
+		filterExpr,
+		[]string{"id", "image_path", "video_path", "image_desc_path"}, // 杩斿洖鎵�鏈夊瓧娈�
+		// client.WithLimit(pageSize),
+		// client.WithOffset(offset),
+	)
+
+	// 2. 鎻愬彇ID鍜屾枃浠惰矾寰�
+	var ids []int64
+	var imgPaths []string
+	var videoPaths []string
+	var imgDesPaths []string
+	if len(queryResult) == 0 {
+		return 0, nil
+	}
+	count := queryResult[0].Len()
+	for i := 0; i < count; i++ {
+		for _, field := range queryResult {
+			switch field.Name() {
+			case "id":
+				IdColumn := field.(*entity.ColumnInt64).Data()
+				if len(IdColumn) > 0 {
+					id := IdColumn[i]
+					ids = append(ids, id)
+				}
+			case "image_path":
+				ImagePathColumn := field.(*entity.ColumnVarChar).Data()
+				if len(ImagePathColumn) > 0 {
+					imagePath := ImagePathColumn[i]
+					imgPaths = append(imgPaths, imagePath)
+				}
+			case "image_desc_path":
+				ImageDesPathColumn := field.(*entity.ColumnVarChar).Data()
+				if len(ImageDesPathColumn) > 0 {
+					imageDesPath := ImageDesPathColumn[i]
+					imgDesPaths = append(imgDesPaths, imageDesPath)
+				}
+			case "video_path":
+				VideoPathColumn := field.(*entity.ColumnVarChar).Data()
+				if len(VideoPathColumn) > 0 {
+					VideoPath := VideoPathColumn[i]
+					videoPaths = append(videoPaths, VideoPath)
+				}
+
+			}
+		}
+	}
+
+	if len(ids) > 0 {
+		idField := entity.NewColumnInt64("id", ids)
+		err = do.client.client.DeleteByPks(ctx, collectionName, "", idField)
+		if err != nil {
+			return 0, fmt.Errorf("failed to delete from Milvus: %v", err)
+		}
+		err = do.client.client.DeleteByPks(ctx, "smartrag", "", idField)
+		if err != nil {
+			return 0, fmt.Errorf("failed to delete from Milvus: %v", err)
+		}
+	}
+
+	// 鍥剧墖鍒犻櫎鏂囦欢
+	deletedFiles := 0
+	for _, path := range imgPaths {
+		if err := do.deleteFile(path); err != nil {
+			logger.Debug("failed to delete file " + path + " " + err.Error())
+		} else {
+			deletedFiles++
+		}
+	}
+	//鍒犻櫎鎻忚堪鍥剧墖
+	for _, path := range imgDesPaths {
+		if err := do.deleteFile(path); err != nil {
+			logger.Debug("failed to delete file " + path + " " + err.Error())
+		} else {
+			deletedFiles++
+		}
+	}
+
+	//鍒犻櫎瑙嗛鏂囦欢
+	for _, path := range videoPaths {
+		if err := do.deleteFile(path); err != nil {
+			logger.Debug("failed to delete file " + path + " " + err.Error())
+		} else {
+			deletedFiles++
+		}
+	}
+
+	return deletedFiles, err
+}
+
+func (do *DataOperator) deleteFile(relativePath string) error {
+	fullPath := relativePath
+
+	// 瀹夊叏妫�鏌ワ紝闃叉璺緞閬嶅巻鏀诲嚮
+	if !isSafePath(fullPath) {
+		return fmt.Errorf("invalid file path")
+	}
+
+	if _, err := os.Stat(fullPath); os.IsNotExist(err) {
+		return fmt.Errorf("file does not exist")
+	}
+
+	return os.Remove(fullPath)
+}
+
+// isSafePath 妫�鏌ヨ矾寰勬槸鍚﹀畨鍏紝闃叉璺緞閬嶅巻鏀诲嚮
+func isSafePath(targetPath string) bool {
+	rel := targetPath
+	return rel != ".." && rel[:2] != ".."+string(filepath.Separator)
 }
 
 // 鏍规嵁鍒嗛〉鍙栨暟鎹�
@@ -280,6 +415,11 @@
 				if len(TNColumn) > 0 {
 					record.TaskName = TNColumn[i]
 				}
+			case "warn_task_id":
+				WarnColumn := field.(*entity.ColumnVarChar).Data()
+				if len(WarnColumn) > 0 {
+					record.WarnTaskName = WarnColumn[i]
+				}
 			case "event_level_name":
 				EVColumn := field.(*entity.ColumnVarChar).Data()
 				if len(EVColumn) > 0 {
@@ -353,7 +493,7 @@
 		filterExpr,
 		[]string{"rule_id", "task_id", "is_waning", "zh_desc_class", "task_name", "event_level_name", "detect_num",
 			"event_level_id", "video_point_id", "video_point_name", "detect_id", "image_path",
-			"video_path", "detect_time", "knowledge_id", "risk_description", "suggestion", "id", "is_desc"}, // 杩斿洖鎵�鏈夊瓧娈�
+			"video_path", "detect_time", "knowledge_id", "risk_description", "suggestion", "id", "is_desc", "warn_task_id"}, // 杩斿洖鎵�鏈夊瓧娈�
 		// client.WithLimit(pageSize),
 		// client.WithOffset(offset),
 	)
@@ -422,8 +562,8 @@
 		placeholders[i] = "?"
 		args[i] = id
 	}
-	sqlStr := `select task_id,task_name from mal_smart_task where task_id in (` + strings.Join(placeholders, ",") + `)`
-	if err := db.Raw(sqlStr).Scan(&items).Error; err != nil {
+	sqlStr := `select task_id,task_name,event_level from mal_smart_task where task_id in (` + strings.Join(placeholders, ",") + `)`
+	if err := db.Raw(sqlStr, args...).Scan(&items).Error; err != nil {
 		return nil, err
 	}
 	return
diff --git a/camera-service/controllers/camera.go b/camera-service/controllers/camera.go
index c71d8f0..e90ed77 100644
--- a/camera-service/controllers/camera.go
+++ b/camera-service/controllers/camera.go
@@ -1037,6 +1037,31 @@
 }
 
 /**
+ *  鍒犻櫎璁板綍
+ */
+func (cc CameraController) DelRecord(h *bhomeclient.WrapperHandler, c *bhomeclient.Request) *bhomeclient.Reply {
+	filter := " id > 0 "
+	info := models.TimeRange{}
+	if err := c.BindJSON(&info); err != nil {
+		return &bhomeclient.Reply{Success: false, Msg: "鍙傛暟鏈夎"}
+	}
+	startTime := info.StartTime
+	endTime := info.EndTime
+	if len(startTime) > 0 && len(endTime) > 0 {
+		filter += fmt.Sprintf(" and detect_time > '%s'", startTime)
+		filter += fmt.Sprintf(" and detect_time < '%s'", endTime)
+		deleteRecord, err := models.DeleteRecord("smartobject", filter)
+		if err != nil {
+			return &bhomeclient.Reply{Success: false, Msg: "鍒犻櫎澶辫触" + err.Error(), Data: nil}
+		} else {
+			return &bhomeclient.Reply{Success: true, Msg: "鍒犻櫎鎴愬姛", Data: deleteRecord}
+		}
+	} else {
+		return &bhomeclient.Reply{Success: false, Msg: "鍒犻櫎澶辫触", Data: nil}
+	}
+}
+
+/**
  *  鑾峰彇鎶撴媿璁板綍
  */
 func (cc CameraController) GetRecord(h *bhomeclient.WrapperHandler, c *bhomeclient.Request) *bhomeclient.Reply {
@@ -1152,6 +1177,7 @@
 			IsWarning:       v.IsWarning,
 			DetectNum:       v.DetectNum,
 			TaskName:        v.TaskName,
+			WarnTaskName:    v.WarnTaskName,
 			ZhDescClass:     v.ZhDescClass,
 			EventLevelName:  v.EventLevelName,
 			KnowledgeId:     v.KnowledgeId,
@@ -1170,10 +1196,38 @@
 			CameraAddr:      v.CameraName,
 			CameraName:      v.CameraName,
 		}
+		var taskId []int64
 
-		//浠诲姟鍚嶇О
+		//浠诲姟id閲嶆柊璧嬪��
+		if len(v.WarnTaskName) > 0 {
+			v.TaskId = []int64{}
+			taskId = []int64{}
+			arr := strings.Split(v.WarnTaskName, ";")
+			for _, temp := range arr {
+				if len(temp) > 0 {
+
+					tempId, _ := strconv.ParseInt(strings.TrimSpace(temp), 10, 64)
+
+					taskId = append(taskId, tempId)
+				}
+			}
+			v.TaskId = taskId
+		}
 		items, _ := models.GetTaskByIds(v.TaskId)
 		temp.TaskNames = items
+		//浠诲姟鍚嶇О閲嶆柊璧嬪��
+		var result string
+		if len(taskId) > 0 && len(items) > 0 {
+			v.EventLevelId = []int64{}
+			for index, item := range items {
+				v.EventLevelId = append(v.EventLevelId, item.EventLevel)
+				if index > 0 {
+					result += ","
+				}
+				result += item.TaskName
+			}
+			temp.TaskName = result
+		}
 
 		//瑙嗛鍐呭
 		// items4, _ := models.GetVideoById(v.VideoPointId)
@@ -1192,6 +1246,18 @@
 		items5, _ := models.GetEventByIds(v.EventLevelId)
 		temp.EventLevels = items5
 
+		//浜嬩欢绛夌骇閲嶆柊璧嬪��
+		var result2 string
+		if len(taskId) > 0 && len(items5) > 0 {
+			for i, item5 := range items5 {
+				if i > 0 {
+					result2 += ","
+				}
+				result2 += item5.DictValue
+			}
+			temp.EventLevelName = result2
+		}
+
 		//鐭ヨ瘑搴�
 		items6, _ := models.GetKnowledgeDocumentByIds(v.KnowledgeId)
 		// 鐭ヨ瘑搴撹矾寰�
diff --git a/camera-service/main.go b/camera-service/main.go
index 63b71ca..11bbdcc 100644
--- a/camera-service/main.go
+++ b/camera-service/main.go
@@ -132,6 +132,8 @@
 	funcMap[urlPrefix+"/camera/getRecord"] = cc.GetRecord
 	//鑾峰彇浠诲姟鏍规嵁鎽勫儚鏈篿ds
 	funcMap[urlPrefix+"/camera/getTasks"] = cc.GetTasks
+	//鍒犻櫎璁板綍
+	funcMap[urlPrefix+"/clearData/deleteData"] = cc.DelRecord
 
 	funcMap[urlPrefix+"/task/aggregateTaskList"] = cc.GetAllTasks
 
diff --git a/system-service/controllers/voice.go b/system-service/controllers/voice.go
index 76725ac..fb697ba 100644
--- a/system-service/controllers/voice.go
+++ b/system-service/controllers/voice.go
@@ -1,12 +1,13 @@
 package controllers
 
 import (
-	"basic.com/pubsub/protomsg.git"
-	"basic.com/valib/bhomeclient.git"
 	"encoding/json"
-	"github.com/satori/go.uuid"
 	"vamicro/system-service/models"
 	"vamicro/system-service/service"
+
+	"basic.com/pubsub/protomsg.git"
+	"basic.com/valib/bhomeclient.git"
+	uuid "github.com/satori/go.uuid"
 )
 
 type VoiceController struct{}
diff --git a/system-service/main.go b/system-service/main.go
index 8de6947..2df4b7b 100644
--- a/system-service/main.go
+++ b/system-service/main.go
@@ -230,8 +230,8 @@
 	funcMap[urlPrefix+"/test/addServer"] = testController.AddServer
 	funcMap[urlPrefix+"/test/exitServer"] = testController.ExitServer
 
-	deleteDataController := new(controllers.DeleteDataController)
-	funcMap[urlPrefix+"/clearData/deleteData"] = deleteDataController.DeleteEsData
+	// deleteDataController := new(controllers.DeleteDataController)
+	// funcMap[urlPrefix+"/clearData/deleteData"] = deleteDataController.DeleteEsData
 
 	var dac controllers.DevAuthController
 	funcMap[urlPrefix+"/devAuth/authConfig"] = dac.AuthConfig
diff --git a/system-service/sys/sysinfo.go b/system-service/sys/sysinfo.go
index 51693d4..e5ede0e 100644
--- a/system-service/sys/sysinfo.go
+++ b/system-service/sys/sysinfo.go
@@ -12,7 +12,7 @@
 	"vamicro/extend/util"
 
 	"basic.com/valib/gogpu.git"
-
+	"basic.com/valib/logger.git"
 	"github.com/shirou/gopsutil/cpu"
 	"github.com/shirou/gopsutil/disk"
 	"github.com/shirou/gopsutil/host"
@@ -85,11 +85,22 @@
 	cmd := exec.Command("/bin/sh", "-c", "lsblk -d | grep -v part | grep -v SWAP | grep -v M | grep disk | awk '{printf $4\" \"}'")
 	disks, _ := cmd.Output()
 	cpu, _ := cpu.Info()
+	gpuInfo, err := gogpu.Info()
+	var gpuMemTotal int64
+	if err == nil {
+		for _, gpu := range gpuInfo.Info {
+			gpuMemTotal = gpuMemTotal + gpu.GpuMemoryTotal
+		}
+	} else {
+		logger.Debug("gpu error " + err.Error())
+	}
+	gpu := gpuMemTotal
 	mem, _ := mem.VirtualMemory()
 	host, _ := host.Info()
 
 	return util.Struct2Map(map[string]interface{}{
 		"cpu":  cpu,
+		"gpu":  gpu,
 		"mem":  mem,
 		"host": host,
 		"disk": string(disks),
diff --git a/version-control/controller/controller.go b/version-control/controller/controller.go
index 5a4c984..5850caf 100644
--- a/version-control/controller/controller.go
+++ b/version-control/controller/controller.go
@@ -591,6 +591,16 @@
 	auth := util.GetAuthorization()
 	data["expireTime"] = ""
 
+	if len(auth) == 0 {
+		data["sn"] = ""
+		data["authorization"] = ""
+		data["expire"] = false
+		data["edition"] = "trial"
+		data["installTime"] = ""
+		data["q"] = ""
+		return data
+	}
+
 	authInfo, err := util.GetAuthorizationInfo(auth)
 	//logger.Debug("鎺堟潈淇℃伅锛�", authInfo, err, licence.GetMachineCode())
 	if err == nil && authInfo.MachineCode == licence.GetMachineCode() {
diff --git a/version-control/main.go b/version-control/main.go
index 43c9602..0f3c5fe 100644
--- a/version-control/main.go
+++ b/version-control/main.go
@@ -17,7 +17,7 @@
 	"basic.com/valib/bhomeclient.git"
 	"basic.com/valib/bhomedbapi.git"
 	"basic.com/valib/logger.git"
-	"basic.com/valib/version.git"
+	vaversion "basic.com/valib/version.git"
 )
 
 var (
@@ -57,7 +57,7 @@
 
 	err = syscall.Flock(int(lock.Fd()), syscall.LOCK_EX|syscall.LOCK_NB)
 	if err != nil {
-		fmt.Println("report service is running ")
+		fmt.Println("version-control is running ")
 		os.Exit(1)
 	}
 
diff --git a/version-control/service/backup.go b/version-control/service/backup.go
index c4bc786..9493cbc 100644
--- a/version-control/service/backup.go
+++ b/version-control/service/backup.go
@@ -14,14 +14,15 @@
 )
 
 /*
-	绯荤粺澶囦唤銆佸浠借繕鍘熴�佹寜璁剧疆鍛ㄦ湡鎬у浠�
-	澶囦唤鐨勬暟鎹富瑕佸寘鎷瑂qlite鏁版嵁銆乧onfig浠ュ強exe(鎸夐渶瑕�)
-	鎸夐挳鍙互瑙﹀彂绔嬪嵆澶囦唤
-	鍙傛暟:
-		1.澶囦唤寮�鍏�
-		2.澶囦唤鐩綍鏂囦欢澶�(/opt/vasystem/backup_auto)
-		3.澶囦唤鍛ㄦ湡(姣�7澶╁浠戒竴娆�,澶囦唤鏃堕棿鏄闂�0鐐�)
-		4.澶囦唤鏁版嵁淇濆瓨鏃堕棿
+绯荤粺澶囦唤銆佸浠借繕鍘熴�佹寜璁剧疆鍛ㄦ湡鎬у浠�
+澶囦唤鐨勬暟鎹富瑕佸寘鎷瑂qlite鏁版嵁銆乧onfig浠ュ強exe(鎸夐渶瑕�)
+鎸夐挳鍙互瑙﹀彂绔嬪嵆澶囦唤
+鍙傛暟:
+
+	1.澶囦唤寮�鍏�
+	2.澶囦唤鐩綍鏂囦欢澶�(/opt/vasystem/backup_auto)
+	3.澶囦唤鍛ㄦ湡(姣�7澶╁浠戒竴娆�,澶囦唤鏃堕棿鏄闂�0鐐�)
+	4.澶囦唤鏁版嵁淇濆瓨鏃堕棿
 */
 func BakSchedule(ctx context.Context) {
 	// tk := time.NewTicker(time.Minute)
@@ -37,7 +38,7 @@
 	}
 }
 
-//鑷姩娓呯悊澶т簬淇濆瓨鏃堕棿鐨勫浠芥暟鎹�
+// 鑷姩娓呯悊澶т簬淇濆瓨鏃堕棿鐨勫浠芥暟鎹�
 func removeCheck() {
 	var ab models.AutoBackupConf
 	i, e := ab.Select()
@@ -144,9 +145,12 @@
 	os.Mkdir(recoverBakDir, os.ModePerm)
 	util.CopyDirByCmd("/opt/vasystem/config", recoverBakDir)
 
+	// _, err := exec.Command("/bin/sh", "-c", fmt.Sprintf(`
+	// 	/opt/vasystem/killAllProcs.sh &&
+	// 	cp -rf %s/* /opt/vasystem/config/ &&
+	// 	/opt/vasystem/daemon.sh`, dir)).Output()
 	_, err := exec.Command("/bin/sh", "-c", fmt.Sprintf(`
-		/opt/vasystem/procs/killAllProcs.sh && 
-		cp -rf %s/* /opt/vasystem/config/ && 
-		/opt/vasystem/daemon.sh`, dir)).Output()
+	cp -rf %s/* /opt/vasystem/ && 
+	/opt/vasystem/daemon.sh`, dir)).Output()
 	return err
 }

--
Gitblit v1.8.0