From 03880bf61cf059f063e252ef17dfea50c932c9dc Mon Sep 17 00:00:00 2001
From: qixiaoning <jony.kee@outlook.com>
Date: 星期三, 12 十一月 2025 09:11:03 +0800
Subject: [PATCH] 清理数据接口修改

---
 camera-common/models/Record.go |  177 ++++++++++++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 164 insertions(+), 13 deletions(-)

diff --git a/camera-common/models/Record.go b/camera-common/models/Record.go
index 0e238e9..0cbc697 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,135 @@
 	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),
+	)
+
+	if err != nil {
+
+	}
+
+	// 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)
+				}
+			}
+		}
+	}
+	// 鍥剧墖鍒犻櫎鏂囦欢
+	deletedFiles := 0
+	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)
+		}
+		deletedFiles = len(ids)
+	}
+
+	for _, path := range imgPaths {
+		if err := do.deleteFile(path); err != nil {
+			logger.Debug("failed to delete file " + path + " " + err.Error())
+		}
+	}
+	//鍒犻櫎鎻忚堪鍥剧墖
+	for _, path := range imgDesPaths {
+		if err := do.deleteFile(path); err != nil {
+			logger.Debug("failed to delete file " + path + " " + err.Error())
+		}
+	}
+
+	//鍒犻櫎瑙嗛鏂囦欢
+	for _, path := range videoPaths {
+		if err := do.deleteFile(path); err != nil {
+			logger.Debug("failed to delete file " + path + " " + err.Error())
+		}
+	}
+
+	//鍒犻櫎rag
+	err = do.client.client.Delete(ctx, "smartrag", "", filterExpr)
+	if err != nil {
+		logger.Debug("delete rag failed!")
+	}
+
+	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 +414,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 {
@@ -352,8 +491,8 @@
 		[]string{}, // 鎵�鏈夊垎鍖�
 		filterExpr,
 		[]string{"rule_id", "task_id", "is_waning", "zh_desc_class", "task_name", "event_level_name", "detect_num",
-			"event_level_id", "video_point_id", "detect_id", "image_path",
-			"video_path", "detect_time", "knowledge_id", "risk_description", "suggestion", "id", "is_desc"}, // 杩斿洖鎵�鏈夊瓧娈�
+			"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", "warn_task_id"}, // 杩斿洖鎵�鏈夊瓧娈�
 		// client.WithLimit(pageSize),
 		// client.WithOffset(offset),
 	)
@@ -363,15 +502,27 @@
 	lists := convertResultToMap(result)
 	layout := "2006-01-02 15:04:05.999999"
 
-	var temp1 time.Time
-	var temp2 time.Time
+	// var temp1 time.Time
+	// var temp2 time.Time
 
-	//鎺掑簭
+	// //鎺掑簭
+	// sort.Slice(lists, func(i, j int) bool {
+	// 	//return lists[i].DetectTime > lists[j].:DetectTime
+	// 	temp1, _ = time.Parse(layout, lists[i].DetectTime)
+	// 	temp2, _ = time.Parse(layout, lists[j].DetectTime)
+	// 	return temp1.After(temp2)
+	// })
+
 	sort.Slice(lists, func(i, j int) bool {
-		//return lists[i].DetectTime > lists[j].:DetectTime
-		temp1, _ = time.Parse(layout, lists[i].DetectTime)
-		temp2, _ = time.Parse(layout, lists[j].DetectTime)
-		return temp1.After(temp2)
+		t1, err1 := time.Parse(layout, lists[i].DetectTime)
+		t2, err2 := time.Parse(layout, lists[j].DetectTime)
+
+		// 閿欒澶勭悊锛氳В鏋愰敊璇殑鏃堕棿鎺掑湪鍚庨潰
+		if err1 != nil || err2 != nil {
+			return err1 == nil && err2 != nil
+		}
+
+		return t1.After(t2)
 	})
 
 	items := Paginate(lists, int(pageNum), int(pageSize))
@@ -422,8 +573,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

--
Gitblit v1.8.0