mirror of
https://github.com/ctwj/urldb.git
synced 2025-11-25 03:15:04 +08:00
105 lines
2.7 KiB
Go
105 lines
2.7 KiB
Go
package entity
|
||
|
||
import (
|
||
"encoding/json"
|
||
"fmt"
|
||
|
||
"github.com/ctwj/urldb/db/dto"
|
||
)
|
||
|
||
// SetInputData 设置输入数据(将结构体转换为JSON字符串)
|
||
func (item *TaskItem) SetInputData(data interface{}) error {
|
||
jsonData, err := json.Marshal(data)
|
||
if err != nil {
|
||
return fmt.Errorf("序列化输入数据失败: %v", err)
|
||
}
|
||
item.InputData = string(jsonData)
|
||
return nil
|
||
}
|
||
|
||
// GetInputData 获取输入数据(根据任务类型解析JSON)
|
||
func (item *TaskItem) GetInputData(taskType TaskType) (interface{}, error) {
|
||
if item.InputData == "" {
|
||
return nil, fmt.Errorf("输入数据为空")
|
||
}
|
||
|
||
switch taskType {
|
||
case TaskTypeBatchTransfer:
|
||
var data dto.BatchTransferInputData
|
||
err := json.Unmarshal([]byte(item.InputData), &data)
|
||
if err != nil {
|
||
return nil, fmt.Errorf("解析批量转存输入数据失败: %v", err)
|
||
}
|
||
return data, nil
|
||
default:
|
||
// 对于未知任务类型,返回原始JSON数据
|
||
var data map[string]interface{}
|
||
err := json.Unmarshal([]byte(item.InputData), &data)
|
||
if err != nil {
|
||
return nil, fmt.Errorf("解析输入数据失败: %v", err)
|
||
}
|
||
return data, nil
|
||
}
|
||
}
|
||
|
||
// SetOutputData 设置输出数据(将结构体转换为JSON字符串)
|
||
func (item *TaskItem) SetOutputData(data interface{}) error {
|
||
jsonData, err := json.Marshal(data)
|
||
if err != nil {
|
||
return fmt.Errorf("序列化输出数据失败: %v", err)
|
||
}
|
||
item.OutputData = string(jsonData)
|
||
return nil
|
||
}
|
||
|
||
// GetOutputData 获取输出数据(根据任务类型解析JSON)
|
||
func (item *TaskItem) GetOutputData(taskType TaskType) (interface{}, error) {
|
||
if item.OutputData == "" {
|
||
return nil, fmt.Errorf("输出数据为空")
|
||
}
|
||
|
||
switch taskType {
|
||
case TaskTypeBatchTransfer:
|
||
var data dto.BatchTransferOutputData
|
||
err := json.Unmarshal([]byte(item.OutputData), &data)
|
||
if err != nil {
|
||
return nil, fmt.Errorf("解析批量转存输出数据失败: %v", err)
|
||
}
|
||
return data, nil
|
||
default:
|
||
// 对于未知任务类型,返回原始JSON数据
|
||
var data map[string]interface{}
|
||
err := json.Unmarshal([]byte(item.OutputData), &data)
|
||
if err != nil {
|
||
return nil, fmt.Errorf("解析输出数据失败: %v", err)
|
||
}
|
||
return data, nil
|
||
}
|
||
}
|
||
|
||
// GetDisplayName 获取显示名称(用于前端显示)
|
||
func (item *TaskItem) GetDisplayName(taskType TaskType) string {
|
||
inputData, err := item.GetInputData(taskType)
|
||
if err != nil {
|
||
return fmt.Sprintf("TaskItem#%d", item.ID)
|
||
}
|
||
|
||
switch taskType {
|
||
case TaskTypeBatchTransfer:
|
||
if data, ok := inputData.(dto.BatchTransferInputData); ok {
|
||
return data.Title
|
||
}
|
||
}
|
||
|
||
return fmt.Sprintf("TaskItem#%d", item.ID)
|
||
}
|
||
|
||
// AddProcessLog 添加处理日志
|
||
func (item *TaskItem) AddProcessLog(message string) {
|
||
if item.ProcessLog == "" {
|
||
item.ProcessLog = message
|
||
} else {
|
||
item.ProcessLog += "\n" + message
|
||
}
|
||
}
|